#include <bits/stdc++.h>
using namespace std;
const long long nax = 3e2 + 1;
vector<long long> g[nax], tin(nax, 0), tout(nax, 0), par(nax, 0);
signed main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  ;
  long long n;
  cin >> n;
  for (long long i = 0; i < n - 1; i++) {
    long long u, v;
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  long long t = 0;
  long long leaf_cnt = 0;
  function<void(long long, long long)> dfs = [&](long long v, long long p) {
    tin[v] = ++t;
    par[v] = p;
    for (auto &u : g[v]) {
      if (u != p) dfs(u, v);
    }
    if (tin[v] == t) leaf_cnt++;
    tout[v] = t;
    return;
  };
  dfs(1, 0);
  vector<long long> travel_node;
  function<void(long long, long long)> dfs_up = [&](long long v, long long x) {
    travel_node.push_back(v);
    if (!(tin[v] <= x && tout[v] >= x)) dfs_up(par[v], x);
    return;
  };
  function<void(long long, long long, long long)> dfs_down =
      [&](long long v, long long p, long long x) {
        for (auto &u : g[v]) {
          if (u != p) {
            if (tin[u] <= x && tout[u] >= x) {
              travel_node.push_back(u);
              dfs_down(u, v, x);
              break;
            }
          }
        }
        return;
      };
  travel_node.push_back(1);
  long long x;
  cin >> x;
  long long cur = travel_node.back();
  dfs_down(cur, par[cur], tin[x]);
  for (long long i = 1; i < leaf_cnt; i++) {
    cin >> x;
    cur = travel_node.back();
    dfs_up(par[cur], tin[x]);
    cur = travel_node.back();
    dfs_down(cur, par[cur], tin[x]);
  }
  while (travel_node.back() != 1)
    travel_node.push_back(par[travel_node.back()]);
  if ((long long)(travel_node.size()) == 2 * n - 1) {
    for (auto &u : travel_node) cout << u << " ";
  } else
    cout << "-1";
}
