#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
const int dx[4]={0,-1,0,1};
const int dy[4]={-1,0,1,0};
struct node
{
int a[4][4],x,y,dep;
};
node list[400000];
int head,tail;
bool tf(node n1,node n2)
{
int x,y;
for(x=1;x<=3;x++)
for(y=1;y<=3;y++)
if( n1.a[x][y]!= n2.a[x][y])
return false;
return true;
}
bool check(node tno)
{
int i;
for(i=1;i<=tail;i++)
if( tf( list[i],tno) ==true)
return true;
return false;
}
int main()
{
char ss[15];
int i,j,tt;
list[0].a[1][1]=1;
list[0].a[1][2]=2;
list[0].a[1][3]=3;
list[0].a[2][1]=8;
list[0].a[2][2]=0;
list[0].a[2][3]=4;
list[0].a[3][1]=7;
list[0].a[3][2]=6;
list[0].a[3][3]=5;
scanf("%s",ss+1);
list[1].a[1][1]=ss[1]-'0';if(ss[1]-'0'==0)list[1].x=1;list[1].y=1;
list[1].a[1][2]=ss[2]-'0';if(ss[2]-'0'==0)list[1].x=1;list[1].y=2;
list[1].a[1][3]=ss[3]-'0';if(ss[3]-'0'==0)list[1].x=1;list[1].y=3;
list[1].a[2][1]=ss[4]-'0';if(ss[4]-'0'==0)list[1].x=2;list[1].y=1;
list[1].a[2][2]=ss[5]-'0';if(ss[5]-'0'==0)list[1].x=2;list[1].y=2;
list[1].a[2][3]=ss[6]-'0';if(ss[6]-'0'==0)list[1].x=2;list[1].y=3;
list[1].a[3][1]=ss[7]-'0';if(ss[7]-'0'==0)list[1].x=3;list[1].y=1;
list[1].a[3][2]=ss[8]-'0';if(ss[8]-'0'==0)list[1].x=3;list[1].y=2;
list[1].a[3][3]=ss[9]-'0';if(ss[9]-'0'==0)list[1].x=3;list[1].y=3;
list[1].dep=1;
head=1;tail=1;
node tno;
bool bk=false;
while( head<=tail)
{
for(i=0;i<=3;i++)
{
tno=list[head];
tno.x= list[head].x+ dx[i]; tno.y= list[head].y+ dy[i];
if( tno.x>=1 &&tno.x<=3&& tno.y>=1&&tno.y<=3)
{
tt= tno.a[tno.x][tno.y];
tno.a[tno.x][tno.y]= tno.a[list[head].x][list[head].y];
tno.a[list[head].x][list[head].y]=tt;
tno.dep= list[head].dep+1;
if( check( tno)==false )
{
tail++;
list[tail]=tno;
if(tf(tno,list[0])==true)
{
printf("%d\n",list[tail].dep);
bk=true;break;
}
}
}
}
if( bk==true) break;
head++;
}
return 0;
}