深搜。。。。。。。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct node
{
int a,b,c,s;
node(int x=0,int y=0,int z=0,int d=0)
{
a=x,b=y,c=z,s=d;
}
} node;
node g[81];
bool vis[10];
int n,maxx;
bool check()
{
for(int i=1; i<=9; i++)
if(!vis[i]) return false;
return true;
}
void dfs(int cur,int team,int p)
{
if(cur==n) return ;
for(int i=cur; i<n; i++)
{
int a=g[i].a;
int b=g[i].b;
int c=g[i].c;
if(vis[a]||vis[b]||vis[c]) continue ;
vis[a]=vis[b]=vis[c]=true;
if(team==3)
{
if(check())
maxx=max(maxx,p+g[i].s);
vis[a]=vis[b]=vis[c]=false;
continue;
}
dfs(i+1,team+1,p+g[i].s);
vis[a]=vis[b]=vis[c]=false;
}
}
int main()
{
// freopen("in.txt","r",stdin);
int cas=0;
while(scanf("%d",&n)!=EOF&&n)
{
for(int i=0; i<n; i++)
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
node t(a,b,c,d);
g[i]=t;
}
memset(vis,false,sizeof(vis));
maxx=0;
dfs(0,1,0);
if(maxx)
printf("Case %d: %d\n",++cas,maxx);
else
printf("Case %d: -1\n",++cas);
}
return 0;
}