#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1<<3,M=998244353,K=3,I=499122177;
int a[N],b[N],c[N],n,mat[4];
void assign(int a,int b,int c,int d){
mat[0]=a,mat[1]=b,mat[2]=c,mat[3]=d;
}
void FWT(int* x){
for(int i=0;i<K;i++)
for(int j=0;j<(2<<i);j++)
if(!((j>>i)&1)){
int l=x[j],r=x[j+(1<<i)];
int v[2]={mat[0]*l+mat[1]*r,mat[2]*l+mat[3]*r};
x[j]=v[0]%M,x[j+(1<<i)]=v[1]%M;
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=0;i<(1<<n);i++)cin>>a[i];
for(int i=0;i<(1<<n);i++)cin>>b[i];
assign(1,0,1,1);
FWT(a),FWT(b);
for(int i=0;i<N;i++)c[i]=a[i]*b[i];
assign(1,0,-1,1);
FWT(a),FWT(b),FWT(c);
for(int i=0;i<(1<<n);i++)cout<<c[i]<<' ';
cout<<endl;
assign(1,1,0,1);
FWT(a),FWT(b);
for(int i=0;i<N;i++)c[i]=a[i]*b[i];
assign(1,-1,0,1);
FWT(a),FWT(b),FWT(c);
for(int i=0;i<(1<<n);i++)cout<<c[i]<<' ';
cout<<endl;
assign(1,1,1,-1);
FWT(a),FWT(b);
for(int i=0;i<N;i++)c[i]=a[i]*b[i];
assign(I,I,I,I-1);
FWT(a),FWT(b),FWT(c);
for(int i=0;i<(1<<n);i++)cout<<c[i]<<' ';
cout<<endl;
}