#include using namespace std; typedef long long ll; typedef string str; vector z_algo(string s) { ll n = s.size(); vector z(n, 0); ll l = 0, r = 0; for (ll i = 1; i < n; i++) { if (i <= r) z[i] = min(r - i + 1, z[i - l]); while (i + z[i] < n && s[z[i]] == s[i + z[i]]) z[i]++; if (i + z[i] - 1 > r) { l = i; r = i + z[i] - 1; } } return z; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); str s; cin >> s; ll n = s.size(); vector z = z_algo(s); vector dp(n + 1, 1e18); dp[0] = 0; for (ll i = 0; i < n; i++) { dp[i + 1] = min(dp[i + 1], dp[i] + 1); ll len = i + 1; if (len < n && z[len] >= len) { ll k = 1; while (len * (k + 1) <= n && z[len * k] >= len) { dp[len * (k + 1)] = min(dp[len * (k + 1)], dp[len] + 1 + k); k++; } } } cout << dp[n] << "\n"; return 0; }