#include <bits/stdc++.h>
using namespace std;
int main() {
  string S;
  cin >> S;
  int N = S.size();
  int ans = 0;
  {
    vector<int> v(N);
    for (int i = 0; i < N; i++) {
      v[i] = 1 << (int)(S[i] - 'a');
    }
    for (int i = 1; i < N; i++) {
      v[i] ^= v[i - 1];
    }
    vector<int> pos(1 << 26, -1);
    vector<int> dp1(N + 1), dp2(N + 1), res(N + 1);
    pos[0] = 0;
    for (int i = 0; i < N; i++) {
      if (pos[v[i]] == -1) {
        dp1[i + 1] = 0;
        pos[v[i]] = i + 1;
      } else {
        dp1[i + 1] = i + 1 - pos[v[i]];
      }
    }
    for (int i = 1; i <= N; i++) {
      dp2[i] = i - dp1[i] - 1 >= 0 ? dp1[i - dp1[i] - 1] + dp1[i] + 1 : i;
    }
    for (int i = 1; i <= N; i++) {
      res[i] = i - dp2[i] >= 0 ? res[i - dp2[i]] + 1 : 1;
    }
    ans = res[N];
  }
  reverse(S.begin(), S.end());
  {
    vector<int> v(N);
    for (int i = 0; i < N; i++) {
      v[i] = 1 << (int)(S[i] - 'a');
    }
    for (int i = 1; i < N; i++) {
      v[i] ^= v[i - 1];
    }
    vector<int> pos(1 << 26, -1);
    vector<int> dp1(N + 1), dp2(N + 1), res(N + 1);
    pos[0] = 0;
    for (int i = 0; i < N; i++) {
      if (pos[v[i]] == -1) {
        dp1[i + 1] = 0;
        pos[v[i]] = i + 1;
      } else {
        dp1[i + 1] = i + 1 - pos[v[i]];
      }
    }
    for (int i = 1; i <= N; i++) {
      dp2[i] = i - dp1[i] - 1 >= 0 ? dp1[i - dp1[i] - 1] + dp1[i] + 1 : i;
    }
    for (int i = 1; i <= N; i++) {
      res[i] = i - dp2[i] >= 0 ? res[i - dp2[i]] + 1 : 1;
    }
    ans = min(ans, res[N]);
  }
  cout << ans << endl;
  return 0;
}
