import java.io.BufferedInputStream;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Main{
public static void main(String[] args) throws Exception{
StreamTokenizer cin = new StreamTokenizer(new BufferedInputStream(System.in));
PrintWriter cout = new PrintWriter(System.out);
int cas = 1 ;
int[] dp = new int[500008] ;
int[] x = new int[500008] ;
int top ;
while(cin.nextToken() != cin.TT_EOF){
int n = (int) cin.nval ;
cout.println("Case " + (cas++) + ":") ;
for(int i = 0 ; i < n ; i++){
cin.nextToken() ;
int k = (int) cin.nval ;
cin.nextToken() ;
x[k] = (int) cin.nval ;
}
top = 0 ;
dp[++top] = x[1] ;
for(int i = 2 ; i <= n ; i++){
if(x[i] > dp[top]) dp[++top] = x[i] ;
else{
int l = 1 , r = top , m , k = -1 ;
while(l <= r){
m = (l + r) >> 1 ;
if(dp[m] >= x[i]){
r = m - 1 ;
k = m ;
}
else l = m + 1 ;
}
dp[k] = x[i] ;
}
}
if(top == 1) cout.println("My king, at most 1 road can be built.") ;
else cout.println("My king, at most " + top + " roads can be built.") ;
cout.println() ;
// cout.flush() ;
}
cout.flush() ;
}
}