아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

배열하고 세기!

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

요약
수열이 주어질 때, 접두사를 뒤집어 뒤로 붙이는 연산으로 만들 수 있는 서로 다른 수열의 개수를 1e9+7로 나눈 나머지를 여러 테스트 케이스에 대해 구한다.
난이도

어려움10점 중 8점

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

문제

Alice는 수열 a1,a2,…,ana_1,a_2,\dots,a_n을 가지고 있다. 그녀는 다음 연산을 원하는 만큼 사용해 수열을 재배열할 수 있다:

  • 정수 ii (1≤i≤n1 \le i \le n)를 골라 수열을 ai,ai−1,…,a1,an,an−1,…,ai+1a_i, a_{i-1}, \dots, a_1, a_n, a_{n-1}, \dots, a_{i+1}로 바꾼다.

Alice는 서로 다른 수열이 몇 개나 얻어질 수 있는지 알고 싶다. 답을 (109+7)(10^9+7)로 나눈 나머지를 구하라.

입력

입력은 여러 테스트 케이스로 이루어지며, 파일의 끝에서 끝난다. 각 테스트 케이스는 다음과 같다.

첫째 줄에는 수열의 길이 nn이 주어진다.

둘째 줄에는 nn개의 정수 a1,a2,…,ana_1, a_2, \dots, a_n이 주어진다.

출력

각 테스트 케이스마다 답을 나타내는 정수를 한 줄에 출력한다.

제한

  • 1≤n≤1051 \leq n \leq 10^5
  • 1≤ai≤n1 \leq a_i \leq n
  • nn의 합은 2×1062 \times 10^6을 넘지 않는다.

예제1

  1. 예제 1

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