#include<bits/stdc++.h>
using namespace std;
#define re register
const int N=5e5+5,inf=1<<27;
int n;
char g[N];
vector<int> e[N];
struct node{
int front,back,i;
}a[N];
int num[N];
void dfs(int x,int sum,node q[],int cnt){
int tp=0;
if(g[x]=='('){
++cnt;
if(q[cnt-1].i)
q[cnt].front=q[cnt-1].back,q[cnt].i=0;
else
q[cnt].front=q[cnt].back=0,q[cnt].i=0;
}
else{
if(cnt==0)
q[0].front=q[0].back=q[0].i=0;
else{
if(q[cnt-1].i)
q[cnt-1].back++,q[cnt-1].i=1,tp=q[cnt].front+1;
else{
if(cnt>1)
q[cnt-1].back++,q[cnt-1].i=1;
else
q[0].back++,q[0].i=1;
tp=1;
}
q[cnt].front=q[cnt].back=q[cnt].i=0;
cnt--;
}
}
num[x]=sum+tp;
for(auto i:e[x])
dfs(i,sum+tp,q,cnt);
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n;
cin>>(g+1);
for(int i=2;i<=n;i++){
int tmp;cin>>tmp;
e[tmp].push_back(i);
}
dfs(1,0,a,0);
int ans=0;
for(re int i=1;i<=n;i++)
ans=ans^(num[i]*i);
cout<<ans<<"\n";
return 0;
}