#include <bits/stdc++.h>
using namespace std;
int main() {
  string s;
  cin >> s;
  long long n = s.size();
  long long isOdd[n + 1];
  fill_n(isOdd, n + 1, 0);
  long long dp[n + 1];
  fill_n(dp, n + 1, 1000000);
  dp[0] = 0;
  map<long long, long long> bLLoid;
  long long vec[n + 1];
  fill_n(vec, n + 1, -1);
  vec[0] = 0;
  bLLoid[0] = 0;
  long long nid = 1;
  for (long long i = 0; i < (long long)(n); i++) {
    long long c = s[i] - 'a';
    isOdd[i + 1] = (isOdd[i] ^ (1 << c));
    for (long long j = 0; j < (long long)(26); j++) {
      long long k = isOdd[i + 1] ^ (1 << j);
      if (bLLoid.find(k) == bLLoid.end()) {
        dp[i + 1] = min(dp[i + 1], dp[i] + 1);
        continue;
      }
      long long id = bLLoid[k];
      dp[i + 1] = min(dp[i + 1], dp[vec[id]] + 1);
    }
    if (bLLoid.find(isOdd[i + 1]) != bLLoid.end()) {
      long long id = bLLoid[isOdd[i + 1]];
      dp[i + 1] = min(dp[i + 1], dp[vec[id]] + 1);
    }
    if (bLLoid.find(isOdd[i + 1]) == bLLoid.end()) {
      bLLoid[isOdd[i + 1]] = nid++;
    }
    if (vec[bLLoid[isOdd[i + 1]]] < 0) vec[bLLoid[isOdd[i + 1]]] = (i + 1);
  }
  cout << dp[n] << endl;
  return 0;
}
