#include <cstdlib> #include <cstdio> #include <algorithm> #include <vector> #include <queue> #include <cmath> #include <stack> #include <map> #include <set> #include <deque> #include <cstring> #include <functional> #include <climits> #include <list> #include <ctime> #include <complex> #define F1(x,y,z) for(int x=y;x<z;x++) #define F2(x,y,z) for(int x=y;x<=z;x++) #define F3(x,y,z) for(int x=y;x>z;x--) #define F4(x,y,z) for(int x=y;x>=z;x--) #define pb push_back #define LL long long #define co complex<double> #define MAX 100005 #define AMAX 16384 #define MOD 1000000007 #define f(c,d) ((1<<(c))*(d)) using namespace std; int t,n,m,k,ta,tb; bool ne[MAX],ng[MAX],v[MAX]; int gp[MAX],gi; vector<int> va[MAX],vb[MAX],vc[MAX],gg[MAX]; int in[MAX]; stack<int> x; queue<int> y; bool ok; vector<int> ans; void dfs1(int a){ v[a]=1; F1(b,0,va[a].size())if(!v[va[a][b]])dfs1(va[a][b]); x.push(a); } void dfs2(int a){ //printf("%d -> %d\n",a,gi); gp[a]=gi; gg[gi].pb(a); F1(b,0,vb[a].size())if(gp[vb[a][b]]==-1)dfs2(vb[a][b]); } void cl(int a){ // printf("cl %d\n",a); F1(b,0,vc[a].size()){ in[vc[a][b]]--; if(in[vc[a][b]]==0){ //printf("cl %d %d\n",a,vc[a][b]); if(ng[vc[a][b]])y.push(vc[a][b]); else cl(vc[a][b]); } } } int main(){ scanf("%d",&t); while(t--){ scanf("%d%d%d",&n,&m,&k); F2(a,1,n){ va[a].clear(); vb[a].clear(); ne[a]=0; v[a]=0; gp[a]=-1; } gi=0; while(k--){ scanf("%d",&ta); ne[ta]=1; } while(m--){ scanf("%d%d",&ta,&tb); va[ta].pb(tb); vb[tb].pb(ta); } F2(a,1,n)if(!v[a])dfs1(a); while(!x.empty()){ if(gp[x.top()]==-1){ gg[gi].clear(); dfs2(x.top()); gi++; } x.pop(); } F1(a,0,gi){ vc[a].clear(); //vd[a].clear(); in[a]=0; v[a]=0; ng[a]=0; F1(b,0,gg[a].size())if(ne[gg[a][b]])ng[a]=1; } ok=1; ans.clear(); F2(a,1,n)F1(b,0,va[a].size())if(gp[a]!=gp[va[a][b]]){ vc[gp[a]].pb(gp[va[a][b]]); in[gp[va[a][b]]]++; //printf("%d -- %d %d\n",gp[a],gp[va[a][b]],in[1]); } //F1(a,0,gi)printf("! %d %d\n",a,in[a]); F1(a,0,gi)if(in[a]==0){ if(ng[a]){ //printf("p %d %d\n",a,in[1]); y.push(a); } else x.push(a); } while(!x.empty()){ cl(x.top()); x.pop(); } while(!y.empty()){ if(y.size()>1)ok=0; int a=y.front(); //printf("aa %d\n",a); ta=ans.size(); F1(b,0,gg[a].size())if(ne[gg[a][b]]){ //printf(" %d\n",gg[a][b]); ans.pb(gg[a][b]); } sort(ans.begin()+ta,ans.end()); cl(a); y.pop(); } //printf("ok %d\n",ans.size()); if(ok){ F1(a,0,ans.size())printf("%d%c",ans[a],a==ans.size()-1?'\n':' '); }else printf("-1\n"); } //system("pause"); return 0; }