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 Kotlin (1.0.0) (judge verdict: Runtime Error)

fun main(args:Array<String>) { 
  val list = readLine()!!.split(" ").map(String::toInt)

  val min = list.min()!!


  // 最小値を引き、基底をつくる

  val list2 = list.map { it - min }
  
  var cost:Int

  // 残り２つが同じ大きさの時
  if( list2.filter { it != 0 }.size == 1 ) {
    cost = list2.max()!! // <- 最大値の数だけコストがかかる
    println(cost)
    return 
  }

  // 大、中、小で構成されている時
  val max2 = list2.max()!!
  val min2 = list2.min()!!
  val mid2 = list2.filter { it != max2 && it != min2 }.first()

  // max2 - mid2が1を繰り返す回数
  val onetimes = max2 - mid2 

  // 1を繰り返した結果、残りが偶数であれば、2で割った数
  val nokori = max2 - ( min2 + onetimes )

  if( nokori%2 == 0 )  {
    cost = nokori/2 + onetimes
  } else {
    cost = nokori/2+1+1+onetimes
  }
  println(cost)
}