import core.bitop;
import std.algorithm;
import std.array;
import std.ascii;
import std.container;
import std.conv;
import std.format;
import std.math;
import std.range;
import std.stdio;
import std.string;
import std.typecons;

int[int] memo;
string str;
int dfs(int depth)
{
  if (depth == str.length) {
    return 0;
  }
  if (depth in memo) {
    return memo[depth];
  }
  int ans = int.max;
  uint bits = 0;
  int[] list;
  for (int i = depth; i < str.length; ++i) {
    bits ^= 1U << (str[i] - 'a');
    if (popcnt(bits) <= 1) {
      list ~= i + 1;
    }
  }
  int[] mist;
  for (int i = 0; i < list.length - 1; ++i) {
    if (list[i] + 2 == list[i + 1]) {
      continue;
    }
    mist ~= list[i];
  }
  mist ~= list[$-1];
  foreach (next; mist.retro) {
    int ret = 1 + dfs(next);
    ans = min(ans, ret);
  }
  return memo[depth] = ans;
}

int best = int.max;
int dfs(int depth, int cnt)
{
  if (depth == str.length) {
    best = min(best, cnt);
    return 0;
  }
  if (depth in memo) {
    best = min(best, cnt + memo[depth]);
    return memo[depth];
  }
  if (cnt >= best) {
    return int.max >> 2;
  }
  int ans = int.max;
  uint bits = 0;
  int[] list;
  for (int i = depth; i < str.length; ++i) {
    bits ^= 1U << (str[i] - 'a');
    if (popcnt(bits) <= 1) {
      list ~= i + 1;
    }
  }
  int[] mist;
  for (int i = 0; i < list.length - 1; ++i) {
    if (list[i] + 2 == list[i + 1]) {
      continue;
    }
    mist ~= list[i];
  }
  mist ~= list[$-1];
  foreach (next; mist.retro) {
    int ret = 1 + dfs(next, cnt + 1);
    ans = min(ans, ret);
  }
  return memo[depth] = ans;
}

void main()
{
  str = readln.chomp;
  uint bits = 0;
  foreach (c; str) {
    bits ^= 1U << (c - 'a');
  }
  if (bits.popcnt <= 1) {
    writeln = 1;
    return;
  }
  int cnt = 0;
  uint ret = 0;
  for (int i = 0; i < str.length; ++i) {
    if (bits & (1U << (str[i] - 'a'))) {
      if (ret & (1U << (str[i] - 'a'))) {
        ret ^= 1U << (str[i] - 'a');
        continue;
      }
      cnt++;
      bits ^= 1U << (str[i] - 'a');
      bits ^= ret;
    } else {
      ret ^= 1U << (str[i] - 'a');
    }
  }
  cnt += ret.popcnt;
  cnt.writeln;
}
