# include <iostream>
# include <algorithm>
# include <cstdio>
# include <cmath>
# include <numeric>
# include <cstdlib>
# include <cstring>
# include <vector>
# include <list>
# include <set>
# include <map>
# include <stack>
# include <queue>
# include <cctype>
# include <climits>
# include <complex>
using namespace std;
typedef long long ll ;
typedef unsigned long long ull;
long long INF = 1e9 ;
typedef pair < int , int > pii ;
typedef vector < int > vi ;
typedef vector < pii > vpi ;
typedef vector < ll > vl ;
typedef pair < int , pii > tri ;
typedef vector < string > vs ;
typedef vector < vi > mat ;
#define all(a) a.begin(),a.end()
#define si(n) scanf("%d",&n)
#define pi(n) printf("%d" , n) ;
#define for( i , a , b ) for ( int i = a ; i < b ; i++ )
#define sl(n) scanf("%lld" , &n) ;
#define pl(n) printf("%lld" , n) ;
#define pb push_back
#define ss second
#define ff first
#define mp make_pair
#define sz(a) a.size()
#define fill(a,v) memset(a,v,sizeof(a))
#define index(arr,ind) (lower_bound(all(arr),ind)-arr.begin())
int col[100005] ;
ll dp[100005][2] ;
int p[100005];
vi adj[100005] ;
ll mod = 1e9 + 7 ;
void dfs(int i )
{
dp[i][col[i]] = 1 ;
dp[i][1-col[i]] = 0 ;
for ( j , 0 , adj[i].size() )
{
int v = adj[i][j] ;
if ( v != p[i])
{
p[v] = i ;
dfs(v) ;
// if edge i - v is not cut------------------------------------------------------> if edge i - v cut
dp[i][1] = ( ( ( dp[i][1] * dp[v][0] ) % mod ) + (( dp[i][0] * dp[v][1] ) % mod ) + ( ( dp[i][1] * dp[v][1] ) % mod ) ) % mod ;
dp[i][0] = ( ( dp[i][0] * dp[v][0] ) % mod + ( dp[i][0] * dp[v][1] ) % mod ) % mod ;
}
}
}
int main()
{
int n , v ;
si(n) ;
for ( i , 0 , n )
adj[i].clear() ;
for ( i , 0 , (n-1))
{
si(v) ;
adj[i+1].pb(v) ;
adj[v].pb(i+1) ;
}
for ( i , 0 , n )
{
si(col[i]) ;
}
p[0] = -1 ;
dfs(0) ;
pi(dp[0][1]);
return 0 ;
}
IyBpbmNsdWRlIDxpb3N0cmVhbT4KIyBpbmNsdWRlIDxhbGdvcml0aG0+CiMgaW5jbHVkZSA8Y3N0ZGlvPgojIGluY2x1ZGUgPGNtYXRoPgojIGluY2x1ZGUgPG51bWVyaWM+CiMgaW5jbHVkZSA8Y3N0ZGxpYj4KIyBpbmNsdWRlIDxjc3RyaW5nPgojIGluY2x1ZGUgPHZlY3Rvcj4KIyBpbmNsdWRlIDxsaXN0PgojIGluY2x1ZGUgPHNldD4KIyBpbmNsdWRlIDxtYXA+CiMgaW5jbHVkZSA8c3RhY2s+CiMgaW5jbHVkZSA8cXVldWU+CiMgaW5jbHVkZSA8Y2N0eXBlPgojIGluY2x1ZGUgPGNsaW1pdHM+CiMgaW5jbHVkZSA8Y29tcGxleD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGwgOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CmxvbmcgbG9uZyBJTkYgPSAxZTkgOwp0eXBlZGVmIHBhaXIgPCBpbnQgLCBpbnQgPiBwaWkgOwp0eXBlZGVmICB2ZWN0b3IgPCBpbnQgPiB2aSA7CnR5cGVkZWYgdmVjdG9yIDwgcGlpID4gdnBpIDsKdHlwZWRlZiB2ZWN0b3IgPCBsbCA+IHZsIDsKdHlwZWRlZiBwYWlyIDwgaW50ICwgcGlpID4gdHJpIDsKdHlwZWRlZiB2ZWN0b3IgPCBzdHJpbmcgPiB2cyA7CnR5cGVkZWYgdmVjdG9yIDwgdmkgPiBtYXQgOwojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksYS5lbmQoKQojZGVmaW5lIHNpKG4pIHNjYW5mKCIlZCIsJm4pCiNkZWZpbmUgcGkobikgcHJpbnRmKCIlZCIgLCBuKSA7CiNkZWZpbmUgZm9yKCBpICwgYSAsIGIgKSBmb3IgKCBpbnQgaSA9IGEgOyBpIDwgYiA7IGkrKyApCiNkZWZpbmUgc2wobikgc2NhbmYoIiVsbGQiICwgJm4pIDsKI2RlZmluZSBwbChuKSBwcmludGYoIiVsbGQiICwgbikgOwojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIHNzIHNlY29uZAojZGVmaW5lIGZmIGZpcnN0CiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgc3ooYSkgYS5zaXplKCkKI2RlZmluZSBmaWxsKGEsdikgIG1lbXNldChhLHYsc2l6ZW9mKGEpKQojZGVmaW5lIGluZGV4KGFycixpbmQpIChsb3dlcl9ib3VuZChhbGwoYXJyKSxpbmQpLWFyci5iZWdpbigpKQppbnQgY29sWzEwMDAwNV0gOwpsbCBkcFsxMDAwMDVdWzJdIDsKaW50ICBwWzEwMDAwNV07CnZpIGFkalsxMDAwMDVdIDsKbGwgbW9kID0gMWU5ICsgNyA7CnZvaWQgZGZzKGludCBpICkKewogICAgZHBbaV1bY29sW2ldXSA9IDEgOwogICAgZHBbaV1bMS1jb2xbaV1dID0gMCA7CiAgICBmb3IgKCBqICwgMCAsIGFkaltpXS5zaXplKCkgKQogICAgewoKICAgICAgICBpbnQgdiA9IGFkaltpXVtqXSA7CiAgICAgICAgaWYgKCB2ICE9IHBbaV0pCiAgICAgICAgewogICAgICAgICAgICBwW3ZdID0gaSA7CiAgICAgICAgICAgIGRmcyh2KSA7CiAgICAgICAgICAgIC8vIGlmIGVkZ2UgaSAtIHYgaXMgbm90IGN1dC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gICAgaWYgZWRnZSBpIC0gdiBjdXQKICAgICAgICAgICAgZHBbaV1bMV0gPSAoICggKCBkcFtpXVsxXSAqIGRwW3ZdWzBdICkgJSBtb2QgKSArICgoIGRwW2ldWzBdICogZHBbdl1bMV0gKSAlIG1vZCApICsgKCAoIGRwW2ldWzFdICogZHBbdl1bMV0gKSAlIG1vZCApICkgJSBtb2QgOwogICAgICAgICAgICBkcFtpXVswXSA9ICggKCBkcFtpXVswXSAqIGRwW3ZdWzBdICkgJSBtb2QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAgICAoIGRwW2ldWzBdICogZHBbdl1bMV0gKSAlIG1vZCApICUgbW9kIDsKCgoKICAgICAgICB9CiAgICB9Cn0KaW50IG1haW4oKQp7CiAgICBpbnQgbiAsIHYgOwogICAgc2kobikgOwogICAgZm9yICggaSAsIDAgICwgbiApCiAgICAgICAgYWRqW2ldLmNsZWFyKCkgOwogICAgZm9yICggaSAsIDAgLCAobi0xKSkKICAgIHsKICAgICAgICBzaSh2KSA7CiAgICAgICAgYWRqW2krMV0ucGIodikgOwogICAgICAgIGFkalt2XS5wYihpKzEpIDsKICAgIH0KICAgIGZvciAoIGkgLCAwICwgbiApCiAgICB7CiAgICAgICAgc2koY29sW2ldKSA7CiAgICB9CiAgICBwWzBdID0gLTEgOwogICAgZGZzKDApIDsKICAgIHBpKGRwWzBdWzFdKTsKICAgIHJldHVybiAwIDsKfQo=
MTE1CjAgMCAxIDIgMCA0IDEgMyA0IDEgNCA1IDQgNSAwIDAgMyAxIDIgMyAzIDAgNSAxIDMgNCAxIDUgMiAwIDEgMyAzIDEgMyA1IDAgNCA1IDEgMyAwIDAgMSAzIDEgMSAzIDMgMyAyIDMgMSAzIDAgMiA1IDUgMSAxIDIgMiAxIDEgMyAyIDEgMiAzIDEgNSA0IDIgMSAyIDEgMSAyIDMgNCAzIDEgNSAwIDIgNCA0IDUgMiA1IDAgMiA0IDUgNSA1IDUgMCAzIDEgMSA0IDIgMiA0IDMgMyAwIDMgMyAwIDIgMCAwCjEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDEgMSAxIDE=
115
0 0 1 2 0 4 1 3 4 1 4 5 4 5 0 0 3 1 2 3 3 0 5 1 3 4 1 5 2 0 1 3 3 1 3 5 0 4 5 1 3 0 0 1 3 1 1 3 3 3 2 3 1 3 0 2 5 5 1 1 2 2 1 1 3 2 1 2 3 1 5 4 2 1 2 1 1 2 3 4 3 1 5 0 2 4 4 5 2 5 0 2 4 5 5 5 5 0 3 1 1 4 2 2 4 3 3 0 3 3 0 2 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1