다리를 끊는 야만인

트리의 간선을 하나씩 지우며, 각 삭제마다 각 정점의 분노에 (삭제 전 도달 가능 수) - (삭제 후 도달 가능 수) + 1을 곱하고, 삭제 후 전체 분노의 합을 10^9+7로 나눈 나머지를 출력한다.

어려움8트리유니온 파인드수학구현아직 제출이 없습니다시간 제한4초메모리 제한512 MB

문제

nn개로 이루어진 나라가 있다. 섬은 다리 n1n - 1개로 이어져 있고, 어떤 두 섬 사이에도 같은 섬을 두 번 지나지 않고 오가는 길이 정확히 하나뿐이다.

야만인이 이 나라를 공격했다. 다리가 약점이라는 것을 알아챈 야만인은 다리를 하나씩 차례로 끊는다. 섬 ii에 사는 사람의 처음 분노는 aia_i이다.

다리 하나가 끊어질 때 분노는 이렇게 바뀐다. 섬 xx를 보자. 다리가 끊어지기 전에 섬 xx의 사람이 갈 수 있는 섬의 수를 aa, 끊어진 뒤에 갈 수 있는 섬의 수를 bb라고 하자. 두 값 모두 섬 xx 자신을 포함한다. 그러면 섬 xx의 분노에 ab+1a - b + 1을 곱한다.

질문은 n1n - 1개 들어온다. 각 질문은 정수 두 개 uuvv로 이루어진다. 직전 질문의 답을 resres라고 하면, 이 질문이 끊는 다리는 섬 u+resu + res와 섬 v+resv + res를 잇는 다리다. 첫 질문에서는 res=0res = 0으로 본다.

그 다리를 끊은 뒤 섬 ii의 분노를 bib_i라고 하자. (b1+b2++bn)(b_1 + b_2 + \cdots + b_n)109+710^9 + 7로 나눈 나머지를 새로운 resres로 정하고, 그 값을 출력한다.

첫 번째 예제로 질문 형식을 확인해 보자. 섬이 5개이고 처음 분노는 1 2 3 4 5이다. 첫 질문은 res=0res = 0이므로 섬 3과 섬 1을 잇는 다리를 끊는다. 섬 1과 섬 2의 분노에는 4가 곱해지고 나머지 세 섬의 분노에는 3이 곱해져서 분노는 4 8 9 12 15가 된다. 합이 48이므로 resres는 48이 되고 48을 출력한다. 다음 질문에 47-4746-46이 들어오면 실제로 끊는 다리는 섬 (47)+48=1(-47) + 48 = 1과 섬 (46)+48=2(-46) + 48 = 2를 잇는 다리다.

입력

첫 줄에 섬의 수 nn이 주어진다. (2n2×1052 \le n \le 2 \times 10^5)

둘째 줄에 처음 분노를 나타내는 정수 nna1,a2,,ana_1, a_2, \ldots, a_n이 주어진다. (1ai109+61 \le a_i \le 10^9 + 6)

다음 n1n - 1개 줄에 다리를 나타내는 정수 두 개 uiu_i, viv_i가 주어진다. (1ui,vin1 \le u_i, v_i \le n) 어떤 두 섬 사이에도 오가는 길이 정확히 하나뿐임이 보장된다.

다음 n1n - 1개 줄에 질문이 문제에서 설명한 형식으로 하나씩 주어진다. 질문이 가리키는 다리는 항상 존재하고 아직 끊어지지 않았음이 보장되며, 그 다리의 두 끝 섬 번호는 모두 1 이상 nn 이하다.

출력

질문마다 resres 값을 질문이 들어온 순서대로 한 줄에 하나씩 출력한다.