LIS
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <math.h>
using namespace std;
#define sf scanf
#define pf printf
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define dbg(x) cerr << "Line:" << __LINE__ << " : " << #x << " = " << (x) << endl
#define nMax 1000000
#define ll long long
#define CLR(a) memset((a),0,sizeof((a)))
int find(int x,int b[],int n) {
int l=1,r=n,mid,ans=0;
while(l<=r) {
mid = (l+r)>>1;
if(b[mid] <= x) {
ans = max(ans,mid);
l = mid+1;
}else {
r = mid-1;
}
}
return ans + 1;
}
int lis(int a[],int n,int b[],int dp[]) {
int ans = 0;
b[0]=-1;
for(int i=1;i<=n;i++) {
int s = find(a[i],b,ans);
ans = max(ans,s);
b[s] = a[i];
}
return ans;
}
int n,a[nMax],b[nMax],dp[nMax];
int cas = 1;
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
while(~sf("%d",&n)) {
int u,v;
rep(i,n) {
sf("%d%d",&u,&v) ;
a[u] = v;
}
int ans = lis(a,n,b,dp);
if(ans==1)
pf("Case %d:\nMy king, at most %d road can be built.\n\n",cas++,ans);
else
pf("Case %d:\nMy king, at most %d roads can be built.\n\n",cas++,ans);
}
return 0;
}