#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3fffffff;
const int SINF = 0x7fffffff;
const long long LINF = 0x3fffffffffffffff;
const long long SLINF = 0x7fffffffffffffff;
const int MINF = 0x3f3f3f3f;
const int MAXN = 200007;
const int BASE = 26;
int n;
char s[MAXN];
int sta[MAXN];
map<int, int> mp;
int dp[MAXN];
void init();
void input();
void work();
int getval(map<int, int> mp, int x) {
  map<int, int>::iterator it;
  if ((it = mp.find(x)) != mp.end())
    return it->second;
  else
    return MINF;
}
int main() {
  init();
  input();
  work();
}
void init() { ios::sync_with_stdio(false); }
void input() { scanf("%s", s + 1); }
void work() {
  n = strlen(s + 1);
  for (int i = 1; i <= n; ++i) sta[i] = sta[i - 1] ^ (1 << (s[i] - 'a'));
  memset(dp, MINF, sizeof(dp));
  dp[0] = 0;
  mp[0] = 0;
  for (int i = 1; i <= n; ++i) {
    for (int j = 0; j < BASE; ++j) {
      dp[i] = min(dp[i], getval(mp, sta[i] ^ (1 << j)) + 1);
    }
    dp[i] = min(dp[i], getval(mp, sta[i]) + 1);
    mp[sta[i]] = min(getval(mp, sta[i]), dp[i]);
  }
  cout << dp[n] << endl;
}
