#include <bits/stdc++.h>
using namespace std;
template <typename A, typename B>
inline bool chmax(A &a, B b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <typename A, typename B>
inline bool chmin(A &a, B b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
const long long INF = 1e9 + 100;
const long long MOD = 1000000007;
const double EPS = 1e-10;
const bool debug = 0;
string s;
int dp[212345][2];
int g[212345][26];
int cnt[212345][26];
int main() {
  cin >> s;
  for (int i = (0); i < (s.size()); i++) s[i] -= 'a';
  int N = s.size();
  fill(g[0], g[N + 2], N - 1);
  for (int i = (1); i < (N); i++) g[i - 1][s[i]] = i;
  for (int j = (0); j < (26); j++) {
    for (int i = N - 2; i >= 0; i--) {
      if (g[i][j] == N - 1) g[i][j] = g[i + 1][j];
    }
  }
  for (int i = (0); i < (N); i++) cnt[i + 1][s[i]]++;
  for (int i = (1); i < (N + 1); i++)
    for (int j = (0); j < (26); j++) cnt[i][j] += cnt[i - 1][j];
  fill(dp[0], dp[N + 2], INF);
  dp[0][1] = 0;
  for (int i = (0); i < (N); i++) {
    for (int l = (0); l < (2); l++) {
      if (dp[i][l] == INF) continue;
      for (int j = (0); j < (26); j++) {
        int nex = g[i][j] + 1;
        int c = 0;
        for (int k = (0); k < (26); k++)
          if ((cnt[nex][k] - cnt[i][k]) & 1) c++;
        if (c == 0) {
          chmin(dp[nex][0], dp[i][l]);
          chmin(dp[nex][1], dp[i][l] + 1);
          chmin(dp[nex + 1][1], dp[i][l] + 1);
        } else if (c == 1) {
          chmin(dp[nex][1], dp[i][l] + 1);
        }
        nex = g[g[i][j]][j] + 1;
        c = 0;
        for (int k = (0); k < (26); k++)
          if ((cnt[nex][k] - cnt[i][k]) & 1) c++;
        if (c == 0) {
          chmin(dp[nex][0], dp[i][l]);
          chmin(dp[nex][1], dp[i][l] + 1);
          chmin(dp[nex + 1][1], dp[i][l] + 1);
        } else if (c == 1) {
          chmin(dp[nex][1], dp[i][l] + 1);
        }
      }
      chmin(dp[i + 1][1], dp[i][l] + 1);
    }
  }
  cout << dp[N][1] << endl;
  return 0;
}
