#include<bits/stdc++.h>
using namespace std;
int n=3;
queue<int>a[4][4];
queue<int>t;
int dx[]={0,1},
dy[]={1,0};
map<long long,bool>mp;
long long make(int qqq[][4])
{
long long qq=0,qk=1;
for(int i=3;i>=1;i--)
{
for(int j=3;j>=1;j--)
{
qq+=qqq[i][j]*qk;
qk*=10;
}
}
return qq;
}
void in(int qqq[][4])
{
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
a[i][j].push(qqq[i][j]);
}
}
return;
}
void out(int qqq[][4])
{
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
qqq[i][j]=a[i][j].front();
a[i][j].pop();
}
}
return;
}
void bfs()
{
t.push(0);
while(!a[1][1].empty())
{
int b[4][4];
out(b);
int tt=t.front();
if(make(b)==12345678)
{
printf("%d",tt);
return;
}
for(int x=1;x<=3;x++)
{
for(int y=1;y<=3;y++)
{
for(int i=0;i<2;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>=1&&yy>=1&&xx<=3&&yy<=3)
{
swap(b[x][y],b[xx][yy]);
if(mp[make(b)]==0)
{
mp[make(b)]=1;
in(b);
t.push(tt+1);
}
swap(b[x][y],b[xx][yy]);
}
}
}
}
t.pop();
}
return;
}
int main()
{
int a[4][4];
for(int i=1;i<=n;i++)
{
char ssss;
for(int j=1;j<=n;j++)
{
ssss=getchar();
a[i][j]=ssss-'0';
}
ssss=getchar();
}
in(a);
mp[make(a)]=1;
bfs();
return 0;
}