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: UNKNOWN_DIFFICULTY

Starter code:

Solutions:
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()


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()
	mod = 998244353
	ans = 0
	for i in range(r + 1):
		ans = ans + fp[r - i][p] * cp[i][q]
	print(ans % mod)
	t -= 1


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()