#include <bits/stdc++.h>
using namespace std;
const int N = 8000 + 5;
char slowo[N];
int dp[N];
int ciach[N][N];
vector<int> gdzie[N];
int pre_suf[N];
void pre_suff(int beg, int n) {
  int k = beg + 1;
  int d = 0;
  pre_suf[beg] = 0;
  while (slowo[k] != '$') {
    while (d && slowo[beg + d] != slowo[k]) d = pre_suf[beg + d - 1];
    if (slowo[beg + d] == slowo[k]) d++;
    pre_suf[k] = d;
    k++;
  }
  for (int i = beg; slowo[i] != '$'; i++) {
  }
}
int cyf(int x) {
  if (x < 10) return 1;
  if (x < 100) return 2;
  if (x < 1000) return 3;
  return 4;
}
void licz(int end) {
  dp[end] = ciach[1][end];
  for (int i = 1; i < end; i++) {
    dp[end] = min(dp[end], dp[i] + ciach[i + 1][end]);
  }
}
int main() {
  slowo[0] = '#';
  scanf("%s", slowo + 1);
  int n = strlen(slowo + 1);
  slowo[n + 1] = '$';
  for (int i = 1; i <= n; i++) {
    pre_suff(i, n);
    for (int j = i; j <= n; j++) {
      if (pre_suf[j] >= (j - i + 2) / 2) {
        int d = pre_suf[j];
        while (d >= (j - i + 2) / 2 && (j - i + 1) % (j - i + 1 - d) != 0) {
          d = pre_suf[i + d - 1];
        }
        if ((j - i + 1) % (j - i + 1 - d) == 0) {
          ciach[i][j] = (j - i + 1 - d) + cyf((j - i + 1) / (j - i + 1 - d));
        } else
          ciach[i][j] = (j - i + 2);
      } else
        ciach[i][j] = (j - i + 2);
    }
  }
  for (int i = 1; i <= n; i++) {
    licz(i);
  }
  printf("%d\n", dp[n]);
}
