#include<cstdio>
const int N=262150;
const int mod=998244353;
int fac[N],inv[N];
int ksm(int u,int v){
int res=1;
for(;v;v>>=1,u=1lluu%mod)
if(v&1)res=1llresu%mod;
return res;
}
inline void swap(int &u,int &v){int o=u;u=v;v=o;}
void pre(int u){
fac[0]=fac[1]=inv[0]=inv[1]=1;
for(int i=2;i<=u;i++)fac[i]=1llfac[i-1]i%mod;
inv[u]=ksm(fac[u],mod-2);
for(int i=u-1;i>=2;i--)inv[i]=1llinv[i+1](i+1)%mod;
}
int f[N],g[N],c[N],rnk[N],n;
void Ntt(int t,int opt,int len){
int g=3,g_=ksm(3,mod-2);
for(int i=0;i<len;i++)if(i<rnk[i])swap(t[i],t[rnk[i]]);
for(int i=1;i<len;i<<=1){
int wn=ksm(~opt?g:g_,(mod-1)/(i<<1));
for(int j=0,J=i<<1;j<len;j+=J){
int w=1;
for(int k=j;k<i+j;k++,w=1llwwn%mod){
int r=1llwt[i+k]%mod;
t[i+k]=(t[k]-r+mod)%mod;
t[k]=(t[k]+r)%mod;
}
}
}
if(~opt)return;
int ny=ksm(len,mod-2);
for(int i=0;i<len;i++)t[i]=1llt[i]ny%mod;
}
void Inv(int Len,int a,int b){
if(Len==1){b[0]=ksm(a[0],mod-2);return;}
Inv((Len+1)>>1,a,b);
int len=1,_2=-1;
while(len<Len+Len)len<<=1,_2++;
for(int i=0;i<len;i++)rnk[i]=(rnk[i>>1]>>1)|((i&1)<<_2);
for(int i=0;i<Len;i++)c[i]=a[i];
for(int i=Len;i<len;i++)c[i]=0;
Ntt(c,1,len);Ntt(b,1,len);
for(int i=0;i<len;i++)
b[i]=1ll(2-1llc[i]b[i]%mod+mod)b[i]%mod;
Ntt(b,-1,len);
for(int i=Len;i<len;i++)b[i]=0;
}
int main(){
scanf("%d",&n);
pre(n);
for(int i=0;i<=n;i++)g[i]=ksm(2,1lli(i-1)/2%(mod-1));//得到g[i]
for(int i=0;i<=n;i++)g[i]=1llg[i]inv[i]%mod;//这里就是g'[i]了
Inv(n+1,g,f);
for(int i=0;i<=n;i++)f[i]=(mod-f[i])%mod;
f[0]=(f[0]+1)%mod;//得到f'[i]
for(int i=0;i<=n;i++)f[i]=1llf[i]fac[i]%mod;//得到f[i]
if(n>=1)puts("1");
if(n>=2)puts("-1");//特判这两个输出
for(int i=3;i<=n;i++)
printf("%d\n",1llfac[i-1]ksm(2,1lli*(i-3)/2%(mod-1))%mod*ksm(f[i],mod-2)%mod);
//最后用路径总条数/图数量
}