#include <bits/stdc++.h>
using namespace std;
int n;
const int Mn = 300 + 10;
vector<int> adj[Mn];
vector<int> kid[Mn];
vector<int> res;
bool mark[Mn];
int leaf, l[Mn];
int par[Mn];
void dfs(int x) {
  mark[x] = true;
  for (int i = 0; i < adj[x].size(); i++) {
    int y = adj[x][i];
    if (!mark[y]) {
      dfs(y);
      par[y] = x;
      for (int j = 0; j < kid[y].size(); j++) kid[x].push_back(kid[y][j]);
    }
  }
  if (x != 0 && adj[x].size() == 1) kid[x].push_back(x);
}
int where = 0;
bool shamel(int x, int y) {
  for (int i = 0; i < kid[x].size(); i++)
    if (kid[x][i] == y) return true;
  return false;
}
void rah(int x) {
  mark[x] = true;
  if (x == l[where]) where++;
  res.push_back(x);
  for (int i = 0; i < adj[x].size(); i++) {
    int y = adj[x][i];
    if (!mark[y] && shamel(y, l[where])) {
      rah(y);
      i = -1;
    }
  }
  if (x != 0) res.push_back(par[x]);
}
int main() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int x, y;
    cin >> x >> y;
    x--;
    y--;
    adj[x].push_back(y);
    adj[y].push_back(x);
  }
  for (int i = 1; i < n; i++)
    if (adj[i].size() == 1) leaf++;
  for (int i = 0; i < leaf; i++) {
    cin >> l[i];
    l[i]--;
  }
  dfs(0);
  memset(mark, 0, sizeof mark);
  rah(0);
  if (where != leaf)
    cout << -1 << endl;
  else
    for (int i = 0; i < res.size(); i++) cout << res[i] + 1 << ' ';
}
