   import java.util.*;
   import java.io.*;

    class FourColors{
    
       static int maxOfTwo(int a, int b){
         return a > b ? a : b;
      }
   
       public static void main(String[] args) throws IOException{
         Scanner s = new Scanner(new File("DATA5.txt"));
         PrintStream p = new PrintStream(new FileOutputStream("OUT5.txt"));
         for(int i = 0; i < 5; i++){
            ArrayList<Integer> from = new ArrayList<Integer>();
            ArrayList<Integer> to = new ArrayList<Integer>();
            int n = s.nextInt();
            int max = -1;
            for(int j = 0; j < n; j++){
               int a = s.nextInt();
               int b = s.nextInt();
               from.add(a);
               to.add(b);
               if(a > max){
                  max = a;
               }
               if(b > max){
                  max = b;
               }
            }
            int[] nodes = new int[max+1];
            Arrays.fill(nodes, -1);
            nodes[1] = 0;
         	boolean[] processed = new boolean[max+1];
         	Arrays.fill(processed, false);
            for(int z = 1; z <= max; z++){
               ArrayList<Integer> nbp = new ArrayList<Integer>();
               ArrayList<Integer> nb = new ArrayList<Integer>();
               for(int k = 0; k < from.size(); k++){
                  if(from.get(k) != to.get(k)){
                     if(from.get(k) == z){
                        nbp.add(k);
                        nb.add(to.get(k));
                     }
                     if(to.get(k) == z){
                        nbp.add(k);
                        nb.add(from.get(k));
                     }
                  }
                  else{
               		nodes[from.get(k)] = 0;
               	}
               }
               for(int k = 0; k < nb.size(); k++){
                  from.remove(nbp.get(k)-k);
                  to.remove(nbp.get(k)-k);
               }
               boolean[] used = new boolean[max];
               Arrays.fill(used, false);
               for(int j = 1; j <= max; j++){
                  if(nodes[j] != -1 && !processed[j]){
                     used[nodes[j]]=true;;
                  }
               }
               int small = Integer.MAX_VALUE;
               for(int j = 0; j < max; j++){
                  if(!used[j]){
                     small = j;
                     break;
                  }
               }
               if(small != Integer.MAX_VALUE){
                  for(int j = 0; j < nb.size(); j++){
                     nodes[nb.get(j)]=small;
                  }
               }
               processed[z]=true;
            }
            ArrayList<Integer> cc = new ArrayList<Integer>();
            for(int j = 1; j <= max; j++){
               if(!cc.contains((Integer)(nodes[j])) && nodes[j] != -1){
                  cc.add(nodes[j]);
               }
            }
            if(cc.size() == 0){
               p.println("0");
            }
            else{
               p.println(cc.size());
            }
         }
      }
   }
