만드는 중입니다

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

물류

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

요약
각 상점에 대해 공장 1에서 시작해 상점이 있는 공장에서 끝나는 유효한 생산 순서의 개수를 구합니다. 마지막 레벨은 상점의 판매 범위 안에 있어야 하며, 결과는 10^9+7로 나눈 나머지입니다.
난이도

어려움10점 중 8점

유형
트리, 동적 계획법, DFS
정답자
아직 제출이 없습니다

문제

세계적으로 유명한 공업 회사 Universal Manufacturing이 최근 사업을 확장하기로 했다. 이 회사는 램프부터 트랙터까지 많은 종류의 제품을 만들며, 원료에서 완제품까지 생산 과정 전체를 자사 공장에서 처리한다.

회사에는 NN개의 공장이 있으며 1…N1 \ldots N까지 번호가 매겨져 있다. 1번 공장은 본사 공장이다. 공장들은 N−1N-1개의 도로로 연결되어 있고, 본사 공장에서 이 도로들을 따라 모든 공장에 갈 수 있다고 알려져 있다.

공장 ii에는 등급 TiT_i가 있다. 이 공장은 다른 공장에 공급할 등급 TiT_i의 부품을 만들 수 있고, 같은 등급의 완제품도 만들 수 있다. 공장은 더 낮은 등급의 부품을 입력으로 쓸 수 있지만, 만들어 낸 부품이나 제품의 등급은 항상 TiT_i이다.

회사는 MM개의 매장을 열었다. 매장 ii는 공장 CiC_i에 있으며, 등급이 LiL_i부터 RiR_i까지인 제품을 판매할 수 있다. 각 제품은 공장의 열 (j1,j2,…,jc)(j_1, j_2, \ldots, j_c)을 거친다. 기초 부품은 공장 j1j_1에서 만들어 공장 j2j_2로 보내고, 공장 j2j_2에서 더 높은 등급의 부품을 만든다. 이런 식으로 공장 jcj_c까지 이어지며, 공장 jcj_c에서 완제품을 만들어 매장으로 운송한다. 기초 부품은 항상 본사 공장에서 만들므로 j1=1j_1 = 1이다. 각 공장은 등급이 더 낮은 부품만 가공할 수 있으므로, 모든 1≤i<c1 \le i < c에 대해 Tji<Tji+1T_{j_i} < T_{j_{i+1}}이 성립해야 한다.

운송은 생산 과정에서 가장 비싼 부분이다. 제품 하나를 만드는 동안에는 부품으로든 완제품으로든 어떤 공장도 두 번 이상 지나갈 수 없다. 그 공장에서 제품을 가공하지 않는 경우에도 마찬가지다. 어떤 매장에서도 팔 수 없는 제품은 판매되지 않는다.

입력

첫째 줄에 공장 수 NN (1≤N≤1051 \le N \le 10^5)이 주어진다. 둘째 줄에는 정수 P1,…,PNP_1, \ldots, P_N (1≤Pi<i1 \le P_i < i)이 주어진다. PiP_i는 공장 ii와 공장 PiP_i 사이에 도로가 있다는 뜻이다. 예외로 P1=0P_1 = 0이며, 이 경우 도로는 없다. 셋째 줄에는 공장의 등급 T1,…,TNT_1, \ldots, T_N (0≤Ti<N0 \le T_i < N)이 주어진다. T1=0T_1 = 0이고 모든 TiT_i는 서로 다르다. 넷째 줄에는 매장 수 MM (1≤M≤1051 \le M \le 10^5)이 주어진다. 마지막 MM개 줄에는 각각 정수 CiC_i, LiL_i, RiR_i (1≤Ci≤N1 \le C_i \le N, 0≤Li≤Ri<N0 \le L_i \le R_i < N)가 주어지며, 매장 ii가 공장 CiC_i에 있고 등급이 LiL_i부터 RiR_i까지인 제품을 판매할 수 있다는 뜻이다.

출력

각 매장 ii에 대해, 그 매장에서 판매할 수 있는 제품들의 모든 생산 과정에 해당하는 공장 열의 총 개수를 한 줄에 하나씩 출력한다. 이 값은 매우 클 수 있으므로, 실제 값 대신 109+710^9+7로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    8
    0 1 2 2 4 2 1 7
    0 7 5 1 3 6 4 2
    4
    5 1 4
    8 2 4
    6 1 4
    2 1 7
    
    예상 출력
    3
    2
    0
    1