#include<bits/stdc++.h>
#define int long long
using namespace std;
int mp[4][4],dx[5]={0,0,-1,1},dy[5]={1,-1,0,0};
map<int,bool>vis;
void solve(int x){
int w[15],cnt=0;
memset(w,0,sizeof(w));
while(x){
w[++cnt]=x%10;
x/=10;
}
reverse(w+1,w+9+1);
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
mp[i][j]=w[3*(i-1)+j];
}
int f(){
int ans=0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
ans=ans*10+mp[i][j];
return ans;
}
struct node{
int now,time;
};
signed main(){
int x,cnt=0;
cin>>x;
queue<node>q;
q.push(node{x,0});
vis[x]=1;
while(q.size()){
node now=q.front();
q.pop();
if(now.now==123804765){
cout<<now.time;
return 0;
}
solve(now.now);
int x0,y0;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++)
if(mp[i][j]==0)
x0=i,y0=j;
for(int i=0;i<4;i++){
int xx=x0+dx[i],yy=y0+dy[i];
if(xx<1||yy>1||xx>3||yy>3) continue;
swap(mp[x0][y0],mp[xx][yy]);
int ans=f();
if(vis[ans]==0){
q.push(node{ans,now.time+1});
vis[ans]=1;
}
swap(mp[x0][y0],mp[xx][yy]);
}
}
}```