func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 100005;   set<int> g[maxn];   set<int> vis;   int u[maxn];   void dfs(int x) {     u[x] = 1;     vis.erase(x);     vector<int> ret;     for (int p : vis) {       if (!g[x].count(p)) {         ret.push_back(p);       }     }     for (int t : ret) {       vis.erase(t);     }     for (int t : ret) {       u[t] = 1;       dfs(t);     }   }   int main() {     int n, m;     cin >> n >> m;     for (int i = 0; i < m; i++) {       int x, y;       cin >> x >> y;       x--, y--;       g[x].insert(y);       g[y].insert(x);     }     for (int i = 0; i < n; i++) {       vis.insert(i);     }     int ans = 0;     for (int i = 0; i < n; i++) {       if (!u[i]) {         ans++;         dfs(i);       }     }     cout << ans - 1 << endl;   }   