树上路径平方和

题目描述

Y 同学拥有一棵包含 NN 个节点的树,节点编号从 11NN。初始时,每个节点 ii 上都有一个整数权值 AiA_i

为了深入研究树上结构的代数性质,Y 同学需要对这棵树执行 MM 次操作。操作共分为以下两种类型:

  • 1 u v x:将节点 uu 到节点 vv 的简单路径上所有节点的权值均加上 xx
  • 2 u v:查询节点 uu 到节点 vv 的简单路径上所有节点权值的平方和。

具体而言,若路径上的节点集合为 SS,则类型 22 操作需要计算:

$$\left( \sum_{i \in S} A_i^2 \right) \bmod (10^9 + 7) $$

Y 同学希望你能编写一个程序,帮助他快速处理这些操作。

输入格式

第一行包含两个正整数 NNMM,分别表示树的节点数和操作次数。 第二行包含 NN 个整数 A1,A2,,ANA_1, A_2, \dots, A_N,表示各节点的初始权值。 接下来的 N1N-1 行,每行包含两个正整数 u,vu, v,表示节点 uu 与节点 vv 之间存在一条边。 接下来的 MM 行,每行描述一个操作。格式为 1 u v x2 u v

输出格式

对于每个类型 22 的查询,输出一行一个整数,表示该路径上节点权值的平方和对 109+710^9 + 7 取模后的结果。

样例

样例输入 #1

5 5
1 2 3 4 5
1 2
2 3
3 4
2 5
2 1 4
1 1 4 2
2 1 4
1 3 5 1
2 1 5

样例输出 #1

26
74
54

数据范围与约定

对于 100%100\% 的数据,保证 1N,M1051 \le N, M \le 10^50Ai,x1090 \le A_i, x \le 10^91u,vN1 \le u, v \le N

子任务编号 分值 N,MN, M \le 特殊性质
1 20 1000
2 30 10510^5 A
3 20 B
4 30

特殊性质 A:保证给定的树是一条链,即第 ii 条边连接节点 iii+1i+1。 特殊性质 B:保证所有的操作均为类型 22 操作(即不存在修改操作)。