#include<iostream> #include<fstream> #include<algorithm> #include<vector> #include<queue> #define in cin #define out cout using namespace std; typedef long long ll; const int Nmax = 100001; vector<int> G[Nmax],Gt[Nmax],Comp[Nmax]; vector<int> CG[Nmax],CGt[Nmax]; int imp[Nmax],impc[Nmax],f[Nmax],m[Nmax]; int X[2*Nmax],Y[2*Nmax],pof[Nmax]; int Tt[Nmax],Kh[Nmax]; int T,N,M,K,kk; queue<int> q; void dfs1(int x){ m[x]=1; for(vector<int>::iterator it=G[x].begin();it!=G[x].end();++it) if(!m[*it]) dfs1(*it); f[++f[0]]=x; } void dfs2(int x,int k){ Comp[k].push_back(x); m[x]=1,pof[x]=k; for(vector<int>::iterator it=Gt[x].begin();it!=Gt[x].end();++it) if(!m[*it]) dfs2(*it,k); } void dfs3(int x){ m[x]=1; for(vector<int>::iterator it=CG[x].begin();it!=CG[x].end();++it) if(!m[*it]) dfs3(*it); } void res(){ for(int i=1;i<=N;i++){ G[i].clear(),Gt[i].clear(),CG[i].clear(),CGt[i].clear(),Comp[i].clear(); Tt[i]=Kh[i]=imp[i]=impc[i]=m[i]=pof[i]=f[i]=0; } Kh[0]=kk=f[0]=0; } int main(){ in>>T; while(T--){ in>>N>>M>>K; res(); int x,y; for(int i=1;i<=K;i++) in>>x,imp[x]=1; for(int i=1;i<=M;i++){ in>>x>>y; X[i]=x,Y[i]=y; G[x].push_back(y); Gt[y].push_back(x); } for(int i=1;i<=N;i++) if(!m[i]) dfs1(i); for(int i=1;i<=N;i++) m[i]=0; for(int i=N;i>=1;i--) if(!m[f[i]]) dfs2(f[i],++kk); for(int i=1;i<=kk;i++){ for(vector<int>::iterator it=Comp[i].begin();it!=Comp[i].end();++it){ if(imp[*it]) impc[i]=1; } } for(int i=1;i<=M;i++){ x=X[i],y=Y[i]; if(pof[x]!=pof[y]){ CG[pof[x]].push_back(pof[y]); CGt[pof[y]].push_back(pof[x]); } } for(int i=1;i<=kk;i++){ sort(CG[i].begin(),CG[i].end()); vector<int>::iterator itt = unique(CG[i].begin(),CG[i].end()); CG[i].resize(distance(CG[i].begin(),itt)); sort(CGt[i].begin(),CGt[i].end()); itt = unique(CGt[i].begin(),CGt[i].end()); CGt[i].resize(distance(CGt[i].begin(),itt)); Tt[i]=CG[i].size(); } for(int i=1;i<=kk;i++) if(!Tt[i]) q.push(i); while(!q.empty()){ x=q.front(); q.pop(); if(impc[x]) Kh[++Kh[0]]=x; for(vector<int>::iterator it=CGt[x].begin();it!=CGt[x].end();++it){ Tt[*it]--; if(!Tt[*it]) q.push(*it); } } for(int i=1;i<=kk;i++){ m[i]=0; sort(Comp[i].begin(),Comp[i].end()); } int ok=1; for(int i=2;i<=Kh[0];i++){ m[Kh[i-1]]=0; dfs3(Kh[i]); if(!m[Kh[i-1]]) ok=0; } if(!ok) out<<"-1\n"; else{ for(int i=Kh[0];i>=1;i--){ for(vector<int>::iterator it=Comp[Kh[i]].begin();it!=Comp[Kh[i]].end();++it){ if(imp[*it]) out<<*it<<' '; } } out<<'\n'; } } return 0; }