/********************************************************************************************** * Sometimes it is the people no one imagines anything of who do the things no one can imagine.* * * * User: LLcoolNJ * ***********************************************************************************************/ #include <vector> #include <list> #include <map> #include <set> #include <queue> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <complex> #include <utility> #include <fstream> #include <sstream> #include <iostream> #include <iomanip> #include <cctype> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <cstring> #include <climits> using namespace std; typedef long long LL; typedef unsigned long long ULL; typedef long double LD; typedef vector<int> VI; typedef vector<string> VS; typedef vector<VI> VVI; typedef pair<int,int> PII; typedef vector<PII> VII; #define REP(i,a,b) for(int i=a;i<b;i++) #define rep(i,n) REP(i,0,n) #define REV(i,a,b) for(int i=a-1;i>=b;i--) #define rev(i,n) REV(i,n,0) #define TR(i,x) for(typeof(x.begin()) i=x.begin();i!=x.end();i++) #define GI ({ int x; scanf("%d",&x); x; }) #define GLL ({ LL x; scanf("%lld",&x); x; }) #define PRI(x) printf("%d",x); #define PRC(x) printf("%c",x); #define PLL(x) printf("%lld",x); #define ALL(v) v.begin(),v.end() #define PB push_back #define MP make_pair #define PQ priority_queue #define inf (int)(1e9) #define linf (LL)(1e18) #define eps (double)(1e-9) #define leps (LD)(1e-18) #define PI (double)(3.141592653589793238) #define MAX 100005 VI AdjList[MAX]; bool dfs_num[MAX]; bool li[MAX]; VI ts; void dfs2(int u) { dfs_num[u] = true; for (int j = 0; j < (int)AdjList[u].size(); j++) { int v = AdjList[u][j]; if (dfs_num[v] == false) dfs2(v); } ts.push_back(u); } int main(){ int T; int n,m,k, v; int a,b; scanf("%d",&T); VI vs; while(T--){ vs.clear(); ts.clear(); scanf("%d %d %d",&n,&m,&k); memset(li, false, sizeof li); for(int i=0;i<k;i++){ scanf("%d",&v); li[v] = true; vs.PB(v); } for(int i=0;i<m;i++){ scanf("%d %d",&a, &b); AdjList[a].PB(b); } ts.clear(); memset(dfs_num, false, sizeof dfs_num); for (int i = 1; i <= n; i++) if (dfs_num[i] == false) dfs2(i); VI z; for (int i = (int)ts.size() - 1; i >= 0; i--){ if(li[ts[i]]) z.PB(ts[i]); } bool fl = true; for(int i=0;i<k;i++){ if(z[i] != vs[i]){ fl = false; break; } } if(fl) printf("-1\n"); else{ for(int i=0;i<k;i++){ printf("%d ",z[i]); } printf("\n"); } } return 0; }