#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
char a[maxn];
vector <int> son[maxn];
long long gx[maxn];
int fa[maxn];
long long sum[maxn],ans;
int zz[maxn],ztop=0;
int xz[maxn];
void dfs(int x)
{
if(a[x]=='(')
{
zz[++ztop]=fa[x];
}
else if(ztop!=0)
{
gx[x]=gx[zz[ztop]]+1;
ztop--;
}
sum[x]=sum[fa[x]]+gx[x];
ans=ans^(sum[x]*x);
int xxz=ztop;
memcpy(xz,zz,ztop+1);
int ss=son[x].size();
for(int i=0;i<ss;i++)
{
int sx=son[x][i];
ztop=xxz;
memcpy(zz,xz,ztop+1);
dfs(sx);
}
}
signed main()
{
int n;
scanf("%d",&n);
scanf("%s",a);
for(int i=n;i>=1;i--)
a[i]=a[i-1];
for(int i=1;i<n;i++)
{
scanf("%d",&fa[i+1]);
son[fa[i+1]].push_back(i+1);
}
dfs(1);
printf("%lld",ans);
return 0;
}
rt,wa了8-10