/*
created by: nitin23329
on Date: 09/06/21
*/
import java.io.*;
import java.util.*;
/*****************************************WRITING CODE STARTS HERE******************************************/
class CodeForces {
private static void solve() {
int l = sc.nextInt();
int r = sc.nextInt();
int[][][] dp1 = new int[10][90][2];
int[][][] dp2 = new int[10][90][2];
for(int i=0;i<dp1.length;i++)
for(int j=0;j<dp1[0].length;j++){
dp1[i][j] = new int[]{-1,-1};
dp2[i][j] = new int[]{-1,-1};
}
int ans = digitDP(0,0,0,findDigitArray(r),dp1) - (l>1?digitDP(0,0,0,findDigitArray(l-1),dp2):0);
out.println(ans);
}
private static int digitDP(int i,int sum,int isBounded,int[] digitsOfR,int[][][] dp){
if(i==digitsOfR.length)
return firstDivisor(sum) == -1 ?1:0;
if(dp[i][sum][isBounded]!=-1)return dp[i][sum][isBounded];
int ans = 0;
if(isBounded==1 || i == 0){
for(int digit = 0;digit <= digitsOfR[i];digit++)
ans += digitDP(i+1,sum + digit,digit == digitsOfR[i]?1:0,digitsOfR,dp);
}
else {
for(int digit = 0; digit <= 9; digit++)
ans += digitDP(i+1,sum + digit,0,digitsOfR,dp);
}
return dp[i][sum][isBounded] = ans;
}
private static int[] findDigitArray(int n){
int len = countDigitBase10(n);
int[] digitArray = new int[len];
for(int i = len-1;i>=0;i--){
digitArray[i] = n%10;
n/=10;
}
return digitArray;
}
/*****************************************WRITING CODE ENDS HERE******************************************/
public static void main
(String[] args
){ FIO(false);
int testCase = 1;
testCase = sc.nextInt();
while (testCase-- > 0) solve();
closeIO();
}
static Scanner sc ; // FAST INPUT
static PrintWriter debug
; // DEBUG IN FILE : debug.txt
/**************************************HELPER FUNCTION STARTS HERE ************************************/
public static int mod = (int) 1e9 + 7;
public static final int INT_MAX
= Integer.
MAX_VALUE; public static final int INT_MIN
= Integer.
MIN_VALUE; public static final long LONG_MAX
= Long.
MAX_VALUE; public static final long LONG_MIN
= Long.
MIN_VALUE; public static final double DOUBLE_MAX
= Double.
MAX_VALUE; public static final double DOUBLE_MIN
= Double.
MIN_VALUE; public static final String YES
= "YES"; public static final String NO
= "NO";
public static void sort(int[] a, boolean isAscending) {
ArrayList<Integer> temp = new ArrayList<>();
for (int j : a) temp.add(j);
sort(temp, isAscending);
for (int i = 0; i < a.length; i++) a[i] = temp.get(i);
}
public static void sort(long[] a, boolean isAscending) {
ArrayList<Long> temp = new ArrayList<>();
for (long ele : a) temp.add(ele);
sort(temp, isAscending);
for (int i = 0; i < a.length; i++) a[i] = temp.get(i);
}
public static void sort
(List list,
boolean isAscending
) { if (isAscending)
}
// count the length of a number, time O(1)
public static int countDigitBase10(long n){
return (int)(1 + Math.
log10(n
)); }
// euclidean algorithm
public static long gcd(long a, long b) {
// time O(max (loga ,logb))
if (y % x == 0) return x;
return gcd(y % x, x);
}
public static long lcm(long a, long b) {
// lcm(a,b) * gcd(a,b) = a * b
return (a / gcd(a, b)) * b;
}
public static long power(long x, long n) {
// time O(logn)
long ans = 1;
while (n > 0) {
if ((n & 1) == 1) {
ans *= x;
ans %= mod;
n--;
} else {
x *= x;
x %= mod;
n >>= 1;
}
}
return ans;
}
public static long factorial(long n) {
long fact = 1L;
for (int i = 2; i <= n; i++) fact = (fact * i) % mod;
return fact;
}
public static long firstDivisor(long n) {
if (n == 1 || n == 0) return n;
for (long i = 2; i * i <= n; i++)
if (n % i == 0) return i;
return -1;
}
public static int ncr(int n, int r) {
// time O(n+r)
if (r > n)
return 0;
long[] inv = new long[r + 1];
inv[1] = 1;
// Getting the modular inversion
// for all the numbers
// from 2 to r with respect to m
for (int i = 2; i <= r; i++) {
inv[i] = mod - (mod / i) * inv[mod % i] % mod;
}
int ans = 1;
// for 1/(r!) part
for (int i = 2; i <= r; i++) {
ans = (int) (((ans % mod) * (inv[i] % mod)) % mod);
}
// for (n)*(n-1)*(n-2)*...*(n-r+1) part
for (int i = n; i >= (n - r + 1); i--) {
ans = (int) (((ans % mod) * (i % mod)) % mod);
}
return ans;
}
public static long max3(long a, long b, long c) { return max2(max2(a, b), c);}
public static long max2
(long a,
long b
) {return Math.
max(a, b
);}
public static long min3(long a, long b, long c) {return min2(min2(a, b), c);}
public static long min2
(long a,
long b
) { return Math.
min(a, b
); }
public static int max3(int a, int b, int c) { return max2(max2(a, b), c); }
public static int max2
(int a,
int b
) { return Math.
max(a, b
); }
public static int min3(int a, int b, int c) { return min2(min2(a, b), c); }
public static int min2(int a, int b) {
}
/**************************************HELPER FUNCTION ENDS HERE ************************************/
/*****************************************FAST INPUT STARTS HERE *************************************/
public static void FIO(boolean isDebug){
sc = new Scanner();
if(isDebug){
try {
e.printStackTrace();
}
}
}
public static void closeIO(){
sc.close();
out.flush();
out.close();
if(debug!=null){
debug.flush();
debug.close();
}
}
private static class Scanner {
while (!st.hasMoreTokens())
try {
e.printStackTrace();
}
return st.nextToken();
}
public int nextInt() {
}
public long nextLong() {
return Long.
parseLong(next
()); }
public double nextDouble() {
return Double.
parseDouble(next
()); }
public int[] set_int_array(int n) {
int[] arr = new int[n];
for (int i = 0; i < n; i++) arr[i] = nextInt();
return arr;
}
public long[] set_long_array(int n) {
long[] arr = new long[n];
for (int i = 0; i < n; i++) arr[i] = nextLong();
return arr;
}
public double[] set_double_array(int n){
double[] arr = new double[n];
for(int i =0;i<n;i++)arr[i] = sc.nextDouble();
return arr;
}
public int[][] set_2D_int_array(int n) {
return set2DIntArray(n, n);
}
public int[][] set2DIntArray(int row, int col) {
int[][] arr = new int[row][col];
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
arr[i][j] = nextInt();
return arr;
}
public long[][] set_2D_long_array(int n) {
return set2DlongArray(n, n);
}
public long[][] set2DlongArray(int row, int col) {
long[][] arr = new long[row][col];
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
arr[i][j] = nextLong();
return arr;
}
public char[][] set_2D_char_array(int n) {
return set2DCharArray(n, n);
}
public char[][] set2DCharArray(int row, int col) {
char[][] ch = new char[row][col];
for (int i = 0; i < row; i++)
ch[i] = sc.next().toCharArray();
return ch;
}
public void close() {
try {
br.close();
e.printStackTrace();
}
}
}
/*****************************************FAST INPUT ENDS HERE *************************************/
}