#pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include #include #include using namespace std; using mint=atcoder::modint998244353; mint fac[20001],invfac[20001]; int x,K; mint p,q; const int D=350; mint dp[2][D+2][D+2]; mint ret[2][20001]; void g(int d,int id) { assert(d>=D); const int sz=2*K-d; for(int c=0;c<=sz;c++)ret[id][c]=0; const int w=2*d+4; for(int i=w;i-d<=sz;i+=w) { int v=i-d; for(int c=v;c<=sz;c+=2)ret[id][c]+=invfac[(c-v)/2]*invfac[(c+v)/2]; } for(int i=0;d-i<=sz;i-=w) { int v=d-i; for(int c=v;c<=sz;c+=2)ret[id][c]+=invfac[(c-v)/2]*invfac[(c+v)/2]; } for(int i=-2+w;i-d<=sz;i+=w) { int v=i-d; for(int c=v;c<=sz;c+=2)ret[id][c]-=invfac[(c-v)/2]*invfac[(c+v)/2]; } for(int i=-2;d-i<=sz;i-=w) { int v=d-i; for(int c=v;c<=sz;c+=2)ret[id][c]-=invfac[(c-v)/2]*invfac[(c+v)/2]; } for(int c=0;c<=sz;c++)ret[id][c]*=fac[c]; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin>>x>>K; fac[0]=1; for(int i=1;i<=2*K;i++)fac[i]=fac[i-1]*mint::raw(i); invfac[2*K]=fac[2*K].inv(); for(int i=2*K;i--;)invfac[i]=invfac[i+1]*mint::raw(i+1); int now=0; dp[now][1][1]=1; for(int i=1;i