#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 500001;
struct node
{
int nxt, to;
}e[maxn];
int n, x, cnt = 0, fa[maxn], head[maxn];
ll h[maxn], w[maxn], ans = 0;
string s;
inline void add(int u, int v)
{
e[++cnt].to = v;
e[cnt].nxt = h[u];
h[u] = cnt;
}
inline void dfs(ll x)
{
w[x] = fa[w[x]];
if(x == '(') w[x] = x;
else if(w[x] != 0)
{
h[x] = h[fa[w[x]]] + 1;
w[x] = w[fa[w[x]]];
}
for(int i = head[x]; i; i = e[i].nxt)
dfs(e[i].to);
}
int main()
{
cin >> n >> s;
for(int i = 1; i < n; i++)
{
cin >> x;
fa[i] = x;
add(i, x);
}
ans = head[1];
dfs(1);
for(int i = 2; i <= n; i++)
{
h[i] = h[i] + h[fa[i]];
ans = ans ^ (i * h[i]);
}
cout << ans;
return 0;
}