간단한 트리 문제

아직 제출이 없습니다시간 제한8초메모리 제한1024 MB

문제

NN개의 정점과 N1N-1개의 간선으로 이루어진 트리가 있다. 각 정점에는 각각 11번부터 NN번까지, 간선에는 11번부터 N1N-1번까지 번호가 붙어 있으며 모든 정점과 간선에는 가중치가 부여되어 있다. 이 때 다음의 쿼리를 처리하는 프로그램을 작성하시오.

  • 11 ii xx : ii번 정점의 가중치를 xx로 변경한다.
  • 22 ii xx : ii번 간선의 가중치를 xx로 변경한다.

최초 트리 상태와 각 변경 쿼리마다에 모든 N(N1)/2N(N-1)/2개의 서로 다른 경로에 대하여 (경로 상의 정점 가중치의 합)×\times(경로 상의 간선 가중치의 합)의 합을 109+710^9+7로 나눈 나머지를 출력하시오.

입력

첫째 줄에 정점의 수와 쿼리의 수 NNQQ가 공백을 사이에 두고 주어진다. (2N2  ×105,1Q2×1052 \leq N \leq 2 \ \times 10^5, 1 \leq Q \leq 2 \times 10^5)

둘째 줄에 i번째 정점의 가중치 A_iA\_i가 공백을 사이에 두고 주어진다. (1A_i1091 \leq A\_i \leq 10^9)

셋째 줄부터 N+1N+1번째 줄까지 ii번째 간선의 정보를 의미하는 세 정수 u_iu\_i v_iv\_i w_iw\_i가 공백을 사이에 두고 주어진다. 정점 u_iu\_i와 정점 v_iv\_i 사이에 가중치가 w_iw\_i인 간선이 존재한다는 의미이다.

N+2N+2번째 줄부터 N+Q+1N+Q+1번째 줄까지 각 쿼리의 정보 tt ii xx가 공백을 사이에 두고 주어진다.

t=1t=1 or 22이며 t=1t=1일 경우 1iN1 \leq i \leq N이고 t=2t=2일 경우 1iN11 \leq i \leq N-1이고, 1x1091 \leq x \leq 10^9이다.

출력

Q+1Q+1개의 줄에 걸쳐 정답을 109+710^9+7로 나눈 나머지를 출력한다.