RT
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int read(){
int x=0,pos=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') pos=0;
for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';return pos?x:-x;
}
#define FOR(i,a,b) for(int i=a;i<=b;++i)
const int N = 200201;
#define ROF(i,a,b) for(int i=b;i>=a;--i)
int n,m;
int a[N*2];
typedef vector<int> poly;poly b[N];
const int mod = 998244353;
const int LSZ=19,SZ=1<<LSZ;
int ksm(int a,int b){
int res=1;
while(b){
if(b&1) res=1ll*res*a%mod;
a=1ll*a*a%mod,b>>=1;
}return res;
}
int tr[SZ],omg[SZ][2];
void init(int n){
int lim=0;while((1<<lim)<n) lim++;
FOR(i,0,n-1) tr[i]=tr[i>>1]>>1|((i&1)<<(lim-1));
omg[0][0]=omg[0][1]=1;
omg[1][0]=ksm(3,(mod-1)/n);
omg[1][1]=ksm(omg[1][0],mod-2);
FOR(i,2,n) omg[i][0]=1ll*omg[i-1][0]*omg[1][0]%mod,omg[i][1]=1ll*omg[i-1][1]*omg[1][1]%mod;
}
void dft(poly &f,int n,int opt){
//assert((int)f.size()<=n);
f.resize(n,0);
for(int i=0;i<n;++i) if(i<tr[i]) swap(f[i],f[tr[i]]);
for(int l=2;l<=n;l<<=1){ int m=l/2;
for(int g=0;g!=n;g+=l){
for(int i=0;i<m;i++){
int t=1ll*omg[n/l*i][opt]*(f[g+i+m])%mod;
f[g+i+m]=(f[g+i]-t+mod)%mod;f[g+i]=(f[g+i]+t)%mod;
}
}
}
if(opt) for(int i=0,iv=ksm(n,mod-2);i<n;i++) f[i]=1ll*f[i]*iv%mod;
}
void pop(poly &a){
if(!a.size()) return;
while(a[a.size()-1]==0) a.pop_back();
}
void dao(poly& a){
for(int i=1;i<a.size();i++) a[i-1]=1ll*a[i]*i%mod;a.pop_back();
}
void jifen(poly &a){
for(int i=a.size()-1;i>=0;--i) a[i]=1ll*a[i-1]*ksm(i,mod-2)%mod;a[0]=0;
}
poly operator+(const poly &a,const poly &b){
poly res(a);
res.resize(max(a.size(),b.size()),0);
for(int i=0;i<b.size();++i) res[i]=(res[i]+b[i])%mod;
return res;
}
poly operator*(const poly &a,const poly &b){
poly A=a,B=b;//pop(A),pop(B);
int len=1;while(len<A.size()+B.size()) len*=2;init(len);
poly C(len,0);
dft(A,len,0),dft(B,len,0);
FOR(i,0,len-1) C[i]=1ll*A[i]*B[i]%mod;
dft(C,len,1);return C;
}
void inv(const poly &a,poly &b,int n){
if(n==1) return b[0]=ksm(a[0],mod-2),void();
inv(a,b,(n+1)/2);
int len=1;while(len<n*2) len*=2;init(len);
if(b.size()<len) b.resize(len,0);FOR(i,(n+1)/2,len-1) b[i]=0;
poly c=a;if(c.size()<len) c.resize(len,0);FOR(i,n,len-1) c[i]=0;
dft(c,len,0);dft(b,len,0);
FOR(i,0,len-1) b[i]=(2ll-1ll*c[i]*b[i]%mod+mod)%mod*b[i]%mod;
dft(b,len,1);
}
void getln(const poly &a,poly &ans,int n){
poly b;b.resize(n,0);
inv(a,b,n);pop(b);
poly c=a;dao(c);
ans=b*c;
jifen(ans);
}
int main(){
freopen("P4725_8.in","r",stdin);
freopen("8.txt","w",stdout);
n=read();poly a;poly ans;
a.resize(n,0);ans.resize(n,0);
for(int i=0;i<n;i++){
a[i]=read();
}
getln(a,ans,n);
for(int i=0;i<n;i++){
printf("%d ",ans[i]);
}
return 0;
}