杰哥,你带我走吧!杰哥
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

    杰哥马上就要毕业了,所以他准备跑路了,但是杰哥太受欢迎了,所以他每次跑路到一个地点,就会收到杰哥粉丝的阻拦“杰哥没有你我可怎么活啊”,阻拦的强度相当于该地点的粉丝数量的k次方,k为当前杰哥的显眼程度,显然杰哥越显眼就越容易被粉丝拦住,现在杰哥想要跑出武科大,请你帮帮忙计算一下杰哥跑路时受到阻拦的总强度。

    武科大共有n个地点,彼此之间通过n-1条路径相连成一颗树,每个地点都有一定数量的杰哥粉丝,现在有m次询问,每次询问给出u,v,k三个数,请问杰哥要从u点跑路到v点时受到的阻拦总强度是多少,我们定义总强度为在每个点受到的阻拦强度之和,每个点受到的阻拦强度为该点粉丝数量的k次方。

输入描述:

第一行包含两个整数n,m,分别表示地点的数量和询问的数量

1<=n<=1e5,1<=m<=1e5;

第二行包含n个整数,第i个整数表示i点的粉丝数量

0<=ai<=1e5;

接下来n-1行,每行两个整数u,v,表示u和v之间有一条边相连。

1<=u<=n,1<=v<=n,u!=v;

接下来m行,每行三个整数u,v,k。

1<=u<=n,1<=v<=n,1<=k<=50;

输出描述:

对于m个询问,每行给出一个整数表示受到的阻拦总强度,这个数可能很大,所以输出这个数对1e9+7取模的结果
示例1

输入

复制
10 10
1 2 6 9 5 7 3 0 3 7
2 1
3 1
4 1
5 3
6 4
7 3
8 6
9 4
10 6
1 10 39
10 2 20
2 1 40
8 10 30
1 8 41
10 9 41
1 4 21
5 10 33
10 5 35
7 4 39

输出

复制
799623122
432452045
511620084
314890220
284743477
522890787
579440655
512582070
231245785
676192001