#include<bits/stdc++.h> #define mod 998244353ll usingnamespace std; using ll = longlong; int n, m; ll qp(ll x, ll y){ ll ans = 1; while (y) { if (y & 1) ans = ans * x % mod; y >>= 1; x = x * x % mod; } return ans; } voidntt(vector<int>& a, int c, const vector<int>& rev, int lim){ static ll inv3 = qp(3, mod - 2); for (int i = 0; i < lim; ++i) if (i < rev[i]) swap(a[i], a[rev[i]]); for (int i = 1; i < lim; i <<= 1) { ll x = qp(~c ? 3 : inv3, (mod - 1) / (i << 1)); for (int j = 0; j < lim; j += (i << 1)) { ll y = 1; for (int k = 0; k < i; ++k, y = y * x % mod) { ll p = a[j + k], q = a[j + k + i] * y % mod; a[j + k] = (p + q) % mod; a[j + k + i] = (p - q + mod) % mod; } } } if (c == -1) { ll inv = qp(lim, mod - 2); for (auto&& i : a) i = i * inv % mod; } } vector<int> mult(vector<int> a, vector<int> b){ int n = a.size(), m = b.size(); int lim, l = 0; for (lim = 1; lim < n + m; lim <<= 1) ++l; a.resize(lim), b.resize(lim); vector<int> rev(lim); for (int i = 0; i < lim; ++i) rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (l - 1)); ntt(a, 1, rev, lim), ntt(b, 1, rev, lim); for (int i = 0; i < lim; ++i) a[i] = 1ll * a[i] * b[i] % mod; ntt(a, -1, rev, lim); a.resize(n + m - 1); //这一步很重要,在下面那道题中不加这个会 TLE! return a; } intmain(){ scanf("%d%d", &n, &m); vector<int> a(n + 1), b(m + 1); for (int i = 0; i <= n; ++i) { scanf("%d", &a[i]); } for (int j = 0; j <= m; ++j) { scanf("%d", &b[j]); } auto ans = mult(a, b); for (int i = 0; i <= (n + m); ++i) { printf("%d ", ans[i]); } return0; }