//Solution by Zhusupov Nurlan #include <iostream> #include <cassert> #include <cstdio> #include <cstdlib> #include <cstring> #include <cctype> #include <cmath> #include <algorithm> #include <set> #include <vector> #include <map> #include <string> #include <stack> #include <queue> #include <ctime> using namespace std; typedef long long LL; typedef map<string , int> MSI; typedef vector<int> VI; typedef pair<int, int> PII; #define pb(x) push_back(x) #define sqr(x) ((x) * (x)) #define F first #define S second #define SZ(t) ((int) t.size()) #define len(t) ((int) t.length()) #define base LL(1e9 + 7) #define fname "" #define sz 1000 * 200 #define EPS (1e-8) #define INF ((int)1e9 + 9) #define write(xx) printf("%d" , xx); #define readln(xx) getline(cin , xx) #define read(xx) scanf("%d" , &xx) #define mp make_pair const double PI = acos(-1.0); VI ans, a[sz], b[sz], r[sz], e[sz]; int T, c[sz], n, last, cur, bad, m, v, u, k, cnt, g, color[sz], d[sz], was[sz]; void dfs(int v) { was[v] = 1; for (int i = 0; i < a[v].size(); i++) if (!was[a[v][i]]) dfs(a[v][i]); d[++cnt] = v; } void dfsr(int v) { color[v] = g; for (int i = 0; i < b[v].size(); i++) if (!color[b[v][i]]) dfsr(b[v][i]); else r[color[b[v][i]]].pb(g); } void topsort(int v) { was[v] = 1; for (int i = 0; i < r[v].size(); i++) if (!was[r[v][i]]) topsort(r[v][i]); d[++cnt] = v; } void go(int v) { if (v == last) cur = 1; was[v] = 1; for (int i = 0; i < r[v].size(); i++) if (!was[r[v][i]]) { go(r[v][i]); } else if (last == r[v][i]) cur = 1; } int main() { // freopen(fname"in", "r", stdin); // freopen(fname"out", "w", stdout); ios_base::sync_with_stdio(false); cin.tie(0); cin >> T; while (T--) { cin >> n >> m >> k; for (int i = 1; i <= k; i++) cin >> c[i]; for (int i = 1; i <= m; i++) { cin >> v >> u; a[v].pb(u); b[u].pb(v); } for (int i = 1; i <= n; i++) if (!was[i]) dfs(i); for (int i = n; i >= 1; i--) { v = d[i]; if (!color[v]) { g++; dfsr(v); } } for (int i = 1; i <= k; i++) { e[color[c[i]]].pb(c[i]); } for (int i = 1; i <= g; i++) { sort(e[i].begin(), e[i].end()); reverse(e[i].begin(), e[i].end()); } for (int i = 1; i <= n; i++) was[i] = 0; cnt = 0; for (int i = 1; i <= g; i++) if (!was[i]) topsort(i); for (int i = 1; i <= g; i++) was[i] = 0; ans.clear(); last = bad = 0; for (int i = 1; i <= g; i++) { v = d[i]; if (e[v].empty()) continue; for (int j = 0; j < e[v].size(); j++) ans.pb(e[v][j]); if (last == 0) last = v; cur = 0; go(v); if (!cur) bad = 1; last = v; } if (bad) cout << -1 << "\n"; else { reverse(ans.begin(), ans.end()); for (int i = 0; i < ans.size(); i++) cout << ans[i] << " "; cout << "\n"; } for (int i = 1; i <= n; i++) r[i].clear(), e[i].clear(), a[i].clear(), b[i].clear(), was[i] = color[i] = 0; g = cnt = 0; ans.clear(); } }