이진 트리
시간 제한1초메모리 제한1024 MB
트리 T_i마다 연속된 잎 구간을 정확히 덮는 데 필요한 부분 트리 최소 개수의 합을 구합니다.
정의
모든 노드의 자식 노드가 개 또는 개인 이진 트리 에 대해 를 다음과 같이 정의한다.
- 에서 노드 를 루트로 하는 서브 트리는 와 의 자손 노드로만 이루어진 집합이다.
- 의 중위 순회 수열 는 를 중위 순회하며 방문한 노드를 순서대로 나열한 수열이다. 다음과 같이 재귀적으로 정의한다.
- 의 루트 노드를 이라 하자. 은 하나로만 이루어진 길이 의 수열이다.
- 의 자식 노드가 개이면 는 이다.
- 의 자식 노드가 개이면, 의 왼쪽 자식을 루트로 하는 서브 트리를 , 오른쪽 자식을 루트로 하는 서브 트리를 라 할 때 는 , , 를 순서대로 이어 붙인 수열이다.
- 의 리프 노드 개수를 라 하자. 의 리프 노드에 에 나타나는 순서대로, 즉 중위 순회 방문 순서대로 의 번호를 붙인다.
- 의 서브 트리를 선택하면, 그 서브 트리에 포함된 리프 노드가 덮인다고 한다.
- 일 때, 는 번호가 이상 이하인 리프 노드만 덮고 나머지 리프 노드는 덮지 않도록 에서 선택해야 하는 서브 트리의 최소 개수이다.
- 는 인 모든 정수 순서쌍 에 대한 의 합을 로 나눈 나머지이다.
(a)는 정의에 따라 만든 트리이다. (b)는 같은 트리의 리프 노드에 번호를 붙인 모습이다.


의 값은 이다. 아래 그림처럼 서브 트리 두 개를 선택하면 , , 번 리프 노드만 덮인다.

인 모든 의 합은 이다. 이를 로 나눈 나머지를 구하면 이다.
문제
정수열 과 이 주어진다.
이진 트리 을 다음과 같이 정의한다.
- 은 노드가 1개인 트리이다.
- 일 때 는 루트의 왼쪽 자식을 루트로 하는 서브 트리가 이고, 루트의 오른쪽 자식을 루트로 하는 서브 트리가 인 트리이다 (, ).
을 구하는 프로그램을 작성하라.
입력
첫 번째 줄에 정수 이 주어진다. 다음 개의 줄 중 번째 줄에는 와 가 공백으로 구분되어 주어진다.
출력
개의 줄을 출력한다. 번째 줄에는 를 출력한다.
제한
- 주어지는 모든 수는 정수이다.
- ()
- ()