Appleman has a tree with n vertices. Some of the vertices (at least one) are colored black and other vertices are colored white.

Consider a set consisting of k (0 ≤ k < n) edges of Appleman's tree. If Appleman deletes these edges from the tree, then it will split into (k + 1) parts. Note, that each part will be a tree with colored vertices.

Now Appleman wonders, what is the number of sets splitting the tree in such a way that each resulting part will have exactly one black vertex? Find this number modulo 1000000007 (10^9 + 7).


-----Input-----

The first line contains an integer n (2  ≤ n ≤ 10^5) — the number of tree vertices. 

The second line contains the description of the tree: n - 1 integers p_0, p_1, ..., p_{n} - 2 (0 ≤ p_{i} ≤ i). Where p_{i} means that there is an edge connecting vertex (i + 1) of the tree and vertex p_{i}. Consider tree vertices are numbered from 0 to n - 1.

The third line contains the description of the colors of the vertices: n integers x_0, x_1, ..., x_{n} - 1 (x_{i} is either 0 or 1). If x_{i} is equal to 1, vertex i is colored black. Otherwise, vertex i is colored white.


-----Output-----

Output a single integer — the number of ways to split the tree modulo 1000000007 (10^9 + 7).


-----Examples-----
Input
3
0 0
0 1 1

Output
2

Input
6
0 1 1 0 4
1 1 0 0 1 0

Output
1

Input
10
0 1 2 1 4 4 4 0 8
0 0 0 1 0 1 1 0 0 1

Output
27

```python

USER_FILENAME = "<user_code>"
import sys, json, builtins
import math, heapq, bisect, itertools, functools, collections, statistics, fractions, decimal, operator, array, random, re, string, os, pathlib
try:
    import resource as _res
except Exception:
    _res = None
from collections import Counter, defaultdict, deque, OrderedDict
from functools import lru_cache, reduce
from itertools import accumulate, permutations, combinations, product
from math import gcd, ceil, floor, sqrt
from decimal import Decimal
try:
    from typing import *
except Exception:
    pass
try:
    sys.setrecursionlimit(1_000_000)
except Exception:
    pass
try:
    import site as _site
    try:
        _sys_sites = _site.getsitepackages() if hasattr(_site, "getsitepackages") else []
        for _p in _sys_sites:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
    try:
        _usp = _site.getusersitepackages()
        if isinstance(_usp, str):
            _usp = [_usp]
        for _p in _usp:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
except Exception:
    pass

ns = {"__name__": "__main__"}
for _k, _v in list(globals().items()):
    if not _k.startswith("_"):
        ns[_k] = _v
_CODE = 'from collections import UserDict\n\n\nclass Tree(UserDict):\n    def __init__(self, g):\n        super().__init__()\n        for name, value in enumerate(g, 1):\n            self[value] = name\n\n    def __setitem__(self, name, value):\n        if name in self:\n            if value is not None:\n                self[name].add(value)\n                self[value] = None\n        else:\n            if value is None:\n                super().__setitem__(name, set())\n            else:\n                super().__setitem__(name, {value})\n                self[value] = None\n\n\ndef __starting_point():\n    n = int(input())\n\n    tree = Tree(int(i) for i in input().split())\n    colors = [int(i) for i in input().split()]\n    t = [()] * n\n\n    def dfs(v):\n        stack = [v]\n        visited = set()\n\n        while stack:\n            v = stack.pop()\n            if v not in visited:\n                visited.add(v)\n                stack.append(v)\n                stack.extend(tree[v])\n            else:\n                t[v] = (1, colors[v])\n                for u in tree[v]:\n                    t[v] = (\n                        (t[v][0] * t[u][1] + t[v][0] * t[u][0] * (not colors[u])) % (10**9 + 7),\n                        (t[v][1] * t[u][1] + t[v][0] * t[u][1] * (not colors[v])\n                                           + t[v][1] * t[u][0] * (not colors[u])) % (10**9 + 7)\n                    )\n\n                \n    dfs(0)\n\n    print(t[0][1])\n\n\n\n    \n\n\n\n\n# Made By Mostafa_Khaled\n\n__starting_point()'
_co = compile(_CODE, USER_FILENAME, "exec")
exec(_co, ns, ns)

```

Measured memory_bytes: 18337