Problem:
Score : 400 points

Problem Statement

There is a knight - the chess piece - at the origin (0, 0) of a two-dimensional grid.

When the knight is at the square (i, j), it can be moved to either (i+1,j+2) or (i+2, j+1).

In how many ways can the knight reach the square (X, Y)?

Find the number of ways modulo 10^9 + 7.

Constraints

1 \leq X \leq 10^6

1 \leq Y \leq 10^6

All values in input are integers.

Input

Input is given from Standard Input in the following format:

X Y

Output

Print the number of ways for the knight to reach (X, Y) from (0, 0), modulo 10^9 + 7.

Sample Input 1

3 3

Sample Output 1

2

There are two ways: (0,0) \to (1,2) \to (3,3) and (0,0) \to (2,1) \to (3,3).

Sample Input 2

2 2

Sample Output 2

0

The knight cannot reach (2,2).

Sample Input 3

999999 999999

Sample Output 3

151840682

Print the number of ways modulo 10^9 + 7.

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

#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<stdio.h>
#include<deque>
#include<map>
#include<queue>

typedef long long ll;

#define debug(x) cout << #x << "=" << x << endl;
#define debug_arr(a, n) for(ll i = 0; i < n; i++)cout << a[i] << " "
#define inf 100000000000
#define loop(i,n) for(ll i = 0; i < n; i++)
#define graph vector<vector<ll>>
#define P pair<ll,ll>

using namespace std;

ll mod = 1000000007;

ll multipy(ll a, ll b){
    return (a * b) % mod;
}

ll exp(ll x, ll n){
    if(n == 1)return x;
    if(n % 2 == 1) return multipy(exp(x,n-1) ,x );

    ll a = exp(x, n/2);
    return multipy(a,a);
}

// aCb
ll combination(ll a,ll b){
    ll result = 1;

    for(ll i=a; i>a-b; i--){
        result = multipy(i,result);
    }

    ll bunbo = 1;
    for(ll i = 1; i <= b; i++){
        bunbo = multipy(bunbo,i);
    }


    bunbo = exp(bunbo, mod - 2);

    return multipy(bunbo, result);

}

int main(){
    ll x,y,a,b;
    cin >>x >>y;

    ll haveAnswer = 0;

    for(ll i = 1;i<= x;i++){
        a = i;
        if((x - i) % 2 == 1) continue;
        b = (x - i) / 2;
        if(y == b + a * 2) {
            haveAnswer = 1;
            break;
        }
    }
    
    if(!haveAnswer){
        cout << 0 << endl;
        return 0;
    }

    ll result;
    result =  combination(a+b,a);

    cout << result << endl;

    return 0;
}