/*hdu6061[NTT推公式] 2017多校3*/ #include <bits/stdc++.h> using namespace std; typedef long long LL; const LL MOD = 998244353; const int MAX_N = 1000000; int n, m, temp; LL a; LL inv[1000007]; LL Finv[1000007]; LL F[1000007]; LL A[500005], B[500005], C[500005]; LL quickPow(LL x, LL n, LL MOD) { LL ans = 1; for (; n; n >>= 1) { if (n & 1) ans = (ans * x) % MOD; x = (x * x) % MOD; } return ans; } void inv_init() { inv[1] = 1; for (int i = 2; i <= MAX_N; ++i) { inv[i] = (MOD - MOD / i) * inv[MOD % i] % MOD; } F[0] = Finv[0] = 1; for (int i = 1; i <= MAX_N; ++i) { F[i] = F[i - 1] * 1LL * i % MOD; Finv[i] = Finv[i - 1] * 1LL * inv[i] % MOD; } } /* ntt.run(a, len, 1, MOD); ntt.run(b, len, 1, MOD); REP(0, len) c[i] = a[i] * b[i] % MOD; ntt.run(c, len, -1, MOD); */ struct NTT { enum {g = 3}; // @private int rev(int x, int r) { int ans = 0; for (int i = 0; i < r; i++) { if (x & (1 << i)) ans += 1 << (r - i - 1); } return ans; } // @public void run(LL a[], int n, int on, LL MOD) { int r = (int)log2(n + 1e-4); for (int i = 0; i < n; i++) { int tmp = rev(i, r); if (i < tmp) swap(a[i], a[tmp]); } for (int s = 1; s <= r; s++) { int m = 1 << s; LL wn = quickPow(g, (MOD - 1) / m, MOD); for (int k = 0; k < n; k += m) { LL w = 1; for (int j = 0; j < (m >> 1); j++) { LL t = w * (a[k + j + (m >> 1)] % MOD) % MOD, u = a[k + j] % MOD; a[k + j] = (u + t) % MOD; a[k + j + (m >> 1)] = ((u - t) % MOD + MOD) % MOD; w *= wn; w %= MOD; } } } if (on < 0) { for (int i = 1; i < (n >> 1); i++) swap(a[i], a[n - i]); LL inv = quickPow(n, MOD - 2, MOD); for (int i = 0; i < n; i++) a[i] = a[i] % MOD * inv % MOD; } } } ntt; int main() { inv_init(); while (~scanf("%d", &n)) { a = 0; for (int i = 0; i <= n; i++) { scanf("%lld", &C[i]); } scanf("%d", &m); for (int i = 0; i < m; i++) { scanf("%d", &temp); a -= temp; if (a <= 0) a += MOD; } LL temp = 1LL; int len = 1; while (len < (2 * n)) len <<= 1; for (int i = 0; i < len; i++) { if (i <= n) { A[i] = temp * Finv[i] % MOD; B[i] = F[n - i] * C[n - i] % MOD; } else A[i] = B[i] = 0; temp = (temp * a) % MOD; } ntt.run(A, len, 1, MOD); ntt.run(B, len, 1, MOD); for (int i = 0; i < len; i++) { A[i] = (A[i] * B[i]) % MOD; } ntt.run(A, len, -1, MOD); for (int i = 0; i <= n; i++) { //cout << A[i] << endl; A[i] = (A[i] % MOD + MOD) % MOD * Finv[n - i] % MOD; } for (int i = 0; i <= n; i++) { printf("%lld ", A[n - i]); } puts(""); } return 0; }