두 문자열 S와 P에 대해, S에서 P가 등장하는 횟수를 나타내는 함수 f(S,P)가 있다. 즉 f(S,P)는 P가 S에서 연속한 부분 문자열로 등장하는 횟수를 나타낸다. 예를 들어 f("ababa","aba")=2이고, f("aaaaa","aa")=4이다.
여기에 더해서, 어떤 문자열 S에 대해서 가능한 모든 문자열의 등장횟수 제곱의 합을 나타내는 함수 g(S)가 있다. 즉, g(S)는 가능한 모든 문자열 P에 대해서 \[f(S,P)]2의 합을 구한 값이다.
N개의 문자로 이루어진 문자열 S=c_1c_2⋯c_N이 주어진다. R_i=g(c_1c_2⋯c_i) (S의 처음 i자리에 대한 등장횟수 제곱의 합)이라고 하면, R값의 변화치를 통해 문자열의 뒤쪽에 한 글자가 추가될 때 마다 새롭게 찾을 수 있는 부분문자열이 얼마나 많아지는지 짐작해볼 수 있다. 이를 위해 R_1에서 R_N까지를 모두 구하는 프로그램을 작성하라.
첫 번째 줄에 길이가 1이상 105이하인 문자열 S가 주어진다. S는 알파벳 소문자 만으로 구성된다.
N개의 줄에 걸쳐 정답을 출력한다. i번째 줄에는 R_i만이 출력되어야 한다.