#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
vector<int> e[500001];
int f[500001];
int value[500001];
int ans[500001];
void dfs(int x,queue<pair<int,int> > q){
if(value[f[x]]==0&&value[x]==1){
ans[x]=ans[f[f[x]]]+1;}
else if(value[x]==1){
if(!q.empty()&&q.front().first==0){
ans[x]=ans[f[q.front().second]]+1;
}
}
if(!q.empty()){
if(q.front().first==0&&value[x]==1)q.pop();
else q.push(make_pair(value[x],x));
}
else q.push(make_pair(value[x],x));
for(int i=0;i<e[x].size();i++){
dfs(e[x][i],q);
}
return ;
}
int SUM[500001];
void getans(int x,int sum){
SUM[x]=x*(sum+ans[x]);
for(int i=0;i<e[x].size();i++){
getans(e[x][i],sum+ans[x]);
}
return ;
}
signed main(){
cin>>n;
memset(value,-1,sizeof value);
for(int i=1;i<=n;i++){
char op;
cin>>op;
if(op=='(')value[i]=0;
else value[i]=1;
}
for(int i=1;i<n;i++){
cin>>f[i+1];
e[f[i+1]].push_back(i+1);
}
queue<pair<int,int> > empty;
dfs(1,empty);
getans(1,0);
int fine=SUM[1];
for(int i=2;i<=n;i++){
fine=fine^SUM[i];
}
cout<<fine;
return 0;
}