program bashuma;
const
dir:array[1..4,1..2]of integer=((1,0),(-1,0),(0,1),(0,-1));
maxl=1000;
type
sta=record
kx,ky:integer;
m:array[1..3,1..3]of integer;
end;
var
tar,old,new:sta;
i,j,head,tail,k:integer;
q:array[1..maxl]of sta;
gans:boolean;
function gnew(k:integer):boolean;//找到新节点
var
i,j:integer;
flag:boolean;
begin
gnew:=true;
new.kx:=old.kx+dir[k,1];
new.ky:=old.ky+dir[k,2];
if (new.kx>0)and(new.kx<4)and(new.ky>0)and(new.ky<4)then
begin
new.m[old.kx,old.ky]:=new.m[new.kx,new.ky];
new.m[new.kx,new.ky]:=0;
//pan chong
for k:=1 to tail-1 do
begin
if (new.kx<>q[k].kx)or(new.ky<>q[k].ky)then continue;
flag:=true;
for i:=1 to 3 do
for j:=1 to 3 do
if new.m[i,j]<>q[k].m[i,j] then
begin flag:=false; break;break;end;
if flag then exit(false);
end;
end else exit(false);
end;
function getans(new:sta):boolean;//检测找到答案
var
i,j:integer;
begin
getans:=true;
if (new.kx<>tar.kx)or(new.ky<>tar.ky)then exit(false);
for i:=1 to 3 do
for j:=1 to 3 do
if new.m[i,j]<>tar.m[i,j] then exit(false);
end;
procedure print(tail:integer);
var
i,j,k:integer;
begin
for k:=1 to tail do
begin
for i:=1 to 3 do
begin
for j:=1 to 3 do write(q[k].m[i,j]);
writeln;
end;
writeln;
end;
end;
begin
assign(input,'win.in');
assign(output,'win.out');
reset(input);
rewrite(output);
for i:=1 to 3 do
begin
for j:=1 to 3 do
begin
read(q[1].m[i,j]);
if q[1].m[i,j]=0 then begin q[1].kx:=i;q[1].ky:=j;end;
end;
readln;
end;
for i:=1 to 3 do
begin
for j:=1 to 3 do
begin
read(tar.m[i,j]);
if tar.m[i,j]=0 then begin tar.kx:=i;tar.ky:=j;end;
end;
readln;
end;
head:=0;tail:=1;
while head<tail do
begin
inc(head);
old:=q[head];
for k:=1 to 4 do
begin
new:=old;
if gnew(k) then
begin
inc(tail);
q[tail]:=new;
if getans(new)then begin print(tail); halt; end;//此时注意找到答案后一定的用halt结束
// if tail=100 then begin print(tail);halt; end;
end;
end;
end;
close(input);
close(output);
end.