시작 위치가 블록 크기의 배수인 블록 교환을 크기마다 최대 한 번씩만 사용해 주어진 순열을 정렬하는 교환 순서의 개수를 셉니다.
어려움8분할 정복재귀조합론아직 제출이 없습니다시간 제한5초메모리 제한512 MB평행 우주의 사람들은 2의 거듭제곱을 좋아해서, 1부터 2N까지의 순열을 제한된 교환 하나만으로 정렬한다. 위치는 0번부터 센다.
크기가 k인 올바른 구간은 연속한 위치 2k개로 이루어지고 첫 위치가 2k의 배수인 구간이다. 크기가 k인 교환은 서로 다른 두 올바른 구간의 내용을 통째로 맞바꾼다. 한 구간을 자기 자신과 맞바꿀 수는 없다.
순열을 정렬할 때 크기가 k인 교환은 k=0,1,…,N−1마다 최대 한 번씩만 쓸 수 있다.
예를 들어 1부터 23까지의 순열 [3, 6, 1, 2, 7, 8, 5, 4]는 다음처럼 정렬된다.
[3, 6, 1, 2, 7, 8, 5, 4]: 크기가 2인 교환으로 [3, 6, 1, 2]와 [7, 8, 5, 4]를 맞바꾼다.[7, 8, 5, 4, 3, 6, 1, 2]: 크기가 0인 교환으로 [5]와 [3]을 맞바꾼다.[7, 8, 3, 4, 5, 6, 1, 2]: 크기가 1인 교환으로 [7, 8]과 [1, 2]를 맞바꾼다.[1, 2, 3, 4, 5, 6, 7, 8]: 정렬이 끝났다.크기 0, 1, 2를 각각 최대 한 번씩만 썼고, 모든 구간이 자기 크기의 배수인 위치에서 시작했다.
이 규칙으로 주어진 순열을 정렬하는 방법의 수를 세어라. 한 방법은 교환을 순서대로 나열한 것이고, 나열이 완전히 같을 때만 두 방법이 같다.
첫 줄에 테스트 케이스의 수 T가 주어진다. 각 테스트 케이스는 두 줄이다. 첫 줄에 정수 N이 주어지고, 다음 줄에 1,2,…,2N의 순열을 이루는 정수 2N개가 공백으로 구분되어 주어진다.
각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, y는 주어진 순열을 정렬하는 방법의 수이다.