package jp.funnything.competition.util;

import java.math.BigInteger;

/**
 * Utility for BigInteger
 */
public class BI {
    public static BigInteger ZERO = BigInteger.ZERO;
    public static BigInteger ONE = BigInteger.ONE;

    public static BigInteger add( final BigInteger x , final BigInteger y ) {
        return x.add( y );
    }

    public static BigInteger add( final BigInteger x , final long y ) {
        return add( x , v( y ) );
    }

    public static BigInteger add( final long x , final BigInteger y ) {
        return add( v( x ) , y );
    }

    public static int cmp( final BigInteger x , final BigInteger y ) {
        return x.compareTo( y );
    }

    public static int cmp( final BigInteger x , final long y ) {
        return cmp( x , v( y ) );
    }

    public static int cmp( final long x , final BigInteger y ) {
        return cmp( v( x ) , y );
    }

    public static BigInteger div( final BigInteger x , final BigInteger y ) {
        return x.divide( y );
    }

    public static BigInteger div( final BigInteger x , final long y ) {
        return div( x , v( y ) );
    }

    public static BigInteger div( final long x , final BigInteger y ) {
        return div( v( x ) , y );
    }

    public static BigInteger mod( final BigInteger x , final BigInteger y ) {
        return x.mod( y );
    }

    public static BigInteger mod( final BigInteger x , final long y ) {
        return mod( x , v( y ) );
    }

    public static BigInteger mod( final long x , final BigInteger y ) {
        return mod( v( x ) , y );
    }

    public static BigInteger mul( final BigInteger x , final BigInteger y ) {
        return x.multiply( y );
    }

    public static BigInteger mul( final BigInteger x , final long y ) {
        return mul( x , v( y ) );
    }

    public static BigInteger mul( final long x , final BigInteger y ) {
        return mul( v( x ) , y );
    }

    public static BigInteger sub( final BigInteger x , final BigInteger y ) {
        return x.subtract( y );
    }

    public static BigInteger sub( final BigInteger x , final long y ) {
        return sub( x , v( y ) );
    }

    public static BigInteger sub( final long x , final BigInteger y ) {
        return sub( v( x ) , y );
    }

    public static BigInteger v( final long value ) {
        return BigInteger.valueOf( value );
    }
}

import java.util.*;
import java.io.*;
import static java.lang.Math.*;

public class ProblemC {

	static int numLength(int x)
	{
		int ans = 0;
		while (x > 0)
		{
			ans ++;
			x /= 10;
		}
		return ans;
	}
	
	public static void main(String[] args) throws FileNotFoundException {
		Scanner fin = new Scanner(new File("C.txt"));
		PrintStream fout = new PrintStream("C.ans");
		int caseN = fin.nextInt();
		for (int caseI = 1; caseI <= caseN; caseI++)
		{
			int A = fin.nextInt();
			int B = fin.nextInt();
			int ans = 0;
			for (int n = max(A, 12); n < B; n++)
			{
				String front = Integer.valueOf(n / 10).toString();
				String back = Integer.valueOf(n % 10).toString();
				Set<Integer> appeared = new HashSet<Integer>();
				while (front.length() != 0)
				{
					if (back.charAt(0) != '0')
					{
						int m = Integer.valueOf(back + front);
						if (m > n && m <= B && !appeared.contains(m))
						{
							ans++;
							appeared.add(m);
							//fout.println(n + " " + m);
						}
					}
					back = front.charAt(front.length() - 1) + back;
					front = front.substring(0, front.length() - 1);
				}
			}
			fout.println("Case #" + caseI + ": " + ans);
		}
	}

}
