#include <bits/stdc++.h>   using namespace std;   bool myfunction(int i, int j) { return (i < j); }   istream &in = cin;   int n;   bool adj[1501][1501];   int vtx[1501];   vector<bool> chk;   vector<pair<pair<int, int>, int> > points;   vector<pair<int, int> > res;   int dfs(int node) {     int cnt = 0;     chk[node] = true;     for (int i = 1; i <= n; ++i)       if (!chk[i] && adj[node][i]) cnt += dfs(i);     vtx[node] = cnt + 1;     return vtx[node];   }   void go(int root, vector<pair<pair<int, int>, int> > ps) {     int min_y = INT_MAX, min_i = -1;     for (int i = 1; i <= ps.size() - 1; ++i)       if (ps[i].first.second < min_y) {         min_y = ps[i].first.second;         min_i = i;       }     res.push_back(make_pair(ps[min_i].second, root));     vector<pair<long double, int> > tps(1);     for (int i = 1; i <= ps.size() - 1; ++i)       if (i != min_i)         tps.push_back(             make_pair(atan2l(ps[i].first.first - ps[min_i].first.first,                              ps[i].first.second - ps[min_i].first.second),                       i));     sort(tps.begin() + 1, tps.end());     int s = 1;     for (int i = 1; i <= n; ++i)       if (adj[root][i]) {         vector<pair<pair<int, int>, int> > nps(1);         while (nps.size() < vtx[i] + 1) {           nps.push_back(ps[tps[s].second]);           ++s;         }         adj[i][root] = false;         go(i, nps);       }   }   int main() {     in >> n;     for (int i = (0); i < (n + 1); ++i)       for (int j = (0); j < (n + 1); ++j) adj[i][j] = false;     points.resize(n + 1);     chk.resize(n + 1, false);     memset(vtx, 0, sizeof(vtx));     for (int i = (0); i < (n - 1); ++i) {       int a, b;       in >> a >> b;       adj[a][b] = adj[b][a] = true;     }     for (int i = (0); i < (n); ++i) {       int x, y;       in >> x >> y;       points[i + 1] = make_pair(make_pair(x, y), i + 1);     }     dfs(1);     sort(points.begin() + 1, points.end());     for (int i = (0); i < (n + 1); ++i) chk[i] = false;     go(1, points);     sort(res.begin(), res.end());     for (int i = 0; i < res.size(); ++i) cout << res[i].second <<    ;     return 0;   }   