#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 par[200023],sub[200023];
int ans[200023];
void f(int pos,vector<int>&v){
for(int i=1;i<komsu[pos].size();i++){
if(komsu[pos][i-1]==par[pos])swap(komsu[pos][i],komsu[pos][i-1]);
}
if(komsu[pos].back()==par[pos])komsu[pos].pop_back();
if(!komsu[pos].size())return;
if(komsu[pos].size()==2){
if(sub[komsu[pos][0]]<sub[komsu[pos][1]]){
swap(komsu[pos][0],komsu[pos][1]);
}
int x=komsu[pos][1];
vector<int>z;
for(int i=sub[pos]-1-sub[x];i<sub[pos]-1;i++){
z.pb(v[i]);
}
ans[z.back()]=x;
z.pop_back();
f(x,z);
}
int x=komsu[pos][0];
while(v.size()!=sub[x]){
v.pop_back();
}
ans[v.back()]=x;
v.pop_back();
f(x,v);
}
void dfs(int pos){
sub[pos]=1;
for(int x:komsu[pos]){
if(x==par[pos])continue;
par[x]=pos;
dfs(x);
sub[pos]+=sub[x];
}
}
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);
}
int root=1;
for(int i=1;i<=n;i++){
cin>>arr[i].fr>>arr[i].sc;
if(arr[i]<arr[root])root=i;
}
int bas=1;
while(komsu[bas].size()==3)bas++;
par[bas]=bas;
dfs(bas);
vector<int>v;
for(int i=1;i<=n;i++){
if(i==root)continue;
v.pb(i);
}
ans[root]=bas;
sort(v.begin(),v.end(),[&](const int &x,const int &y){
return arr[x]>arr[y];
});
f(bas,v);
for(int i=1;i<=n;i++){
cout<<ans[i]<<" ";
}
}