#include <bits/stdc++.h>
using namespace std;
struct Node {
  int to;
  int num;
  int next;
} edge[1000];
int ip;
int num;
int n;
int leafnum;
int route[1000];
int way[1000];
int visitto[310];
int head[310];
int degree[310];
void addedge(int u, int v) {
  edge[ip].next = head[u];
  edge[ip].to = v;
  head[u] = ip++;
  edge[ip].next = head[v];
  edge[ip].to = u;
  head[v] = ip++;
}
int findway(int pre, int from, int to, int num1) {
  if (from == to) {
    return num1;
  }
  int temp;
  int p = head[from];
  while (p != -1) {
    route[num1] = p;
    if (edge[p].to != pre && (temp = findway(from, edge[p].to, to, num1 + 1)) &&
        temp) {
      return temp;
    }
    p = edge[p].next;
  }
  return 0;
}
bool ans() {
  int from = 1;
  int to;
  int temp;
  num = 0;
  for (int i = 0; i < leafnum; i++) {
    to = visitto[i];
    temp = findway(0, from, to, 0);
    int j = 0;
    if (!temp) return 0;
    while (j < temp) {
      edge[route[j]].num++;
      if (edge[route[j]].num + edge[route[j] ^ 1].num > 2) return 0;
      way[num++] = route[j++];
    }
    from = to;
  }
  return 1;
}
int main() {
  int x, y, i;
  while (cin >> n) {
    memset(degree, 0, sizeof(degree));
    memset(edge, 0, sizeof(edge));
    memset(head, -1, sizeof(head));
    memset(visitto, 0, sizeof(visitto));
    ip = 0;
    for (i = 1; i < n; i++) {
      scanf("%d%d", &x, &y);
      addedge(x, y);
      degree[x]++;
      degree[y]++;
    }
    leafnum = 0;
    for (i = 1; i <= n; i++) {
      if (i != 1 && degree[i] == 1) {
        leafnum++;
      }
    }
    for (i = 0; i < leafnum; i++) {
      scanf("%d", &visitto[i]);
    }
    visitto[leafnum++] = 1;
    if (ans()) {
      printf("1 ");
      for (int i = 0; i < num; i++) {
        printf("%d ", edge[way[i]].to);
      }
      printf("\n");
    } else {
      printf("-1\n");
    }
  }
  return 0;
}
