Problem:
Score: 100 points

Problem Statement

We have two distinct integers A and B.

Print the integer K such that |A - K| = |B - K|.

If such an integer does not exist, print IMPOSSIBLE instead.

Constraints

All values in input are integers.

0 \leq A,\ B \leq 10^9

A and B are distinct.

Input

Input is given from Standard Input in the following format:

A B

Output

Print the integer K satisfying the condition.

If such an integer does not exist, print IMPOSSIBLE instead.

Sample Input 1

2 16

Sample Output 1

9

|2 - 9| = 7 and |16 - 9| = 7, so 9 satisfies the condition.

Sample Input 2

0 3

Sample Output 2

IMPOSSIBLE

No integer satisfies the condition.

Sample Input 3

998244353 99824435

Sample Output 3

549034394

Solution in C (GCC 5.4.1) (judge verdict: Runtime Error)

#include <stdio.h>

int main(void) {
    long n, i;
    scanf("%ld", &n);
    long a[n + 1], b[n];
    for ( i = 0; i <= n; i++ ) {
        scanf("%ld", &a[i]);
    }
    for ( i = 0; i < n; i++ ) {
        scanf("%ld", &b[i]);
    }

    long ans = 0, remain_a = 0, remain_b = 0;
    /* 1 番目の街から n 番目の街までを考える */
    for ( i = 0; i < n; i++ ) {
        /* (i - 1) 番目の街の残り戦力を使う */
        remain_a = a[i] - remain_b;
        /* 残り戦力で倒しきれていたら i 番目の街の戦力は残る */
        if ( remain_a <= 0 ) {
            ans += a[i];
            remain_b = b[i];
        }
        /* 倒しきれなかったら i 番目の街の戦力を使用する */
        else {
            remain_a -= b[i];
            /* i 番目の街の戦力で倒しきれていたら余りを持ち越す */
            if ( remain_a <= 0 ) {
                ans += a[i];
                remain_b = 0 - remain_a;
            }
            /* i 番目の街の戦力でも倒しきれなかったら余りはなし */
            else {
                ans += (remain_b + b[i]);
                remain_b = 0;
            }
        }
    }
    /* (n + 1) 番目の街は n 番目の街の残り戦力しかない */
    if ( a[n] > remain_b ) {
        ans += remain_b;
    }
    else {
        ans += a[n];
    }
    printf("%ld\n", ans);
    return 0;
}