만드는 중입니다

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

스왑 횟수 세기 (Hard)

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

요약
주어진 순열을 최소 횟수의 교환으로 정렬하는 방법의 수를 10^9+9로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

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

문제

어제와 마찬가지로 (연습 세션의 문제 U) Bob은 바빠서 Alice는 1인용 게임과 퍼즐을 계속 하고 있습니다. Alice의 최신 퍼즐에는 1부터 nn까지의 수로 이루어진 순열이 있습니다. 목표는 가능한 한 가장 적은 횟수의 swap으로 순열을 정렬하는 것입니다.

Alice는 퍼즐을 그냥 푸는 대신, 무작위로 두어서 이길 확률이 궁금합니다. 이를 계산하려면 퍼즐의 최적 해의 개수가 필요합니다.

1부터 nn까지의 수로 이루어진 순열 p1,…,pnp_1, \ldots, p_n이 주어집니다. 각 단계에서 두 수 x<yx < y를 골라 pxp_x와 pyp_y를 교환할 수 있습니다.

mm을 주어진 순열을 정렬하는 데 필요한 swap의 최소 횟수라고 합시다. 주어진 순열을 정렬하는, 정확히 mm번의 swap으로 이루어진 서로 다른 수열의 개수를 구하세요. 이 값이 클 수 있으므로 109+910^9 + 9로 나눈 나머지를 출력합니다.

입력

첫 줄에는 테스트 케이스의 개수 tt가 주어집니다. 각 테스트 케이스 앞에는 빈 줄이 있습니다.

각 테스트 케이스는 두 줄로 이루어집니다. 첫 줄에는 정수 nn이, 둘째 줄에는 1,…,n1, \ldots, n의 순열 p1,…,pnp_1, \ldots, p_n이 주어집니다.

출력

각 테스트 케이스마다, 가장 적은 횟수의 swap으로 주어진 수열을 정렬하는 방법의 수 xx를 109+910^9 + 9로 나눈 나머지를 한 줄에 정수 하나로 출력합니다.

제한

1≤n≤1051 \le n \le 10^5

힌트

첫 번째 테스트 케이스에서는 두 번의 swap으로 순열을 정렬할 수 있습니다. 첫 번째 swap은 어떻게 골라도 되고, 각각에 대해 최적의 두 번째 swap은 정확히 하나입니다. 예를 들어 가장 짧은 해 중 하나는 "p1p_1과 p2p_2를 교환한 다음 p1p_1과 p3p_3를 교환"입니다.

두 번째 테스트 케이스에서는 최적 해가 p1p_1과 p2p_2를 교환하고 p3p_3와 p4p_4를 교환하는 것입니다. 이 두 swap은 어느 순서로 해도 됩니다.

세 번째 수열은 이미 정렬되어 있습니다. 최적 swap 횟수는 0이므로, 최적 해는 빈 swap 수열 하나뿐입니다.

예제1

  1. 예제 1

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