/**** Far from what I once was, But not yet what I'm going to be ****/ /******** HEADER FILES ********/ #include <bits/stdc++.h> /******** MACRO *******/ #define il(n) scanf("%lld",&n) #define i(n) scanf("%d",&n) #define vv vector<int> #define ll long long #define dd double #define pp pair<int,int> #define mod 1000000007 #define read() freopen("input.txt","r",stdin) #define write() freopen("output.txt","w",stdout) using namespace std; /***** NODE ******/ struct node { int a,b,c,d,e; }; /******** predefined sorting functions *************/ bool cmp(node first,node sec) { if(first.b!=sec.b) return first.b<sec.b; /// sort in ascending order return first.a<sec.a ; /// if first same than in ascending order of second } bool operator <(node left,node right) { if(left.a!=right.a) return left.a<right.a; return left.b<right.b; /// use of > operator sorts in ascending order } /********* Happy Coding :) ********** ********** Main Code ***************/ vector<int> v[100005],vt[100005],s,cscc,main_vector,z; int c[100005],flag,nflag,target,scc; int dfs_t(int x) { int i; /// creating stack for scc for(i=0;i<vt[x].size();i++) { if(c[vt[x][i]]==0) { c[vt[x][i]]=1; dfs_t(vt[x][i]); } } s.push_back(x); return 0; } int dfs(int x) { cscc.push_back(x); int i; for(i=0;i<v[x].size();i++) { if(c[v[x][i]]==0) { c[v[x][i]]=scc; dfs(v[x][i]); } else if(c[v[x][i]]==target) flag=1; } return 0; } int n,m,k,mark[100005],a,b; int main() { int tc; cin>>tc; while(tc--) { int i,j,x; cin>>n>>m>>k; /// initialization for(i=0;i<=100002;i++) { v[i].clear(); vt[i].clear(); c[i]=0; mark[i]=0; } main_vector.clear(); s.clear(); for(i=1;i<=k;i++) { /// Station cin>>x; mark[x]=1; } for(i=1;i<=m;i++) { cin>>a>>b; /// graph v[a].push_back(b); /// transpose graph vt[b].push_back(a); } for(i=1;i<=n;i++) { if(c[i]==0) { c[i]=1; dfs_t(i); } } /// target to be visit target=0; int finalanswer=0; for(i=1;i<=n;i++) c[i]=0; scc=0; for(i=n-1;i>=0;i--) { if(c[s[i]]==0) { cscc.clear(); flag=0; c[s[i]]=++scc; dfs(s[i]); nflag=0; for(j=0;j<cscc.size();j++) { if(mark[cscc[j]]==1) nflag=1; } z.clear(); if((target==0)&&(nflag==1)) { target=scc; for(j=0;j<cscc.size();j++) { if(mark[cscc[j]]==1) z.push_back(cscc[j]); } sort(z.begin(),z.end()); for(j=z.size()-1;j>=0;j--) main_vector.push_back(z[j]); } else if((flag==1)&&(target!=0)&&(nflag==0)) { for(j=0;j<cscc.size();j++) c[cscc[j]]=target; } else if((flag==1)&&(target!=0)&&(nflag==1)) { target=scc; for(j=0;j<cscc.size();j++) { if(mark[cscc[j]]==1) z.push_back(cscc[j]); } sort(z.begin(),z.end()); for(j=z.size()-1;j>=0;j--) main_vector.push_back(z[j]); } else if((flag==0)&&(target!=0)&&(nflag==1)) finalanswer=-1; } } if((finalanswer!=1)&&(main_vector.size()==k)) { for(i=main_vector.size()-1;i>=0;i--) cout<<main_vector[i]<<" "; } else cout<<"-1"; cout<<"\n"; } return 0; } /** 10 4 5 3 4 3 2 3 4 3 1 1 4 2 1 3 2 7 5 4 1 5 6 7 1 7 1 5 5 6 7 5 6 7 */