#include<stdlib.h>
#include<stdio.h>
#include <utility> 
using namespace std;
long maks(long* c, long n){
    int max=0;
    int indeks;
    for(int i=1; i<=n; i++)
     if(max<c[i]){
      max=c[i];
      indeks = i;
     }
    return indeks;
}

int min(long* c, long n){
 for(int i=1; i<=n; i++)
     if(c[i]==0)
     return i;
}

int nula(long* c, long n){
     for(int i=1; i<=n; i++)
      if(c[i]==0)
       return 0;
       return 1;
}

bool test(long* a, int n){
    for(int i=1;i<=n;i++)
     if(a[i]!=1)
      return false;
      return true;
}

int main()
{
  int n;
  scanf("%d",&n);
  long c[2*n];
  for(int i=1; i<=2*n; i++)
   c[i]=0;
  int** a = new int*[n];
  pair<int,int> b[n];
  for(int i=1; i<=n; i++){
   a[i] = (int*)calloc(n, sizeof(int));
   scanf("%d",&b[i].first);
   scanf("%d",&b[i].second);
   c[b[i].first]++;
   c[b[i].second+n]++;
  }
  for(int i=1; i<=n; i++)
    a[b[i].first][b[i].second]=1;
/*  for(int i=1; i<=n; i++){
   printf("\n");
   for(int j=1; j<=n; j++)
    printf("%d",a[i][j]);
  }*/
//  printf("\n");
  if(n<2)
   printf("0");
  if(n==2){
      if(b[1].first == b[2].first || b[1].second==b[2].second)
       printf("1");
      else
       printf("0");
  }
  else{
  bool flag=false;
  for(int i=2; i<=2*n; i++)
   if(a[1]==a[i])
    flag=true;
    else{
    flag=false;
    break;
    }
  if(flag==true)
   printf("%d",0);
  int br=0;

  while(nula(c,2*n)==0){
    br++;
    long i1 = maks(c,2*n);
    long i2 = min(c,2*n);
    c[i1]=c[i1]-1;
    c[i2]=c[i2]+1;
  }
 printf("%d",br);
}
}