#include <bits/stdc++.h>
#pragma GCC optimize("-O3")
using namespace std;
void _main();
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  _main();
}
void kmp(const string &str, vector<int> &re) {
  re.resize(str.size() + 1);
  re[0] = -1;
  int j = -1;
  for (int i = 0; i < str.size(); i++) {
    while (j >= 0 && str[i] != str[j]) j = re[j];
    re[i + 1] = ++j;
  }
}
int N;
string S;
int dp[8010];
int digit[10101];
void _main() {
  cin >> S;
  N = S.length();
  for (int i = 0; i < N + 1; i++) {
    int x = i;
    digit[i] = 0;
    while (0 < x) digit[i]++, x /= 10;
  }
  for (int i = 0; i < N + 1; i++) dp[i] = INT_MAX / 2;
  dp[0] = 0;
  for (int i = 0; i < N; i++) {
    string s = S.substr(i);
    vector<int> re;
    kmp(s, re);
    int n = s.size();
    for (int j = 1; j < n + 1; j++) {
      int loop = j - re[j];
      if (j % loop) loop = j;
      int cnt = j / loop;
      dp[i + j] = min(dp[i + j], dp[i] + loop + digit[cnt]);
    }
  }
  cout << dp[N] << endl;
}
