만드는 중입니다

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

새로운 등장

시간 제한1초메모리 제한1024 MB

요약
문자열 S의 각 접두사에서 모든 부분 문자열의 등장 횟수를 제곱하여 더한 값을 구합니다.
난이도

어려움10점 중 8점

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

문제

두 문자열 SS와 PP에 대해, f(S,P)f(S, P)는 PP가 SS에서 연속한 부분 문자열로 등장하는 횟수이다. 예를 들어 f(ababa,aba)=2f(\text{ababa}, \text{aba}) = 2이고, f(aaaaa,aa)=4f(\text{aaaaa}, \text{aa}) = 4이다.

문자열 SS에 대해 g(S)g(S)는 가능한 모든 문자열 PP에 대한 [f(S,P)]2[f(S,P)]^2의 합이다.

길이가 NN인 문자열 S=c1c2⋯cNS = c_1c_2 \cdots c_N이 주어진다. Ri=g(c1c2⋯ci)R_i = g(c_1c_2 \cdots c_i)라고 하자. 이는 SS의 처음 ii자리에 대한 등장 횟수 제곱의 합이다. RR의 변화를 보면 문자열 뒤에 글자가 하나 추가될 때 새로 찾을 수 있는 부분 문자열이 얼마나 늘어나는지 알 수 있다. R1R_1부터 RNR_N까지 모두 구하는 프로그램을 작성하라.

입력

첫 번째 줄에 길이가 11 이상 10510^5 이하인 문자열 SS가 주어진다. SS는 알파벳 소문자로만 이루어져 있다.

출력

NN개의 줄에 걸쳐 정답을 출력한다. ii번째 줄에는 RiR_i만 출력한다.

예제3

  1. 예제 1

    입력
    aaa
    
    예상 출력
    1
    5
    14
    
  2. 예제 2

    입력
    pqpq
    
    예상 출력
    1
    3
    8
    16
    
  3. 예제 3

    입력
    stssts
    
    예상 출력
    1
    3
    8
    16
    25
    41