#include #include #include #include using namespace std; struct poz { int x, y; } V[30]; struct depe { int lft, rgt, cost; } dp[105][3]; char line1[] = "QWERTYUIOP"; char line2[] = "ASDFGHJKL"; char line3[] = "ZXCVBNM"; char sir[105]; int dist(int a, int b) { return abs(V[a].x - V[b].x) + abs(V[a].y - V[b].y); } int main() { cin >> (sir + 1); int lg = strlen(sir + 1); for(int i = 0; i < strlen(line1); ++i) { V[line1[i] - 'A'].x = 1; V[line1[i] - 'A'].y = i; } for(int i = 0; i < strlen(line2); ++i) { V[line2[i] - 'A'].x = 2; V[line2[i] - 'A'].y = i; } for(int i = 0; i < strlen(line3); ++i) { V[line3[i] - 'A'].x = 3; V[line3[i] - 'A'].y = i; } dp[0][0].cost = 0; dp[0][0].lft = 'F' - 'A'; dp[0][0].rgt = 'J' - 'A'; dp[0][1].cost = 0; dp[0][1].lft = 'F' - 'A'; dp[0][1].rgt = 'J' - 'A'; for(int i = 1; i <= lg; ++i) { int elem = sir[i] - 'A'; if(dp[i - 1][0].cost + dist(dp[i - 1][0].lft, elem) <= dp[i - 1][1].cost + dist(dp[i - 1][1].lft, elem)) { dp[i][0].cost = dp[i - 1][0].cost + dist(dp[i - 1][0].lft, elem); dp[i][0].lft = elem; dp[i][0].rgt = dp[i - 1][0].rgt; } else { dp[i][0].cost = dp[i - 1][1].cost + dist(dp[i - 1][1].lft, elem); dp[i][0].lft = elem; dp[i][0].rgt = dp[i - 1][1].rgt;; } if(dp[i - 1][0].cost + dist(dp[i - 1][0].rgt, elem) <= dp[i - 1][1].cost + dist(dp[i - 1][1].rgt, elem)) { dp[i][1].cost = dp[i - 1][0].cost + dist(dp[i - 1][0].rgt, elem); dp[i][1].rgt = elem; dp[i][1].lft = dp[i - 1][0].lft; } else { dp[i][1].cost = dp[i - 1][1].cost + dist(dp[i - 1][1].rgt, elem); dp[i][1].rgt = elem; dp[i][1].lft = dp[i - 1][1].lft; } } cout << min(dp[lg][0].cost, dp[lg][1].cost) << '\n'; return 0; }