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

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func main() {
	const M = 1000000007

	X := readInt()
	Y := readInt()

	if (X+Y)%3 != 0 {
		fmt.Println(0)
		return
	}

	a := X - (X+Y)/3
	b := Y - (X+Y)/3

	if a < 0 || b < 0 {
		fmt.Println(0)
		return
	}

	dp := make([][]int, b+1)
	for i := 0; i < b+1; i++ {
		dp[i] = make([]int, a+1)
	}

	dp[0][0] = 1
	for i := 0; i < b; i++ {
		for j := 0; j < a; j++ {
			dp[i][j+1] = (dp[i][j+1] + dp[i][j]) % M
			dp[i+1][j] = (dp[i+1][j] + dp[i][j]) % M
		}
		dp[i+1][a] = (dp[i+1][a] + dp[i][a]) % M
	}
	for j := 0; j < a; j++ {
		dp[b][j+1] = (dp[b][j+1] + dp[b][j]) % M
	}
	fmt.Println(dp[b][a])
}

const (
	ioBufferSize = 1 * 1024 * 1024 // 1 MB
)

var stdinScanner = func() *bufio.Scanner {
	result := bufio.NewScanner(os.Stdin)
	result.Buffer(make([]byte, ioBufferSize), ioBufferSize)
	result.Split(bufio.ScanWords)
	return result
}()

func readString() string {
	stdinScanner.Scan()
	return stdinScanner.Text()
}

func readInt() int {
	result, err := strconv.Atoi(readString())
	if err != nil {
		panic(err)
	}
	return result
}