#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 20;
const int mod = 1000000007;
ll dp[N][2][N][N][N][10];
ll dp1[N][N][N][N][10];
int vis[N][2][N][N][N][10];
int cs;
ll digit[N][10];
vector<int>vc;
ll rec(int pos,int sm,int smd,int bgd,int p,int d)
{
if(smd>p || 18-bgd<p) return 0;
if(pos==19)
{
if(smd>p) return 0;
if(18-bgd>=p) return 1;
return 0;
}
if(sm==1 && dp1[pos][smd][bgd][p][d]!=-1) return dp1[pos][smd][bgd][p][d];
ll &ret=dp[pos][sm][smd][bgd][p][d];
if(vis[pos][sm][smd][bgd][p][d]==cs) return ret;
vis[pos][sm][smd][bgd][p][d]=cs;
ret=0;
if(sm==1)
{
ret+=rec(pos+1,sm,smd,bgd,p,d);
ret+=1LL*d*rec(pos+1,sm,smd+1,bgd,p,d);
ret+=1LL*(9-d)*rec(pos+1,sm,smd,bgd+1,p,d);
}
else
{
for(int i=0; i<=9; i++)
{
if(sm==0 && i>vc[pos]) break;
ret+=rec(pos+1,sm|(i<vc[pos]),smd+(i<d),bgd+(i>d),p,d);
}
}
if(sm==1) dp1[pos][smd][bgd][p][d]=ret;
return ret;
}
ll cal(ll x,int p,int d)
{
vc.clear();
while(x>0)
{
vc.push_back(x%10);
x/=10;
}
while(vc.size()<19) vc.push_back(0);
reverse(vc.begin(),vc.end());
return rec(0,0,0,0,p,d);
}
int main()
{
memset(dp1,-1,sizeof dp1);
int t;
ll L,R;
scanf("%d",&t);
while(t--)
{
scanf("%lld %lld",&L,&R);
cs++;
memset(digit,0,sizeof digit);
for(int p=0; p<=18; p++)
{
for(int d=0; d<=9; d++)
{
digit[p][d]=cal(R,p,d);
}
}
cs++;
for(int p=0; p<=18; p++)
{
for(int d=0; d<=9; d++)
{
digit[p][d]-=cal(L-1,p,d);
digit[p][d]%=mod;
}
}
ll ans=0;
for(int p=0; p<=18; p++)
{
for(int d1=0; d1<=9; d1++)
{
for(int d2=d1+1; d2<=9; d2++)
{
ll tmp=1LL*(d2-d1)*digit[p][d1];
tmp%=mod;
tmp=1LL*tmp*digit[p][d2];
tmp%=mod;
ans+=2LL*tmp;
ans%=mod;
}
}
}
printf("%lld\n",ans);
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKY29uc3QgaW50IE4gPSAyMDsKY29uc3QgaW50IG1vZCA9IDEwMDAwMDAwMDc7CiAKbGwgZHBbTl1bMl1bTl1bTl1bTl1bMTBdOwpsbCBkcDFbTl1bTl1bTl1bTl1bMTBdOwppbnQgdmlzW05dWzJdW05dW05dW05dWzEwXTsKaW50IGNzOwpsbCBkaWdpdFtOXVsxMF07CnZlY3RvcjxpbnQ+dmM7CiAKbGwgcmVjKGludCBwb3MsaW50IHNtLGludCBzbWQsaW50IGJnZCxpbnQgcCxpbnQgZCkKewogICAgaWYoc21kPnAgfHwgMTgtYmdkPHApIHJldHVybiAwOwogICAgaWYocG9zPT0xOSkKICAgIHsKICAgICAgICBpZihzbWQ+cCkgcmV0dXJuIDA7CiAgICAgICAgaWYoMTgtYmdkPj1wKSByZXR1cm4gMTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmKHNtPT0xICYmIGRwMVtwb3NdW3NtZF1bYmdkXVtwXVtkXSE9LTEpIHJldHVybiBkcDFbcG9zXVtzbWRdW2JnZF1bcF1bZF07CiAgICBsbCAmcmV0PWRwW3Bvc11bc21dW3NtZF1bYmdkXVtwXVtkXTsKICAgIGlmKHZpc1twb3NdW3NtXVtzbWRdW2JnZF1bcF1bZF09PWNzKSByZXR1cm4gcmV0OwogICAgdmlzW3Bvc11bc21dW3NtZF1bYmdkXVtwXVtkXT1jczsKICAgIHJldD0wOwogICAgaWYoc209PTEpCiAgICB7CiAgICAgICAgcmV0Kz1yZWMocG9zKzEsc20sc21kLGJnZCxwLGQpOwogICAgICAgIHJldCs9MUxMKmQqcmVjKHBvcysxLHNtLHNtZCsxLGJnZCxwLGQpOwogICAgICAgIHJldCs9MUxMKig5LWQpKnJlYyhwb3MrMSxzbSxzbWQsYmdkKzEscCxkKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBmb3IoaW50IGk9MDsgaTw9OTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYoc209PTAgJiYgaT52Y1twb3NdKSBicmVhazsKICAgICAgICAgICAgcmV0Kz1yZWMocG9zKzEsc218KGk8dmNbcG9zXSksc21kKyhpPGQpLGJnZCsoaT5kKSxwLGQpOwogICAgICAgIH0KICAgIH0KICAgIGlmKHNtPT0xKSBkcDFbcG9zXVtzbWRdW2JnZF1bcF1bZF09cmV0OwogICAgcmV0dXJuIHJldDsKfQogCmxsIGNhbChsbCB4LGludCBwLGludCBkKQp7CiAgICB2Yy5jbGVhcigpOwogICAgd2hpbGUoeD4wKQogICAgewogICAgICAgIHZjLnB1c2hfYmFjayh4JTEwKTsKICAgICAgICB4Lz0xMDsKICAgIH0KICAgIHdoaWxlKHZjLnNpemUoKTwxOSkgdmMucHVzaF9iYWNrKDApOwogICAgcmV2ZXJzZSh2Yy5iZWdpbigpLHZjLmVuZCgpKTsKICAgIHJldHVybiByZWMoMCwwLDAsMCxwLGQpOwp9CiAKIAogCmludCBtYWluKCkKewogICAgbWVtc2V0KGRwMSwtMSxzaXplb2YgZHAxKTsKICAgIGludCB0OwogICAgbGwgTCxSOwogICAgc2NhbmYoIiVkIiwmdCk7CiAgICB3aGlsZSh0LS0pCiAgICB7CiAgICAgICAgc2NhbmYoIiVsbGQgJWxsZCIsJkwsJlIpOwogICAgICAgIGNzKys7CiAgICAgICAgbWVtc2V0KGRpZ2l0LDAsc2l6ZW9mIGRpZ2l0KTsKICAgICAgICBmb3IoaW50IHA9MDsgcDw9MTg7IHArKykKICAgICAgICB7CiAgICAgICAgICAgIGZvcihpbnQgZD0wOyBkPD05OyBkKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRpZ2l0W3BdW2RdPWNhbChSLHAsZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY3MrKzsKICAgICAgICBmb3IoaW50IHA9MDsgcDw9MTg7IHArKykKICAgICAgICB7CiAgICAgICAgICAgIGZvcihpbnQgZD0wOyBkPD05OyBkKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRpZ2l0W3BdW2RdLT1jYWwoTC0xLHAsZCk7CiAgICAgICAgICAgICAgICBkaWdpdFtwXVtkXSU9bW9kOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxsIGFucz0wOwogICAgICAgIGZvcihpbnQgcD0wOyBwPD0xODsgcCsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yKGludCBkMT0wOyBkMTw9OTsgZDErKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yKGludCBkMj1kMSsxOyBkMjw9OTsgZDIrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBsbCB0bXA9MUxMKihkMi1kMSkqZGlnaXRbcF1bZDFdOwogICAgICAgICAgICAgICAgICAgIHRtcCU9bW9kOwogICAgICAgICAgICAgICAgICAgIHRtcD0xTEwqdG1wKmRpZ2l0W3BdW2QyXTsKICAgICAgICAgICAgICAgICAgICB0bXAlPW1vZDsKICAgICAgICAgICAgICAgICAgICBhbnMrPTJMTCp0bXA7CiAgICAgICAgICAgICAgICAgICAgYW5zJT1tb2Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcHJpbnRmKCIlbGxkXG4iLGFucyk7CiAgICB9CiAKfQ==