#include <bits/stdc++.h>
using namespace std;
int const MAXN = 8048;
int const INF = 28000;
char st[MAXN], new_st[MAXN];
short int len, p[MAXN], cnt_dig[MAXN], mas[MAXN][MAXN], d[MAXN], from[MAXN],
    mas_total[MAXN][MAXN];
struct {
  int bg, end;
} ans[MAXN];
char buff[MAXN];
void calc_pf(char *st, int len, short int *p) {
  int t = 0;
  p[0] = 0;
  for (int i = 1; st[i]; i++) {
    while (st[i] != st[t] && t > 0) t = p[t - 1];
    t += st[t] == st[i];
    p[i] = t;
  }
}
int func(int x) {
  if (x == 0) return 1;
  int ans = 0;
  while (x) {
    ans++;
    x /= 10;
  }
  return ans;
}
int main() {
  gets(st);
  for (int i = 0; i < MAXN; i++) cnt_dig[i] = func(i);
  for (int i = 0; st[i]; i++) {
    len = 0;
    for (int j = i; st[j]; j++) new_st[len++] = st[j];
    calc_pf(new_st, len, p);
    for (int j = 0; j < len; j++)
      if (p[j] > 0 && (j + 1) % (j + 1 - p[j]) == 0)
        mas[i][i + j] = j + 1 - p[j];
  }
  for (int i = 0; st[i]; i++) mas[i][i] = 1;
  for (int i = 0; st[i]; i++)
    for (int j = i; st[j]; j++)
      if (mas[i][j] > 0)
        mas_total[i][j] = mas[i][j] + cnt_dig[(j - i + 1) / mas[i][j]];
      else
        mas_total[i][j] = (j - i + 1) + 1;
  d[0] = 2;
  from[0] = -1;
  for (int i = 1; st[i]; i++) {
    d[i] = INF;
    from[i] = -1;
    for (int j = i; j >= 0; j--) {
      int cur_best = 0;
      if (j > 0) cur_best = d[j - 1];
      cur_best += mas_total[j][i];
      if (cur_best < d[i]) {
        d[i] = cur_best;
        from[i] = j - 1;
      }
    }
  }
  int n = (int)strlen(st);
  int ii = n - 1;
  int ans_len = 0;
  while (ii >= 0) {
    int new_i = from[ii];
    ans[ans_len].bg = new_i + 1;
    ans[ans_len].end = ii;
    ans_len++;
    ii = new_i;
  }
  int ans22 = 0;
  for (int i = ans_len - 1; i >= 0; i--) {
    int current_len;
    if (mas[ans[i].bg][ans[i].end] == 0)
      current_len = ans[i].end - ans[i].bg + 1;
    else
      current_len = mas[ans[i].bg][ans[i].end];
    for (int j = ans[i].bg; j <= ans[i].bg + current_len - 1; j++) {
      sprintf(buff, "%c", st[j]);
      ans22 += (int)strlen(buff);
    }
    if (mas[ans[i].bg][ans[i].end] == 0) {
      sprintf(buff, "1");
      ans22 += (int)strlen(buff);
    } else {
      sprintf(buff, "%d",
              (ans[i].end - ans[i].bg + 1) / mas[ans[i].bg][ans[i].end]);
      ans22 += (int)strlen(buff);
    }
  }
  printf("%d", ans22);
  return 0;
}
