#P5426. 星之卡比
星之卡比
Description
星之卡比的地图是一个由N个点组成的树,每个节点拥有一个荣誉值。游戏设定了M个子任务,对应了树上的M条路 径。每个子任务也有一个荣誉值,等于这条路径上所有节点的荣誉值之积。小F决定设计一些任务列表,每个任务 列表包含K个子任务,玩家需要依次完成这些子任务。一个任务列表中允许包含多个相同的子任务,但必须满足: 1.任意两个子任务的荣誉值之积都为完全平方数。 2.不存在P(P>1),使得任务列表能被分成长度相等的P段,且这P段完全相同。(老是玩同样模式的子任务很容易就无聊啦。。。) 现在的小F想知道,当K分别等于1..M的时候,他能够设计多少种任务列表呢? 由于答案可能很大,所以对输出的答案mod 1000000007。
Format
Input
第一行包含两个数N和M
第二行包含N个数,依次表示每个节点的荣誉值
接下来N-1行,每行两个数x、y,描述一条连接节点x与y的边
接下来M行,每行两个数x、y,描述一个子任务为树上x到y的路径
N,M≤2000,所有输入数据都为不超过10^5的正整数,保证输入数据合法
Output
包含M个数,分别表示K=1..M的时候,能够设计的任务列表的种类数
Samples
5 3
2 2 2 2 3
1 2
1 3
3 4
3 5
2 4
1 5
4 5
3 2 6
Hint 样例解释
子任务1、2、3的荣誉值分别为16、12、12
K=1,任务列表为{1} {2} {3}
K=2,任务列表为{2,3} {3,2}
K=3,任务列表为{2,2,3} {2,3,2} {2,3,3}{3,2,2} {3,2,3} {3,3,2}