#include <bits/stdc++.h>
using namespace std;
template <typename _KTy, typename _Ty>
ostream& operator<<(ostream& ostr, const pair<_KTy, _Ty>& m) {
  cout << "{" << m.first << ", " << m.second << "}";
  return ostr;
}
template <typename _KTy, typename _Ty>
ostream& operator<<(ostream& ostr, const map<_KTy, _Ty>& m) {
  if (m.empty()) {
    cout << "{ }";
    return ostr;
  }
  cout << "{" << *m.begin();
  for (auto itr = ++m.begin(); itr != m.end(); itr++) {
    cout << ", " << *itr;
  }
  cout << "}";
  return ostr;
}
template <typename _Ty>
ostream& operator<<(ostream& ostr, const vector<_Ty>& v) {
  if (v.empty()) {
    cout << "{ }";
    return ostr;
  }
  cout << "{" << v.front();
  for (auto itr = ++v.begin(); itr != v.end(); itr++) {
    cout << ", " << *itr;
  }
  cout << "}";
  return ostr;
}
template <typename _Ty>
ostream& operator<<(ostream& ostr, const set<_Ty>& s) {
  if (s.empty()) {
    cout << "{ }";
    return ostr;
  }
  cout << "{" << *(s.begin());
  for (auto itr = ++s.begin(); itr != s.end(); itr++) {
    cout << ", " << *itr;
  }
  cout << "}";
  return ostr;
}
int problemD() {
  string S;
  cin >> S;
  map<char, int> mp;
  for (int i = 0; i < S.size(); i++) mp[S[i]]++;
  int ans = 0;
  for (auto itr = mp.begin(); itr != mp.end(); itr++) {
    ans += (itr->second % 2 ? 1 : 0);
  }
  cout << ans << endl;
  return 0;
}
int main() {
  problemD();
  return 0;
}
