#include<bits/stdc++.h>
using namespace std;
int pre[500001][20],deep[500001];
int n,root;
int f[500001];
vector<int> e[500001];
int diff[500001],sum[500001];
void dfs(int x,int fa){
pre[x][0]=fa;
for(int i:e[x]){
if(fa==i){
continue;
}
deep[i]=deep[x]+1;
dfs(i,x);
}
}
int lca(int u,int v){
if(deep[u]<deep[v]){
swap(u,v);
}
int up=-1;
while((1<<(up+1))<=deep[u]){
up++;
}
for(int i=up;i>=0;i--){
if(deep[u]-(1<<i)>=deep[v]){
u=pre[u][i];
}
}
if(u==v){
return u;
}
for(int i=up;i>=0;i--){
if(pre[u][i]!=pre[v][i]){
u=pre[u][i];
v=pre[v][i];
}
}
return pre[u][0];
}
void dfs1(int x,int fa){
for(int i:e[x]){
if(i!=fa){
dfs1(i,x);
diff[x]+=diff[i];
}
}
}
int q[500001];
int main(){
freopen("P3258_1.in","r",stdin);
freopen("1.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++){
cin>>q[i];
}
for(int i=1;i<n;i++){
int x,y;
cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
dfs(1,0);
for(int l=1;(1<<l)<=n;l++){
for(int i=1;i<=n;i++){
pre[i][l]=pre[pre[i][l-1]][l-1];
}
}
for(int i=1;i<n;i++){
int l=lca(q[i],q[i+1]);
diff[q[i]]++;
diff[q[i+1]]++;
diff[l]--;
diff[pre[l][0]]--;
}
dfs1(1,0);
for(int i=2;i<=n;i++){
diff[q[i]]--;
}
for(int i=1;i<=n;i++){
cout<<diff[i]<<" ";
}
}