/*
Author: NgThi Thao Duyen
Link submit:
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define task "strdel"
#define fi first
#define se second
#define pii pair<int,int>
#define pb push_back
#define dou double
#define el '\n'
#define ull unsigned long long
#define pll pair<ll,ll>
const int maxN = 305; // Sửa từ maxM = 300
const int LIM = 1e9;
const ll oo = 1e18;
const int mod = (int)1e9+7;
const int LOG = 23;
string s;
int T;
int dp[maxN][maxN];
void solve()
{
cin >> s;
int n = (int)s.length();
s = " " + s;
// Khởi tạo
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
dp[i][j] = 0;
}
}
for(int i=1; i<=n; i++) dp[i][i] = 1;
for(int len=2; len<=n; len++)
{
for(int l=1; l<=n-len+1; l++)
{
int r = l+len-1;
// Trường hợp cơ bản: xóa từng ký tự
dp[l][r] = 1 + dp[l+1][r];
// Nếu s[l] == s[r], có thể xóa cùng lúc với phần bên trong
if(s[l] == s[r]) {
if(len == 2) {
dp[l][r] = 1;
} else {
dp[l][r] = min(dp[l][r], dp[l+1][r-1]);
}
}
// Tách xâu thành 2 phần
for(int k=l; k<r; k++) {
dp[l][r] = min(dp[l][r], dp[l][k] + dp[k+1][r]);
}
}
}
cout << dp[1][n] << el;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
if(fopen(task".inp","r"))
{
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
cin >> T;
while(T--) solve();
return 0;
}
LyoKICAgIEF1dGhvcjogTmdUaGkgVGhhbyBEdXllbgogICAgTGluayBzdWJtaXQ6IAoqLwoKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcgCiNkZWZpbmUgdGFzayAic3RyZGVsIgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBkb3UgZG91YmxlCiNkZWZpbmUgZWwgJ1xuJwojZGVmaW5lIHVsbCB1bnNpZ25lZCBsb25nIGxvbmcgCiNkZWZpbmUgcGxsIHBhaXI8bGwsbGw+CmNvbnN0IGludCBtYXhOID0gMzA1OyAgLy8gU+G7rWEgdOG7qyBtYXhNID0gMzAwCmNvbnN0IGludCBMSU0gPSAxZTk7CmNvbnN0IGxsIG9vID0gMWUxODsKY29uc3QgaW50IG1vZCA9IChpbnQpMWU5Kzc7CmNvbnN0IGludCBMT0cgPSAyMzsKc3RyaW5nIHM7CmludCBUOwppbnQgZHBbbWF4Tl1bbWF4Tl07Cgp2b2lkIHNvbHZlKCkKewogICAgY2luID4+IHM7CiAgICBpbnQgbiA9IChpbnQpcy5sZW5ndGgoKTsKICAgIHMgPSAiICIgKyBzOwogICAgCiAgICAvLyBLaOG7n2kgdOG6oW8KICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspIHsKICAgICAgICBmb3IoaW50IGo9MTsgajw9bjsgaisrKSB7CiAgICAgICAgICAgIGRwW2ldW2pdID0gMDsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspIGRwW2ldW2ldID0gMTsKICAgIAogICAgZm9yKGludCBsZW49MjsgbGVuPD1uOyBsZW4rKykKICAgIHsKICAgICAgICBmb3IoaW50IGw9MTsgbDw9bi1sZW4rMTsgbCsrKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHIgPSBsK2xlbi0xOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVHLGsOG7nW5nIGjhu6NwIGPGoSBi4bqjbjogeMOzYSB04burbmcga8O9IHThu7EKICAgICAgICAgICAgZHBbbF1bcl0gPSAxICsgZHBbbCsxXVtyXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIE7hur91IHNbbF0gPT0gc1tyXSwgY8OzIHRo4buDIHjDs2EgY8O5bmcgbMO6YyB24bubaSBwaOG6p24gYsOqbiB0cm9uZwogICAgICAgICAgICBpZihzW2xdID09IHNbcl0pIHsKICAgICAgICAgICAgICAgIGlmKGxlbiA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgZHBbbF1bcl0gPSAxOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBkcFtsXVtyXSA9IG1pbihkcFtsXVtyXSwgZHBbbCsxXVtyLTFdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVMOhY2ggeMOidSB0aMOgbmggMiBwaOG6p24KICAgICAgICAgICAgZm9yKGludCBrPWw7IGs8cjsgaysrKSB7CiAgICAgICAgICAgICAgICBkcFtsXVtyXSA9IG1pbihkcFtsXVtyXSwgZHBbbF1ba10gKyBkcFtrKzFdW3JdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogICAgY291dCA8PCBkcFsxXVtuXSA8PCBlbDsKfQoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOwogICAgaWYoZm9wZW4odGFzayIuaW5wIiwiciIpKQogICAgewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwiciIsc3RkaW4pOwogICAgICAgIGZyZW9wZW4odGFzayIub3V0IiwidyIsc3Rkb3V0KTsKICAgIH0KICAgIGNpbiA+PiBUOwogICAgd2hpbGUoVC0tKSBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0=