#include<bits/stdc++.h>
#define ll long long
#define F(i,j,n) for(int i=j;i<=n;i++)
#define Tr(v,e) for(int v:e)
#define D double
#define ps push_back
#define Test ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
const int N=1e6+10,NN=1e4+10;
ll n,m,k,x,y,u,v,w,cnt=0,ans=0,t=0,l,r,len,T;
ll mini=INT_MAX,maxi=0,Mod;
string s1,s2="123804765";
ll dx[5]={0,1,-1,0,0};
ll dy[5]={0,0,0,-1,1};
struct Node{
string s;
ll dep;
};
map<string,bool> vis;
ll bfs(){
queue<Node> q;
q.push({s1,0});
vis[s1]=1;
while(!q.empty()){
Node p=q.front();
q.pop();
if(p.s==s2) return p.dep;
ll id=p.s.find("0");
F(i,1,4){
ll nx=id/3+dx[i],ny=id%3+dy[i];
if(nx>=0&&nx<2&&ny>=0&&nx<2){
string s=p.s;
swap(s[id],s[nx*3+ny]);
if(!vis[s]) vis[s]=1,q.push({s,p.dep+1});
}
}
}
return 0;
}
int main(){
cin>>s1;
cout<<bfs();
return 0;
}
值得一提的是,更难的 马农 和 骑士精神都过了,广搜板子竟然还错了。