#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> pi;
#define F first
#define S second
#define pb push_back
#define MP make_pair
#define PI 3.14
#define NIL -1
#define lli long long int
#define MOD7 1e9+7
#define MOD9 1e9+9
#define in(x) cin>>(x)
#define inn(x,y) cin>>(x)>>(y)
int X8[8] = { 2, 1, -1, -2, -2, -1, 1, 2 };
int Y8[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };
int X4[4] = {-1, 0, 1, 0};
int Y4[4] = {0, 1, 0, -1};
#define out(x) cout<<(x)<<"\n";
#define out2(x,y) cout<<(x)<<" "<<(y)<<"\n";
inline bool isOdd(int num){
return (num & 1) ? true : false;
//returns 0 if even else return 1 for
}
bool cmpVectorPair(const pair<int, int> &a, const pair<int, int> &b){
return (a.first < b.first);
//if a.first < b.first then it will sort in assending order
//if a.first > b.first then in desending order
}
#define REP(iterator, starting, limit) for(int iterator = starting; iterator < limit; iterator++)
#define REPLL(iterator, starting, limit) for(lli iterator = starting; iterator < limit; iterator++)
string s;
vector<bool> visited(100005, false);
vector<int> distancea(100005, 0);
vector<vector<int>> edges(10, vector<int>());
int main()
{ ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>s;
int n = s.size();
REP(i, 0, n){
int intEq = s[i] - '0';
edges[intEq].push_back(i);
}
// REP(i, 0, 10){
// cout<<"for: "<<i<<" ";
// for(auto x : edges[i]){
// cout<<x<<" ";
// }
// cout<<"\n";
// }
queue<int> pending;
pending.push(0);
visited[0] = true;
while(!pending.empty()){
int topIndex = pending.front();
pending.pop();
if(topIndex == n-1)
break;
//traverse list
int x = s[topIndex] - '0';
for(auto it : edges[x]){
if(!visited[it]){
visited[it] = true;
distancea[it] = distancea[topIndex] + 1;
pending.push(it);
}
}
// go prev
if(topIndex - 1 >= 0 && !visited[topIndex - 1]){
visited[topIndex - 1] = true;
distancea[topIndex - 1] = distancea[topIndex] + 1;
pending.push(topIndex -1);
}
//go forw
if(topIndex +1 < n && !visited[topIndex + 1]){
visited[topIndex + 1] = true;
distancea[topIndex + 1] = distancea[topIndex] + 1;
pending.push(topIndex + 1);
}
}
cout<<distancea[n-1];
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHBhaXI8aW50LGludD4gcGk7CgojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIE1QIG1ha2VfcGFpcgojZGVmaW5lIFBJIDMuMTQKI2RlZmluZSBOSUwgLTEKI2RlZmluZSBsbGkgbG9uZyBsb25nIGludAojZGVmaW5lIE1PRDcgMWU5KzcKI2RlZmluZSBNT0Q5IDFlOSs5CgojZGVmaW5lIGluKHgpIGNpbj4+KHgpCiNkZWZpbmUgaW5uKHgseSkgY2luPj4oeCk+Pih5KQoKaW50IFg4WzhdID0geyAyLCAxLCAtMSwgLTIsIC0yLCAtMSwgMSwgMiB9OwppbnQgWThbOF0gPSB7IDEsIDIsIDIsIDEsIC0xLCAtMiwgLTIsIC0xIH07CgppbnQgWDRbNF0gPSB7LTEsIDAsIDEsIDB9OwppbnQgWTRbNF0gPSB7MCwgMSwgMCwgLTF9OwoKI2RlZmluZSBvdXQoeCkgY291dDw8KHgpPDwiXG4iOwojZGVmaW5lIG91dDIoeCx5KSBjb3V0PDwoeCk8PCIgIjw8KHkpPDwiXG4iOwoKaW5saW5lIGJvb2wgaXNPZGQoaW50IG51bSl7CiAgICByZXR1cm4gKG51bSAmIDEpID8gdHJ1ZSA6IGZhbHNlOwogICAgLy9yZXR1cm5zIDAgaWYgZXZlbiBlbHNlIHJldHVybiAxIGZvcgp9Cgpib29sIGNtcFZlY3RvclBhaXIoY29uc3QgcGFpcjxpbnQsIGludD4gJmEsIGNvbnN0IHBhaXI8aW50LCBpbnQ+ICZiKXsKICAgIHJldHVybiAoYS5maXJzdCA8IGIuZmlyc3QpOwogICAgLy9pZiBhLmZpcnN0IDwgYi5maXJzdCB0aGVuIGl0IHdpbGwgc29ydCBpbiBhc3NlbmRpbmcgb3JkZXIKICAgIC8vaWYgYS5maXJzdCA+IGIuZmlyc3QgdGhlbiBpbiBkZXNlbmRpbmcgb3JkZXIKfQoKI2RlZmluZSBSRVAoaXRlcmF0b3IsIHN0YXJ0aW5nLCBsaW1pdCkgZm9yKGludCBpdGVyYXRvciA9IHN0YXJ0aW5nOyAgaXRlcmF0b3IgPCBsaW1pdDsgaXRlcmF0b3IrKykKI2RlZmluZSBSRVBMTChpdGVyYXRvciwgc3RhcnRpbmcsIGxpbWl0KSBmb3IobGxpIGl0ZXJhdG9yID0gc3RhcnRpbmc7ICBpdGVyYXRvciA8IGxpbWl0OyBpdGVyYXRvcisrKQoKc3RyaW5nIHM7CnZlY3Rvcjxib29sPiB2aXNpdGVkKDEwMDAwNSwgZmFsc2UpOwp2ZWN0b3I8aW50PiBkaXN0YW5jZWEoMTAwMDA1LCAwKTsKdmVjdG9yPHZlY3RvcjxpbnQ+PiBlZGdlcygxMCwgdmVjdG9yPGludD4oKSk7CgppbnQgbWFpbigpCnsgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CiAgICBjaW4+PnM7CiAgICBpbnQgbiA9IHMuc2l6ZSgpOwoKICAgIFJFUChpLCAwLCBuKXsKICAgICAgICBpbnQgaW50RXEgPSBzW2ldIC0gJzAnOwogICAgICAgIGVkZ2VzW2ludEVxXS5wdXNoX2JhY2soaSk7CiAgICB9CgogICAgLy8gUkVQKGksIDAsIDEwKXsKICAgIC8vICAgICBjb3V0PDwiZm9yOiAiPDxpPDwiICI7CiAgICAvLyAgICAgZm9yKGF1dG8geCA6IGVkZ2VzW2ldKXsKICAgIC8vICAgICAgICAgY291dDw8eDw8IiAiOwogICAgLy8gICAgIH0KICAgIC8vICAgICBjb3V0PDwiXG4iOwogICAgLy8gfQogICAgcXVldWU8aW50PiBwZW5kaW5nOwogICAgcGVuZGluZy5wdXNoKDApOwogICAgdmlzaXRlZFswXSA9IHRydWU7CgogICAgd2hpbGUoIXBlbmRpbmcuZW1wdHkoKSl7CiAgICAgICAgaW50IHRvcEluZGV4ID0gcGVuZGluZy5mcm9udCgpOwogICAgICAgIHBlbmRpbmcucG9wKCk7CgogICAgICAgIGlmKHRvcEluZGV4ID09IG4tMSkKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIC8vdHJhdmVyc2UgbGlzdAogICAgICAgIGludCB4ID0gc1t0b3BJbmRleF0gLSAnMCc7CiAgICAgICAgZm9yKGF1dG8gaXQgOiBlZGdlc1t4XSl7CiAgICAgICAgICAgIGlmKCF2aXNpdGVkW2l0XSl7CiAgICAgICAgICAgICAgICB2aXNpdGVkW2l0XSA9IHRydWU7CiAgICAgICAgICAgICAgICBkaXN0YW5jZWFbaXRdID0gZGlzdGFuY2VhW3RvcEluZGV4XSArIDE7CiAgICAgICAgICAgICAgICBwZW5kaW5nLnB1c2goaXQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIGdvIHByZXYKICAgICAgICBpZih0b3BJbmRleCAtIDEgPj0gMCAmJiAhdmlzaXRlZFt0b3BJbmRleCAtIDFdKXsKICAgICAgICAgICAgdmlzaXRlZFt0b3BJbmRleCAtIDFdID0gdHJ1ZTsKICAgICAgICAgICAgZGlzdGFuY2VhW3RvcEluZGV4IC0gMV0gPSBkaXN0YW5jZWFbdG9wSW5kZXhdICsgMTsKICAgICAgICAgICAgcGVuZGluZy5wdXNoKHRvcEluZGV4IC0xKTsKICAgICAgICB9CiAgICAgICAgLy9nbyBmb3J3CiAgICAgICAgaWYodG9wSW5kZXggKzEgPCBuICYmICF2aXNpdGVkW3RvcEluZGV4ICsgMV0pewogICAgICAgICAgICB2aXNpdGVkW3RvcEluZGV4ICsgMV0gPSB0cnVlOwogICAgICAgICAgICBkaXN0YW5jZWFbdG9wSW5kZXggKyAxXSA9IGRpc3RhbmNlYVt0b3BJbmRleF0gKyAxOwogICAgICAgICAgICBwZW5kaW5nLnB1c2godG9wSW5kZXggKyAxKTsKICAgICAgICB9CiAgICB9CgogICAgY291dDw8ZGlzdGFuY2VhW24tMV07CiAgICByZXR1cm4gMDsKfQ==