#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
int n;
vector<int>komsu[200023];
pair<int,int>arr[200023];
int t=0;
int per[200023],sira[200023];
vector<int>a,b,c,d;
void dfs(int pos,int par){
per[sira[++t]]=pos;
for(int x:komsu[pos]){
if(x==par)continue;
dfs(x,pos);
}
}
signed main(){
ios_base::sync_with_stdio(23^23);cin.tie(0);
cin>>n;
for(int i=1;i<n;i++){
int x,y;cin>>x>>y;
komsu[x].pb(y);
komsu[y].pb(x);
}
for(int i=1;i<=n;i++){
cin>>arr[i].fr>>arr[i].sc;
per[i]=i;
}
sort(per+1,per+n+1,[&](const int &x,const int &y){
return arr[x]<arr[y];
});
a.pb(per[1]);
d.pb(per[1]);
for(int i=2;i<=n;i++){
if(arr[per[i]].sc>arr[a.back()].sc)a.pb(per[i]);
if(arr[per[i]].sc<arr[d.back()].sc)d.pb(per[i]);
}
b.pb(per[n]);
c.pb(per[n]);
for(int i=n-1;i>=1;i--){
if(arr[per[i]].sc>=arr[b.back()].sc)b.pb(per[i]);
if(arr[per[i]].sc<=arr[c.back()].sc)c.pb(per[i]);
}
for(int i=1;i<a.size()-1;i++){
sira[++t]=a[i];
}
for(int i=b.size()-1;i>=0;i--){
sira[++t]=b[i];
}
for(int i=1;i<c.size()-1;i++){
sira[++t]=c[i];
}
for(int i=d.size()-1;i>=0;i--){
sira[++t]=d[i];
}
t=0;
dfs(1,1);
for(int i=1;i<=n;i++){
cout<<per[i]<<" ";
}
cout<<endl;
}