피보나치 수와 최대공약수

n과 m이 최대 10의 18제곱일 때 n번째와 m번째 피보나치 수의 최대공약수를 1,000,000,007로 나눈 나머지를 구합니다.

보통7정수론행렬수학아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 2번째부터는 바로 앞 두 피보나치 수의 합이다.

식으로 쓰면 Fn=Fn1+Fn2 (n2)F_n = F_{n-1} + F_{n-2}\ (n \ge 2)이다.

n=17n = 17까지 피보나치 수를 쓰면 다음과 같다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

nnmm이 주어지면 nn번째 피보나치 수와 mm번째 피보나치 수의 최대공약수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 nnmm이 공백으로 구분되어 주어진다. nnmm101810^{18}보다 작거나 같은 자연수이다.

출력

첫째 줄에 nn번째 피보나치 수와 mm번째 피보나치 수의 최대공약수를 1,000,000,007로 나눈 나머지를 출력한다. 최대공약수는 실제 피보나치 수로 구한 뒤에 나머지를 취한다.