#include<cstdio>
#include<algorithm>
#include<iostream>
#include<queue>
#include<vector>
#include<stack>
#include<cstring>
#include<cmath>
#include<set>
#include<map>
using namespace std;
int ans[200010];
int d[200010];
queue<int>q;
int head[200010];
int tot;
int nex[400010];
int to[400010];
vector<int>v[400010];
queue< pair<int,int> >p;
int n,m;
int x,y;
int mx;
int vis[200010];
int s[200010];
int now;
void add(int x,int y)
{
	tot++;
	nex[tot]=head[x];
	head[x]=tot;
	to[tot]=y;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&x,&y);
		add(x,y);
		add(y,x);
	}
	scanf("%d",&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d",&x);
		vis[x]=1;
		q.push(x);
	}
	while(!q.empty())
	{
		now=q.front();
		q.pop();
		for(int i=head[now];i;i=nex[i])
		{
			if(!vis[to[i]])
			{
				d[to[i]]=d[now]+1;
				vis[to[i]]=1;
				mx=max(mx,d[to[i]]);
				v[d[to[i]]].push_back(to[i]);
				q.push(to[i]);
			}
		}
	}
	for(int i=mx;i>=1;i--)
	{
		int sz=v[i].size();
		for(int j=0;j<sz;j++)
		{
			x=v[i][j];
			if(s[x]<d[x])
			{
				s[x]=d[x];
				if(!ans[x])ans[x]=i;
				p.push(make_pair(d[x],x));
			}
		}
		while(!p.empty())
		{
			int val=p.front().first;
			now=p.front().second;
			p.pop();
			if(val==1)continue;
			for(int j=head[now];j;j=nex[j])
			{
				if(s[to[j]]<val-1)
				{
					s[to[j]]=val-1;
					if(!ans[to[j]])ans[to[j]]=i;
					p.push(make_pair(s[to[j]],to[j]));
				}
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		printf("%d",ans[i]);
		if(i!=n)printf(" ");
	}
}