#include <bits/stdc++.h>
using namespace std;
struct node {
  int mVal;
  bool mIsleaf, mVisited;
  vector<int> mChildren;
  vector<vector<int> > mChildrenSubTrees;
  node() {
    mIsleaf = true;
    mVisited = false;
  }
};
node tree[302];
int n, a, b, leafCnt = 0;
vector<int> adjlists[302], leaves, path;
vector<int> dfs(int curr) {
  tree[curr].mVisited = true;
  vector<int> ret;
  bool isLeaf = true;
  for (int i = 0; i < adjlists[curr].size(); ++i) {
    if (tree[adjlists[curr][i]].mVisited) continue;
    isLeaf = false;
    tree[curr].mChildren.push_back(adjlists[curr][i]);
    tree[curr].mChildrenSubTrees.push_back(dfs(adjlists[curr][i]));
  }
  ret.push_back(curr);
  for (int i = 0; i < tree[curr].mChildren.size(); ++i)
    ret.insert(ret.end(), tree[curr].mChildrenSubTrees[i].begin(),
               tree[curr].mChildrenSubTrees[i].end());
  if (isLeaf) {
    leafCnt++;
    tree[curr].mIsleaf = true;
  }
  return ret;
}
bool pathPrinter(int curr, int& searchingFor) {
  path.push_back(curr);
  tree[curr].mVisited = true;
  if (leaves[searchingFor] == curr) {
    searchingFor++;
    return true;
  }
  while (1) {
    bool done = true, processedOne = false;
    for (int i = 0; i < ((int)(tree[curr].mChildren.size())); ++i) {
      int index =
          find(tree[curr].mChildrenSubTrees[i].begin(),
               tree[curr].mChildrenSubTrees[i].end(), leaves[searchingFor]) -
          tree[curr].mChildrenSubTrees[i].begin();
      if (index >= tree[curr].mChildrenSubTrees[i].size() ||
          tree[tree[curr].mChildren[i]].mVisited)
        continue;
      processedOne = true;
      if (!pathPrinter(tree[curr].mChildren[i], searchingFor)) return false;
      path.push_back(curr);
    }
    for (int i = 0; i < ((int)(tree[curr].mChildren.size())); ++i)
      if (!tree[tree[curr].mChildren[i]].mVisited) {
        done = false;
        break;
      }
    if (done && !processedOne)
      break;
    else if (!done && !processedOne)
      return false;
  }
  return true;
}
int main() {
  for (int i = 0; i < 302; ++i) tree[i].mVal = i;
  scanf("%d", &n);
  for (int i = 0; i < n - 1; ++i) {
    scanf("%d", &a);
    scanf("%d", &b);
    adjlists[a].push_back(b);
    adjlists[b].push_back(a);
  }
  dfs(1);
  for (int i = 0; i < leafCnt; ++i) {
    scanf("%d", &a);
    leaves.push_back(a);
  }
  for (int i = 0; i < 302; ++i) tree[i].mVisited = false;
  int ref = 0;
  if (pathPrinter(1, ref)) {
    for (int i = 0; i < path.size(); ++i) {
      if (i != 0) cout << ' ';
      cout << path[i];
    }
  } else {
    cout << -1 << endl;
  }
  return 0;
}
