分礼物
题号:NC202806
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

    2020年2月,陪伴我们10年的青春《爱情公寓》结束了……

    公寓即将拆迁,大伙儿都忙着收拾东西。突然,3601和3602的住户们同时望向了窗外的那棵歪脖子树———一棵陪伴了他们10年的树。

    这不是一棵普通的树,上面充满了他们每一个人的回忆……在这棵树上,藏着许多礼物,是整个爱情公寓住户们在圣诞节的时候挂上的。这棵树共有个节点,每一个礼物都挂在树的一个节点上。挂有礼物的标为,没有礼物的标为。曾小贤决定将礼物连同树枝分给每一个人,但是,每一个人有且仅有一个礼物,即将这棵树砍成许多棵小树,每一棵小树上有一个礼物,每个人分得一棵小树。由于这棵歪脖子树实在是太大了,因此有好多好多种分法。现在,小贤决定向你询问,一共有多少种分法?不过,他对于大数据过敏,你只需要告诉他总方案数对取模的结果即可。

输入描述:

输入数据总共包含行()。

第一行一个整数,表示树的节点数,节点从开始编号。

接下来行,每行一个整数。其中第行的整数表示第个节点的父亲节点。

行共个整数,每一个整数为,表示第个节点上是否有礼物。

输出描述:

输出数据共一行,每行一个整数,表示该问题的解。如果无法保证每棵子树有且仅有个礼物,输出
示例1

输入

复制
6
0
0
1
1
3
1 0 0 0 1 1

输出

复制
5