#include #include using namespace std; using namespace atcoder; using mint=modint998244353; mint Bostan_Mori(long long N){ vector Q={1,-1,-1,-1,-1,-1,-1}; vector P={1,0,0,0,0,0}; int d=6; while(N>0){ vector Q_minus=Q; for(int i=1;i<(int)(Q.size());i+=2){ Q_minus[i]*=-1; } vector V_sub=convolution(Q,Q_minus); Q.resize(((int)(V_sub.size())+1)/2); for(int i=0;i<(int)(Q.size());i++){ Q[i]=V_sub[i*2]; } vector U=convolution(P,Q_minus); if(N%2==0){ P.resize(((int)(U.size())+1)/2); for(int i=0;i<(int)(U.size());i+=2){ P[i/2]=U[i]; } N/=2; continue; } P.resize((int)(U.size())/2); for(int i=1;i<(int)(U.size());i+=2){ P[i/2]=U[i]; } N/=2; continue; } return P[0]/Q[0]; } template struct matrix{ int H,W; T table[6][6]; matrix(int h,int w) : H(h),W(w){ for(int i=0;i=0;i--){ W+=Bostan_Mori(N*M+i)*(i-4); } for(;k--;){ int C; scanf("%d",&C); matrix P(6,6); matrix Q(6,1); for(int i=0;i<6;i++){ if(i==C){ continue; } if(C=0;i--){ if(i==C){ continue; } if(j==C){ continue; } if(i=0;i--){ if(P.table[i][0]==0){ continue; } if(i=0;i--){ ans+=R[i]*(i-4); } ans=W-ans; printf("%d\n",ans.val()); } }