平日里写hash的时候,总有某些选手由于脸黑而导致惨遭卡模数,然后一些恶意卡模数的出题人也因此身败名裂。为了防止被卡,我们用一种高级的随机方式来代替原来的线性随机生成,也就是所谓的随机树!
现在有一棵编号为0~n-1的有根树,其中0是树的根。每个节点初始有一个值Ti。现在要求支持一下两种操作:
1. 给出两个正整数u和x,我们将Tu的值乘以x,我们将这种操作称为SEED操作。
2. 给出一个正整数i,询问Si以及它一共有多少个正约数。其中Si表示以i为根的子树所有点的权值的乘积,我们将这种操作称为RAND操作。
容易发现,这样得到的答案还是很随机的。(其实不是)
你需要回答每一次的询问,由于一个数的约数个数可能非常多,这个数也可以非常大,你只需要把答案对1e9+7取模就可以了。
第一行一个正整数n,表示节点个数。
接下来n-1行,每行两个正整数u和v,表示u是v的父节点。
接下来一行n个正整数,分别表示每个节点的初始权值Ti。
接下来一行一个正整数q,表示操作的个数。
接下来q行,每行是以下两种情况之一:
1. SEED u x
表示将u节点的权值乘以x。
2. RAND i
表示询问Si以及它一共有多少个正约数。
每一行两个整数,对应一个RAND操作,你需要输出所求的权值以及它的正约数个数,答案对于1e9+7取模即可。
对于20%的数据,1 ≤ n, q ≤ 10。
对于40%的数据,1 ≤ n, q ≤ 100。
对于60%的数据,1 ≤ n, q ≤ 2000。
对于80%的数据,1 ≤ n, q ≤ 50000。
对于100%的数据,1 ≤ n, q ≤ 100000。另外请注意,所有读入的数一定满足1 ≤ x ≤ 109 。同时,数据保证在任意时刻,每个点的权值不可能拥有超过13的素因子,也就是说,每个数的素因子最多只有2,3,5,7,11,13这六种可能。