#include<bits/stdc++.h>
#define mod 998244353
#define maxn 4005
int f[maxn],V[maxn],g[maxn],h[maxn],C[maxn][maxn];
int qpow(int base,int n)
{
if(!n)
return 1;
int ans=base;--n;
while(n)
{
if(n&1)
ans=1ll*ans*base%mod;
base=1ll*base*base%mod;
n>>=1;
}
return ans;
}
int main()
{
int n,tmp;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&V[i]);
g[0]=1;
for(int i=1;i<=n;i++)
g[i]=qpow(2,i*(i-1)>>1);
C[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<=n;j++)
C[i][j]=(C[i-1][j]+(j?C[i-1][j-1]:0))%mod;
for(int i=1;i<=n;i++)
{
h[i]=g[i];
for(int j=1;j<i;j++)
{
tmp=h[i];
h[i]=(h[i]-1ll*C[i][j]*g[i-j]%mod*h[j]%mod+mod)%mod;
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
f[i]=(f[i]+1ll*C[i][j]*h[j]%mod*(f[i-j]+1ll*g[i-j]*V[j]%mod*j%mod)%mod)%mod;
for(int i=1;i<=n;i++)
f[i]=1ll*f[i]*qpow(i,mod-2)%mod*qpow(g[i],mod-2)%mod;
for(int i=1;i<=n;i++)
printf("%d\n",f[i]);
return 0;
}
来源:zr