#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:20000000")
string problem_name = "a";
void init() { freopen((problem_name + ".in").c_str(), "rt", stdin); }
int n;
vector<int> mas[333];
int ad[333][333];
int dfs(int v, int pred) {
  for (int i = 0; i < int((mas[v]).size()); i++)
    if (mas[v][i] != pred) {
      ad[v][mas[v][i]] = 1;
      dfs(mas[v][i], v);
    }
  return 0;
}
int ord[333];
vector<int> res;
int pos = 0;
int go(int v, int pred) {
  if (ord[pos] == 0) return 0;
  res.push_back(v);
  if (v == ord[pos]) {
    pos++;
    return 0;
  }
  for (int i = 0; i < int((mas[v]).size()); i++)
    if (mas[v][i] != pred)
      if (ad[mas[v][i]][ord[pos]]) {
        if (ord[pos] == 0) return 0;
        go(mas[v][i], v);
        i = -1;
        res.push_back(v);
      }
}
int main() {
  scanf("%d", &n);
  int a, b;
  for (int i = 1; i <= n; i++) ad[i][i] = 1;
  for (int i = 0; i < n - 1; i++) {
    scanf("%d%d\n", &a, &b);
    mas[a].push_back(b);
    mas[b].push_back(a);
  }
  int p = 0;
  while (scanf("%d", &a) != EOF) ord[p++] = a;
  dfs(1, -1);
  for (int k = 1; k <= n; k++)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++) ad[i][j] |= ad[i][k] & ad[k][j];
  go(1, -1);
  if (int((res).size()) == 2 * n - 1) {
    for (int i = 0; i < int((res).size()); i++) printf("%d ", res[i]);
  } else
    printf("-1\n");
  return 0;
}
