#include <fstream> #include <iostream> #include <vector> #include<cstdlib> #include<cstring> using namespace std; const int MAX_N = 5005; int N, K; int in[MAX_N]; int special[MAX_N]; vector<int> G[MAX_N]; bool viz[MAX_N]; int v[MAX_N]; void DFS(vector<int>*g,int start ,int cul ,int *v) { v[start]=cul; for(vector<int>::iterator i=g[start].begin();i<g[start].end();++i) if(!v[*i]) DFS(g,*i,cul,v); } 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); } } int maxx = -1; int nod; for(int i=1 ; i<=K ; i++) { int cr = 0; int root = special[i]; memset(v,0,sizeof(v)); DFS(G,root,1,v); for(int i=1 ; i<=N ; i++) if( v[i] != 0 ) ++cr; if ( cr > maxx ) maxx = cr, nod = root; } cout << nod; return 0; }