const maxn = 255;
var i,j,k,n:byte;
    s:string;
    f: array[0..maxn+1,0..maxn+1] of boolean;
    dp: array[0..maxn] of byte;
begin
  readln(s);
  n:=length(s);
  for i:=0 to n do
  for j:=0 to n do
  f[i,j]:=false;
  for i:=0 to n do
  f[i,i]:=true;
  for k:=1 to n-1 do
  for i:=1 to n-k do
  begin
    j:=i+k;
    f[i,j]:=(f[i+1,j-1] and (s[i]=s[j])) or ((j-i=1) and (s[i]=s[j]));
  end;
  fillchar(dp,sizeof(dp),maxn);
  dp[0]:=0;
  for i:=1 to n do
  begin
    for j:=1 to i do
    if f[j,i] and (dp[j-1]+1<dp[i]) then dp[i]:=dp[j-1]+1;
  end;
  writeln(dp[n]);
end.