#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr ll INF = (ll)1e18;
constexpr ll MOD = (ll)1e9 + 7;
constexpr double EPS = 1e-9;
constexpr ll dx[4] = {1LL, 0LL, -1LL, 0LL};
constexpr ll dy[4] = {0LL, 1LL, 0LL, -1LL};
constexpr ll dx8[8] = {1LL, 0LL, -1LL, 0LL, 1LL, 1LL, -1LL, -1LL};
constexpr ll dy8[8] = {0LL, 1LL, 0LL, -1LL, 1LL, -1LL, 1LL, -1LL};
void p() { std::cout << '\n'; }
template <typename Head, typename... Tail>
void p(Head head, Tail... tail) {
  std::cout << head << (sizeof...(tail) ? " " : "");
  p(tail...);
}
template <typename T>
inline void pv(std::vector<T>& v) {
  for (ll i = 0, N = v.size(); i < N; i++)
    std::cout << v[i] << " \n"[i == N - 1];
}
template <typename T>
inline T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
template <typename T>
inline T lcm(T a, T b) {
  return a / gcd(a, b) * b;
}
template <typename T>
inline bool chmax(T& a, T b) {
  return a < b && (a = b, true);
}
template <typename T>
inline bool chmin(T& a, T b) {
  return a > b && (a = b, true);
}
template <typename T>
inline void uniq(std::vector<T>& v) {
  v.erase(unique(v.begin(), v.end()), v.end());
}
inline ll up(ll bit, ll i) { return bit | (1 << i); }
inline ll down(ll bit, ll i) { return bit & ~(1 << i); }
inline ll inverse(ll bit, ll i) { return bit ^ (1 << i); }
inline bool isup(ll bit, ll i) { return (bit & (1 << i)); }
inline bool isdown(ll bit, ll i) { return !(bit & (1 << i)); }
void solve() {
  string S;
  cin >> S;
  ll N = S.size();
  vector<ll> hash(N, 0);
  ll t = 0;
  for (ll i = 0, i_length = (N); i < i_length; ++i) {
    t = inverse(t, S[i] - 'a');
    hash[i] = t;
  }
  if (__builtin_popcount(hash.back()) <= 1) {
    p(1);
    return;
  }
  vector<ll> dp(1 << 26, INF);
  dp[0] = 0;
  for (ll i = 0, i_length = (N); i < i_length; ++i) {
    ll minval = INF;
    ll x, invhash;
    x = 0;
    invhash = x ^ hash[i];
    chmin(minval, dp[invhash] + 1);
    for (ll j = 0, j_length = (26); j < j_length; ++j) {
      x = 1 << j;
      invhash = x ^ hash[i];
      chmin(minval, dp[invhash] + 1);
    }
    chmin(dp[hash[i]], minval);
  }
  p(dp[hash[N - 1]]);
}
signed main() {
  solve();
  return 0;
}
