#include<cstdio>
#define OFFSET 2000
#define INF 0x7fffffff
using namespace std;
int list[101];
int dp[101][4001];
int main()
{
int T,n;
int cas=0;
bool have0;
scanf("%d",&T);
while(T--)
{
cas++;
scanf("%d",&n);
have0=false;
int cnt=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&list[++cnt]);
if(list[cnt]==0)
{
cnt--;
have0=true;
}
}
n=cnt;
for(int i=-2000;i<=2000;i++)
dp[0][i+OFFSET]=-INF;
dp[0][OFFSET]=0;
for(int i=1;i<=n;i++)
{
for(int j=-2000;j<=2000;j++)
{
int a=-INF,b=-INF,c;
if(j-list[i]>=-2000)
a=dp[i-1][j-list[i]+OFFSET]+list[i];
if(j+list[i]<=2000)
b=dp[i-1][j+list[i]+OFFSET]+list[i];
c=dp[i-1][j+OFFSET];
a=a>b?a:b;
dp[i][j+OFFSET]=a>c?a:c;
}
}
if(dp[n][OFFSET]==0)
printf("Case %d: %d\n",cas,have0==true?0:-1);
else
printf("Case %d: %d\n",cas,dp[n][OFFSET]/2);
}
return 0;
}
|