#include<bits/stdc++.h>
using namespace std;
unsigned long long const N=5e5+5;
unsigned long long n,s[N]={},f[N]={},top=0,ls[N]={},sum[N]={},ans=0,last[N]={},next1[N]={},to[N]={};
char a[N]={};
void dfs(unsigned long long x){
unsigned long long tem=0;
if(a[x]==')'&&top>0){
tem=s[top];
ls[x]=ls[f[tem]]+1;
top--;
}
else if(a[x]=='('){
s[++top]=x;
}
sum[x]=sum[f[x]]+ls[x];
if(next1[x]>0)dfs(next1[x]);
if(to[x]>0)dfs(to[x]);
if(tem!=0)s[++top]=tem;
else if(top)top--;
return;
}
int main(){
cin>>n;
for(unsigned long long i=1;i<=n;i++)cin>>a[i];
for(unsigned long long i=2;i<=n;i++){
cin>>f[i];
if(next1[f[i]]==0)next1[f[i]]=i,last[f[i]]=i;
else to[last[f[i]]]=i,last[f[i]]=i;
}
dfs(1);
for(unsigned long long i=1;i<=n;i++)ans^=i*sum[i];
cout<<ans;
return 0;
}