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 C (GCC 5.4.1) (judge verdict: Runtime Error)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

#define num_max(p,q)((p)>(q)?(p):(q))
#define num_min(p,q)((p)<(q)?(p):(q))
int cmp(const void *a, const void *b)
{
	return *(int*)a - *(int*)b;//昇順
	 //降順ならreturn *(int*)b - *(int*)a;
}
int main()
{
	long int X, Y, i, j;
	scanf("%ld%ld", &X, &Y);
	long int(*dp)[1000001] = (long int(*)[1000001])
		malloc(10000001 * 1000001 * sizeof(long int));
	 if (dp == NULL)
	 {
		 printf("めもり確保エラー\n");
		 return -1;
	 }
	 
	 dp[1][2] = 1;
	 dp[2][1] = 1;
	 for (i = 1;i <= X;i++) {
		 for (j = 2;j <= Y;j++) {
			 dp[i + 2][j + 1] = dp[i][j] + 1;
			 dp[j + 1][i + 2] = dp[j][i] + 1;
		 }
	 }
	
	printf("%ld\n", dp[X][Y] % 1000000007);
	free(dp);
	return 0;
}