题目链接:https://codeforces.com/contest/29/problem/D
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <climits>
#include <cstring>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <deque>
#include <set>
#include <map>
#include <bitset>
#include <unordered_set>
#include <unordered_map>
#include <algorithm>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef double db;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
static const int INF=0x3f3f3f3f;
static const ll INFL=0x3f3f3f3f3f3f3f3f;
static const db EPS=1e-10;
static const db PI=acos(-1.0);
inline int read()
{
int X=0; bool flag=1; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
if(flag) return X;
return ~(X-1);
}
inline void write(int X)
{
if(X<0) {X=~(X-1); putchar('-');}
if(X>9) write(X/10);
putchar(X%10+'0');
}
static const int MAXN=300+10;
vector<int> g[MAXN];
vector<int> ans;
int n;
bool dfs(int u,int ed,int pre)
{
if(u==ed) return true;
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i];
if(v==pre) continue;
if(dfs(v,ed,u))
{
ans.push_back(u);
return true;
}
}
return false;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n-1;i++)
{
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
int st,ed=1;
ans.push_back(1);
while(scanf("%d",&st)!=EOF)
{
dfs(st,ed,-1);
ed=st;
}
dfs(1,ed,-1);
if(ans.size()!=2*n-1) puts("-1");
else
{
for(int i=0;i<2*n-1;i++)
printf("%d ",ans[i]);
puts("");
}
return 0;
}