#include <bits/stdc++.h>
using namespace std;
struct Node {
  int b, rank;
  Node() {}
  Node(int b, int rank) : b(b), rank(rank) {}
};
int ind, vis[300 + 5], N, VIP[300 + 5], n, x, y;
vector<int> ans, vip;
vector<Node> adj[300 + 5];
bool cmp(Node a, Node b) {
  if (a.rank != b.rank) return a.rank < b.rank;
  return a.b < b.b;
}
int Sorto(int node, int parent) {
  int Sz = adj[node].size(), ans = 1 << 30;
  if (VIP[node]) ans = VIP[node];
  for (int i = 0; i < Sz; i++) {
    if (adj[node][i].b == parent) continue;
    adj[node][i].rank = Sorto(adj[node][i].b, node);
    ans = min(ans, adj[node][i].rank);
  }
  return ans;
}
bool dfs(int node, int parent) {
  if (VIP[node] && ind < N && vip[ind] != node) return 0;
  if (ind < N && vip[ind] == node) ind++;
  ans.push_back(node);
  int Sz = adj[node].size();
  bool f = 1;
  for (int i = 0; i < Sz; i++) {
    if (adj[node][i].b == parent) continue;
    if (dfs(adj[node][i].b, node))
      ans.push_back(node);
    else
      f = 0;
  }
  return f;
}
int main() {
  int a, b;
  ind = N = 0;
  scanf("%d", &n);
  for (int i = 0; i < n - 1; i++) {
    scanf("%d %d", &a, &b);
    adj[a].push_back(Node(b, 1 << 30));
    adj[b].push_back(Node(a, 1 << 30));
    if (!i) x = a, y = b;
  }
  while (scanf("%d", &a) != EOF) {
    if (a > n) continue;
    VIP[a] = N + 1;
    vip.push_back(a);
    N++;
  }
  Sorto(1, 0);
  for (int i = 1; i < n + 1; i++) sort(adj[i].begin(), adj[i].end(), cmp);
  if (dfs(1, 0) && ind >= N) {
    int Sz = ans.size();
    for (int i = 0; i < Sz; i++) printf("%d ", ans[i]);
    printf("\n");
  } else
    printf("-1\n");
  return 0;
}
