func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( O3 )   const double PI = acos(-1);   template <class A, class B>   std::ostream& operator<<(std::ostream& st, const std::pair<A, B> p) {     st <<  (  << p.first <<  ,   << p.second <<  ) ;     return st;   }   using namespace std;   const int mod = 998244353;   int add(int a, int b) {     a += b;     if (a >= mod) a -= mod;     if (a < 0) a += mod;     return a;   }   int mul(int a, int b) { return (a * (long long)b) % mod; }   const int MAX = 500 * 1000 + 10;   int n, K, m;   int L[MAX], R[MAX], X[MAX];   int cnt[MAX];   int val[MAX];   int tail[MAX];   int p2[MAX];   int dp[MAX], sum[MAX];   int prv[MAX], nxt[MAX];   int solve(int b) {     static std::vector<std::pair<int, int> > V;     for (int i = 0; i < (n + 1); i++) cnt[i] = 0;     V.clear();     for (int i = 0; i < (m); i++) {       int x = (X[i] >> b) & 1;       if (x) {         cnt[L[i]]++;         cnt[R[i] + 1]--;       } else {         V.emplace_back(L[i], R[i]);       }     }     for (int i = 1; i <= n; i++) {       cnt[i] += cnt[i - 1];       val[i] = (cnt[i] > 0) + val[i - 1];     }     for (int i = 1, v = -1; i <= n; i++) {       if (!cnt[i]) v = i;       prv[i] = v;     }     for (int i = n, v = -1; i >= 1; i--) {       if (!cnt[i]) v = i;       nxt[i] = v;     }     for (int i = 1; i <= n; i++) tail[i] = -1;     for (auto p : V) {       int l = p.first, r = p.second;       int ctr = val[r] - val[l - 1];       if (ctr == r - l + 1) return 0;       l = nxt[l];       r = prv[r];       l = l - val[l];       r = r - val[r];       tail[r] = max(tail[r], l);     }     int m = n - val[n];     if (!m) return 1;     dp[0] = 1;     sum[0] = 1;     int L = 0;     for (int i = 1; i <= m; i++) {       dp[i] = add(sum[i - 1], L ? -sum[L - 1] : 0);       sum[i] = add(dp[i], sum[i - 1]);       L = max(L, tail[i]);     }     int ret = add(sum[m], L ? -sum[L - 1] : 0);     return ret;   }   int main() {     p2[0] = 1;     for (int i = 1; i < MAX; i++) p2[i] = mul(2, p2[i - 1]);     scanf( %d %d %d , &n, &K, &m);     for (int i = 0; i < (m); i++) scanf( %d %d %d , L + i, R + i, X + i);     int ans = 1;     for (int b = 0; b < (K); b++) {       ans = mul(ans, solve(b));       if (!ans) break;     }     cout << ans << endl;     return 0;   }   