func_code_string: #include <bits/stdc++.h>   using namespace std;   #pragma comment(linker,  /STACK:36777216 )   const int Nmax = 100100;   const int Drection[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};   int h, q;   long long minV[55], maxV[55];   long long leftDown(long long L, int hg) {     if (hg == h) return L;     return leftDown(L << 1ll, hg + 1);   }   long long rightDown(long long R, int hg) {     if (hg == h) return R;     return rightDown((R << 1ll) + 1, hg + 1);   }   inline void end(long long x) {     if (x == 0)       cout <<  Data not sufficient!  << endl;     else if (x == -1)       cout <<  Game cheated!  << endl;     else       cout << x << endl;     exit(0);   }   inline void add(long long x) {     static long long extra = -1;     if (x <= 0) end(extra);     if (extra != -1) end(0);     extra = x;   }   int main() {     ios_base::sync_with_stdio(0);     cin >> h >> q;     minV[1] = maxV[1] = 1;     for (int i = 2; i <= h; i++) {       minV[i] = minV[i - 1] * 2ll;       maxV[i] = maxV[i - 1] * 2ll + 1;     }     vector<pair<long long, long long> > list;     for (int i = 1; i <= q; i++) {       long long lv, L, R, ans;       cin >> lv >> L >> R >> ans;       if (ans == 1) {         if (minV[lv] <= L - 1)           list.push_back(make_pair(leftDown(minV[lv], lv), rightDown(L - 1, lv)));         if (R + 1 <= maxV[lv])           list.push_back(make_pair(leftDown(R + 1, lv), rightDown(maxV[lv], lv)));       } else         list.push_back(make_pair(leftDown(L, lv), rightDown(R, lv)));     }     sort(list.begin(), list.end());     long long L = leftDown(1, 1);     long long R = rightDown(1, 1);     for (int i = 0; i < list.size(); i++) {       if (list[i].first > L) {         add(L++);         i--;         continue;       }       L = max(L, list[i].second + 1);     }     while (L <= R) add(L++);     add(-10);     return 0;   }   