#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,tot,f[N];
long long ans,dp[N],Last[N];
char c[N];
vector <int> v[N];
void dfs(int x)
{
if(c[x]=='(')Last[x]=x;
else Last[x]=Last[f[Last[f[x]]]];
dp[x]=dp[f[x]];
if(c[x]==')'&&Last[f[x]]!=0)
dp[x]+=1+dp[f[Last[f[x]]]-dp[f[f[Last[f[x]]]]]];
for(int i=0;i<v[x].size();i++)
{
int child=v[x][i];
dfs(child);
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>c[i];
for(int i=2;i<=n;i++)
{
int a;
scanf("%d",&a);
f[i]=a;
v[a].push_back(i);
}
dfs(1);
for(int i=1;i<=n;i++)
ans^=(i*dp[i]);
cout<<ans;
return 0;
}