记录
#include<iostream>
using namespace std;
int n,ans,sum[500005],f[500005];
bool k[500005],k1[500005];
bool cheak(int x,int c){
int top=0;
for(int i=x+c-1;i>=x;i--){
if(k1[i]==false) top++;
else if(top==0) return false;
else top--;
}
if(top==0) return true;
else return false;
}
bool find(int p){
int cnt=1,p1=p,l;
k1[1]=k[p];
while(f[p1]!=0) p1=f[p1],k1[++cnt]=k[p1];
l=cnt;
if(cnt%2==1) l--;
for(int i=1;i<cnt;i++){
for(int j=2;i+j-1<=cnt;j+=2){
if(cheak(i,j)) sum[p]++;
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
char a;
cin>>a;
if(a==')') k[i]=true;
}
for(int i=2;i<=n;i++) cin>>f[i];
for(int i=1;i<=n;i++) find(i);
ans=sum[1];
for(int i=2;i<=n;i++) ans^=sum[i]*i;
cout<<ans;
return 0;
}