func_code_string: #include <bits/stdc++.h>   using namespace std;   uint64_t rnd_data = 0xDEADBEEFDULL;   inline void my_srand(int seed) { rnd_data = ((uint64_t)seed << 16) | 0x330E; }   inline int my_rand() {     rnd_data = rnd_data * 0x5DEECE66DULL + 0xB;     return (rnd_data >> 17) & 0x7FFFFFFF;   }   template <typename T>   void my_random_shuffle(T b, T e) {     for (int i = (1); i <= (int)((int)(e - b) - 1); i++) {       swap(b[i], b[my_rand() % (i + 1)]);     }   }   template <class _T>   inline _T sqr(const _T &x) {     return x * x;   }   template <typename type_t, typename less_t = std::less<type_t>>   inline bool uin(type_t &a, const type_t &b, const less_t &ls = less_t()) {     return ls(b, a) ? a = b, true : false;   }   template <typename type_t, typename less_t = std::less<type_t>>   inline bool uax(type_t &a, const type_t &b, const less_t &ls = less_t()) {     return ls(a, b) ? a = b, true : false;   }   const long double PI = 3.1415926535897932384626433832795L;   const long double EPS = 1e-9;   const int MAXN = 1 << 17;   int n, k;   int a[MAXN];   bool g[MAXN];   int d[MAXN * 2][2][2];   int main() {     scanf( %d%d , &n, &k);     memset((g), 0, sizeof(g));     for (int i = 0; i < (int)(k); i++) {       scanf( %d , &a[i]);       g[a[i] - 1] = true;     }     memset(d, 0x80, sizeof(d));     int z = 1 << (n - 1);     for (int i = 0; i < (int)(z); i++) {       int x = i << 1;       int y = x + 1;       d[z + i][g[x]][g[y]] = g[x] || g[y];       d[z + i][g[y]][g[x]] = g[x] || g[y];     }     for (int i = (z - 1); i >= (int)(1); i--) {       int x = i * 2;       int y = x + 1;       for (int xw = 0; xw < (int)(2); xw++) {         for (int xl = 0; xl < (int)(2); xl++) {           if (d[x][xw][xl] < 0) continue;           for (int yw = 0; yw < (int)(2); yw++) {             for (int yl = 0; yl < (int)(2); yl++) {               if (d[y][yw][yl] < 0) continue;               int gw[2] = {xw, yw};               bool ggl = xl || yl;               for (int t = 0; t < (int)(2); t++) {                 int cur = (xw || yw) + ggl;                 int nw = gw[t];                 int nl0 = gw[t ^ 1];                 int nl = nl0 || ggl;                 cur += nl;                 uax(d[i][nw][nl], d[x][xw][xl] + d[y][yw][yl] + cur);               }             }           }         }       }     }     int ans = 0;     for (int i = 0; i < (int)(2); i++) {       for (int j = 0; j < (int)(2); j++) {         int add = (i || j);         uax(ans, d[1][i][j] + add);       }     }     printf( %d n , ans);     return 0;   }   