#include <bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5, MOD=1e9+7;
vector<int> sons[MAXN];
int col[MAXN], f[MAXN], g[MAXN], n;
int main()
{
cin >> n;
for (int i=1; i<n; i++)
{
int x;
cin >> x;
sons[x].push_back(i);
}
for (int i=0; i<n; i++) cin >> col[i];
int sufs[MAXN], pres[MAXN];
for (int i=n-1; i>=0; i--)
{
int m = sons[i].size();
pres[0] = 1;
for (int j=0; j<m; j++) pres[j+1] = (long long)pres[j] * f[sons[i][j]] % MOD;
sufs[m] = 1;
for (int j=m-1; j>=0; j--) sufs[j] = (long long)sufs[j+1] * f[sons[i][j]] % MOD;
f[i] = pres[m];
for (int j=0; j<m; j++) g[i] = (g[i] + (long long)pres[j] * g[sons[i][j]] % MOD * sufs[j+1]) % MOD;
if (col[i]) g[i] = f[i], f[i] = 0;
f[i] = (f[i] + g[i]) % MOD;
}
cout << g[0] << "\n";
}
432A - Choosing Teams | 758A - Holiday Of Equality |
1650C - Weight of the System of Nested Segments | 1097A - Gennady and a Card Game |
248A - Cupboards | 1641A - Great Sequence |
1537A - Arithmetic Array | 1370A - Maximum GCD |
149A - Business trip | 34A - Reconnaissance 2 |
59A - Word | 462B - Appleman and Card Game |
1560C - Infinity Table | 1605C - Dominant Character |
1399A - Remove Smallest | 208A - Dubstep |
1581A - CQXYM Count Permutations | 337A - Puzzles |
495A - Digital Counter | 796A - Buying A House |
67A - Partial Teacher | 116A - Tram |
1472B - Fair Division | 1281C - Cut and Paste |
141A - Amusing Joke | 112A - Petya and Strings |
677A - Vanya and Fence | 1621A - Stable Arrangement of Rooks |
472A - Design Tutorial Learn from Math | 1368A - C+= |