import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;

public class Recycled {
    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int t = Integer.parseInt(br.readLine());
            for (int i = 0; i < t; i++) {
                String[] str = br.readLine().split(" ");
                int a = Integer.parseInt(str[0]);
                int b = Integer.parseInt(str[1]);
                System.out.println("Case #" + (i + 1) + ": " + find(a, b));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static int find(int a, int b) {
        HashSet<Long> used = new HashSet<Long>();
        int digits = String.valueOf(a).length();
        if (digits == 1) return 0;
        for (int i = a; i <= b; i++) {
            int s = 10;
            int m = (int) Math.pow(10, digits-1);
            for (int j = 0; j < digits-1; j++) {
                int r = i % s;
                if (r < s/10) continue;
                int q = i / s;
                int rn = r * m + q;
                s *= 10; m /= 10;
                if (i != rn && rn >= a && rn <= b) {
                    long pp;
                    if (rn < i) pp = (long)rn << 30 | i;
                    else pp = (long)i << 30 | rn;
                    if (!used.contains(pp)) {
                        used.add(pp);
                    }
                }
            }
        }
        return used.size();
    }
}

import java.util.TreeSet;


public class SolveThread implements Runnable{
	
	private TreeSet<Integer> nbs;
	int pairs = 0, casenb;
	private ThreadDispatcher td;
	private int A, B;
	
	public SolveThread(int A, int B, int casenb, ThreadDispatcher td){
		nbs = new TreeSet<Integer>();
		this.A = A;
		this.B = B;
		for(int i = A; i <= B; i++){
			nbs.add(i);
		}
		this.casenb = casenb;
		this.td = td;
	}
	
	public void solve(){
		while(!nbs.isEmpty()){
			int n = nbs.first();
			findAndRemoveRecycledOf(n);
		}
	}

	private void findAndRemoveRecycledOf(int n) {
		nbs.remove((Integer)n);
		String nstr = "" + n;
		if(nstr.length() == 1)
			return;
		int nbInPair = 1;
		for(int i = 0; i < nstr.length()-1;i++){
			String sstr = shiftRight(nstr,i);
			sstr.replaceFirst("^0+(?!$)", "");
			int sn = Integer.parseInt(sstr);
			if(nbs.contains(sn)){
				nbInPair++;
				nbs.remove((Integer)sn);
			}
		}
		pairs += nbInPair * (nbInPair - 1) / 2;
	}

	private String shiftRight(String nstr, int i) {
		return nstr.substring(nstr.length() - 1 - i, nstr.length()) +  nstr.substring(0, nstr.length() - 1 - i);
	}

	@Override
	public void run() {
		solve();
		td.finish(this);
	}

}
