雷顿女士与平衡树
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

卡特莉正在爬树,此时她又在树梢发现了一个谜题,为了不令她分心以至于发生意外,请你帮她解决这个问题。


具体地来说,我们定义树上从u到v简单路径上所有点权中最大值与最小值的差值为这条路径的"平衡值",记为balance(u,v)。


一棵树的

输入描述:

第一行输入一个T(1<=T<=10)表示数据组数。

接下来T组数据。

对于每组数据,第一行输入一个n(1<=n<=500000)。保证n的总和不大于2000000

然后接下来一行输入n个数字,第i个数字表示标号为i的点的权值()。

然后输入n-1行,每行包含两个数u、v,表示一条边连接u与v。
保证输入n-1条边将标号1至标号n组成一棵树。

输出描述:

对于每组数据,请你输出一个数表示输入的树的BALANCE值,由于答案可能很大,请将答案对1000000007取模后输出。
请注意行末不要输出多余空格。
示例1

输入

复制
1
10
9 9 6 2 4 5 8 5 5 6
2 1
3 1
4 3
5 3
6 4
7 2
8 4
9 5
10 3

输出

复制
179