/* coder: ACboy date: 2010-3-17 result: AC description: UVa 11218 KTV */ #include <iostream> using namespace std; struct node{ int d[3]; int score; }; int evPosb[85000][4]; node data[100]; int temp[3]; int c = 0; void dfs(int n, int pos) { if (pos == 3) { for (int i = 0; i < 3; i++) { evPosb[c][i] = temp[i]; } c++; } else { for (int j = 0; j < n; j++) { if (pos == 0 || j > temp[pos - 1]) { temp[pos] = j; dfs(n, pos + 1); } } } } int check(int a, int b, int c) { int vis[10]; int da[3]; da[0] = a; da[1] = b; da[2] = c; memset(vis, 0, sizeof(vis)); for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { if (!vis[data[da[i]].d[j]]) { vis[data[da[i]].d[j]] = 1; } else { return 0; } } } return 1; } int main() { int n; int count = 0; #ifndef ONLINE_JUDGE freopen("11218.txt", "r", stdin); #endif while (cin >> n) { if (n == 0) break; int i, j; for (i = 0; i < n; ++i) { for (j = 0; j < 3; ++j) { cin >> data[i].d[j]; } cin >> data[i].score; } c = 0; dfs(n, 0); int ans = -1; for (i = 0; i < c; i++) { if (check(evPosb[i][0], evPosb[i][1], evPosb[i][2])) { int sum = 0; for (j = 0; j < 3; ++j) { sum += data[evPosb[i][j]].score; } if (sum > ans) ans = sum; } } cout << "Case " << ++count << ": " << ans << endl; } return 0; }