#include <bits/stdc++.h>
using namespace std;
char str1[8005], str2[8005];
int nxt[8005], dp[8005], val[8005][8005];
int getnum(int x) {
  int cnt = 0;
  while (x) {
    cnt++;
    x /= 10;
  }
  return cnt;
}
void getNext(char *x, int m, int *next) {
  int i, j;
  j = next[0] = -1;
  i = 0;
  while (i < m) {
    while (j != -1 && x[i] != x[j]) j = next[j];
    next[++i] = ++j;
  }
}
void init(int len) {
  for (int i = 0; i < len; i++) {
    int tt = 0;
    for (int j = i; j < len; j++) str2[tt++] = str1[j];
    str2[tt] = '\0';
    getNext(str2, tt, nxt);
    val[i + 1][i + 1] = 2;
    for (int j = 2; j <= tt; j++) {
      int tmp = j - nxt[j];
      if ((j % tmp) == 0 && j != tmp)
        val[i + 1][j + i] = getnum(j / tmp) + tmp;
      else
        val[i + 1][j + i] = j + 1;
    }
  }
}
void solve(int len) {
  dp[0] = 0;
  for (int i = 1; i <= len; i++) {
    dp[i] = i + 2;
    for (int j = 0; j < i; j++) dp[i] = min(dp[i], dp[j] + val[j + 1][i]);
  }
  printf("%d\n", dp[len]);
}
int main() {
  scanf("%s", str1);
  int len = strlen(str1);
  init(len);
  solve(len);
  return 0;
}
