1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
   | #include <bits/stdc++.h>
  using namespace std;
  const int N = (int)1e5 + 10;  const int mod = 998244353; const int G = 3;  
  int n, c[N], rev[1 << 21], fac[N]; 
  int fpw(int x, int k, int p) {   int ret = 1;    while(k) {     if(k & 1) ret = 1ll * ret * x % p;     x = 1ll * x * x % p; k >>= 1;     } return ret;  }
  int add(int x, int y) {   return (x += y) >= mod ? x - mod : x;  }
  void NTT(int *a, int L, int op) {   for(int i = 0; i < L; i++)      if(i < rev[i]) swap(a[i], a[rev[i]]);    for(int i = 1, l = 0; i < L; i <<= 1, l++) {     int w = fpw(G, (mod - 1) >> (l + 1), mod);      if(op == -1) w = fpw(w, mod - 2, mod);      for(int j = 0; j < L; j += (i << 1)) {       int wn = 1;        for(int k = j; k < i + j; k++) {         int t = (1ll * wn * a[i + k] % mod);          a[i + k] = add(a[k], mod - t);          a[k] = add(a[k], t);          wn = (1ll * wn * w) % mod;         }     }   }   if(op == -1) {     int invL = fpw(L, mod - 2, mod);      for(int i = 0; i < L; i++)        a[i] = (1ll * a[i] * invL % mod);    } }
  int f[1 << 21], g[1 << 21]; 
  int main() {   fac[0] = 1;   for(int i = 1; i <= (int)1e5; i++)      fac[i] = 1ll * fac[i - 1] * i % mod;    while(scanf("%d", &n) != EOF) {     int A = 0;      for(int i = 0; i <= n; i++)        scanf("%d", &c[i]);      int L = 1, l = 0;      while(L <= 2 * (n + 1)) L <<= 1, l++;      for(int i = 0; i < L; i++)       rev[i] = ((rev[i >> 1] >> 1) | (i & 1) << (l - 1));      memset(f, 0, sizeof(int) * L);      memset(g, 0, sizeof(int) * L);      int m; scanf("%d", &m);      for(int i = 1; i <= m; i++) {       int t; scanf("%d", &t); A -= t; A %= mod;      } A = (A + mod) % mod;      for(int i = 0; i <= n; i++)        f[i] = 1ll * c[i] * fac[i] % mod,        g[n - i] = 1ll * fpw(A, i, mod) * fpw(fac[i], mod - 2, mod) % mod;     NTT(f, L, 1), NTT(g, L, 1);      for(int i = 0; i < L; i++)       f[i] = 1ll * f[i] * g[i] % mod;      NTT(f, L, -1);      for(int i = n; i <= 2 * n; i++) {       printf("%d ", 1ll * f[i] * fpw(fac[i - n], mod - 2, mod) % mod);      } putchar('\n');    }   return 0;  }
   |