This year $p$ footballers and $q$ cricketers have been invited to participate in IPL (Indian Programming League) as guests. You have to accommodate them in $r$ rooms such that-
- No room may remain empty.
- A room may contain either only footballers or only cricketers, not both.
- No cricketers are allowed to stay alone in a room.
Find the number of ways to place the players. Note though, that all the rooms are identical. But each of the cricketers and footballers are unique. 
Since the number of ways can be very large, print the answer modulo $998,244,353$.

-----Input-----
- The first line of the input contains a single integer $T$ denoting the number of test cases. The description of $T$ test cases follows.
- The first and only line of each test case contains three space-separated integers $p$, $q$ and $r$ denoting the number of footballers, cricketers and rooms.

-----Output-----
For each test case, output the number of ways to place the players modulo $998,244,353$.

-----Constraints-----
- $1 \le T \le 100$
- $1 \le p, q, r \le 100$

-----Example Input-----
4
2 1 4
2 4 4
2 5 4
2 8 4

-----Example Output-----
0
3
10
609

-----Explanation-----
Example case 2: Three possible ways are:
- {Footballer 1}, {Footballer 2}, {Cricketer 1, Cricketer 2}, {Cricketer 3, Cricketer 4}
- {Footballer 1}, {Footballer 2}, {Cricketer 1, Cricketer 3}, {Cricketer 2, Cricketer 4}
- {Footballer 1}, {Footballer 2}, {Cricketer 1, Cricketer 4}, {Cricketer 2, Cricketer 3}    
Please note that the rooms are identical.

Difficulty: interview

Starter code:

Solutions:
# cook your dish here
MOD = 998244353

fball = [ [0]*101 for _ in range(101) ]

cric = [ [0]*101 for _ in range(101) ] 



def calSNum(n, r):
 if n == r or r == 1:
  fball[r][n] = 1
  return
 if n > 0 and r > 0 and n > r:
  fball[r][n] = (fball[r-1][n-1]%MOD + (r*fball[r][n-1])%MOD )%MOD
  return
 fball[r][n] = 0
  

def calASNum(n, r):
 if n == 0 and r == 0 :
  cric[r][n] = 0
  return
 if n >= 2 and r == 1:
  cric[r][n] = 1
  return 
 if r > 0 and n > 0 and n >= 2*r:
  cric[r][n] = ((r*cric[r][n-1])%MOD + ((n-1)*cric[r-1][n-2])%MOD )%MOD
  return
 cric[r][n] = 0
 

def preCompute():
 for r in range(1,101):
  for n in range(1, 101):
   calSNum(n, r)
   calASNum(n, r)

 
def main():
 
 preCompute()
 for _ in range(int(input())):
  f, c, r = list(map(int, input().split()))

  ans = 0
  
  if f + (c//2) >= r:
   minv = min(f, r)
   
   for i in range(1, minv+1):
    if r-i <= c//2:
     ans = (ans + (fball[i][f] * cric[r-i][c])%MOD )%MOD
   
  print(ans)
   
def __starting_point():
 main()

__starting_point()

# cook your dish here
#copy from all submission only for learn 
MOD = 998244353

fball = [ [0]*101 for _ in range(101) ]

cric = [ [0]*101 for _ in range(101) ] 



def calSNum(n, r):
 if n == r or r == 1:
  fball[r][n] = 1
  return
 if n > 0 and r > 0 and n > r:
  fball[r][n] = (fball[r-1][n-1]%MOD + (r*fball[r][n-1])%MOD )%MOD
  return
 fball[r][n] = 0
  

def calASNum(n, r):
 if n == 0 and r == 0 :
  cric[r][n] = 0
  return
 if n >= 2 and r == 1:
  cric[r][n] = 1
  return 
 if r > 0 and n > 0 and n >= 2*r:
  cric[r][n] = ((r*cric[r][n-1])%MOD + ((n-1)*cric[r-1][n-2])%MOD )%MOD
  return
 cric[r][n] = 0
 

def preCompute():
 for r in range(1,101):
  for n in range(1, 101):
   calSNum(n, r)
   calASNum(n, r)

 
def main():
 
 preCompute()
 for _ in range(int(input())):

  f, c, r = list(map(int, input().split()))

  ans = 0
  
  if f + (c//2) >= r:
   minv = min(f, r)
   
   for i in range(1, minv+1):
    if r-i <= c//2:
     ans = (ans + (fball[i][f] * cric[r-i][c])%MOD )%MOD
   
  print(ans)
   
def __starting_point():
 main()

__starting_point()

#copy from all submission only for learn 
MOD = 998244353

fball = [ [0]*101 for _ in range(101) ]

cric = [ [0]*101 for _ in range(101) ] 



def calSNum(n, r):
 if n == r or r == 1:
  fball[r][n] = 1
  return
 if n > 0 and r > 0 and n > r:
  fball[r][n] = (fball[r-1][n-1]%MOD + (r*fball[r][n-1])%MOD )%MOD
  return
 fball[r][n] = 0
  

def calASNum(n, r):
 if n == 0 and r == 0 :
  cric[r][n] = 0
  return
 if n >= 2 and r == 1:
  cric[r][n] = 1
  return 
 if r > 0 and n > 0 and n >= 2*r:
  cric[r][n] = ((r*cric[r][n-1])%MOD + ((n-1)*cric[r-1][n-2])%MOD )%MOD
  return
 cric[r][n] = 0
 

def preCompute():
 for r in range(1,101):
  for n in range(1, 101):
   calSNum(n, r)
   calASNum(n, r)

 
def main():
 
 preCompute()
 for _ in range(int(input())):

  f, c, r = list(map(int, input().split()))

  ans = 0
  
  if f + (c//2) >= r:
   minv = min(f, r)
   
   for i in range(1, minv+1):
    if r-i <= c//2:
     ans = (ans + (fball[i][f] * cric[r-i][c])%MOD )%MOD
   
  print(ans)
   
def __starting_point():
 main()

__starting_point()

# cook your dish here

def precompute():
 cp = [[0 for i in range(101)] for i in range(101)]
 fp = [[0 for i in range(101)] for i in range(101)]
 mod = 998244353
 for r in range(101):
  for q in range(101):
   if r==0 and q==0:
    cp[r][q] = 1
   elif r==1 and q>=2:
    cp[r][q] = 1
   elif r>=2 and q>=2*r:
    cp[r][q] = ((r*cp[r][q-1])%mod + ((q-1)*cp[r-1][q-2])%mod)%mod
 for r in range(101):
  for p in range(101):
   if r==0 and p==0:
    fp[r][p] = 1
   elif r==1 and p>0:
    fp[r][p] = 1
   elif r>=2 and p>=r:
    fp[r][p] = ((r*fp[r][p-1])%mod + fp[r-1][p-1]%mod)%mod
 return cp,fp

t = int(input())
while t:
 p,q,r = list(map(int, input().split()))
 cp,fp = precompute()
 #lim = min(q,r)
 mod = 998244353
 ans = 0
 for i in range(r+1):
  ans = ans + fp[r-i][p]*cp[i][q]
 print(ans%mod)
 t -= 1


# cook your dish here

def precompute():
 cp = [[0 for i in range(101)] for i in range(101)]
 fp = [[0 for i in range(101)] for i in range(101)]
 mod = 998244353
 for r in range(101):
  for q in range(101):
   if r==0 and q==0:
    cp[r][q] = 1
   elif r==1 and q>=2:
    cp[r][q] = 1
   elif r>=2 and q>=2*r:
    cp[r][q] = ((r*cp[r][q-1])%mod + ((q-1)*cp[r-1][q-2])%mod)%mod
 for r in range(101):
  for p in range(101):
   if r==0 and p==0:
    fp[r][p] = 1
   elif r==1 and p>0:
    fp[r][p] = 1
   elif r>=2 and p>=r:
    fp[r][p] = ((r*fp[r][p-1])%mod + fp[r-1][p-1]%mod)%mod
 return cp,fp

t = int(input())
while t:
 p,q,r = list(map(int, input().split()))
 cp,fp = precompute()
 #lim = min(q,r)
 mod = 998244353
 ans = 0
 for i in range(r+1):
  ans = ans + fp[r-i][p]*cp[i][q]
 print(ans%mod)
 t -= 1


# -*- coding: utf-8 -*-
"""
Created on Thu Jan 23 18:46:38 2020

@author: 736473
"""

MOD = 998244353

fball = [ [0]*101 for _ in range(101) ]

cric = [ [0]*101 for _ in range(101) ] 



def calSNum(n, r):
 if n == r or r == 1:
  fball[r][n] = 1
  return
 if n > 0 and r > 0 and n > r:
  fball[r][n] = (fball[r-1][n-1]%MOD + (r*fball[r][n-1])%MOD )%MOD
  return
 fball[r][n] = 0
  

def calASNum(n, r):
 if n == 0 and r == 0 :
  cric[r][n] = 0
  return
 if n >= 2 and r == 1:
  cric[r][n] = 1
  return 
 if r > 0 and n > 0 and n >= 2*r:
  cric[r][n] = ((r*cric[r][n-1])%MOD + ((n-1)*cric[r-1][n-2])%MOD )%MOD
  return
 cric[r][n] = 0
 

def preCompute():
 for r in range(1,101):
  for n in range(1, 101):
   calSNum(n, r)
   calASNum(n, r)

 
def main():
 
 preCompute()
 
 for _ in range(int(input())):

  f, c, r = list(map(int, input().split()))

  ans = 0
  
  if f + (c//2) >= r:
   minv = min(f, r)
   
   for i in range(1, minv+1):
    if r-i <= c//2:
     ans = (ans + (fball[i][f] * cric[r-i][c])%MOD )%MOD
   
  print(ans)
   
def __starting_point():
 main()
__starting_point()

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 23 18:46:38 2020

@author: 736473
"""

MOD = 998244353

fball = [ [0]*101 for _ in range(101) ]

cric = [ [0]*101 for _ in range(101) ] 



def calSNum(n, r):
 if n == r or r == 1:
  fball[r][n] = 1
  return
 if n > 0 and r > 0 and n > r:
  fball[r][n] = (fball[r-1][n-1]%MOD + (r*fball[r][n-1])%MOD )%MOD
  return
 fball[r][n] = 0
  

def calASNum(n, r):
 if n == 0 and r == 0 :
  cric[r][n] = 0
  return
 if n >= 2 and r == 1:
  cric[r][n] = 1
  return 
 if r > 0 and n > 0 and n >= 2*r:
  cric[r][n] = ((r*cric[r][n-1])%MOD + ((n-1)*cric[r-1][n-2])%MOD )%MOD
  return
 cric[r][n] = 0
 

def preCompute():
 for r in range(1,101):
  for n in range(1, 101):
   calSNum(n, r)
   calASNum(n, r)

 
def main():
 
 preCompute()
 
 for _ in range(int(input())):

  f, c, r = list(map(int, input().split()))

  ans = 0
  
  if f + (c//2) >= r:
   minv = min(f, r)
   
   for i in range(1, minv+1):
    if r-i <= c//2:
     ans = (ans + (fball[i][f] * cric[r-i][c])%MOD )%MOD
   
  print(ans)
   
def __starting_point():
 main()
__starting_point()

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 23 18:46:38 2020

@author: 736473
"""

MOD = 998244353

fball = [ [0]*101 for _ in range(101) ]

cric = [ [0]*101 for _ in range(101) ] 



def calSNum(n, r):
 if n == r or r == 1:
  fball[r][n] = 1
  return
 if n > 0 and r > 0 and n > r:
  fball[r][n] = (fball[r-1][n-1]%MOD + (r*fball[r][n-1])%MOD )%MOD
  return
 fball[r][n] = 0
  

def calASNum(n, r):
 if n == 0 and r == 0 :
  cric[r][n] = 0
  return
 if n >= 2 and r == 1:
  cric[r][n] = 1
  return 
 if r > 0 and n > 0 and n >= 2*r:
  cric[r][n] = ((r*cric[r][n-1])%MOD + ((n-1)*cric[r-1][n-2])%MOD )%MOD
  return
 cric[r][n] = 0
 

def preCompute():
 for r in range(1,101):
  for n in range(1, 101):
   calSNum(n, r)
   calASNum(n, r)

 
def main():
 
 preCompute()
 
 t = int(input())
 while True:
  
  try:
   f, c, r = list(map(int, input().split()))
  except EOFError:
   break

  ans = 0
  
  if f + (c//2) >= r:
   minv = min(f, r)
   
   for i in range(1, minv+1):
    if r-i <= c//2:
     ans = (ans + (fball[i][f] * cric[r-i][c])%MOD )%MOD
   
  print(ans)
   
def __starting_point():
 main()
__starting_point()