#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 200 using namespace std; struct node { int x,y,z; }; int cmp(node a,node b) { if(a.x==b.x) return a.y<b.y; return a.x<b.x; } int mymax(int x,int y) { if(x>y) return x; return y; } int main() { int n; int Case=0; while(cin>>n&&n) { node fuck[maxn]; int dp[maxn]; memset(dp,0,sizeof(dp)); int ret=0; while(n--) { int x,y,z; cin>>x>>y>>z; fuck[ret].x=x,fuck[ret].y=y,fuck[ret++].z=z; fuck[ret].x=x,fuck[ret].y=z,fuck[ret++].z=y; fuck[ret].x=y,fuck[ret].y=x,fuck[ret++].z=z; fuck[ret].x=y,fuck[ret].y=z,fuck[ret++].z=x; fuck[ret].x=z,fuck[ret].y=x,fuck[ret++].z=y; fuck[ret].x=z,fuck[ret].y=y,fuck[ret++].z=x; } sort(fuck,fuck+ret,cmp); dp[0]=fuck[0].z; for(int i=1;i<ret;i++) { dp[i]=fuck[i].z; for(int j=0;j<i;j++) { if(fuck[j].x<fuck[i].x&&fuck[j].y<fuck[i].y) { dp[i]=mymax(dp[i],dp[j]+fuck[i].z); } } } //这里的dp只是算出了每个i对应的值 并没有算出最大的 int zz=dp[0]; for(int i=1;i<ret;i++) if(zz<dp[i]) zz=dp[i]; printf("Case %d: maximum height = %d ",++Case,zz); } return 0; }