부분 문자열의 문자
면접 대비시간 제한1초메모리 제한1024 MB
각 문자열에 대해 전체 문자열과 같은 문자 집합을 가지며 양끝을 줄일 수 없는 서로 다른 진부분문자열의 개수를 센다.
문제
문자열에 등장하는 서로 다른 문자의 집합을 그 문자열의 일반화된 주기라고 부른다. 예를 들어 문자열 "aabbabb"의 일반화된 주기는 {'a','b'}이다.
진부분 문자열은 어떤 문자열에 포함되면서 그 문자열 자체는 아닌 연속된 부분 문자열이다. 따라서 "aabbabb"는 위 예시의 진부분 문자열이 아니다.
최소 진부분 문자열은 양쪽 끝에서 어떤 문자도 제거하지 않고서는 같은 일반화된 주기를 유지할 수 없는 진부분 문자열이다. "aabb"는 예시의 진부분 문자열이지만 최소가 아니다. "ab"는 최소이다.
서로 다른 것이라는 말은, 문자열 안에서 같은 최소 진부분 문자열이 여러 번 나타나더라도 한 번만 센다는 뜻이다. 예시에서 "ab"는 두 번 나타나지만 한 번만 센다. 따라서 전체 문자열과 같은 일반화된 주기를 가지는 진부분 최소 문자열의 개수는 두 개이다. "ab"와 "ba"이다.
여러분의 팀은 주어진 문자열에 대해, 그 문자열 자체와 같은 일반화된 주기를 가지는 진부분 최소 문자열의 개수를 세는 프로그램을 작성해야 한다.
입력
입력은 파일의 끝까지 이어지는 여러 줄로 주어진다. 각 줄은 영숫자(a--z, A--Z, 0--9)로 이루어진 하나의 테스트 케이스이다. 대문자와 소문자는 서로 다른 문자이다. 개행 문자는 테스트 케이스 문자열에 포함되지 않는다. 테스트 케이스 문자열의 길이는 자를 넘지 않는다. 입력에는 테스트 문자열이 최대 개 있다.
출력
각 입력 줄에 대해, 입력 문자열의 진부분 최소 문자열 중 전체 문자열과 같은 일반화된 주기를 가지는 것의 개수를 한 줄에 출력한다. 앞뒤 공백이나 불필요한 부호, 앞에 붙는 0이 없어야 한다.