#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){
sort(v.begin(),v.end(),[&](const int &x,const int &y){
return arr[x]<arr[y];
});
int p=0,t=0;
for(int x:komsu[pos]){
if(x==par[pos])continue;
vector<int>z;
t+=sub[x]-1;
while(p<t){
z.pb(v[p]);
p++;
}
ans[v[p]]=x;
p++;
t++;
f(x,z);
}
}
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;
}
par[1]=1;
dfs(1);
vector<int>v;
for(int i=1;i<=n;i++){
if(i==root)continue;
v.pb(i);
}
ans[root]=1;
f(1,v);
for(int i=1;i<=n;i++){
cout<<ans[i]<<" ";
}
}