#include<bits/stdc++.h>
using namespace std;
struct node{
int val,lc,rc;
}data[1000001];
int cnt=0;
queue<int> que;
int count(int id){
if(id>0){
return 1+count(data[id].lc)+count(data[id].rc);
}
return 0;
}
void pos1(int id){
if(id>0){
que.push(data[id].val);
pos1(data[id].lc);
pos1(data[id].rc);
}
}
void pos2(int id){
if(id>0){
if(data[id].val=que.front())que.pop();
else return;
pos2(data[id].rc);
pos2(data[id].lc);
}
}
bool check(int id){
if(count(data[id].lc)!=count(data[id].rc))return 0;
while(!que.empty())que.pop();
pos1(data[id].lc);
pos2(data[id].rc);
if(que.empty())return 1;
else return 0;
}
void solve(int id){
if(id<=0)return;
if(check(id)){
cnt=max(cnt,count(id));
return;
}else{
solve(data[id].lc);
solve(data[id].rc);
}
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>data[i].val;
for(int i=1;i<=n;i++)cin>>data[i].lc>>data[i].rc;
solve(1);
cout<<cnt;
}