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
 
ini_set('memory_limit', -1);

fscanf(STDIN, "%d %d", $X, $Y);
$N_MAX = intdiv($X + $Y, 3) + 2; 

define ('MOD', 1000000007);
define ('N_MAX', $N_MAX);
 
//long long fact[N_MAX];
//long long rfact[N_MAX];
 
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;
}
 
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;
}
 
$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;
}

if (($X + $Y) % 3 === 0) {
	$Z = $X + $Y;
	$Z /= 3;
	$X -= $Z;
	$Y -= $Z;
	$ans = nCr($X+$Y,$X);
	$ans %= MOD;
	echo $ans;
} else {
	echo "0";
}