#include<bits/stdc++.h>
typedef long long ll;
const int p=1e9+7;

void up(int &a,int b){(a+=b)>=p&&(a-=p);}

ll f[101][3];

int T,k;
ll x,y,ans;

void dfs(ll a,ll b,int t)
{
    if(t+1==k){ans+=((y-a)/b+(x-a)/b)%p;return;}

    for(a+=b;f[k-t][1]*b+f[k-t][2]*a<=x&&f[k-t+1][1]*b+f[k-t+1][2]*a<=y;a+=b)
	dfs(b,a,t+1);
}

int main()
{
    f[1][0]=f[1][1]=f[2][0]=f[2][2]=1;
    for(int i=3;i<=100;++i)
	for(int j=0;j<=2;++j)
	    f[i][j]=f[i-2][j]+f[i-1][j];
    
    scanf("%d",&T);
    for(;T--;)
    {
	scanf("%lld%lld",&x,&y);
	if(x>y)std::swap(x,y);

	if(x<2){printf("1 %lld\n",y%p);continue;}

	for(k=2;f[k][0]<=x&&f[k+1][0]<=y;++k);
	if((k-=2)<2){printf("1 %lld\n",x*y%p);continue;}

	ans=0;
	for(int i=2;f[k][1]+f[k][2]*i<=x&&f[k+1][1]+f[k+1][2]*i<=y;++i)
	    dfs(1,i,1);
	printf("%d %lld\n",k,ans%p);
    }
    
    return 0;
}
