output_description: Print the number of ways in which the squares can be painted in the end,
  modulo 998244353.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      A B C D
attempt: a, b, c, d = map(int, input().split())
  
  dp = [[1 for i in range(d + 1)] for j in range(c + 1)]
  
  mod = 998244353
  
  for y in range(c + 1):
      if y < a:
          continue
      for x in range(d + 1):
          if x < b:
              continue
          if y == a and x == b:
              continue
          py = 0
          px = 0
          m = 0
          if y > a:
              py = dp[y - 1][x] * x
          if x > b:
              px = dp[y][x - 1] * y
          if y > a and x > b:
              m = dp[y - 1][x - 1] * (y - 1) * (x - 1)
          dp[y][x] = py + px - m
          dp[y][x] %= mod
  
  
  print(dp[c][d])
  
problem_description: Statement
  
  We have a grid with A horizontal rows and B vertical columns, with the squares
  painted white. On this grid, we will repeatedly apply the following operation:
  
    * Assume that the grid currently has a horizontal rows and b vertical columns. Choose "vertical" or "horizontal".
      * If we choose "vertical", insert one row at the top of the grid, resulting in an (a+1) \times b grid.
      * If we choose "horizontal", insert one column at the right end of the grid, resulting in an a \times (b+1) grid.
    * Then, paint one of the added squares black, and the other squares white.
  
  Assume the grid eventually has C horizontal rows and D vertical columns. Find
  the number of ways in which the squares can be painted in the end, modulo
  998244353.
samples: [{"input": "1 1 2 2", "output": "3\n    \n\nAny two of the three squares other than the bottom-left square can be painted\nblack.\n\n* * *"}, {"input": "2 1 3 4", "output": "65\n    \n\n* * *"}, {"input": "31 41 59 265", "output": "387222020"}]