#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-ffloat-store")
#pragma GCC optimize("-fno-defer-pop")
long long int power(long long int a, long long int b, long long int m) {
  if (b == 0) return 1;
  if (b == 1) return a % m;
  long long int t = power(a, b / 2, m) % m;
  t = (t * t) % m;
  if (b & 1) t = ((t % m) * (a % m)) % m;
  return t;
}
long long int modInverse(long long int a, long long int m) {
  return power(a, m - 2, m);
}
long long int n, depth[305], pa[305], lvs;
vector<long long int> vc[305];
void dfs(long long int i, long long int par, long long int dp) {
  pa[i] = par;
  depth[i] = dp;
  long long int j, k = 0;
  for (j = 0; j < vc[i].size(); j++) {
    if (vc[i][j] != par) {
      k += 1;
      dfs(vc[i][j], i, dp + 1);
    }
  }
  if (k == 0) lvs += 1;
}
long long int lca(long long int u, long long int v) {
  if (depth[u] < depth[v]) swap(u, v);
  while (depth[u] > depth[v]) {
    u = pa[u];
  }
  while (u != v) {
    u = pa[u];
    v = pa[v];
  }
  return u;
}
vector<long long int> tr;
long long int ff;
void path(long long int i, long long int par, vector<long long int> cv,
          long long int d) {
  if (ff) return;
  if (i == d) {
    tr = cv;
    ff = 1;
    return;
  }
  long long int j;
  for (j = 0; j < vc[i].size(); j++) {
    if (vc[i][j] != par) {
      cv.push_back(vc[i][j]);
      path(vc[i][j], i, cv, d);
      cv.pop_back();
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int i, j, k, l;
  cin >> n;
  for (i = 1; i < n; i++) {
    cin >> k >> l;
    vc[k].push_back(l);
    vc[l].push_back(k);
  }
  dfs(1, 1, 0);
  vector<long long int> lvv;
  for (i = 0; i < lvs; i++) {
    cin >> k;
    lvv.push_back(k);
  }
  long long int pp = 1;
  vector<long long int> an;
  stack<long long int> st;
  st.push(1);
  for (i = 0; i < lvv.size(); i++) {
    k = lca(pp, lvv[i]);
    while (st.top() != k) {
      if (st.top() == an.back()) {
        st.pop();
        continue;
      }
      an.push_back(st.top());
      st.pop();
    }
    tr.clear();
    ff = 0;
    vector<long long int> cv;
    cv.push_back(k);
    path(k, k, cv, lvv[i]);
    for (j = 0; j < tr.size(); j++) {
      an.push_back(tr[j]);
    }
    for (j = 0; j < tr.size() - 1; j++) {
      st.push(tr[j]);
    }
    pp = lvv[i];
  }
  while (st.size() > 0 && st.top() != 1) {
    if (st.top() == an.back()) {
      st.pop();
      continue;
    }
    an.push_back(st.top());
    st.pop();
  }
  an.push_back(1);
  if (an.size() > (2 * n - 1)) {
    cout << "-1";
    return 0;
  }
  for (i = 0; i < an.size(); i++) {
    cout << an[i] << " ";
  }
  return 0;
}
