#include<bits/stdc++.h>
using namespace std;
const int maxn=1<<18,mod=998244353;
inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}
inline int dic(int a,int b){return a-b<0?a-b+mod:a-b;}
inline int mul(int a,int b){return 1ll*a*b%mod;}
inline int qpow(int a,int b,int c=1){for(;b;b>>=1,a=mul(a,a)) if(b&1) c=mul(c,a);return c;}
const int inv2=qpow(2,mod-2);
int p[maxn],n,c[maxn],len,e[maxn];
void FWT(int *f,bool typ){
	for(int i=2;i<=len;i<<=1)
		for(int j=0;j<len;j+=i)
			for(int k=j;k<j+i/2;++k){
				int u=f[k],t=f[k+i/2];
				if(!typ) f[k]=add(u,t),f[k+i/2]=dic(u,t);
				else f[k]=mul(add(u,t),inv2),f[k+i/2]=mul(dic(u,t),inv2);
			}
	return ;
}
int main(){
	int inv=0;cin>>n;len=1<<n;for(int i=0;i<1<<n;++i) scanf("%d",&p[i]),inv=add(inv,p[i]);
	inv=qpow(inv,mod-2);for(int i=0;i<1<<n;++i) p[i]=mul(p[i],inv),c[i]=mod-1;p[0]=dic(p[0],1);
	c[0]=add(len,c[0]);
	FWT(p,0),FWT(c,0);
	for(int i=1;i<len;++i) e[i]=mul(c[i],qpow(p[i],mod-2));
	FWT(e,1);
	for(int i=0;i<len;++i) printf("%d\n",dic(e[i],e[0]));
	return 0;
}