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)

#define _USE_MATH_DEFINES
#include <iostream>
#include <string>
#include <list>
#include <vector>
#include <queue>
#include <algorithm>
#include <climits>
#include <cstring>
#include <cmath>
#include <stack>
#include <iomanip>
#include <tuple>
#include <functional>
#include <cfloat>
#include <map>

#define int long long
#define CONTAINS(v,n) (find((v).begin(), (v).end(), (n)) != (v).end())
#define SORT(v) sort((v).begin(), (v).end())
#define RSORT(v) sort((v).rbegin(), (v).rend())
#define ARY_SORT(a, size) sort((a), (a)+(size))
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#define REMOVE(v,a) (v.erase(remove((v).begin(), (v).end(), (a)), (v).end()))
#define REVERSE(v) (reverse((v).begin(), (v).end()))
#define LOWER_BOUND(v,a) (lower_bound((v).begin(), (v).end(), (a)))
#define UPPER_BOUND(v,a) (upper_bound((v).begin(), (v).end(), (a)))
#define REP(i, n) for (int (i) = 0; (i) < (n); (i)++)
#define CONTAINS_MAP(m, a) (m).find((a)) != m.end()
using namespace std;

signed main()
{
	int A[3];
	cin >> A[0] >> A[1] >> A[2];

	int ans = 0;
	while (true)
	{
		if (A[0] == A[1] && A[1] == A[2]) break;

		for (int i = 0; i < 2; i++)
		{
			int min = INT_MAX;
			int min_j = 0;

			for (int j = 0; j < 3; j++)
			{
				if (min > A[j])
				{
					min = A[j];
					min_j = j;
				}
			}
			A[min_j]++;
		}

		ans++;
	}
	cout << ans << endl;


	//int A[3];
	//int ans = 0;
	//cin >> A[0] >> A[1] >> A[2];
	//int max = MAX(A[0], MAX(A[1], A[2]));
	//for (int i = 0; i < 3; i++)
	//{
	//	int cnt = (max - A[i]) / 2;
	//	A[i] += cnt * 2;
	//	ans += cnt;
	//}

	//while (true)
	//{
	//	if (A[0] == A[1] && A[1] == A[2]) break;

	//	int min = INT_MAX;
	//	int min_i = 0;
	//	for (int i = 0; i < 3; i++)
	//	{

	//	}
	//	
	//}
	//cout << ans << endl;
}