만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Bermutation

시간 제한2초메모리 제한256 MB

요약
순열과 b가 주어졌을 때, 길이 2b인 구간의 두 절반을 서로 바꾸는 연산으로 만들 수 있는 순열들 중 p의 사전순 위치를 구합니다.
난이도

어려움10점 중 9점

유형
조합론, 수학, 구현
정답자
아직 제출이 없습니다

문제

순열 pp는 1부터 nn까지의 정수로 이루어진다. 다음 연산을 원하는 만큼 적용할 수 있다. 연속한 2b2b개의 원소를 골라 두 절반을 서로 바꾼다. 구체적으로 ai,ai+1,…,ai+2b−1a_i, a_{i+1}, \ldots, a_{i+2b-1} 구간을 고르면 ai+b,ai+b+1,…,ai+2b−1,ai,ai+1,…,ai+b−1a_{i+b}, a_{i+b+1}, \ldots, a_{i+2b-1}, a_i, a_{i+1}, \ldots, a_{i+b-1} 순서가 된다.

pp에 이 연산을 0번 이상 적용해 얻을 수 있는 모든 순열의 집합을 SS라 하자. 각 연산에서 구간은 다른 연산의 구간과 독립적으로 고를 수 있다. SS의 모든 순열을 사전순으로 나열하고 1번부터 번호를 매긴다. pp가 이 목록에서 몇 번째인지 구하라. 답은 120 586 241120\,586\,241로 나눈 나머지로 출력한다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스는 두 줄로 주어진다. 첫 줄에는 두 정수 nn과 bb가 주어진다 (2≤n≤1052 \le n \le 10^5, 1≤b1 \le b, 2b≤n2b \le n). 둘째 줄에는 순열 pp의 원소 nn개가 주어진다. 1부터 nn까지의 각 정수는 정확히 한 번씩 나타난다.

모든 테스트 케이스의 nn의 합은 10510^5을 넘지 않는다.

출력

각 테스트 케이스마다 pp가 사전순으로 나열한 목록에서 몇 번째인지 1부터 세어 출력한다. 값은 120 586 241120\,586\,241로 나눈 나머지이다.

예제1

  1. 예제 1

    입력
    2
    5 1
    2 3 1 4 5
    5 2
    2 3 1 4 5
    
    예상 출력
    31
    3