#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <queue>
#include <string>
#include <algorithm>
#include <cstdio>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <ctime>
#include <cmath>
#include <bits/stdc++.h>
#include <string.h>
#define inf 0x7fffffff
using namespace std;
struct P
{
    int x,y,z;

    bool operator<(const P &a)const{
       // if(y!=a.y)
       // return y>a.y;
       return x>a.x;
//        return z>a.z;
    }
};
struct S
{
    int x,y;
};
vector<int> v[1<<26];
int a,b,c,n,m,i,o[55],k,d,e,dy[15]={0,0,-1,1,-1,1,-1,1},dx[15]={-1,1,0,0,1,1,-1,-1};
int l[201115];
//long long x,y,z[10055];
S u[1010][1600][5];
//int j[500],j2[500];
//queue<int> q,q1;
//stack<int> s;
queue<int> q;
long long x,y=0,z[99];

//deque<int> d;
//'1'==49;
//'A'==65;
//'a'==97;
//unordered_map<int, int > p[100010];
set<int> s;
string r,r1;
//char r[1010],r1[555];

bool as(int a,int b)
{
     return a>b;

}

int f(int t)
{
    if(t==0) return 0;
    printf("%d\n",t);
    return f(t-1)+1;
}

//2147483647
int main()
{
    cin>>r;
    for(int t=0;t<r.size();t++)
    {
        l[t]=987654321;
        i^=(1<<(r[t]-'a'));
        o[t+1]=i;
        v[i].push_back(t+1);
        if(i==0) b=max(b,t+1);
    }
    if(b==r.size())
    {
        puts("1");
        return 0;
    }
    l[r.size()]=987654321;
    i=0;
    l[b]=0;
    q.push(0);
    q.push(b);
    for(;q.size();q.pop())
    {
        int i=o[q.front()];
        for(int t='a';t<='z';t++)
        {
            int u=i^(1<<(t-'a'));
            for(int h=0;h<v[u].size();h++)
                if(l[v[u][h]]>l[q.front()]+1)
            {
                l[v[u][h]]=l[q.front()]+1;
                q.push(v[u][h]);
            }
        }
    }

    printf("%d",l[r.size()]);
    return 0;
}


