#include <iostream>
#include <string>
using namespace std;

int **answers;
string s;

int calculate(int l, int r){
	if(l > r) return 0;	//Если индекс левой границы отрезка больше индекса правой.
	if(answers[l][r] == -1){ //Если ответ для данного отрезка ещё не известен, находим его.
		answers[l][r] = s.size();
		if(s[l] == s[r]) answers[l][r] = min(answers[l][r], calculate(l+1, r-1));
		for(int i = l; i < r; ++i){
			answers[l][r] = min(answers[l][r], calculate(l, i) + calculate(i+1, r));
		}
	}
	return answers[l][r];
}

int main() {
	getline(cin, s); //Ввод строки.
	
	answers = new int*[s.size()];
	for(int i = 0; i < s.size(); ++i){
		answers[i] = new int[s.size()];
	}
	//Заполнение массива начальными значениями.
	for(int i = 0; i < s.size(); ++i){
		for(int j = 0; j <= s.size(); ++j){
			if(i == j) answers[i][j] = 1;
			else answers[i][j] = -1;
		}
	}
	//Вывод ответа.
	cout<<calculate(0, s.size()-1);
	return 0;
}