#include <bits/stdc++.h>
using namespace std;
const int MN=1e6+5;
int w[MN],l[MN],r[MN],H1[MN],H2[MN],S1[MN],S2[MN],s1,s2,l1[MN],r1[MN],l2[MN],r2[MN];
int p[MN],D[MN];
const int base=13331;
void dfs1(int u){
if(u==-1)S1[++s1]=0;
else{
D[u]=1;
S1[++s1]=w[u];
l1[u]=s1;
dfs1(l[u]);
dfs1(r[u]);
r1[u]=s1;
if(l[u]!=-1){D[u]+=D[l[u]];}
if(r[u]!=-1){D[u]+=D[r[u]];}
}
}
void dfs2(int u){
if(u==-1)S2[++s2]=0;
else{
S2[++s2]=w[u];
l2[u]=s2;
dfs2(r[u]);
dfs2(l[u]);
r2[u]=s2;
}
}
int get_hash1(int r,int l){
int h=H1[r]-H1[l-1]*p[r-l+1];
return h;
}
int get_hash2(int r,int l){
int h=H2[r]-H2[l-1]*p[r-l+1];
return h;
}
int main(){
int n,ans=0;
cin>>n;
for(int i=1;i<=n;i++)cin>>w[i];
for(int i=1;i<=n;i++)cin>>l[i]>>r[i];
dfs1(1);
dfs2(1);
p[0]=1;
for(int i=1;i<=s1;i++)p[i]=base*p[i-1];
for(int i=1;i<=s1;i++)H1[i]=H1[i-1]*base+S1[i];
for(int i=1;i<=s2;i++)H2[i]=H2[i-1]*base+S2[i];
for(int i=1;i<=n;i++){
int p=get_hash1(l1[i],r1[i]);
int q=get_hash2(l2[i],r2[i]);
if(p==q){
ans=max(ans,D[i]);
}
}
cout<<ans;
return 0;
}