#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> pp;
#define all(a) (a).begin(), (a).end()
#define what_is(x) cerr << #x << " is " << x << '\n';
#define print(a) for (const auto &x : (a)) cout << x << ' '; cout << '\n';
const int N = 2e5 + 7;
const int MOD = 1e9 + 7;
const int INF = 1e15;
pp mem[16][16][2][2] {};
bool vis[16][16][2][2] {};
int mx = 0;
string num;
pp dp(int i, int bigger, bool st, bool sm) {
if (i == num.size()) return {0, (st ? 1 : 0)};
if (vis[i][bigger][st][sm]) return mem[i][bigger][st][sm];
vis[i][bigger][st][sm] = true;
int ret = 0, count = 0;
ret = 0;
if (!st) {
pp p = dp(i + 1, bigger, st, 1);
ret = p.first;
count = p.second;
}
int x = num[i] - '0';
for (int d = 0; d < 10; ++d) {
if (!st and !d) continue;
if (!sm and d > x) break;
// the number in which this value will contribute
if (d == mx) {
pp p = dp(i + 1, bigger, 1, sm || (d < x));
ret += p.second * bigger + p.first;
count += p.second;
} else {
pp p = dp(i + 1, bigger + (d > mx), 1, sm | (d < x));
ret += p.first;
count += p.second;
}
}
return mem[i][bigger][st][sm] = {ret, count};
}
int count_inv(int n) {
num = to_string(n);
memset(vis, false, sizeof(vis));
return dp(0, 0, 0, 0).first;
}
void solve() {
int l, r; cin >> l >> r;
int ans = 0;
for (mx = 0; mx < 10; ++mx) {
ans += count_inv(r) - count_inv(l - 1);
}
cout << ans << '\n';
}
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int tt = 1;
cin >> tt;
while (tt--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcHA7CiNkZWZpbmUgYWxsKGEpIChhKS5iZWdpbigpLCAoYSkuZW5kKCkKI2RlZmluZSB3aGF0X2lzKHgpIGNlcnIgPDwgI3ggPDwgIiBpcyAiIDw8IHggPDwgJ1xuJzsKI2RlZmluZSBwcmludChhKSBmb3IgKGNvbnN0IGF1dG8gJnggOiAoYSkpIGNvdXQgPDwgeCA8PCAnICc7IGNvdXQgPDwgJ1xuJzsKY29uc3QgaW50IE4gPSAyZTUgKyA3Owpjb25zdCBpbnQgTU9EID0gMWU5ICsgNzsKY29uc3QgaW50IElORiA9IDFlMTU7CgoKcHAgbWVtWzE2XVsxNl1bMl1bMl0ge307CmJvb2wgdmlzWzE2XVsxNl1bMl1bMl0ge307CmludCBteCA9IDA7CnN0cmluZyBudW07CgpwcCBkcChpbnQgaSwgaW50IGJpZ2dlciwgYm9vbCBzdCwgYm9vbCBzbSkgewogICAgaWYgKGkgPT0gbnVtLnNpemUoKSkgcmV0dXJuIHswLCAoc3QgPyAxIDogMCl9OwoKICAgIGlmICh2aXNbaV1bYmlnZ2VyXVtzdF1bc21dKSByZXR1cm4gbWVtW2ldW2JpZ2dlcl1bc3RdW3NtXTsKICAgIHZpc1tpXVtiaWdnZXJdW3N0XVtzbV0gPSB0cnVlOwoKICAgIGludCByZXQgPSAwLCBjb3VudCA9IDA7CgoKCiAgICByZXQgPSAwOwogICAgaWYgKCFzdCkgewogICAgICAgIHBwIHAgPSBkcChpICsgMSwgYmlnZ2VyLCBzdCwgMSk7CiAgICAgICAgcmV0ID0gcC5maXJzdDsKICAgICAgICBjb3VudCA9IHAuc2Vjb25kOwogICAgfQoKICAgIGludCB4ID0gbnVtW2ldIC0gJzAnOwogICAgZm9yIChpbnQgZCA9IDA7IGQgPCAxMDsgKytkKSB7CiAgICAgICAgaWYgKCFzdCBhbmQgIWQpIGNvbnRpbnVlOwogICAgICAgIGlmICghc20gYW5kIGQgPiB4KSBicmVhazsKCiAgICAgICAgLy8gdGhlIG51bWJlciBpbiB3aGljaCB0aGlzIHZhbHVlIHdpbGwgY29udHJpYnV0ZQogICAgICAgIGlmIChkID09IG14KSB7CiAgICAgICAgICAgIHBwIHAgPSBkcChpICsgMSwgYmlnZ2VyLCAxLCBzbSB8fCAoZCA8IHgpKTsKICAgICAgICAgICAgcmV0ICs9IHAuc2Vjb25kICogYmlnZ2VyICsgcC5maXJzdDsKICAgICAgICAgICAgY291bnQgKz0gcC5zZWNvbmQ7CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBwIHAgPSBkcChpICsgMSwgYmlnZ2VyICsgKGQgPiBteCksIDEsIHNtIHwgKGQgPCB4KSk7CiAgICAgICAgICAgIHJldCArPSBwLmZpcnN0OwogICAgICAgICAgICBjb3VudCArPSBwLnNlY29uZDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbWVtW2ldW2JpZ2dlcl1bc3RdW3NtXSA9IHtyZXQsIGNvdW50fTsKfQoKCmludCBjb3VudF9pbnYoaW50IG4pIHsKICAgIG51bSA9IHRvX3N0cmluZyhuKTsKICAgIG1lbXNldCh2aXMsIGZhbHNlLCBzaXplb2YodmlzKSk7CiAgICByZXR1cm4gZHAoMCwgMCwgMCwgMCkuZmlyc3Q7Cn0KCgp2b2lkIHNvbHZlKCkgewogICAgaW50IGwsIHI7IGNpbiA+PiBsID4+IHI7CgogICAgaW50IGFucyA9IDA7CiAgICBmb3IgKG14ID0gMDsgbXggPCAxMDsgKytteCkgewogICAgICAgIGFucyArPSBjb3VudF9pbnYocikgLSBjb3VudF9pbnYobCAtIDEpOwogICAgfQogICAgY291dCA8PCBhbnMgPDwgJ1xuJzsKCn0KCmludDMyX3QgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGNvdXQudGllKG51bGxwdHIpOwoKI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCgogICAgaW50IHR0ID0gMTsKICAgIGNpbiA+PiB0dDsKICAgIHdoaWxlICh0dC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==