//Code by Patcas Csaba #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LL long long #define PII pair #define VB vector #define VI vector #define VD vector #define VS vector #define VPII vector > #define VVI vector < VI > #define VVB vector < VB > #define FORN(i, n) for(int i = 0; i < (n); ++i) #define FOR(i, a, b) for(int i = (a); i <= (b); ++i) #define FORD(i, a, b) for(int i = (a); i >= (b); --i) #define REPEAT do{ #define UNTIL(x) }while(!(x)); #define SZ size() #define BG begin() #define EN end() #define CL clear() #define X first #define Y second #define RS resize #define PB push_back #define MP make_pair #define ALL(x) x.begin(), x.end() #define IN_FILE "a.in" #define OUT_FILE "a.out" string s; VS keys; int n; PII findKey(char key) { FOR(i, 0, 2) FORN(j, keys[i].SZ) if (keys[i][j] == key) { return MP(i, j); } } int dist(PII pos1, PII pos2) { return abs(pos1.X - pos2.X) + abs(pos1.Y - pos2.Y); } int main() { //Read data //freopen(IN_FILE, "r", stdin); //freopen(OUT_FILE, "w", stdout); keys.PB("QWERTYUIOP"); keys.PB("ASDFGHJKL"); keys.PB("ZXCVBNM"); cin >> s; n = s.SZ; s.insert(s.BG, '#'); char c1 = 'F'; char c2 = 'J'; //Solve int ans = 0; FOR(i, 1, n) { int d1 = dist(findKey(c1), findKey(s[i])); int d2 = dist(findKey(c2), findKey(s[i])); if (d1 < d2) c1 = s[i]; else c2 = s[i]; ans += min(d1, d2); } //Write data cout << ans; return 0; }