2의 거듭제곱 구간 교환

시작 위치가 블록 크기의 배수인 블록 교환을 크기마다 최대 한 번씩만 사용해 주어진 순열을 정렬하는 교환 순서의 개수를 셉니다.

어려움8분할 정복재귀조합론아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

평행 우주의 사람들은 2의 거듭제곱을 좋아해서, 11부터 2N2^N까지의 순열을 제한된 교환 하나만으로 정렬한다. 위치는 00번부터 센다.

크기가 kk인 올바른 구간은 연속한 위치 2k2^k개로 이루어지고 첫 위치가 2k2^k의 배수인 구간이다. 크기가 kk인 교환은 서로 다른 두 올바른 구간의 내용을 통째로 맞바꾼다. 한 구간을 자기 자신과 맞바꿀 수는 없다.

순열을 정렬할 때 크기가 kk인 교환은 k=0,1,,N1k = 0, 1, \dots, N-1마다 최대 한 번씩만 쓸 수 있다.

예를 들어 11부터 232^3까지의 순열 [3, 6, 1, 2, 7, 8, 5, 4]는 다음처럼 정렬된다.

  • [3, 6, 1, 2, 7, 8, 5, 4]: 크기가 22인 교환으로 [3, 6, 1, 2][7, 8, 5, 4]를 맞바꾼다.
  • [7, 8, 5, 4, 3, 6, 1, 2]: 크기가 00인 교환으로 [5][3]을 맞바꾼다.
  • [7, 8, 3, 4, 5, 6, 1, 2]: 크기가 11인 교환으로 [7, 8][1, 2]를 맞바꾼다.
  • [1, 2, 3, 4, 5, 6, 7, 8]: 정렬이 끝났다.

크기 00, 11, 22를 각각 최대 한 번씩만 썼고, 모든 구간이 자기 크기의 배수인 위치에서 시작했다.

이 규칙으로 주어진 순열을 정렬하는 방법의 수를 세어라. 한 방법은 교환을 순서대로 나열한 것이고, 나열이 완전히 같을 때만 두 방법이 같다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 두 줄이다. 첫 줄에 정수 NN이 주어지고, 다음 줄에 1,2,,2N1, 2, \dots, 2^N의 순열을 이루는 정수 2N2^N개가 공백으로 구분되어 주어진다.

  • 1T2001 \le T \le 200
  • 1N121 \le N \le 12

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. x11부터 시작하는 테스트 케이스 번호이고, y는 주어진 순열을 정렬하는 방법의 수이다.