#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int from, to, cost;
  bool operator<(Edge e) { return cost < e.cost; }
};
template <class T>
using vec = vector<T>;
template <class T>
using pql = priority_queue<T, vector<T>, greater<T>>;
string debug_show(pair<int, int> a) {
  return "(" + to_string(a.first) + "," + to_string(a.second) + ")";
}
template <class T>
struct augEdge {
  T from, to;
  int cost;
  bool operator<(augEdge e) { return cost < e.cost; }
  bool operator>(augEdge e) { return cost > e.cost; }
};
template <class T>
using augGraph = vector<augEdge<T>>;
int main(void) {
  string s;
  cin >> s;
  int N = s.size();
  vector<int> num(26, 0);
  for (int i = (int)(0); i < (int)(N); i++) {
    num[s[i] - 'a']++;
  }
  int odd = 0;
  for (int i = (int)(0); i < (int)(26); i++) {
    if (num[i] % 2 == 1) {
      odd++;
    }
  }
  cout << max(1, odd) << endl;
  return 0;
}
