func_code_string: #include <bits/stdc++.h>   using namespace std;   struct P {     int x, y, z;     bool operator<(const P &a) const { return y > a.y; };   };   int a, b, c, d, i, k, n, m, e, dx[10] = {1, 0, -1, 0, 1, 1, -1, -1},                                  dy[10] = {0, 1, 0, -1, 1, -1, 1, -1};   long long o[500101];   int l[500111];   int j[201001];   long long x, y, z, mod = 998244353;   string r;   P u[500101];   queue<int> q;   stack<int> s;   map<int, int> p;   vector<int> v;   bool as(P a, P b) {     if (a.x != b.x) return a.x < b.x;     return a.y > b.y;   }   int main() {     scanf( %d %d %d , &a, &b, &c);     for (int t = 1; t <= c; t++) {       scanf( %d %d %d , &n, &m, &k);       u[t] = {n, m, k};     }     sort(u + 1, u + c + 1, as);     z = 1;     for (int i = 0; i < b; i++) {       e = 0;       for (int t = 1; t <= a + 1; t++) l[t] = o[t] = 0;       for (int t = 1; t <= c; t++)         if (u[t].z & (1 << i)) {           int p;           for (p = max(e + 1, u[t].x); p <= u[t].y; p++) l[p] = 1;           e = p - 1;         }       e = a + 1;       n = a;       o[a + 1] = 1;       x = 1;       for (int t = c; t; t--)         if ((u[t].z & (1 << i)) == 0 && u[t].x <= n) {           for (; n > u[t].y; n--)             if (!l[n]) o[n] = x, x *= 2, x %= mod;           for (; n >= u[t].x; n--)             if (!l[n]) {               o[n] = x, x *= 2, x %= mod;             }           for (; e > u[t].y; e--) x = (x - o[e] + mod) % mod;         }       for (; n >= 1; n--)         if (!l[n]) x *= 2, x %= mod;       z *= x, z %= mod;     }     printf( %lld , z);   }   