#include<bits/stdc++.h>
#define maxn 200005
#define endl '\n'
using namespace std;
 
int n,m,a[maxn],dis[maxn];
vector<int> e[maxn];
 
queue<int> q;
 
void bfs()
{
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		for(int i=0;i<e[u].size();i++)
		{
			int v=e[u][i];
			if(dis[v]!=-1) continue;
			dis[v]=dis[u]+1;
			q.push(v);
		}
	}
}
 
 
 
int mx[maxn],ans[maxn],ok[maxn];
vector<int> b[maxn];
 
void bfs2(int tt)
{
	while(!q.empty())
	{
		int u=q.front();
		q.pop();
		for(int i=0;i<e[u].size();i++)
		{
			int v=e[u][i];
			if(ok[v]) continue;
			ans[v]=max(ans[v],tt);
			if(mx[v]>=mx[u]-1) continue;
			mx[v]=mx[u]-1;
			q.push(v);
		}
	}
}
 
signed main()
{
	ios::sync_with_stdio(0);
	cin>>n;
	for(int i=1,u,v;i<n;i++) 
	{
		cin>>u>>v;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	cin>>m;
	memset(dis,-1,sizeof(dis));
	for(int i=1;i<=m;i++) 
	{
		cin>>a[i];
		ok[a[i]]=1;
		dis[a[i]]=0;
		q.push(a[i]);
	}
	bfs();
	for(int i=1;i<=n;i++)
		b[dis[i]].push_back(i),ans[i]=dis[i];
	for(int i=n;i>=1;i--)
	{
		if(b[i].size()==0) continue;
		while(!q.empty()) q.pop();
//		q.clear();
		for(int j=0;j<b[i].size();j++) 
		{
			q.push(b[i][j]);
			if(mx[b[i][j]]>=i-1) continue;
			mx[b[i][j]]=i-1;
			ans[b[i][j]]=max(i,ans[b[i][j]]);
		}
		bfs2(i);
	}
	for(int i=1;i<=n;i++)
		cout<<ans[i]<<' ';
	cout<<endl;
}