#include namespace { #pragma GCC diagnostic ignored "-Wunused-function" #include #pragma GCC diagnostic warning "-Wunused-function" using namespace std; using namespace atcoder; #define rep(i,n) for(int i = 0; i < (int)(n); i++) #define rrep(i,n) for(int i = (int)(n) - 1; i >= 0; i--) #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) template bool chmax(T& a, const T& b) { if (a < b) { a = b; return true; } else return false; } template bool chmin(T& a, const T& b) { if (b < a) { a = b; return true; } else return false; } using ll = long long; using P = pair; using VI = vector; using VVI = vector; using VL = vector; using VVL = vector; // using mint = modint1000000007; using ull = unsigned long long; using u128 = unsigned __int128; constexpr ull mod = 7000000001; struct mint { ull v = 0; mint() {} mint(integral auto x) { v = x % mod; } mint& operator+=(mint x) { v += x.v; if (v >= mod) v -= mod; return *this; } mint& operator-=(mint x) { v -= x.v; if (v >= mod) v += mod; return *this; } friend mint operator*(mint x, mint y) { return mint{ull(u128(x.v) * y.v % mod)}; } friend mint operator+(mint x, mint y) { ull res = x.v + y.v; if (res >= mod) res -= mod; return mint{res}; } friend mint operator-(mint x, mint y) { x -= y; return x; } }; mint p10[80]; mint mid[80],sms[80]; mint f(ll n) { mint ans; VI d; while (n) d.emplace_back(n % 10), n /= 10; int sz = d.size(); rep(i, sz) ans += sms[i]; mint ups; int uplen = 0; rrep(i, ssize(d)) { int v = d[i]; rep(x, v) { if (i == sz - 1 && x == 0) continue; ans += (ups + p10[uplen] * x + mid[i] * p10[uplen + 1]) * p10[i]; } ups = ups + p10[uplen++] * v; } return ans; } } int main() { ios::sync_with_stdio(false); cin.tie(0); p10[0] = 1; rep(i, 79) p10[i+1] = p10[i] * 10; rep(i, 80) mid[i] = (p10[i] - mint(1)) * mint((mod + 1) / 2); rep(i, 80) sms[i] = mid[i] * p10[i]; rrep(i, 80) if (i) { sms[i] -= sms[i-1] * 10; } int tt; cin >> tt; while (tt--) { ll l, r; cin >> l >> r; mint ans = f(r + 1) - f(l); cout << ans.v << '\n'; } }