Code: Select all
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <bitset>
#include <utility>
#include <set>
#include <numeric>
#define INF_MAX 2147483647
#define INF_MIN -2147483647
#define pi acos(-1.0)
#define N 1000000
#define LL long long
#define For(i, a, b) for( int i = (a); i < (b); i++ )
#define Fors(i, sz) for( size_t i = 0; i < sz.size (); i++ )
#define Fore(it, x) for(typeof (x.begin()) it = x.begin(); it != x.end (); it++)
#define Set(a, s) memset(a, s, sizeof (a))
#define Read(r) freopen(r, "r", stdin)
#define Write(w) freopen(w, "w", stdout)
using namespace std;
struct node {
node(int node_x, int node_y, int node_t) : x(node_x), y(node_y), t(node_t) {}
int x, y, t;
};
vector<int> adj[105];
bool visited[105];
int children[105];
void dfs(int src){
stack<int> s;
s.push(src);
while(!s.empty()){
int t = s.top();
s.pop();
visited[t] = true;
children[src]++;
for (int i = 0; i < adj[t].size(); i++) {
if(!visited[adj[t][i]])
s.push(adj[t][i]);
}
}
}
int main(int argc, char** argv) {
int n;
while(scanf("%d", &n) && n){
for (int i = 0; i <= n; i++) {
adj[i].clear();
visited[i] = false;
children[i] = 0;
}
for (int i = 1; i <= n; i++) {
int a; scanf("%d", &a);
for (int j = 0; j < a; j++) {
int b; scanf("%d", &b);
adj[i].push_back(b);
}
}
for (int i = 1; i <= n; i++) {
Set(visited, false);
dfs(i);
}
int maxChildren = 0; int indexOfMax = 0;
for (int i = 1; i <= n; i++) {
if(children[i] > maxChildren){
maxChildren = children[i];
indexOfMax = i;
}
}
printf("%d\n", indexOfMax);
}
return 0;
}