#include<bits/stdc++.h> #define eps 1e-8 #define xx first #define yy second #define LL long long #define inf 100000 #define pb push_back #define vsort(v) sort(v.begin(),v.end()) #define pi acos(-1) #define clr(a,b) memset(a,b,sizeof a) #define bclr(a) memset(a,false,sizeof a) #define pii pair<int,int> #define pll pair<LL,LL> #define MOD 1000000007 #define MP make_pair #define MX 100005 using namespace std; vector<int>G[MX],V[MX],hold[MX]; bool chk[MX],onstack[MX]; int st[MX],ed[MX],color[MX]; int deg[MX],val[MX],child[MX],sz[MX],mnval[MX]; stack<int>S; int component,cnt; void tarjan(int x){ st[x]=cnt; ed[x]=cnt++; S.push(x); onstack[x]=true; chk[x]=true; for(int i=0;i<G[x].size();i++){ int adj=G[x][i]; if(!chk[adj]){ tarjan(adj); ed[x]=min(ed[x],ed[adj]); } else if(onstack[adj]) ed[x]=min(ed[x],st[adj]); } if(st[x]==ed[x]){ int top; component++; do{ top=S.top(); S.pop(); sz[component]+=val[top]; color[top]=component; if(val[top]) hold[component].pb(top); onstack[top]=false; }while(top!=x); } } int dfs(int x){ chk[x]=true; child[x]+=sz[x]; int mx=0; for(int i=0;i<V[x].size();i++){ if(!chk[V[x][i]]) mx=max(mx,dfs(V[x][i])); else mx=max(mx,child[V[x][i]]); } child[x]+=mx; return child[x]; } vector<int>ans,pr; void getRes(int x){ if(sz[x]) ans.pb(x); int mx=0,nd=-1; for(int i=0;i<V[x].size();i++){ int adj=V[x][i]; if(child[adj]>mx){ mx=child[adj]; nd=adj; } } if(nd!=-1) getRes(nd); } void printRes(){ int As=ans.size(); for(int i=0;i<As;i++){ int id=ans[i]; sort(hold[id].begin(),hold[id].end()); for(int j=0;j<hold[id].size();j++) pr.pb(hold[id][j]); } int prsz=pr.size(); for(int i=0;i<prsz;i++){ if(i) printf(" "); printf("%d",pr[i]); } puts(""); } int main(){ int test; scanf("%d",&test); for(int kase=1;kase<=test;kase++){ int n,m,k; scanf("%d%d%d",&n,&m,&k); for(int i=0;i<k;i++){ int u; scanf("%d",&u); val[u]=1; } for(int i=0;i<m;i++){ int u,v; scanf("%d%d",&u,&v); G[u].pb(v); } for(int i=1;i<=n;i++) sort(G[i].begin(),G[i].end()); component=0; cnt=1; for(int i=1;i<=n;i++){ if(!chk[i]){ tarjan(i); } } for(int i=1;i<=n;i++){ int sz=G[i].size(); if(sz==0) continue; for(int j=0;j<sz;j++){ if(color[i]!=color[G[i][j]]){ V[color[i]].pb(color[G[i][j]]); deg[color[G[i][j]]]++; } } } memset(chk,false,sizeof chk); int ok=0; for(int i=1;i<=component;i++){ if(deg[i]==0){ int get=dfs(i); if(get==k){ getRes(i); ok=1; break; } } } if(!ok){ for(int i=1;i<=component;i++){ if(!chk[i]){ int get=dfs(i); if(get==k){ getRes(i); ok=1; break; } } } } if(ok) printRes(); else puts("-1"); memset(val,0,sizeof val); memset(chk,false,sizeof chk); memset(deg,0,sizeof deg); memset(sz,0,sizeof sz); memset(onstack,false,sizeof onstack); memset(child,0,sizeof child); ans.clear(); pr.clear(); for(int i=1;i<=n;i++){ G[i].clear(); V[i].clear(); hold[i].clear(); } } return 0; } /* 9 10 6 3 4 5 6 9 8 1 2 1 7 2 4 7 3 3 5 5 6 6 4 4 3 9 8 3 9 6 9 6 1 2 3 4 5 6 1 2 2 3 3 1 4 5 5 6 6 4 1 4 2 6 3 5 2 4 5 3 1 3 2 4 3 3 2 4 2 1 3 2 1 4 5 3 2 1 4 4 2 2 3 1 2 1 1 4 1 */