#include <cstdio>
#include <algorithm>
typedef long long LL;
const int Mod = 998244353;
const int G = 3, iG = 332748118;
const int MS = 1 << 21;
inline LL qPow(LL b, int e) {
LL a = 1;
for (; e; e >>= 1, b = b * b % Mod)
if (e & 1) a = a * b % Mod;
return a;
}
int Sz, R[MS]; LL InvSz;
inline void InitFNTT(int N) {
int Bt = 0;
while (1 << Bt < N) ++Bt;
if (Sz == (1 << Bt)) return ;
Sz = 1 << Bt, InvSz = -(Mod - 1) / Sz;
for (int i = 0; i < Sz; ++i) R[i] = R[i >> 1] >> 1 | (i & 1) << (Bt - 1);
}
inline void FNTT(LL *A, int Ty) {
for (int i = 0; i < Sz; ++i) if (R[i] < i) std::swap(A[R[i]], A[i]);
for (int j = 1, j2 = 2; j < Sz; j <<= 1, j2 <<= 1) {
LL gn = qPow(~Ty ? G : iG, (Mod - 1) / j2), g, X, Y;
for (int i = 0, k; i < Sz; i += j2) {
for (k = 0, g = 1; k < j; ++k, g = g * gn % Mod) {
X = A[i + k], Y = g * A[i + j + k] % Mod;
A[i + k] = (X + Y) % Mod, A[i + j + k] = (X - Y) % Mod;
}
}
}
if (!~Ty) for (int i = 0; i < Sz; ++i) A[i] = A[i] * InvSz % Mod;
}
int N, M;
LL A[MS], B[MS];
int main(){
scanf("%d%d", &N, &M);
for (int i = 0; i <= N; ++i) scanf("%lld", &A[i]);
for (int i = 0; i <= M; ++i) scanf("%lld", &B[i]);
InitFNTT(N + M + 1);
FNTT(A, 1), FNTT(B, 1);
for (int i = 0; i < Sz; ++i) A[i] = A[i] * B[i] % Mod;
FNTT(A, -1);
for (int i = 0; i < N + M + 1; ++i) printf("%lld ", (A[i] + Mod) % Mod);
return 0;
}