output_description: Print the number of different sequences that can result after M operations,
  modulo 998244353.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M
attempt: mod = 998244353
  
  
  def cmb(n, r):
      if r > n - r:
          r = n - r
      if r < 2:
          return n**r
  
      numerator = [n - r + k + 1 for k in range(r)]
      denominator = [k + 1 for k in range(r)]
  
      for p in range(2, r + 1):
          pivot = denominator[p - 1]
          if pivot > 1:
              offset = (n - r) % p
              for k in range(p - 1, r, p):
                  numerator[k - offset] //= pivot
                  denominator[k] //= pivot
  
      result = 1
      for k in range(r):
          if numerator[k] > 1:
              result = (result * numerator[k]) % mod
      return result
  
  
  n, m = map(int, input().split())
  
  print((cmb(3 * m + n - 1, n - 1) - n * cmb(m + n - 2, n - 1)) % mod)
  
problem_description: Statement
  
  We have a sequence of N integers: x=(x_0,x_1,\cdots,x_{N-1}). Initially, x_i=0
  for each i (0 \leq i \leq N-1).
  
  Snuke will perform the following operation **exactly** M times:
  
    * Choose two distinct indices i, j (0 \leq i,j \leq N-1,\ i \neq j). Then, replace x_i with x_i+2 and x_j with x_j+1.
  
  Find the number of different sequences that can result after M operations.
  Since it can be enormous, compute the count modulo 998244353.
samples: [{"input": "2 2", "output": "3\n    \n\nAfter two operations, there are three possible outcomes:\n\n  * x=(2,4)\n  * x=(3,3)\n  * x=(4,2)\n\nFor example, x=(3,3) can result after the following sequence of operations:\n\n  * First, choose i=0,j=1, changing x from (0,0) to (2,1).\n  * Second, choose i=1,j=0, changing x from (2,1) to (3,3).\n\n* * *"}, {"input": "3 2", "output": "19\n    \n\n* * *"}, {"input": "10 10", "output": "211428932\n    \n\n* * *"}, {"input": "100000 50000", "output": "3463133"}]