/*
TASK:man
LANG:C++
*/
#include <iostream>
using namespace std;

int m;
int req[5001][3];
int cir[5001];
int exist[5001];

void sur6(int a,int b)
{
     int i;
     for (i=0;i<m;i++)
         if (req[i][0]==a && req[i][1]==b) cir[i]=1;
         else if (req[i][1]==a && req[i][0]==b) cir[i]=1;
}

void follow(int c,int s,int df)
{
     int i;
     for (i=0;i<m;i++)
     {
         if (i==df) continue;
         if (exist[i]==1 && req[i][0]==c)
         {
            sur6(s,req[i][0]);
            sur6(s,req[i][1]);
            follow(req[i][1],s,df);
         }
         else if (exist[i]==1 && req[i][1]==c)
         {
            sur6(s,req[i][0]);
            sur6(s,req[i][1]);
            follow(req[i][0],s,df);
         }
     }
}
                         
int main()
{
    cin >> m;
    int i,j,k=0;
    for (i=0;i<m;i++)
        cin >> req[i][0] >> req[i][1];
    for (i=0;i<m;i++)
    {
        if (cir[i]==0)
        {
           cir[i]=1;
           exist[i]=1;
           follow(req[i][0],req[i][1],i);
           follow(req[i][1],req[i][0],i);
           k++;
        }
    }
    cout << k << endl;
return 0;
}
