#include <bits/stdc++.h>
using namespace std;
int s[1000005];
struct node{
int z,y;
}zy[1000005];
int ans;
string st[1000005];
int dep[1000005];
bool pd(string s){
int r=s.length();
for(int i=1;i<=r/2;i++){
if (s[i-1]!=s[r-i]) return false;
}
return true;
}
void dfs(int w){
int cnt=0;
dep[w]++;
if (zy[w].z!=-1){
cnt++;
dfs(zy[w].z);
dep[w]+=dep[zy[w].z];
st[w]+=st[zy[w].z];
}
st[w]+=(char)('0'+s[w]);
if (zy[w].y!=-1){
cnt++;
dfs(zy[w].y);
dep[w]+=dep[zy[w].y];
st[w]+=st[zy[w].y];
}
if (cnt==0) ans=max(ans,1);
if (cnt==1) return;
if (cnt==2&&pd(st[w])&&dep[zy[w].z]==dep[zy[w].y]) ans=max(ans,(int)(st[w].length()));
}
int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>s[i];
for(int i=1;i<=n;i++){
cin>>zy[i].z>>zy[i].y;
}
dfs(1);
cout<<ans<<endl;
return 0;
}