import sys readline = sys.stdin.readline import sys readline = sys.stdin.readline MOD = 998244353 def frac(limit): frac = [1]*limit for i in range(2,limit): frac[i] = i * frac[i-1]%MOD fraci = [None]*limit fraci[-1] = pow(frac[-1], MOD -2, MOD) for i in range(-2, -limit-1, -1): fraci[i] = fraci[i+1] * (limit + i + 1) % MOD return frac, fraci frac, fraci = frac(1341398) MOD = 998244353 pr = 3 LS = 20 class NTT: def __init__(self): self.N0 = 1<>k&1) << (LS-2-k) used.add(j) self.w[i], self.w[j] = self.w[j], self.w[i] self.winv[i], self.winv[j] = self.winv[j], self.winv[i] def _fft(self, A): M = len(A) bn = 1 hbs = M>>1 while hbs: for j in range(hbs): A[j], A[j+hbs] = A[j] + A[j+hbs], A[j] - A[j+hbs] if A[j] > MOD: A[j] -= MOD if A[j+hbs] < 0: A[j+hbs] += MOD for bi in range(1, bn): wi = self.w[bi] for j in range(bi*hbs*2, bi*hbs*2+hbs): A[j], A[j+hbs] = (A[j] + wi*A[j+hbs])%MOD, (A[j] - wi*A[j+hbs])%MOD bn <<= 1 hbs >>= 1 def _ifft(self, A): M = len(A) bn = M>>1 hbs = 1 while bn: for j in range(hbs): A[j], A[j+hbs] = A[j] + A[j+hbs], A[j] - A[j+hbs] if A[j] > MOD: A[j] -= MOD if A[j+hbs] < 0: A[j+hbs] += MOD for bi in range(1, bn): winvi = self.winv[bi] for j in range(bi*hbs*2, bi*hbs*2+hbs): A[j], A[j+hbs] = (A[j] + A[j+hbs])%MOD, winvi*(A[j] - A[j+hbs])%MOD bn >>= 1 hbs <<= 1 def convolve(self, A, B): LA = len(A) LB = len(B) LC = LA+LB-1 M = 1<<(LC-1).bit_length() A += [0]*(M-LA) B += [0]*(M-LB) self._fft(A) self._fft(B) C = [0]*M for i in range(M): C[i] = A[i]*B[i]%MOD self._ifft(C) minv = pow(M, MOD-2, MOD) for i in range(LC): C[i] = C[i]*minv%MOD return C[:LC] return C def inverse(self, A): LA = len(A) dep = (LA-1).bit_length() M = 1<