RT
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2.5e6+5,P=998244353;
int n,m,t[N];
ll a[N],b[N],invn,inv3;
ll qpow(ll a,ll b){
ll res=1;
while(b){
if(b&1) res=res*a%P;
a=a*a%P,b>>=1;
}
return res;
}
void ntt(ll *f,int flag){
for(int i=0;i<n;i++)
if(i<t[i]) swap(f[i],f[t[i]]);
for(int Len=2;Len<=n;Len<<=1){
int len=Len>>1;
ll sav=qpow(flag?3:inv3,(P-1)/Len);
for(int l=0;l<n;l+=Len){
ll buf=1;
for(int i=l;i<l+len;i++){
ll tmp=buf*f[i+len]%P;
f[i+len]=(f[i]-tmp+P)%P,f[i]=(f[i]+tmp)%P;
buf=buf*sav%P;
}
}
}
if(flag==1) return;
}
int main(){
cin>>n>>m;
for(int i=0;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=0;i<=m;i++)
scanf("%lld",&b[i]);
for(m+=n,n=1;n<=m;n<<=1);
for(int i=0;i<n;i++)
t[i]=(t[i>>1]>>1)|(i&1?n>>1:0);
inv3=qpow(3,P-2),invn=qpow(n,P-2);
ntt(a,1),ntt(b,1);
for(int i=0;i<n;i++)
a[i]=a[i]*b[i]%P;
ntt(a,-1);
for(int i=0;i<=m;i++)
printf("%lld ",a[i]*invn%P);
return 0;
}