#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
static const int MAXN=1000;
static const int MAXQ=1e8;
static void finish (string message) {
    cout << message << endl ;
    exit(0);
}

static int n,cnt;
static vector <int> prv[MAXN+1],prv2[MAXN+1];
static int seen[MAXN+1];
static int inds[MAXN+1];
static int parent[MAXN+1];
static int mem[MAXN+1];
static bool find_result (int i, vector <int>& p, vector <bool>& result) {
    if (mem[i]==cnt) return result[i];
    mem[i]=cnt;
    for (auto v : prv[p[i]]) {
        int j=inds[v];
        if (j>i) return result[i]=true;
    }
    for (auto v : prv2[p[i]]) {
        if (mem[inds[v]]!=cnt) find_result(inds[v],p,result);
        if (result[inds[v]]==true) return result[i]=true;
    }
    return result[i]=false;
}
vector <bool> check (vector <int> p) {
    cnt++;
    if (cnt>MAXQ/n) finish("Too many questions!");
    if (p.size()!=n) {
        string message="Invalid permutation:";
        for (auto num : p) {
            message+=" "+to_string(num);
        }
        message+="!";
        finish(message);
    }
    for (int i=0; i<n; i++) {
        if ((p[i]<1)||(p[i]>n)||(seen[p[i]]==cnt)) {
            string message="Invalid permutation:";
            for (auto num : p) {
                message+=" "+to_string(num);
            }
            message+="!";
            finish(message);
        }
        seen[p[i]]=cnt;
        inds[p[i]]=i;
    }
    vector <bool> result(n);
    for (int i=0; i<n; i++) {
        result[i]=find_result(i,p,result);
    }
    return result;
}

static vector <int> nxt[MAXN];
static void rec (int curr, int start) {
    if (start!=curr) prv2[curr].push_back(start);
    for (auto to : nxt[curr]) {
        rec(to,start);
    }
}
extern vector <pair <int, int> > find_connections (int);
int main () {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n ;
    vector <pair <int, int> > connections;
    cout << n << endl ;
    connections.reserve(n-1);
    for (int i=0; i<n-1; i++) {
        int x,y;
        cin >> x >> y ;
        connections.push_back({x, y});
        prv[y].push_back(x);
        nxt[x].push_back(y);
    }
    for (int i=0; i<n; i++) {
        rec(i,i);
    }
    auto found=find_connections(n);
    auto tmp=found;
    sort(tmp.begin(),tmp.end());
    sort(connections.begin(),connections.end());
    if (tmp!=connections) {
        string message="Wrong answer:";
        for (auto [x, y] : found) {
            message+=" ("+to_string(x)+", "+to_string(y)+")";
        }
        message+="!";
        finish(message);
    }
    finish("Correctly found connections. Questions: "+to_string(cnt));
    return 0;
}
