func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 10200;   const int mod = 1e9 + 7;   int dp[N];   int len[N];   inline int get_len(int x) {     if (x == 0) return 1;     int res = 0;     while (x) res++, x /= 10;     return res;   }   vector<int> del[N];   vector<int> calc_prefix(string s) {     int n = (int)s.length();     vector<int> pi(n);     for (int i = 1; i < n; ++i) {       int j = pi[i - 1];       while (j > 0 && s[i] != s[j]) j = pi[j - 1];       if (s[i] == s[j]) ++j;       pi[i] = j;     }     return pi;   }   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     string s;     cin >> s;     int n = s.length();     for (int i = 0; i <= n; ++i) len[i] = get_len(i);     for (int i = 1; i <= n; ++i)       for (int j = i; j <= n; j += i) del[j].push_back(i);     for (int i = 1; i <= n; ++i) dp[i] = 1e9;     dp[0] = 0;     string t;     vector<int> p;     for (int i = 1; i <= n; ++i) {       int cur_len = 0, times;       int period;       t =   ;       for (int j = i; j <= n; ++j) t += s[j - 1];       p = calc_prefix(t);       for (int j = i; j <= n; ++j) {         cur_len++;         dp[j] = min(dp[j], dp[i - 1] + cur_len + 1);         period = cur_len - p[j - i];         if (cur_len % period != 0) continue;         dp[j] = min(dp[j], dp[i - 1] + len[cur_len / period] + period);       }     }     cout << dp[n];     return 0;   }   