#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template <class T, class U>
ostream& operator<<(ostream& o, const pair<T, U>& p) {
  o << "(" << p.first << "," << p.second << ")";
  return o;
}
template <class T>
ostream& operator<<(ostream& o, const vector<T>& v) {
  o << "[";
  for (T t : v) {
    o << t << ",";
  }
  o << "]";
  return o;
}
const int INF = 19191919;
const int N = 222222;
int dp[N];
int main() {
  string s;
  cin >> s;
  int S = s.size();
  fill(dp, dp + N, INF);
  dp[0] = 0;
  map<int, int> m;
  m[0] = 0;
  for (int(i) = 0; (i) < (int)(S); ++(i)) {
    int x = s[i] - 'a';
    map<int, int> nm;
    for (const auto kv : m) {
      int k = kv.first, v = kv.second;
      int nk = k ^ (1 << x);
      nm[nk] = v;
    }
    if (!nm.count(1 << x))
      nm[1 << x] = dp[i];
    else
      nm[1 << x] = min(nm[1 << x], dp[i]);
    m = nm;
    int add = INF;
    if (m.count(0)) add = min(add, m[0]);
    for (int(j) = 0; (j) < (int)(26); ++(j)) {
      int k = 1 << j;
      if (m.count(k)) add = min(add, m[k]);
    }
    dp[i + 1] = add + 1;
  }
  printf("%d\n", dp[S]);
  return 0;
}
