#include #include #include #include using namespace std; const int INF = 10000000; struct point { int x, y; }; point letter[30], a, b; int d[105][105],st[105], dr[105]; char s[105]; inline int mod(int x) { if (x < 0) return -x; return x; } inline int dist (int x1, int x2) { a = letter[x1]; b = letter[x2]; return mod(a.x - b.x) + mod(a.y - b.y); } int main() { //freopen("date.in", "r", stdin); //freopen("date.out", "w", stdout); /// pregenerare /// letter[0].x = 2; letter[0].y = 1; /// A letter[1].x = 3; letter[1].y = 5; /// B letter[2].x = 3; letter[2].y = 3; /// C letter[3].x = 2; letter[3].y = 3; /// D letter[4].x = 1; letter[4].y = 3; /// E letter[5].x = 2; letter[5].y = 4; /// F letter[6].x = 2; letter[6].y = 5; /// G letter[7].x = 2; letter[7].y = 6; /// H letter[8].x = 1; letter[8].y = 8; /// I letter[9].x = 2; letter[9].y = 7; /// J letter[10].x = 2; letter[10].y = 8; /// K letter[11].x = 2; letter[11].y = 9; /// L letter[12].x = 3; letter[12].y = 7; /// M letter[13].x = 3; letter[13].y = 6; /// N letter[14].x = 1; letter[14].y = 9; /// O letter[15].x = 1; letter[15].y = 10; /// P letter[16].x = 1; letter[16].y = 1; /// Q letter[17].x = 1; letter[17].y = 4; /// R letter[18].x = 2; letter[18].y = 2; /// S letter[19].x = 1; letter[19].y = 5; /// T letter[20].x = 1; letter[20].y = 7; /// U letter[21].x = 3; letter[21].y = 4; /// V letter[22].x = 1; letter[22].y = 2; /// W letter[23].x = 3; letter[23].y = 2; /// X letter[24].x = 1; letter[24].y = 6; /// Y letter[25].x = 3; letter[25].y = 1; /// Z int n, ans; gets(s + 1); n = strlen(s + 1); st[0] = 5; dr[0] = 9; for (int i = 1; i <= n; ++i) st[i] = dr[i] = s[i] - 'A'; d[0][1] = dist(dr[0], dr[1]); d[1][0] = dist(st[0], st[1]); for (int pas = 2; pas <= n; ++pas) { for (int i = 0; i < pas - 1; ++i) d[pas][i] = d[pas - 1][i] + dist(st[pas], st[pas - 1]); d[pas][pas - 1] = INF; for (int i = 0; i < pas - 1; ++i) if (d[i][pas - 1] + dist(st[i], st[pas]) < d[pas][pas - 1]) d[pas][pas - 1] = d[i][pas - 1] + dist(st[i], st[pas]); for (int i = 0; i < pas - 1; ++i) d[i][pas] = d[i][pas - 1] + dist(dr[pas], dr[pas - 1]); d[pas - 1][pas] = INF; for (int i = 0; i < pas - 1; ++i) if (d[pas - 1][i] + dist(dr[i], dr[pas]) < d[pas - 1][pas]) d[pas - 1][pas] = d[pas - 1][i] + dist(dr[i], dr[pas]); } ans = min (d[n - 1][n], d[n][n - 1]); for (int i = 0; i < n - 1; ++i) { ans = min(ans, d[n][i]); ans = min(ans, d[i][n]); } printf("%d\n", ans); /*for (int i = 0; i <= n; ++i) { for (int j = 0; j <= n; ++j) printf("%d ", d[i][j]); printf("\n"); }*/ return 0; }