#include <bits/stdc++.h> #define F first #define S second using namespace std; struct SCC{ vector<int> used; vector<vector<int> > g2; void dfs1(vector<int>*g, int x, vector<int>&ns){ if (used[x]==1) return; used[x]=1; for (int nx:g[x]){ g2[nx].push_back(x); dfs1(g, nx, ns); } ns.push_back(x); } void dfs2(int x, vector<int>&co){ if (used[x]==2) return; used[x]=2; co.push_back(x); for (int nx:g2[x]){ dfs2(nx, co); } } SCC(vector<int>*g, int n, vector<vector<int> >&ret):used(n+1),g2(n+1){ vector<int> ns; for (int i=1;i<=n;i++){ dfs1(g, i, ns); } for (int i=n-1;i>=0;i--){ if (used[ns[i]]!=2){ ret.push_back(vector<int>()); dfs2(ns[i], ret.back()); } } } }; vector<int> g[101010]; int can[101010]; int co[101010]; vector<int> vcs[101010]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int tcs; cin>>tcs; for (int tc=0;tc<tcs;tc++){ int n,m,k; cin>>n>>m>>k; for (int i=0;i<=n;i++){ g[i].clear(); can[i]=0; vcs[i].clear(); co[i]=0; } vector<int> ks(k); for (int i=0;i<k;i++){ cin>>ks[i]; } for (int i=0;i<m;i++){ int a,b; cin>>a>>b; g[a].push_back(b); } vector<vector<int> > sccs; SCC(g, n, sccs); for (int i=0;i<(int)sccs.size();i++){ for (auto v:sccs[i]){ co[v]=i; } } for (int i=0;i<k;i++){ vcs[co[ks[i]]].push_back(ks[i]); } int i2=1; for (int i=0;i<(int)sccs.size();i++){ if ((int)vcs[i].size()>0){ if (can[i]==i2-1){ can[i]=i2; i2++; } else{ goto fail; } } for (int v:sccs[i]){ for (int nx:g[v]){ can[co[nx]]=max(can[co[nx]], can[i]); } } } for (int i=0;i<(int)sccs.size();i++){ sort(vcs[i].begin(), vcs[i].end()); for (int v:vcs[i]){ cout<<v<<" "; } } cout<<endl; goto win; fail:; cout<<-1<<'\n'; win:; } }