#include <bits/stdc++.h>
using namespace std;
const int maxN = 3e2 + 117;
vector<int> g[maxN], gp[maxN], ans, lf, q;
int n, deg[maxN], k, par[maxN];
bool mark[maxN];
void dfs(int v, int p) {
  par[v] = p;
  for (auto u : g[v])
    if (u != p) dfs(u, v);
}
void dfsO(int v) {
  mark[v] = true;
  ans.push_back(v);
  for (auto u : gp[v])
    if (!mark[u]) {
      dfsO(u);
      ans.push_back(v);
    }
  if (deg[v] == 1) lf.push_back(v);
}
int main() {
  cin >> n;
  for (int i = 1; i < n; i++) {
    int u, v;
    cin >> u >> v;
    g[v].push_back(u);
    g[u].push_back(v);
    deg[u]++;
    deg[v]++;
  }
  for (int i = 1; i <= n; i++)
    if (deg[i] == 1 && i != 1) k++;
  par[1] = -1;
  dfs(1, 1);
  for (int i = 0; i < k; i++) {
    int u;
    cin >> u;
    q.push_back(u);
    while (1) {
      if (u == 1) break;
      gp[par[u]].push_back(u);
      u = par[u];
    }
  }
  dfsO(1);
  for (int i = 0; i < k; i++)
    if (lf[i] != q[i]) return cout << -1 << endl, 0;
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << ' ';
  return 0;
}
