#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';
    }
}
