#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int INF=1e9;
int dp[210][210],a[210];
int main()
{
int t,cnt,manys=1;
char str[210];
scanf("%d",&t);
while(t--)
{
scanf("%s",str+1);
int len=strlen(str+1);
cnt=1;
a[cnt]=1;
for(int i=2; i<=len; i++)
{
while(i<=len&&str[i]==str[i-1])
{
i++;
a[cnt]++;
}
if(i<=len)
{
cnt++;
a[cnt]=1;
}
}
for(int i=1; i<=cnt; i++)
dp[i][i]=a[i]==1?2:1;
for(int k=2; k<=cnt; k++)
{
for(int i=1; i<=cnt; i++)
{
int j=i+k-1;
if(j>cnt) continue;
dp[i][j]=INF;
for(int l=i; l<j; l++)
dp[i][j]=min(dp[i][j],dp[i][l]+dp[l+1][j]);
if(j-i+1>=3&&(!((j-i)&1)))
dp[i][j]=min(dp[i][j],dp[i+1][j-1]+(a[i]+a[j]<3));
if(a[i]+a[j]<4)
for(int l=i+2; l<j-1; l++)
{
if(!((l-i)&1)&&!((j-l)&1)&&a[l]==1)
dp[i][j]=min(dp[i][j],dp[i+1][l-1]+dp[l+1][j-1]);
}
}
}
printf("Case #%d: %d\n",manys++,dp[1][cnt]);
}
return 0;
}
/*
给出一串01序列,三个相同的可以消除,祖玛游戏一样,
问至少需要几次可以全部消去完,考虑区间dp
dp[i][j]为消除i到j区间需要的最少步数,i和j都是把连续
相同的看成一块之后的序号哦,然后考虑消除的方式:
1: 区间分成两部分,各自消除各自的:dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j])
2. 中间消掉之后两边碰撞消掉: dp[i][j]=min(dp[i][j],dp[i+1][j-1]+(a[i]+a[j])<3?
3. 中间一个球(一定得一个,不然变成2情况了)消除两边之后,三部分碰撞抵消
此时需要a[i]+a[j]<4 因为要保证消去左边或者右边之后中间的那一个不能和两边抵消
否则变成2情况了 所以为 dp[i][j]=min(dp[i][j],dp[i+1][k-1]+dp[k+1][j-1])
然后注意颜色一定01交替所以要保证a[i]和a[j]和a[k]颜色一样(通过奇偶看就可以了)
*/