#include <bits/stdc++.h>
using namespace std;
template <typename T>
void chmax(T &a, T b) {
  a = max(a, b);
}
template <typename T>
void chmin(T &a, T b) {
  a = min(a, b);
}
template <typename T>
void chadd(T &a, T b) {
  a = a + b;
}
long long int dx[] = {0, 0, 1, -1};
long long int dy[] = {1, -1, 0, 0};
constexpr long long INF = 1001001001001001LL;
constexpr long long MOD = 1000000007LL;
long long int bit[200010];
map<long long int, vector<long long int>> v;
long long int dp[200010];
string to_binString(long long int n, long long int k) {
  string ret = "";
  while (n) ret += ('0' + (n & 1)), n >>= 1;
  while (ret.length() < k) ret += '0';
  reverse(ret.begin(), ret.end());
  return ret;
}
signed main() {
  string s;
  cin >> s;
  long long int len = s.length();
  v[0].push_back(0);
  for (long long int(i) = (0); (i) < (len); (i)++) {
    bit[i + 1] = bit[i];
    bit[i + 1] ^= (1 << (s[i] - 'a'));
    v[bit[i + 1]].push_back(i + 1);
  }
  fill(dp, dp + len + 1, INF);
  dp[0] = 0;
  for (long long int(i) = (0); (i) < (len); (i)++) {
    long long int bt = bit[i + 1];
    for (long long int(k) = (-1); (k) < (26); (k)++) {
      long long int nbit = (k < 0 ? bt : bt ^ (1 << k));
      for (auto x : v[nbit]) {
        if (x >= i + 1) break;
        chmin(dp[i + 1], dp[x] + 1);
      }
    }
  }
  cout << dp[len] << endl;
  return 0;
}
