55 lines
895 B
Python
55 lines
895 B
Python
|
|
def problem_p02862(input_data):
|
||
|
|
X, Y = list(map(int, input_data.split()))
|
||
|
|
|
||
|
|
import sys
|
||
|
|
|
||
|
|
if (2 * Y - X) % 3 != 0 or (2 * X - Y) % 3 != 0:
|
||
|
|
|
||
|
|
return 0
|
||
|
|
|
||
|
|
sys.exit()
|
||
|
|
|
||
|
|
if (2 * Y - X) < 0 or (2 * X - Y) < 0:
|
||
|
|
|
||
|
|
return 0
|
||
|
|
|
||
|
|
sys.exit()
|
||
|
|
|
||
|
|
x = (2 * Y - X) // 3
|
||
|
|
|
||
|
|
y = (2 * X - Y) // 3
|
||
|
|
|
||
|
|
# (x+y)Cxを求める
|
||
|
|
|
||
|
|
fac = [0 for i in range(x + y + 1)]
|
||
|
|
|
||
|
|
inv = [0 for i in range(x + y + 1)]
|
||
|
|
|
||
|
|
finv = [0 for i in range(x + y + 1)]
|
||
|
|
|
||
|
|
# 初期条件
|
||
|
|
|
||
|
|
p = 1000000007
|
||
|
|
|
||
|
|
fac[0] = fac[1] = 1
|
||
|
|
|
||
|
|
inv[1] = 1
|
||
|
|
|
||
|
|
finv[0] = finv[1] = 1
|
||
|
|
|
||
|
|
# テーブルの作成
|
||
|
|
|
||
|
|
for i in range(2, x + y + 1):
|
||
|
|
|
||
|
|
fac[i] = fac[i - 1] * i % p
|
||
|
|
|
||
|
|
# p=(p//a)*a+(p%a) a^(-1)=-(p//a)*(p%a)^(-1)
|
||
|
|
|
||
|
|
inv[i] = (-(p // i) * inv[p % i]) % p
|
||
|
|
|
||
|
|
finv[i] = finv[i - 1] * inv[i] % p
|
||
|
|
|
||
|
|
# 求める
|
||
|
|
|
||
|
|
return (fac[x + y] * finv[x] % p) * finv[y] % p
|