#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++;
    if (br>=2) return 1;
    else return 0;
}

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

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

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 (uKoloni(mat,n) && uVrsti(mat,n)) printf("0");
    /*else if (uKoloni(mat,n)==1)
    {
        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;
        while (uVrsti(mat,n)==0)
        {

            for (int i=0;i<n;i++)
            {
                int x;
                if (a[i]<n)
                {
                    x=a[i];
                    /*int mogucnosti[n];
                    for (int j=0;j<n;j++)
                        {
                            int br+=kolikoKoraka(mat,n,x).br;
                            mogucnosti[j]=br;
                        }
                    br+
                    =kolikoKoraka(mat,n,x);
                }
            }
        }
        printf("%d ",br);
    }*/

    /*for (int i=0;i<n;i++) {
        for (int j=0;j<n;j++) printf("%d ",mat[i][j]);
        putchar('\n');
        }*/
}