#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N = 2005;
struct edge{
int to,ne;
}e[N<<2];
int k,pre[N];
int ma,c[N];
int n,w[N];
int f[N];
int ans[N];
inline void add(int u,int v){
e[++k] = {v,pre[u]};
pre[u] = k;
}
inline int find(int x){
if(f[x] == x) return x;
return f[x] = find(f[x]);
}
inline void merge(int x,int y){
int fx = find(x);
int fy = find(y);
if(fx != fy) f[fx] = fy;
}
inline void dfs(){
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(NULL);
int T;
cin >> T;
while(T--){
memset(e,0,sizeof(e));
cin >> n;
for(int i = 1; i <= n; i++){
cin >> w[i];
}
int x,y;
for(int i = 1; i < n; i++){
cin >> x >> y;
add(x,y); add(y,x);
c[x]++,c[y]++;
ma = max({ma,c[x],c[y]});
}
if(ma == n-1){
set<int > s;
for(int i = 1; i <= n; i++){
f[i] = i;
s.insert(i);
}
for(int i = 1; i <= n; i++){
int num = w[i];
for(auto it : s){
if(i == n || find(num) != find(it)){
ans[i] = it;
merge(num,it);
s.erase(it);
break;
}
}
}
for(int i = 1; i <= n; i++)
cout << ans[i] << " ";
cout << endl;
continue;
}
if(ma == 1){
continue;
}
if(n <= 10){
continue;
}
}
return 0;
}