#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define ic pair<int, int>
#define fi first
#define se second
using namespace std;
const int maxn = 1e6;
const int INF = 1e9;
struct Node
{
ic best_1, best_2;
Node(ic best_1 = ic(INF, '#'), ic best_2 = ic(INF, '#')) :
best_1(best_1), best_2(best_2) {};
};
int n, ans = INF;
Node dp[maxn + 10][5];
string s;
char get_char(char c, int v)
{
v -= 2;
c += v;
if (c < 'a')
c += 'z' - 'a' + 1;
if (c > 'z')
c -= 'z' - 'a' + 1;
return c;
}
void minimize(Node &a, ic b)
{
if (a.best_1.fi >= b.fi)
{
if (a.best_1.se != b.se)
a.best_2 = a.best_1;
a.best_1 = b;
}
else if (a.best_2.fi >= b.fi && a.best_1.se != b.se)
a.best_2 = b;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("REMOVEPALIN.INP", "r"))
{
freopen("REMOVEPALIN.INP", "r", stdin);
freopen("REMOVEPALIN.OUT", "w", stdout);
}
cin >> s;
n = s.size();
s = ' ' + s;
if (n == 1)
return cout << 0, 0;
for (int y = 0; y <= 4; y++)
for (int x = 0; x <= 4; x++)
if (get_char(s[2], y) != get_char(s[1], x))
minimize(dp[2][y], ic(abs(y - 2) + abs(x - 2), get_char(s[1], x)));
for (int i = 3; i <= n; i++)
{
for (int y = 0; y <= 4; y++)
{
for (int x = 0; x <= 4; x++)
{
if (get_char(s[i - 1], x) == get_char(s[i], y))
continue;
if (get_char(s[i], y) != dp[i - 1][x].best_1.se)
minimize(dp[i][y], ic(dp[i - 1][x].best_1.fi + abs(y - 2), get_char(s[i - 1], x)));
if (get_char(s[i], y) != dp[i - 1][x].best_2.se)
minimize(dp[i][y], ic(dp[i - 1][x].best_2.fi + abs(y - 2), get_char(s[i - 1], x)));
}
}
}
// for (int i = 2; i <= n; i++)
// for (int y = 0; y <= 4; y++)
// cout << i << ' ' << get_char(s[i], y) << ' ' << dp[i][y].best_1.fi << ' ' << (char)dp[i][y].best_1.se << ' ' << dp[i][y].best_2.fi << ' ' << (char)dp[i][y].best_2.se, el;
for (int x = 0; x <= 4; x++)
ans = min(ans, dp[n][x].best_1.fi);
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZyAKI2RlZmluZSBlbCBjb3V0IDw8ICdcbicKI2RlZmluZSBpYyBwYWlyPGludCwgaW50PgojZGVmaW5lIGZpIGZpcnN0IAojZGVmaW5lIHNlIHNlY29uZAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBtYXhuID0gMWU2Owpjb25zdCBpbnQgSU5GID0gMWU5OwoKc3RydWN0IE5vZGUKewogICAgaWMgYmVzdF8xLCBiZXN0XzI7CiAgICAKICAgIE5vZGUoaWMgYmVzdF8xID0gaWMoSU5GLCAnIycpLCBpYyBiZXN0XzIgPSBpYyhJTkYsICcjJykpIDoKICAgICAgICBiZXN0XzEoYmVzdF8xKSwgYmVzdF8yKGJlc3RfMikge307Cn07CgppbnQgbiwgYW5zID0gSU5GOwpOb2RlIGRwW21heG4gKyAxMF1bNV07CnN0cmluZyBzOwoKY2hhciBnZXRfY2hhcihjaGFyIGMsIGludCB2KQp7CiAgICB2IC09IDI7CiAgICBjICs9IHY7CiAgICBpZiAoYyA8ICdhJykKICAgICAgICBjICs9ICd6JyAtICdhJyArIDE7CiAgICBpZiAoYyA+ICd6JykKICAgICAgICBjIC09ICd6JyAtICdhJyArIDE7CiAgICByZXR1cm4gYzsKfQp2b2lkIG1pbmltaXplKE5vZGUgJmEsIGljIGIpCnsKICAgIGlmIChhLmJlc3RfMS5maSA+PSBiLmZpKQogICAgewogICAgICAgIGlmIChhLmJlc3RfMS5zZSAhPSBiLnNlKQogICAgICAgICAgICBhLmJlc3RfMiA9IGEuYmVzdF8xOwogICAgICAgIGEuYmVzdF8xID0gYjsKICAgIH0KICAgIGVsc2UgaWYgKGEuYmVzdF8yLmZpID49IGIuZmkgJiYgYS5iZXN0XzEuc2UgIT0gYi5zZSkKICAgICAgICBhLmJlc3RfMiA9IGI7Cn0KCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4oIlJFTU9WRVBBTElOLklOUCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbigiUkVNT1ZFUEFMSU4uSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiUkVNT1ZFUEFMSU4uT1VUIiwgInciLCBzdGRvdXQpOwogICAgfQoKICAgIGNpbiA+PiBzOwogICAgbiA9IHMuc2l6ZSgpOwogICAgcyA9ICcgJyArIHM7CiAgICBpZiAobiA9PSAxKQogICAgICAgIHJldHVybiBjb3V0IDw8IDAsIDA7CiAgICBmb3IgKGludCB5ID0gMDsgeSA8PSA0OyB5KyspCiAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPD0gNDsgeCsrKQogICAgICAgICAgICBpZiAoZ2V0X2NoYXIoc1syXSwgeSkgIT0gZ2V0X2NoYXIoc1sxXSwgeCkpCiAgICAgICAgICAgICAgICBtaW5pbWl6ZShkcFsyXVt5XSwgaWMoYWJzKHkgLSAyKSArIGFicyh4IC0gMiksIGdldF9jaGFyKHNbMV0sIHgpKSk7CiAgICBmb3IgKGludCBpID0gMzsgaSA8PSBuOyBpKyspCiAgICB7CiAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPD0gNDsgeSsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPD0gNDsgeCsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoZ2V0X2NoYXIoc1tpIC0gMV0sIHgpID09IGdldF9jaGFyKHNbaV0sIHkpKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgaWYgKGdldF9jaGFyKHNbaV0sIHkpICE9IGRwW2kgLSAxXVt4XS5iZXN0XzEuc2UpCiAgICAgICAgICAgICAgICAgICAgbWluaW1pemUoZHBbaV1beV0sIGljKGRwW2kgLSAxXVt4XS5iZXN0XzEuZmkgKyBhYnMoeSAtIDIpLCBnZXRfY2hhcihzW2kgLSAxXSwgeCkpKTsKICAgICAgICAgICAgICAgIGlmIChnZXRfY2hhcihzW2ldLCB5KSAhPSBkcFtpIC0gMV1beF0uYmVzdF8yLnNlKQogICAgICAgICAgICAgICAgICAgIG1pbmltaXplKGRwW2ldW3ldLCBpYyhkcFtpIC0gMV1beF0uYmVzdF8yLmZpICsgYWJzKHkgLSAyKSwgZ2V0X2NoYXIoc1tpIC0gMV0sIHgpKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAvLyBmb3IgKGludCBpID0gMjsgaSA8PSBuOyBpKyspCiAgICAvLyAgICAgZm9yIChpbnQgeSA9IDA7IHkgPD0gNDsgeSsrKQogICAgLy8gICAgICAgICBjb3V0IDw8IGkgPDwgJyAnIDw8IGdldF9jaGFyKHNbaV0sIHkpIDw8ICcgJyA8PCBkcFtpXVt5XS5iZXN0XzEuZmkgPDwgJyAnIDw8IChjaGFyKWRwW2ldW3ldLmJlc3RfMS5zZSA8PCAnICcgPDwgZHBbaV1beV0uYmVzdF8yLmZpIDw8ICcgJyA8PCAoY2hhcilkcFtpXVt5XS5iZXN0XzIuc2UsIGVsOwogICAgZm9yIChpbnQgeCA9IDA7IHggPD0gNDsgeCsrKQogICAgICAgIGFucyA9IG1pbihhbnMsIGRwW25dW3hdLmJlc3RfMS5maSk7CiAgICBjb3V0IDw8IGFuczsKfQ==