// Adam Campbell
// 3/11/05
// Solution to COP 3530 Recitation #6 Problem #1 Programming Problem

import java.io.*;
import java.util.*;

public class schedule {

	public static void main(String[] args) throws Exception{
	
		BufferedReader fileReader = new BufferedReader(new FileReader("schedule.in"));
		StringTokenizer tokenizer;
		int k; // number of events
		Event[] events;
		int numEventsScheduled; // the final answer
		int finishTimeLastEvent; 
		
		int n = Integer.parseInt(fileReader.readLine());
		
		for (int caseNum=1; caseNum<=n; caseNum++) {
		
			// read in the number of events for this case.
			k = Integer.parseInt(fileReader.readLine());
		
			events = new Event[k];
		
			// read in the events
			for(int i = 0; i < k; i++){
				tokenizer = new StringTokenizer(fileReader.readLine());
				events[i] = new Event(Integer.parseInt(tokenizer.nextToken()), Integer.parseInt(tokenizer.nextToken()));
			}
		
			// sort the events by finish time
			Arrays.sort(events);
		
			numEventsScheduled = 0;
			finishTimeLastEvent = 0;
		
			// take the greedy approach to solving the problem
			for(int i = 0; i < k; i++){
				if(events[i].start >= finishTimeLastEvent){
					numEventsScheduled++;
					finishTimeLastEvent = events[i].finish;
				}
			}
			
			System.out.println("Test case #"+caseNum+": "+numEventsScheduled+" events can be scheduled at most.");
	
		}
	}
	
	private static class Event implements Comparable{
	
		int start, finish;
		
		public Event(int s, int f){
			start = s;
			finish = f;
		}
		
		// sort by finish time
		public int compareTo(Object obj){
		
			Event that = (Event)obj;
			
			if(this.finish < that.finish) return -1;
			if(this.finish > that.finish) return 1;
			
			return 0;
			
		}
		
	}
	
}
