부분배열 점수 구하기

아직 제출이 없습니다시간 제한1.5초메모리 제한512 MB

문제

Alice는 정수 배열을 이용한 놀이를 즐겨한다.

길이 nn인 정수 배열 AA가 있을 때 ii번째 원소를 A\[i]A\[i]라 하자 (i=1,2,,ni = 1, 2, \dots, n). 이때 AA의 부분배열 A\[i,j]A\[i, j]ii번째 원소부터 jj번째 원소까지를 포함한 길이 (ji+1)(j - i + 1)인 배열로 정의한다 (1ijn1 ≤ i ≤ j ≤ n). 예를 들어 A=\[1,3,5,7]A = \[1, 3, 5, 7]이라면 A\[1,2]A\[1, 2]\[1,3]\[1, 3]이고 A\[2,4]A\[2, 4]\[3,5,7]\[3, 5, 7]이 된다. 참고로 AA의 부분 배열은 총 n×(n+1)/2n \times (n+1) / 2개 존재한다.

각각의 부분배열 A\[i,j]A\[i, j]에 대하여 Alice는 아래와 같은 방법으로 점수를 매기기로 했다. 편의상 A\[i,j]A\[i, j]의 점수를 Score(i,j)Score(i, j)라 하자. (1ijn1 ≤ i ≤ j ≤ n)

  • [규칙 1] 만약 i=ji = j 라면 Score(i,j):=0Score(i, j) := 0이다.
  • [규칙 2] 만약 i<ji < j 이고 A\[i,j]A\[i, j]의 원소 중 중복된 값이 있다면 Score(i,j):=0Score(i, j) := 0 이다.
  • [규칙 3] 만약 i<ji < j 이고 A\[i,j]A\[i, j]의 원소 중 중복된 값이 없다면 Score(i,j):=i(ji+1)+j(ji+1)Score(i, j) := i^{(j - i + 1)} + j^{(j - i + 1)} 이다.

예를 들어 A=\[1,1,2]A = \[1, 1, 2] 인 경우를 살펴보자.

  • 규칙 1에 따라 Score(1,1)=Score(2,2)=Score(3,3)=0Score(1, 1) = Score(2, 2) = Score(3, 3) = 0 이다.
  • 규칙 2에 따라 Score(1,2)=Score(1,3)=0Score(1, 2) = Score(1, 3) = 0 이다. 두 경우 모두 부분 배열에 11이 한 번 이상 포함되기 때문이다.
  • 규칙 3에 따라 Score(2,3)=22+32=13Score(2, 3) = 2^2 + 3^2 = 13이다.

다른 예로, A=\[1,3,5,7]A = \[1, 3, 5, 7] 인 경우를 살펴보자.

  • 규칙 1에 따라 Score(1,1)=Score(2,2)=Score(3,3)=Score(4,4)=0Score(1, 1) = Score(2, 2) = Score(3, 3) = Score(4, 4) = 0이다.

  • 규칙 2에 해당하는 부분 배열은 없다.

  • 규칙 3에 따라 길이 22 이상의 모든 부분 배열의 점수를 구하면 아래와 같다:

    • Score(1,2)=12+22=5Score(1, 2) = 1^2 + 2^2 = 5
    • Score(2,3)=22+32=13Score(2, 3) = 2^2 + 3^2 = 13
    • Score(3,4)=32+42=25Score(3, 4) = 3^2 + 4^2 = 25
    • Score(1,3)=13+33=28Score(1, 3) = 1^3 + 3^3 = 28
    • Score(2,4)=23+43=72Score(2, 4) = 2^3 + 4^3 = 72
    • Score(1,4)=14+44=257Score(1, 4) = 1^4 + 4^4 = 257

정수 배열 AA가 주어졌을 때, Alice를 도와 AA의 부분배열 점수 총합을 구해보자.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다.

각 테스트 케이스의 첫 줄에는 배열의 길이 nn이 주어지고 둘째 줄에는 AA의 원소인 nn개의 정수가 공백으로 구분되어 주어진다.

출력

각 테스트 케이스의 정답을 각 줄에 출력한다. 단, 답이 매우 커질 수 있으므로 정답을 109+710^9+7로 나눈 나머지를 출력한다.