/*
TASK:man
LANG:C++
*/
#include <iostream>
#define MAX 10000
//using namespace std;
int o[MAX][MAX],m,g=0,r;
int a[MAX],s,used[MAX],br,p,c[MAX];
int check(int x)
    {
     int i;
     for(i=0;i<s;i++)if(a[i]==x)return 1;
     return 0;
     }
void bfs(int x)
     {
      if(p)return;
      used[x]=1;
//      a[s]=x;
//      s++;
      int i,j;
      r=0;
      for(i=0;i<=g;i++)if(o[x][i]==1&&check(i)==0){a[s]=i;r++;s++;used[i]=1;}
      if(r==0)return;
      for(i=s-r;i<s;i++)bfs(a[i]);
      if(p)return;
      p=1;
      br+=s-1;
      return;
      }
int main ()
{
int i,j,x,y;
scanf("%d",&m);
for(i=0;i<m;i++)
      {scanf("%d%d",&x,&y);
       o[x][y]=o[y][x]=1;
       if(x>g)g=x;
       if(y>g)g=y;
       }
for(i=0;i<=g;i++)
       for(j=0;j<=m;j++)if(o[i][j]){c[i]=1;break;}
for(i=0;i<=g;i++)
		 {
		 if(used[i]==0&&c[i]&&check(i)==0&&used[i]==0){a[s]=i;s++;bfs(i);}
		 s=0;
		 p=0;
		 }
printf("%d\n",br);
}
