#include <bits/stdc++.h> #include <atcoder/all> using namespace std; using ll = long long; #define rep(i,n) for(int i=0;i<(int)(n);i++) using mint = atcoder::modint998244353; const int MOD=998244353; const int MAX_N=2e6; vector<ll> fac(MAX_N+1,1); vector<ll> finv(MAX_N+1,1); vector<ll> inv(MAX_N+1,1); void comb_setup(){ for(int i=2;i<=MAX_N;i++){ fac.at(i)=(fac.at(i-1)*i)%MOD; inv.at(i)=MOD-(inv.at(MOD%i)*(MOD/i))%MOD; finv.at(i)=(finv.at(i-1)*inv.at(i))%MOD; } } mint comb(int n,int k){ if(n<k) return 0; return fac.at(n)*(finv.at(n-k)*finv.at(k)%MOD)%MOD; } vector<vector<mint>> mm(5000,vector<mint>(5000,-1)); mint dv(int l,int r){ if(l==0&&r==0) return 1; if(l==0||r==0) return 0; if(mm.at(l).at(r)!=-1) return mm.at(l).at(r); mint rt=0; rt+=dv(l-1,r-1)*((l-1)*(r-1)+1); if(l>2) rt+=dv(l-2,r)*comb(l-1,2); if(r>2) rt+=dv(l,r-2)*comb(r-1,2); return mm.at(l).at(r)=rt; } int main(){ comb_setup(); int n; cin>>n; rep(i,2*n+1){ cout<<dv(i,2*n-i).val()<<"\n"; } }