func_code_string: #include <bits/stdc++.h>   const int kN = 18;   const int kT = 1 << kN;   const int kInf = 0x3f3f3f3f;   int a[kT];   bool fan_of[kT];   std::map<std::pair<int, int>, int> cal[4];   int Cal(int l, int r, int st) {     if (r == l + 2) {       int cnt_fan = (int)fan_of[l] + fan_of[l + 1], cnt_st = (st & 1) + (st >> 1);       return cnt_fan == cnt_st ? std::min(cnt_st, 1) : -kInf;     }     std::pair<int, int> tmp = std::make_pair(l, r);     if (cal[st].count(tmp)) return cal[st][tmp];     int mid = (l + r) >> 1, ret = -kInf;     for (int i = 0; i < 4; ++i)       for (int j = 0; j < 4; ++j) {         int v1 = ((i << 1) | (i & 2) | j) & 3, v2 = ((j << 1) | (j & 2) | i) & 3;         if (v1 == st || v2 == st) {           ret = std::max(ret, Cal(l, mid, i) + Cal(mid, r, j));         }       }     return cal[st][tmp] = ret + st;   }   int main() {     int n, k, t, ans = 0;     scanf( %d%d , &n, &k);     t = 1 << n;     for (int i = 1; i <= k; ++i) scanf( %d , a + i), fan_of[--a[i]] = true;     for (int i = 0; i < 4; ++i) ans = std::max(ans, Cal(0, t, i));     printf( %d , ans + !(!k));     return 0;   }   