#include <bits/stdc++.h>
#define int long long
const int mod = 998244353;
using namespace std;
int f[500005][61][2], sf[500005];
int n;
vector<int> to[500005];
int v[500005];
#define bit(x,i) v[x] >> (i-1) & 1
int dp(int x)
{
for (int i = 1; i <= 60; i++)f[x][i][bit(x,i)] = 1;
for(auto ed : to[x])
{
dp(ed);
for (int i = 1; i <= 60; i++)
{
int zero = f[x][i][0],one = f[x][i][1];
f[x][i][0] = f[x][i][1] = 0;
f[x][i][0] = (f[ed][i][0] * zero % mod + f[ed][i][1] * one % mod + sf[ed] * zero % mod) % mod;
f[x][i][1] = (f[ed][i][0] * one % mod + f[ed][i][1] * zero % mod + sf[ed] * one % mod) % mod;
}
}
for(int i = 1; i <= 60; i++)
{
sf[x] = (sf[x] + f[x][i][1] * (1LL<<(i-1)) % mod) % mod;
}
return sf[x];
}
signed main()
{
scanf("%lld", &n);
for (int i = 1; i <= n; i++)
{
scanf("%lld", &v[i]);
}
for (int i = 2, ed; i <= n; i++)
{
scanf("%lld", &ed);
to[ed].push_back(i);
}
printf("%lld", dp(1));
return 0;
}