# include # include # include using namespace std; const int MAX_N = 5005; //ifstream f("influence.in"); //ofstream g("influence.out"); int N, K; int in[MAX_N], special[MAX_N]; long long dp[MAX_N]; vector G[MAX_N]; bool viz[MAX_N]; inline void getmax(int &a, int b) { a = a > b ? a : b; } void dfs(int node, int level) { dp[node] = 0, viz[node] = 1; for (vector :: iterator it = G[node].begin (); it != G[node].end (); ++it) { if (viz[*it] == 0) dfs (*it, level + 1); dp[node] += dp[*it] + 1; } } int main (void) { cin >> N >> K; for (int i = 1; i <= K; ++i) cin >> special[i]; for (int i = 1, node; i <= N; ++i) { cin >> node; for (int value = 0; cin.peek () != '\n' && !cin.eof(); ) { cin >> value, ++in[value]; G[node].push_back(value); } } for (int i = 1; i <= N; ++i) if (in[i] == 0) G[0].push_back(i); /*for (int i = 0; i <= N; ++i, g << "\n") { g << "node = " << i << ": "; for (int j = 0; j < G[i].size (); ++j) g << G[i][j] << " "; }*/ dfs(0, 0); //for (int i = 1; i <= N; ++i) //printf ("%lld\n", dp[i]); int maxi = 0, result = 0; for (int i = 1; i <= K; ++i) if (maxi < dp[special[i]]) { maxi = dp[special[i]]; result = special[i]; } cout << result; }