부분 트리에 거리에 따라 달라지는 값을 더하는 갱신을 처리하며, 정점 하나의 가중치를 1e9+7로 나눈 나머지를 답한다.
1번 정점이 루트인 정점 NNN개짜리 트리가 주어진다. 처음에 모든 정점의 가중치는 0이다.
쿼리 QQQ개를 주어진 순서대로 처리한다. 쿼리는 두 종류다.
1 v x k
2 v
가중치는 음수가 되기도 한다. 유형 2의 답은 항상 0 이상 109+610^9+6109+6 이하의 나머지다.
첫째 줄에 정점의 개수 NNN과 쿼리의 개수 QQQ가 주어진다. (1≤N≤300 0001 \le N \le 300\,0001≤N≤300000, 1≤Q≤300 0001 \le Q \le 300\,0001≤Q≤300000)
둘째 줄에 N−1N-1N−1개의 정수 p2,p3,…,pNp_2, p_3, \dots, p_Np2,p3,…,pN이 주어진다. pkp_kpk는 정점 kkk의 부모이고 1≤pk<k1 \le p_k < k1≤pk<k를 만족한다. NNN이 1이면 둘째 줄은 빈 줄이다.
셋째 줄부터 QQQ개의 줄에 쿼리가 한 줄에 하나씩 주어진다. 각 줄의 첫 정수는 쿼리의 유형을 나타내고, 그 뒤에 유형에 맞는 정수가 이어진다.
유형 2 쿼리마다 답을 한 줄에 하나씩, 입력에 주어진 순서대로 출력한다.