#include <bits/stdc++.h>
using namespace std;
long long dp[100007][2];
int c[100007], n;
vector<int> e[100007];
const long long mod = 1000000007;
void clr() {
  for (int i = 0; i < 100007; i++) {
    e[i].clear();
  }
  memset(dp, 0, sizeof(dp));
}
void add(int u, int v) {
  e[u].push_back(v);
  e[v].push_back(u);
}
void dfs(int u, int p) {
  dp[u][c[u]] = 1;
  for (int i = 0; i < e[u].size(); i++) {
    int v = e[u][i];
    if (v == p) continue;
    dfs(v, u);
    long long o[] = {dp[u][0], dp[u][1]};
    dp[u][1] =
        o[1] * dp[v][0] % mod + o[0] * dp[v][1] % mod + o[1] * dp[v][1] % mod;
    dp[u][1] %= mod;
    dp[u][0] = o[0] * dp[v][0] % mod + o[0] * dp[v][1] % mod;
    dp[u][0] %= mod;
  }
}
int main() {
  while (cin >> n) {
    clr();
    for (int i = 1; i < n; i++) {
      int x;
      cin >> x;
      add(i, x);
    }
    for (int i = 0; i < n; i++) {
      cin >> c[i];
    }
    dfs(0, -1);
    cout << dp[0][1];
  }
}
