N개의 정점과 N−1개의 간선으로 이루어진 트리가 있다. 각 정점에는 각각 1번부터 N번까지, 간선에는 1번부터 N−1번까지 번호가 붙어 있으며 모든 정점과 간선에는 가중치가 부여되어 있다. 이 때 다음의 쿼리를 처리하는 프로그램을 작성하시오.
최초 트리 상태와 각 변경 쿼리마다에 모든 N(N−1)/2개의 서로 다른 경로에 대하여 (경로 상의 정점 가중치의 합)×(경로 상의 간선 가중치의 합)의 합을 109+7로 나눈 나머지를 출력하시오.
첫째 줄에 정점의 수와 쿼리의 수 N과 Q가 공백을 사이에 두고 주어진다. (2≤N≤2 ×105,1≤Q≤2×105)
둘째 줄에 i번째 정점의 가중치 A_i가 공백을 사이에 두고 주어진다. (1≤A_i≤109)
셋째 줄부터 N+1번째 줄까지 i번째 간선의 정보를 의미하는 세 정수 u_i v_i w_i가 공백을 사이에 두고 주어진다. 정점 u_i와 정점 v_i 사이에 가중치가 w_i인 간선이 존재한다는 의미이다.
N+2번째 줄부터 N+Q+1번째 줄까지 각 쿼리의 정보 t i x가 공백을 사이에 두고 주어진다.
t=1 or 2이며 t=1일 경우 1≤i≤N이고 t=2일 경우 1≤i≤N−1이고, 1≤x≤109이다.
Q+1개의 줄에 걸쳐 정답을 109+7로 나눈 나머지를 출력한다.