만드는 중입니다

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

분해

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

요약
문자열을 여러 부분 문자열로 나누는 모든 방법에 대해, 각 부분 문자열의 최소 주기를 곱한 값의 합을 10^9+7로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

유형
문자열 매칭, 동적 계획법
정답자
아직 제출이 없습니다

문제

문자열 SS가 주어진다. 이 문자열을 비어 있지 않은 부분 문자열 여러 개(한 개도 가능)로 나눈다. 분할 방법은 2∣S∣−12^{|S|-1}가지이다. 예를 들어 aba의 분할은 aba, ab+a, a+ba, a+b+a 네 가지이다.

부분 문자열 TT의 가중치는 T=xx…xT = x x \ldots x를 만족하는 가장 짧은 문자열 xx의 길이이다. 예를 들어 aaa의 가중치는 11이고, ab의 가중치는 22이다. 분할의 가중치는 분할에 포함된 모든 부분 문자열 가중치의 곱이다.

모든 분할의 가중치 합을 구하고, 그 값을 109+710^9 + 7로 나눈 나머지를 출력한다.

입력

첫 줄에 테스트 케이스의 개수 TT (1≤T≤1051 \leq T \leq 10^5)가 주어진다.

각 테스트 케이스는 한 줄에 소문자 알파벳으로 이루어진 문자열 SS (1≤∣S∣≤2⋅1051 \leq |S| \leq 2 \cdot 10^5)가 주어진다. 모든 테스트 케이스의 ∣S∣|S|를 더한 값은 10610^6 이하이다.

출력

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

예제1

  1. 예제 1

    입력
    1
    abaababaabbbaabbbb
    
    예상 출력
    5320053