#include<stdio.h>#include<stdlib.h>typedef struct aa{ int x,y,z; }S;S d[100]; int cmp(const void *_p,const void *_q) { S *p = (S *)_p; S *q = (S *)_q; if( p->x == q->x) return p->y - q->y; return p->x - q->x;}int main(){ int N,i,j,a,b,c,a1,b1,c1,cnt = 1,max; while(scanf("%d",&N),N) { for(i = 1; i <= N*3; i += 3) { scanf("%d%d%d",&a,&b,&c); a1 = a; if(a1 > b) a1 = b; if(a1 > c) a1 = c; c1 = a; if(c1 < b) c1 = b; if(c1 < c) c1 = c; b1 = a + b + c - a1 - c1; d[i].x = c1; d[i].y = b1; d[i].z = a1; d[i+1].x = b1; d[i+1].y = a1; d[i+1].z = c1; d[i+2].x = c1; d[i+2].y = a1; d[i+2].z = b1; } d[0].x = d[0].y = d[0].z = 0; qsort( d, N*3 + 1, sizeof(d[0]),cmp); for(i = 0; i <= N*3; i++) { max = 0; for(j = 0; j < i; j++) { if(d[i].x > d[j].x && d[i].y > d[j].y && d[j].z > max) max = d[j].z; } d[i].z += max; } max = 0; for(i = 0; i <= N*3; i++) { if(d[i].z > max) max = d[i].z; } printf("Case %d: maximum height = %dn",cnt,max); cnt++; } return 0;}