/*
TASK: man
LANG: C++
*/
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
vector <int> a[15000];
int n=0,m,s=15001;
bool f[15000];
void init()
{
     cin>>m;
     for(int i=0;i<m;i++)
     {
      int u,v;
      cin>>u>>v;
      a[u].push_back(v);
      a[v].push_back(u);
      if(u>n)
       n=u;
      if(v>n)
       n=v;
      if(s>u)
        s=u;
      if(s>v)
        s=v;
      f[u]=f[v]=true;
     }    
}
void bfs(int start)
{
 queue <int> q;
 q.push(start);
 while(!q.empty())
 {
  int k=q.front();
  q.pop();
  f[k]=false;
  for(int i=0;i<a[k].size();i++)
  {
   if(f[a[k][i]]==true)
   q.push(a[k][i]);
  }
 }
}
int cnt()
{
    int h=0;
    for(int i=s;i<=n;i++)
      if(f[i]==true)
        h++;
    return h;
}
int main()
{
 init();
 int k=cnt();
 int cmp=0;
 for(int i=s;i<=n;i++)
 {
  if(f[i]==true)
  {
    cmp++;
    bfs(i);
  }
 }
 cout<<k-cmp<<endl;
 return 0;
}
  
