#include<bits/stdc++.h>
#define fast ios_base::sync_with_stdio(false); cin.tie(nullptr); cin.tie(nullptr);
// #define int long long
#define ld long double
#define pb emplace_back
#define range(v) v.begin(),v.end()
#define mod (int)(1e9 + 7)
#define inf (int)(1e15)
#define pii pair<int,int>
#define ff first
#define ss second
#define endl '\n'
//#define N (int)()
using namespace std;
int dp[50][2][17][17][17];
char l[50], r[50];
int n;
int tsn(char *s, int i = 0, bool tight = true, int tc = 0, int sc = 0, int nc = 0) {
int ans = 0;
int lim = tight ? s[i] - '0' : 9;
if (i == n)
return tc and tc == sc and sc == nc;
if (tc > (n / 3) or sc > (n / 3) or nc > (n / 3))
return 0;
if (dp[i][tight][tc][sc][nc] != -1)
return dp[i][tight][tc][sc][nc];
for (int j = 0; j <= lim; j++)
ans += tsn(s, i + 1, tight and (j == lim), tc + (j == 3), sc + (j == 6), nc + (j == 9)) % mod, ans %= mod;
return dp[i][tight][tc][sc][nc] = ans;
}
bool isNo(char *s) {
int v[10] = {};
for (int i = 0; s[i] != '\0'; i++) {
char c = s[i];
v[c - '0']++;
}
return v[3] and (v[3] == v[6] and v[6] == v[9]);
}
int32_t main() {
fast
int t_c = 1;
cin >> t_c;
while (t_c--) {
scanf("%s %s", l, r);
memset(dp, -1, sizeof(dp));
n = strlen(l);
int a = tsn(l) % mod;
memset(dp, -1, sizeof(dp));
n = strlen(r);
int b = tsn(r) % mod;
cout << ((b - a + mod) % mod) + isNo(l) << endl;
}
}
CiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUobnVsbHB0cik7IGNpbi50aWUobnVsbHB0cik7Ci8vICNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgcGIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgcmFuZ2Uodikgdi5iZWdpbigpLHYuZW5kKCkKI2RlZmluZSBtb2QgKGludCkoMWU5ICsgNykKI2RlZmluZSBpbmYgKGludCkoMWUxNSkKI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIGZmIGZpcnN0CiNkZWZpbmUgc3Mgc2Vjb25kCiNkZWZpbmUgZW5kbCAnXG4nCi8vI2RlZmluZSBOIChpbnQpKCkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZHBbNTBdWzJdWzE3XVsxN11bMTddOwpjaGFyIGxbNTBdLCByWzUwXTsKaW50IG47CgppbnQgdHNuKGNoYXIgKnMsIGludCBpID0gMCwgYm9vbCB0aWdodCA9IHRydWUsIGludCB0YyA9IDAsIGludCBzYyA9IDAsIGludCBuYyA9IDApIHsKICAgIGludCBhbnMgPSAwOwogICAgaW50IGxpbSA9IHRpZ2h0ID8gc1tpXSAtICcwJyA6IDk7CgogICAgaWYgKGkgPT0gbikKICAgICAgICByZXR1cm4gdGMgYW5kIHRjID09IHNjIGFuZCBzYyA9PSBuYzsKICAgIGlmICh0YyA+IChuIC8gMykgb3Igc2MgPiAobiAvIDMpIG9yIG5jID4gKG4gLyAzKSkKICAgICAgICByZXR1cm4gMDsKICAgIGlmIChkcFtpXVt0aWdodF1bdGNdW3NjXVtuY10gIT0gLTEpCiAgICAgICAgcmV0dXJuIGRwW2ldW3RpZ2h0XVt0Y11bc2NdW25jXTsKCiAgICBmb3IgKGludCBqID0gMDsgaiA8PSBsaW07IGorKykKICAgICAgICBhbnMgKz0gdHNuKHMsIGkgKyAxLCB0aWdodCBhbmQgKGogPT0gbGltKSwgdGMgKyAoaiA9PSAzKSwgc2MgKyAoaiA9PSA2KSwgbmMgKyAoaiA9PSA5KSkgJSBtb2QsIGFucyAlPSBtb2Q7CgogICAgcmV0dXJuIGRwW2ldW3RpZ2h0XVt0Y11bc2NdW25jXSA9IGFuczsKfQoKYm9vbCBpc05vKGNoYXIgKnMpIHsKICAgIGludCB2WzEwXSA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IHNbaV0gIT0gJ1wwJzsgaSsrKSB7CiAgICAgICAgY2hhciBjID0gc1tpXTsKICAgICAgICB2W2MgLSAnMCddKys7CiAgICB9CiAgICByZXR1cm4gdlszXSBhbmQgKHZbM10gPT0gdls2XSBhbmQgdls2XSA9PSB2WzldKTsKfQoKaW50MzJfdCBtYWluKCkgewogICAgZmFzdAogICAgaW50IHRfYyA9IDE7CiAgICBjaW4gPj4gdF9jOwogICAgd2hpbGUgKHRfYy0tKSB7CiAgICAgICAgc2NhbmYoIiVzICVzIiwgbCwgcik7CiAgICAgICAgbWVtc2V0KGRwLCAtMSwgc2l6ZW9mKGRwKSk7CiAgICAgICAgbiA9IHN0cmxlbihsKTsKICAgICAgICBpbnQgYSA9IHRzbihsKSAlIG1vZDsKICAgICAgICBtZW1zZXQoZHAsIC0xLCBzaXplb2YoZHApKTsKICAgICAgICBuID0gc3RybGVuKHIpOwogICAgICAgIGludCBiID0gdHNuKHIpICUgbW9kOwogICAgICAgIGNvdXQgPDwgKChiIC0gYSArIG1vZCkgJSBtb2QpICsgaXNObyhsKSA8PCBlbmRsOwogICAgfQp9Cg==