#include <cstring> #include <iostream> #include <algorithm> using namespace std; int tmp[30][3]; int dp[100]; class Node { public: int x; int y; int h; bool operator <(const Node&n) const { if(x==n.x) return y<n.y; else return x<n.x; } }; Node arr[100]; int se[100][2]; int main() { int n; int sign=0; while(cin>>n&&n!=0) { sign++; int num=0; memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) { cin>>tmp[i][0]>>tmp[i][1]>>tmp[i][2]; sort(tmp[i],tmp[i]+3); arr[num].x=tmp[i][2]; arr[num].y=tmp[i][1]; arr[num].h=tmp[i][0]; num++; arr[num].x=tmp[i][1]; arr[num].y=tmp[i][0]; arr[num].h=tmp[i][2]; num++; arr[num].x=tmp[i][2]; arr[num].y=tmp[i][0]; arr[num].h=tmp[i][1]; num++; } sort(arr,arr+num); for(int i=0;i<num;i++) { dp[i]=arr[i].h; for(int j=0;j<i;j++) if(arr[i].x>arr[j].x&arr[i].y>arr[j].y) dp[i]=max(dp[j]+arr[i].h,dp[i]); } int mi=0; for(int i=0;i<num;i++) { if(mi<dp[i]) mi=dp[i]; } cout<<"Case "<<sign<<": maximum height = "<<mi<<endl; } return 0; }