func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 2e5 + 100;   string s;   int f(int id) {     string t;     for (int j = id; j < s.size(); j++) {       t.push_back(s[j]);     }     t.push_back( # );     for (int j = 0; j < id; j++) {       t.push_back(s[j]);     }     int mx = 0;     vector<int> z(t.size() + 1);     for (int i = 1, l = 0, r = 0; i < t.size(); i++) {       if (i <= r) {         z[i] = min(r - i + 1, z[i - l]);       }       while (i + z[i] < t.size() && t[z[i]] == t[i + z[i]]) {         z[i]++;       }       if (i + z[i] - 1 > r) {         l = i, r = i + z[i] - 1;       }     }     for (int i = t.find( # ) + 1; i < t.size(); i++) {       mx = max(mx, z[i]);     }     return mx;   }   int main() {     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);     int n, a, b;     cin >> n >> a >> b >> s;     vector<int> maxLen(n);     for (int i = 1; i < n; i++) {       maxLen[i] = f(i);     }     vector<int> dp(n);     dp[0] = a;     for (int i = 1; i < n; i++) {       dp[i] = dp[i - 1] + a;       int min = 1e9;       for (int j = 1; j <= i; j++) {         int len = maxLen[j];         if (i <= j + len - 1 && dp[i] > dp[j - 1] + b) {           dp[i] = dp[j - 1] + b;         }       }     }     cout << dp.back();     return 0;   }   