#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <bits/stdc++.h>
using namespace std;

struct element
{
    int x;
    int y;
    int br;
};

int uKoloni(int **mat, int n)
{
    int br[n];
    int broj=0;
    for (int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
            if (mat[i][j]) br[j]=1;
        }
    for (int i=0;i<n;i++) if (br[i]==1) broj++;
    if (broj==n) return 1;
    else return 0;
}
int uVrsti(int **mat, int n)
{
    int br[n];
    int broj=0;
    for (int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
            if (mat[i][j]) br[i]=1;
        }
    for (int i=0;i<n;i++) if (br[i]==1) broj++;
    if (broj==n) return 1;
    else return 0;
}

int viseUvrsti(int **mat, int n, int vrsta)
{
    int br=0;
        for(int j=0;j<n;j++) if (mat[vrsta][j]) br++;
    return br;
}
/*
int kolikoKoraka(int **mat, int n, int x,int od)
{
    struct element e;
    int dist[n];
    int mi=n*n*n,ind=n,ind1=n;
      for (int j=0;j<n;j++)
        {
            if (mat[od][j] && viseUvrsti(mat,n,od)==1)
            {
                dist[j]=max(od,x)-min(od,x);
                if (dist[j]<mi)
                {
                    mi=dist[j];
                    ind=od;
                    ind1=j;
                }
            }
        }

    swap(mat[ind][ind1],mat[x][ind1]);
    return mi;
}*/

/*
5
1 1
1 2
2 4
4 3
4 5
*/
int main()
{
    int n;
    scanf("%d",&n);
    int **mat=(int**) calloc (n,sizeof(int*));
    for (int i=0;i<n;i++) mat[i]=(int*) calloc (n,sizeof(int));
    for (int i=0;i<n;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        mat[x-1][y-1]=1;
    }
    if (n==2)
    {
        if ((mat[0][0] && mat[0][1])||(mat[0][0]&&mat[1][0])||(mat[0][1]&&mat[1][1])||(mat[1][0]&&mat[1][1])) printf("1");
        else  printf("0");
    }
    else if (uVrsti(mat,n) && uKoloni(mat,n)) printf("0");
    else {
        printf("6");
        /*printf("U svakoj koloni ima ali nema u svakoj vrsti\n");

        int a[n];
        for (int i=0;i<n;i++)
        {
            a[i]=n+1;
            int k=0;
            for (int j=0;j<n;j++) if (mat[i][j]) k++;
            if (k==0)  a[i]=i;
        }
        int br=0;
        int mi=n*n*n;
        int mog[n][n],indeksiSvi[n][n];
        int mogucnosti[n],indeks=n;
        for (int i=0;i<n;i++)
            for (int j=0;j<n;j++)
            {
                mog[i][j]=-1;
                mogucnosti[i]=-1;
                indeksiSvi[i][j]=-1;
            }
        //while (uVrsti(mat,n)==0)
        {

            for (int i=0;i<n;i++)
            {
                int x=a[i];
                if (x<n)
                {
                    br=0;
                    for (int j=0;j<n;j++)
                    for (int k=0;k<n;k++)
                    {
                        if (viseUvrsti(mat,n,j)==1 &&mat[j][k])
                        {
                            indeksiSvi[i][j]=j;
                            mog[j][k]=abs(j-x);
                            if (mog[j][k]!=-1) br+=mog[j][k];
                            j++;
                        }

                    }
                }
                for (int i=0;i<n;i++)
                    for (int j=0;j<n;j++) if (mog[i][j] && )
                putchar('\n');
                for (int j=0;j<n;j++) {for (int i=0;i<n;i++) printf("%d ",mog[j][i]); putchar('\n');}
                putchar('\n');
            }
            for (int i=0;i<n;i++)
            {
                if (mogucnosti[i]<mi && mogucnosti[i]>0) {mi=mogucnosti[i]; indeks=i;}
            }
            for (int j=0;j<n;j++) {for (int i=0;i<n;i++) printf("%d ",indeksiSvi[j][i]); putchar('\n');}
for (int j=0;j<n;j++) {for (int i=0;i<n;i++) printf("%d ",mog[j][i]); putchar('\n');}
        }
        printf("%d %d",mi,indeks);*/
        }
    }