import strutils, sequtils, math, sugar, algorithm const MOD = 998244353 proc mod_pow(r, x: int): int = var r = r x = x result = 1 while x > 0: if x mod 2 == 1: result = result * r mod MOD r = r * r mod MOD x = x div 2 type Combination = ref object factorial: seq[int] factorial_inv: seq[int] proc init_combination(n: int): Combination = result = Combination( factorial: newSeq[int](n), factorial_inv: newSeq[int](n) ) result.factorial[0] = 1 for i in 1..= 2: let mh = m shr 1 for i in countup(0, n-1, m): for s in 0..= 4: ans += combination(c, r, 4) * double_factorial(c, r - 4) mod MOD * double_factorial(c, b) ans = ans mod MOD if b >= 4: ans += combination(c, b, 4) * double_factorial(c, b - 4) mod MOD * double_factorial(c, r) ans = ans mod MOD if r >= 2 and b >= 2: var acc = newSeq[int](2 * n) var acc_b = 0 for i in s: if i == 'B': acc_b += 1 else: acc[acc_b] += 1 var acc_rev = acc acc_rev.reverse() let conv = convolution(acc, acc_rev) var sum = 0 for i in 0..<2*n: sum += conv[i + 2 * n - 1] * i mod MOD * (b - i) sum = sum mod MOD ans += sum * double_factorial(c, r - 2) mod MOD * double_factorial(c, b - 2) ans = ans mod MOD echo ans