func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 33333;   const int mod = 998244353, G = 3;   int n, k, T, a[MAXN], W, rev[MAXN], gen[MAXN];   vector<int> vec[MAXN];   inline int qpow(int a, int b) {     int re = 1;     for (; b; b >>= 1, a = 1ll * a * a % mod)       if (b & 1) re = 1ll * re * a % mod;     return re;   }   inline int pls(int x, int y) { return x + y >= mod ? x + y - mod : x + y; }   inline void add(int &x, int y) { x = x + y >= mod ? x + y - mod : x + y; }   void NTT(vector<int> &arr, int len, int flg) {     for (int i = 0; i < len; ++i)       if (i < rev[i]) swap(arr[i], arr[rev[i]]);     for (int v, i = 2, B = W >> 1; i <= len; i <<= 1, B >>= 1)       for (int j = 0; j < len; j += i)         for (int k = j, x = 0; k < j + i / 2; ++k, x += B)           arr[k + i / 2] = pls(               arr[k],               mod - (v = 1ll * arr[k + i / 2] * gen[flg == 1 ? x : W - x] % mod)),                       add(arr[k], v);     if (flg == -1) {       int iv = qpow(len, mod - 2);       for (int i = 0; i < len; ++i) arr[i] = 1ll * arr[i] * iv % mod;     }   }   vector<int> solve(int l, int r) {     if (l == r) return vec[l];     int mid = (l + r) >> 1;     vector<int> L = solve(l, mid), R = solve(mid + 1, r);     int len = 1;     while (len <= r - l + 1) len <<= 1;     for (int i = 1; i < len; ++i)       rev[i] = (rev[i >> 1] >> 1) | ((i & 1) * (len >> 1));     L.resize(len), R.resize(len);     NTT(L, len, 1), NTT(R, len, 1);     for (int i = 0; i < len; ++i) L[i] = 1ll * L[i] * R[i] % mod;     NTT(L, len, -1);     L.resize(r - l + 2);     return L;   }   int main() {     scanf( %d%d , &n, &k);     for (W = 1; W <= n; W <<= 1)       ;     gen[0] = 1, gen[1] = qpow(G, (mod - 1) / W);     for (int i = 2; i <= W; ++i) gen[i] = 1ll * gen[i - 1] * gen[1] % mod;     for (int i = 1; i <= n; ++i)       scanf( %d , &a[i]), vec[i].resize(2), vec[i][0] = 1;     int op, q, x, y, d;     for (scanf( %d , &T); T--;) {       scanf( %d%d%d , &op, &q, &x);       if (op == 2)         scanf( %d , &y);       else         y = x;       scanf( %d , &d);       for (int i = 1; i <= n; ++i)         vec[i][1] =             ((q - ((x <= i && i <= y) ? (op == 1 ? d : a[i] + d) : a[i])) % mod +              mod) %             mod;       vector<int> ans = solve(1, n);       printf( %d n , ans[k]);     }   }   