#include <bits/stdc++.h>
namespace io {
int F() {
  int n = 0, F = 1;
  char ch;
  while ((ch = getchar()) != '-' && (ch < '0' || ch > '9'))
    ;
  ch == '-' ? F = 0 : n = ch - '0';
  while ((ch = getchar()) >= '0' && ch <= '9')
    n = (n << 1) + (n << 3) + ch - '0';
  return F ? n : -n;
}
long long G() {
  long long n = 0, F = 1;
  char ch;
  while ((ch = getchar()) != '-' && (ch < '0' || ch > '9'))
    ;
  ch == '-' ? F = 0 : n = ch - '0';
  while ((ch = getchar()) >= '0' && ch <= '9')
    n = (n << 1) + (n << 3) + ch - '0';
  return F ? n : -n;
}
}  // namespace io
char s[222222];
int sum[222222];
int d[222222], pd;
int la[222222];
int f[222222];
int main() {
  scanf("%s", s + 1);
  int n = strlen(s + 1);
  for (register int i = 1; i <= n; ++i)
    d[i] = sum[i] = sum[i - 1] ^ 1 << s[i] - 'a';
  std::sort(d + 1, d + n + 1);
  pd = std::unique(d + 1, d + n + 1) - d - 1;
  for (register int i = 1; i <= n; ++i)
    sum[i] = std::lower_bound(d + 1, d + pd + 1, sum[i]) - d;
  memset(f, 63, sizeof(f));
  memset(la, 63, sizeof(la));
  f[0] = 0;
  la[1] = 0;
  for (register int i = 1; i <= n; ++i) {
    int v = sum[i];
    (f[i] > (la[v] + 1) ? f[i] = (la[v] + 1), 1 : 0);
    for (register int j = 0; j < 26; ++j) {
      int p = d[v] ^ 1 << j;
      int pp = std::lower_bound(d + 1, d + pd + 1, p) - d;
      if (d[pp] == p && pp <= pd)
        (f[i] > (la[pp] + 1) ? f[i] = (la[pp] + 1), 1 : 0);
    }
    (la[v] > (f[i]) ? la[v] = (f[i]), 1 : 0);
  }
  printf("%d\n", f[n]);
  return 0;
}
