#include <bits/stdc++.h>
template <typename T>
void mymax(T &a, T b) {
  if (a < b) a = b;
}
template <typename T>
void mymin(T &a, T b) {
  if (a > b) a = b;
}
using namespace std;
int n;
vector<int> e[304];
set<int> cont[304];
void update(int pos, int from) {
  for (set<int>::iterator it = cont[from].begin(); it != cont[from].end(); it++)
    cont[pos].insert(*it);
}
void init(int pos, int fa) {
  for (unsigned int i = 0; i < e[pos].size(); i++)
    if (e[pos][i] != fa) {
      init(e[pos][i], pos);
      update(pos, e[pos][i]);
    }
  if (e[pos].size() == 1) cont[pos].insert(pos);
}
vector<int> ans;
int needtoclimb[304];
int deal_now = 1, top;
void dfs(int pos, int fa) {
  if (needtoclimb[deal_now] == pos) deal_now++;
  bool ok[304];
  memset(ok, 0, sizeof(ok));
  ans.push_back(pos);
  while (deal_now <= top) {
    unsigned int i;
    for (i = 0; i < e[pos].size(); i++)
      if (!ok[i] && e[pos][i] != fa)
        if (cont[e[pos][i]].find(needtoclimb[deal_now]) !=
            cont[e[pos][i]].end())
          break;
    if (i < e[pos].size()) {
      ok[i] = 1;
      dfs(e[pos][i], pos);
      ans.push_back(pos);
      if ((int)ans.size() >= 2 * n) {
        printf("-1\n");
        exit(0);
      }
    } else {
      break;
    }
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    e[a].push_back(b);
    e[b].push_back(a);
  }
  init(1, -1);
  top = 0;
  while (scanf("%d", &needtoclimb[++top]) != EOF)
    ;
  top--;
  dfs(1, -1);
  if ((int)ans.size() != 2 * n - 1)
    printf("-1\n");
  else {
    for (int i = 0; i < 2 * n - 1; i++) printf("%d ", ans[i]);
  }
  return 0;
}
