만드는 중입니다

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

집에서 따라 하지 마세요

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

요약
배열 a에 f를 k번 적용했을 때 어떤 값의 등장 횟수가 한 번과 두 번 이상 사이에서 바뀌는 가장 작은 k를 구합니다. 답은 10^9+7로 나눈 나머지이고, 없으면 -1입니다.
난이도

어려움10점 중 9점

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

문제

정수 배열 bb에 대해 f(b)f(b)를 다음과 같이 정의합니다. f(b)f(b)는 bb와 길이가 같은 배열 중에서, 사전순으로 bb보다 크고 원소의 집합이 bb의 원소의 집합과 같은 배열 가운데 사전순으로 가장 작은 배열입니다. 그런 배열이 없으면 f(b)f(b)는 정의되지 않습니다. 예를 들어 f([2,7,7,5,4])=[4,2,2,5,7]f([2,7,7,5,4]) = [4,2,2,5,7]입니다. 여기서 배열의 원소 집합은 각 값을 몇 번 나타나든 한 번만 센 값들의 모임입니다. 배열 [2,7,7,5,4][2,7,7,5,4]와 [4,2,2,5,7][4,2,2,5,7]은 값마다 나타나는 횟수가 달라도 원소 집합이 {2,4,5,7}\{2,4,5,7\}로 같습니다.

fk(b)f^k(b)는 ff를 kk번 적용한 결과를 뜻합니다. 정의되지 않은 값에 ff를 적용한 결과도 정의되지 않습니다. 예를 들어 f2([2,7,7,5,4])=f([4,2,2,5,7])=[4,2,2,7,5]f^2([2,7,7,5,4]) = f([4,2,2,5,7]) = [4,2,2,7,5]입니다.

길이가 nn인 정수 배열 aa가 주어집니다. 이 배열은 추가 조건을 만족하며, 배열 aa에서 정확히 한 번 나타나는 정수가 적어도 하나 있습니다. 다음 조건 중 적어도 하나를 만족하는 fk(a)f^k(a)가 되는 가장 작은 양의 정수 kk를 구하세요. fk(a)f^k(a)는 정의되어 있어야 합니다. 그런 kk가 없으면 -1을 출력합니다.

  • aa에서 정확히 한 번 나타나는 정수가 fk(a)f^k(a)에서는 두 번 이상 나타난다.
  • aa에서 두 번 이상 나타나는 정수가 fk(a)f^k(a)에서는 정확히 한 번 나타난다.

답이 매우 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 구하세요.

입력

입력에는 하나 이상의 테스트 케이스가 포함됩니다. 첫 줄에는 테스트 케이스의 개수 tt (1≤t≤1051 \le t \le 10^5)가 주어집니다.

각 테스트 케이스는 두 줄로 주어집니다. 첫 줄에는 nn (2≤n≤1052 \le n \le 10^5)이 주어지고, 둘째 줄에는 정수 a1,a2,…,ana_1, a_2, \ldots, a_n (1≤ai≤1061 \le a_i \le 10^6) 이 주어집니다. aa에는 정확히 한 번 나타나는 값이 적어도 하나 있습니다.

모든 테스트 케이스의 nn의 합은 6⋅1056 \cdot 10^5을 넘지 않습니다.

출력

각 테스트 케이스마다 답을 109+710^9 + 7로 나눈 나머지를 한 줄에 출력합니다. 답이 없으면 -1을 출력합니다.

예제1

  1. 예제 1

    입력
    4
    7
    4 3 3 2 2 1 1
    6
    8 8 3 3 5 3
    4
    10 10 2 9
    8
    2 4 4 5 5 2 3 7
    
    예상 출력
    1
    1
    -1
    3