// 1002i: polynomial multiply, n,m <= 1e5, coefficients < 10.
// NTT mod 998244353 (single prime suffices: c_k <= 81*100001 < 998244353).
#include <cstdio>
#include <cstring>
typedef unsigned u32;
typedef unsigned long long u64;
static const u32 MOD = 998244353;
static inline u32 fpow(u32 a, u32 e) {
u64 r = 1, b = a;
while (e) { if (e & 1) r = r * b % MOD; b = b * b % MOD; e >>= 1; }
return (u32)r;
}
static u32 A[1 << 19], B[1 << 19];
static void ntt_dif(u32 *a, int n) {
for (int len = n; len > 1; len >>= 1) {
int half = len >> 1;
u32 wlen = fpow(3, (MOD - 1) / len);
for (int i = 0; i < n; i += len) {
u32 w = 1;
u32 *p = a + i, *q = a + i + half;
for (int j = 0; j < half; j++) {
u32 u = p[j], v = q[j];
u32 s = u + v; if (s >= MOD) s -= MOD;
u32 d = u >= v ? u - v : u - v + MOD;
p[j] = s;
q[j] = (u32)((u64)d * w % MOD);
w = (u32)((u64)w * wlen % MOD);
}
}
}
}
static void ntt_dit_inv(u32 *a, int n) {
for (int len = 2; len <= n; len <<= 1) {
int half = len >> 1;
u32 wlen = fpow(3, MOD - 1 - (MOD - 1) / len);
for (int i = 0; i < n; i += len) {
u32 w = 1;
u32 *p = a + i, *q = a + i + half;
for (int j = 0; j < half; j++) {
u32 u = p[j], v = (u32)((u64)q[j] * w % MOD);
u32 s = u + v; if (s >= MOD) s -= MOD;
u32 d = u >= v ? u - v : u - v + MOD;
p[j] = s; q[j] = d;
w = (u32)((u64)w * wlen % MOD);
}
}
}
u32 ninv = fpow((u32)n, MOD - 2);
for (int i = 0; i < n; i++) A[i] = (u32)((u64)A[i] * ninv % MOD);
}
static inline int readInt(char *&p) {
while (*p && (*p < '0' || *p > '9')) p++;
int x = 0;
while (*p >= '0' && *p <= '9') x = x * 10 + (*p++ - '0');
return x;
}
int main() {
static char buf[1 << 22];
int len = (int)fread(buf, 1, sizeof(buf) - 1, stdin);
buf[len] = 0;
char *p = buf;
int n = readInt(p), m = readInt(p);
int N = 1; while (N < n + m + 1) N <<= 1;
for (int i = 0; i <= n; i++) A[i] = readInt(p);
for (int i = 0; i <= m; i++) B[i] = readInt(p);
ntt_dif(A, N); ntt_dif(B, N);
for (int i = 0; i < N; i++) A[i] = (u32)((u64)A[i] * B[i] % MOD);
ntt_dit_inv(A, N);
static char out[1 << 23];
char *o = out;
for (int i = 0; i <= n + m; i++) {
u32 v = A[i];
char tmp[12]; int t = 0;
if (v == 0) tmp[t++] = '0';
while (v) { tmp[t++] = char('0' + v % 10); v /= 10; }
while (t) *o++ = tmp[--t];
*o++ = i == n + m ? '\n' : ' ';
}
fwrite(out, 1, o - out, stdout);
return 0;
}