만드는 중입니다

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

순환 이동

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

요약
문자열 s의 부분 문자열 t 중, 왼쪽 순환 이동한 문자열도 s의 부분 문자열인 서로 다른 t의 개수를 구합니다.
난이도

보통10점 중 7점

유형
문자열, 문자열 매칭, 투 포인터
정답자
아직 제출이 없습니다

문제

Vasya는 Yandex에서 근무하던 중 회의에 참석하고 있었다. 그러던 중 영소문자로 이루어진 문자열 ss가 머리에 떠올랐다.

문자열 t=t1t2…tmt = t_1 t_2 \dots t_m (m>0m > 0)이 ss의 부분 문자열이고, tt의 왼쪽 원형 이동 t′=t2…tmt1t' = t_2 \dots t_m t_1도 ss의 부분 문자열이면, tt를 ss에 대한 좋은 문자열이라고 정했다.

Vasya는 ss에 대한 서로 다른 좋은 문자열의 개수를 세려고 했지만, 동료의 질문을 받고 회의에 복귀해야 했다. 그를 대신해 그 개수를 구하시오.

입력

첫 줄에 문자열 ss가 주어진다. ss의 길이 nn은 1≤n≤3000001 \leq n \leq 300000을 만족한다. 문자열은 영소문자로만 이루어져 있다.

출력

좋은 문자열 tt의 서로 다른 개수를 한 개의 정수로 출력한다.

힌트

첫 번째 예제에서 좋은 문자열은 정확히 a, b, c, aa, ab, ba, aba이다.

두 번째 예제에서 좋은 문자열은 정확히 a, aa, aaa이다.

예제2

  1. 예제 1

    입력
    abaac
    
    예상 출력
    7
    
  2. 예제 2

    입력
    aaa
    
    예상 출력
    3