#include <bits/stdc++.h>
using namespace std;
int n;
vector<vector<int>> edges;
vector<int> dist;
queue<int> to_visit;
int bfs(int u)
{
dist.assign(1 + n, 0);
dist[u] = 1;
to_visit.push(u);
while (!to_visit.empty()) {
u = to_visit.front();
to_visit.pop();
for (int v: edges[u]) {
if (dist[v] == 0) {
dist[v] = dist[u] + 1;
to_visit.push(v);
}
}
}
return *max_element(dist.begin(), dist.end());
}
int main()
{
cin >> n;
edges.assign(1 + n, vector<int>());
for (int u = 1; u <= n; ++u) {
int m;
cin >> m;
for (int j = 0; j < m; ++j) {
int v;
cin >> v;
edges[u].push_back(v);
}
}
int answer = 0;
for (int u = 1; u <= n; ++u) {
answer = max(answer, bfs(u));
}
cout << answer << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbjsKdmVjdG9yPHZlY3RvcjxpbnQ+PiBlZGdlczsKdmVjdG9yPGludD4gZGlzdDsKcXVldWU8aW50PiB0b192aXNpdDsKCmludCBiZnMoaW50IHUpCnsKICAgIGRpc3QuYXNzaWduKDEgKyBuLCAwKTsKICAgIGRpc3RbdV0gPSAxOwogICAgdG9fdmlzaXQucHVzaCh1KTsKICAgIHdoaWxlICghdG9fdmlzaXQuZW1wdHkoKSkgewogICAgICAgIHUgPSB0b192aXNpdC5mcm9udCgpOwogICAgICAgIHRvX3Zpc2l0LnBvcCgpOwogICAgICAgIGZvciAoaW50IHY6IGVkZ2VzW3VdKSB7CiAgICAgICAgICAgIGlmIChkaXN0W3ZdID09IDApIHsKICAgICAgICAgICAgICAgIGRpc3Rbdl0gPSBkaXN0W3VdICsgMTsKICAgICAgICAgICAgICAgIHRvX3Zpc2l0LnB1c2godik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gKm1heF9lbGVtZW50KGRpc3QuYmVnaW4oKSwgZGlzdC5lbmQoKSk7Cn0KCmludCBtYWluKCkKewogICAgY2luID4+IG47CiAgICBlZGdlcy5hc3NpZ24oMSArIG4sIHZlY3RvcjxpbnQ+KCkpOwogICAgZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgKyt1KSB7CiAgICAgICAgaW50IG07CiAgICAgICAgY2luID4+IG07CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtOyArK2opIHsKICAgICAgICAgICAgaW50IHY7CiAgICAgICAgICAgIGNpbiA+PiB2OwogICAgICAgICAgICBlZGdlc1t1XS5wdXNoX2JhY2sodik7CiAgICAgICAgfQogICAgfQogICAgaW50IGFuc3dlciA9IDA7CiAgICBmb3IgKGludCB1ID0gMTsgdSA8PSBuOyArK3UpIHsKICAgICAgICBhbnN3ZXIgPSBtYXgoYW5zd2VyLCBiZnModSkpOwogICAgfQogICAgY291dCA8PCBhbnN3ZXIgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9