#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3FFFFFFF;
const long long INFLL = 0x3FFFFFFF3FFFFFFF;
const double INFD = 1.0e+308;
const double EPS = 1.0e-9;
template <class T, class U>
istream& operator>>(istream& ist, pair<T, U>& right) {
  return ist >> right.first >> right.second;
}
template <class T, class U>
ostream& operator<<(ostream& ost, const pair<T, U>& right) {
  return ost << right.first << ' ' << right.second;
}
template <class T, class TCompatible, size_t N>
void Fill(T (&dest)[N], const TCompatible& val) {
  fill(begin(dest), end(dest), val);
}
template <class T, class TCompatible, size_t M, size_t N>
void Fill(T (&dest)[M][N], const TCompatible& val) {
  for (int i = 0; i < M; ++i) Fill(dest[i], val);
}
template <typename T>
using PriorityQ = priority_queue<T, vector<T>, greater<T> >;
string s;
int A[26];
int main() {
  cin >> s;
  for (char c : s) {
    A[c - 'a']++;
  }
  int sum = 0;
  for (int i = (0); i < (int)(26); ++i) {
    sum += A[i] % 2;
  }
  cout << (sum == 0 ? 1 : sum) << endl;
  return 0;
}
