func_code_string: #include <bits/stdc++.h>   using namespace std;   inline int read() {     int x = 0, f = 1;     char ch = getchar();     for (; !isdigit(ch); ch = getchar())       if (ch ==  - ) f = -1;     for (; isdigit(ch); ch = getchar()) x = x * 10 + ch -  0 ;     return x * f;   }   inline long long readll() {     long long x = 0, f = 1;     char ch = getchar();     for (; !isdigit(ch); ch = getchar())       if (ch ==  - ) f = -1;     for (; isdigit(ch); ch = getchar()) x = x * 10 + ch -  0 ;     return x * f;   }   const int N = 200005;   int tag[N << 2], f[N << 2][2][32], a[N];   int S, now;   inline void pushup(int rt) {     int ls = rt << 1, rs = rt << 1 | 1;     for (int i = 0; i < S; ++i)       f[rt][0][i] = f[ls][0][f[rs][0][i]], f[rt][1][i] = f[ls][1][f[rs][1][i]];   }   inline void Cover(int rt) { swap(f[rt][0], f[rt][1]), tag[rt] ^= 1; }   inline void pushdown(int rt) {     Cover(rt << 1);     Cover(rt << 1 | 1);     tag[rt] ^= 1;   }   void build(int l, int r, int rt) {     if (l == r) {       for (int i = 0; i < S; ++i)         f[rt][a[l]][i] = (i << 1) % S + 1,         f[rt][a[l] ^ 1][i] = (i << 1) % S + (i != S - 1);       return;     }     int mid = (l + r) >> 1;     build(l, mid, rt << 1);     build(mid + 1, r, rt << 1 | 1);     pushup(rt);   }   void update(int l, int r, int rt, int L, int R) {     if (L <= l && r <= R) {       Cover(rt);       return;     }     if (tag[rt]) pushdown(rt);     int mid = (l + r) >> 1;     if (L <= mid) update(l, mid, rt << 1, L, R);     if (R > mid) update(mid + 1, r, rt << 1 | 1, L, R);     pushup(rt);   }   void query(int l, int r, int rt, int L, int R) {     if (L <= l && r <= R) {       now = f[rt][0][now];       return;     }     if (tag[rt]) pushdown(rt);     int mid = (l + r) >> 1;     if (R > mid) query(mid + 1, r, rt << 1 | 1, L, R);     if (L <= mid) query(l, mid, rt << 1, L, R);   }   int main() {     int n = read(), m = read(), q = read();     S = (1 << m);     for (int i = 1; i <= n; ++i) a[i] = readll() % 2;     build(1, n, 1);     while (q--) {       int opt = read(), l = read(), r = read();       if (opt == 1) {         if (readll() % 2) update(1, n, 1, l, r);       } else {         now = S - 1;         query(1, n, 1, l, r);         putchar(now % 2 ?  1  :  2 );         putchar(  n );       }     }     return 0;   }   