#include <bits/stdc++.h>
using namespace std;
#define rep(i,l,r) for(int i=l;i<=r;i++)
// #define int long long
const int INF = 1 << 30;
int n;
int x[100],y[100],z[100];
int mem[100];bool vis[100];
/*
k=1,xy ab
k=2,yz bc
k=3,xz ac
*/
pair<int,int> cs(int a,int b,int c,int k){
if(k==1)
return make_pair(a,b);
if(k==2)
return make_pair(b,c);
if(k==3)
return make_pair(a,c);
}
int height(int a,int b,int c,int k){
if(k==1) return c;
if(k==2) return a;
if(k==3) return b;
}
int dfs(int d,int k){
int& ans=mem[d];
if(vis[d])
return ans;
for(int i=1;i<=n;++i)
for(int m=1;m<=3;++m){
pair<int,int> w;
pair<int,int> u;
u=cs(x[i],y[i],z[i],m);
w=cs(x[d],y[d],z[d],k);
if(w.first>u.first&&w.second>u.second)
ans=max(ans,height(x[i],y[i],z[i],m)+dfs(i,m));
else
ans=max(ans,height(x[i],y[i],z[i],m));
}
vis[d]=1;
return ans;
}
signed main(){
ios::sync_with_stdio(false);
int kase=0;
while(cin>>n){
++kase;
if(n==0) break;
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
memset(z,0,sizeof(z));
memset(mem,-1,sizeof(mem));
memset(vis,0,sizeof(vis));
x[0]=y[0]=z[0]=INF;
rep(i,1,n)
cin>>x[i]>>y[i]>>z[i];
printf("Case %d: maximum height = %d\n",kase,dfs(0,1));
}
}
样例没过