만드는 중입니다

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

영국 정보부 시험

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

요약
문자열 s를 길이가 같은 k개 조각으로 나눴을 때 모든 조각이 서로의 순환 이동이 되는 k를 모두 구합니다.
난이도

보통10점 중 6점

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

문제

핀 맥스미슬은 영국 정보부의 요원이다. 요원은 예상치 못한 상황에 대비해야 하며, 어떤 과제든 몇 초 안에 풀 수 있어야 한다. 정보부 학교의 졸업 시험에서는 체력 기준 외에도 복잡한 알고리즘 과제를 풀어야 한다. 핀이 받은 과제는 다음과 같다.

길이가 nn인 문자열 ss가 주어진다. 문자열 ss를 길이가 같은 연속된 부분 문자열 kk개로 나눌 수 있고, 어떤 부분 문자열이든 다른 부분 문자열로부터 순환 이동으로 만들 수 있으면, ss를 kk-분할 가능하다고 한다.

문자열 ss가 문자열 tt의 순환 이동이라는 것은, t=uvt = uv이고 s=vus = vu를 만족하는 문자열 uu, vv(빈 문자열일 수도 있다)가 존재한다는 뜻이다.

ss가 kk-분할 가능한 모든 kk를 구하라.

정보 활동에서는 어떤 방법이든 쓸모가 있으므로, 핀은 여러분에게 도움을 청했다.

입력

첫 줄에 소문자 라틴 문자로 이루어진 문자열 ss가 주어진다 (1≤∣s∣≤200 0001 \le |s| \le 200\,000).

출력

첫 줄에 조건을 만족하는 kk의 개수 mm을 출력한다.

둘째 줄에 조건을 만족하는 kik_i mm개를 오름차순으로 공백으로 구분해 출력한다.

힌트

첫 번째 예제에서 문자열은 그대로 두거나, abba와 baab 두 개로 나눌 수 있다(둘은 순환 이동으로 서로 만들 수 있다). 또는 ab, ba, ba, ab 네 개로 나눌 수 있으며, 이들도 순환 이동으로 서로 만들 수 있다.

예제2

  1. 예제 1

    입력
    abbabaab
    
    예상 출력
    3
    1 2 4
    
  2. 예제 2

    입력
    abbababa
    
    예상 출력
    2
    1 4