#include <bits/stdc++.h>
#pragma GCC optimize("-O3")
using namespace std;
void _main();
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  _main();
}
int getrand(int l, int r) {
  static uint32_t y = time(NULL);
  y ^= (y << 13);
  y ^= (y >> 17);
  y ^= (y << 5);
  return y % (r - l + 1) + l;
}
long long getrandll(long long l, long long r) {
  long long a = getrand(0, 999999999);
  long long b = getrand(0, 999999999);
  long long x = a * 1000000000LL + b;
  assert(0 <= x);
  return x % (r - l + 1) + l;
}
string S;
int N;
long long h[30];
map<long long, int> dp;
void _main() {
  cin >> S;
  N = S.length();
  for (int i = 0; i < 30; i++) h[i] = getrandll(0, 1LL << 60);
  long long x = 0;
  dp[0] = 0;
  int ans = 0;
  for (int i = 0; i < N; i++) {
    x ^= h[S[i] - 'a'];
    int ma = INT_MAX / 2;
    if (!dp.count(x)) dp[x] = INT_MAX / 2;
    ma = min(ma, dp[x]);
    for (int i = 0; i < 26; i++) {
      if (!dp.count(x ^ h[i])) dp[x ^ h[i]] = INT_MAX / 2;
      ma = min(ma, dp[x ^ h[i]]);
    }
    dp[x] = min(dp[x], ma + 1);
    ans = ma + 1;
  }
  cout << ans << endl;
}
