#include<bits/stdc++.h>
using namespace std;
int a[4][4];
struct mm{
int map,step;
mm(int a,int b){map=a;step=b;}
};
int cal()
{
int sum=0,tot=0;
for (int i=1;i<=3;i++)
for (int j=1;j<=3;j++)
sum+=a[i][j]*(1<<tot),++tot;
return sum;
}
int dx[5]={1,-1,0,0,0},dy[5]={0,0,1,-1,0};
int f[1<<10];
void change(int tag,int &a)
{
if (a&(1<<(tag-1))==0) a|(1<<(tag-1));//Èç¹ûaµÄµÚtagΪΪ0£¬¾Í±ê¼ÇΪ1
else a&~(1<<(tag-1));
}
void bfs()
{
queue<mm> q;
q.push(mm(cal(),0));
f[q.front().map]=0;
while (!q.empty()){
mm h=q.front(); q.pop();
if (h.step>f[h.map]) continue;
if (h.map==(1<<10)-1){
printf("%d\n",h.step);
return;
}
for (int i=1;i<=3;i++)
for (int j=1;j<=3;j++){
mm tail;
tail.step=h.step+1;
tail.map=h.map;
for (int k=0;k<=4;k++){
int x=i+dx[k],y=j+dy[k];
if (x>=1 && x<=3 && y>=1 && y<=3){
change(3*(x-1)+y,tail.map);
}
}
q.push(mm(tail.map,tail.step));
}
}
}
int main()
{
memset(f,0x3f,sizeof f);
for (int i=1;i<=3;i++)
for (int j=1;j<=3;j++)
cin>>a[i][j];
bfs();
return 0;
}