#include <bits/stdc++.h>
using namespace std;
template <typename T>
void fill_all(T &arr, const T &v) {
  arr = v;
}
template <typename T, typename ARR>
void fill_all(ARR &arr, const T &v) {
  for (auto &i : arr) {
    fill_all(i, v);
  }
}
long long int n, maxmove = 0, movesize;
string str;
map<long long int, vector<long long int>> m;
long long int xo = 0, dp[200001], xorhairetu[200001];
long long int DP(long long int num) {
  if (dp[num]) {
    return dp[num];
  }
  if (num == 0) {
    return 1;
  }
  long long int cnt = 93193111451418101;
  vector<long long int> iz = m[xorhairetu[num]];
  for (long long int j = (0); j < (iz.size()); ++j) {
    if (iz[j] > num) {
      continue;
    }
    if (iz[j] == 0) {
      cnt = 1;
    } else {
      cnt = min(cnt, DP(iz[j] - 1) + 1);
    }
  }
  return dp[num] = cnt;
}
int main() {
  cin >> str;
  for (long long int i = (0); i < (26); ++i) {
    m[xo ^ (1 << i)].push_back(0);
  }
  for (long long int i = (0); i < (str.size()); ++i) {
    xo = xo ^ (1 << ((str[i] - 'a')));
    xorhairetu[i] = xo;
    m[xo].push_back(i);
    for (long long int j = (0); j < (26); ++j) {
      m[xo ^ (1 << j)].push_back(i);
    }
  }
  cout << DP(str.size() - 1) << endl;
  return 0;
}
