#include <bits/stdc++.h>
using namespace std;
#define nmax 20
#define inf 1e9
int N, M;
string S;
vector<char> letters;
unordered_map<char, int> freq;
int dist[nmax][nmax], dp[1 << nmax][nmax];
int solve()
{
int fullMask = (1 << M) - 1;
for (int mask = 0; mask < (1 << M); mask++)
fill(dp[mask], dp[mask] + M, inf);
for (int i = 0; i < M; i++)
dp[1 << i][i] = 0;
for (int mask = 1; mask < (1 << M); mask++)
{
for (int last = 0; last < M; last++)
{
if (!(mask & (1 << last)))
continue;
for (int next = 0; next < M; next++)
{
if (mask & (1 << next))
continue;
int newMask = mask | (1 << next);
dp[newMask][next] = min(dp[newMask][next], dp[mask][last] + dist[last][next]);
}
}
}
int res = inf;
for (int i = 0; i < M; i++)
res = min(res, dp[fullMask][i]);
return res;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
freopen("sapphim.inp", "r", stdin);
freopen("sapphim.out", "w", stdout);
cin >> N >> M >> S;
for (char c : S)
freq[c]++;
for (auto p : freq)
letters.push_back(p.first);
M = letters.size();
if (M == 1)
{
cout << 0 << "\n";
return 0;
}
sort(letters.begin(), letters.end());
int ans = inf;
do
{
unordered_map<char, int> pos;
for (int i = 0; i < M; i++)
pos[letters[i]] = i;
memset(dist, 0, sizeof dist);
for (int i = 0; i < M; i++)
for (int j = 0; j < M; j++)
dist[i][j] = abs(i - j);
int cost = 0;
for (int i = 0; i < N - 1; i++)
cost += dist[pos[S[i]]][pos[S[i + 1]]];
ans = min(ans, cost);
} while (next_permutation(letters.begin(), letters.end()));
cout << ans << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbm1heCAyMAojZGVmaW5lIGluZiAxZTkKCmludCBOLCBNOwpzdHJpbmcgUzsKdmVjdG9yPGNoYXI+IGxldHRlcnM7CnVub3JkZXJlZF9tYXA8Y2hhciwgaW50PiBmcmVxOwppbnQgZGlzdFtubWF4XVtubWF4XSwgZHBbMSA8PCBubWF4XVtubWF4XTsKCmludCBzb2x2ZSgpCnsKICAgIGludCBmdWxsTWFzayA9ICgxIDw8IE0pIC0gMTsKICAgIGZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgKDEgPDwgTSk7IG1hc2srKykKICAgICAgICBmaWxsKGRwW21hc2tdLCBkcFttYXNrXSArIE0sIGluZik7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNOyBpKyspCiAgICAgICAgZHBbMSA8PCBpXVtpXSA9IDA7CgogICAgZm9yIChpbnQgbWFzayA9IDE7IG1hc2sgPCAoMSA8PCBNKTsgbWFzaysrKQogICAgewogICAgICAgIGZvciAoaW50IGxhc3QgPSAwOyBsYXN0IDwgTTsgbGFzdCsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCEobWFzayAmICgxIDw8IGxhc3QpKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBmb3IgKGludCBuZXh0ID0gMDsgbmV4dCA8IE07IG5leHQrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKG1hc2sgJiAoMSA8PCBuZXh0KSkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIGludCBuZXdNYXNrID0gbWFzayB8ICgxIDw8IG5leHQpOwogICAgICAgICAgICAgICAgZHBbbmV3TWFza11bbmV4dF0gPSBtaW4oZHBbbmV3TWFza11bbmV4dF0sIGRwW21hc2tdW2xhc3RdICsgZGlzdFtsYXN0XVtuZXh0XSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaW50IHJlcyA9IGluZjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTTsgaSsrKQogICAgICAgIHJlcyA9IG1pbihyZXMsIGRwW2Z1bGxNYXNrXVtpXSk7CiAgICByZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpCnsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGZyZW9wZW4oInNhcHBoaW0uaW5wIiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJzYXBwaGltLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIGNpbiA+PiBOID4+IE0gPj4gUzsKCiAgICBmb3IgKGNoYXIgYyA6IFMpCiAgICAgICAgZnJlcVtjXSsrOwogICAgZm9yIChhdXRvIHAgOiBmcmVxKQogICAgICAgIGxldHRlcnMucHVzaF9iYWNrKHAuZmlyc3QpOwoKICAgIE0gPSBsZXR0ZXJzLnNpemUoKTsKICAgIGlmIChNID09IDEpCiAgICB7CiAgICAgICAgY291dCA8PCAwIDw8ICJcbiI7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgc29ydChsZXR0ZXJzLmJlZ2luKCksIGxldHRlcnMuZW5kKCkpOwogICAgaW50IGFucyA9IGluZjsKCiAgICBkbwogICAgewogICAgICAgIHVub3JkZXJlZF9tYXA8Y2hhciwgaW50PiBwb3M7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNOyBpKyspCiAgICAgICAgICAgIHBvc1tsZXR0ZXJzW2ldXSA9IGk7CgogICAgICAgIG1lbXNldChkaXN0LCAwLCBzaXplb2YgZGlzdCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNOyBpKyspCiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgTTsgaisrKQogICAgICAgICAgICAgICAgZGlzdFtpXVtqXSA9IGFicyhpIC0gaik7CgogICAgICAgIGludCBjb3N0ID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE4gLSAxOyBpKyspCiAgICAgICAgICAgIGNvc3QgKz0gZGlzdFtwb3NbU1tpXV1dW3Bvc1tTW2kgKyAxXV1dOwoKICAgICAgICBhbnMgPSBtaW4oYW5zLCBjb3N0KTsKICAgIH0gd2hpbGUgKG5leHRfcGVybXV0YXRpb24obGV0dGVycy5iZWdpbigpLCBsZXR0ZXJzLmVuZCgpKSk7CgogICAgY291dCA8PCBhbnMgPDwgIlxuIjsKICAgIHJldHVybiAwOwp9Cg==