#include <cstdio> #include <iostream> #include <fstream> #include <vector> #include <list> #include <map> #include <set> #include <queue> #include <stack> #include <bitset> #include <algorithm> #include <sstream> #include <iomanip> #include <cmath> #include <cstdlib> #include <ctype.h> #include <cstring> #include <string> #include <ctime> #include <cassert> #include <utility> using namespace std; #define MAXN 5005 #define MAXL 30000 int N, K; int X[MAXN]; vector<int> A[MAXN]; char line[MAXL]; int mem[MAXN]; int go(int node) { if(mem[node] > -1) return mem[node]; int ret = 0; for(vector<int> :: iterator it = A[node].begin(); it != A[node].end(); it++) { ret += 1 + go(*it); } mem[node] = ret; return ret; } int main() { // freopen("date.in", "r", stdin); // freopen("date.out","w", stdout); scanf("%d %d", &N, &K); for(int i = 0; i < K; i++) scanf("%d", &X[i]); fgets(line, sizeof(line), stdin); for(int i = 0; i < N; i++) { fgets(line, sizeof(line), stdin); int j = 0; int id = -1; while(line[j] != '\0' && line[j] != '\n') { while(!isdigit(line[j]) && line[j] != '\0' && line[j] != '\n') j++; if(line[j] == '\0' || line[j] == '\n') break; int crt = 0; while(isdigit(line[j])) { crt = 10 * crt + line[j] - '0'; j++; } if(id == -1) id = crt; else A[id].push_back(crt); } } fill(mem, mem + MAXN, -1); int pmin = X[0]; for(int i = 1; i < K; i++) if(go(X[i]) > go(pmin) || (go(X[i]) == go(pmin) && X[i] < pmin)) pmin = X[i]; printf("%d\n", pmin); return 0; }