RT,瞪了一天了
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define fi first
#define sc second
#define pii pair<int,int>
#define pb push_back
#define umap unordered_map
#define mset multiset
#define pq priority_queue
#define ull unsigned long long
#define i128 __int128
const int mod=998244353,g=3;
const int maxn=1e6+10;
int n,rev[maxn],a[maxn],b[maxn],F[maxn],A[maxn],B[maxn],C[maxn];
int quickpow(int x,int y){
int p=1;
for(int i=y;i;i>>=1) p=(p*((i&1)?x:1))%mod,x=(x*x)%mod;
return p;
}
int inv(int x){
return quickpow(x,mod-2);
}
void ntt(int *f,int n,int p){
for(int i=0;i<n;i++) rev[i]=((i&1)?(rev[i^1]|(n>>1)):(rev[i>>1]>>1));
for(int i=0;i<n;i++) if(i<rev[i]) swap(f[i],f[rev[i]]);
int wi,w,u,t;
for(int i=1;(i<<1)<=n;i<<=1){
w=quickpow(g,(mod-1)/(i<<1));
if(p==-1) w=inv(w);
for(int j=0;j<n;j+=(i<<1)){
wi=1;
for(int k=0;k<i;wi=(wi*w)%mod,k++){
u=f[j+k],t=(wi*f[j+k+i])%mod,f[j+k]=(u+t)%mod,f[j+k+i]=(u-t+mod)%mod;
}
}
}
if(p==-1){
w=inv(n);
for(int i=0;i<n;i++) f[i]=(f[i]*w)%mod;
}
}
void polyinv(int *f,int *g,int n){
if(n==1) return g[0]=inv(f[0]),void();
polyinv(f,g,n>>1);
int l=(1<<(int)(log2(n)+1));
for(int i=0;i<n;i++) F[i]=f[i];
for(int i=n;i<l;i++) F[i]=0;
for(int i=l>>1;i<n;i++) g[i]=0;
ntt(F,l,1),ntt(g,l,1);
for(int i=0;i<l;i++) g[i]=(mod+2-F[i]*g[i]%mod)*g[i]%mod;
ntt(g,l,-1);
for(int i=n;i<l;i++) g[i]=0;
}
void polyder(int *f,int *g,int n){
g[n-1]=0;
for(int i=0;i<n-1;i++) g[i]=(f[i+1]*(i+1))%mod;
}
void polyint(int *f,int *g,int n){
g[0]=0;
for(int i=1;i<n;i++) g[i]=(f[i-1]*inv(i))%mod;
}
void polyln(int *f,int *g,int n){
polyder(f,A,n),polyinv(f,B,n);
int l=(1<<(int)(log2(n)+1));
for(int i=n;i<l;i++) A[i]=B[i]=0;
ntt(A,l,1),ntt(B,l,1);
for(int i=0;i<l;i++) A[i]=(A[i]*B[i])%mod;
ntt(A,l,-1),polyint(A,g,n);
}
void polyexp(int *f,int *g,int n){//g=g(1-ln g+f);
if(n==1) return g[0]=1,void();
int l=(1<<(int)(log2(n)+1));
polyexp(f,g,n>>1),polyln(g,C,n);
for(int i=0;i<n;i++) C[i]=(f[i]-C[i]+mod)%mod;
C[0]++,ntt(g,l,1),ntt(C,l,1);
for(int i=0;i<l;i++) g[i]=(g[i]*C[i])%mod;
ntt(g,l,-1);
for(int i=n;i<l;i++) g[i]=C[i]=0;
}
void solve(){
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
int l=(1<<(int)(log2(n)+1));
polyexp(a,b,l);
for(int i=0;i<n;i++) cout<<b[i]<<" ";
cout<<endl;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t=1;
// cin>>t;
while(t--) solve();
return 0;
}