#include <bits/stdc++.h>
using namespace std;
const int INF = 2e9 + 10;
stack<int> st;
vector<int> ans;
int fa[310], cnt, head[310], tot, is_ansis[310], leaf[310], n;
struct Edge {
  int to, nxt;
} ed[620];
void Add_edge(int a, int b) {
  ed[++cnt].to = b;
  ed[cnt].nxt = head[a];
  head[a] = cnt;
}
void dfs() {
  ans.push_back(1);
  st.push(1);
  for (int k = 1; k < tot; k++) {
    int u = leaf[k];
    while (u != -1) {
      is_ansis[u] = k;
      u = fa[u];
    }
    u = st.top();
    while (is_ansis[st.top()] != k) {
      st.pop();
      ans.push_back(st.top());
      u = fa[u];
    }
    while (u != leaf[k]) {
      for (int j = head[u]; j != -1; j = ed[j].nxt) {
        int v = ed[j].to;
        if (v != fa[u] && is_ansis[v] == k) {
          u = v;
          st.push(v);
          ans.push_back(v);
          break;
        }
      }
    }
  }
  while (!st.empty()) {
    st.pop();
    if (!st.empty()) ans.push_back(st.top());
  }
}
void build_tree(int u, int p = -1) {
  fa[u] = p;
  for (int i = head[u]; i != -1; i = ed[i].nxt) {
    int v = ed[i].to;
    if (v == p) continue;
    build_tree(v, u);
  }
}
int main() {
  memset(head, -1, sizeof(head));
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int fr, to;
    scanf("%d %d", &fr, &to);
    Add_edge(fr, to);
    Add_edge(to, fr);
  }
  build_tree(1);
  while (scanf("%d", &leaf[++tot]) != EOF)
    ;
  dfs();
  if (ans.size() != 2 * n - 1)
    printf("-1");
  else
    for (int i = 0; i < 2 * n - 1; i++) printf("%d ", ans[i]);
  puts("");
  return 0;
}
