#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void gmin(T &a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void gmax(T &a, T b) {
  if (a < b) a = b;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
const int N = 310;
int n;
bool vis[N];
vector<int> anc[N], lnk[N], lf;
void myin() {
  int i, a, b;
  cin >> n;
  for (i = 1; i <= n - 1; i++) {
    cin >> a >> b;
    a--, b--;
    lnk[a].push_back(b), lnk[b].push_back(a);
  }
}
int fth[N];
void pre_dfs(int now, int ff) {
  int i;
  fth[now] = ff;
  for (i = 0; i < lnk[now].size(); i++)
    if (lnk[now][i] != ff) pre_dfs(lnk[now][i], now);
}
vector<int> ans;
int lp;
bool lab;
void dfs(int now) {
  int i, tn = lnk[now].size(), next;
  vis[now] = true;
  ans.push_back(now);
  if (now == lf[lp]) lp++;
  while (tn--) {
    for (i = 0; i < lnk[now].size(); i++) {
      next = lnk[now][i];
      if (!vis[next] &&
          binary_search(anc[lf[lp]].begin(), anc[lf[lp]].end(), next))
        break;
    }
    if (i >= lnk[now].size()) {
      lab = false;
      return;
    }
    dfs(next);
    ans.push_back(now);
  }
}
void work() {
  int tt;
  pre_dfs(0, -1);
  while (cin >> tt) {
    tt--;
    lf.push_back(tt);
    for (; tt != -1; tt = fth[tt]) anc[lf.back()].push_back(tt);
    sort(anc[lf.back()].begin(), anc[lf.back()].end());
  }
  memset(vis, 0, sizeof(vis));
  lp = 0;
  lab = true;
  for (int i = 0; i < n; i++)
    for (vector<int>::iterator itr = lnk[i].begin(); itr != lnk[i].end(); itr++)
      if (*itr == fth[i]) {
        lnk[i].erase(itr);
        break;
      }
  dfs(0);
}
void myout() {
  if (lab) {
    for (int i = 0; i < ans.size(); i++) cout << ans[i] + 1 << " ";
    cout << endl;
  } else
    cout << -1 << endl;
}
int main() {
  myin();
  work();
  myout();
  return 0;
}
