#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 9;
vector<int> gr[N], ans[2], ar, rans;
int n, u, v, io[N], hash[N], cnt[N], k;
bool flag;
bool dfs(int node, int come, int tar, int ind) {
  if (node == tar) {
    flag = true;
    return true;
  }
  for (int i = 0; i < gr[node].size(); i++) {
    if (flag == true) break;
    if (gr[node][i] != come) {
      bool def = dfs(gr[node][i], node, tar, ind);
      if (def) {
        ans[ind].push_back(gr[node][i]);
        break;
      }
    }
  }
  return flag;
}
int main() {
  cin >> n;
  for (int i = 1; i < n; i++) {
    cin >> u >> v;
    gr[u].push_back(v);
    gr[v].push_back(u);
    io[v]++, io[u]++;
  }
  for (int i = 2; i <= n; i++)
    if (io[i] == 1) k++;
  for (int i = 1; i <= k; i++) {
    cin >> u;
    ar.push_back(u);
  }
  for (int i = 1; i < ar.size(); i++) {
    ans[1].clear();
    dfs(ar[i - 1], -1, ar[i], 1);
    if (flag == false) {
      cout << -1 << endl;
      return 0;
    }
    reverse(ans[1].begin(), ans[1].end());
    for (int i = 0; i < ans[1].size(); i++) rans.push_back(ans[1][i]);
    flag = false;
  }
  ans[1].clear();
  dfs(ar.back(), -1, 1, 1);
  reverse(ans[1].begin(), ans[1].end());
  for (int i = 0; i < ans[1].size(); i++) rans.push_back(ans[1][i]);
  flag = false;
  dfs(1, -1, ar[0], 0);
  ans[0].push_back(1);
  reverse(ans[0].begin(), ans[0].end());
  if (ans[0].size() + rans.size() != n * 2 - 1) {
    cout << -1 << endl;
    return 0;
  }
  for (int i = 0; i < ans[0].size(); i++) cout << ans[0][i] << " ";
  for (int i = 0; i < rans.size(); i++) cout << rans[i] << " ";
  return 0;
}
