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: Runtime Error)

#include <bits/stdc++.h> 

using namespace std;
using ll=long long;
using ull=unsigned long long;
using pii=pair<int,int>;

#define INF LONG_MAX
#define MOD 1000000007
#define rng(a) a.begin(),a.end()
#define rrng(a) a.end(),a.begin()

#define Max 10000000
ll fact[Max],fact_inv[Max];

ll power(ll a,ll b){
  ll res=1;
  while(b>0){
    if(b&1)res=res*a%MOD;
    a=a*a%MOD;
    b>>=1;
  }
  return res;
}

ll comb(ll n,ll r){
  return (fact[n]*fact_inv[r])%MOD*fact_inv[n-r]%MOD;
}

int main(){
  ios::sync_with_stdio(false);
  cin.tie(0);

  fact[0]=1;
  for(int i=0;i<Max-1;i++)fact[i+1]=fact[i]*(i+1)%MOD;
  fact_inv[Max-1]=power(fact[Max-1],MOD-2);
  for(int i=Max-2;i>=0;i--)fact_inv[i]=fact_inv[i+1]*(i+1)%MOD;
  ll X,Y;
  cin>>X>>Y;
  ll D=X+Y;
  if(D%3){
    cout<<0<<endl;
    return 0;
  }
  D/=3;
  ll n;
  ll DD=X-Y;
  if(X-Y>=0){
    n=(D-(X-Y))/2+(X-Y);
  }
  else{
    n=(D+(X-Y))/2;
  }
  cout<<comb(D,n)<<endl;
  return 0;
}