#include<cstdio>#include<cstring>#include<algorithm>#include<queue>usingnamespace std;#define N 500010int last[N], nxt[N *2], to[N *2], len =1;int dis[N], dp[N], Fa[N], vi[N];int a[N], p[N], ans[N];
queue<int> q;voidadd(int x,int y){
to[++len]= y;
nxt[len]= last[x];
last[x]= len;}voiddfs(int k,int fa){
dp[k]= dp[fa]+1, Fa[k]= fa;for(int i = last[k]; i; i = nxt[i])if(to[i]!= fa)dfs(to[i], k);}voidSPFA(){while(!q.empty()){int x = q.front();
q.pop();for(int i = last[x]; i; i = nxt[i]){int y = to[i];if(dis[x]+1< dis[y]){
dis[y]= dis[x]+1;if(!vi[y]) q.push(y), vi[y]=1;}}
vi[x]=0;}}intcmp(int x,int y){return dp[x]> dp[y];}voidsolve(int k,int fa,int s){
p[k]=0, vi[k]=1;if(!s)return;for(int i = last[k]; i; i = nxt[i])if(dis[to[i]]== s -1&&!vi[to[i]])solve(to[i], k, s -1);}intread(){int s =0;char x =getchar();while(x <'0'|| x >'9') x =getchar();while(x >='0'&& x <='9') s = s *10+ x -48, x =getchar();return s;}intmain(){int n, m, i, x, y;scanf("%d%d",&n,&m);for(i =1; i < n; i++){
x =read(), y =read();add(x, y),add(y, x);}dfs(1,0);memset(dis,127,sizeof(dis));for(i =1; i <= m; i++){scanf("%d",&a[i]);
dis[a[i]]=0, vi[a[i]]=1;
q.push(a[i]);
p[a[i]]=1;}SPFA();sort(a +1, a + n +1, cmp);for(i =1; i <= m; i++)if(p[a[i]]){int x = a[i], t = x;while(Fa[t]&& dis[Fa[t]]== dis[t]+1) t = Fa[t];
ans[++ans[0]]= t;solve(t,0, dp[x]- dp[t]);}printf("%d\n", ans[0]);for(i =1; i <= ans[0]; i++)printf("%d ", ans[i]);return0;}