이것이 영원히 계속될 수는 없다

시간 제한1초메모리 제한128 MB

요약
2^24 이하의 각 모듈로 m에 대해 피보나치 수열을 m으로 나눈 나머지 수열의 최소 주기를 구해 출력한다.
난이도

어려움10점 중 8점

유형
정수론, 수학, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

먼 옛날, 아주 먼 은하계의 어느 행성에는 타예(taye) 라는 인기 애완동물이 살았습니다. 타예는 싹을 틔우듯(budding) 번식합니다. 어린 타예가 부모에게서 떨어져 나오면 정확히 한 단위 시간이 지나야 번식할 수 있을 만큼 자라며, 새로운 싹이 자라 부모에게서 분리되는 데 걸리는 시간도 정확히 같습니다. 타예는 사실상 영원히 살기 때문에, 주인들은 언젠가 자신이 갖게 될 타예의 수를 세어 보고 싶어 합니다. 시각 00 에는 타예가 하나도 없고, 시각 11 에 친구가 갓 싹튼(아직 다 자라지 않은) 타예 한 마리를 주었다고 합시다.

그러면 내가 가진 타예의 수는 다음 점화식을 따릅니다.

T(0)=0,T(1)=1,T(n)=T(n−1)+T(n−2) (단, n>1).T(0) = 0, \quad T(1) = 1, \quad T(n) = T(n-1) + T(n-2) \ (\text{단, } n > 1).

이 값들이 바로 피보나치 수입니다. 이 점화식을 고정된 나머지 mm 아래에서(모든 값을 mm 으로 나눈 나머지로) 계산하면, 나머지들의 수열은 언젠가부터 되풀이되기 시작합니다. 질문은 이것입니다. 수열이 다시 반복되기 전까지 한 주기의 길이는 얼마일까요?

처음 몇 개의 수열은 다음과 같습니다.

나머지그 나머지 아래에서 수열의 앞부분주기 길이
20 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 13
30 1 1 2 0 2 2 1 0 1 1 2 0 2 2 1 0 1 1 2 0 2 28
40 1 1 2 3 1 0 1 1 2 3 1 0 1 1 2 3 1 0 1 1 2 36
50 1 1 2 3 0 3 3 1 4 0 4 4 3 2 0 2 2 4 1 0 1 120

입력으로 주어지는 각 나머지에 대해, 이 수열의 가장 작은 주기의 길이를 구해 출력하세요.

입력

입력은 여러 줄로 이루어지며, 줄 수는 정해져 있지 않습니다. 각 줄에는 정수 mm 하나가 주어지고 2≤m≤167772162 \le m \le 16777216 (2242^{24}) 를 만족합니다. 마지막 줄에는 00 이 주어지는데, 이는 입력의 끝을 나타내며 처리하면 안 됩니다.

출력

입력의 각 나머지 mm 에 대해, 나머지 값과 공백 한 칸, 그리고 mm 으로 나눈 피보나치 수열의 가장 작은 주기 길이를 차례로 출력하세요.

예제1

  1. 예제 1

    입력
    2
    3
    4
    5
    6
    12345678
    16777216
    0
    
    예상 출력
    2 3
    3 8
    4 6
    5 20
    6 24
    12345678 700512
    16777216 25165824