#include #include #define NMAX 101 #define LETTERS 26 #define INF 1 << 20 using namespace std; char letters[3][11] = {"QWERTYUIOP", "ASDFGHJKL", "ZXCVBNM"}; int posX[LETTERS], posY[LETTERS], dp[NMAX][LETTERS][LETTERS]; int abs(int x) { return x < 0 ? -x : x; } int manhattan(char c1, char c2) { return abs(posX[c1 - 'A'] - posX[c2 - 'A']) + abs(posY[c1 - 'A'] - posY[c2 - 'A']); } int minn(int a, int b) { return a < b ? a : b; } int main() { //freopen("in.txt", "r", stdin); for (int it = 0; it < 3; ++it) { char *p = letters[it]; int jt = 0; while (*p) { posX[(*p) - 'A'] = it; posY[(*p) - 'A'] = jt; ++jt; ++p; } } for (int it = 0; it < NMAX; ++it) { for (int jt = 0; jt < LETTERS; ++jt) { for (int kt = 0; kt < LETTERS; ++kt) { dp[it][jt][kt] = INF; } } } dp[0]['F' - 'A']['J' - 'A'] = 0; string text; cin >> text; for (int it = 0; it < text.size(); ++it) { for (int prevL = 'A'; prevL <= 'Z'; ++prevL) { for (int prevR = 'A'; prevR <= 'Z'; ++prevR) { dp[it + 1][text[it] - 'A'][prevR - 'A'] = minn(dp[it + 1][text[it] - 'A'][prevR - 'A'], dp[it][prevL - 'A'][prevR - 'A'] + manhattan(prevL, text[it])); dp[it + 1][prevL - 'A'][text[it] - 'A'] = minn(dp[it + 1][prevL - 'A'][text[it] - 'A'], dp[it][prevL - 'A'][prevR - 'A'] + manhattan(prevR, text[it])); } } } int ans = INF; for (int jt = 'A'; jt <= 'Z'; ++jt) { for (int kt = 'A'; kt <= 'Z'; ++kt) { ans = minn(ans, dp[text.size()][jt - 'A'][kt - 'A']); } } cout << ans; return 0; }