#include #include #include #define INF 200001 #define ll long long using namespace std; struct Let { int x, y; } let[200]; string S; int conf[2][200]; int Dist(char a, char b) { return abs(let[a].x - let[b].x) + abs(let[a].y - let[b].y); } int main() { S = "QWERTYUIOP"; for (int i = 0; i < S.size(); i++) let[S[i]].x = 0, let[S[i]].y = i; S = "ASDFGHJKL"; for (int i = 0; i < S.size(); i++) let[S[i]].x = 1, let[S[i]].y = i; S = "ZXCVBNM"; for (int i = 0; i < S.size(); i++) let[S[i]].x = 2, let[S[i]].y = i; cin >> S; for (int i = 'A'; i <= 'Z'; i++) conf[1][i] = INF; char last = 'F'; conf[1]['J'] = 0; for (int i = 0; i < S.size(); i++) { conf[i % 2][S[i]] = INF; int best = INF; char le; conf[i % 2][last] = INF; for (int j = 'A'; j <= 'Z'; j++) if (j != last) { if (best > conf[!(i % 2)][j] + Dist(j, S[i])) { best = conf[!(i % 2)][j] + Dist(j, S[i]); le = j; } conf[i % 2][j] = conf[!(i % 2)][j] + Dist(last, S[i]); } conf[i % 2][last] = best; last = S[i]; } int best = INF; for (int i = 'A'; i <= 'Z'; i++) best = min(best, conf[(S.size() - 1) % 2][i]); cout << best; return 0; }