#include #include int a[5001][5001]; unsigned short seen[5001], gseen[5001]; int readSpaces() { char c; while ((c = getc(stdin)) == ' '); if ((c == EOF) || (c == '\n')) return 1; else ungetc(c, stdin); return 0; } void initSeen(int n) { int i; for (i = 1; i <= n; i++) seen[i] = 0; } int dfs(int x) { int value = 1, i; seen[x] = 1; gseen[x] = 1; for (i = 1; i <= a[x][0]; i++) if (!seen[a[x][i]]) value += dfs(a[x][i]); return value; } int main() { int n, m, k[5000], i, j, t, eol, value, max = 0, sol; scanf("%d%d", &n, &m); for (i = 0; i <= n; i++) { a[i][0] = 0; seen[i] = 0; gseen[i] = 0; } for (i = 0; i < m; i++) scanf("%d", &k[i]); for (i = 0; i < n; i++) { scanf("%d", &j); eol = 0; while (!eol) { eol = readSpaces(); if (!eol) { scanf("%d", &t); a[j][++a[j][0]] = t; } } } for (i = 0; i < m; i++) { if (!gseen[k[i]]) { initSeen(n); value = dfs(k[i]); if (value > max) { max = value; sol = k[i]; } if (value == max) if (k[i] < sol) sol = k[i]; } } printf("%d\n", sol); return 0; }