만드는 중입니다

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

완전히 정렬되지 않은 수열

시간 제한4초메모리 제한512 MB

요약
주어진 정수를 재배열해서 어떤 원소도 정렬된 상태가 되지 않는 수열의 개수를 10^9+9로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

유형
조합론, 동적 계획법, 정렬
정답자
아직 제출이 없습니다

문제

당신은 최근 NASA(National Association for Sorting Algorithms)의 수석 과학자로 승진했다. 축하한다! 주요 업무는 팀이 만든 정렬 알고리즘을 테스트하는 것이다. 올해 예산이 넉넉해서 테스트에 쓸 최신 정수들을 구입할 수 있었다.

수석 과학자로서 알고리즘은 최악의 입력에서 보이는 동작으로 평가된다는 것을 알고 있다. 정렬 알고리즘을 테스트하려면 최대한 정렬되지 않은 수열이 필요하다.

수열 (a1,…,an)(a_1, \ldots, a_n)이 주어졌을 때, 원소 aka_k는 j>kj > k인 모든 인덱스 jj에 대해 aj≥aka_j \ge a_k이고, j<kj < k인 모든 인덱스 jj에 대해 aj≤aka_j \le a_k이면 정렬되어 있다고 한다. 예를 들어 (1,3,2,3,4,6,5,5)(1, 3, 2, 3, 4, 6, 5, 5)에서 정렬되어 있는 원소는 1, 두 번째 3, 4이다. 수열은 모든 원소가 정렬되어 있을 때에만 정렬된 수열이다. 어떤 원소도 정렬되어 있지 않은 수열을 완전히 정렬되지 않은 수열이라고 한다.

정수 수열이 주어졌을 때, 원소를 재배열하여 만들 수 있는 완전히 정렬되지 않은 수열의 개수를 구하라. 두 수열 (b1,…,bn)(b_1, \ldots, b_n)과 (c1,…,cn)(c_1, \ldots, c_n)은 어떤 인덱스 ii에 대해 bi≠cib_i \ne c_i이면 서로 다른 수열이다. 개수가 매우 클 수 있으므로 109+910^9 + 9로 나눈 나머지를 출력한다.

입력

첫 줄에 정수 nn이 주어진다 (1≤n≤50001 \le n \le 5000). 둘째 줄에는 정수 a1,…,ana_1, \ldots, a_n이 주어진다 (0≤ai≤1090 \le a_i \le 10^9).

출력

a1,…,ana_1, \ldots, a_n을 재배열하여 만들 수 있는 완전히 정렬되지 않은 수열의 개수를 109+910^9 + 9로 나눈 나머지로 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    4
    0 1 2 3
    
    예상 출력
    14
    
  2. 예제 2

    입력
    5
    1 1 2 1 1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    13
    1 2 3 4 5 6 7 8 9 10 11 12 13
    
    예상 출력
    298600727