#include <bits/stdc++.h>
using namespace std;
const int Maxn = 300 + 5;
int n, leaf[Maxn], par[Maxn], nlf;
vector<int> adj[Maxn], chld[Maxn], lf, ans;
bool mark[Maxn], adjj[Maxn][Maxn];
void dfs2(int v) {
  ans.push_back(v);
  if ((int)chld[v].size() == 0) lf.push_back(v);
  for (int i = 0; i < (int)chld[v].size(); i++) {
    dfs2(chld[v][i]);
    ans.push_back(v);
  }
}
void pp(int v) {
  if (v == 0) return;
  if (!adjj[par[v]][v]) {
    chld[par[v]].push_back(v);
    adjj[par[v]][v] = true;
    pp(par[v]);
  }
  return;
}
void dfs(int v) {
  mark[v] = true;
  if ((int)adj[v].size() == 1 && v != 0) nlf++;
  for (int i = 0; i < (int)adj[v].size(); i++) {
    if (!mark[adj[v][i]]) {
      par[adj[v][i]] = v;
      dfs(adj[v][i]);
    }
  }
  return;
}
int main() {
  cin >> n;
  int a, b;
  for (int i = 0; i < n - 1; i++) {
    cin >> a >> b;
    a--;
    b--;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  dfs(0);
  for (int i = 0; i < nlf; i++) {
    cin >> leaf[i];
    leaf[i]--;
    pp(leaf[i]);
  }
  dfs2(0);
  for (int i = 0; i < nlf; i++)
    if (leaf[i] != lf[i]) {
      cout << -1 << endl;
      return 0;
    }
  for (int i = 0; i < (int)ans.size(); i++) cout << ans[i] + 1 << " ";
  cout << endl;
  return 0;
}
