#include <bits/stdc++.h>
const double eps = 1e-9;
const int int_inf = 1 << 31 - 1;
const long long i64_inf = 1ll << 63 - 1;
const double pi = acos(-1.0);
using namespace std;
struct point {
  int x, y, id;
  point(){};
  friend bool operator<(const point& a, const point& b) {
    return (long long)a.x * 1ll * b.y - (long long)a.y * 1ll * b.x > 0;
  }
};
vector<int> g[1510];
point p[1510];
int n;
int res[1510];
int sz[1510];
int par[1510];
void dfs(int v, int p = -1) {
  par[v] = p;
  sz[v] = 1;
  for (int i = 0; i < (int)g[v].size(); i++) {
    int to = g[v][i];
    if (to == p) continue;
    dfs(to, v);
    sz[v] += sz[to];
  }
}
void go(int l, int r, int v) {
  int maxy = r;
  for (int i = l; i < r; i++)
    if (p[i].y > p[maxy].y) maxy = i;
  res[p[maxy].id] = v;
  swap(p[l], p[maxy]);
  for (int i = l + 1; i <= r; i++) p[i].x -= p[l].x, p[i].y -= p[l].y;
  ++l;
  sort(p + l, p + r + 1);
  for (int i = 0; i < (int)g[v].size(); i++) {
    int to = g[v][i];
    if (to == par[v]) continue;
    go(l, l + sz[to] - 1, to);
    l += sz[to];
  }
}
int main() {
  cin >> n;
  for (int i = 0; i < (int)n - 1; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--;
    v--;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  for (int i = 0; i < (int)n; i++) scanf("%d%d", &p[i].x, &p[i].y), p[i].id = i;
  dfs(0);
  go(0, n - 1, 0);
  for (int i = 0; i < (int)n; i++) printf("%d ", res[i] + 1);
  return 0;
}
