만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Meow

시간 제한0.5초메모리 제한1024 MB

요약
값이 1부터 L까지 순서대로 있는 노드 열이 조상-자손 관계를 이루는 경우의 수를 세고, 값이 바뀔 때마다 그 수의 가중합을 구합니다.
난이도

어려움10점 중 9점

유형
트리, 동적 계획법, 세그먼트 트리, 분할 정복
정답자
아직 제출이 없습니다

문제

CS 동아리에 새로운 포켓몬 Meow2가 있다. 나무를 좋아하는 Meow2에게는 정점이 NN개인 루트 트리가 하나 있다. 정점은 00부터 N−1N-1까지 번호가 매겨져 있고, 루트는 00번 정점이다. 0번이 아닌 정점 ii의 부모 번호는 ii보다 작다. 각 정점에는 11 이상 LL 이하의 정수 값이 하나씩 붙어 있다.

Meow2는 길이가 LL인 배열 S=[1,2,…,L]S=[1,2,\dots,L]도 가지고 있다. 그는 트리에서 SS가 나타나는 횟수를 세고 싶어 한다. 정확히는, 정점 AiA_i의 값이 ii이고 1≤i<L1 \le i < L인 모든 ii에 대해 정점 AiA_i가 정점 Ai+1A_{i+1}의 조상인 수열 A1,A2,…,ALA_1, A_2, \dots, A_L의 개수를 센다.

Meow2는 처음 트리를 계속 바꾼다. 길이가 QQ인 변경 배열 PP가 있다. ii번째 단계(0≤i<Q0 \le i < Q)에서 정점 i mod Ni \bmod N의 값을 PiP_i로 바꾼다. 여기서 1≤Pi≤L1 \le P_i \le L이다.

변경할 때마다 트리에서 SS가 나타나는 횟수를 알고 싶다. ansians_i를 ii번째 변경 후의 출현 횟수라고 하자. 다음 값을 구하라.

O=1×ans0+2×ans1+⋯+Q×ansQ−1O = 1 \times ans_0 + 2 \times ans_1 + \dots + Q \times ans_{Q-1}

입력

첫 줄에는 세 정수 NN, LL, QQ가 주어진다.

둘째 줄에는 길이가 N−1N-1인 배열 FF가 주어진다. FiF_i는 정점 ii의 부모이다.

셋째 줄에는 길이가 NN인 배열이 주어진다. 각 정점의 초기 값이다.

이어지는 QQ개의 줄에는 각각 한 단계에서 트리에 가하는 변경을 나타내는 정수가 하나씩 주어진다.

출력

109+710^9+7로 나눈 나머지인 정수 OO를 한 줄에 출력한다.

제한

  • 1≤N≤1051 \le N \le 10^5
  • 1≤L≤N1 \le L \le N
  • 1≤Q≤2×1051 \le Q \le 2 \times 10^5

힌트

각 변경 후의 답은 순서대로 0,0,1,1,2,20, 0, 1, 1, 2, 2이다.

아래 그림은 첫 번째 변경 후의 트리이다.

예제1

  1. 예제 1

    입력
    6 2 6
    0 1 0 3 0
    1 2 1 2 1 2
    2
    1
    2
    1
    2
    1
    
    예상 출력
    29