#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

char fam[20];
char son[20];
char fa[20];
map<string, int> name;
int tot;

int get(string fam, string str) {
    string now = fam + "#" + str;
    if (!name.count(now)) name[now] = ++tot;
    return name[now];
}

int f[200010];
vector<int> E[200010];
int vis[200010];

int col[200010];
int num;
map<int, int> cnt;
map<int, int> L;

vector<int> Q;
int in[200010];

void dfs(int u)
{
    for (int &v : E[u]) {
        if (!L.count(v)) continue;
        if (vis[v]) {
            if (in[v]) {
                ++num;
                for (int i = Q.size() - 1; i >= 0; i--) {
                    col[Q[i]] = num;
                    cnt[num]++;
                    if (Q[i] == v) break;
                }
            }
            continue;
        }
		in[v] = 1;
        vis[v] = 1;
        Q.push_back(v);
        dfs(v);
        Q.resize(Q.size() - 1);
		in[v] = 0;
    }
}

int gao(int u)
{
    if (col[u]) return cnt[col[u]];
    if (f[u]) return f[u];
	f[u] = 1;
    for (int &v : E[u]) {
        if (!L.count(v)) continue;
        f[u] = gao(v) + 1;
    }
    return f[u];
}

int main()
{
    int n;
    while (scanf("%d", &n) != EOF) {
        name.clear();
        tot = 0;
        vector<PII> edges;
        L.clear();
        for (int i = 0; i < n; i++) {
            scanf("%s %s %*s %*s %s", fam, son, fa);
            int u = get(fam, son);
            int v = get(fam, fa);
			//cout << u << ' ' << son << endl;
			//cout << v << ' ' << fa << endl;
            edges.push_back(PII(u, v));
            L[u] = 1;
           //L[v] = 1;
        }

        num = 0;
        cnt.clear();
        for (int i = 1; i <= tot; i++) {
            E[i].clear();
            f[i] = 0;
            vis[i] = 0;
            col[i] = 0;
			in[i] = 0;
        }
        for (int i = 0; i < edges.size(); i++) {
            int u = edges[i].first;
            int v = edges[i].second;
            //cout << u << ' ' << v << endl;
            E[u].push_back(v);
        }
        for (int i = 1; i <= tot; i++) {
            if (vis[i]) continue;
			in[i] = 1;
            vis[i] = 1;
            Q.clear();
            Q.push_back(i);
            dfs(i);
			in[i] = 0;
        }
    
        int ans = 0;
        for (int i = 1; i <= tot; i++) {
            //printf("id = %d %d %d\n", i, col[i], gao(i));
            ans = max(ans, gao(i));
        }
        printf("%d\n", ans);
    }
    return 0;
}
