피보나치 단어
시간 제한1초메모리 제한128 MB
피보나치 단어 F_m에서 주어진 이진 패턴이 나타나는 횟수와, 그 횟수 이상 등장하는 서로 다른 부분 문자열의 개수를 20062006으로 나눈 나머지로 구한다. m은 최대 10억이다.
문제
피보나치 단어 수열을 다음과 같이 정의한다.
- 일 때 (오른쪽 항은 문자열 과 를 이어 붙인 것이다)
따라서 수열의 앞부분은 b, a, ab, aba, abaab, abaababa, abaababaabaab, ... 이다.
문자열 가 문자열 의 부분 단어(연속된 부분 문자열)라는 것은, 어떤 문자열 , 에 대해 로 쓸 수 있다는 뜻이다. (, 는 빈 문자열이어도 된다.)
a와 b로만 이루어진 문자열 와 정수 이 주어진다. 피보나치 단어 안에 가 부분 단어로 몇 번 나타나는지 세고(겹쳐서 나타나는 경우도 각각 센다), 또한 의 비어 있지 않은 서로 다른 부분 단어 중에서 안에서의 등장 횟수가 의 등장 횟수 이상인 것이 몇 개인지 구하여라.
입력
첫째 줄에 정수 ()이 주어진다.
둘째 줄에 문자열 가 주어진다. 는 a와 b로만 이루어져 있고 길이는 이하이며, 항상 의 부분 단어이다.
출력
두 정수를 공백으로 구분하여 한 줄에 출력한다.
- 첫 번째 정수: 안에 가 부분 단어로 나타나는 총 횟수.
- 두 번째 정수: 의 비어 있지 않은 서로 다른 부분 단어 중에서, 안에서의 등장 횟수가 의 등장 횟수 이상인 것의 개수.
두 수 모두 매우 커질 수 있으므로 으로 나눈 나머지를 출력한다.
힌트
는 abaababa이고, 이 안에서 aba는 3번 나타난다. 의 비어 있지 않은 서로 다른 부분 단어 중에서 3번 이상 나타나는 것은 a, b, ab, ba, aba의 5개이다.