#include<bits/stdc++.h>
using namespace std;
int END=123804765;
char in[5][5];
int n[5][5];
int q[10000][5][5],hh=1,tt=1;
int ans[10000][3];
int xt[]= {0,0,1,0,-1};
int yt[]= {0,1,0,-1,0};
int s(int x) {
int ans=1;
for(int i=1; i<=3; i++)
for(int j=1; j<=3; j++)
ans=ans*10+int(q[x][i][j]);
}
map<int,bool>p;
int k;
int main() {
for(int i=1; i<=3; i++)
for(int j=1; j<=3; j++) {
cin>>in[i][j];
q[1][i][j]=int(in[i][j]-'0');
if(!q[1][i][j]) {
ans[1][0]=0;
ans[1][1]=i;
ans[1][2]=j;
}
}
int hh=1,tt=1;
p[s(1)]=1;
while(hh<=tt) {
// cout<<s(hh)<<" "<<ans[hh][0]<<endl;
if(s(hh)%1000000000==END) {
cout<<ans[hh][0]<<endl;
return 0;
}
for(int i=1; i<=4; i++) {
int x1=ans[hh][1]+xt[i],y1=ans[hh][2]+yt[i];
if(x1<=3&&x1>=1&&y1<=3&&y1>=1) {
tt++;
for(int i=1; i<=3; i++)for(int j=1; j<=3; j++)q[tt][i][j]=q[hh][i][j];
swap(q[tt][ans[hh][1]][ans[hh][2]],q[tt][x1][y1]);
if(p[s(tt)]) {
tt--;
continue;
} else {
p[s(tt)]=1;
ans[tt][0]=ans[hh][0]+1;
ans[tt][1]=x1;
ans[tt][2]=y1;
}
}
}
hh++;
}
return 0;
}