#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3;
int n, mark[maxn], cnt[maxn], u, v, k, a[maxn], flg;
vector<int> g[maxn], ans;
deque<int> dq;
void cntleaf(int w) {
  if (g[w].size() == 1 && mark[g[w][0]]) k++;
  mark[w] = 1;
  for (int i = 0; i < g[w].size(); i++) {
    if (!mark[g[w][i]]) cntleaf(g[w][i]);
  }
}
void dfs(int w, int s) {
  mark[w] = 1;
  dq.push_back(w);
  if (w == s) {
    for (int i = 1; i < dq.size(); i++) {
      ans.push_back(dq[i]);
      cnt[dq[i]]++;
    }
  } else {
    for (int i = 0; i < g[w].size(); i++) {
      if (!mark[g[w][i]]) dfs(g[w][i], s);
    }
  }
  dq.pop_back();
}
int main() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    cin >> v >> u;
    g[v].push_back(u);
    g[u].push_back(v);
  }
  cntleaf(1);
  a[0] = 1;
  ans.push_back(1);
  for (int i = 1; i <= k; i++) cin >> a[i];
  a[k + 1] = 1;
  for (int i = 0; i <= k; i++) {
    memset(mark, 0, sizeof mark);
    dfs(a[i], a[i + 1]);
  }
  for (int i = 1; i <= n; i++) {
    if (cnt[i] > g[i].size()) flg = 1;
  }
  if (flg)
    cout << -1;
  else {
    for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
  }
}
