만드는 중입니다

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

무한 이진 트리 매장

시간 제한2초메모리 제한256 MB

요약
주어진 유한 이진 트리를 무한 이진 트리에 매장하되 각 잎이 지정된 높이에 놓이도록 하는 경우의 수를 1e9+7로 나눈 나머지로 구한다.
난이도

어려움10점 중 8점

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

문제

Vasya는 무한 이진 트리 TT를 하나 가지고 있다. TT는 다음과 같이 형식적으로 정의된다. TT에는 무한히 많은 정점이 있고, 정점 번호는 1부터 시작한다. TT의 각 정점에는 왼쪽 아들과 오른쪽 아들이라는 두 자식이 있다. 정점 ii의 왼쪽 아들은 정점 2i2i이고, 오른쪽 아들은 정점 2i+12i+1이다.

또한 Vasya는 또 다른 이진 트리 GG를 가지고 있다(다행히도 유한하다). GG의 모든 정점은 내부 정점이거나 잎이다. 내부 정점에는 왼쪽 아들과 오른쪽 아들이 있고(자식들의 부모라고 부른다), 잎 정점에는 자식이 없다. 모든 정점은 부모를 정확히 하나 가지며, 부모가 없는 정점이 하나 있는데 이 정점을 트리 GG의 루트라고 부른다.

Vasya는 트리 GG를 무한 트리 TT에 매장하려고 한다. 형식적으로 매장은 함수 f:V(G)→V(T)f: V(G) \rightarrow V(T)로 정의된다(여기서 V(X)V(X)는 트리 XX의 정점 집합이다). 이 함수는 다음 성질을 만족해야 한다. GG에서 정점 vv가 정점 uu의 왼쪽 아들(또는 오른쪽 아들)이면, TT에서 정점 f(v)f(v)는 정점 f(u)f(u)의 왼쪽 아들(또는 오른쪽 아들)의 부분 트리 안에 있어야 한다.

직관적으로 말하면, 매장은 GG의 정점들을 TT 위의 어딘가에 배치하는 방법이다. 배치된 정점들과 그 자식들 사이에 경로를 그리면, 그림은 일부 간선이 아래로 늘어난 GG처럼 보인다(이 개념을 더 잘 이해하려면 예제 그림을 보면 도움이 된다).

추가로, Vasya는 각 잎 정점 vv에 대해 숫자 hvh_v를 정했다. 이는 vv가 매장되어야 하는 TT의 정점의 높이이다(정점의 높이는 그 정점과 트리 루트 사이의 간선 수이다). 즉, GG의 모든 잎 vv에 대해 height(f(v))=hv\text{height}(f(v)) = h_v가 성립해야 한다.

이제 Vasya는 각 잎 vv가 높이 hvh_v인 정점에 매장되는 GG의 서로 다른 매장의 수를 알고 싶어 한다. 수가 매우 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 구한다.

입력

첫 번째 줄에는 정수 nn이 주어진다. nn은 GG의 정점 수이다(1≤n≤20001 \leq n \leq 2000).

다음 nn개의 줄은 트리 GG와 숫자 hvh_v를 설명한다.

ii번째 정점이 내부 정점이면, ii번째 줄의 첫 번째 숫자는 00이고, 그 뒤에 왼쪽 아들과 오른쪽 아들의 번호가 각각 주어진다.

ii번째 정점이 잎이면, ii번째 줄의 첫 번째 숫자는 11이고, 그 뒤에 이 잎의 숫자 hih_i가 주어진다. 모든 hih_i는 0≤hi≤1090 \leq h_i \leq 10^9를 만족한다.

GG의 루트는 정점 11이다.

출력

조건에 맞는 매장의 수를 109+710^9 + 7로 나눈 나머지를 한 정수로 출력한다.

힌트

첫 번째 예제의 가능한 매장 여섯 가지(주의: GG의 루트가 TT의 루트와 일치할 필요는 없다):

두 번째 예제의 가능한 매장 열네 가지:

예제4

  1. 예제 1

    입력
    3
    0 2 3
    1 2
    1 2
    
    예상 출력
    6
    
  2. 예제 2

    입력
    5
    0 2 3
    0 4 5
    1 2
    1 3
    1 3
    
    예상 출력
    14
    
  3. 예제 3

    입력
    3
    0 2 3
    1 0
    1 0
    
    예상 출력
    0
    
  4. 예제 4

    입력
    1
    1 0
    
    예상 출력
    1