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

int m;
int req[5001][3];
int cir[5001];
int exist[5001];
int wtf=0;

void can_follow(int c,int t,int s,int f)
{
     if (wtf==1) return;
     if (c==t) {cir[f]=1; wtf=1; return;}
     for (int i=0;i<m;i++)
     {
         if (i!=c && req[i][0]==s && exist[i]==1)
            can_follow(i,t,req[i][1],f);
         else if (i!=c && req[i][1]==s && exist[i]==1)
              can_follow(i,t,req[i][0],f);
     }
}



void follow(int c,int s,int df)
{
     int i;
     for (i=0;i<m;i++)
     {
         if (i!=df && cir[i]==0 && req[i][0]==s)
         {
             wtf=0;
             can_follow(i,df,req[i][1],i);
         }
         else if (i!=df && cir[i]==0 && req[i][1]==s)
         {
              wtf=0;
              can_follow(i,df,req[i][0],i);
         }
     }
}
                         
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;
}
