#include <algorithm>
#include <iostream>
using namespace std;
const int N = 1 << 21, g = 3, mod = 998244353;
int n, m, a[N], b[N], lon, len = 1, ilen, rev[N];
inline int qpow(int x, int k)
{
int res = 1;
while (k)
{
if (k & 1)
res = 1ll * res * x % mod;
x = 1ll * x * x % mod, k >>= 1;
}
return res;
}
inline void NTT(int *f, bool type)
{
for (int i = 0; i < len; i++)
if (i < rev[i])
swap(f[i], f[rev[i]]);
for (int i = 1; i < len; i <<= 1)
for (int j = 0, gn = qpow(g, (mod - 1) / (i << 1)); j < len; j += i << 1)
for (int k = 0, g0 = 1; k < i; k++, g0 = 1ll * g0 * gn % mod)
{
int x = f[j + k], y = 1ll * g0 * f[i + j + k] % mod;
f[j + k] = (x + y) % mod, f[i + j + k] = (x - y) % mod;
}
if (!type)
{
reverse(f + 1, f + len);
for (int i = 0; i < len; i++)
f[i] = 1ll * f[i] * ilen % mod;
}
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
cin >> n >> m;
for (int i = 0; i <= n; i++)
cin >> a[i];
for (int i = 0; i <= m; i++)
cin >> b[i];
while (len <= n + m)
lon++, len <<= 1;
ilen = qpow(len, mod - 2);
for (int i = 0; i < len; i++)
rev[i] = rev[i >> 1] >> 1 | (i & 1) << lon - 1;
NTT(a, 1), NTT(b, 1);
for (int i = 0; i < len; i++)
a[i] = 1ll * a[i] * b[i] % mod;
NTT(a, 0);
for (int i = 0; i <= n + m; i++)
cout << (a[i] + mod) % mod << " ";
return 0;
}