#include <bits/stdc++.h>
using namespace std;
int n;
int edgepass[305];
vector<int> e[305];
int father[305];
void getfa(int pos, int fa) {
  father[pos] = fa;
  for (unsigned int i = 0; i < e[pos].size(); i++)
    if (e[pos][i] != fa) getfa(e[pos][i], pos);
}
int path[305 * 150];
int top = 0;
bool dfs(int pos, int fa, int goal) {
  if (pos == goal) {
    return 1;
  }
  for (unsigned int i = 0; i < e[pos].size(); i++)
    if (e[pos][i] != fa) {
      path[++top] = e[pos][i];
      int nowtop = top;
      if (dfs(e[pos][i], pos, goal)) {
        if (pos != 1) {
          if (father[pos] == e[pos][i]) edgepass[pos]++;
        }
        if (father[e[pos][i]] == pos) edgepass[e[pos][i]]++;
        if (edgepass[e[pos][i]] > 2 || edgepass[pos] > 2) {
          printf("-1\n");
          exit(0);
        }
        return 1;
      } else
        path[nowtop] = -1;
    }
  return 0;
}
int main() {
  memset(path, -1, sizeof(path));
  memset(edgepass, 0, sizeof(edgepass));
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    e[a].push_back(b);
    e[b].push_back(a);
  }
  getfa(1, 0);
  int leafcnt = 0;
  for (int i = 2; i <= n; i++)
    if (e[i].size() == 1) leafcnt++;
  int lastpos = 1;
  memset(edgepass, 0, sizeof(edgepass));
  path[++top] = 1;
  for (int i = 1; i <= leafcnt; i++) {
    int x;
    scanf("%d", &x);
    dfs(lastpos, -1, x);
    lastpos = x;
  }
  dfs(lastpos, -1, 1);
  bool wa = 0;
  for (int i = 2; i <= n; i++)
    if (edgepass[i] != 2) {
      wa = 1;
      break;
    }
  if (wa) {
    printf("-1\n");
    return 0;
  }
  for (int i = 0; i <= top; i++) {
    if (path[i] != -1) printf("%d ", path[i]);
  }
  printf("\n");
  return 0;
}
