/*
TASK:man
LANG:C++
*/
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
vector<int>a[15005]; int m,res,MAX=0;
bool used[15005];
bool t[15005]; 
void read()
{
     scanf("%d",&m);
     //if(m==0){printf("0\n");}
     int i;
     for(i=0;i<m;i++)
     {
     int p,q;
     scanf("%d%d",&p,&q);
     a[q].push_back(p);
     a[p].push_back(q);
     t[p]=t[q]=1;
     if(p>MAX)MAX=p;
     if(q>MAX)MAX=q;
     }
     
}
void DFS(int pos)
{used[pos]=true;
     int i;
     for(i=0;i<a[pos].size();i++)
     {
                                 if(!used[a[pos][i]]){res++;DFS(a[pos][i]);}
     }
     
}
void solve()
{
read();
if(m==0){printf("0\n");return;}
int i;
//printf("%d\n",MAX);
for(i=0;i<=MAX;i++)
if(t[i]&&!used[i])DFS(i);
printf("%d\n",res);
}

int main()
{
solve();
//system("pause");
return 0;
} 
