#include <bits/stdc++.h>
using namespace std;
vector<vector<long long> > pr;
void pre_func(string& s, long long p) {
  long long n = s.size();
  for (long long i = p + 1; i < n; i++) {
    long long j = pr[p][i - 1];
    while (j > 0 && s[j + p] != s[i]) j = pr[p][j - 1 + p];
    if (s[i] == s[j + p]) j++;
    pr[p][i] = j;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  string s;
  cin >> s;
  long long n = s.size();
  pr.resize(n, vector<long long>(n, 0));
  for (long long i = 0; i < n; i++) pre_func(s, i);
  vector<long long> dp(n, LLONG_MAX);
  vector<long long> dig(10, 1);
  for (long long i = 1; i < 10; i++) dig[i] = dig[i - 1] * 10;
  dp[0] = 2;
  long long l, x;
  for (long long i = 1; i < n; i++) {
    l = (i + 1) / (i + 1 - pr[0][i]);
    l = upper_bound(dig.begin(), dig.end(), l) - dig.begin();
    dp[i] = l + i + 1 - pr[0][i];
    if ((i + 1) % (i + 1 - pr[0][i])) dp[i] += 1 + (i + 1) % (i + 1 - pr[0][i]);
    dp[i] = min(dp[i], 1 + i + 1);
    for (long long j = 1; j < i + 1; j++) {
      l = (i + 1 - j) / (i + 1 - j - pr[j][i]);
      l = upper_bound(dig.begin(), dig.end(), l) - dig.begin();
      x = l + i + 1 - j - pr[j][i];
      if ((i + 1 - j) % (i + 1 - j - pr[j][i]))
        x += 1 + (i + 1 - j) % (i + 1 - j - pr[j][i]);
      dp[i] = min(dp[i], min(x, 1 + i + 1 - j) + dp[j - 1]);
    }
  }
  cout << dp[n - 1] << "\n";
}
