#include <bits/stdc++.h>
using namespace std;
bool c[100000];
vector<int> v[100000];
long long a[2][100000];
int const md = 1000000007;
void dfs(int n) {
  if (c[n]) {
    a[1][n] = 1;
    a[0][n] = 0;
    for (int i = 0; i < v[n].size(); ++i) {
      int h = v[n][i];
      dfs(h);
      a[1][n] *= (a[0][h] + a[1][h]);
      a[1][n] %= md;
    }
  } else {
    a[1][n] = 0;
    a[0][n] = 1;
    for (int i = 0; i < v[n].size(); ++i) {
      int h = v[n][i];
      dfs(h);
      a[1][n] *= a[0][h] + a[1][h];
      a[1][n] %= md;
      a[1][n] += a[1][h] * a[0][n];
      a[1][n] %= md;
      a[0][n] *= a[0][h] + a[1][h];
      a[0][n] %= md;
    }
  }
}
int main() {
  int n, t;
  scanf("%d", &n);
  for (int i = 1; i < n; ++i) {
    scanf("%d", &t);
    v[t].push_back(i);
  }
  for (int i = 0; i < n; ++i) scanf("%d", &c[i]);
  dfs(0);
  cout << a[1][0];
}
