1 #include<iostream>
2 #include<cstdio>
3 #include<algorithm>
4 #include<cstring>
5 using namespace std;
6 struct cuboid
7 {
8 int l,w,h;
9 }cu[190];
10 int dp[190];
11
12 int k;
13 void init(int x,int y,int z)
14 {
15 cu[k].l=x; cu[k].w=y; cu[k].h=z; k++;
16 }
17 bool cmp(const cuboid &a,const cuboid &b)
18 {
19 if(a.l==b.l)
20 {
21 if(a.w==b.w)
22 return a.h<b.h;
23 //else
24 return a.w<b.w;
25 }
26 //else
27 return a.l<b.l;
28 }
29
30 int main()
31 {
32 int n,i,j,a,b,c,maxn,t=1;
33 while(cin>>n && n)
34 {
35 k=0,maxn=0;
36 for(i=0;i<n;i++)
37 {
38 scanf("%d%d%d",&a,&b,&c);
39 init(a,b,c);
40 init(a,c,b);
41 init(b,a,c);
42 init(b,c,a);
43 init(c,a,b);
44 init(c,b,a);
45 }
46 sort(cu,cu+k,cmp);
47 // for(i=0;i<k;i++)
48 // cout<<cu[i].l<<" "<<cu[i].w<<" "<<cu[i].h<<endl;
49
50 for(i=0;i<k;i++)
51 {
52 dp[i]=cu[i].h;
53 }
54 for(i=1;i<k;i++)
55 {
56 for(j=0;j<i;j++) //j<i且j=0开始,j不可等于i
57 {
58 if(cu[i].l>cu[j].l && cu[i].w>cu[j].w && dp[j]+cu[i].h>dp[i] )
59 {
60 dp[i]=dp[j]+cu[i].h;
61 if(maxn<dp[i])
62 maxn=dp[i];
63 }
64 }
65 }
66 printf("Case %d: maximum height = %d\n",t++,maxn);
67 }
68
69 return 0;
70 }