#include #include #define MAXN 100 #define INF 1000000 char a[3][10]={ { 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P' }, { 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 0 }, { 'Z', 'X', 'C', 'V', 'B', 'N', 'M', 0, 0, 0 } }; int dp[MAXN+1][26][26]; int lin[26], col[26]; inline int man(int a, int b){ return std::abs(lin[a]-lin[b])+std::abs(col[a]-col[b]); } int main(){ for(int i=0; i<3; i++) for(int j=0; j<10; j++) if(a[i][j]) lin[a[i][j]-'A']=i, col[a[i][j]-'A']=j; char ch=fgetc(stdin); int n=0; for(int i=0; i<26; i++) for(int j=0; j<26; j++) dp[0][i][j]=INF; dp[0]['F'-'A']['J'-'A']=0; while(ch!='\n'){ n++; for(int i=0; i<26; i++) for(int j=0; j<26; j++) dp[n][i][j]=INF; for(int i=0; i<26; i++) for(int j=0; j<26; j++) dp[n][i][ch-'A']=std::min(dp[n][i][ch-'A'], dp[n-1][i][j]+man(ch-'A', j)); for(int i=0; i<26; i++) for(int j=0; j<26; j++) dp[n][ch-'A'][i]=std::min(dp[n][ch-'A'][i], dp[n-1][j][i]+man(ch-'A', j)); ch=fgetc(stdin); } int ans=dp[n][0][0]; for(int i=0; i<26; i++) for(int j=0; j<26; j++) ans=std::min(ans, dp[n][i][j]); printf("%d\n", ans); return 0; }