#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define swap(a,b) (a^=b^=a^=b)
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
#define mod 998244353
#define inv2 499122177
ll a[1<<17],b[1<<17],c[1<<17],N;
inline void FWT_or(ll *a,int f)
{
register int i,j,p,k;
for(i=1;i<N;i<<=1)for(p=i<<1,j=0;j<N;j+=p)for(k=0;k<i;++k)
a[i+j+k]=(a[i+j+k]+a[j+k]*f+mod)%mod;
}
inline void FWT_and(ll *a,int f)
{
register int i,j,p,k;
for(i=1;i<N;i<<=1)for(p=i<<1,j=0;j<N;j+=p)for(k=0;k<i;++k)
a[j+k]=(a[j+k]+a[i+j+k]*f+mod)%mod;
}
inline void FWT_xor(ll *a,bool f)
{
register int i,j,p,k;
for(i=1;i<N;i<<=1)for(p=i<<1,j=0;j<N;j+=p)for(k=0;k<i;++k)
{
int X=a[j+k],Y=a[i+j+k];
a[j+k]=(X+Y)%mod;a[i+j+k]=(X+mod-Y)%mod;
if(f==0)a[j+k]=1ll*a[j+k]*inv2%mod,a[i+j+k]=1ll*a[i+j+k]*inv2%mod;
}
}
int main()
{
N=1<<read();register int i;
for(i=0;i<N;++i) a[i]=1ll*read()%mod;
for(i=0;i<N;++i) b[i]=1ll*read()%mod;
FWT_or(a,1);FWT_or(b,1);
for(i=0;i<N;++i) c[i]=1ll*a[i]*b[i]%mod;
FWT_or(a,-1);FWT_or(b,-1);FWT_or(c,-1);
for(i=0;i<N;++i) printf("%lld ",c[i]);puts("");
FWT_and(a,1);FWT_and(b,1);
for(i=0;i<N;++i) c[i]=1ll*a[i]*b[i]%mod;
FWT_and(a,-1);FWT_and(b,-1);FWT_and(c,-1);
for(i=0;i<N;++i) printf("%lld ",c[i]);puts("");
FWT_xor(a,1);FWT_xor(b,1);
for(i=0;i<N;++i) c[i]=1ll*a[i]*b[i]%mod;
FWT_xor(a,0);FWT_xor(b,0);FWT_xor(c,0);
for(i=0;i<N;++i) printf("%lld ",c[i]);puts("");
return 0;
}