#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
//英语 看博友分析 抄博友程序 dp记忆搜索 巧妙 背
int len[210];
int c[210];
int dp[210][210][210];//抄博友分析 巧妙 dp[i][j][k]代表合并区间[i, j]内的颜色块,并且有k个颜色块与j颜色块相同
int dfs(int l,int r,int k)
{
if(dp[l][r][k]!=-1)
{
return dp[l][r][k];
}
if(l==r)
{
return dp[l][r][k]=(len[r]+k)*(len[r]+k);
}
dp[l][r][k]=dfs(l,r-1,0)+(len[r]+k)*(len[r]+k);
for(int i=l;i<r;i++)//背
{
if(c[i]==c[r])
{
dp[l][r][k]=max(dp[l][r][k],dfs(l,i,k+len[r])+dfs(i+1,r-1,0));
}
}
return dp[l][r][k];
}
int main()
{
int T;
cin>>T;
int tag=0;
while(T--)
{
tag++;
int n;
cin>>n;
memset(len,0,sizeof(len));
memset(c,0,sizeof(c));
memset(dp,-1,sizeof(dp));
int jl=-1;
int tot=0;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
if(x==jl)
{
len[tot]++;
}else
{
len[++tot]++;
c[tot]=x;
}
jl=x;
}
cout<<"Case "<<tag<<": "<<dfs(0,tot,0)<<endl;
}
return 0;
}