#include <iostream> #include <vector> #include <string> #include <sstream> #include <algorithm> using namespace std; vector<vector<int>> Adj; vector<char> valid; vector<char> vis; int sol=0; void dfs(int x){ vis[x]=1; for(int i : Adj[x]) if(!vis[i]){ valid[i]=false; ++sol; dfs(i); } } int main() { int n,k; cin>>n>>k; Adj.resize(n+1); vis.resize(n+1); valid.resize(n+1,0); vector<int> x(k); for(int i=0;i<k;++i){ cin>>x[i]; valid[x[i]]=1; } while(cin.get()!='\n') ; string buff; for(int i=0;i<n;++i){ int from; cin>>from; getline(cin,buff); istringstream iss(buff); int to; while(iss>>to){ Adj[from].push_back(to); valid[to]=0;} } int mx=0; int imx=n+1; int st; for(int i=0;i<k;++i) if(valid[ st=x[i] ]){ fill(vis.begin(),vis.end(),0); sol=0; dfs(st); if(sol>mx || (sol==mx&&imx>st)){ mx=sol; imx=st; } } cout<<imx<<'\n'; }