#include <bits/stdc++.h>
using namespace std;
long double PI = 3.14159265358979323846;
long long modo = 1e9 + 7;
const long long inf = 1e13;
const long long ms = (1e5) * 2 + 5;
vector<int> vv[101];
int vis[101];
void dfs(int node) {
  vis[node] = 1;
  for (int i : vv[node]) {
    if (!vis[i]) dfs(i);
  }
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(nullptr);
  int n;
  cin >> n;
  int ar[n + 1][2];
  int i;
  int j;
  for (i = 1; i <= n; i++) {
    cin >> ar[i][0] >> ar[i][1];
  }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++) {
      if (i != j) {
        if (ar[i][0] == ar[j][0] || ar[i][1] == ar[j][1]) {
          vv[i].push_back(j);
        }
      }
    }
  }
  int ans = -1;
  for (i = 1; i <= n; i++) {
    if (!vis[i]) {
      dfs(i);
      ans++;
    }
  }
  cout << ans;
  return 0;
}
