#include <bits/stdc++.h>
using namespace std;
int arr[105][3];
vector<int> vec[105];
bool vis[105];
void dfs(int i) {
  vis[i] = true;
  for (int j = 0; j < vec[i].size(); j++) {
    if (!vis[vec[i][j]]) dfs(vec[i][j]);
  }
  return;
}
int main() {
  int n, i, cnt = 0, j;
  cin >> n;
  for (i = 1; i <= n; i++) {
    scanf("%d%d", &arr[i][0], &arr[i][1]);
  }
  for (i = 1; i <= n; i++) {
    for (j = i + 1; j <= n; j++) {
      if (i != j) {
        if (arr[i][0] == arr[j][0] || arr[i][1] == arr[j][1]) {
          vec[i].push_back(j);
          vec[j].push_back(i);
        }
      }
    }
  }
  for (i = 1; i <= n; i++) {
    if (!vis[i]) {
      cnt++;
      dfs(i);
    }
  }
  cout << cnt - 1;
  return 0;
}
