이진 검색 트리는 이진 트리이며, 비어 있을 수도 있다. 비어 있지 않은 이진 검색 트리는 다음 성질을 만족한다.
이진 검색 트리 T에서 키 k를 찾는 과정은 다음과 같다. 루트에서 시작하며, T가 비어 있으면 검색은 실패한다. 비어 있지 않으면 루트의 키와 k를 비교한다. 두 값이 같으면 검색은 성공으로 끝난다. k가 루트의 키보다 작으면 왼쪽 서브 트리에서, 크면 오른쪽 서브 트리에서 같은 과정을 반복한다.
T에 존재하지 않는 새로운 키 k를 삽입할 때는, 먼저 T에서 k를 찾는다. k는 트리에 없으므로 검색은 실패로 끝나고, 검색이 멈춘 그 빈 자리에 k를 새 노드로 삽입한다.
이 문제에서는 키가 1,2,…,N인 이진 검색 트리를 다룬다. {1,2,…,N}의 순열 a1,a2,…,aN이 주어지면, 비어 있는 트리에 a1부터 aN까지 순서대로 삽입하여 하나의 이진 검색 트리를 만들 수 있다.
서로 다른 순열이 같은 트리를 만들 수도 있다. 예를 들어 순열 2 1 4 3 5를 차례대로 삽입하면, 루트가 2이고 그 왼쪽 자식이 1, 오른쪽 자식이 4이며, 4의 왼쪽 자식이 3, 오른쪽 자식이 5인 트리가 만들어진다. 순열 2 4 3 1 5도 정확히 같은 트리를 만든다. {1,2,3,4,5}의 순열 중 이 트리와 같은 트리를 만드는 순열은 모두 8개이다.
N과 순열 P가 주어졌을 때, P와 같은 이진 검색 트리를 만드는 순열의 개수를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. (T≤40,320)
각 테스트 케이스는 두 줄로 이루어진다. 첫째 줄에 키의 개수 N이 주어지고 (1≤N≤20), 둘째 줄에 길이가 N인 {1,2,…,N}의 순열이 공백으로 구분되어 주어진다.
각 테스트 케이스마다, 입력으로 주어진 순열과 같은 이진 검색 트리를 만드는 순열의 개수를 9,999,991로 나눈 나머지를 한 줄에 하나씩 출력한다.