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

using ll = long long;
const int mod = 1e9+7;
const int N = 2e6+23;

int f[N];

int binpow(long long b, long long e) {
  if (!e) return 1;
  if (e&1) return b*binpow(b, e-1)%mod;
  return binpow(b*b%mod, e/2);
}
int C(int n, int k) {
  if(n - k < 0){
    cout << 0;
    exit(0);
  }
  return 1LL * f[n] * binpow(f[k], mod-2) % mod * binpow(f[n-k], mod-2) % mod;
}

int main() {

  ll x, y;
  cin >> x >> y;
  f[0] = 1;
  for (int i = 1; i <= 1000001; ++i) {
    f[i] = 1LL * f[i-1] * i % mod;
  }
  if(2 * x - y < 0) cout << "0";
  else if((x + y) % 3 != 0)cout << "0";
  else cout << C((x + y) / 3, (2 * x - y ) / 3);

  return 0;
}

### Prompt

Your task is to create a Cpp solution to the following problem:

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;

using ll = long long;
const int mod = 1e9+7;
const int N = 2e6+23;

int f[N];

int binpow(long long b, long long e) {
  if (!e) return 1;
  if (e&1) return b*binpow(b, e-1)%mod;
  return binpow(b*b%mod, e/2);
}
int C(int n, int k) {
  if(n - k < 0){
    cout << 0;
    exit(0);
  }
  return 1LL * f[n] * binpow(f[k], mod-2) % mod * binpow(f[n-k], mod-2) % mod;
}

int main() {

  ll x, y;
  cin >> x >> y;
  f[0] = 1;
  for (int i = 1; i <= 1000001; ++i) {
    f[i] = 1LL * f[i-1] * i % mod;
  }
  if(2 * x - y < 0) cout << "0";
  else if((x + y) % 3 != 0)cout << "0";
  else cout << C((x + y) / 3, (2 * x - y ) / 3);

  return 0;
}

```