func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXQ = 2e5;   vector<int> solve(int K, vector<tuple<uint32_t, uint32_t, int> > V) {     uint32_t mask = (((uint32_t)1) << K) - 1;     vector<int> HT(1 << K), LT(1 << K);     for (auto [l, r, v] : V)       if (v) {         uint32_t lhi = l >> K, llo = l & mask;         uint32_t rhi = r >> K, rlo = r & mask;         if (lhi == rhi) {           LT[llo]++;           if (rlo != ((1 << K) - 1)) LT[rlo + 1]--;         } else {           LT[llo]++;           LT[0]++;           if (rlo != ((1 << K) - 1)) LT[rlo + 1]--;         }         HT[lhi]++;         if (rhi != ((1 << K) - 1)) HT[rhi + 1]--;       }     for (int i = 0; i < (1 << K) - 1; ++i) HT[i + 1] += HT[i];     for (int i = 0; i < (1 << K); ++i)       if (HT[i]) HT[i] = 1;     for (int i = 0; i < (1 << K) - 1; ++i) LT[i + 1] += LT[i];     for (int i = 0; i < (1 << K); ++i)       if (LT[i]) LT[i] = 1;     auto ans = LT;     copy(HT.begin(), HT.end(), back_inserter(ans));     for (int i = 0; i < (1 << K) - 1; ++i) HT[i + 1] += HT[i];     for (int i = 0; i < (1 << K) - 1; ++i) LT[i + 1] += LT[i];     auto SH = [&](int L, int R) {       int ans = HT[R];       if (L) ans -= HT[L - 1];       return ans;     };     auto SL = [&](int L, int R) {       int ans = LT[R];       if (L) ans -= LT[L - 1];       return ans;     };     for (auto [l, r, v] : V)       if (!v) {         uint32_t lhi = l >> K, llo = l & mask;         uint32_t rhi = r >> K, rlo = r & mask;         if (lhi == rhi) {           if (SH(lhi, lhi) != 0 && SL(llo, rlo) != 0) return {};         } else {           if (SH(lhi, lhi) != 0 && SL(llo, (1 << K) - 1) != 0) return {};           if (SH(lhi + 1, rhi - 1) != 0 && SL(0, (1 << K) - 1) != 0) return {};           if (SH(rhi, rhi) != 0 && SL(0, rlo) != 0) return {};         }       }     return ans;   }   int K, Q;   uint32_t L[MAXQ], R[MAXQ], V[MAXQ];   int main() {     scanf( %d%d , &K, &Q);     for (int i = 0; i < Q; ++i) {       scanf( %  SCNu32  %  SCNu32  %  SCNu32, L + i, R + i, V + i);     }     vector<vector<int> > ans(16);     for (int i = 0; i < 16; ++i) {       vector<tuple<uint32_t, uint32_t, int> > P;       for (int j = 0; j < Q; ++j) P.emplace_back(L[j], R[j], (V[j] >> i) & 1);       ans[i] = solve(K, P);       if (ans[i].size() == 0) {         puts( impossible );         return 0;       }     }     puts( possible );     for (int i = 0; i < (2 << K); ++i) {       int r = 0;       for (int j = 0; j < 16; ++j)         if (ans[j][i]) r |= 1 << j;       printf( %d n , r);     }     return 0;   }   