#include<cstdio>
#include<cstring>
#define MAXN 100005
const int JC[9]={0,1,2,6,24,120,720,5040,40320};
struct Queue
{
int map[4][4],dep;
};
Queue q[MAXN];
int hash[3628810];
void Copy(int head,int tail)
{
for (int i=1;i<=3;i++)
for (int j=1;j<=3;j++)
q[tail].map[i][j]=q[head].map[i][j];
}
void Swap(int x1,int y1,int x2,int y2,int tail)
{
int temp;
temp=q[tail].map[x1][y1];
q[tail].map[x1][y1]=q[tail].map[x2][y2];
q[tail].map[x2][y2]=temp;
}
int Cantor(int tail)
{
int count[10],ans=0,now=8,tot=0,temp[10];
memset(count,0,sizeof(count));
for (int i=1;i<=3;i++)
for (int j=1;j<=3;j++)
{
tot++;
temp[tot]=q[tail].map[i][j];
}
for (int i=1;i<=8;i++)
{
for (int j=i+1;j<=9;j++)
if (temp[i]>temp[j]) count[now]++;
ans+=JC[now]*count[now];
now--;
}
return ans;
}
int Check(int tail)
{
if (q[tail].map[1][1]+q[tail].map[1][2]+q[tail].map[1][3]!=15) return 0;
if (q[tail].map[2][1]+q[tail].map[2][2]+q[tail].map[2][3]!=15) return 0;
if (q[tail].map[3][1]+q[tail].map[3][2]+q[tail].map[3][3]!=15) return 0;
if (q[tail].map[1][1]+q[tail].map[2][1]+q[tail].map[3][1]!=15) return 0;
if (q[tail].map[1][2]+q[tail].map[2][2]+q[tail].map[3][2]!=15) return 0;
if (q[tail].map[1][3]+q[tail].map[2][3]+q[tail].map[3][3]!=15) return 0;
if (q[tail].map[1][1]+q[tail].map[2][2]+q[tail].map[3][3]!=15) return 0;
if (q[tail].map[3][1]+q[tail].map[2][2]+q[tail].map[1][3]!=15) return 0;
return 1;
}
int BFS()
{
int head=1,tail=2;
while (head!=tail)
{
for (int i=1;i<=2;i++)
for (int j=1;j<=3;j++)
{
Copy(head,tail);
Swap(i,j,i+1,j,tail);
int NowCantor=Cantor(tail);
if (hash[NowCantor]!=1)
{
hash[NowCantor]=1;
q[tail].dep=q[head].dep+1;
if (Check(tail)==1) return q[tail].dep;
tail++;
}
}
for (int i=1;i<=3;i++)
for (int j=1;j<=2;j++)
{
Copy(head,tail);
Swap(i,j,i,j+1,tail);
int NowCantor=Cantor(tail);
if (hash[NowCantor]!=1)
{
hash[NowCantor]=1;
q[tail].dep=q[head].dep+1;
if (Check(tail)==1) return q[tail].dep;
tail++;
}
}
head++;
}
return -1;
}
int main()
{
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
for (int t=1;t<=50;t++)
{
for (int i=1;i<=3;i++)
for (int j=1;j<=3;j++)
scanf("%d",&q[1].map[i][j]);
printf("%d\n",BFS());
memset(hash,0,sizeof(hash));
}
return 0;
}