#include<bits/stdc++.h>
using namespace std;
queue<int> q;
string s;
string s1=" 123804765";
int now[5][5];
int now1[12];
int now_[12];
int ans[500005];
bool app[13];
int fact[13];
int dx[4]={0,-1,0,1};
int dy[4]={-1,0,1,0};
void init(){
now[1][1]=s[1]-'0'+1;
now[1][2]=s[2]-'0'+1;
now[1][3]=s[3]-'0'+1;
now[2][1]=s[4]-'0'+1;
now[2][2]=s[5]-'0'+1;
now[2][3]=s[6]-'0'+1;
now[3][1]=s[7]-'0'+1;
now[3][2]=s[8]-'0'+1;
now[3][3]=s[9]-'0'+1;
return;
}
void fact_init(){
fact[0]=1;
for(int i=1;i<=10;i++){
fact[i]=fact[i-1]*i;
}
return;
}
void now1_init(){
now1[1]=now[1][1];
now1[2]=now[1][2];
now1[3]=now[1][3];
now1[4]=now[2][1];
now1[5]=now[2][2];
now1[6]=now[2][3];
now1[7]=now[3][1];
now1[8]=now[3][2];
now1[9]=now[3][3];
return;
}
int conto(){
memset(app,false,sizeof(app));
for(int i=1;i<=9;i++){
now_[i]=now1[i];
}
int ret=1;
for(int i=1;i<=8;i++){
int now2=0;
for(int j=now_[i]-1;j>=1;j--){
now2+=(!app[j]);
}
ret=ret+fact[9-i]*now2;
app[now_[i]]=true;
}
return ret;
}
void conto1(int now3){
memset(app,false,sizeof(app));
for(int i=1;i<=9;i++){
int now2=now3/fact[9-i];
int j=0,sum=0;
while(sum<=now2){
j++;
sum+=(!app[j]);
}
now3-=now2*fact[9-i];
int l=i/3;
int c=i%3;
if(i%3) l++;
if(!c) c=3;
now[l][c]=j;
app[j]=true;
}
now1_init();
return;
}
int find0(){
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
if(now[i][j]==1){
return (i-1)*3+(j-1)+1;
}
}
}
return -1;
}
bool check(int x,int y){
return x>=1&&x<=3&&y>=1&&y<=3;
}
void Astar(){
int dir=0;
now1_init();
int fir=conto();
ans[fir]=0;
q.push(fir);
while(!q.empty()){
int now2=q.front();
q.pop();
conto1(now2-1);
int _0=find0();
dir++;
int x=_0/3+1;
int y=_0%3;
if(!y) y=3;
for(int i=0;i<4;i++){
int tx=x+dx[i];
int ty=y+dy[i];
if(check(tx,ty)){
swap(now[x][y],now[tx][ty]);
now1_init();
int new_=conto();
if(ans[new_]>=1e8){
ans[new_]=ans[now2]+1;
q.push(new_);
}
swap(now[x][y],now[tx][ty]);
}
}
}
return;
}
int main(){
memset(ans,0x3f,sizeof(ans));
cin>>s;
s=' '+s;
init();
fact_init();
now1_init();
s=s1;
Astar();
init();
now1_init();
cout<<ans[conto()]<<endl;
return 0;
}