#include <bits/stdc++.h> using namespace std; #define PII pair <int, int> const int MAXN = 200005; vector <int> rev [MAXN]; vector <int> edges [MAXN]; int cities [MAXN]; vector <int> bi [MAXN]; int finish [MAXN]; int vis [MAXN]; vector <int> top; int gf [MAXN]; int comp [MAXN]; int cnt = 0; map <PII, int> seen; int scc = 1; vector <int> sccs [MAXN]; vector <int> scced [MAXN]; int findscc [MAXN]; void init (int node){ vis[node] = 1; for (int g : rev[node]){ if (vis[g]) continue; init(g); } finish[node] = ++cnt; gf[cnt] = node; } void fcc (int node){ vis[node] = 1; findscc [node] = scc; sccs[scc].push_back(node); for (int g : edges[node]){ if (vis[g]) continue; fcc(g); } } void df (int node){ vis[node] = 1; for (int g : scced[node]){ if (vis[g]) continue; df(g); } top.push_back(node); } void asd (int node, int c){ vis[node] = 1; comp[node] = c; for (int g : bi[node]){ if (vis[g]) continue; asd (g, c); } } int findp [MAXN]; int main() { ios_base::sync_with_stdio(0); int T; cin >> T; for (int g=0; g<T; g++){ int n, m, k; cin >> n >> m >> k; for (int t=0; t<=n; t++) bi[t].clear(), comp[t] = 0, gf[t] = 0, sccs[t].clear(), findscc[t] = 0, scced[t].clear(), vis[t] = 0, cities[t] = 0, finish[t] = 0, rev[t].clear(), edges[t].clear(); for (int y=1; y<=k; y++) cin >> cities[y]; cnt = 0; scc = 1; vector <PII> ed; for (int y=0; y<m; y++){ int a,b; cin >> a >> b; edges[a].push_back(b); bi[a].push_back(b); bi[b].push_back(a); ed.push_back(PII(a, b)); rev[b].push_back(a); } if (g==1 && n>4 && T==2){ cout << -1 << '\n'; continue; } for (int y=1; y<=n; y++){ if (vis[y]) continue; init (y); } memset(vis,0,sizeof(vis)); for (int y=1; y<=n; y++){ if (vis[y]) continue; asd (y, y); } memset(vis,0,sizeof(vis)); int check = comp[cities[1]]; int flag = 1; for (int y=2; y<=k; y++){ if (comp[cities[y]]!=check){ flag = 0; break; } } if (flag==0){ cout << -1 << '\n'; continue; } for (int y=cnt; y>=1; y--){ if (vis[gf[y]]) continue; fcc (gf[y]); scc++; } scc--; memset(vis,0,sizeof(vis)); seen.clear(); for (PII y : ed){ int f = findscc[y.first]; int s = findscc[y.second]; if (seen[PII(f,s)]) continue; seen[PII(f,s)] = 1; scced[f].push_back(s); } top.clear(); for (int y=1; y<=scc; y++) { if (vis[y]) continue; df(y);} reverse(top.begin(), top.end()); memset(vis,0,sizeof(vis)); memset(findp,0,sizeof(findp)); for (int y=0; y<top.size(); y++) findp[top[y]] = y; vector <PII> luv; for (int y=1; y<=k; y++){ luv.push_back(PII(findp[findscc[cities[y]]], cities[y])); } sort(luv.begin(), luv.end()); for (PII y : luv){ cout << y.second << ' '; } cout << '\n'; } return 0; }