/* I hope JLQ can bless me to AC the problem. */ #include<bits/stdc++.h>
usingnamespace std;
constint N = 105;
int n, f[N][N]; string s;
intJLQ(int x){ int cnt = 0; while (x) ++cnt, x /= 10; return cnt; }
boolcheck(int l, int r, int k){ if ((r - l + 1) % k != 0) returnfalse; int c = (r - l + 1) / k; for (int i = 0; i < k; ++i) { int t = l + i; for (int j = 0; j < c; ++j) if (s[t + k * j] != s[t]) returnfalse; } returntrue; }
intmain(){ cin >> s; n = s.size(); s = " " + s; memset(f, 0x3f, sizeof(f)); for (int i = 1; i <= n; ++i) f[i][i] = 1; for (int len = 2; len <= n; ++len) { for (int i = 1; i + len - 1 <= n; ++i) { int j = i + len - 1; f[i][j] = len; for (int k = i; k < j; ++k) f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j]); for (int k = 1; i + k - 1 <= j; ++k) if (check(i, j, k)) f[i][j] = min(f[i][j], JLQ((j - i + 1) / k) + 2 + f[i][i + k - 1]); } } // cerr << "***" << f[6][11] << endl; printf("%d\n", f[1][n]); return0; }