func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 200009;   const long long MOD = 119 << 23 | 1;   class {    public:     struct N {       N(int a, int b, int c, int d) {         sta[0] = a;         sta[1] = b;         sta[2] = c;         sta[3] = d;       }       int sta[4];     };     int f[1 << 18];     int trans[4][4][4] = {0,  -1, -1, -1, 1,  2,  -1, -1, 2,  2,  1,  -1, 3,                           3,  3,  3,  1,  2,  -1, -1, 2,  2,  -1, -1, 3,  3,                           3,  3,  -1, 3,  3,  3,  2,  2,  1,  -1, 3,  3,  3,                           3,  -1, -1, 2,  2,  -1, -1, 3,  3,  3,  3,  3,  3,                           -1, 3,  3,  3,  -1, -1, 3,  3,  -1, -1, -1, 3};     N gao(N x, N y) {       N res = {-MOD, -MOD, -MOD, -MOD};       for (int i = 0; i < 4; ++i) {         for (int j = 0; j < 4; ++j) {           for (int k = 0; k < 4; k++) {             if (trans[i][j][k] != -1) {               res.sta[k] = max(res.sta[k], x.sta[i] + y.sta[j] + trans[i][j][k]);             }           }         }       }       return res;     }     void solve() {       int n, k;       cin >> n >> k;       for (int i = 0; i < k; ++i) {         int t;         cin >> t;         f[t]++;       }       vector<N> F;       for (int i = 1; i <= (1 << n); i += 2) {         if (f[i] + f[i + 1] == 2) {           F.push_back(N(-MOD, -MOD, -MOD, 1));         } else if (f[i] + f[i + 1]) {           F.push_back(N(-MOD, 1, 1, -MOD));         } else {           F.push_back(N(0, -MOD, -MOD, -MOD));         }       }       while (F.size() != 1) {         vector<N> G;         for (int i = 0; i < F.size(); i += 2) {           G.push_back(gao(F[i], F[i + 1]));         }         swap(G, F);       }       cout << max(max(F[0].sta[0], F[0].sta[1] + 1),                   max(F[0].sta[2] + 1, F[0].sta[3] + 1))            <<   n ;     }   } NSPACE;   int main() {     ;     ios_base::sync_with_stdio(false);     cout.tie(0);     cin.tie(0);     NSPACE.solve();   }   