奇怪的是样例毫无问题
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, fa[500005], val[500005], sum[500005];
char str[500005];
stack<int> stk;
vector<int> sons[500005];
void dfs(int u){
int pos;
if(str[u] == '('){
stk.push(u);
pos = 0;
}else{
if(!stk.empty()){
pos = stk.top();
stk.pop();
}else{
pos = -1;
}
}
if(pos <= 0){
val[u] = 0;
}else{
val[u] = val[fa[pos]] + 1;
}
for(int v : sons[u]){
dfs(v);
}
sum[u] = val[u] + sum[fa[u]];
if(pos == 0){
stk.pop();
}else if(pos > 0){
stk.push(pos);
}
}
int ans = 0;
signed main(){
cin >> n >> str+1;
for(int i = 2; i <= n; i++){
cin >> fa[i];
sons[fa[i]].push_back(i);
}
dfs(1);
for(int i = 1; i <= n; i++){
ans ^= sum[i]*i;
}
cout << ans;
return 0;
}