#include <bits/stdc++.h> using namespace std; int N, M, K; vector<int> adj[100001]; vector<int> adj2[100001]; int comp[100001], ncomp; int idx[100001], low[100001], now; bool onS[100001]; vector<int> S; int A[100001]; vector<int> stuff[100001]; vector<int> collect; int dp[100001]; void dfs(int u) { idx[u]=low[u]=++now; onS[u]=true; S.push_back(u); for(auto& v: adj[u]) { if(!idx[v]) { dfs(v); low[u]=min(low[u], low[v]); } else if(onS[v]) low[u]=min(low[u], idx[v]); } if(idx[u]==low[u]) { ncomp++; int n; do { n=S.back(); S.pop_back(); onS[n]=false; comp[n]=ncomp; } while(n!=u); } } void _main() { scanf("%d%d%d", &N, &M, &K); for(int i=1; i<=N; i++) { adj[i].clear(); adj2[i].clear(); comp[i]=0; idx[i]=low[i]=0; onS[i]=0; stuff[i].clear(); dp[i]=0; } S.clear(); ncomp=now=0; for(int i=0; i<K; i++) scanf("%d", A+i); int a, b; for(int i=0; i<M; i++) { scanf("%d%d", &a, &b); adj[a].push_back(b); } for(int i=1; i<=N; i++) if(!idx[i]) dfs(i); for(int i=0; i<K; i++) stuff[comp[A[i]]].push_back(A[i]); collect.clear(); for(int i=1; i<=N; i++) for(auto& v: adj[i]) if(comp[i]!=comp[v]) adj2[comp[v]].push_back(comp[i]); for(int i=1; i<=ncomp; i++) { sort(adj2[i].begin(), adj2[i].end()); adj2[i].resize(unique(adj2[i].begin(), adj2[i].end())-adj2[i].begin()); } vector<int> order; for(int i=ncomp; i>=1; i--) { if(!stuff[i].empty()) { sort(stuff[i].begin(), stuff[i].end()); for(auto& it: stuff[i]) collect.push_back(it); order.push_back(i); } } int cnt=0; for(int i=1; !order.empty() && i<=ncomp; i++) { int f=0; if(i==order.back()) { if(dp[i]!=cnt++) { printf("-1\n"); return; } order.pop_back(); f=1; } for(auto& v: adj2[i]) dp[v]=max(dp[v], dp[i]+f); } for(auto& it: collect) printf("%d ", it); printf("\n"); } int main() { int TEST; scanf("%d", &TEST); while(TEST--) _main(); return 0; }