#include <bits/stdc++.h>
#define kiki INT_MAX
#define tourist long long
#define pb push_back
using namespace std;
const int maxn = 500008;
double dp[maxn];
//dp[0] = 0.5;
//how to solve
//duyet dp
//tim len lowns nhat co the copy
//doi chieu voi cai string hien tai
//dp[i+1] = dp[i] + 0,5
//dp[i+len] = dp[i]+1,5
//dp[i] la gia tri to nhat
void nirvana()
{
freopen("test.inp", "r", stdin);
freopen("test.out", "w", stdout);
}
void solve()
{
string s;
cin>>s;
int n = s.size();
s = " " + s;
//int n = s.size() -1;
// string max_len = "";
//string l = "";
//bool ok = false;
dp[0] = 0;
for(int i =1; i<=n; i++)
{
dp[i] =maxn;
}
//for(int c: dp) cout<<c<<" "<<endl;
for(int i = 0 ;i<n ; i++)
{
dp[i+1] = min(dp[i+1], dp[i]+0.5);
int x =1;
int y = i +1;
while(x<=i && y<=n)
{
if(s[x ] == s[y])
{
x++;
y++;
}else break;
}
dp[i+x - 1] = min(dp[i+x -1], dp[i]+1.5);
}
//cout<<dp[0]<<endl;
//cout<<dp[1]<<endl;
cout<<fixed<<setprecision(1)<<dp[n]<<endl;
//qhd:
}
int main()
{
nirvana();
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//testcase();
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUga2lraSBJTlRfTUFYCiNkZWZpbmUgdG91cmlzdCBsb25nIGxvbmcKI2RlZmluZSBwYiBwdXNoX2JhY2sKCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgbWF4biA9IDUwMDAwODsKZG91YmxlIGRwW21heG5dOwovL2RwWzBdID0gMC41OwoKCi8vaG93IHRvIHNvbHZlCi8vZHV5ZXQgZHAKLy90aW0gbGVuIGxvd25zIG5oYXQgY28gdGhlIGNvcHkKLy9kb2kgY2hpZXUgdm9pIGNhaSBzdHJpbmcgaGllbiB0YWkKLy9kcFtpKzFdID0gZHBbaV0gKyAwLDUKLy9kcFtpK2xlbl0gPSBkcFtpXSsxLDUKLy9kcFtpXSBsYSBnaWEgdHJpIHRvIG5oYXQKCgp2b2lkIG5pcnZhbmEoKQp7CiAgICBmcmVvcGVuKCJ0ZXN0LmlucCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3BlbigidGVzdC5vdXQiLCAidyIsIHN0ZG91dCk7Cn0KCnZvaWQgc29sdmUoKQp7CiAgICBzdHJpbmcgczsKICAgIGNpbj4+czsKICAgIGludCBuID0gcy5zaXplKCk7CiAgICBzID0gIiAiICsgczsKICAgIC8vaW50IG4gPSBzLnNpemUoKSAtMTsKICAgLy8gc3RyaW5nIG1heF9sZW4gPSAiIjsKICAgIC8vc3RyaW5nIGwgPSAiIjsKICAgIC8vYm9vbCBvayAgPSBmYWxzZTsKCiAgICBkcFswXSA9IDA7CiAgICBmb3IoaW50IGkgPTE7IGk8PW47IGkrKykKICAgIHsKICAgICAgICBkcFtpXSA9bWF4bjsKICAgIH0KICAgIC8vZm9yKGludCBjOiBkcCkgY291dDw8Yzw8IiAiPDxlbmRsOwogICAgZm9yKGludCBpID0gIDAgO2k8biA7IGkrKykKICAgIHsKCiAgICAgICAgZHBbaSsxXSA9IG1pbihkcFtpKzFdLCBkcFtpXSswLjUpOwogICAgICAgIGludCB4ID0xOwogICAgICAgIGludCB5ID0gaSArMTsKCiAgICAgICAgd2hpbGUoeDw9aSAmJiB5PD1uKQogICAgICAgIHsKICAgICAgICAgICAgaWYoc1t4IF0gPT0gc1t5XSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgeCsrOwogICAgICAgICAgICAgICAgeSsrOwogICAgICAgICAgICB9ZWxzZSBicmVhazsKICAgICAgICB9CgogICAgICAgIGRwW2kreCAtIDFdID0gbWluKGRwW2kreCAtMV0sIGRwW2ldKzEuNSk7CiAgICB9CiAgICAvL2NvdXQ8PGRwWzBdPDxlbmRsOwogICAgLy9jb3V0PDxkcFsxXTw8ZW5kbDsKICAgIGNvdXQ8PGZpeGVkPDxzZXRwcmVjaXNpb24oMSk8PGRwW25dPDxlbmRsOwoKICAgIC8vcWhkOgp9CgppbnQgbWFpbigpCnsKICAgIG5pcnZhbmEoKTsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CgogICAgLy90ZXN0Y2FzZSgpOwogICAgc29sdmUoKTsKICAgIHJldHVybiAwOwp9Cg==