output_description: Print the number of ways for the knight to reach (X, Y) from (0, 0), modulo
  10^9 + 7.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      X Y
attempt: # -*- coding: utf-8 -*-
  
  import sys
  
  
  def input():
      return sys.stdin.readline().strip()
  
  
  def list2d(a, b, c):
      return [[c] * b for i in range(a)]
  
  
  def list3d(a, b, c, d):
      return [[[d] * c for j in range(b)] for i in range(a)]
  
  
  def list4d(a, b, c, d, e):
      return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)]
  
  
  def ceil(x, y=1):
      return int(-(-x // y))
  
  
  def INT():
      return int(input())
  
  
  def MAP():
      return map(int, input().split())
  
  
  def LIST(N=None):
      return list(MAP()) if N is None else [INT() for i in range(N)]
  
  
  def Yes():
      print("Yes")
  
  
  def No():
      print("No")
  
  
  def YES():
      print("YES")
  
  
  def NO():
      print("NO")
  
  
  sys.setrecursionlimit(10**9)
  INF = 10**18
  MOD = 10**9 + 7
  
  
  class ModTools:
      """階乗たくさん使う時用のテーブル準備"""
  
      def __init__(self, MAX, MOD):
          """MAX：階乗に使う数値の最大以上まで作る"""
  
          MAX += 1
          self.MAX = MAX
          self.MOD = MOD
          # 階乗テーブル
          factorial = [1] * MAX
          factorial[0] = factorial[1] = 1
          for i in range(2, MAX):
              factorial[i] = factorial[i - 1] * i % MOD
          # 階乗の逆元テーブル
          inverse = [1] * MAX
          # powに第三引数入れると冪乗のmod付計算を高速にやってくれる
          inverse[MAX - 1] = pow(factorial[MAX - 1], MOD - 2, MOD)
          for i in range(MAX - 2, 0, -1):
              # 最後から戻っていくこのループならMAX回powするより処理が速い
              inverse[i] = inverse[i + 1] * (i + 1) % MOD
          self.fact = factorial
          self.inv = inverse
  
      def nCr(self, n, r):
          """組み合わせの数 (必要な階乗と逆元のテーブルを事前に作っておく)"""
  
          if n < r:
              return 0
          # 10C7 = 10C3
          r = min(r, n - r)
          # 分子の計算
          numerator = self.fact[n]
          # 分母の計算
          denominator = self.inv[r] * self.inv[n - r] % self.MOD
          return numerator * denominator % self.MOD
  
      def nPr(self, n, r):
          """順列"""
  
          if n < r:
              return 0
          return self.fact[n] * self.inv[n - r] % self.MOD
  
      def nHr(self, n, r):
          """重複組み合わせ"""
  
          # r個選ぶところにN-1個の仕切りを入れる
          return self.nCr(r + n - 1, r)
  
  
  x, y = MAP()
  
  x, y = min(x, y), max(x, y)
  sm = x + y
  if sm % 3 != 0:
      print(0)
      exit()
  if y - x > sm // 3:
      print(0)
      exit()
  
  # 連立方程式から式変形
  a = (2 * y - x) // 3
  b = (2 * x - y) // 3
  
  mt = ModTools(a + b, MOD)
  print(mt.nCr(a + b, a))
  
problem_description: 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.
samples: [{"input": "3 3", "output": "2\n    \n\nThere are two ways: (0,0) \\to (1,2) \\to (3,3) and (0,0) \\to (2,1) \\to (3,3).\n\n* * *"}, {"input": "2 2", "output": "0\n    \n\nThe knight cannot reach (2,2).\n\n* * *"}, {"input": "999999 999999", "output": "151840682\n    \n\nPrint the number of ways modulo 10^9 + 7."}]