#include <bits/stdc++.h>
using namespace std;
int n;
vector<vector<int> > g;
vector<int> v, sol;
vector<pair<int, int> > at[300];
vector<pair<int, int> > DFS(int u, int p) {
  bool leaf = true;
  for (int i = 0; i < g[u].size(); ++i)
    if (g[u][i] != p) {
      vector<pair<int, int> > ret = DFS(g[u][i], u);
      leaf = false;
      for (int j = 0; j < ret.size(); ++j) {
        at[u].push_back(ret[j]);
        at[u].back().second = i;
      }
    }
  if (leaf) at[u].push_back(make_pair(u, 0));
  return at[u];
}
bool done[300];
void DFS(int u) {
  sol.push_back(u);
  if (u != 0 && g[u].size() == 1) {
    if (v.back() == u) v.pop_back();
    done[u] = true;
    return;
  }
  while (!v.empty()) {
    int x = lower_bound(at[u].begin(), at[u].end(), make_pair(v.back(), -1)) -
            at[u].begin();
    if (x == at[u].size() || at[u][x].first != v.back()) break;
    DFS(g[u][at[u][x].second]);
    sol.push_back(u);
    at[u].erase(at[u].begin() + x);
  }
  while (!at[u].empty()) {
    if (!done[at[u].back().first]) {
      done[at[u].back().first] = true;
      DFS(g[u][at[u].back().second]);
      sol.push_back(u);
    }
    at[u].pop_back();
  }
}
int main() {
  scanf("%d", &n);
  g.resize(n);
  for (int i = 1, a, b; i < n; ++i) {
    scanf("%d%d", &a, &b);
    --a;
    --b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  int x;
  while (scanf("%d", &x) == 1) v.push_back(x - 1);
  reverse(v.begin(), v.end());
  DFS(0, -1);
  for (int i = 0; i < n; ++i) sort(at[i].begin(), at[i].end());
  DFS(0);
  map<int, int> freq;
  for (int i = 0; i + 1 < sol.size(); ++i) {
    int x = sol[i];
    int y = sol[i + 1];
    if (x > y) swap(x, y);
    ++freq[x * n + y];
  }
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < g[i].size(); ++j) {
      int x = i;
      int y = g[i][j];
      if (x > y) swap(x, y);
      if (freq[x * n + y] != 2) {
        puts("-1");
        return 0;
      }
    }
  for (int i = 0; i < sol.size(); ++i) printf("%s%d", i ? " " : "", sol[i] + 1);
  return 0;
}
