거의 깨끗한 돈의 트리

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

문제

정점 NN개로 이루어진 트리에서 돈이 자란다. 정점에는 00번부터 N1N-1번까지 번호가 붙어 있고, 00번 정점이 루트다. 00번을 제외한 모든 정점 ii에는 부모 p(i)p(i)가 있으며 p(i)<ip(i) < i를 만족한다. 처음에 정점 ii에는 화폐 v(i)v(i)단위가 들어 있다.

어떤 조직이 이 트리에 연산 QQ개를 수행한다. 각 연산은 두 단계로 이루어진다.

  1. 트리에서 정점 KKx(1),,x(K)x(1), \dots, x(K)를 고른다 (0x(i)N10 \le x(i) \le N-1). 같은 정점을 여러 번 골라도 된다. 1iK1 \le i \le K인 각 ii에 대해 정점 x(i)x(i)에 화폐 y(i)y(i)단위를 더한다.
  2. 정점 두 개 uuvv를 고른다 (0u,vN10 \le u, v \le N-1). uuvv를 잇는 유일한 경로 위에 놓인 정점에 들어 있는 화폐의 총합을 구한다. 양 끝인 uuvv도 경로에 포함한다.

각 연산의 2단계 답을 구하라.

제한은 다음과 같다.

  • 1N5000001 \le N \le 500000
  • 1Q500001 \le Q \le 50000
  • 1K10001 \le K \le 1000
  • 0v(i)<10000000070 \le v(i) < 1000000007
  • 0y(i)<10000000070 \le y(i) < 1000000007

입력

첫째 줄에 정점의 개수 NN이 주어진다. 다음 N1N-1개의 줄에는 트리의 간선 하나를 나타내는 두 정수 p(i)p(i)ii가 공백으로 구분되어 주어진다. 다음 줄에는 각 정점의 처음 금액 v(0),,v(N1)v(0), \dots, v(N-1)이 공백으로 구분되어 주어진다.

다음 줄에는 연산의 개수 QQ가 주어진다. 이어지는 QQ개의 줄에는 연산 하나가 정수 아홉 개로 주어지며, 순서는 KK, x(1)x(1), y(1)y(1), AA, BB, CC, DD, uu, vv이다 (0A,B,C,D<10000000070 \le A, B, C, D < 1000000007). 직접 주어지는 값은 x(1)x(1)y(1)y(1)뿐이고, 2iK2 \le i \le K인 나머지는 다음 식으로 만든다.

x(i)=(Ax(i1)+B)modNx(i) = (A \cdot x(i-1) + B) \bmod N

y(i)=(Cy(i1)+D)mod1000000007y(i) = (C \cdot y(i-1) + D) \bmod 1000000007

출력

QQ개의 줄을 출력한다. jj번째 줄에는 jj번째 연산의 2단계 답을 출력한다. 1단계에서 더한 금액은 정점에 그대로 남으므로, 각 연산은 앞선 연산의 1단계와 자기 자신의 1단계를 모두 반영한 상태에서 답을 계산한다.

답은 32비트 정수의 범위를 넘을 수 있다.

힌트

첫 번째 예제의 연산 1은 A=C=1A = C = 1, B=D=0B = D = 0이므로 정점 11에 값 11을 1000번 더한다. 00번과 22번을 잇는 경로는 정점 00, 11, 22를 지나고, 세 정점에 든 금액의 합은 10061006이다.

연산 2에서는 x(1)=0x(1)=0, y(1)=5y(1)=5, x(2)=1x(2)=1, y(2)=12y(2)=12가 되고, 22번과 33번을 잇는 경로는 트리의 정점을 모두 지난다.

연산 3은 K=1K = 1이므로 AA, BB, CC, DD를 쓰지 않는다.