#include #include #include #define S 32768 #define G 3 using namespace std;const int P=998244353; int rev[S],w[2][S],A[S],B[S],f[31][S],ans[5][S],sum[S]; char str[S];int pow[S],_pow[S],x[5],y[5]; int i,N,T,AA,BB,q,n,kth,m; inline int Pow(int a,int b) { int res=1; for (;b;b>>=1,a=a*1ll*a%P) if (b&1) res=res*1ll*a%P; return res; } inline void NTT(int *a,int o) { for (int i=0;i=P)?y+x-P:y+x; } if (o) { int x=Pow(N,P-2); for (int i=0;i>=1) (y<<=1)|=x&1; } w[0][0]=w[1][0]=1;int x=Pow(G,(P-1)/N),y=Pow(x,P-2); for (int i=1;i=0;i--) if ((kth>>i)&1) { if (!flag) { for (int j=0;j<=n;j++) ans[j]=f[i][j]; flag=1;continue; } mem(A);mem(B); for (int j=0;j<=n;j++) A[j]=ans[j],B[j]=f[i][j]; NTT(A,0); NTT(B,0); for (int j=0;j