// #include <iostream>
// #include<vector>
// #include <algorithm>
#include <bits/stdc++.h>
using namespace std;
const int M = 1'000'000'007;
const int INF=1e9+5;
// const long long INF = LLONG_MAX / 4;
// void addi(int& a,int b){
// a+=b;
// while (a>=M){
// a-=M;
// }
// }
// if say till i its a boring number so if ith pos is odd and i put odd
// at it (even case also) so i will pass on the boringness to i+1 otherwise
// i wont pass boringness further
int cnt(bool flag,int i,string rs){
long long x;
int n=rs.size();
if (flag){
string xs;
if (0 <= n-i+1 && n-i+1 < n){
xs=rs.substr(n-i+1);
}
else {
xs="0";
}
x = stoi(xs)+1;
}
else{
x = (pow(10, i-1)+0.1);
}
return x;
}
int f(long long r){
string rs = to_string(r);
int n=rs.size();
vector<vector<long long> >dp(n+1,vector<long long>(2,0));
for(int i=1;i<=n;i++){
for(int tight=0;tight<2;tight++){
int ub = tight? (rs[n-i]-'0'):9;
for(int d=0;d<=ub;d++){
dp[i][tight]+=(d*cnt(tight & (d==ub),i,rs)+dp[i-1][tight & (d==ub)]);
}
}
}
return dp[n][1];
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin>>t;
while(t>0){
long long x,y;
cin>> x>>y;
long long ans= f(y)-f(x-1);
cout<< ans<<endl;
t--;
}
return 0;
}
Ly8gI2luY2x1ZGUgPGlvc3RyZWFtPgovLyAjaW5jbHVkZTx2ZWN0b3I+Ci8vICNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmNvbnN0IGludCBNID0gMScwMDAnMDAwJzAwNzsKY29uc3QgaW50IElORj0xZTkrNTsKLy8gY29uc3QgbG9uZyBsb25nIElORiA9IExMT05HX01BWCAvIDQ7CgovLyB2b2lkIGFkZGkoaW50JiBhLGludCBiKXsKLy8gICAgIGErPWI7Ci8vICAgICB3aGlsZSAoYT49TSl7Ci8vICAgICAgICAgYS09TTsKLy8gICAgIH0KLy8gfQoKICAgIC8vIGlmIHNheSB0aWxsIGkgaXRzIGEgYm9yaW5nIG51bWJlciBzbyBpZiBpdGggcG9zIGlzIG9kZCBhbmQgaSBwdXQgb2RkCiAgICAvLyBhdCBpdCAoZXZlbiBjYXNlIGFsc28pIHNvIGkgd2lsbCBwYXNzIG9uIHRoZSBib3JpbmduZXNzIHRvIGkrMSBvdGhlcndpc2UKICAgIC8vIGkgd29udCBwYXNzIGJvcmluZ25lc3MgZnVydGhlcgoKaW50IGNudChib29sIGZsYWcsaW50IGksc3RyaW5nIHJzKXsKICAgICAgICBsb25nIGxvbmcgeDsKICAgICAgICBpbnQgbj1ycy5zaXplKCk7CiAgICAgICAgaWYgKGZsYWcpewogICAgICAgICAgICBzdHJpbmcgeHM7CiAgICAgICAgICAgIGlmICgwIDw9IG4taSsxICYmIG4taSsxIDwgbil7CiAgICAgICAgICAgICAgICB4cz1ycy5zdWJzdHIobi1pKzEpOwogICAgICAgICAgICB9IAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHhzPSIwIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB4ID0gc3RvaSh4cykrMTsKICAgICAgICAgICAgfQoKICAgICAgICBlbHNlewogICAgICAgICAgICB4ID0gKHBvdygxMCwgaS0xKSswLjEpOwoKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHg7CiAgICAgICAgfQppbnQgZihsb25nIGxvbmcgcil7CiAgICBzdHJpbmcgcnMgPSB0b19zdHJpbmcocik7CiAgICBpbnQgbj1ycy5zaXplKCk7CiAgICB2ZWN0b3I8dmVjdG9yPGxvbmcgbG9uZz4gPmRwKG4rMSx2ZWN0b3I8bG9uZyBsb25nPigyLDApKTsKCiAgICBmb3IoaW50IGk9MTtpPD1uO2krKyl7CiAgICAgICAgZm9yKGludCB0aWdodD0wO3RpZ2h0PDI7dGlnaHQrKyl7CiAgICAgICAgICAgIGludCB1YiA9IHRpZ2h0PyAocnNbbi1pXS0nMCcpOjk7CiAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgZm9yKGludCBkPTA7ZDw9dWI7ZCsrKXsKICAgICAgICAgICAgICAgIGRwW2ldW3RpZ2h0XSs9KGQqY250KHRpZ2h0ICYgKGQ9PXViKSxpLHJzKStkcFtpLTFdW3RpZ2h0ICYgKGQ9PXViKV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKfQogICB9CiAgICByZXR1cm4gZHBbbl1bMV07Cn0KICAKICAgIAoKCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogCiAgICBpbnQgdDsKICAgIGNpbj4+dDsKICAgIAogICAgd2hpbGUodD4wKXsKICAgICAgICBsb25nIGxvbmcgeCx5OwogICAgICAgIGNpbj4+IHg+Pnk7CiAgICAgICAgCiAgICAgICAgbG9uZyBsb25nIGFucz0gZih5KS1mKHgtMSk7CgogICAgICAgIGNvdXQ8PCBhbnM8PGVuZGw7CiAgICAgICAgdC0tOwoKICAgIH0KICAgIHJldHVybiAwOwp9Cg==