#include <bits/stdc++.h>
using namespace std;
int n;
bool vis[400];
set<int> sub[400];
vector<int> ga[400];
vector<int> path;
vector<int> ord;
int curr;
void DFS(int a) {
  sub[a].insert(a);
  for (int i = 0; i < ga[a].size(); i++) {
    int b = ga[a][i];
    if (vis[b]) continue;
    vis[b] = true;
    DFS(b);
    for (__typeof(sub[b].begin()) it = sub[b].begin(); it != sub[b].end(); it++)
      sub[a].insert(*it);
  }
}
void SFD(int a) {
  if (ord[curr] == a) {
    curr++;
    return;
  }
  while (1) {
    if (curr == ord.size()) return;
    bool upd = false;
    for (int i = 0; i < ga[a].size(); i++) {
      int b = ga[a][i];
      if (vis[b] || sub[b].find(ord[curr]) == sub[b].end()) continue;
      vis[b] = true;
      path.push_back(b);
      SFD(b);
      path.push_back(a);
      upd = true;
      break;
    }
    if (!upd) return;
  }
}
int main() {
  cin >> n;
  for (int i = 1; i < n; i++) {
    int a, b;
    cin >> a >> b;
    ga[a].push_back(b);
    ga[b].push_back(a);
  }
  int x;
  while (cin >> x) ord.push_back(x);
  vis[1] = true;
  DFS(1);
  memset(vis, false, sizeof(vis));
  path.push_back(1);
  vis[1] = true;
  SFD(1);
  if (path.size() != n * 2 - 1)
    cout << -1;
  else {
    for (int i = 0; i < path.size(); i++) cout << path[i] << ' ';
  }
  return 0;
}
