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 PHP7 (7.0.15) (judge verdict: Time Limit Exceeded)

<?php
define('MOD', pow(10, 9) + 7);
define('N_MAX', 1000000);

function nCr($n, $r) { 
    global $fact, $rfact;
    $ret = 1;
    $ret *= $fact[$n];
    $ret %= MOD;
    $ret *= $rfact[$r];
    $ret %= MOD;
    $ret *= $rfact[$n-$r];
    $ret %= MOD;
    return $ret;
}

function modpow($a, $b){
    $r = 1;
    while($b){
        if($b & 1) $r *= $a;
        if($r >= MOD) $r %= MOD;
        $a *= $a;
        if($a >= MOD) $a %= MOD;
        $b >>= 1;
    }
    return $r;
}

$fact[0]=1;
for ($i = 1; $i < N_MAX; $i++) {
  $fact[$i] = $fact[$i-1]*$i;
  $fact[$i] %= MOD;
}
$rfact[0]=1;
for ($i = 1; $i < N_MAX; $i++) {
  $rfact[$i] = $rfact[$i-1]*modpow($i,MOD-2);
  $rfact[$i] %= MOD;
}

$ans = 0;
fscanf(STDIN, "%d %d", $X, $Y);
$Z = $X + $Y;
if ($Z % 3 === 0) {
    $ZZ = $Z / 3;
    $X -= $ZZ;
    $Y -= $ZZ;
    echo "{$X} {$Y} \n";
    $ans = nCr($X + $Y, $Y);
    echo $ans . PHP_EOL;
} else {
    echo "0";
}