#include <bits/stdc++.h>
using namespace std;
const int N = 1.1e5;
int n, m;
vector<int> a[N];
int l[N], r[N];
void dfs1(int v, int f) {
  int p = 0;
  for (int x : a[v])
    if (x != f) {
      ++p;
      dfs1(x, v);
    }
  if (!p) ++m;
}
bool dfs2(int v, int f) {
  l[v] = l[v] ? l[v] : N;
  for (int x : a[v])
    if (x != f) {
      if (!dfs2(x, v)) return false;
      l[v] = min(l[v], l[x]);
      r[v] = max(r[v], r[x]);
    }
  for (int i = 0; i < a[v].size(); ++i) {
    if (a[v][i] == f) {
      a[v][i] = *a[v].rbegin();
      a[v].pop_back();
      break;
    }
  }
  sort(a[v].begin(), a[v].end(), [&](int x, int y) { return l[x] < l[y]; });
  for (int i = 1; i < a[v].size(); ++i) {
    if (r[a[v][i - 1]] >= l[a[v][i]]) return false;
  }
  return true;
}
void dfs3(int v, int f) {
  if (f) printf(" ");
  printf("%d", v);
  for (int x : a[v])
    if (x != f) {
      dfs3(x, v);
      printf(" %d", v);
    }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    a[x].push_back(y);
    a[y].push_back(x);
  }
  dfs1(1, 0);
  for (int i = 0; i < m; ++i) {
    int x;
    scanf("%d", &x);
    l[x] = r[x] = i + 1;
  }
  if (!dfs2(1, 0)) {
    puts("-1");
    return 0;
  }
  dfs3(1, 0);
  puts("");
}
