#include #include #include using namespace std; pair v[] = { {1,1}, {2,5}, {2,3}, {1,3}, {0,3}, {1,4}, {1,5}, {1,6}, {0,8}, {1,7}, {1,8}, {1,9}, {2,7}, {2,6}, {0,9}, {0,10},{0,1},{0,4},{1,2},{0,5},{0,7},{2,5},{0,2},{2,2},{0,6},{2,1} } ; int dp[110][40]; char str[110]; int Move(int from,int to) { return abs(v[from].first - v[to].first ) + abs(v[from].second - v[to].second ); } void Initialize() { memset(dp,0x3f,sizeof(dp)); str[0] = 'F'; dp[0]['J'-'A'] = 0; } int main() { Initialize(); cin>>str+1; int n = strlen(str+1); int Min = 10000000; for(int i=1;i<=n;i++) { for(int j = 0;j<='Z'-'A'; j++) { dp[i][str[i-1]-'A'] = min(dp[i][str[i-1]-'A'],dp[i-1][j] + Move(j, str[i]-'A')); dp[i][j] = min(dp[i][j], dp[i-1][j] + Move(str[i-1] - 'A', str[i] - 'A')); } } for(int j = 0;j<='Z'-'A'; j++) Min = min(Min,dp[n][j]); cout<