#define PROBLEM "https://onlinejudge.u-aizu.ac.jp/challenges/sources/JAG/Summer/3614"
#include"math/combinatorics.hpp"
#include"math/p_recursive.hpp"
#include<atcoder/modint>
#include<bits/stdc++.h>usingZ=atcoder::modint998244353;Zsmall(intn,intm){Combinatorics<Z>C;autoans=Z(m).pow(2*n);for(autoi=0;i<n;++i){ans-=m*C(2*n,i)*Z(m-1).pow(i);}returnans;}intmain(){std::cin.tie(0)->sync_with_stdio(0);intm;std::cin>>m;std::vector<Z>ans;for(autoi=1;i<=std::min(100,m);++i){ans.push_back(small(i,m));}if(100<m){autocoeffs=find_recurrence_relation(ans,1);ans=extended(m,coeffs,ans);}for(autoi=0;i<m;++i){std::cout<<ans[i].val()<<"\n";}}
#line 1 "test/math/aizu3614.test.cpp"
#define PROBLEM "https://onlinejudge.u-aizu.ac.jp/challenges/sources/JAG/Summer/3614"
#line 1 "math/combinatorics.hpp"
#include<algorithm>
#include<bit>
#include<cassert>
#include<vector>template<typenameZ>structCombinatorics{staticvoidgrow(intn){autom=int(f_.size());if(n<m){return;}n=std::min<int>(std::bit_ceil(unsigned(n+1)),Z::mod());f_.resize(n);finv_.resize(n);for(autoi=m;i<n;++i){f_[i]=f_[i-1]*Z(i);}finv_[n-1]=f_[n-1].inv();for(autoi=n-1;m<i;--i){finv_[i-1]=finv_[i]*Z(i);}}staticZf(intn){// O(1)assert(0<=n);grow(n);returnf_[n];}staticZfinv(intn){// O(1)assert(0<=n);grow(n);returnfinv_[n];}staticZbinom(intn,intk){// O(1)if(0<=k&&k<=n){returnf(n)*finv(k)*finv(n-k);}else{returnZ(0);}}staticZbinom2(longlongn,longlongk){// O(min(k, n - k))if(k<0||n<k){returnZ(0);}if(n-k<k){returnbinom2(n,n-k);}autoret=finv(int(k));for(autoi=0;i<k;++i){ret*=Z(n-i);}returnret;}Zoperator()(intn,intk){returnbinom(n,k);}private:inlinestaticstd::vector<Z>f_{Z(1)},finv_{Z(1)};};#line 1 "math/p_recursive.hpp"
#line 6 "math/p_recursive.hpp"
#include<cstdio>
#include<utility>
#line 9 "math/p_recursive.hpp"
// https://min-25.hatenablog.com/entry/2018/05/10/212805template<typenameZ>std::vector<Z>extended(intn,conststd::vector<std::vector<Z>>&coeffs,conststd::vector<Z>&terms){std::vector<Z>ret(std::max(n+1,int(terms.size())));std::copy(terms.begin(),terms.end(),ret.begin());autoorder=int(coeffs.size())-1;autodeg=int(coeffs[0].size())-1;assert(order<=int(terms.size()));for(autom=int(terms.size());m<=n;++m){Zs=0;for(autoi=1;i<=order;++i){autok=m-i;autot=ret[k];for(autod=0;d<=deg;++d){s+=t*coeffs[i][d];t*=k;}}Zdenom=0,mpow=1;for(autod=0;d<=deg;++d){denom+=mpow*coeffs[0][d];mpow*=m;}ret[m]=-s/denom;}returnret;}template<typenameZ>std::vector<std::vector<Z>>find_recurrence_relation(conststd::vector<Z>&terms,intdeg,boolverify=true,boolverbose=true){auton=int(terms.size());autoB=(n+2)/(deg+2);// number of blocksautoC=B*(deg+1);// number of columnsautoR=n-(B-1);// number of rowsassert(2<=B);assert(C-1<=R);autoerror=[](intorder,intd){std::fprintf(stderr,"Error: Could not find a recurrence relation ""of order <= %d and degree <= %d.\n\n",order,d);assert(0);};std::vector<std::vector<Z>>mat(R,std::vector<Z>(C));for(autoy=0;y<R;++y){for(autob=0;b<B;++b){autov=terms[y+b];for(autod=0;d<=deg;++d){mat[y][b*(deg+1)+d]=v;v*=y+b;}}}autorank=0;for(autox=0;x<C;++x){autopivot=-1;for(autoy=rank;y<R;++y){if(mat[y][x]!=0){pivot=y;break;}}if(pivot<0){break;}if(pivot!=rank){std::swap(mat[rank],mat[pivot]);}autoinv=mat[rank][x].inv();for(autox2=x;x2<C;++x2){mat[rank][x2]*=inv;}for(autoy=rank+1;y<R;++y){if(mat[y][x]!=0){autoc=-mat[y][x];for(autox2=x;x2<C;++x2){mat[y][x2]+=c*mat[rank][x2];}}}++rank;}if(rank==C){error(B-1,deg);}for(autoy=rank-1;0<=y;--y){if(mat[y][rank]!=0){assert(mat[y][y]==1);autoc=-mat[y][rank];for(inty2=0;y2<y;++y2){mat[y2][rank]+=c*mat[y2][y];}}}autoorder=rank/(deg+1);std::vector<std::vector<Z>>ret(order+1,std::vector<Z>(deg+1));ret[0][rank%(deg+1)]=1;for(autoy=rank-1;0<=y;--y){autok=order-y/(deg+1);autod=y%(deg+1);ret[k][d]=-mat[y][rank];}if(verify){autoextended_terms=extended(n-1,ret,std::vector<Z>(terms.begin(),terms.begin()+order));for(autoi=0;i<int(terms.size());++i){if(terms[i]!=extended_terms[i]){error(B-1,deg);}}}if(verbose){automod=Z::mod();autolast=verify?n-1:order+R-1;std::fprintf(stderr,"[ Found a recurrence relation ]\n""- order %d\n""- degree %d\n""- verified up to a(%d) (number of non-trivial terms: %d)\n",order,deg,last,(last+1)-((deg+2)*(order+1)-2));std::fprintf(stderr,"{\n");for(autok=0;k<=order;++k){std::fprintf(stderr," {");for(autod=0;d<=deg;++d){if(d){std::fprintf(stderr,", ");}autov=ret[k][d].val();std::fprintf(stderr,"%d",v<=mod/2?v:v-mod);}std::fprintf(stderr,"}%s\n",k==order?"":",");}std::fprintf(stderr,"}\n\n");}returnret;}#line 5 "test/math/aizu3614.test.cpp"
#include<atcoder/modint>
#include<bits/stdc++.h>usingZ=atcoder::modint998244353;Zsmall(intn,intm){Combinatorics<Z>C;autoans=Z(m).pow(2*n);for(autoi=0;i<n;++i){ans-=m*C(2*n,i)*Z(m-1).pow(i);}returnans;}intmain(){std::cin.tie(0)->sync_with_stdio(0);intm;std::cin>>m;std::vector<Z>ans;for(autoi=1;i<=std::min(100,m);++i){ans.push_back(small(i,m));}if(100<m){autocoeffs=find_recurrence_relation(ans,1);ans=extended(m,coeffs,ans);}for(autoi=0;i<m;++i){std::cout<<ans[i].val()<<"\n";}}