#include <bits/stdc++.h>
#include <iomanip>

using namespace std;

typedef long long LL;
typedef long double LD;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
typedef pair<LD, LD> PLDLD;
typedef vector<int> VI;
typedef vector<char> VB;

#define FOR(i,a,b) for(int i=(a);i<(int)(b);++i)
#define REP(i,n)  FOR(i,0,n)
#define CLR(a) memset((a), 0 ,sizeof(a))
#define ALL(a) a.begin(),a.end()

const double eps=1e-5;
const long long INF=(LL)(1e9)*(LL)(1e9);

template<class T>
void chmin(T& a, const T& b)
{
	if(a>b)
		a=b;
}
template<class T>
void chmax(T& a, const T& b)
{
	if(a<b)
		a=b;
}

const LL pow(const LL p, const LL q)
{
	LL t=1;
	REP(i,q)
		t*=p;
	return t;
}

int vctoi(vector<char> c)
{
	int t=0;
	REP(i,26)
	{
		t+=(1<<i);
	}
	return t;
}
int main()
{
	cin.tie(0);
	ios::sync_with_stdio(false);

	string s;
	cin>>s;
	int n=s.size();
	vector<vector<char>> let(n+1,vector<char>(26));
	vector<pair<vector<char>,int>> li(n+1);
	vector<char> tlet(26);
	REP(i,n)
	{
		tlet[s[i]-'a']=1-tlet[s[i]-'a'];
		let[i+1]=tlet;
		li[i+1]=pair<int,int>(vctoi(tlet), i+1);
	}
	sort(ALL(li));

	int inf=1e9;
	vector<int> memo(n+1,inf);
	memo[0]=0;
	for(int i=0;i<n;i++)
	{
		vector<char> s=let[i];
		REP(j,27)
		{
			if(j!=26)
				s[j]=1-s[j];
			int si=vctoi(s);
			auto p=lower_bound(ALL(li),pair<int,int>(si,-1));
			while((*p).first==si)
			{
				chmin(memo[(*p).second],memo[i]+1);
				p++;
			}
			if(j!=26)
				s[j]=1-s[j];
		}
	}
	//REP(i,n+1)
	//cout<<memo[i]<<" \n"[i==n];
	cout<<memo[n]<<endl;
}