영국 정보부 시험
시간 제한2초메모리 제한1024 MB
문자열 s를 길이가 같은 k개 조각으로 나눴을 때 모든 조각이 서로의 순환 이동이 되는 k를 모두 구합니다.
문제
핀 맥스미슬은 영국 정보부의 요원이다. 요원은 예상치 못한 상황에 대비해야 하며, 어떤 과제든 몇 초 안에 풀 수 있어야 한다. 정보부 학교의 졸업 시험에서는 체력 기준 외에도 복잡한 알고리즘 과제를 풀어야 한다. 핀이 받은 과제는 다음과 같다.
길이가 인 문자열 가 주어진다. 문자열 를 길이가 같은 연속된 부분 문자열 개로 나눌 수 있고, 어떤 부분 문자열이든 다른 부분 문자열로부터 순환 이동으로 만들 수 있으면, 를 -분할 가능하다고 한다.
문자열 가 문자열 의 순환 이동이라는 것은, 이고 를 만족하는 문자열 , (빈 문자열일 수도 있다)가 존재한다는 뜻이다.
가 -분할 가능한 모든 를 구하라.
정보 활동에서는 어떤 방법이든 쓸모가 있으므로, 핀은 여러분에게 도움을 청했다.
입력
첫 줄에 소문자 라틴 문자로 이루어진 문자열 가 주어진다 ().
출력
첫 줄에 조건을 만족하는 의 개수 을 출력한다.
둘째 줄에 조건을 만족하는 개를 오름차순으로 공백으로 구분해 출력한다.
힌트
첫 번째 예제에서 문자열은 그대로 두거나, abba와 baab 두 개로 나눌 수 있다(둘은 순환 이동으로 서로 만들 수 있다). 또는 ab, ba, ba, ab 네 개로 나눌 수 있으며, 이들도 순환 이동으로 서로 만들 수 있다.