#include <bits/stdc++.h>
#define int long long
#define fast ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define lg2(n) (63-__builtin_clzll(n))
#define mask(n) (1LL << (n))
#define TASK ""
#define openfile(); if( fopen(TASK".inp", "r")){freopen(TASK".inp", "r", stdin);freopen(TASK".out", "w", stdout);}
#define lc(n) (n << 1)
#define rc(n) ((n << 1) | 1)
#define fi first
#define se second
#define FOR(i, l, r, k) for( int i = l; i <= r; i += k)
#define FOD(i, r, l, k) for( int i = r; i >= l; i -= k)
#define mii map<int,int>
#define umi unordered_map<int, int>
#define pii pair<int,int>
#define vi vector<int>
using namespace std;
const int oo = 1e18;
const int mod = 1e9 + 7;
const int nmax = 2e5 + 8;
const int base = 311;
int q, dp[19][2][2][2][2][2][2][2][2][2][2][2];
int sol(int pos, int ck, int d[], string &x){
if(pos == 19){
int cnt = 0;
for(int i = 0; i <= 9; ++i){
cnt += (d[i] & 1);
}
return cnt <= 1 && ck;
}
if(dp[pos][ck][d[1]][d[2]][d[3]][d[4]][d[5]][d[6]][d[7]][d[8]][d[9]][d[0]] != -1)
return dp[pos][ck][d[1]][d[2]][d[3]][d[4]][d[5]][d[6]][d[7]][d[8]][d[9]][d[0]];
int lim = 9;
// if(ok) lim = x[pos] - '0';
int cur = 0;
for(int i = 0; i <= lim; ++i){
if(ck || i != 0) d[i] ^= 1;
cur += sol(pos + 1, ck || (i != 0), d, x);
if(ck || i != 0) d[i] ^= 1;
}
return dp[pos][ck][d[1]][d[2]][d[3]][d[4]][d[5]][d[6]][d[7]][d[8]][d[9]][d[0]] = cur;
}
int calc(int pos, int ok, int ck, int d[], string &x){
if(pos == 19){
int cnt = 0;
for(int i = 0; i <= 9; ++i){
cnt += (d[i] & 1);
}
return cnt <= 1 && ck;
}
if(!ok) return sol(pos, ck, d, x);
int lim = x[pos] - '0';
int cur = 0;
for(int i = 0; i <= lim; ++i){
if(ck || i != 0) d[i] ^= 1;
cur += calc(pos + 1, ok & (i == lim), ck || (i != 0), d, x);
if(ck || i != 0) d[i] ^= 1;
}
return cur;
}
void add(string &x){
while(x.size() < 19){
x = "0" + x;
}
}
bool check(string &s){
int d[10];
memset(d, 0, sizeof d);
for(int i = 0; i < s.size(); ++i){
int x = s[i] - '0';
d[x]++;
}
int cnt = 0;
for(int i = 0; i <= 9; ++i){
cnt += (d[i] & 1);
}
return cnt <= 1;
}
int d[11];
int range(string &x){
memset(d, 0, sizeof d);
return calc(0, 1, 0, d, x);
}
main(){
fast;
openfile();
cin >> q;
memset(dp, -1, sizeof dp);
while(q--){
string l, r;
cin >> l >> r;
int v = check(l);
add(l), add(r);
memset(d, 0, sizeof d);
cout << range(r) - range(l) + v << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUobnVsbHB0cik7IGNvdXQudGllKG51bGxwdHIpOwojZGVmaW5lIGxnMihuKSAoNjMtX19idWlsdGluX2NsemxsKG4pKQojZGVmaW5lIG1hc2sobikgKDFMTCA8PCAobikpCiNkZWZpbmUgVEFTSyAiIgojZGVmaW5lIG9wZW5maWxlKCk7ICBpZiggZm9wZW4oVEFTSyIuaW5wIiwgInIiKSl7ZnJlb3BlbihUQVNLIi5pbnAiLCAiciIsIHN0ZGluKTtmcmVvcGVuKFRBU0siLm91dCIsICJ3Iiwgc3Rkb3V0KTt9CiNkZWZpbmUgbGMobikgKG4gPDwgMSkKI2RlZmluZSByYyhuKSAoKG4gPDwgMSkgfCAxKQoKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIEZPUihpLCBsLCByLCBrKSBmb3IoIGludCBpID0gbDsgaSA8PSByOyBpICs9IGspCiNkZWZpbmUgRk9EKGksIHIsIGwsIGspIGZvciggaW50IGkgPSByOyBpID49IGw7IGkgLT0gaykKCiNkZWZpbmUgbWlpIG1hcDxpbnQsaW50PgojZGVmaW5lIHVtaSB1bm9yZGVyZWRfbWFwPGludCwgaW50PgojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgdmkgdmVjdG9yPGludD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgb28gPSAxZTE4Owpjb25zdCBpbnQgbW9kID0gMWU5ICsgNzsKY29uc3QgaW50IG5tYXggPSAyZTUgKyA4Owpjb25zdCBpbnQgYmFzZSA9IDMxMTsKCmludCBxLCBkcFsxOV1bMl1bMl1bMl1bMl1bMl1bMl1bMl1bMl1bMl1bMl1bMl07CgppbnQgc29sKGludCBwb3MsIGludCBjaywgaW50IGRbXSwgc3RyaW5nICZ4KXsKICAgIGlmKHBvcyA9PSAxOSl7CiAgICAgICAgaW50IGNudCA9IDA7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8PSA5OyArK2kpewogICAgICAgICAgICBjbnQgKz0gKGRbaV0gJiAxKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNudCA8PSAxICYmIGNrOwogICAgfQogICAgaWYoZHBbcG9zXVtja11bZFsxXV1bZFsyXV1bZFszXV1bZFs0XV1bZFs1XV1bZFs2XV1bZFs3XV1bZFs4XV1bZFs5XV1bZFswXV0gIT0gLTEpCiAgICAgICAgcmV0dXJuIGRwW3Bvc11bY2tdW2RbMV1dW2RbMl1dW2RbM11dW2RbNF1dW2RbNV1dW2RbNl1dW2RbN11dW2RbOF1dW2RbOV1dW2RbMF1dOwogICAgaW50IGxpbSA9IDk7Ci8vICAgIGlmKG9rKSBsaW0gPSB4W3Bvc10gLSAnMCc7CiAgICBpbnQgY3VyID0gMDsKICAgIGZvcihpbnQgaSA9IDA7IGkgPD0gbGltOyArK2kpewogICAgICAgIGlmKGNrIHx8IGkgIT0gMCkgZFtpXSBePSAxOwogICAgICAgIGN1ciArPSBzb2wocG9zICsgMSwgY2sgfHwgKGkgIT0gMCksIGQsIHgpOwogICAgICAgIGlmKGNrIHx8IGkgIT0gMCkgZFtpXSBePSAxOwogICAgfQogICAgcmV0dXJuIGRwW3Bvc11bY2tdW2RbMV1dW2RbMl1dW2RbM11dW2RbNF1dW2RbNV1dW2RbNl1dW2RbN11dW2RbOF1dW2RbOV1dW2RbMF1dID0gY3VyOwp9CmludCBjYWxjKGludCBwb3MsIGludCBvaywgaW50IGNrLCBpbnQgZFtdLCBzdHJpbmcgJngpewogICAgaWYocG9zID09IDE5KXsKICAgICAgICBpbnQgY250ID0gMDsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDw9IDk7ICsraSl7CiAgICAgICAgICAgIGNudCArPSAoZFtpXSAmIDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY250IDw9IDEgJiYgY2s7CiAgICB9CiAgICBpZighb2spIHJldHVybiBzb2wocG9zLCBjaywgZCwgeCk7CiAgICBpbnQgbGltID0geFtwb3NdIC0gJzAnOwogICAgaW50IGN1ciA9IDA7CiAgICBmb3IoaW50IGkgPSAwOyBpIDw9IGxpbTsgKytpKXsKICAgICAgICBpZihjayB8fCBpICE9IDApIGRbaV0gXj0gMTsKICAgICAgICBjdXIgKz0gY2FsYyhwb3MgKyAxLCBvayAmIChpID09IGxpbSksIGNrIHx8IChpICE9IDApLCBkLCB4KTsKICAgICAgICBpZihjayB8fCBpICE9IDApIGRbaV0gXj0gMTsKICAgIH0KICAgIHJldHVybiBjdXI7Cn0Kdm9pZCBhZGQoc3RyaW5nICZ4KXsKICAgIHdoaWxlKHguc2l6ZSgpIDwgMTkpewogICAgICAgIHggPSAiMCIgKyB4OwogICAgfQp9CmJvb2wgY2hlY2soc3RyaW5nICZzKXsKICAgIGludCBkWzEwXTsKICAgIG1lbXNldChkLCAwLCBzaXplb2YgZCk7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgcy5zaXplKCk7ICsraSl7CiAgICAgICAgaW50IHggPSBzW2ldIC0gJzAnOwogICAgICAgIGRbeF0rKzsKICAgIH0KICAgIGludCBjbnQgPSAwOwogICAgZm9yKGludCBpID0gMDsgaSA8PSA5OyArK2kpewogICAgICAgIGNudCArPSAoZFtpXSAmIDEpOwogICAgfQogICAgcmV0dXJuIGNudCA8PSAxOwp9CmludCBkWzExXTsKaW50IHJhbmdlKHN0cmluZyAmeCl7CiAgICBtZW1zZXQoZCwgMCwgc2l6ZW9mIGQpOwogICAgcmV0dXJuIGNhbGMoMCwgMSwgMCwgZCwgeCk7Cn0KbWFpbigpewogICAgZmFzdDsKICAgIG9wZW5maWxlKCk7CiAgICBjaW4gPj4gcTsKICAgIG1lbXNldChkcCwgLTEsIHNpemVvZiBkcCk7CiAgICB3aGlsZShxLS0pewogICAgICAgIHN0cmluZyBsLCByOwogICAgICAgIGNpbiA+PiBsID4+IHI7CiAgICAgICAgaW50IHYgPSBjaGVjayhsKTsKICAgICAgICBhZGQobCksIGFkZChyKTsKICAgICAgICBtZW1zZXQoZCwgMCwgc2l6ZW9mIGQpOwogICAgICAgIGNvdXQgPDwgcmFuZ2UocikgLSByYW5nZShsKSArIHYgPDwgJ1xuJzsKICAgIH0KfQo=