만드는 중입니다

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

슈퍼순열

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

요약
1부터 n까지의 순열 a가 Dima의 삽입 방식으로 만든 s_n에서 시작하는 위치를 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

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

슈퍼순열

디마는 정보 수업 시간에 순열과 관련된 문제를 모두 풀었다. 그 뒤 그는 슈퍼순열에 관한 문제를 떠올렸다.

차수가 nn인 슈퍼순열은 1부터 nn까지의 정수로 이루어진 수열이며, 1부터 nn까지의 수로 만들 수 있는 모든 순열이 이 수열의 연속된 부분 구간으로 나타난다.

디마는 다음과 같은 슈퍼순열 생성 알고리즘을 고안했다.

  • s1=[1]s_1 = [1]이다.
  • 먼저 sn+1s_{n+1}을 sns_n과 같게 둔다.
  • sns_n의 길이 nn인 부분 구간을 시작 위치가 작은 순서대로 왼쪽부터 차례로 본다.
  • 현재 부분 구간 sn[l],sn[l+1],…,sn[l+n−1]s_n[l], s_n[l+1], \ldots, s_n[l+n-1]이 1부터 nn까지의 수의 순열이면(각 수가 정확히 한 번씩 나타나면), 그 부분 구간의 마지막 원소 sn[l+n−1]s_n[l+n-1] 바로 뒤에 n+1,sn[l],sn[l+1],…,sn[l+n−1]n+1, s_n[l], s_n[l+1], \ldots, s_n[l+n-1]을 삽입한다.

차수 1, 2, 3, 4의 슈퍼순열이 만들어지는 과정은 다음과 같다.

정의에 따라 s1=[1]s_1 = [1]이다.

s2s_2는 [1][1]로 둔다. 길이 1인 부분 구간은 [1][1]뿐이며 이는 순열이므로, 그 뒤에 [2,1][2, 1]을 삽입한다. 결과는 s2=[1,2,1]s_2 = [1, 2, 1]이다.

s3s_3는 [1,2,1][1, 2, 1]로 둔다. 부분 구간 [1,2][1, 2]는 순열이므로 그 뒤에 [3,1,2][3, 1, 2]를 삽입해 [1,2,3,1,2,1][1, 2, 3, 1, 2, 1]을 얻는다. 부분 구간 [2,1][2, 1]도 순열이므로 그 뒤에 [3,2,1][3, 2, 1]을 삽입한다. 결과는 s3=[1,2,3,1,2,1,3,2,1]s_3 = [1, 2, 3, 1, 2, 1, 3, 2, 1]이다.

s4s_4는 [1,2,3,1,2,1,3,2,1][1, 2, 3, 1, 2, 1, 3, 2, 1]로 둔다. 길이 3인 부분 구간 중 순열인 것은 차례로 [1,2,3][1, 2, 3], [2,3,1][2, 3, 1], [3,1,2][3, 1, 2], [2,1,3][2, 1, 3]이며, 각각의 뒤에 [4,1,2,3][4, 1, 2, 3], [4,2,3,1][4, 2, 3, 1], [4,3,1,2][4, 3, 1, 2], [4,2,1,3][4, 2, 1, 3]을 삽입한다. [1,2,1][1, 2, 1]은 순열이 아니므로 아무 일도 일어나지 않는다. 남은 두 순열 [1,3,2][1, 3, 2]와 [3,2,1][3, 2, 1]도 같은 방식으로 처리한다.

디마는 이 방법으로 만든 슈퍼순열에서 모든 순열이 정확히 한 번씩 나타난다는 점을 발견했다. 자신의 작업에 실수가 없는지 확인하려고, 주어진 순열 a1,…,ana_1, \dots, a_n이 슈퍼순열 sns_n에서 나타나는 위치를 구하려 한다. 위치는 1부터 센다.

sns_n의 길이가 매우 크므로, 이 순열이 시작하는 sns_n의 첫 원소의 번호를 109+710^9 + 7로 나눈 나머지로 구하라.

입력

첫 줄에 순열의 길이 nn이 주어진다 (1≤n≤300 0001 \le n \le 300\,000).

둘째 줄에는 주어진 순열 a1,a2,…,ana_1, a_2, \ldots, a_n이 nn개의 정수로 주어진다 (1≤ai≤n1 \le a_i \le n, 모든 aia_i는 서로 다르다).

출력

차수 nn의 슈퍼순열에서 순열 a1,a2,…,ana_1, a_2, \ldots, a_n이 나타나는 위치를 109+710^9+7로 나눈 나머지로 한 줄에 출력한다.

예제3

  1. 예제 1

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

    입력
    4
    2 3 1 4
    
    예상 출력
    6
    
  3. 예제 3

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