func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e5 + 10;   const int mod = 998244353;   int read() {     int x = 0, f = 1;     char c = getchar();     while (c <  0  || c >  9 ) {       if (c ==  - ) f = -1;       c = getchar();     }     while (c >=  0  && c <=  9 ) x = (x << 1) + (x << 3) + c -  0 , c = getchar();     return x * f;   }   int qpow(int a, int p, int mod) {     int res = 1;     while (p) {       if (p & 1) res = 1ll * res * a % mod;       a = 1ll * a * a % mod;       p >>= 1;     }     return res;   }   int inc(int x, int y, int mo) {     if (y < 0) y += mo;     if (x + y >= mo) x -= mo;     return x + y;   }   const int P = 998244353, gi = 3;   const double pi = acos(-1.0);   int rev[N];   void NTT(int *A, int n, int inv) {     for (int i = 0; i < n; i++)       if (i < rev[i]) swap(A[i], A[rev[i]]);     for (int l = 1; l < n; l <<= 1) {       int tt = qpow(gi, (P - 1) / (l << 1), P);       int temp = (inv == 1 ? tt : qpow(tt, P - 2, P));       for (int i = 0; i < n; i += (l << 1)) {         int omega = 1;         for (int j = 0; j < l; j++, omega = 1ll * omega * temp % P) {           int x = A[i + j], y = 1ll * omega * A[i + j + l] % P;           A[i + j] = inc(x, y, P);           A[i + j + l] = inc(x, -y, P);         }       }     }     int invv = qpow(n, P - 2, P);     if (inv == -1)       for (int i = 0; i < n; i++) A[i] = 1ll * A[i] * invv % P;   }   int NTTinit(int n, int m) {     int ML = 1, bit = 0;     while (ML <= n + m) ML <<= 1, bit++;     for (int i = 0; i < ML; i++)       rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (bit - 1));     return ML;   }   void NTTX(int *a, int n, int *b, int m) {     int ML = NTTinit(n, m);     NTT(a, ML, 1);     NTT(b, ML, 1);     for (int i = 0; i < ML; i++) a[i] = 1ll * a[i] * b[i] % P;     NTT(a, ML, -1);   }   int b[N];   void solve(int l, int r, int *res) {     if (l == r) {       res[0] = 1;       res[1] = b[l];       return;     }     int mid = (l + r) >> 1;     int n = (mid - l + 1), m = (r - mid + 1);     int ML = NTTinit(n, m);     int L[ML], R[ML];     memset(L, 0, sizeof(L));     memset(R, 0, sizeof(R));     solve(l, mid, L);     solve(mid + 1, r, R);     NTTX(L, n, R, m);     for (int i = 0; i <= r - l + 1; i++) res[i] = L[i];   }   int a[N], C[N];   int main() {     int n = read(), k = read();     for (int i = 1; i <= n; i++) a[i] = read();     int Q = read();     while (Q--) {       int op = read();       memset(C, 0, sizeof(C));       if (op == 1) {         int q = read(), ii = read(), d = read();         for (int i = 1; i <= n; i++)           b[i] = (q - (i == ii ? d : a[i]) + mod) % mod;       } else {         int q = read(), l = read(), r = read(), d = read();         for (int i = 1; i <= n; i++)           b[i] = (q - ((i <= r && i >= l) ? (d + a[i]) : a[i]) + mod) % mod;       }       solve(1, n, C);       printf( %d n , C[k]);     }   }   