#include #include #include #include #include #include #include using namespace std; #define x first #define y second #define NMAX 105 #define INF 1000000007 int d[NMAX][NMAX][NMAX], nr; pair point[NMAX]; char s[NMAX]; int dist(char A, char B){ return abs(point[A].x - point[B].x) + abs(point[A].y - point[B].y); } int main (){ point['Q'] = make_pair(1,1); point['W'] = make_pair(1,2); point['E'] = make_pair(1,3); point['R'] = make_pair(1,4); point['T'] = make_pair(1,5); point['Y'] = make_pair(1,6); point['U'] = make_pair(1,7); point['I'] = make_pair(1,8); point['O'] = make_pair(1,9); point['P'] = make_pair(1,10); point['A'] = make_pair(2,1); point['S'] = make_pair(2,2); point['D'] = make_pair(2,3); point['F'] = make_pair(2,4); point['G'] = make_pair(2,5); point['H'] = make_pair(2,6); point['J'] = make_pair(2,7); point['K'] = make_pair(2,8); point['L'] = make_pair(2,9); point['Z'] = make_pair(3,1); point['X'] = make_pair(3,2); point['C'] = make_pair(3,3); point['V'] = make_pair(3,4); point['B'] = make_pair(3,5); point['N'] = make_pair(3,6); point['M'] = make_pair(3,7); scanf("%s", s + 1); nr = strlen(s + 1); for(int l = 0; l <= nr; l++) for(int i = 'A'; i <= 'Z'; i++) for(int j = 'A'; j <= 'Z'; j++) d[l][i][j] = INF; d[0]['F']['J'] = 0; for(int i = 0; i < nr; i++){ for(int c1 = 'A'; c1 <= 'Z'; c1++) for(int c2 = 'A'; c2 <= 'Z'; c2++){ d[i + 1][s[i + 1]][c2] = min(d[i + 1][s[i + 1]][c2], d[i][c1][c2] + dist(c1, s[i + 1])); d[i + 1][c1][s[i + 1]] = min(d[i + 1][c1][s[i + 1]], d[i][c1][c2] + dist(c2, s[i + 1])); } } int answer = INF; for(int i = 'A'; i <= 'Z'; i++) for(int j = 'A'; j <= 'Z'; j++) answer = min(answer, d[nr][i][j]); printf("%d\n", answer); return 0; }