//Δ_1008 #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; typedef double DB; const int N = 1<<17; const int MO = 998244353; int ad(int x,int y){ x+=y; if(x>=MO) x-=MO; if(x<0) x+=MO; return x; } int mul(int x,int y){ return (LL)x*y%MO; } int fpow(int x,int y=MO-2){ if(!y) return 1; int z=fpow(x,y>>1); z=mul(z,z); if(y&1) return mul(z,x); return z; } void DFT(int C[],int n,int fl){ int i,j,k,l; int u,v,w,cur; i=n>>1; for(j=1;j>1;i&k;k>>=1) i^=k; i^=k; } for(l=2;l<=n;l<<=1){ w=fpow(3,(MO-1)/l); if(fl==-1) w=fpow(w); for(i=0;i>1);j=j+1){ u=C[j],v=mul(C[j+(l>>1)],cur); C[j]=ad(u,v),C[j+(l>>1)]=ad(u,-v); cur=mul(cur,w); } } } } int fac[N],ifac[N]; int o,c[N],e[N]; int n,m,l,a[N],b[N],d[N],f[N][18]; vector v[N]; void dfs1(int u,int fa){ f[u][0]=fa; d[u]=d[fa]+1; int i=v[u].size(),x; while(i--){ x=v[u][i]; if(d[x]) continue; dfs1(x,u); } } int lca(int x,int y){ int j; if(d[x]d[y];j=j-1) if(d[f[x][j]]>=d[y]) x=f[x][j]; if(x==y) return x; for(j=17;f[x][0]!=f[y][0];j=j-1) if(f[x][j]!=f[y][j]) x=f[x][j],y=f[y][j]; return f[x][0]; } void go(int x,int y){ if(x>y) return; if(f[x][0]==y||f[y][0]==x) return; int z=lca(x,y); a[x]++,a[y]++,a[z]-=2; b[1+d[x]+d[y]-d[z]*2]++; } void dfs2(int u){ int i=v[u].size(),x; while(i--){ x=v[u][i]; if(f[x][0]!=u) continue; dfs2(x); a[u]+=a[x]; } } void clr(){ int i; for(i=0;i<=n+1;i=i+1) v[i].clear(),a[i]=0,b[i]=0,f[i][0]=0,d[i]=0; } int main() { int T,i,j,x,y; scanf("%d",&T); fac[0]=1; for(i=1;i=2) x=1; if(x){ printf("0\n"); clr(); continue; } for(l=1;l<=m;l<<=1); for(i=0;i