#include <bits/stdc++.h>
using namespace std;
const int Maxn = 3e2 + 10;
bool mark[Maxn][Maxn], vis;
vector<int> nei[Maxn], path, ans;
int n, k, l[Maxn];
void find_k(int v, int w) {
  for (int u : nei[v])
    if (u != w) find_k(u, v);
  if (nei[v].size() == 1 && nei[v][0] == w) k++;
}
bool dfs(int v, int h, int w) {
  bool r = false;
  for (int u : nei[v])
    if (u != w) r |= dfs(u, h, v);
  if (v == h) r = true;
  if (r) path.push_back(v);
  return r;
}
int main() {
  cin >> n;
  for (int i = 0, a, b; i < n - 1; i++) {
    cin >> a >> b, a--, b--;
    nei[a].push_back(b);
    nei[b].push_back(a);
  }
  find_k(0, -1);
  l[0] = 0, ans.push_back(0);
  for (int i = 1; i <= k + 1; i++) {
    if (i <= k)
      cin >> l[i], l[i]--;
    else
      l[i] = 0;
    dfs(l[i], l[i - 1], -1);
    for (int p : path)
      if (p != l[i - 1]) ans.push_back(p);
    path.clear(), vis = false;
  }
  if (ans.size() != 2 * n - 1) {
    cout << -1;
    return 0;
  }
  for (int i = 1; i < ans.size(); i++) {
    if (mark[ans[i - 1]][ans[i]]) {
      cout << -1;
      return 0;
    }
    mark[ans[i - 1]][ans[i]] = true;
  }
  for (int a : ans) cout << a + 1 << " ";
}
