무한 이진 트리 매장
시간 제한2초메모리 제한256 MB
주어진 유한 이진 트리를 무한 이진 트리에 매장하되 각 잎이 지정된 높이에 놓이도록 하는 경우의 수를 1e9+7로 나눈 나머지로 구한다.
문제
Vasya는 무한 이진 트리 를 하나 가지고 있다. 는 다음과 같이 형식적으로 정의된다. 에는 무한히 많은 정점이 있고, 정점 번호는 1부터 시작한다. 의 각 정점에는 왼쪽 아들과 오른쪽 아들이라는 두 자식이 있다. 정점 의 왼쪽 아들은 정점 이고, 오른쪽 아들은 정점 이다.
또한 Vasya는 또 다른 이진 트리 를 가지고 있다(다행히도 유한하다). 의 모든 정점은 내부 정점이거나 잎이다. 내부 정점에는 왼쪽 아들과 오른쪽 아들이 있고(자식들의 부모라고 부른다), 잎 정점에는 자식이 없다. 모든 정점은 부모를 정확히 하나 가지며, 부모가 없는 정점이 하나 있는데 이 정점을 트리 의 루트라고 부른다.
Vasya는 트리 를 무한 트리 에 매장하려고 한다. 형식적으로 매장은 함수 로 정의된다(여기서 는 트리 의 정점 집합이다). 이 함수는 다음 성질을 만족해야 한다. 에서 정점 가 정점 의 왼쪽 아들(또는 오른쪽 아들)이면, 에서 정점 는 정점 의 왼쪽 아들(또는 오른쪽 아들)의 부분 트리 안에 있어야 한다.
직관적으로 말하면, 매장은 의 정점들을 위의 어딘가에 배치하는 방법이다. 배치된 정점들과 그 자식들 사이에 경로를 그리면, 그림은 일부 간선이 아래로 늘어난 처럼 보인다(이 개념을 더 잘 이해하려면 예제 그림을 보면 도움이 된다).
추가로, Vasya는 각 잎 정점 에 대해 숫자 를 정했다. 이는 가 매장되어야 하는 의 정점의 높이이다(정점의 높이는 그 정점과 트리 루트 사이의 간선 수이다). 즉, 의 모든 잎 에 대해 가 성립해야 한다.
이제 Vasya는 각 잎 가 높이 인 정점에 매장되는 의 서로 다른 매장의 수를 알고 싶어 한다. 수가 매우 클 수 있으므로 로 나눈 나머지를 구한다.
입력
첫 번째 줄에는 정수 이 주어진다. 은 의 정점 수이다().
다음 개의 줄은 트리 와 숫자 를 설명한다.
번째 정점이 내부 정점이면, 번째 줄의 첫 번째 숫자는 이고, 그 뒤에 왼쪽 아들과 오른쪽 아들의 번호가 각각 주어진다.
번째 정점이 잎이면, 번째 줄의 첫 번째 숫자는 이고, 그 뒤에 이 잎의 숫자 가 주어진다. 모든 는 를 만족한다.
의 루트는 정점 이다.
출력
조건에 맞는 매장의 수를 로 나눈 나머지를 한 정수로 출력한다.
힌트
첫 번째 예제의 가능한 매장 여섯 가지(주의: 의 루트가 의 루트와 일치할 필요는 없다):

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