#include <bits/stdc++.h>
using namespace std;
const int nax = 8e3 + 11;
int period[nax][nax];
int dp[nax];
const int INF = 1e9;
int compute(int x) {
  int ret = 0;
  while (x) x /= 10, ret += 1;
  return ret;
}
int cost(int x, int y, int failureValue) {
  int len = y - x + 1;
  failureValue = len - failureValue;
  if (len % failureValue == 0)
    return failureValue + compute(len / failureValue);
  else
    return len + 1;
}
int main() {
  string S;
  cin >> S;
  int i, j, N = S.length();
  for (i = 0; i < S.length(); ++i) {
    int k = 0;
    for (j = i + 1; j < S.length(); ++j) {
      while (k && S[i + k] != S[j]) k = period[i][i + k - 1];
      if (S[i + k] == S[j]) ++k;
      period[i][j] = k;
    }
  }
  dp[N] = 0;
  for (i = N - 1; i >= 0; --i) {
    dp[i] = INF;
    for (j = i; j < N; ++j)
      dp[i] = min(dp[i], dp[j + 1] + cost(i, j, period[i][j]));
  }
  cout << dp[0];
}
