#include<bits/stdc++.h>
#define int long long
using namespace std;
int f[105][105];
int l[105][105];
int ldp[105][105];
int rdp[105][105];
int dp[105][105];
int mpow(int a,int p){
int ans=1;
while(p){
if(p&1)ans=ans*a%998244353;
a=a*a%998244353;
p=p/2;
}
return ans;
}
int logg(int now){
int ans=1;
while(now>=10){
now=now/10;
ans++;
}
return ans;
}
signed main(){
string s;
getline(cin,s);
for(int i=0;i<s.size();i++){
f[i+1][i+1]=(int)(s[i]);
l[i+1][i+1]=1;
}
int n=s.size();
for(int k=2;k<=n;k++){
for(int i=1;i<=n-k+1;i++){
f[i][i+k-1]=(f[i][i]*mpow(256,k-1)+f[i+1][i+k-1])%998244353;
}
}
for(int i=1;i<=n;i++)ldp[i][i]=rdp[i][i]=i;
for(int k=2;k<=n;k++){
for(int i=1;i<=n-k+1;i++){
l[i][i+k-1]=k;
ldp[i][i+k-1]=i;
rdp[i][i+k-1]=i+k-1;
for(int j=i;j<i+k-1;j++){
if(f[i][j]==f[j+1][i+k-1]){
if(l[i][j]<l[i][i+k-1]){
l[i][i+k-1]=l[i][j];
f[i][i+k-1]=f[i][j];
ldp[i][i+k-1]=ldp[i][j];
rdp[i][i+k-1]=rdp[i][j];
}
}
}
}
}
for(int i=1;i<=n;i++)dp[i][i]=1;
for(int k=2;k<=n;k++){
for(int i=1;i<=n-k+1;i++){
dp[i][i+k-1]=k;
for(int j=i;j<i+k-1;j++)dp[i][i+k-1]=min(dp[i][i+k-1],dp[i][j]+dp[j+1][i+k-1]);
dp[i][i+k-1]=min(dp[i][i+k-1],dp[ldp[i][i+k-1]][rdp[i][i+k-1]]+2+logg(k/l[i][i+k-1]));
}
}
printf("%lld",dp[1][n]);
return 0;
}