슈퍼순열
시간 제한1초메모리 제한512 MB
1부터 n까지의 순열 a가 Dima의 삽입 방식으로 만든 s_n에서 시작하는 위치를 10^9+7로 나눈 나머지로 구합니다.
슈퍼순열
디마는 정보 수업 시간에 순열과 관련된 문제를 모두 풀었다. 그 뒤 그는 슈퍼순열에 관한 문제를 떠올렸다.
차수가 인 슈퍼순열은 1부터 까지의 정수로 이루어진 수열이며, 1부터 까지의 수로 만들 수 있는 모든 순열이 이 수열의 연속된 부분 구간으로 나타난다.
디마는 다음과 같은 슈퍼순열 생성 알고리즘을 고안했다.
- 이다.
- 먼저 을 과 같게 둔다.
- 의 길이 인 부분 구간을 시작 위치가 작은 순서대로 왼쪽부터 차례로 본다.
- 현재 부분 구간 이 1부터 까지의 수의 순열이면(각 수가 정확히 한 번씩 나타나면), 그 부분 구간의 마지막 원소 바로 뒤에 을 삽입한다.
차수 1, 2, 3, 4의 슈퍼순열이 만들어지는 과정은 다음과 같다.
정의에 따라 이다.
는 로 둔다. 길이 1인 부분 구간은 뿐이며 이는 순열이므로, 그 뒤에 을 삽입한다. 결과는 이다.
는 로 둔다. 부분 구간 는 순열이므로 그 뒤에 를 삽입해 을 얻는다. 부분 구간 도 순열이므로 그 뒤에 을 삽입한다. 결과는 이다.
는 로 둔다. 길이 3인 부분 구간 중 순열인 것은 차례로 , , , 이며, 각각의 뒤에 , , , 을 삽입한다. 은 순열이 아니므로 아무 일도 일어나지 않는다. 남은 두 순열 와 도 같은 방식으로 처리한다.
디마는 이 방법으로 만든 슈퍼순열에서 모든 순열이 정확히 한 번씩 나타난다는 점을 발견했다. 자신의 작업에 실수가 없는지 확인하려고, 주어진 순열 이 슈퍼순열 에서 나타나는 위치를 구하려 한다. 위치는 1부터 센다.
의 길이가 매우 크므로, 이 순열이 시작하는 의 첫 원소의 번호를 로 나눈 나머지로 구하라.
입력
첫 줄에 순열의 길이 이 주어진다 ().
둘째 줄에는 주어진 순열 이 개의 정수로 주어진다 (, 모든 는 서로 다르다).
출력
차수 의 슈퍼순열에서 순열 이 나타나는 위치를 로 나눈 나머지로 한 줄에 출력한다.