import java.util.*;

class Main
{
	static int[][] answers;
	static String s;

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

	public static void main (String[] args) throws java.lang.Exception
	{
		Scanner in = new Scanner(System.in);
		s = in.nextLine();  //Ввод строки.
		
		answers = new int[s.length()][s.length()];
		//Заполнение массива начальными значениями.
		for(int i = 0; i < s.length(); ++i){
			for(int j = 0; j < s.length(); ++j){
				if(i == j) answers[i][j] = 1;
				else answers[i][j] = -1;
			}
		}
		//Вывод ответа.
		System.out.print(calculate(0, s.length()-1));
	}
}