#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int dp[150][150];
int f(int x){
int cnt=0;
while(x){
x/=10;
cnt++;
}
return cnt;
}
bool check(int l,int r,int k){
int len=k-l+1;
// cout<<endl;
// cout<<l<<' '<<r<<endl;
// cout<<len<<endl;
for(int i=l;i<=r;i++){
// cout<<i-1<<' '<<i%len<<endl;
if(s[i-1]!=s[i%len]){
// cout<<"NO"<<endl;
return 0;
}
}
return 1;
}
int main(){
cin>>s;
n=s.size();
memset(dp,0x3f,sizeof(dp));
for(int i=1;i<=n;i++)dp[i][i]=1;
for(int len=1;len<=n;len++){
for(int l=1,r;l+len-1<=n;l++){
r=l+len-1;
// cout<<l<<' '<<r<<endl;
for(int k=l;k<r;k++){
// cout<<k<<endl;
// cout<<dp[l][r]<<' '<<dp[l][k]+dp[k+1][r]<<endl;
// cout<<endl;
dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);
if(!(len%(k-l+1))){
if(check(l,r,k)){
// cout<<l<<' '<<k<<' '<<r<<' '<<k-l+3+f(len/(k-l+1))<<endl;
dp[l][r]=min(dp[l][r],k-l+3+f(len/(k-l+1)));
}
}
}
// cout<<dp[l][r]<<endl;
// cout<<endl;
}
}
cout<<dp[1][n];
return 0;
}
//样例输入:NEERCYESYESYESNEERCYESYESYES
//我的输出:28
评测记录