#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<deque>
#include<string>
#include<string.h>
#include<vector>
#include<set>
#include<map>
#include<stdlib.h>
#include<cassert>
using namespace std;
const long long mod=1000000007;
const long long inf=mod*mod;
const long long d2=500000004;
const double EPS=1e-6;
const double PI=acos(-1.0);
int ABS(int a){return max(a,-a);}
long long ABS(long long a){return max(a,-a);}
char in[210000];
int bfs[210000];
vector<int>t[1<<26];
int val[210000];
int main(){
	scanf("%s",in);
	int now=0;
	int n=strlen(in);
	for(int i=0;i<n;i++){
		now^=(1<<(in[i]-'a'));
		val[i+1]=now;
	}
	for(int i=0;i<=n;i++){
		t[val[i]].push_back(i);
	}
	for(int i=0;i<=n;i++)bfs[i]=mod;
	bfs[0]=0;
	for(int i=0;i<n;i++){
		int at=val[i];
		for(int j=0;j<27;j++){
			int to=at;
			if(j<26)to^=(1<<j);
			int q=upper_bound(t[to].begin(),t[to].end(),i)-t[to].begin();
			if(q<t[to].size()){
				bfs[t[to][q]]=min(bfs[t[to][q]],bfs[i]+1);
			}
			if(val[n]==to){
				bfs[n]=min(bfs[n],bfs[i]+1);
			}
		}
	}
	printf("%d\n",bfs[n]);
}