카르테시안 트리
시간 제한5초메모리 제한512 MB
1부터 N까지의 순열이 만드는 카르테시안 트리 중 두 자식을 가진 노드의 자식 위치 차이 합이 S 이하인 순열의 개수를 소수로 나눈 나머지를 구한다.
문제
서로 다른 정수로 이루어진 수열 하나에서 카르테시안 트리가 유일하게 정해진다. 카르테시안 트리는 다음 네 조건을 만족하는 트리이다.
- 루트가 있는 이진 트리이다.
- 각 노드는 의 원소 하나에 대응한다.
- 트리를 인오더로 순회하면 와 순서가 같다.
- 부모 노드의 값이 자식 노드의 값보다 작다. 즉 최소 힙이다.
아래 그림은 로 만든 카르테시안 트리이다.

수열 로 만든 카르테시안 트리를 라고 하자. 의 점수는 이렇게 구한다. 자식이 두 개인 노드마다 두 자식의 값이 에서 놓인 위치를 찾고, 두 위치의 차이를 구한다. 이 차이를 그런 노드 전체에서 더한 값이 의 점수이다.
위 그림에서 자식이 두 개인 노드는 1, 3, 10, 15이다. 노드 1의 두 자식은 3과 5이고 에서 각각 2번째와 11번째에 있으므로 이 노드의 점수는 이다. 나머지 세 노드의 점수는 각각 2, 3, 2이므로 의 점수는 이다.
, , 가 주어진다. 부터 까지의 수로 이루어진 순열은 모두 개이고, 각 순열은 카르테시안 트리를 하나씩 만든다. 점수가 이하인 트리의 개수를 라고 할 때, 를 로 나눈 나머지를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 , , 가 공백으로 구분되어 주어진다. (, , , 는 소수)
출력
첫째 줄에 개의 순열 중에서 트리의 점수가 이하인 것의 개수를 로 나눈 나머지를 출력한다.
힌트
일 때 순열 과 의 점수는 2이고, 나머지 네 순열의 점수는 0이다.