#include <iostream>
#include <fstream>
#include <vector>

struct node {
    int nodeName;
    node* backref;
    node(int name, node* ref = NULL) : nodeName(name), backref(ref) { }
};

int hasCycle(node* initNode) {
    node* node = initNode;
    int i = 0;
    while (node->backref) {
        node = node->backref;
        ++i;
        if (node->nodeName == initNode->nodeName) {
            return i;
        }
    }
    return 0;
}

int cycleDetect(int edges[100][100]) {
    std::vector<node*> current;
    current.push_back(new node(0));
    std::vector<node*> next;
    while (current.size()) {
        for (size_t i = 0; i < current.size(); ++i) {
            for (int j = 0; j < 100; ++j) {
                if (edges[current[i]->nodeName][j]) {
                    next.push_back(new node(j, current[i]));
                    int has = hasCycle(next.back());
                    if (has) return has;
                }
            }
        }
        current = next;
        next.clear();
    }
    return 0;
}

int main() {
    std::ifstream infile("DATA5.txt");
    std::ofstream outfile("OUT5.txt");
    for (int i = 0; i < 5; ++i) {
        int edges[100][100];
        for (int j = 0; j < 100; ++j) for (int k = 0; k < 100; ++k) {
            edges[j][k] = false;
        }
        int numEdges;
        infile >> numEdges;
        for (int j = 0; j < numEdges; ++j) {
            int begin, end;
            infile >> begin >> end;
            edges[begin-1][end-1] = true;
        }
        outfile << cycleDetect(edges) << '\n';
    }
    return 0;
}

