#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
typedef long long int lld;
lld n;
string s;
int odd, even;
lld dp[10][100][100][2];
lld solve(lld pos, lld evensum, lld oddsum, lld flag)
{
lld &ans = dp[pos][evensum][oddsum][flag];
if (ans!=-1) return ans;
ans=0;
if (pos==n)
{
return (evensum-oddsum == 1);
}
if (!flag)
{
for (int i=0; i<=9; i++)
{
if (pos%2==even)
{
ans+=solve(pos+1, evensum+i, oddsum, 0);
}
else
{
ans+=solve(pos+1, evensum, oddsum+i, 0);
}
}
}
else
{
int u = s[pos]-'0';
for (int i=0; i<u; i++)
{
if (pos%2==even)
ans+=solve(pos+1, evensum+i, oddsum, 0);
else
{
ans+=solve(pos+1, evensum, oddsum+i, 0);
}
}
if (pos%2==even)
ans+=solve(pos+1, evensum+u, oddsum, 1);
else
{
ans+=solve(pos+1, evensum, oddsum+u, 1);
}
}
return ans;
}
bool isGood()
{
lld evensum, oddsum;
evensum=oddsum=0;
for (int i=0; i<n; i++)
{
if (i%2==odd)
oddsum+=s[i]-'0';
else
{
evensum+=s[i]-'0';
}
}
return (evensum-oddsum==1);
}
int main()
{
lld t;
cin>>t;
while (t--)
{
string str1, str2;
cin>>str1>>str2;
s = str2;
n = s.size();
lld n1 = str1.size();
if (n1!=n)
{
for (lld i=n1; i<n; i++)
str1 = "0"+str1;
}
if (n%2==1)
{
odd = 0;
even = 1;
}
else
{
odd = 1;
even = 0;
}
memset(dp, -1, sizeof(dp));
lld ans1 = solve(0, 0, 0, 1);
s = str1;
memset(dp, -1, sizeof(dp));
lld ans2 = solve(0, 0, 0, 1);
lld ans3 = isGood();
cout<<ans1-ans2+ans3<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGludCBsbGQ7CmxsZCBuOwpzdHJpbmcgczsKaW50IG9kZCwgZXZlbjsKCmxsZCBkcFsxMF1bMTAwXVsxMDBdWzJdOwoKbGxkIHNvbHZlKGxsZCBwb3MsIGxsZCBldmVuc3VtLCBsbGQgb2Rkc3VtLCBsbGQgZmxhZykKewogICAgbGxkICZhbnMgPSBkcFtwb3NdW2V2ZW5zdW1dW29kZHN1bV1bZmxhZ107CiAgICBpZiAoYW5zIT0tMSkgcmV0dXJuIGFuczsKICAgIGFucz0wOwogICAgaWYgKHBvcz09bikKICAgIHsKICAgICAgICByZXR1cm4gKGV2ZW5zdW0tb2Rkc3VtID09IDEpOwogICAgfQogICAgCiAgICBpZiAoIWZsYWcpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaT0wOyBpPD05OyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpZiAocG9zJTI9PWV2ZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFucys9c29sdmUocG9zKzEsIGV2ZW5zdW0raSwgb2Rkc3VtLCAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFucys9c29sdmUocG9zKzEsIGV2ZW5zdW0sIG9kZHN1bStpLCAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBpbnQgdSA9IHNbcG9zXS0nMCc7CiAgICAgICAgZm9yIChpbnQgaT0wOyBpPHU7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChwb3MlMj09ZXZlbikKICAgICAgICAgICAgICAgIGFucys9c29sdmUocG9zKzEsIGV2ZW5zdW0raSwgb2Rkc3VtLCAwKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhbnMrPXNvbHZlKHBvcysxLCBldmVuc3VtLCBvZGRzdW0raSwgMCk7CiAgICAgICAgICAgIH0gCiAgICAgICAgfQogICAgICAgIGlmIChwb3MlMj09ZXZlbikKICAgICAgICAgICAgYW5zKz1zb2x2ZShwb3MrMSwgZXZlbnN1bSt1LCBvZGRzdW0sIDEpOwogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGFucys9c29sdmUocG9zKzEsIGV2ZW5zdW0sIG9kZHN1bSt1LCAxKTsKICAgICAgICB9IAogICAgfQogICAgICAgIAogICAgcmV0dXJuIGFuczsKfQoKYm9vbCBpc0dvb2QoKQp7CiAgICBsbGQgZXZlbnN1bSwgb2Rkc3VtOwogICAgZXZlbnN1bT1vZGRzdW09MDsKICAgIGZvciAoaW50IGk9MDsgaTxuOyBpKyspCiAgICB7CiAgICAgICAgaWYgKGklMj09b2RkKQogICAgICAgICAgICBvZGRzdW0rPXNbaV0tJzAnOwogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGV2ZW5zdW0rPXNbaV0tJzAnOwogICAgICAgIH0KICAgICAgICAKICAgIH0KICAgIHJldHVybiAoZXZlbnN1bS1vZGRzdW09PTEpOwp9CgppbnQgbWFpbigpCnsKICAgIGxsZCB0OwogICAgY2luPj50OwogICAgd2hpbGUgKHQtLSkKICAgIHsKICAgICAgICBzdHJpbmcgc3RyMSwgc3RyMjsKICAgICAgICBjaW4+PnN0cjE+PnN0cjI7CiAgICAgICAgcyA9IHN0cjI7CiAgICAgICAgbiA9IHMuc2l6ZSgpOwogICAgICAgIGxsZCBuMSA9IHN0cjEuc2l6ZSgpOwogICAgICAgIGlmIChuMSE9bikKICAgICAgICB7CiAgICAgICAgICAgIGZvciAobGxkIGk9bjE7IGk8bjsgaSsrKQogICAgICAgICAgICAgICAgc3RyMSA9ICIwIitzdHIxOwogICAgICAgIH0KICAgICAgICBpZiAobiUyPT0xKQogICAgICAgIHsKICAgICAgICAgICAgb2RkID0gMDsKICAgICAgICAgICAgZXZlbiA9IDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIG9kZCA9IDE7CiAgICAgICAgICAgIGV2ZW4gPSAwOwogICAgICAgIH0KICAgICAgICBtZW1zZXQoZHAsIC0xLCBzaXplb2YoZHApKTsKICAgICAgICBsbGQgYW5zMSA9IHNvbHZlKDAsIDAsIDAsIDEpOwogICAgICAgIHMgPSBzdHIxOwogICAgICAgIG1lbXNldChkcCwgLTEsIHNpemVvZihkcCkpOwogICAgICAgIGxsZCBhbnMyID0gc29sdmUoMCwgMCwgMCwgMSk7CiAgICAgICAgbGxkIGFuczMgPSBpc0dvb2QoKTsKICAgICAgICBjb3V0PDxhbnMxLWFuczIrYW5zMzw8ZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9