#include <bits/stdc++.h>
using namespace std;
struct fast_ios {
  fast_ios() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(20);
  };
} fast_ios_;
using vec = vector<long long>;
using mat = vector<vec>;
using Pii = pair<long long, long long>;
using PiP = pair<long long, Pii>;
using PPi = pair<Pii, long long>;
using bools = vector<bool>;
using pairs = vector<Pii>;
template <typename T>
void readv(vector<T> &a) {
  for (long long i = (0); i < (a.size()); i++) cin >> a[i];
}
void readv_m1(vector<long long> &a) {
  for (long long i = (0); i < (a.size()); i++) {
    cin >> a[i];
    a[i]--;
  }
}
long long mod = 1000000007;
signed main() {
  string s;
  cin >> s;
  long long n = ((long long)s.size());
  map<long long, long long> m;
  vec x(n + 1);
  long long tmp = 0;
  x[0] = 0;
  m[0] = 0;
  long long l = 1;
  for (long long i = (0); i < (n); i++) {
    tmp ^= (1LL << (s[i] - 'a'));
    if (m.count(tmp) == 0) m[tmp] = l++;
    x[i + 1] = tmp;
  }
  vec dp(l, 1000000000000000000);
  dp[0] = 0;
  for (long long i = (0); i < (n); i++) {
    long long b = x[i + 1];
    long long mm = dp[m[b]];
    for (long long k = (0); k < (26); k++) {
      if (m.count(b ^ (1LL << (k))) > 0) mm = min(mm, dp[m[b ^ (1LL << (k))]]);
    }
    dp[m[b]] = mm + 1;
  }
  cout << dp[m[x[n]]] << endl;
  return 0;
}
