#include <bits/stdc++.h> #include <assert.h> #include <unordered_map> using namespace std; typedef long long ll; typedef vector < long long > vll; typedef pair < long long, long long > pll; typedef pair < int, int > pii; typedef vector < int > vii; #define csl ios_base::sync_with_stdio(false); cin.tie(NULL) #define mp make_pair #define fst first #define snd second #define special 2147483647 ll t, n, u, v, m, q, r, ql, qr, k, l, s, x, y, w, h, c, a, b, z, K; const int N = 2e5 + 500; const long long mod = 1e9 + 7; const long long INF = 1LL << 57LL; const bool JUDGE = false; vii adj[N], radj[N], comp[N], ad[N]; set < int > Adj[N]; int H = 0, st[N], cnt[N], to[N], ideg[N], Q[N], ans[N]; int vis[N], print[N]; void dfs (int v) { if (vis[v]) return; vis[v] = true; for (int i = 0; i < adj[v].size(); ++i) { dfs(adj[v][i]); } st[H++] = v; } void dfs2 (int v) { if (vis[v]) return; vis[v] = true; comp[k].push_back(v); to[v] = k; for (int i = 0; i < radj[v].size(); ++i) { dfs2(radj[v][i]); } } int main(){ csl; cin >> t; while (t--) { k = -1; cin >> n >> m >> K; for (int i = 0; i <= n; ++i) print[i] = 0; for (int i = 0; i < K; ++i) { cin >> x; print[x] = true; } for (int i = 0; i <= n; ++i) { adj[i].clear(); radj[i].clear(); ad[i].clear(); Adj[i].clear(); vis[i] = 0; comp[i].clear(); H = 0; cnt[i] = 0; ans[i] = 0; ideg[i] = 0; } for (int i = 0; i < m; ++i) { cin >> u >> v; adj[u].push_back(v); radj[v].push_back(u); } for (int i = 1; i <= n; ++i) { if (vis[i]) continue; dfs(i); } for (int i = 0; i <= n; ++i) vis[i] = false; for (int i = H - 1; i >= 0; --i) { if (vis[st[i]]) continue; k++; dfs2(st[i]); sort(comp[k].begin(), comp[k].end()); } for (int i = 0; i <= k; ++i) { for (int j = 0; j < comp[i].size(); ++j) { cnt[i] += print[comp[i][j]]; for (int l = 0; l < adj[comp[i][j]].size(); ++l) { if (to[adj[comp[i][j]][l]] != i) Adj[i].insert(to[adj[comp[i][j]][l]]); } } } for (int i = 0; i <= k; ++i) { for (auto j = Adj[i].begin(); j != Adj[i].end(); ++j) { ad[i].push_back(*j); ideg[*j]++; } } int C = 0; for (int i = 0; i <= k; ++i) { if (ideg[i] == 0) { Q[C++] = i; } } for (int i = 0; i < C; ++i) { //cout << Q[i] << " "; int x = Q[i]; for (int j = 0; j < ad[x].size(); ++j) { int v = ad[x][j]; ideg[v]--; if (ideg[v] == 0) Q[C++] = v; } } bool valid = false; for (int i = C - 1; i >= 0; --i) { ans[Q[i]] = 0; for (int j = 0; j < ad[Q[i]].size(); ++j) { int v = ad[Q[i]][j]; ans[Q[i]] = max(ans[Q[i]], ans[v]); } ans[Q[i]] += cnt[Q[i]]; if (ans[Q[i]] == K) valid = true; } if (valid) { for (int i = 0; i < C; ++i) { for (int j = 0; j < comp[Q[i]].size(); ++j) { if (print[comp[Q[i]][j]]) cout << comp[Q[i]][j] << " "; } } cout << '\n'; } else { cout << -1 << '\n'; } } return 0; }