#include <bits/stdc++.h>
/// 500 485 462 A4
typedef long long int ll;
typedef long double ld;
#define pb push_back
#define pii pair < ll , ll >
#define F first
#define S second
//#define endl '\n'
#define int long long
#define sync ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#define kill(x) return cout<<x<<'\n', 0;
using namespace std;
const int N=2e5+100;
ll par[N];
vector <int> g[N];
ll vis[N];
ll dis[N];
ll ans[N];
ll sz[N];
ll n;
void dfssz(ll v,ll p){
    sz[v]=1;
    for (auto u : g[v]){
        if (vis[u] || u==p) continue;
        dfssz(u,v);
        sz[v]+=sz[u];
    }
}
ll findcen(ll v,ll p,ll k){
    for (auto u : g[v]){
        if (vis[u] || u==p) continue;
        if (sz[u]>k/2) return findcen(u,v,k);
    }
    return v;
}
void dfsans(ll v,ll p,ll t){
    ans[v]=max(ans[v],par[t]);
    for (auto u : g[v]){
        if (vis[u] || u==p) continue;
        dfsans(u,v,t+1);
    }
}
void dfs(ll v,ll p,ll k,ll t){
    if (t<dis[v]){
        par[min(dis[v]-t-1,k)]=max(par[min(dis[v]-t-1,k)],dis[v]);
    }
    for (auto u : g[v]){
        if (u==p || vis[u]) continue;
        dfs(u,v,k,t+1);
    }
}
queue <int> q;
void hal(ll v,ll k){
    for (int i=0;i<=k+3;i++) par[i]=0;
    dfs(v,v,k,0);
    for (int i=k;i>-1;i--){
        par[i]=max(par[i],par[i+1]);
    }
    dfsans(v,v,0);
}
void div(){
    q.push(1);
    while(q.size()){
        ll v=q.front();
        q.pop();
        if (vis[v]) continue;
        dfssz(v,v);
        ll siz=sz[v];
        ll cen=findcen(v,v,siz);
        if (vis[cen]) continue;
      //  cout << cen << endl;
        hal(cen,siz);
        vis[cen]=1;
        for (auto u : g[cen]){
            if (vis[u]==0) q.push(u);
        }
    }
}
void bfs(){
    queue <int> q;
    for (int i=1;i<=n;i++){
        if (dis[i]==0) q.push(i);
    }
    while(q.size()){
        ll v=q.front();
        q.pop();
        for (auto u : g[v]){
            if (dis[u]>dis[v]+1){
                dis[u]=dis[v]+1;
                q.push(u);
            }
        }
    }
}
int32_t main(){
    sync;
    cin >> n;
    memset(dis,31,sizeof dis);
    for (int i=0;i<n-1;i++){
        ll u,v;
        cin >> u >> v;
        g[u].pb(v);
        g[v].pb(u);
    }
    ll k;
    cin >> k;
    for (int i=1;i<=k;i++){
        ll c;
        cin >> c;
        dis[c]=0;
    }
    bfs();
    div();
    for (int i=1;i<=n;i++){
        cout << ans[i] << " ";
    }
}
