비밀 코드
시간 제한1초메모리 제한128 MB
앞이나 뒤 한 글자를 뗀 복사본에 원래 문자열을 앞뒤로 덧붙이는 연산을 반복해 주어진 문자열을 만드는 경우의 수를 셉니다.
문제
농부 존에게는 소들에게 숨기고 싶은 비밀 메시지가 있다. 메시지는 길이가 2 이상이고 A부터 Z까지의 대문자로만 이루어진 문자열이다.
존은 메시지를 암호화하려고 연산을 여러 번 적용한다. 문자열 에 연산을 한 번 적용하면 먼저 의 첫 글자나 마지막 글자를 지워 길이를 하나 줄이고, 남은 문자열의 앞이나 뒤에 원래 문자열 를 붙인다. 예를 들어 ABCD에 연산을 한 번 적용하면 다음 네 가지 결과가 나온다.
- BCDABCD
- ABCABCD
- ABCDABC
- ABCDBCD
암호화가 끝난 문자열이 주어진다. 길이가 2 이상인 어떤 문자열에서 시작해 연산을 한 번 이상 적용해 이 문자열을 만드는 방법이 몇 가지인지 세어라. 만들어진 문자열이 같아도 연산이 다르면 서로 다른 방법으로 센다. 예를 들어 AA에서 AAA를 만드는 방법은 위 네 연산에 하나씩 대응하는 네 가지다.
입력
첫째 줄에 길이가 100 이하인 문자열이 주어진다. 문자열은 A부터 Z까지의 대문자로만 이루어져 있다.
출력
길이가 2 이상인 어떤 문자열에 연산을 한 번 이상 차례로 적용해 주어진 문자열을 만드는 방법의 수를 출력한다. 그런 방법이 없으면 0을 출력한다.
힌트
ABABA를 만드는 여섯 가지 방법은 다음과 같다.
- ABA에서 시작 -> AB+ABA
- ABA에서 시작 -> ABA+BA
- AB에서 시작 -> AB+A -> AB+ABA
- AB에서 시작 -> AB+A -> ABA+BA
- BA에서 시작 -> A+BA -> AB+ABA
- BA에서 시작 -> A+BA -> ABA+BA