#include<cstdio>
#include<cstring>
const int N=105;
char s[N];
int f[N][N],v[N][N],n;
inline int num(int x){
if(x<10)return 1;
if(x<100)return 2;
return 3;
}
inline int min(int x,int y){
return x<y?x:y;
}
int dfs(int l,int r);
int get(int l,int r){
if(v[l][r])return v[l][r];
int len=r-l+1;
v[l][r]=len;
for(int i=1;i<<1<=len;i++){
if(!(len%i)){
bool flag=true;
for(int j=l+i;flag&&j<r;j+=i)for(int k=0;flag&&k<i;k++)if(s[l+k]^s[j+k])flag=false;
if(flag)v[l][r]=min(v[l][r],num(len/i)+dfs(l,l+i-1)+2);
}
}
return v[l][r];
}
int dfs(int l,int r){
if(l==r)return 1;
if(f[l][r])return f[l][r];
f[l][r]=get(l,r);
for(int i=l;i<r;i++)f[l][r]=min(f[l][r],dfs(l,i)+dfs(i+1,r));
return f[l][r];
}
int main(){
return scanf("%s",s+1),n=strlen(s+1),printf("%d\n",dfs(1,n)),0;
}
红豆泥阿里嘎多