#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

#define F first
#define S second
#define ll long long
#define ull  unsigned long long
#define pb push_back
#define double long double

using namespace std;
using namespace __gnu_pbds;
typedef  tree< int , null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;

const int N = 201000;
int a[N];
main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("input.txt",  "r", stdin);
    //freopen("output.txt", "w", stdout);
    string s;
    cin >> s;
    set < pair < int, int > > ss;
    int n = s.length();
    for (int i = 1; i <= n; i++){
        int k = s[i - 1] - 'a';
        a[i] = ((a[i - 1]) ^(1 << k));
        ss.insert({a[i], -i});
    }
    if (a[n] == 0){
        cout << 1;
        return 0;
    }
    int ans = 0;
    for (int i = 1; i <= n; i++){
        int r = i;
        auto it = ss.lower_bound({a[i - 1], -2e9});
        if (it == ss.end() || (*it).F != a[i - 1]){
            ans++;
            r = i;
        } else{
            r = -(*it).S;
        }
        for (int j = i; j <= r; j++){
            ss.erase({a[j], -j});
        }
        i = r;
    }
    cout << ans;
}
