60021 이진 트리

시간 제한: 1초 메모리 제한: 1024MB

문제

모든 노드의 자식 노드가 00개 또는 22개인 이진 트리 TT에 대해 S(T)S(T)의 값은 다음과 같이 정의한다.

  • TT에서 노드 uu를 루트로 하는 서브 트리는, uuuu의 자손 노드들로만 구성된 집합이다.
  • TT중위 순회 수열 p(T)p(T)TT를 중위 순회하면서 방문하는 노드들을 순서대로 나열한 수열로, 아래와 같이 정의할 수 있다.
    • TT의 루트 노드를 rr이라 하자. [r][r]rr 하나로만 구성된 길이 11의 수열이라고 하자.
  • 만약 rr의 자식 노드가 00개라면, p(T)p(T)[r][r]이다.
  • 만약 rr의 자식 노드가 22개라면, rr의 왼쪽 자식 노드를 루트로 하는 서브 트리가 XX, rr의 오른쪽 자식 노드를 루트로 하는 서브 트리가 YY일 때, p(T)p(T)p(X)p(X), [r][r], p(Y)p(Y)을 순서대로 이어붙인 수열이다.
  • TT의 리프 노드 개수를 kk라고 하자. TT의 리프 노드들에 1,2,,k1, 2, \cdots , k의 번호를 p(T)p(T)에서 나타나는 순서대 로 (즉, 중위 순회 방문 순서대로) 붙였다고 하자.
  • TT의 서브 트리를 선택하면, 해당 서브 트리에 포함된 리프 노드들이 덮인다고 하자.
  • 1abk1 ≤ a ≤ b ≤ k일 때, f(a,b)f(a, b)는 리프 노드들 중 번호가 aa 이상 bb 이하인 리프 노드들만을 덮고 다른 리프 노드들은 덮지 않기 위해, TT에서 선택해야 하는 최소 서브 트리 개수이다.
  • S(T)S(T)의 값은 1abk1 ≤ a ≤ b ≤ k인 모든 (a,b)(a, b) 정수 순서쌍에 대한 f(a,b)f(a, b)의 합을 109+710^9+7로 나눈 나머지이다.

예를 들어, 다음과 같은 이진 트리 TT가 있다고 가정해보자.

(a) 만든 트리(b) 리프 노드에 번호를 붙인 트리

f(5,7)f(5, 7)의 값은 22이다. 다음과 같이 서브 트리 두 개를 선택하면 55, 66, 77번 리프 노드만 덮이기 때문이다.

이런 식으로 모든 1ab71 ≤ a ≤ b ≤ 7에 대해 f(a,b)f(a, b)의 값의 합은 4747이고, 이를 109+710^9 + 7로 나눈 나머지를 구하면 S(T)=47S(T) = 47이다.

정수열 A1,A2,,ANA_1, A_2, \cdots , A_NB1,B2,,BNB_1, B_2, \cdots , B_N이 주어진다.

이진 트리 T0,T1,,TNT_0, T_1, \cdots , T_N을 다음과 같이 정의한다.

  • T0T_0은 노드가 11개인 트리
  • TiT_i 는 루트의 왼쪽 자식 노드를 루트로 하는 서브 트리가 TAiT_{A_i}이고, 루트의 오른쪽 자식 노드를 루트로 하는 서브 트리가 TBiT_{B_i}인 트리 (1iN1 ≤ i ≤ N, 0Aii10 ≤ A_i ≤ i - 1, 0Bii10 ≤ B_i ≤ i - 1)

S(T1),S(T2),,S(TN)S(T_1), S(T_2), \cdots , S(T_N)을 구하는 프로그램을 작성하라.

입력

첫 번째 줄에 정수 NN이 주어진다.

다음 NN개의 줄 중 ii (1iN1 ≤ i ≤ N)번째 줄에는 AiA_iBiB_i가 공백으로 구분되어 주어진다.

출력

NN개의 줄을 출력한다. ii (1iN1 ≤ i ≤ N)번째 줄에는 S(Ti)S(T_i)를 출력해야 한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 1N1000001 ≤ N ≤ 100\, 000
  • 0Aii10 ≤ A_i ≤ i - 1 (1iN1 ≤ i ≤ N)
  • 0Bii10 ≤ B_i ≤ i - 1 (1iN1 ≤ i ≤ N)

서브태스크

15Ai=Bi=i1A_i = B_i = i - 1 (1iN1 ≤ i ≤ N), N10N ≤ 10
210Ai=Bi=i1A_i = B_i = i - 1 (1iN1 ≤ i ≤ N)
35Ai=i1A_i = i - 1, Bi=0B_i = 0 (1iN1 ≤ i ≤ N)
410T1,T2,,TNT_1, T_2, \cdots , T_N의 노드 개수의 합은 10001\, 000 이하
525T1,T2,,TNT_1, T_2, \cdots , T_N의 노드 개수의 합은 300000300\, 000 이하
645추가 제약 조건 없음.

힌트

예제 1

위 예제에서 T4T_4는 아래 그림과 같다.

예제 입출력

예제 입력 1
5
0 0
1 0
1 2
3 1
4 4
예제 출력 1
3
7
21
47
254
예제 입력 2
7
0 0
1 1
2 2
3 3
4 4
5 5
6 6
예제 출력 2
3
13
65
337
1729
8641
41985

출처

올림피아드 한국정보올림피아드 KOI 2024 1차 중등부 3번 고등부 2번
solution.cpp
에디터 불러오는 중...