만드는 중입니다

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

순환 시프트

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

요약
문자열의 각 접두사마다 사전순으로 가장 작은 순환 이동의 최소 인덱스를 구하고, 8753의 거듭제곱을 곱해 10^9+123으로 나눈 나머지의 합을 구합니다.
난이도

어려움10점 중 8점

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

문제

길이가 kk인 문자열을 s=s1s2…sks = s_1 s_2 \ldots s_k라고 하자. 0 이상 k−1k-1 이하의 임의의 정수 ii에 대해, ss의 ii번째 순환 시프트는 si+1si+2…sks1…sis_{i+1}s_{i+2} \ldots s_k s_1 \ldots s_i이다. 예를 들어 wellplayed의 4번째 순환 시프트는 playedwell이고, metro의 0번째 순환 시프트는 metro 자체이다.

길이가 kk인 문자열에 대해 f(s)f(s)는 ss의 ii번째 순환 시프트가 모든 순환 시프트 중 사전순으로 가장 작게 되는 ii이다. 그런 ii가 여러 개이면 그중 가장 작은 값을 f(s)f(s)로 한다. 예를 들어 f(acabbac) = 2, f(cabcab) = 1이다.

길이가 nn인 문자열에 대해 g(s)g(s)는 kk를 1부터 nn까지 바꿔가며 f(s1s2…sk)⋅8753k−1f(s_1 s_2 \ldots s_k) \cdot 8753^{k-1}을 모두 더한 값이다. 주어진 각 문자열 ss에 대해 g(s)g(s)를 109+12310^9 + 123으로 나눈 나머지를 구하라.

입력

첫 줄에 정수 tt (1≤t≤1041 \le t \le 10^4)가 주어진다. 이어서 tt개의 줄에 각각 비어 있지 않은 영소문자 문자열이 한 줄씩 주어진다. 입력 문자열들의 길이 합은 10610^6을 넘지 않는다.

출력

각 입력 문자열에 대해 입력 순서대로 g(s)g(s)를 109+12310^9 + 123으로 나눈 나머지를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    2
    aab
    acabbac
    
    예상 출력
    0
    38098220