#include<stdio.h>
#include <iostream>
using namespace std;
int findgcd(int num1,int num2)
{
int rem=num2%num1;
if(rem==0)
return num1;
findgcd(rem,num1);
}
void fib(int n)
{ int sum1[100000]={0};
int temp1[100000]={0};
int temp2[100000]={0};
/* Declare an array to store fibonacci numbers. */
int i;
/* 0th and 1st number of the series are 0 and 1*/
temp2[0]=0;
int*prev2=temp2;
temp1[0]=1;
int*sum=sum1;
int*prev1=temp1;
int j,x;
for (i = 2; i <= n; i++)
{
int te=0;
j=0;
while(prev1[j]!=0||prev2[j]!=0||prev2[j+1]!=0||prev1[j+1]!=0||prev2[j+2]!=0)
{ x=prev1[j]+prev2[j];
if(te==1)
{prev1[j]=prev1[j]-1;te=0;}//leaned how to add using arrays
if(x<=9)
sum[j]=x;
else {sum[j]=x%10;
prev1[j+1]=prev1[j+1]+1;te=1;}
j++;}
if(i!=n){int*temp1=prev2;
int*temp=prev1;
prev1=sum;
prev2=temp;
sum=temp1;}
}
int rem=0;
if(n!=1){for(int num=j-1;num>=0;num--)
{
rem+=sum[num]%1000000007;
printf("%d",sum[num]);}
printf("\n");}
else printf("1\n");
}
int main ()
{ int test,i;
scanf("%d",&test);
for(i=1;i<=test;i++)
{int a,b;
scanf("%d%d",&a,&b);
int n=findgcd(a,b);
fib(n);}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGZpbmRnY2QoaW50IG51bTEsaW50IG51bTIpCnsKICAgIGludCByZW09bnVtMiVudW0xOwogICAgaWYocmVtPT0wKQogICByZXR1cm4gbnVtMTsKICAgIGZpbmRnY2QocmVtLG51bTEpOwoKfQp2b2lkIGZpYihpbnQgbikKeyAgaW50IHN1bTFbMTAwMDAwXT17MH07CiBpbnQgdGVtcDFbMTAwMDAwXT17MH07CiBpbnQgdGVtcDJbMTAwMDAwXT17MH07CiAgLyogRGVjbGFyZSBhbiBhcnJheSB0byBzdG9yZSBmaWJvbmFjY2kgbnVtYmVycy4gKi8KCiAgaW50IGk7CgogIC8qIDB0aCBhbmQgMXN0IG51bWJlciBvZiB0aGUgc2VyaWVzIGFyZSAwIGFuZCAxKi8KCiAgdGVtcDJbMF09MDsKICBpbnQqcHJldjI9dGVtcDI7CgogIHRlbXAxWzBdPTE7CiAgaW50KnN1bT1zdW0xOwogIGludCpwcmV2MT10ZW1wMTsKCiAgaW50IGoseDsKICBmb3IgKGkgPSAyOyBpIDw9IG47IGkrKykKICB7CiAgICAgIGludCB0ZT0wOwogICAgICBqPTA7CiAgd2hpbGUocHJldjFbal0hPTB8fHByZXYyW2pdIT0wfHxwcmV2MltqKzFdIT0wfHxwcmV2MVtqKzFdIT0wfHxwcmV2MltqKzJdIT0wKQogICAgICB7ICB4PXByZXYxW2pdK3ByZXYyW2pdOwogICAgICAgICBpZih0ZT09MSkKICAgICAgICAge3ByZXYxW2pdPXByZXYxW2pdLTE7dGU9MDt9Ly9sZWFuZWQgaG93IHRvIGFkZCB1c2luZyBhcnJheXMKICAgICAgICAgaWYoeDw9OSkKICAgICAgICAgc3VtW2pdPXg7CiAgICAgICAgICBlbHNlIHtzdW1bal09eCUxMDsKICAgICAgICAgIHByZXYxW2orMV09cHJldjFbaisxXSsxO3RlPTE7fQogICAgICAgICAgaisrO30KICAgICAgICAgIGlmKGkhPW4pe2ludCp0ZW1wMT1wcmV2MjsKICAgICAgICAgaW50KnRlbXA9cHJldjE7CiAgICAgICAgIHByZXYxPXN1bTsKICAgICAgICAgcHJldjI9dGVtcDsKICAgICAgICAgc3VtPXRlbXAxO30KICAgICAgfQogICAgICBpbnQgcmVtPTA7CiAgICBpZihuIT0xKXtmb3IoaW50IG51bT1qLTE7bnVtPj0wO251bS0tKQogICAgICAgIHsKICAgICAgICByZW0rPXN1bVtudW1dJTEwMDAwMDAwMDc7CiAgICAgICAgcHJpbnRmKCIlZCIsc3VtW251bV0pO30KCiAgICAgcHJpbnRmKCJcbiIpO30KICAgIGVsc2UgcHJpbnRmKCIxXG4iKTsKCiAgfQoKCgppbnQgbWFpbiAoKQp7IGludCB0ZXN0LGk7CiAgc2NhbmYoIiVkIiwmdGVzdCk7CiAgZm9yKGk9MTtpPD10ZXN0O2krKykKICB7aW50IGEsYjsKCiAgc2NhbmYoIiVkJWQiLCZhLCZiKTsKICBpbnQgbj1maW5kZ2NkKGEsYik7CgoKICBmaWIobik7fQoKICByZXR1cm4gMDsKfQo=