#include <bits/stdc++.h>
using namespace std;
const int SIZE = 1 << 14;
inline char getc() {
static char buf[SIZE], *begin = buf, *end = buf;
if (begin == end) {
begin = buf;
end = buf + fread(buf, 1, SIZE, stdin);
}
return *begin++;
}
inline int read() {
register int ret = 0, sgn = 0;
static char ch = getchar();
while (!isdigit(ch)) {
sgn |= ch == '-', ch = getchar();
}
while (isdigit(ch)) {
ret = ret * 10 + ch - '0', ch = getchar();
}
return sgn ? -ret : ret;
}
const int mod = 1000000007;
long long f[25] /*位数*/[10] /*数字*/;
int a[25];
long long l, r;
int dfs(int layers, int num, bool flag) {
if (layers == 0) {
return num;
}
long long cnt = 0;
if (flag) {
for (int i = 0; i <= a[layers - 1]; i++) {
cnt += dfs(layers - 1, i, i == a[layers - 1] ? true : false) % mod;
}
cnt += num * (a[layers - 1] + 1) % mod;
} else {
if (f[layers][num] >= 0) {
return f[layers][num] % mod;
} else {
for (int i = 0; i <= 9; i++) {
cnt += dfs(layers - 1, i, flag) % mod;
}
cnt += num * (a[layers - 1] + 1) % mod;
f[layers][num] = cnt % mod;
}
}
return cnt % mod;
}
int main() {
for (int i = 0; i < 10; i++) {
f[0][i] = i % mod;
f[1][i] = 45 + i * 10 % mod;
}
int t = read();
while (t--) {
l = read(), r = read();
int n;
for (n = 0; r; n++) {
a[n] = r % 10;
r /= 10;
}
long long cnt1 = 0;
for (int i = 0; i <= a[n - 1]; i++) {
cnt1 += dfs(n - 1, i, i == a[n - 1] ? true : false) % mod;
}
r = l - 1;
for (n = 0; r; n++) {
a[n] = r % 10;
r /= 10;
}
long long cnt2 = 0;
for (int i = 0; i <= a[n - 1]; i++) {
cnt2 += dfs(n - 1, i, i == a[n - 1] ? true : false) % mod;
}
printf("%lld\n", cnt1 - cnt2);
}
return 0;
}
输入
70 120
输出
-420