#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MAXN 5005 #define MAXL 30000 int N, K; int X[MAXN]; vector A[MAXN]; char line[MAXL]; int mem[MAXN]; int go(int node) { if(mem[node] > -1) return mem[node]; int ret = 0; for(vector :: 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; }