모든 노드의 자식 노드가 0개 또는 2개인 이진 트리 T에 대해 S(T)의 값은 다음과 같이 정의한다.
-
T에서 노드 u를 루트로 하는 서브 트리는, u와 u의 자손 노드들로만 구성된 집합이다.
-
T의 중위 순회 수열 p(T)는 T를 중위 순회하면서 방문하는 노드들을 순서대로 나열한 수열로, 아래와 같이 정의할 수 있다.
- T의 루트 노드를 r이라 하자. [r]을 r 하나로만 구성된 길이 1의 수열이라고 하자.
- 만약 r의 자식 노드가 0개라면, p(T)는 [r]이다.
- 만약 r의 자식 노드가 2개라면, r의 왼쪽 자식 노드를 루트로 하는 서브 트리가 X, r의 오른쪽 자식 노드를 루트로 하는 서브 트리가 Y일 때, p(T)는 p(X), [r], p(Y)을 순서대로 이어붙인 수열이다.
-
T의 리프 노드 개수를 k라고 하자. T의 리프 노드들에 1,2,⋯,k의 번호를 p(T)에서 나타나는 순서대 로 (즉, 중위 순회 방문 순서대로) 붙였다고 하자.
-
T의 서브 트리를 선택하면, 해당 서브 트리에 포함된 리프 노드들이 덮인다고 하자.
-
1≤a≤b≤k일 때, f(a,b)는 리프 노드들 중 번호가 a 이상 b 이하인 리프 노드들만을 덮고 다른 리프 노드들은 덮지 않기 위해, T에서 선택해야 하는 최소 서브 트리 개수이다.
-
S(T)의 값은 1≤a≤b≤k인 모든 (a,b) 정수 순서쌍에 대한 f(a,b)의 합을 109+7로 나눈 나머지이다.
예를 들어, 다음과 같은 이진 트리 T가 있다고 가정해보자.
 |  |
|---|
| (a) 만든 트리 | (b) 리프 노드에 번호를 붙인 트리 |
f(5,7)의 값은 2이다. 다음과 같이 서브 트리 두 개를 선택하면 5, 6, 7번 리프 노드만 덮이기 때문이다.

이런 식으로 모든 1≤a≤b≤7에 대해 f(a,b)의 값의 합은 47이고, 이를 109+7로 나눈 나머지를 구하면 S(T)=47이다.
정수열 A1,A2,⋯,AN과 B1,B2,⋯,BN이 주어진다.
이진 트리 T0,T1,⋯,TN을 다음과 같이 정의한다.
- T0은 노드가 1개인 트리
- Ti 는 루트의 왼쪽 자식 노드를 루트로 하는 서브 트리가 TAi이고, 루트의 오른쪽 자식 노드를 루트로 하는 서브 트리가 TBi인 트리 (1≤i≤N, 0≤Ai≤i−1, 0≤Bi≤i−1)
S(T1),S(T2),⋯,S(TN)을 구하는 프로그램을 작성하라.
Limit
- 주어지는 모든 수는 정수이다.
- 1≤N≤100000
- 0≤Ai≤i−1 (1≤i≤N)
- 0≤Bi≤i−1 (1≤i≤N)
Subtask
| 번호 | 배점 | 제한 |
|---|
| 1 | 5 | Ai=Bi=i−1 (1≤i≤N), N≤10 |
| 2 | 10 | Ai=Bi=i−1 (1≤i≤N) |
| 3 | 5 | Ai=i−1, Bi=0 (1≤i≤N) |
| 4 | 10 | T1,T2,⋯,TN의 노드 개수의 합은 1000 이하 |
| 5 | 25 | T1,T2,⋯,TN의 노드 개수의 합은 300000 이하 |
| 6 | 45 | 추가 제약 조건 없음. |
Sample Explain 1
위 예제에서 T4는 아래 그림과 같다.

채점 및 기타 정보