이단적인 뫼비우스
시간 제한1초메모리 제한256 MB
길이 200의 0/1 문자열 t가 |μ(1)|, |μ(2)|, ... 수열에서 처음 나타나는 위치 p를 구하고, 나타나지 않으면 -1을 출력합니다.
문제
Rikka는 문 번호가 404인 이상한 방이 눈에 띌 때까지 호기심에 학교 건물을 돌아다니고 있었다.
그곳은 컴퓨터실처럼 보였다. 가지런히 놓인 수십 대의 컴퓨터가 있었고, 사방에 놓인 종이, 펜, 화이트보드 때문에 긴장된 분위기가 감돌았다. 그러던 중 Rikka는 다른 컴퓨터와 달라 보이지 않는 한 컴퓨터에 정체불명의 코드가 떠 있는 것을 발견했다. 이것은 inner world에서 온 메시지일까?
들뜬 Rikka는 조사를 시작했다. 이 메시지는 for_patterns_in_mobius라는 프로그램이 만든 것이며, 길이가 인 문자열 를 출력한다. 에는 에 대한 의 값이 순서대로 들어 있다.
그때 밖에서 발소리가 들렸다. Rikka는 재빨리 스크린샷을 찍고 자리를 떴다. 스크린샷에는 길이가 인 문자열 가 기록되어 있었다. 는 의 부분 문자열일 수도 있다. Rikka는 가 실제로 의 부분 문자열인지, 그렇다면 에서 처음 나타나는 위치가 어디인지 알고 싶어 한다.
이 코드를 해독하는 것을 도와줄 수 있겠는가?
입력
총 줄이 주어진다. 각 줄은 "0" 또는 "1"로 이루어진 개의 문자로 구성된다. 는 이 줄들을 순서대로 이어 붙인 문자열이다.
출력
한 줄에 정수 하나를 출력한다. 가 의 부분 문자열이면, 에서 가 처음 나타나는 위치를 출력한다. 즉, 에 대해 의 값을 이어 쓴 문자열이 와 같아지는 가장 작은 양의 정수 를 출력한다. 부분 문자열이 아니면 을 출력한다.
힌트
의 정의는 다음과 같다.
임의의 양의 정수 에 대해 를 의 소인수분해라고 하자. 여기서 각 는 서로 다른 소수이고, 각 는 양의 정수이며, 이면 이다. 이때 는 다음과 같이 정의된다.