#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=1100000;
const int Mod=998244353;
const int rt=3;
const int rtinv=332748118;//qpow(rt,Mod-2)
int n,x,lena,lenb,rev[MAXN];
char sa[MAXN],sb[MAXN];
int a[MAXN],b[MAXN];
inline int MOD(int x){
if (x<0) x+=Mod;
if (x>=Mod) x-=Mod;
return x;
}
int qpow(int x,int a){
int res=1;
while (a){
if (a&1) res=1ll*res*x%Mod;
x=1ll*x*x%Mod; a>>=1;
}
return res;
}
void NTT(int *a,bool inv){
for (int i=0;i<n;i++)
if (i<rev[i]) swap(a[i],a[rev[i]]);
for (int l=2;l<=n;l<<=1){
int m=l>>1,o;
if (inv) o=qpow(rtinv,(Mod-1)/l);
else o=qpow(rt,(Mod-1)/l);
for (int *p=a;p!=a+n;p+=l){
int omg=1;
for (int i=0;i<m;i++,omg=1ll*omg*o%Mod){
int t=1ll*omg*p[i+m]%Mod;
p[i+m]=MOD(p[i]-t);
p[i]=MOD(p[i]+t);
}
}
}
}
int main(){
scanf("%d%d",&lena,&lenb);
lena++; lenb++;
n=1; int lim=0;
while (n<lena+lenb){
n<<=1;
lim++;
}
for (int i=0;i<n;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(lim-1));
for (int i=0;i<lena;i++) scanf("%d",&a[lena-i-1]);
for (int i=0;i<lenb;i++) scanf("%d",&b[lenb-i-1]);
NTT(a,false); NTT(b,false);
for (int i=0;i<n;i++) a[i]=1ll*a[i]*b[i]%Mod;
NTT(a,true);
int t=qpow(n,Mod-2);
for (int i=lena+lenb-2;i>0;i--) printf("%lld ",1ll*a[i]*t%Mod);
printf("%lld\n",1ll*a[0]*t%Mod);
return 0;
}