#include #include using namespace std ; /*ifstream cin ("input") ; ofstream cout ("output") ;*/ map > H ; int dist (char a, char b) { return abs (H[a].first-H[b].first) + abs (H[a].second-H[b].second) ; } int let (char a) { return a -'a' + 1 ; } int main() { string y = "qwertyuiop" ; int e = 1 ; for (auto x : y) { H [x] = make_pair (1, e) ; e ++ ; } y = "asdfghjkl" ; e = 1 ; for (auto x : y) { H [x] = make_pair (2, e) ; e ++ ; } y = "zxcvbnm" ; e = 1 ; for (auto x : y) { H [x] = make_pair (3, e) ; e ++ ; } string sir ; cin >> sir ; for (auto &x : sir) { x += 'a' - 'A' ; } sir = "?" + sir ; int dp [110][30][30]; for (int k = 0 ; k <= 105; ++ k) { for (int i = 0 ; i <= 28; ++ i) { for (int j = 0 ; j <= 28; ++ j) { dp [k][i][j] = 1e8 ; } } } int l = sir.size() ; -- l ; dp [0][let('f')][let('j')] = 0 ; for (int i = 0; i < l; ++ i) { for (int j = 'a'; j <= 'z'; ++ j) { for (int k = 'a'; k <= 'z'; ++ k) { dp[i + 1][let(sir[i + 1])][let(k)] = min (dp[i + 1][let(sir[i + 1])][let(k)], dp [i][let(j)][let(k)] + dist (j, sir [i + 1])) ; dp[i + 1][let(j)][let(sir[i + 1])] = min (dp[i + 1][let(j)][let(sir[i + 1])], dp [i][let(j)][let(k)] + dist (k, sir [i + 1])) ; } } } int best = 1e8 ; for (int i = 'a'; i <= 'z'; ++ i) { for (int j = 'a'; j <= 'z'; ++ j) { best = min (best, dp [l][let(i)][let(j)]) ; //cout << dp [l][let(i)][let(j)] << ' ' ; } //cout << endl ; } cout << best << '\n' ; return 0 ; }