#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]; bool v[MAXN]; bitset B[MAXN]; void go(int node) { if(v[node]) return; v[node] = true; B[node] = 0; B[node][node] = 1; for(vector :: iterator it = A[node].begin(); it != A[node].end(); it++) { go(*it); B[node] |= B[*it]; } } 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(v, v + MAXN, false); for(int i = 0; i < K; i++) go(X[i]); int vmax = B[X[0]].count(); int pmax = X[0]; for(int i = 1; i < K; i++) { int cnt = B[X[i]].count(); if(cnt > vmax || (cnt == vmax && X[i] < pmax)) { vmax = cnt; pmax = X[i]; } } printf("%d\n", pmax); return 0; }