func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = (1 << 22) + 20;   bool vis[2][N];   int a[N], n, m, ex[N];   int get_not(int x) { return (1 << n) - 1 - x; }   void dfs(int type, int msk) {     vis[type][msk] = true;     if (type == 1) {       if (!vis[0][get_not(msk)]) dfs(0, get_not(msk));       for (int i = 0; i < n; i++)         if ((!(msk & (1 << i))) && (!vis[1][msk ^ (1 << i)]))           dfs(1, msk ^ (1 << i));     } else if (!vis[1][msk] && ex[msk])       dfs(1, msk);   }   int main() {     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);     cin >> n >> m;     for (int i = 0; i < m; i++) cin >> a[i], ex[a[i]] = 1;     int ans = 0;     for (int i = 0; i < m; i++) {       if (!vis[0][a[i]]) dfs(0, a[i]), ans++;     }     cout << ans;     return 0;   }   