#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]
// Prefix sum of pairs (s[0],s[1]), (s[1],s[2]), ..., (s[i-2],s[i-1])
vector<int> pre(n + 1, 0);
for (int i = 1; i < n; i++) {
pre[i + 1] = pre[i];
if (s[i - 1] == s[i]) {
pre[i + 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 substring s[j..i-1]
// Pairs are: (s[j],s[j+1]), (s[j+1],s[j+2]), ..., (s[i-2],s[i-1])
// These correspond to indices j+1, j+2, ..., i-1 in the prefix array
int cnt = pre[i] - pre[j + 1];
// 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+PiBzOwogICAgCiAgICBpbnQgbiA9IHMuc2l6ZSgpOwogICAgCiAgICAvLyBQcm9ibGVtOiBTcGxpdCBzdHJpbmcgaW50byBwaWVjZXMgdG8gbWluaW1pemUgY29zdAogICAgLy8gQ29zdCA9IChhZGphY2VudCBlcXVhbCBwYWlycykgKiBjMSArIChudW1iZXIgb2Ygc3BsaXRzKSAqIGMyCiAgICAKICAgIC8vIHByZVtpXSA9IG51bWJlciBvZiBhZGphY2VudCBlcXVhbCBwYWlycyBpbiBzWzAuLmktMV0KICAgIC8vIFByZWZpeCBzdW0gb2YgcGFpcnMgKHNbMF0sc1sxXSksIChzWzFdLHNbMl0pLCAuLi4sIChzW2ktMl0sc1tpLTFdKQogICAgdmVjdG9yPGludD4gcHJlKG4gKyAxLCAwKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgcHJlW2kgKyAxXSA9IHByZVtpXTsKICAgICAgICBpZiAoc1tpIC0gMV0gPT0gc1tpXSkgewogICAgICAgICAgICBwcmVbaSArIDFdKys7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBkcFtpXSA9IG1pbiBjb3N0IHRvIG9wdGltYWxseSBzcGxpdCBzWzAuLmktMV0KICAgIGNvbnN0IGxvbmcgbG9uZyBJTkYgPSAxZTE4OwogICAgdmVjdG9yPGxvbmcgbG9uZz4gZHAobiArIDEsIElORik7CiAgICBkcFswXSA9IDA7ICAvLyBlbXB0eSBzdHJpbmcgaGFzIGNvc3QgMAogICAgCiAgICAvLyBGb3IgZWFjaCBwb3NpdGlvbiBpLCB0cnkgYWxsIHBvc3NpYmxlIHdheXMgdG8gZm9ybSB0aGUgbGFzdCBwaWVjZQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgLy8gVHJ5IG1ha2luZyBsYXN0IHBpZWNlIGZyb20gc1tqLi5pLTFdCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspIHsKICAgICAgICAgICAgLy8gQ291bnQgYWRqYWNlbnQgZXF1YWwgcGFpcnMgaW4gc3Vic3RyaW5nIHNbai4uaS0xXQogICAgICAgICAgICAvLyBQYWlycyBhcmU6IChzW2pdLHNbaisxXSksIChzW2orMV0sc1tqKzJdKSwgLi4uLCAoc1tpLTJdLHNbaS0xXSkKICAgICAgICAgICAgLy8gVGhlc2UgY29ycmVzcG9uZCB0byBpbmRpY2VzIGorMSwgaisyLCAuLi4sIGktMSBpbiB0aGUgcHJlZml4IGFycmF5CiAgICAgICAgICAgIGludCBjbnQgPSBwcmVbaV0gLSBwcmVbaiArIDFdOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ29zdCBvZiBwYWlycyBpbiB0aGlzIHBpZWNlCiAgICAgICAgICAgIGxvbmcgbG9uZyBjb3N0ID0gKGxvbmcgbG9uZyljbnQgKiBjMTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIEFkZCBzcGxpdCBjb3N0IChjMikgaWYgdGhpcyBpc24ndCB0aGUgZmlyc3QgcGllY2UKICAgICAgICAgICAgaWYgKGogPiAwKSBjb3N0ICs9IGMyOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVXBkYXRlIG1pbmltdW0gY29zdCB0byByZWFjaCBwb3NpdGlvbiBpCiAgICAgICAgICAgIGRwW2ldID0gbWluKGRwW2ldLCBkcFtqXSArIGNvc3QpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgY291dCA8PCBkcFtuXSA8PCAiXG4iOwogICAgCiAgICByZXR1cm4gMDsKfQ==