#include <iostream>
#include <fstream>
using namespace std;

#define MAX 200

typedef struct {
	bool edges[MAX][MAX];
	int nv, ne;
}graph;


bool used[MAX];

int dfs(graph* g, int v, int start) {
	if (g->edges[v][v]) return 1;
	used[v] = true;
	int i, j;
	if (g->edges[v][start]) return 1; 
	for (i = 1; i<=g->nv; i++) {
		if (g->edges[v][i] && !used[i]) {
			int k = dfs(g, i, start);
			if (k!=0) return k+1;
		}
	}
	//used[v] = false;
	return 0;
}
int main() {
    ifstream fin("data5.txt");
    if (!fin.is_open()) exit(0);
    
    ofstream fout("out5.txt");
    
	int i, j;
	
    for (int ncases=0; ncases<5; ncases++) {
		graph *g = new graph;
		for (i=0; i<MAX; i++) {
			used[i] = false;
			for (j=0; j<MAX; j++) 
				g->edges[i][j] = 0;
		}
	
		// input
		fin >> g->ne;
		g->nv = 0;
		for (i=0; i<g->ne; i++) {
			int a, b;
			fin >> a >> b;
			g->edges[a][b] = true;
			if (a > g->nv) g->nv = a;
			if (b > g->nv) g->nv = b;
		}
		
		//dfs
		bool done = false;
		for (i=1; i<=g->nv; i++) {
			for (j=0; j<MAX; j++)
				used[j] = false;
			int k = dfs(g, i, i);
			if (k > 0) {
				fout << k << endl;
				break;
			}
		}
	}
	return 0;
}

