#include <bits/stdc++.h>
using namespace std;
const int maxn = 310;
bool vis[maxn];
int tin[maxn];
int tout[maxn];
int timer = 0;
int target = 0;
vector<int> G[maxn];
vector<int> leafs;
vector<int> ans;
bool is_ancestor(int a, int b) {
  return tin[a] <= tin[b] and tout[b] <= tout[a];
}
void dfs_for_order(int u) {
  if (vis[u]) return;
  vis[u] = true;
  tin[u] = timer;
  timer++;
  for (int v : G[u]) dfs_for_order(v);
  tout[u] = timer;
  timer++;
}
void main_dfs(int u) {
  if (target >= leafs.size()) {
    return;
  }
  ans.push_back(u);
  if (u == leafs[target]) {
    target++;
    return;
  }
  bool running = true;
  while (running) {
    running = false;
    for (int v : G[u]) {
      if (!is_ancestor(v, u)) {
        if (is_ancestor(v, leafs[target])) {
          main_dfs(v);
          ans.push_back(u);
          running = true;
          if (target >= leafs.size()) {
            return;
          }
        }
      }
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  for (int i = 1; i < n; i++) {
    int x, y;
    cin >> x >> y;
    G[x].push_back(y);
    G[y].push_back(x);
  }
  int tmp;
  while (cin >> tmp) leafs.push_back(tmp);
  dfs_for_order(1);
  memset(vis, false, sizeof vis);
  main_dfs(1);
  if (ans.size() == 2 * n - 1) {
    for (int x : ans) {
      cout << x << " ";
    }
    cout << endl;
  } else {
    cout << -1 << endl;
  }
  return 0;
}
