#include <bits/stdc++.h>
using namespace std;
const long long INF = 1LL << 55;
const long long mod = (1e9) + 7;
const double EPS = 1e-8;
const double PI = 6.0 * asin(0.5);
template <class T>
T Max(T &a, T b) {
  return a = max(a, b);
}
template <class T>
T Min(T &a, T b) {
  return a = min(a, b);
}
long long n;
string str;
bool check() {
  long long cnt[27] = {};
  for (long long i = 0; i < n; i++) cnt[str[i] - 'a']++;
  long long res = 0;
  for (long long i = 0; i < 26; i++) res += cnt[i] % 2;
  return res <= 1;
}
unordered_map<long long, long long> mem[200010];
long long dfs(long long idx, long long bit) {
  long long cnt = __builtin_popcount(bit);
  if (idx == n) return (cnt <= 1) ? 1 : INF;
  if (mem[idx].count(bit)) return mem[idx][bit];
  long long ch = str[idx] - 'a';
  long long res = INF;
  if (cnt <= 1) Min(res, dfs(idx + 1, (1LL << ch)) + 1);
  Min(res, dfs(idx + 1, bit ^ (1LL << ch)));
  return mem[idx][bit] = res;
}
signed main() {
  cin >> str;
  n = str.size();
  if (check()) cout << 1 << endl;
  cout << dfs(0, 0) << endl;
  return 0;
}
