func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e5 + 500, mod = 998244353;   int K, tmp[N], tmpa[N], tmpb[N], rev[N], b[N], tw[N], w[N], limn, n, qn;   vector<int> a[N];   int qpower(int a, int b) {     int ans = 1;     for (; b; b >>= 1, a = 1ll * a * a % mod)       if (b & 1) ans = 1ll * ans * a % mod;     return ans;   }   void prework(int n) {     limn = 1;     while (limn <= n) limn <<= 1;     for (int i = 1; i < limn; i++)       rev[i] = (rev[i >> 1] >> 1) | ((i & 1) ? (limn >> 1) : 0);     for (int i = 1; i < limn; i <<= 1) {       int omg = qpower(3, (mod - 1) / (i << 1));       w[i] = 1;       for (int j = 1; j < i; j++) w[i + j] = 1ll * w[i + j - 1] * omg % mod;     }   }   void NTT(int a[], int l) {     for (int i = 0; i < l; i++) tmp[rev[i] / (limn / l)] = a[i];     for (int i = 1; i < l; i <<= 1)       for (int j = 0; j < l; j += i << 1)         for (int k = 0; k < i; k++) {           int x = tmp[j + k], y = 1ll * w[i + k] * tmp[i + j + k] % mod;           tmp[j + k] = (x + y) % mod, tmp[i + j + k] = (x - y) % mod;         }     for (int i = 0; i < l; i++) a[i] = tmp[i];   }   void mul(const vector<int> A, const vector<int> B, vector<int>& c) {     int la = A.size(), lb = B.size(), n = la + lb - 1;     int l = 1;     while (l < n) l <<= 1;     for (int i = 0; i < la; i++) tmpa[i] = A[i];     for (int i = la; i < l; i++) tmpa[i] = 0;     for (int i = 0; i < lb; i++) tmpb[i] = B[i];     for (int i = lb; i < l; i++) tmpb[i] = 0;     NTT(tmpa, l), NTT(tmpb, l);     for (int i = 0; i < l; i++) tmpa[i] = 1ll * tmpa[i] * tmpb[i] % mod;     reverse(tmpa + 1, tmpa + l);     NTT(tmpa, l);     int iv = mod - (mod - 1) / l;     if (K + 1 < n) n = K + 1;     c.resize(n);     for (int i = 0; i < n; i++) c[i] = 1ll * tmpa[i] * iv % mod;   }   void solve(int rot, int lt, int rt) {     if (lt == rt) {       a[rot].resize(2);       a[rot][0] = 1, a[rot][1] = b[lt];       return;     }     int mid = (lt + rt) >> 1;     solve(rot << 1, lt, mid), solve(rot << 1 | 1, mid + 1, rt);     mul(a[rot << 1], a[rot << 1 | 1], a[rot]);   }   int main() {     scanf( %d%d , &n, &K);     prework(n);     for (int i = 1; i <= n; i++) scanf( %d , tw + i);     scanf( %d , &qn);     for (int i = 1, opt, l, r, q, d; i <= qn; i++) {       scanf( %d , &opt);       if (opt == 1) {         scanf( %d%d%d , &q, &l, &d);         for (int j = 1; j <= n; j++) b[j] = q - tw[j];         b[l] = q - d;         solve(1, 1, n);         printf( %d n , (a[1][K] + mod) % mod);       } else {         scanf( %d%d%d%d , &q, &l, &r, &d);         for (int j = 1; j <= n; j++) b[j] = q - tw[j];         for (int j = l; j <= r; j++) b[j] -= d;         solve(1, 1, n);         printf( %d n , (a[1][K] + mod) % mod);       }     }   }   