#include <bits/stdc++.h>
using namespace std;
const int M = 8005;
int n;
char str[M];
int xei[M];
void Get_xei(int *x, char *s, int m) {
  for (int i = 1; i <= m; i++) x[i] = 0;
  for (int i = 2, pos = 1; i <= m;) {
    while (i + pos - 1 <= m && s[i + pos - 1] == s[pos])
      x[i + pos - 1] = pos, pos++;
    pos--;
    if (pos == 0)
      i++, pos++;
    else
      i += pos - x[pos], pos = x[pos] + 1;
  }
}
int Getw(int x) {
  if (x < 10) return 1;
  if (x < 100) return 2;
  if (x < 1000) return 3;
  if (x < 10000) return 4;
}
int dp[M];
void Dp(int pos) {
  dp[pos] = 2e9;
  int *x = xei + pos - 1, m = n - pos + 1;
  char *s = str + pos - 1;
  Get_xei(x, s, m);
  for (int i = 1; i <= m; i++) {
    if (i % (i - x[i]))
      dp[pos] = min(dp[pos], dp[pos + i] + i + 1);
    else
      dp[pos] = min(dp[pos], dp[pos + i] + (i - x[i]) + Getw(i / (i - x[i])));
  }
}
int main() {
  scanf("%s", str + 1);
  n = strlen(str + 1);
  for (int i = n; i >= 1; i--) Dp(i);
  printf("%d\n", dp[1]);
  return 0;
}
