#include<bits/stdc++.h>
using namespace std;
#define ll long long

ll com(ll N, ll K, ll M) {
  ll a = 1, b = 1, c = 1, d = 1;
  for (ll h = 1; h <= N; h++) a= (a*h)%M;
  for (ll i = 1; i <= N-K; i++) b = (b*i)%M;
  for (ll j = 1; j <=K; j++) c = (c*j)%M;
  ll e = (b*c)%M, m_ = M-2;
  while(m_ != 0) {
    if (m_&1) d = (d*e)%M;
    e = e*e%M;
    m_ = m_ >> 1;
  }
  return (a*d)%M;
}

int main() {
  const ll mod = 1000000007;
  ll X,Y;
  cin >> X >> Y;
  const bool can_go = (Y <= 2*X && 2*Y >= X && (X+Y)%3 == 0);
  if (!can_go) cout << 0 << endl;
  else {
    ll ans = 0;
    ll m = (X+Y)/3;
    ll up2 = (2*X-Y)/3;
    cout << com(m,up2,mod) << endl;
  } 
  return 0;
}
### Prompt

Develop a solution in Cpp to the problem described below:

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.

Examples

Input

3 3


Output

2


Input

2 2


Output

0


Input

999999 999999


Output

151840682

### Response

```cpp
#include<bits/stdc++.h>
using namespace std;
#define ll long long

ll com(ll N, ll K, ll M) {
  ll a = 1, b = 1, c = 1, d = 1;
  for (ll h = 1; h <= N; h++) a= (a*h)%M;
  for (ll i = 1; i <= N-K; i++) b = (b*i)%M;
  for (ll j = 1; j <=K; j++) c = (c*j)%M;
  ll e = (b*c)%M, m_ = M-2;
  while(m_ != 0) {
    if (m_&1) d = (d*e)%M;
    e = e*e%M;
    m_ = m_ >> 1;
  }
  return (a*d)%M;
}

int main() {
  const ll mod = 1000000007;
  ll X,Y;
  cin >> X >> Y;
  const bool can_go = (Y <= 2*X && 2*Y >= X && (X+Y)%3 == 0);
  if (!can_go) cout << 0 << endl;
  else {
    ll ans = 0;
    ll m = (X+Y)/3;
    ll up2 = (2*X-Y)/3;
    cout << com(m,up2,mod) << endl;
  } 
  return 0;
}
```