#include <bits/stdc++.h>
using namespace std;
int degree[301];
vector<int> adj[301];
vector<int> order, ans;
int vis[301], in[301], out[301];
int timer = 1;
int k = 0;
void dfs(int node) {
  vis[node] = 1;
  in[node] = timer;
  timer++;
  for (int i = 0; i < adj[node].size(); i++) {
    if (vis[adj[node][i]] == 0) dfs(adj[node][i]);
  }
  out[node] = timer;
  timer++;
}
void path(int node) {
  vis[node] = 1;
  if (node == order[k]) {
    k++;
    if (k == order.size()) k = order.size() - 1;
  }
  for (int i = 0; i < adj[node].size(); i++) {
    if (vis[adj[node][i]] == 0 && in[order[k]] >= in[adj[node][i]] &&
        out[order[k]] <= out[adj[node][i]]) {
      ans.push_back(adj[node][i]);
      path(adj[node][i]);
      ans.push_back(node);
      i = -1;
    }
  }
}
int main() {
  int u, v, n, i, j, cnt, p;
  cin >> n;
  for (i = 0; i < n - 1; i++) {
    cin >> u >> v;
    adj[u].push_back(v);
    adj[v].push_back(u);
    degree[u]++;
    degree[v]++;
  }
  cnt = 0;
  for (i = 1; i <= n; i++)
    if (degree[i] == 1) cnt++;
  if (degree[1] == 1) cnt--;
  for (i = 0; i < cnt; i++) {
    cin >> p;
    order.push_back(p);
  }
  dfs(1);
  for (i = 1; i <= n; i++) vis[i] = 0;
  ans.push_back(1);
  path(1);
  for (i = 0; i < order.size(); i++)
    if (vis[order[i]] == 0) break;
  if (i == order.size())
    for (i = 0; i < ans.size(); i++) cout << ans[i] << " ";
  else
    cout << "-1";
  return 0;
}
