#include<bits/stdc++.h>
using namespace std;
#define maxn 1000005
int s[maxn];
int w[maxn],k[maxn];
int n;
int cnt=0,ans=1;
int lson[maxn],rson[maxn],rsonsize[maxn],lsonsize[maxn];
void dfs1(int,int,bool);
void dfs2(int);
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",w+i);
for(int i=1;i<=n;i++)
scanf("%d %d",lson+i,rson+i);
dfs1(1,0,1);
dfs2(1);
printf("%d",ans);
return 0;
}
void dfs1(int u,int fa,bool isl){
if(u==-1) return;
dfs1(lson[u],u,1);
s[++cnt]=w[u];
k[u]=cnt;
dfs1(rson[u],u,0);
if(isl) lsonsize[fa]=lsonsize[u]+rsonsize[u]+1;
else rsonsize[fa]=lsonsize[u]+rsonsize[u]+1;
}
void dfs2(int u){
if(u==-1) return;
dfs2(lson[u]);
dfs2(rson[u]);
if(lsonsize[u]!=rsonsize[u]) return;
for(int i=k[u]-1,j=k[u]+1;k[u]-i<=lsonsize[u];i--,j++)
if(s[i]!=s[j]) return;
ans=max(ans,lsonsize[u]+rsonsize[u]+1);
}
注:WA