#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
int n;
int used[310][310];
vector<int> vt[310];
vector<int> solve(int s, int t);
int main() {
  int u, v;
  vector<int> order, tmp, ans;
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    scanf("%d %d", &u, &v);
    vt[u].push_back(v);
    vt[v].push_back(u);
  }
  while (scanf("%d", &u) != EOF) order.push_back(u);
  order.push_back(1);
  int s = 1, t = 1;
  for (int i = 0; i < (int)order.size(); i++) {
    s = t;
    t = order[i];
    tmp = solve(s, t);
    for (int i = (int)tmp.size() - 1; i > 0; i--) {
      used[tmp[i]][tmp[i - 1]]++;
      used[tmp[i - 1]][tmp[i]]++;
      if (used[tmp[i]][tmp[i - 1]] > 2) {
        printf("-1\n");
        return 0;
      }
      ans.push_back(tmp[i]);
    }
  }
  for (int i = 0; i < (int)ans.size(); i++) printf("%d ", ans[i]);
  printf("1\n");
  return 0;
}
vector<int> solve(int s, int t) {
  bool f[310] = {0};
  int father[310];
  queue<int> que;
  vector<int> res;
  for (int i = 1; i <= n; i++) father[i] = i;
  f[s] = 1;
  que.push(s);
  while (!que.empty()) {
    int tt = que.front();
    que.pop();
    for (int i = 0; i < (int)vt[tt].size(); i++) {
      int tmp = vt[tt][i];
      if (!f[tmp]) {
        father[tmp] = tt;
        que.push(tmp);
        f[tmp] = 1;
      }
    }
  }
  while (father[t] != t) {
    res.push_back(t);
    t = father[t];
  }
  res.push_back(t);
  return res;
}
