#include <bits/stdc++.h>
using namespace std;
vector<int> a[100010];
int sum, d[100010], n, dep[100010], flag;
int num[10000010];
long long ans, nums, numq;
void prepare(int x, int fa) {
  dep[x] = dep[fa] + 1;
  for (int i = 0; i < a[x].size(); i++) prepare(a[x][i], x);
  if (a[x].size() == 0) flag = dep[x] % 2;
}
void get_sum(int x) {
  if (dep[x] % 2 == flag)
    sum ^= d[x];
  else
    num[d[x]]++;
  for (int i = 0; i < a[x].size(); i++) get_sum(a[x][i]);
}
void get_ans(int x) {
  if (dep[x] % 2 == flag) {
    if (sum == 0) nums++;
    if ((sum ^ d[x]) <= 10000010 - 10) ans += num[sum ^ d[x]];
  } else {
    if (sum == 0) numq++;
  }
  for (int i = 0; i < a[x].size(); i++) get_ans(a[x][i]);
}
int u;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &d[i]);
  for (int i = 2; i <= n; i++) {
    scanf("%d", &u);
    a[u].push_back(i);
  }
  prepare(1, 0);
  get_sum(1);
  get_ans(1);
  if (sum == 0) ans += (nums - 1ll) * nums / 2ll + (numq - 1ll) * numq / 2ll;
  printf("%I64d", ans);
}
