#include<bits/stdc++.h>
using namespace std;
const int m=500005;
struct note{
int to;
int next;
}e[m];
long long n,f[m],head[m],sum;
long long k[m],q[m],top,ct[m];
long long ans;
char a[m];
void add(int x,int y){
e[++sum].to=y;
e[sum].next=head[x];
head[x]=sum;
}
void dfs(int x){
int flag,t;
if(a[x]=='('){
q[++top]=x;
flag=1;
}
if(a[x]==')')
if(top!=0){
t=q[top];
ct[x]=ct[f[t]]+1;
top--;
flag=2;
}
k[x]=k[f[x]]+ct[x];
for(long long i=head[x];i;i=e[i].next)
dfs(e[i].to);
if(flag==1)top--;
if(flag==2)q[++top]=t;
}
int main(){
scanf("%lld",&n);
scanf("%s",a+1);
for(long long i=2;i<=n;i++){
long long x;
scanf("%lld",&x);
f[i]=x;
add(x,i);
}
dfs(1);
for(long long i=2;i<=n;i++)
ans^=i*k[i];
printf("%lld",ans);
return 0;
}