#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e2+10,mod=1e9+7;
inline int read(){
int c,w=0,n=0;
while((c=getchar())<'0'||'9'<c) w=c=='-';
do n=n*10+c-'0';while('0'<=(c=getchar())&&c<='9');
return w?-n:n;
}
int write(int n){
if(n<0) putchar('-'),n=-n;
if(n>9) write(n/10);
putchar(n%10+'0');
return n;
}
int n,f[4][maxn][maxn];
char s[maxn];
signed main(){
scanf("%s",s+1),n=strlen(s+1);
for(int r=1;r<=n;++r){
f[0][r][r]=f[1][r][r]=1;
for(int l=r-1;l;--l){
f[0][l][r]=r-l+1;
if((r-l+1)&1||s[l]!=s[(l+r>>1)+1]) f[1][l][r]=f[0][l][r];
else{
f[1][l][r]=f[1][l][l+r>>1]+1,f[2][l][r]=l!=1;
for(int i=l+1,j=(l+r>>1)+2;j<=r;++i,++j) if(s[i]!=s[j]) f[1][l][r]=f[0][l][r],f[2][l][r]=0,j=r;
}
f[0][l][r]=f[1][l][r];
int flag=0;
for(int i=l;i<r;++i){
int x=f[1][l][i]+f[0][i+1][r]+f[2][i+1][r];
if(x<f[0][l][r]||(x==f[0][l][r]&&!f[2][l][i]&&f[2][l][r]))
f[0][l][r]=x,f[2][l][r]=f[2][l][i],flag|=!f[2][i+1][r];
}
if(flag) f[1][l][r]=min(f[1][l][r],f[0][l][r]);
}
}
write(f[0][1][n]);
return 0;
}