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

long inv(int a, int m) {
    long i = 1, j = 0;
    for(int b = m; a > 1; swap(i, j), swap(a, b)) {
        j = (j + b / a * (m - i)) % m;
        b %= a;
    }
    return i;
}
long f[2222222] = {1};
int main() {
    int x, y, p = 1e9 + 7;
    cin >> x >> y;
    int a = (x + y) / 3;
    if((x + y) % 3 || a > x || a > y) {
        cout << 0 << endl;
        return 0;
    }
    x -= a, y -= a;
    for(int i = 0; i < x + y; i++)
        f[i + 1] = f[i] * (i + 1) % p;
    cout << f[x + y] * inv(f[x] * f[y] % p, p) % p << endl;
    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;

long inv(int a, int m) {
    long i = 1, j = 0;
    for(int b = m; a > 1; swap(i, j), swap(a, b)) {
        j = (j + b / a * (m - i)) % m;
        b %= a;
    }
    return i;
}
long f[2222222] = {1};
int main() {
    int x, y, p = 1e9 + 7;
    cin >> x >> y;
    int a = (x + y) / 3;
    if((x + y) % 3 || a > x || a > y) {
        cout << 0 << endl;
        return 0;
    }
    x -= a, y -= a;
    for(int i = 0; i < x + y; i++)
        f[i + 1] = f[i] * (i + 1) % p;
    cout << f[x + y] * inv(f[x] * f[y] % p, p) % p << endl;
    return 0;
}

```