#define PROBLEM "https://judge.yosupo.jp/problem/subset_convolution"
#include<bits/stdc++.h>#define REP(i, n) for (int i = 0; i < (n); i++)
#include"library/bitwise/Ranked.hpp"
#include"library/mod/Modint.hpp"usingmint=Mint<longlong>;intmain(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);intn;std::cin>>n;intN=1<<n;std::vector<mint>a(N),b(N);REP(i,N)std::cin>>a[i];REP(i,N)std::cin>>b[i];autoc=BitwiseRanked::convolution(a,b);REP(i,N)std::cout<<c[i]<<"\n "[i+1<N];}
#line 1 "test/library-checker/Convolution/SubsetConvolution.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/subset_convolution"
#include<bits/stdc++.h>#define REP(i, n) for (int i = 0; i < (n); i++)
#line 2 "library/bitwise/Util.hpp"
namespacebitwise{staticintlog2(intN){intn=__builtin_ffs(N)-1;assert((1<<n)==N);returnn;}staticboolin(intS,inta){return(S>>a)&1;}}#line 3 "library/bitwise/Ranked.hpp"
#define REP_(i, n) for (int i = 0; i < (n); i++)
#define RREP_(i, n) for (int i = (n) - 1; i >= 0; i--)
classBitwiseRanked{staticintpopcount(intS){return__builtin_popcount(S);}public:template<typenameT>staticstd::vector<std::vector<T>>zeta(conststd::vector<T>&A){constintn=bitwise::log2(A.size());std::vector<std::vector<T>>RA(1<<n,std::vector<T>(n+1,0));REP_(S,1<<n)RA[S][popcount(S)]=A[S];REP_(i,n)REP_(S,1<<n)if(!bitwise::in(S,i))REP_(d,n+1)RA[S|(1<<i)][d]+=RA[S][d];returnRA;}template<typenameT>staticstd::vector<T>mobius(std::vector<std::vector<T>>RA){constintn=bitwise::log2(RA.size());REP_(i,n)REP_(S,1<<n)if(!bitwise::in(S,i))REP_(d,n+1)RA[S|(1<<i)][d]-=RA[S][d];std::vector<T>A(1<<n);REP_(S,1<<n)A[S]=RA[S][popcount(S)];returnA;}template<typenameT>staticstd::vector<T>convolution(conststd::vector<T>&A,conststd::vector<T>&B){constintn=bitwise::log2(A.size());autoRA=zeta(A);autoRB=zeta(B);REP_(S,1<<n){auto&ra=RA[S],rb=RB[S];RREP_(d,n+1){ra[d]*=rb[0];REP_(i,d)ra[d]+=ra[i]*rb[d-i];}}returnmobius(RA);}};#undef REP_
#undef RREP_
#line 2 "library/math/ExtraGCD.hpp"
usingll=longlong;std::pair<ll,ll>ext_gcd(lla,llb){if(b==0)return{1,0};auto[X,Y]=ext_gcd(b,a%b);// bX + (a%b)Y = gcd(a,b)// a%b = a - b(a/b)// ∴ aY + b(X-(a/b)Y) = gcd(a,b)llx=Y,y=X-(a/b)*Y;return{x,y};}#line 3 "library/mod/Modint.hpp"
template<typenameT,TMOD=998244353>structMint{inlinestaticconstexprTmod=MOD;Tv;Mint():v(0){}Mint(signedv):v(v){}Mint(longlongt){v=t%MOD;if(v<0)v+=MOD;}staticMintraw(intv){Mintx;x.v=v;returnx;}Mintpow(longlongk)const{Mintres(1),tmp(v);while(k){if(k&1)res*=tmp;tmp*=tmp;k>>=1;}returnres;}staticMintadd_identity(){returnMint(0);}staticMintmul_identity(){returnMint(1);}// Mint inv()const{return pow(MOD-2);}Mintinv()const{returnMint(ext_gcd(v,mod).first);}Mint&operator+=(Minta){v+=a.v;if(v>=MOD)v-=MOD;return*this;}Mint&operator-=(Minta){v+=MOD-a.v;if(v>=MOD)v-=MOD;return*this;}Mint&operator*=(Minta){v=1LL*v*a.v%MOD;return*this;}Mint&operator/=(Minta){return(*this)*=a.inv();}Mintoperator+(Minta)const{returnMint(v)+=a;}Mintoperator-(Minta)const{returnMint(v)-=a;}Mintoperator*(Minta)const{returnMint(v)*=a;}Mintoperator/(Minta)const{returnMint(v)/=a;}#define FRIEND(op) \
friend Mint operator op(int a, Mint b) { return Mint(a) op b; }
FRIEND(+);FRIEND(-);FRIEND(*);FRIEND(/);#undef FRIEND
Mintoperator+()const{return*this;}Mintoperator-()const{returnv?Mint(MOD-v):Mint(v);}booloperator==(constMinta)const{returnv==a.v;}booloperator!=(constMinta)const{returnv!=a.v;}staticMintcomb(longlongn,intk){Mintnum(1),dom(1);for(inti=0;i<k;i++){num*=Mint(n-i);dom*=Mint(i+1);}returnnum/dom;}friendstd::ostream&operator<<(std::ostream&os,constMint&m){os<<m.v;returnos;}friendstd::istream&operator>>(std::istream&is,Mint&m){is>>m.v;m.v%=MOD;if(m.v<0)m.v+=MOD;returnis;}};#line 8 "test/library-checker/Convolution/SubsetConvolution.test.cpp"
usingmint=Mint<longlong>;intmain(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);intn;std::cin>>n;intN=1<<n;std::vector<mint>a(N),b(N);REP(i,N)std::cin>>a[i];REP(i,N)std::cin>>b[i];autoc=BitwiseRanked::convolution(a,b);REP(i,N)std::cout<<c[i]<<"\n "[i+1<N];}