#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=400000+5, mod=998244353, gen=3;
int a[N], b[N], rev[N];
inline int read()
{
int x=0,f=1;char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*f;
}
int power(ll x, int t)
{
ll res=1;
while (t)
{
if (t&1) res=(ll)res*x%mod;
x=(ll)x*x%mod; t>>=1;
}
return res;
}
inline void NTT(int *a, int lim, int typ)
{
for (register int i=0; i<lim; i++)
if (i<rev[i]) swap(a[i], a[rev[i]]);
for (register int mid=1, len=mid<<1; mid<lim; mid<<=1, len=mid<<1)
{
ll gn=power(gen, (mod-1)/len);
for (register int now=0; now<lim; now+=len)
{
ll g=1;
for (register int j=0; j<mid; j++, g=(ll)g*gn%mod)
{
int a1=a[now+j], a2=((ll)g*a[now+j+mid])%mod;
a[now+j]=((ll)a1+a2)%mod; a[now+j+mid]=((ll)a1-a2+mod)%mod;
}
}
}
if (typ==-1) reverse(a+1, a+lim);
}
signed main()
{
int n=read(), m=read(), lim=1, cnt=0;
while (lim<=n+m) lim<<=1, cnt++;
for (register int i=0; i<=n; i++) a[i]=read();
for (register int i=0; i<=m; i++) b[i]=read();
for (register int i=0; i<=lim; i++)
rev[i]=(rev[i>>1]>>1)|((i&1)<<(cnt-1));
NTT(a, lim, 1); NTT(b, lim, 1);
for (register int i=0; i<=lim; i++) a[i]=((ll)a[i]*b[i])%mod;
NTT(a, lim, -1);
lim=power(lim, mod-2);
for (register int i=0; i<=n+m; i++)
printf("%d ", (ll)a[i]*lim%mod);
return 0;
}