#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int32_t x;
  scanf("%d", &x);
  return x;
}
inline string get() {
  char ch[1000010];
  scanf("%s", ch);
  return ch;
}
const int MAX_LG = 60;
const long long maxn = 1e6 + 100;
const long long base = 29;
const long long mod = 1e9 + 7;
const long long INF = 1e18 + 100;
vector<long long> g[maxn];
pair<pair<long long, long long>, long long> p[maxn];
long long res[maxn], sz[maxn];
long long X, Y;
inline long long ccw(pair<long long, long long> a, pair<long long, long long> b,
                     pair<long long, long long> c) {
  long long value = (b.first - a.first) * (c.second - a.second) -
                    (b.second - a.second) * (c.first - a.first);
  if (value > 0)
    return 1;
  else
    return 0;
}
inline void getsz(long long v, long long pr = -1) {
  sz[v] = 1;
  for (auto u : g[v]) {
    if (u - pr) getsz(u, v), sz[v] += sz[u];
  }
}
inline bool cmp(const long long &a, const long long &b) {
  return ccw({X, Y}, p[a].first, p[b].first);
}
inline void solve(long long vid, long long pid, vector<long long> vc,
                  long long pr = -1) {
  res[pid] = vid;
  X = p[pid].first.first, Y = p[pid].first.second;
  sort(vc.begin(), vc.end(), cmp);
  for (auto u : g[vid]) {
    if (u == pr) continue;
    long long pid2 = vc.back();
    vc.pop_back();
    vector<long long> vc2;
    long long need = sz[u] - 1;
    while (need--) {
      vc2.push_back(vc.back());
      vc.pop_back();
    }
    solve(u, pid2, vc2, vid);
  }
}
int32_t main() {
  long long n = in();
  for (long long i = 0; i < n - 1; i++) {
    long long v = in(), u = in();
    g[v].push_back(u);
    g[u].push_back(v);
  }
  getsz(1);
  for (long long i = 0; i < n; i++)
    p[i].first.first = in(), p[i].first.second = in(), p[i].second = i;
  long long id = 0;
  for (long long i = 1; i < n; i++)
    if (p[i] < p[id]) id = i;
  vector<long long> vc;
  for (long long i = 0; i < n; i++)
    if (i != id) vc.push_back(p[i].second);
  solve(1, id, vc);
  for (long long i = 0; i < n; i++, cout << " ") cout << res[i];
}
