#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e6 + 5, mod = 1e9 + 7, inf = 1e18, N = 8e3 + 5;
int n, p[N][N], dig[N], dp[N];
long long hsh[maxn], pw[maxn], B = 727;
vector<int> vec[N];
string s;
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  pw[0] = 1;
  for (int i = 1; i < maxn; i++) pw[i] = (pw[i - 1] * B) % mod;
  for (int i = 1; i < 8001; i++) {
    for (int j = i; j < 8001; j += i) vec[j].push_back(i);
  }
  for (int i = 1; i <= 9; i++) dig[i] = 1;
  for (int i = 10; i <= 99; i++) dig[i] = 2;
  for (int i = 100; i <= 999; i++) dig[i] = 3;
  for (int i = 1000; i < 8001; i++) dig[i] = 4;
  cin >> s;
  hsh[0] = (long long)s[0];
  n = s.size();
  for (int i = 1; i < n; i++)
    hsh[i] = (hsh[i - 1ll] * B + (long long)s[i]) % mod;
  for (int i = n - 1; i >= 0; i--) {
    for (int j = 1; i + j <= n; j++) {
      if (i + j + j - 1 >= n) {
        p[i][j] = i + j - 1;
        continue;
      }
      int x = hsh[i + j - 1];
      if (i) x = (x - (hsh[i - 1] * pw[j] % mod) + mod) % mod;
      long long y =
          (hsh[i + j + j - 1] - (hsh[i + j - 1] * pw[j] % mod) + mod) % mod;
      if (x == y)
        p[i][j] = p[i + j][j];
      else
        p[i][j] = i + j - 1;
    }
  }
  fill(dp, dp + n, N);
  int x;
  for (int i = n - 1; i >= 0; i--) {
    for (int j = i; j < n; j++) {
      x = j - i + 1;
      for (int k : vec[j - i + 1]) {
        if (p[i][k] >= j) dp[i] = min(dp[i], dig[x / k] + k + dp[j + 1]);
      }
    }
  }
  cout << dp[0] << endl;
}
