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: def LI():return [int(i) for i in input().split()]
  
  
  mo=998244353
  
  a,b,c,d=LI()
  
  h=c-a+1
  w=d-b+1
  dp=[[0]*(d+1) for i in range(c+1)]
  dp[a][b]=1
  for i in range(a,c):
      dp[i+1][b]=dp[i][b]*b
      
  
  for i in range(b,d):
      dp[a][i+1]=dp[a][i]*a
  
  
  for i in range(a,c):
      for j in range(b,d):
          #dp[i+1][j+1]=dp[i][j+1]*(j+1)+dp[i+1][j]*(i+1)-dp[i][j]
          dp[i+1][j+1]=dp[i][j+1]+dp[i+1][j]  +dp[i][j+1]*(j)  +dp[i+1][j]*(i)  -dp[i][j]*i*j
          dp[i+1][j+1]%=mo
  
  
  ans=dp[c][d]
  
  
  print(ans)
  
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"}]