만드는 중입니다

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

부분배열 점수 구하기

면접 대비

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

요약
각 테스트 케이스마다 서로 다른 값으로만 이루어진 길이 2 이상의 부분배열 A[i, j]에 대해 i^길이 + j^길이의 총합을 10^9+7로 나눈 나머지를 구합니다.
난이도

보통10점 중 5점

유형
슬라이딩 윈도우, 해시맵, 수학
정답자
아직 제출이 없습니다

문제

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

길이가 nn인 정수 배열 AA에서 ii번째 원소를 A[i]A[i]라 하자 (i=1,2,…,ni = 1, 2, \dots, n). 부분배열 A[i,j]A[i, j]는 ii번째 원소부터 jj번째 원소까지를 포함하는 길이 (j−i+1)(j - i + 1)인 배열이다 (1≤i≤j≤n1 \le i \le j \le 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개 있다.

Alice는 각 부분배열 A[i,j]A[i, j]의 점수 Score(i,j)Score(i, j)를 다음 규칙으로 매긴다 (1≤i≤j≤n1 \le i \le j \le 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(j−i+1)+j(j−i+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에 따라 00이고, 규칙 2에 해당하는 부분배열은 없다. 길이가 2 이상인 부분배열의 점수는 다음과 같다.

  • 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가 주어졌을 때, AA의 모든 부분배열 점수의 합을 구하라.

입력

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

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

출력

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

예제1

  1. 예제 1

    입력
    4
    3
    1 1 2
    4
    1 3 5 7
    6
    1 2 3 1 3 2
    6
    1 2 3 2 3 1
    
    예상 출력
    13
    400
    525
    453