#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+5;
int ans = INT_MAX;
int a[N];
bool vis[N];
int dix[5]={0,-3,-1,1,3};
bool check(int x,int newx)
{
if(x==0){
if(newx==1||newx==3) return true;
else return false;
}
if(x==1){
if(newx==0||newx==2||newx==4) return true;
else return false;
}
if(x==2){
if(newx==1||newx==5) return true;
else return false;
}
if(x==3){
if(newx==0||newx==4||newx==6) return true;
else return false;
}
if(x==4){
if(newx==1||newx==3||newx==5||newx==7) return true;
else return false;
}
if(x==5){
if(newx==2||newx==4||newx==8) return true;
else return false;
}
if(x==6){
if(newx==3||newx==7) return true;
else return false;
}
if(x==7){
if(newx==4||newx==6||newx==8) return true;
else return false;
}
if(x==8){
if(newx==5||newx==7) return true;
else return false;
}
}
void print(int x)
{
string s = to_string(x);
if(s.size()==8){
s="0"+s;
}
for(int i=0;i<3;i++){
cout << s[i] << ' ';
}
cout << endl;
for(int i=3;i<6;i++){
cout << s[i] << ' ';
}
cout << endl;
for(int i=6;i<9;i++){
cout << s[i] << ' ';
}
cout << endl << endl;
}
int jc(int x)
{
int ans = 1;
for(int i=2;i<=x;i++){
ans*=i;
}
return ans;
}
int cantor(int x)
{
string s = to_string(x);
int len = s.size();
int ans = 0;
for(int i=0;i<len;i++){
int cnt = 0;
for(int j=i+1;j<len;j++){
if(s[i]-'0'>s[j]-'0'){
cnt++;
}
}
ans+=(cnt*jc(len-i-1));
}
return ans+1;
}
void dfs(int x,int step,int pl)
{
if(x==123804765){
ans = min(ans,step);
return;
}
string s = to_string(x);
if(s.size()==8) s = "0"+s;
for(int i=1;i<=4;i++){
if(check(pl,pl+dix[i])){
swap(s[pl],s[pl+dix[i]]);
int t = stoll(s);
int ct = cantor(t);
if(!vis[ct]){
vis[ct] = true;
dfs(t,step+1,pl+dix[i]);
vis[ct] = false;
}
swap(s[pl],s[pl+dix[i]]);
}
}
}
int main()
{
int x;
cin >> x;
string s = to_string(x);
int len = s.size();
int pl = 0;
for(int i=0;i<len;i++){
if(s[i]=='0'){
pl = i;
break;
}
}
int ct = cantor(x);
vis[ct] = true;
dfs(x,0,pl);
cout << ans;
return 0;
}