s = gets.chomp.split("")#.map(&:to_i)
S = s
MEMO = Array.new(s.size)
MEMO[s.size-1]=0

ptl = 0

def tree_search(pos)
  return 0 if pos == S.size
  return MEMO[pos] if MEMO[pos]
  min = S.size-1-pos
  a = Array.new(26).map{0}
  for i in 0..(S.size-1-pos)
    a[S[pos+i].ord-97] += 1
    tmp = MEMO[pos+i+1] if a.select{|t| t%2==1}.size == 1
    min = tmp if tmp && tmp < min
  end
  if a.select{|t| t %2 == 1}.size<=1
    MEMO[pos]=1
    return 1 
  end
  MEMO[pos] = min+1 
  return min + 1
end

for i in 0..s.size-1
tree_search(s.size-1-i)
end
p tree_search(0)
