1 #include <bits/stdc++.h>
2 using namespace std;
3
4 const int maxn = 30+5;
5 int n,blocks[maxn][3],d[maxn][3];
6
7 void get_dimensions(int* v,int b,int dim){
8 int idx=0;
9 for(int i=0; i<3; i++) if(i!=dim)
10 v[idx++] = blocks[b][i];
11 }
12
13
14 int dp(int i,int j){
15 if(d[i][j]>0) return d[i][j];
16 d[i][j] = 0;
17 int v[2],v2[2];
18 get_dimensions(v,i,j);
19 for(int a=0; a<n; a++){
20 for(int b=0; b<3; b++){
21 get_dimensions(v2,a,b);
22 if(v2[0]<v[0] && v2[1]<v[1]) d[i][j] = max(d[i][j],dp(a,b));
23 }
24 }
25 d[i][j] += blocks[i][j];
26 return d[i][j];
27 }
28
29 int main(){
30 int kase = 0;
31 while(scanf("%d",&n)==1 && n){
32 for(int i=0; i<n; i++){
33 for(int j=0; j<3; j++)
34 scanf("%d",&blocks[i][j]);
35 sort(blocks[i],blocks[i]+3);
36 }
37 memset(d,0,sizeof(d));
38 int ans = 0;
39 for(int i=0; i<n; i++)
40 for(int j=0; j<3; j++)
41 ans = max(ans,dp(i,j));
42 printf("Case %d: maximum height = %d\n",++kase,ans);
43 }
44 }