아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

이진 트리의 사전순 번호

시간 제한1초메모리 제한128 MB

요약
좌우 자식이 구분된 이진 트리에 대해 높이 우선 사전식 순서에서의 번호를 1000000000으로 나눈 나머지를 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 트리, 조합론, 수학
정답자
아직 제출이 없습니다

문제

루트가 있는 트리에서 모든 정점이 자식을 00개, 11개 또는 22개 가지며, 자식이 있을 때 그 자식이 왼쪽 자식인지 오른쪽 자식인지 구분되는 트리를 이진 트리라고 하자. 따라서 자식이 하나뿐인 정점도 그 자식이 왼쪽인지 오른쪽인지에 따라 서로 다른 트리가 된다.

트리의 높이는 루트에서 어떤 잎까지 가는 경로 중 가장 긴 경로에 놓인 정점의 개수이다. 빈 트리의 높이는 00이다.

이진 트리들 사이에는 다음과 같은 사전순 순서가 정의된다. 트리 AA가 트리 BB보다 사전순으로 작다는 것은 다음 중 하나가 성립하는 경우이다.

  • AA의 높이가 BB의 높이보다 작다.
  • AA와 BB의 높이가 같고, 다음 중 하나가 성립한다.
    • AA의 왼쪽 부분 트리가 BB의 왼쪽 부분 트리보다 사전순으로 작다.
    • AA와 BB의 왼쪽 부분 트리가 같고, AA의 오른쪽 부분 트리가 BB의 오른쪽 부분 트리보다 사전순으로 작다.

어떤 정점에 왼쪽 자식이 없으면 그 정점의 왼쪽 부분 트리는 빈 트리로 본다. 오른쪽 자식이 없는 경우도 마찬가지이다.

두 트리 AA와 BB가 서로 다르고 AA가 BB보다 사전순으로 작지 않으면, AA는 BB보다 사전순으로 크다.

이 순서에 따라 모든 이진 트리에 번호를 매긴다. 정점이 하나뿐인 트리의 번호는 11이다. 주어진 트리의 번호를 1 000 000 0001\,000\,000\,000으로 나눈 나머지를 구하여라.

입력

첫째 줄에 트리의 개수 tt (1≤t≤1 0001 \le t \le 1\,000)가 주어진다.

이어서 tt개의 트리 설명이 주어진다. 각 트리 설명의 첫째 줄에는 정점의 개수 nn (1≤n≤2 0001 \le n \le 2\,000)이 주어진다. 정점은 11번부터 nn번까지 번호가 매겨져 있으며, 11번 정점이 루트이다.

그다음 nn개의 줄에 각 정점의 자식 정보가 주어진다. ii번째 줄에는 두 정수 lil_i와 rir_i가 주어지며, 각각 ii번 정점의 왼쪽 자식과 오른쪽 자식의 번호이다. ii번 정점에 왼쪽 자식이 없으면 li=−1l_i = -1이고, 오른쪽 자식이 없으면 ri=−1r_i = -1이다.

출력

정확히 tt개의 줄을 출력한다. ii번째 줄에는 ii번째 트리의 번호를 1 000 000 0001\,000\,000\,000으로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    4
    1
    -1 -1
    2
    -1 2
    -1 -1
    2
    2 -1
    -1 -1
    3
    2 3
    -1 -1
    -1 -1
    
    예상 출력
    1
    2
    3
    4