#include <iostream>
#include <vector>
#include <string>
using namespace std;
string target;
int dp[55][55]; // 最多长度为50
// 区间 [l, r] 涂成 target 的最少次数
int dfs(int l, int r) {
if (l > r) return 0;
if (dp[l][r] != -1) return dp[l][r];
int res = dfs(l, r - 1) + 1; // 先涂前 r-1,然后单独涂 r
for (int k = l; k < r; ++k) {
if (target[k] == target[r]) {
res = min(res, dfs(l, k) + dfs(k + 1, r - 1));
}
}
return dp[l][r] = res;
}
int main() {
cin >> target;
int n = target.size();
// 初始化 dp 为 -1 表示未计算
for (int i = 0; i <= n; ++i)
for (int j = 0; j <= n; ++j)
dp[i][j] = -1;
cout << dfs(0, n - 1) << endl;
return 0;
}