#include <bits/stdc++.h>
using namespace std;
vector<int> adj[400];
vector<int> tt[400];
int t[400];
int mi[400];
int ma[400];
int r[400];
bool mark[400];
bool b[400];
int parent[400];
void dfs3(int v) {
  cout << v << " ";
  if (b[v] == 1) {
    return;
  } else {
    for (int i = mi[v]; i <= ma[v]; i++) {
      for (int j = 0; j < (int)adj[v].size(); j++) {
        if (adj[v][j] != parent[v] && mi[adj[v][j]] == i) {
          dfs3(adj[v][j]);
          cout << v << " ";
        }
      }
    }
  }
}
bool check = 0;
bool dfs2(int v) {
  if (b[v] == 1) {
    r[t[v]]++;
    return 1;
  }
  for (int i = mi[v]; i <= ma[v]; i++) {
    r[i] = 0;
  }
  for (int i = 0; i < (int)adj[v].size(); i++) {
    if (adj[v][i] != parent[v]) dfs2(adj[v][i]);
    if (check == true) return 0;
  }
  for (int i = mi[v]; i <= ma[v]; i++) {
    if (r[i] == 0) {
      check = 1;
    }
  }
  if (check == 0) {
    return 1;
  } else
    return 0;
}
void dfs(int v) {
  mark[v] = 1;
  for (int i = 0; i < (int)adj[v].size(); i++) {
    if (mark[adj[v][i]] == 0) {
      parent[adj[v][i]] = v;
      dfs(adj[v][i]);
      ma[v] = max(ma[v], ma[adj[v][i]]);
      mi[v] = min(mi[v], mi[adj[v][i]]);
    }
  }
}
int main() {
  int n, k = 0;
  cin >> n;
  int a, d;
  for (int i = 0; i < n - 1; i++) {
    cin >> a >> d;
    adj[a].push_back(d);
    adj[d].push_back(a);
  }
  for (int i = 2; i <= n; i++) {
    if ((int)adj[i].size() == 1) {
      k++;
      b[i] = true;
    }
  }
  int x;
  for (int i = 0; i < 400; i++) {
    mi[i] = 1010;
  }
  for (int i = 0; i < k; i++) {
    cin >> x;
    t[x] = i;
    ma[x] = i;
    mi[x] = i;
  }
  dfs(1);
  for (int i = 0; i <= n; i++) mark[i] = 0;
  int check2 = dfs2(1);
  if (check2 == 0) {
    cout << -1;
    cout << endl;
    return 0;
  }
  dfs3(1);
  return 0;
}
