#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace Convolution{
int n=0,m=0,rev[999999],bit=0,len=1,mod=0,g=3,A[999999],B[999999];
int qpow(int x,int k){
int res=1;
while(k){
if(k&1) res=res*x%mod;
x=x*x%mod;
k>>=1;
}
return res;
}
void NTT(int*a,int opt){
for(int i=0;i<len;i++)
if(i<rev[i]) swap(a[i],a[rev[i]]);
for(int mid=1;mid<len;mid<<=1){
int tmp=qpow(g,(mod-1)/(mid*2));
if(opt==-1) tmp=qpow(tmp,mod-2);
for(int i=0;i<len;i+=mid*2){
int w=1;
for(int j=0;j<mid;j++,w=w*tmp%mod){
int x=a[i+j],y=w*a[i+j+mid]%mod;
a[i+j]=(x+y)%mod,a[i+j+mid]=(x-y+mod)%mod;
}
}
}
}void Convolution(int*a,int*b,int nn, int mm,int*output,int&cnt,int mod_num){
mod=mod_num;n=nn;m=mm;
memset(rev,0,sizeof rev);len=1;bit=0;
for(int i=0;i<=n;i++)A[i]=a[i];
for(int i=0;i<=m;i++)B[i]=b[i];
while(len<=n+m) len<<=1,bit++;
for(int i=0;i<len;i++) rev[i]=(rev[i>>1]>>1) | ((i&1)<<(bit-1));
NTT(A,1);NTT(B,1);
for(int i=0;i<len;i++) A[i]=A[i]*B[i]%mod;
NTT(A,-1);
int inv=qpow(len,mod-2);
for(int i=0;i<=n+m;i++){
output[i]=A[i]*inv%mod;
}
return;
}
}
int a[999999],b[999999];int output[999999],cnt;//end of NTT templete
int frac[999999],invfrac[999999];
void initfrac(int n,int mod){
Convolution::mod=mod;
frac[0]=invfrac[0]=1;for(int i=1;i<=n;i++){
frac[i]=frac[i-1]*i%mod;
invfrac[i]=Convolution::qpow(frac[i],mod-2);
}
}//end of math templete
void init(int n,int mod){
initfrac(n,mod);
for(int i=0;i<=n;i++)a[i]=b[i]=invfrac[i];
for(int i=0;i<=n;i++){
a[i]*=((i&1)?(-1):1);
b[i]=b[i]*Convolution::qpow(i,n)%mod;
a[i]=(a[i]+mod)%mod;
}
}
int n,mod=167772161;
signed main(){
cin>>n;
init(n,mod);
Convolution::Convolution(a,b,n,n,output,cnt,mod);
for(int i=0;i<=n;i++)printf("%lld ",output[i]);
return 0;
}
略大于500ms