#include <bits/stdc++.h>
using namespace std;
const int N=5e5+100;
int n,k,w[N],dpt[N],fat[N],v[N];
bool vis[N];
vector<int>a[N],ba[N],res;
queue<int>q;
void dfs(int id,int fa)
{
	fat[id]=fa;
	dpt[id]=dpt[fa]+1;
	for(int i=0;i<a[id].size();i++)
	{
		int son=a[id][i];
		if(son==fa)continue;
		dfs(son,id);
	}
	return ;
}
void bfs()
{
	int t=1;
	while(q.size())
	{
		t++;
		int size=q.size();
		for(int i=1;i<=size;i++)
		{
			int id=q.front();
			q.pop();
			for(int j=0;j<a[id].size();j++)
			{
				int son=a[id][j];
				if(v[son])continue;
				v[son]=t;
				q.push(son);
			}
		}
	}
}
void solve(int id,int len)
{
	vis[id]=true;
	if(len==0)return ;
	for(int i=0;i<a[id].size();i++)
	{
		int son=a[id][i];
		solve(son,len-1);
	}
	return ; 
}
int main(){
	cin>>n>>k;
	for(int i=1;i<n;i++)
	{
		int x,y;
		cin>>x>>y;
		a[x].push_back(y);
		a[y].push_back(x);
	}
	dfs(1,0);
	for(int i=1;i<=k;i++)
	{
		cin>>w[i];
		ba[dpt[w[i]]].push_back(w[i]);
		q.push(w[i]);
		v[w[i]]=1;
	}
	bfs();
	for(int i=5e5+1;i>=0;i--)
	{
		for(int j=0;j<ba[i].size();j++)
		{
			int son=ba[i][j];
			if(vis[son])continue;
			int now=son;
			while(fat[now]&&v[fat[now]]==v[now]+1) now=fat[now];
			res.push_back(now);
			solve(now,dpt[son]-dpt[now]);
		}
	}
	cout<<res.size()<<endl;
	for(int i=0;i<res.size();i++)
		cout<<res[i]<<" ";
	return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |