#include <bits/stdc++.h>
using namespace std;
long long n, m = 0, curr = 1, pare[305];
vector<vector<long long> > g(305);
bool ava[305][305];
vector<long long> ans;
void pre() {}
void solve() {}
void DFS(long long x, long long p) {
  ava[x][x] = 1;
  long long child = 0;
  pare[x] = p;
  for (auto X : g[x]) {
    if (X != p) {
      child++;
      DFS(X, x);
      for (long long int i = 1; i <= n; i++) {
        ava[x][i] = (ava[x][i] || ava[X][i]);
      }
    }
  }
  m += (child == 0);
}
void get(long long x) {
  if (curr == x) {
    return;
  }
  while (!ava[curr][x]) {
    ans.push_back(pare[curr]);
    curr = pare[curr];
  }
  for (auto X : g[curr]) {
    if (ava[X][x] && X != pare[curr]) {
      curr = X;
      ans.push_back(X);
      get(x);
      return;
    }
  }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  pre();
  long long a[305], j = 1;
  cin >> n;
  for (long long int i = 1; i < n; i++) {
    long long x, y;
    cin >> x >> y;
    g[x].push_back(y);
    g[y].push_back(x);
  }
  memset(ava, false, sizeof(ava));
  DFS(1, 0);
  for (long long int i = 1; i <= m; i++) cin >> a[i];
  ans.push_back(1);
  for (long long int i = 1; i <= m; i++) {
    get(a[i]);
  }
  while (1) {
    curr = pare[curr];
    if (curr == 0) {
      break;
    }
    ans.push_back(curr);
  }
  if (ans.size() != ((2 * n) - 1)) {
    cout << "-1\n";
    ans.clear();
  }
  for (auto X : ans) cout << X << " ";
  cout << "\n";
}
