#include <bits/stdc++.h>
const long base = 97;
using namespace std;
long long n, a[1000005];
vector<long> G[1000005];
long long F[1000005][2];
void nhap() {
  cin >> n;
  long x;
  for (long i = 1; i < n; i++) {
    cin >> x;
    G[x].push_back(i);
  }
  for (long i = 0; i < n; i++) cin >> a[i];
}
void DFS(long v) {
  F[v][a[v]] = 1;
  for (long i = 0; i < G[v].size(); i++) {
    long u = G[v][i];
    DFS(u);
    F[v][1] =
        ((F[v][1] * F[u][0]) % 1000000007 + (F[v][0] * F[u][1]) % 1000000007 +
         (F[v][1] * F[u][1]) % 1000000007) %
        1000000007;
    F[v][0] =
        ((F[v][0] * F[u][1]) % 1000000007 + (F[v][0] * F[u][0]) % 1000000007) %
        1000000007;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  nhap();
  DFS(0);
  cout << F[0][1] << endl;
}
