#define _CRT_SECURE_NO_WARNINGS #pragma comment(linker, "/stack:32777216") #include <string> #include <vector> #include <map> #include <list> #include <iterator> #include <set> #include <queue> #include <iostream> #include <sstream> #include <stack> #include <deque> #include <cmath> #include <memory.h> #include <cstdlib> #include <cstdio> #include <cctype> #include <algorithm> #include <utility> #include <time.h> #include <complex> using namespace std; #define FOR(i, a, b) for(int i = (a); i < (b); ++i) #define RFOR(i, b, a) for(int i = (b) - 1; i >= (a); --i) #define REP(i, N) FOR(i, 0, N) #define RREP(i, N) RFOR(i, N, 0) #define FILL(A,value) memset(A,value,sizeof(A)) #define ALL(V) V.begin(), V.end() #define SZ(V) (int)V.size() #define PB push_back #define MP make_pair #define Pi 3.14159265358979 #define left fdsfds typedef long long Int; typedef unsigned long long UINT; typedef vector <int> VI; typedef pair <int, int> PII; const int INF = 1000000000; const int MAX = 100007; const int MAX2 = 2000; const int BASE = 1000000000; const int MOD = 1000000007; vector<int> g[MAX]; vector<int> gr[MAX]; int used[MAX]; int C[MAX]; vector<int> G[MAX]; vector<int> order, component; void dfs1 (int v) { used[v] = true; for (size_t i=0; i<g[v].size(); ++i) if (!used[ g[v][i] ]) dfs1 (g[v][i]); order.push_back (v); } void dfs2 (int v) { used[v] = true; component.push_back (v); for (size_t i=0; i<gr[v].size(); ++i) if (!used[ gr[v][i] ]) dfs2 (gr[v][i]); } bool ok = 0; int goal; void dfs3(int v) { if (v == goal) ok = 1; if (used[v]) return; used[v] = 1; FOR(i,0,G[v].size()) dfs3(G[v][i]); } int main() { //freopen("in.txt" , "r", stdin); int T; cin >> T; FOR(tt,0,T) { int n , m , k; cin >> n >> m >> k; order.clear(); component.clear(); FOR(i,0,n) { g[i].clear(); gr[i].clear(); G[i].clear(); used[i] = 0; } vector<int> a(k); FOR(i,0,k) { int x; scanf("%d" , &x); --x; a[i] = x; } FOR(i,0,m) { int a , b; scanf("%d%d" , &a , &b); --a;--b; g[a].push_back(b); gr[b].push_back(a); } for (int i=0; i<n; ++i) if (!used[i]) dfs1 (i); FOR(i,0,n) { used[i] = 0; } int cnt = 0; for (int i=0; i<n; ++i) { int v = order[n-1-i]; if (!used[v]) { dfs2 (v); FOR(i,0,component.size()) { C[component[i]] = cnt; } ++cnt; component.clear(); } } vector<PII> A; FOR(i,0,k) { A.push_back(MP(C[a[i]] , a[i])); } sort(ALL(A)); FOR(i,0,n) { FOR(j,0,g[i].size()) { G[C[i]].push_back(C[g[i][j]]); } } FOR(i,0,n) { used[i] = 0; } bool q = 1; RFOR(i,A.size() - 1 , 0) { ok = 0; goal = A[i + 1].first; dfs3(A[i].first); q &= ok; } if (q) { FOR(i,0,A.size()) { printf("%d " , A[i].second + 1); } printf("\n"); } else { printf("-1\n"); } } return 0; }