#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
long long c1, c2;
string s;
cin >> c1 >> c2 >> s;
int n = s.size();
// Problem: Split string into pieces to minimize cost
// Cost = (adjacent equal pairs) * c1 + (number of splits) * c2
// pre[i] = number of adjacent equal pairs in s[0..i-1]
// Example: "aabbc" -> pre = [0, 0, 1, 1, 2, 2]
vector<int> pre(n + 1, 0);
for (int i = 0; i < n - 1; i++) {
pre[i + 1] = pre[i];
if (s[i] == s[i + 1]) {
pre[i + 1]++;
}
}
pre[n] = pre[n - 1];
// dp[i] = min cost to optimally split s[0..i-1]
const long long INF = 1e18;
vector<long long> dp(n + 1, INF);
dp[0] = 0; // empty string has cost 0
// For each position i, try all possible ways to form the last piece
for (int i = 1; i <= n; i++) {
// Try making last piece from s[j..i-1]
for (int j = 0; j < i; j++) {
// Count adjacent equal pairs in range [j, i)
int cnt = pre[i] - pre[j];
// Cost of pairs in this piece
long long cost = (long long)cnt * c1;
// Add split cost (c2) if this isn't the first piece
if (j > 0) cost += c2;
// Update minimum cost to reach position i
dp[i] = min(dp[i], dp[j] + cost);
}
}
cout << dp[n] << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICAKICAgIGxvbmcgbG9uZyBjMSwgYzI7CiAgICBzdHJpbmcgczsKICAgIGNpbiA+PiBjMSA+PiBjMiA+PiBzOwogICAgCiAgICBpbnQgbiA9IHMuc2l6ZSgpOwogICAgCiAgICAvLyBQcm9ibGVtOiBTcGxpdCBzdHJpbmcgaW50byBwaWVjZXMgdG8gbWluaW1pemUgY29zdAogICAgLy8gQ29zdCA9IChhZGphY2VudCBlcXVhbCBwYWlycykgKiBjMSArIChudW1iZXIgb2Ygc3BsaXRzKSAqIGMyCiAgICAKICAgIC8vIHByZVtpXSA9IG51bWJlciBvZiBhZGphY2VudCBlcXVhbCBwYWlycyBpbiBzWzAuLmktMV0KICAgIC8vIEV4YW1wbGU6ICJhYWJiYyIgLT4gcHJlID0gWzAsIDAsIDEsIDEsIDIsIDJdCiAgICB2ZWN0b3I8aW50PiBwcmUobiArIDEsIDApOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CiAgICAgICAgcHJlW2kgKyAxXSA9IHByZVtpXTsKICAgICAgICBpZiAoc1tpXSA9PSBzW2kgKyAxXSkgewogICAgICAgICAgICBwcmVbaSArIDFdKys7CiAgICAgICAgfQogICAgfQogICAgcHJlW25dID0gcHJlW24gLSAxXTsKICAgIAogICAgLy8gZHBbaV0gPSBtaW4gY29zdCB0byBvcHRpbWFsbHkgc3BsaXQgc1swLi5pLTFdCiAgICBjb25zdCBsb25nIGxvbmcgSU5GID0gMWUxODsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IGRwKG4gKyAxLCBJTkYpOwogICAgZHBbMF0gPSAwOyAgLy8gZW1wdHkgc3RyaW5nIGhhcyBjb3N0IDAKICAgIAogICAgLy8gRm9yIGVhY2ggcG9zaXRpb24gaSwgdHJ5IGFsbCBwb3NzaWJsZSB3YXlzIHRvIGZvcm0gdGhlIGxhc3QgcGllY2UKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIC8vIFRyeSBtYWtpbmcgbGFzdCBwaWVjZSBmcm9tIHNbai4uaS0xXQogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgaisrKSB7CiAgICAgICAgICAgIC8vIENvdW50IGFkamFjZW50IGVxdWFsIHBhaXJzIGluIHJhbmdlIFtqLCBpKQogICAgICAgICAgICBpbnQgY250ID0gcHJlW2ldIC0gcHJlW2pdOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ29zdCBvZiBwYWlycyBpbiB0aGlzIHBpZWNlCiAgICAgICAgICAgIGxvbmcgbG9uZyBjb3N0ID0gKGxvbmcgbG9uZyljbnQgKiBjMTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEFkZCBzcGxpdCBjb3N0IChjMikgaWYgdGhpcyBpc24ndCB0aGUgZmlyc3QgcGllY2UKICAgICAgICAgICAgaWYgKGogPiAwKSBjb3N0ICs9IGMyOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVXBkYXRlIG1pbmltdW0gY29zdCB0byByZWFjaCBwb3NpdGlvbiBpCiAgICAgICAgICAgIGRwW2ldID0gbWluKGRwW2ldLCBkcFtqXSArIGNvc3QpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgY291dCA8PCBkcFtuXSA8PCAiXG4iOwogICAgCiAgICByZXR1cm4gMDsKfQ==