#include <bits/stdc++.h>
using namespace std;
inline void getInt(int* p);
const int maxn = 8080;
char T[maxn];
int nextarr[maxn];
void getNext() {
  int tlen = strlen(T);
  int j, k;
  j = 0;
  k = -1;
  nextarr[0] = -1;
  while (j < tlen) {
    if (k == -1 || T[j] == T[k]) {
      nextarr[++j] = ++k;
    } else
      k = nextarr[k];
  }
}
int getl(int x) {
  int cnt = 0;
  while (x) {
    x /= 10;
    cnt++;
  }
  return cnt;
}
char S[maxn];
int dp[maxn];
int has[maxn][maxn];
int main() {
  scanf("%s", S);
  int L = strlen(S);
  for (int i = 0; i <= L - 1; i++) {
    has[i][i] = 2;
    int l = 0;
    for (int j = i; j < L; j++) {
      T[l++] = S[j];
    }
    T[l] = 0;
    getNext();
    l = 0;
    for (int j = i + 1; j < L; j++) {
      l++;
      int k = j - i + 1;
      int p = k - nextarr[l + 1];
      if (k % p == 0)
        has[i][j] = getl(k / p) + p;
      else
        has[i][j] = j - i + 2;
    }
  }
  dp[0] = 0;
  for (int i = 1; i <= L; i++) {
    dp[i] = i + 1;
    for (int j = 0; j <= i - 1; j++) {
      dp[i] = min(dp[i], dp[j] + has[j][i - 1]);
    }
  }
  printf("%d\n", dp[L]);
  return 0;
}
inline void getInt(int* p) {
  char ch;
  do {
    ch = getchar();
  } while (ch == ' ' || ch == '\n');
  if (ch == '-') {
    *p = -(getchar() - '0');
    while ((ch = getchar()) >= '0' && ch <= '9') {
      *p = *p * 10 - ch + '0';
    }
  } else {
    *p = ch - '0';
    while ((ch = getchar()) >= '0' && ch <= '9') {
      *p = *p * 10 + ch - '0';
    }
  }
}
