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<cstring>
#include<queue>
#include<map>
#include<set>
#include<cmath>
#include<stack>
#include<cstdio>
#include<sstream>
#include<vector>
#include<algorithm>
#include<unordered_map>

using namespace std;
#define read(x) scanf("%d",&x)
#define Read(x,y) scanf("%d%d",&x,&y)
#define gc(x)  scanf(" %c",&x);
#define mmt(x,y)  memset(x,y,sizeof x)
#define write(x) printf("%d\n",x)
#define pii pair<int,int>
#define INF 0x3f3f3f3f
#define ll long long
#define mod (ll)(1e9 + 7)
const int N = 1e6 + 5;
const int M = 1e6 + 5;
long long c(int n,int m)//求组合数c(n,m)；这里一开始写的是递归的形式，结果超时。
{
    long long x=1;
    for(int i=1;i<=m;i++)
        x=x*(n-i+1)/i%mod;
    return x;
}
int main()
{
    ll x,y;
    cin>>x>>y;
    if((x + y)%3!=0) return cout<<0,0;
    ll num = (x + y) /3;
    if(x <= 2*num&&x >= num&&y <= 2*num&&y >= num) {}
    else return cout<<0,0;
   // cout<<"YES"<<endl;
    ll a = num,b = 2*num;
    ll sum = 0;
    while(a != x&&b != y){
         a ++;b --;
         sum ++;
    }
    if(sum == 0 || sum == num) cout<<1;
    else cout<<c(num,sum);
   // cout<<c(num,sum);

}