#include <bits/stdc++.h>
using namespace std;
inline int two(int n) { return 1 << n; }
inline int test(int n, int b) { return (n >> b) & 1; }
inline void set_bit(int& n, int b) { n |= two(b); }
inline void unset_bit(int& n, int b) { n &= ~two(b); }
inline int last_bit(int n) { return n & (-n); }
inline int ones(int n) {
  int res = 0;
  while (n && ++res) n -= n & (-n);
  return res;
}
const double pi = acos(-1);
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
const int MAX_N = 212345;
int arr[27] = {0};
int main() {
  set<char> myset;
  string s;
  cin >> s;
  for (int i = 0; i < s.length(); i++) {
    arr[s[i] - 'a']++;
  }
  int count = 0;
  for (int i = 0; i < 26; i++) {
    if (arr[i] & 1) count++;
  }
  if (count == 0) {
    printf("1\n");
    return 0;
  }
  int index = 0, ans = 1;
  bool flag = false;
  char key = 'A';
  set<char>::iterator it;
  for (int i = 0; i < s.length(); i++) {
    if (key != s[i] && flag && arr[s[i] - 'a'] & 1) {
      key = s[i];
      ans += myset.size();
      myset.clear();
      ans++;
      for (int j = index; j < i; j++) {
        arr[s[j] - 'a']--;
      }
      index = i;
      continue;
    }
    if (key != s[i] && arr[s[i] - 'a'] & 1) {
      key = s[i];
      flag = true;
      continue;
    }
    it = myset.find(s[i]);
    if (it == myset.end())
      myset.insert(s[i]);
    else
      myset.erase(it);
    if (flag && myset.size() == 0) {
      flag = false;
      for (int j = index; j < i; j++) {
        arr[s[j] - 'a']--;
      }
      index = i + 1;
      continue;
    }
  }
  printf("%d\n", ans);
  return 0;
}
