func_code_string: #include <bits/stdc++.h>   using namespace std;   long long power(long long a, long long b) {     long long result = 1;     while (b > 0) {       if (b % 2 == 1) {         result *= a;       }       a *= a;       b /= 2;     }     return result;   }   long long gcd(long long x, long long y) {     long long r;     while (y != 0 && (r = x % y) != 0) {       x = y;       y = r;     }     return y == 0 ? x : y;   }   long long countSetBits(long long x) {     long long Count = 0;     while (x > 0) {       if (x & 1) Count++;       x = x >> 1;     }     return Count;   }   bool isPerfectSquare(long long n) {     long long sr = sqrt(n);     if (sr * sr == n)       return true;     else       return false;   }   long long mod(long long x, long long M) { return ((x % M + M) % M); }   long long add(long long a, long long b, long long M) {     return mod(mod(a, M) + mod(b, M), M);   }   long long mul(long long a, long long b, long long M) {     return mod(mod(a, M) * mod(b, M), M);   }   long long powerM(long long a, long long b, long long M) {     long long res = 1;     while (b) {       if (b % 2 == 1) {         res = mul(a, res, M);       }       a = mul(a, a, M);       b /= 2;     }     return res;   }   long long modInverse(long long n, long long M) { return powerM(n, M - 2, M); }   long long nCrM(long long n, long long r, long long M) {     if (n < r) return 0;     if (r == 0) return 1;     vector<long long> fact(n + 1);     fact[0] = 1;     for (long long i = 1; i <= n; i++) {       fact[i] = mul(fact[i - 1], i, M);     }     return mul(mul(fact[n], modInverse(fact[r], M), M),                modInverse(fact[n - r], M), M);   }   long long n;   vector<pair<long long, long long>> vv;   map<pair<long long, long long>, long long> vis;   long long ans = 0;   void dfs(pair<long long, long long> p) {     vis[p] = 1;     for (long long i = 0; i < n; i++) {       if (vis[vv[i]] == 0) {         if (vv[i].first == p.first || vv[i].second == p.second) {           dfs(vv[i]);         }       }     }   }   void solve() {     cin >> n;     for (long long i = 0; i < n; i++) {       long long x1, y1;       cin >> x1 >> y1;       vv.push_back({x1, y1});     }     for (long long i = 0; i < n; i++) {       if (vis[vv[i]] == 0) {         dfs(vv[i]);         ans++;       }     }     cout << ans - 1 <<   n ;   }   int main() {     ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);     solve();     return 0;   }   