#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;
}