#include #define ll long long using namespace std; const int g=3; const int N=6e5+10; const int mod=998244353; const int lim=8e4+10; typedef vector poly; int rev[N],inv[N],a[N],b[N],dp[N],dp1[N],ans[N]; int fac[N]; long long m; int n,k,x,y,s,len,d; int mul(int x,int y){return 1ll*x*y%mod;} int add(int x,int y){return x+y>=mod?x+y-mod:x+y;} int dec(int x,int y){return x-y>=0?x-y:x-y+mod;} int ksm(int x,int y){ ll ans=1; for (;y;y>>=1,x=mul(x,x)) if (y&1) ans=mul(ans,x); return ans; } void init(int x){ len=1,d=0; while (len>1]>>1)|((i&1)<<(d-1)); } inline poly NTT(poly a,int t) { for (int i=0;i=0;k--){ for (int i=2*n;i>=1;i--) if (i&1) dp[i]=0; else dp[i]=dp[i>>1]; if ((B>>k)&1ll){ for (int i=2*n;i>=1;i--) dp[i]=dp[i-1]; dp[0]=0; } poly a,b; for (int i=0;i<=2*n;i++) a.push_back(dp[i]); for (int i=0;i<=n;i++) if (((n-i)&1)==((C>>k)&1ll)) b.push_back(Calc(n,i)); else b.push_back(0); a=a*b; for (int i=n;i<=3*n;i++) dp[i-n]=a[i]; } printf("%d\n",dp[0]); }