만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

피사노 주기

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

요약
각 테스트 케이스마다 M으로 나눈 피보나치 수 나머지의 순환 구간 길이를 구합니다.
난이도

쉬움10점 중 3점

유형
시뮬레이션, 수학
정답자
아직 제출이 없습니다

문제

1960년에 IBM에서 일하던 Donald Wall은 피보나치 수열을 mm으로 나눈 나머지가 주기를 이룬다는 사실을 증명했다.

예를 들어 피보나치 수열의 처음 10개 항을 11로 나눈 나머지는 다음과 같다.

nn12345678910
F(n)F(n)11235813213455
F(n) mod 11F(n) \bmod 1111235821010

나머지로 만든 수열은 같은 구간을 되풀이한다. 되풀이되는 부분 수열의 길이를 k(m)k(m)이라고 하면 k(11)=10k(11) = 10이다.

Wall은 다음 성질도 증명했다.

  • m>2m > 2이면 k(m)k(m)은 짝수다.
  • 22보다 큰 짝수 nn마다 k(m)=nk(m) = n인 mm이 존재한다.
  • k(m)≤m2−1k(m) \le m^2 - 1
  • k(2n)=3×2n−1k(2^n) = 3 \times 2^{n-1}
  • k(5n)=4×5nk(5^n) = 4 \times 5^n
  • k(2×5n)=12×5nk(2 \times 5^n) = 12 \times 5^n
  • n>2n > 2이면 k(10n)=15×10n−1k(10^n) = 15 \times 10^{n-1}

mm이 주어졌을 때 k(m)k(m)을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 PP가 주어진다.

다음 PP개 줄에는 각 줄마다 정수 NN과 MM이 공백 하나로 구분되어 주어진다. NN은 테스트 케이스의 번호이고, MM은 문제에서 설명한 mm이다.

출력

각 테스트 케이스마다 테스트 케이스의 번호 NN과 k(M)k(M)을 공백 하나로 구분해 한 줄에 출력한다. 입력에 주어진 순서를 그대로 따른다.

제한

  • 1≤P≤1,0001 \le P \le 1{,}000
  • 2≤M≤1,000,0002 \le M \le 1{,}000{,}000
  • 모든 테스트 케이스의 k(M)k(M)을 더한 값은 500,000500{,}000 이하다.

예제1

  1. 예제 1

    입력
    5
    1 4
    2 5
    3 11
    4 123456
    5 987654
    
    예상 출력
    1 6
    2 20
    3 10
    4 15456
    5 332808