#include <cassert>
#include <fstream>
#include <cstring>
#include <queue>
#include <algorithm>
#include <bitset>
#include <ctime>
#include <set>
#include <cmath>
#include <unordered_map>
#include <iomanip>
#include <map>
#include <stack>
#include <vector>
#include <bitset>
#include <functional>
#include <iostream>

using namespace std;


#define FOR(i, a, n) for (int i = a; i <= n; ++i)
#define FORN(a, n) for (int i = a; i < n; ++i)
#define ROF(i, n, a) for (int i = n; i >= a; i--)
#define ROFN(n, a) for (int i = n - 1; i >= a; i--)
#define FIT(i, v) for (auto &i : v)
#define pb push_back
#define mp make_pair
#define mt make_touple
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define sz(x) ((int)(x).size())
#define log log2
typedef long long ll;
typedef pair<int, int> pii;
const long long mod = 1000000007;

int ans;
string s;
pair<int, int> v[1111];

int manhattan(pair<int, int> a, pair<int, int> b) {
	return abs(a.first - b.first) + abs(a.second - b.second);
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);

	cin >> s;

	v['Q'] = { 1, 1 };
	v['W'] = { 1, 2 };
	v['E'] = { 1, 3 };
	v['R'] = { 1, 4 };
	v['T'] = { 1, 5 };
	v['Y'] = { 1, 6 };
	v['U'] = { 1, 7 };
	v['I'] = { 1, 8 };
	v['O'] = { 1, 9 };
	v['P'] = { 1, 10 };
	v['A'] = { 2, 1 };
	v['S'] = { 2, 2 };
	v['D'] = { 2, 3 };
	v['F'] = { 2, 4 };
	v['G'] = { 2, 5 };
	v['H'] = { 2, 6 };
	v['J'] = { 2, 7 };
	v['K'] = { 2, 8 };
	v['L'] = { 2, 9 };
	v['Z'] = { 3, 1 };
	v['X'] = { 3, 2 };
	v['C'] = { 3, 3 };
	v['V'] = { 3, 4 };
	v['B'] = { 3, 5 };
	v['N'] = { 3, 6 };
	v['M'] = { 3, 7 };

	pii finger1 = v['F'];
	pii finger2 = v['J'];

	FORN(0, s.size()) {
		int man1 = manhattan(finger1, v[s[i]]);
		int man2 = manhattan(finger2, v[s[i]]);
	
		ans += min(man1, man2);
		if (man1 < man2) {
			finger1 = v[s[i]];
		}
		else {
			finger2 = v[s[i]];
		}
	}

	cout << ans;

	return 0;
}