#include<iostream>
#include<cstdio>
#include<set>
#define inf 1e18
#define mk make_pair
#define fi first
#define se second
#define pii pair<long long,long long>
#define p 1000000007
using namespace std;
int T,sz;
long long ans;
long long f[1010],b[1010];
set<pii> s[1010];
set<pii>::iterator it;
int main()
{
	scanf("%d",&T);
	f[0]=f[1]=1;
	for(sz=2;;sz++)
	{
		f[sz]=f[sz-1]+f[sz-2];
		if(f[sz]>=inf) break;
	}
	for(int i=1;i<sz;i++)
		if(f[i]*2>f[i+1])
		s[i].insert(mk(f[i],f[i+1]));
	s[1].insert(mk(1,1));
	for(int i=1;i<=sz-2;i++)
	{
		b[i]=f[i],b[i+1]=f[i+2];
		if(b[i]*2LL>b[i+1])
		s[i].insert(mk(b[i],b[i+1]));
		for(int j=i+1;;j++)
		{
			b[j+1]=b[j]+b[j-1];
			if(b[j+1]>=inf) break;
			if(b[j]*2LL>b[j+1])
			s[j].insert(mk(b[j],b[j+1]));
		}
	}
	while(T--)
	{
		long long X,Y;
		scanf("%lld%lld",&X,&Y);
		if(X>Y) swap(X,Y);
		int ma=1;
		for(;;ma++)
		{
			pii x=*s[ma].begin();
			if(x.fi>X||x.se>Y) break;
		}
		ma--;
		if(ma==1) ans=X%p*Y%p;
		else
		for(it=s[ma].begin();it!=s[ma].end();it++)
		{
			pii x=*it;
			if(x.fi<=X)
				(ans+=max(0LL,Y-x.se+x.fi)/x.fi+max(0LL,X-x.se+x.fi)/x.fi)%=p;
		}
		printf("%d %lld\n",ma,ans);
		ans=0;
	}			
	return 0;
}