#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int M = 1200;
char Ma[M*2];
int Mp[M*2];
void Manacher(char s[], int len){//预处理
int l = 0;
Ma[l++] = '$';
Ma[l++] = '#';
for(int i = 0; i < len; i++){
Ma[l++] = s[i];
Ma[l++] = '#';
}
Ma[l] = 0;
int mx = 0, id = 0;
for(int i = 0; i < l; i++){
Mp[i] = mx > i ? min(Mp[2*id-i], mx-i):1;
while(Ma[i+Mp[i]] == Ma[i-Mp[i]])Mp[i]++;
if(i + Mp[i] > mx){
mx = i + Mp[i];
id = i;
}
}
}
char s[M];
int dp[M];
bool fact(int u, int v){//判断该区间是否为回文串
u--, v--;///注意我的下标设置
int x, y;
x = u*2 + 2, y = v*2 + 2;
int m = (x+y)/2;
// printf("u = %d, v = %d, s = %d\n",u, v, Mp[m]-1 >= v-u+1);
return Mp[m]-1 >= v-u+1;
}
int main()
{
int t, m, n;
scanf("%d",&t);
while(t--){
scanf("%s",s);
n = strlen(s);
Manacher(s, n);
dp[0] = 0;
for(int i = 1; i <= n; i++)
{
dp[i] = 9999999;
for(int j = 0; j < i; j++)
if(fact(j+1, i))
dp[i] = min(dp[i], dp[j]+1);
}
printf("%d\n",dp[n]);
}
return 0;
}