func_code_string: #include <bits/stdc++.h>   using namespace std;   const int G = 3;   const int MOD = 998244353;   const int N = (1 << 15) + 5;   int rev[N], w[N], inv_n;   int bigMod(int a, int e, int mod) {     if (e == -1) e = mod - 2;     int ret = 1;     while (e) {       if (e & 1) ret = (long long)ret * a % mod;       a = (long long)a * a % mod;       e >>= 1;     }     return ret;   }   void prepare(int &n) {     int sz = abs(31 - __builtin_clz(n));     int r = bigMod(G, (MOD - 1) / n, MOD);     inv_n = bigMod(n, MOD - 2, MOD), w[0] = w[n] = 1;     for (int i = 1; i < n; ++i) w[i] = (long long)w[i - 1] * r % MOD;     for (int i = 1; i < n; ++i)       rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (sz - 1));   }   void ntt(int *a, int n, int dir) {     for (int i = 1; i < n - 1; ++i) {       if (i < rev[i]) swap(a[i], a[rev[i]]);     }     for (int m = 2; m <= n; m <<= 1) {       for (int i = 0; i < n; i += m) {         for (int j = 0; j < (m >> 1); ++j) {           int &u = a[i + j], &v = a[i + j + (m >> 1)];           int t = (long long)v * w[dir ? n - n / m * j : n / m * j] % MOD;           v = u - t < 0 ? u - t + MOD : u - t;           u = u + t >= MOD ? u + t - MOD : u + t;         }       }     }     if (dir)       for (int i = 0; i < n; ++i) a[i] = (long long)a[i] * inv_n % MOD;   }   int f_a[N], f_b[N];   vector<long long> multiply(vector<long long> a, vector<long long> b) {     int sz = 1, n = a.size(), m = b.size();     while (sz < n + m - 1) sz <<= 1;     prepare(sz);     for (int i = 0; i < sz; ++i) f_a[i] = i < n ? a[i] : 0;     for (int i = 0; i < sz; ++i) f_b[i] = i < m ? b[i] : 0;     ntt(f_a, sz, 0);     ntt(f_b, sz, 0);     for (int i = 0; i < sz; ++i) f_a[i] = (long long)f_a[i] * f_b[i] % MOD;     ntt(f_a, sz, 1);     return vector<long long>(f_a, f_a + n + m - 1);   }   int n, k, q;   long long a[N], b[N];   vector<long long> get(int lo, int hi) {     if (lo == hi) return {b[lo], 1};     int mid = lo + hi >> 1;     vector<long long> one = get(lo, mid);     vector<long long> two = get(mid + 1, hi);     return multiply(one, two);   }   int main() {     cin >> n >> k;     for (int i = 1; i <= n; ++i) scanf( %lld , a + i);     cin >> q;     while (q--) {       long long cmd, x, l, r, p;       scanf( %lld %lld %lld %lld , &cmd, &x, &l, &r);       if (cmd == 1) {         for (int i = 1; i <= n; ++i) {           b[i] = a[i];           if (i == l) b[i] = r;         }       } else {         scanf( %lld , &p);         for (int i = 1; i <= n; ++i) {           b[i] = a[i];           if (l <= i and i <= r) b[i] += p;         }       }       for (int i = 1; i <= n; ++i) {         b[i] = x - b[i], b[i] %= MOD;         if (b[i] < 0) b[i] += MOD;       }       vector<long long> yo = get(1, n);       printf( %lld n , yo[n - k]);     }     return 0;   }   