#include<bits/stdc++.h>
using namespace std;
namespace CuSn{
const int N=2e5+5;
vector<int> g[N],son[N];
int a[N];
bool cmp(int x,int y){
stack<pair<int,int>> st;
st.push({x,y});
while(!st.empty()){
auto [u,v]=st.top();st.pop();
if(a[u]!=a[v])return a[u]<a[v];
auto &cu=son[u],&cv=son[v];
int sz=min(cu.size(),cv.size());
for(int i=sz-1;i>=0;i--)st.push({cu[i],cv[i]});
if(cu.size()!=cv.size())return cu.size()<cv.size();
}
return false;
}
void dfs(int u,int fa){
for(int v:g[u])if(v!=fa){
son[u].push_back(v);
dfs(v,u);
}
sort(son[u].begin(),son[u].end(),cmp);
}
void print(int u){
cout<<a[u]<<' ';
for(int v:son[u])print(v);
}
void solve(){
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<n;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1,0);
print(1);
}
}
int main(){
iossync_with_stdio(false);
cin.tie(nullptr);
CuSnsolve();
return 0;
}