#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; typedef unsigned long long ULL; #define MEM(a,b) memset((a),(b),sizeof(a)) const LL INF = 1e9 + 7; const int N = 2e5 + 10; LL dp[20][10]; int d[20]; LL dfs(int pos, int maxv, bool lead = true, bool limit = true) { if (pos == -1) { return maxv; } if (!lead && !limit && dp[pos][maxv] != -1) return dp[pos][maxv]; int up = limit ? d[pos] : 9; LL ret = 0; for (int i = 0; i <= up; i++) { ret += dfs(pos - 1, max(maxv, i), lead && i == 0, limit && i == d[pos]); } if (!lead && !limit) dp[pos][maxv] = ret; return ret; } LL solve(LL n) { int len = 0; while (n) { d[len++] = n % 10; n /= 10; } return dfs(len - 1, 0); } int main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); MEM(dp, -1); int ncase; scanf("%d", &ncase); while (ncase--) { LL l, r; scanf("%lld%lld", &l, &r); printf("%lld\n", solve(r) - solve(l - 1)); } return 0; }