#include #include #include #include #include #include using namespace std; typedef long long LL; typedef unsigned int uint; LL ww[101]; LL* e = ww + 50; const int MAXN=2e5+5; const LL P=998244353; LL qpow(LL a,LL k, LL p){ LL c=1; a %= p; while(k){ if(k&1) c=(c*a)%p; k >>= 1; a = (a*a)%p; } return c; } void ntt_initial(LL* e, const LL& P, const LL& g) { int s = 0; LL q = P - 1; while ((q & 1) == 0) {s++; q >>= 1;} LL w = qpow(g, q, P); LL invw = qpow(w, P - 2, P); for (int h = s; h >= 0; h--) { e[h] = w; e[-h] = invw; w = (w * w) % P; invw = (invw * invw) % P; } } void ntt(LL* f, const int& h, const int& type) { if (h == 0) return; LL f0[1 << (h - 1)], f1[1 << (h - 1)]; int n = 1 << h; for (int i = 0; i < n; i+=2) f0[i/2] = f[i]; ntt(f0, h - 1, type); for (int i = 1; i < n; i+=2) f1[i/2] = f[i]; ntt(f1, h - 1, type); LL w = e[type * h]; LL x = 1; for (int k = 0; k < n / 2; k++) { f[k] = f0[k] + x * f1[k]; f[k] %= P; f[k + n / 2] = f0[k] - x * f1[k]; f[k + n / 2] %= P; x *= w; x %= P; } } LL A[MAXN]; vector f[MAXN]; LL F1[MAXN*4],F2[MAXN*4]; void mul(int i1,int i2){ int limit=f[i1].size()+f[i2].size()-1; int deg=1,h=0; while(deg1){ for(int i=0;i