Problem:
Score : 300 points

Problem Statement

You are given three integers A, B and C. Find the minimum number of operations required to make A, B and C all equal by repeatedly performing the following two kinds of operations in any order:

Choose two among A, B and C, then increase both by 1.

Choose one among A, B and C, then increase it by 2.

It can be proved that we can always make A, B and C all equal by repeatedly performing these operations.

Constraints

0 \leq A,B,C \leq 50

All values in input are integers.

Input

Input is given from Standard Input in the following format:

A B C

Output

Print the minimum number of operations required to make A, B and C all equal.

Sample Input 1

2 5 4

Sample Output 1

2

We can make A, B and C all equal by the following operations:

Increase A and C by 1. Now, A, B, C are 3, 5, 5, respectively.

Increase A by 2. Now, A, B, C are 5, 5, 5, respectively.

Sample Input 2

2 6 3

Sample Output 2

5

Sample Input 3

31 41 5

Sample Output 3

23

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>

#define debug(x) cout << #x << " = " << x << endl
#define fori(i, ini, lim) for(int i = int(ini); i < int(lim); i++)
#define ford(i, ini, lim) for(int i = int(ini); i >= int(lim); i--)

using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;

const int MAX = 200 + 5;
const int INF = 1 << 29;
int memo[MAX][MAX][MAX];

int roll(int a, int b, int c) {
	if(a == b && b == c) {
		return 0;
	}
	else if(max({a, b, c}) >= MAX) {
		return INF;
	}
	int &ans = memo[a][b][c];
	if(~ans) {
		return ans;
	}
	ans = INF;
	ans = min({roll(a + 1, b + 1, c), roll(a + 1, b, c + 1), roll(a, b + 1, c + 1), roll(a + 2, b, c), roll(a, b + 2, c), roll(a, b, c + 2)}) + 1;
	return ans;
}


int main() {
	ios_base::sync_with_stdio(false);

	int a, b, c;
	cin >> a >> b >> c;

	memset(memo, -1, sizeof memo);
	cout << roll(a, b, c) << '\n';

	return 0;
}