만드는 중입니다

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

해밍 거리

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

요약
길이 n인 수열 a와 정수 m이 주어질 때, S^m에서 길이 n인 모든 구간과 a의 해밍 거리의 최솟값과 합(10^9+7로 나눈 나머지)을 구합니다.
난이도

어려움10점 중 9점

유형
분할 정복, 문자열 매칭, 수학
정답자
아직 제출이 없습니다

문제

Helena는 다음 규칙으로 수열의 목록을 만들었다.

S1=[1]S^1 = [1]

S2=S1+[2]+S1S^2 = S^1 + [2] + S^1

S3=S2+[3]+S2S^3 = S^2 + [3] + S^2

…\dots

Sm=Sm−1+[m]+Sm−1S^m = S^{m-1} + [m] + S^{m-1}

여기서 A+BA+B는 수열 AA와 BB를 이어 붙인 수열이다.

주어진 수열 [a1,a2,…,an][a_1, a_2, \dots, a_n]에 대해, f(i)f(i)를 [a1,a2,…,an][a_1, a_2, \dots, a_n]과 [Sim,Si+1m,…,Si+n−1m][S^m_i, S^m_{i+1}, \ldots, S^m_{i+n-1}]의 해밍 거리로 정의한다 (1≤i≤∣Sm∣−n+11 \le i \le |S^m| - n + 1).

f(i)f(i)의 최솟값과 모든 f(i)f(i)의 합을 (109+7)(10^9+7)로 나눈 나머지를 구하라.

길이가 같은 두 수열의 해밍 거리는 대응하는 원소가 서로 다른 위치의 개수이다.

입력

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

첫 줄에 두 정수 nn과 mm이 주어진다.

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

출력

각 테스트 케이스마다 f(i)f(i)의 최솟값과 f(i)f(i)의 합을 (109+7)(10^9+7)로 나눈 나머지를 두 정수로 출력한다.

제한

1≤m≤1051 \le m \le 10^5

1≤n≤min⁡(∣Sm∣,105)1 \le n \le \min(|S^m|, 10^5)

1≤ai≤m1 \le a_i \le m

모든 테스트 케이스의 nn의 합은 2×1062 \times 10^6을 넘지 않는다.

예제1

  1. 예제 1

    입력
    3 3
    1 2 3
    3 3
    1 1 1
    3 3
    1 2 1
    
    예상 출력
    1 9
    1 7
    0 7