func_code_string: #include <bits/stdc++.h>   using namespace std;   long long sum[55];   long long two[55];   const int maxn = 200000 + 10;   struct node {     long long l;     long long r;   } jiedian[maxn];   int cmp(node a, node b) { return a.l < b.l || (a.l == b.l && a.r < b.r); }   int main() {     two[0] = 1;     sum[1] = 1;     for (int i = 1; i <= 50; i++) two[i] = two[i - 1] * 2;     for (int i = 2; i <= 50; i++) sum[i] = sum[i - 1] + two[i - 1];     int h, q;     scanf( %d%d , &h, &q);     int cnt = 0;     for (int i = 1; i <= q; i++) {       long long a, l, r, ans;       scanf( %lld%lld%lld%lld , &a, &l, &r, &ans);       l = l * two[h - a];       int temp1 = a;       while (temp1 < h) {         r = r * 2 + 1;         temp1++;       }       if (ans) {         if (l > sum[h - 1] + 1) {           jiedian[cnt].l = sum[h - 1] + 1;           jiedian[cnt++].r = l - 1;         }         if (r < sum[h]) {           jiedian[cnt].l = r + 1;           jiedian[cnt++].r = sum[h];         }       } else {         jiedian[cnt].l = l;         jiedian[cnt++].r = r;       }     }     sort(jiedian, jiedian + cnt, cmp);     long long t = 0;     long long head = sum[h - 1] + 1;     long long temp = sum[h - 1];     long long ans;     if (cnt > 0) {       t += jiedian[0].l - head;       if (t == 1) ans = sum[h - 1] + 1;       temp = jiedian[0].r;     }     for (int i = 1; i < cnt; i++) {       if (jiedian[i].l > temp + 1) {         t += jiedian[i].l - temp - 1;         if (t == 1) ans = jiedian[i].l - 1;         temp = jiedian[i].r;       } else {         if (jiedian[i].r <= temp)           continue;         else {           temp = jiedian[i].r;         }       }     }     if (sum[h] != temp) {       t = t + sum[h] - temp;       if (t == 1) ans = sum[h];     }     if (t == 0) printf( Game cheated! n );     if (t == 1) printf( %lld n , ans);     if (t > 1) printf( Data not sufficient! n );     return 0;   }   