#include <bits/stdc++.h>
using namespace std;
template <class T>
bool tomin(T &x, T y) {
  return x > y ? x = y, 1 : 0;
}
template <class T>
bool tomax(T &x, T y) {
  return x < y ? x = y, 1 : 0;
}
template <class T>
void read(T &x) {
  char c;
  x = 0;
  int f = 1;
  while (c = getchar(), c < '0' || c > '9')
    if (c == '-') f = -1;
  do x = (x << 3) + (x << 1) + (c ^ 48);
  while (c = getchar(), c >= '0' && c <= '9');
  x *= f;
}
const double Pi = acos(-1);
const int maxn = 8005;
int n, m;
int num[maxn];
char A[maxn];
int f[maxn];
int dp[maxn];
void Get_fail(char *A, int n, int *f) {
  int j = 0;
  f[1] = 0;
  for (int i = 2, i_ = n; i <= i_; i++) {
    while (j && A[j + 1] != A[i]) j = f[j];
    if (A[j + 1] == A[i]) j++;
    f[i] = j;
  }
}
int main() {
  scanf("%s", A + 1), n = strlen(A + 1);
  for (int i = 1, i_ = n; i <= i_; i++) num[i] = num[i / 10] + 1;
  memset(dp, 67, sizeof(dp));
  dp[0] = 0;
  for (int i = 0, i_ = n - 1; i <= i_; i++) {
    Get_fail(A + i, n - i, f + i);
    for (int j = i + 1, j_ = n; j <= j_; j++) {
      int len = (!f[j] || (j - i) % (j - f[j] - i) == 0) ? j - f[j] - i : j - i;
      tomin(dp[j], dp[i] + num[(j - i) / len] + len);
    }
  }
  printf("%d", dp[n]);
  return 0;
}
