#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAXN = 1000005;
vector<int> G[MAXN];
int par[MAXN], vis[MAXN], n;
bool instack[MAXN];
int cnt = 0;
vector<int> E[MAXN];
stack<int> S;
void _dfs(int i, int fa) {
  par[i] = fa;
  for (int v : G[i]) {
    if (v == fa) continue;
    _dfs(v, i);
  }
}
void gao(int i) {
  stack<int> Q;
  int p = par[i];
  if (p != -1) E[p].push_back(i);
  Q.push(i);
  while (p != -1 && !instack[p] && !vis[p]) {
    i = p;
    p = par[i];
    if (p != -1) E[p].push_back(i);
    Q.push(i);
  }
  if (p != -1 && vis[p] && !instack[p]) exit(0 * puts("-1"));
  while (!S.empty() && S.top() != p) {
    instack[S.top()] = false, S.pop();
  }
  while (!Q.empty()) {
    S.push(Q.top());
    vis[Q.top()] = 1;
    instack[Q.top()] = 1;
    Q.pop();
  }
}
void dfs(int i) {
  printf("%d ", i);
  for (int v : E[i]) {
    dfs(v);
    printf("%d ", i);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = (1); i < (n); i++) {
    int s, t;
    scanf("%d%d", &s, &t);
    G[s].push_back(t), G[t].push_back(s);
  }
  for (int i = (2); i < (n + 1); i++) {
    if (G[i].size() == 1) cnt++;
  }
  _dfs(1, -1);
  for (int i = (0); i < (cnt); i++) {
    int v;
    scanf("%d", &v);
    gao(v);
  }
  dfs(1);
}
