{$M 65520,0,655360} program alee; type sor = array[1..4] of -1..1; mutat = ^elem; elem = record x,y:Byte; d:Word; kov:mutat; end; const dx : sor = (1,0,-1,0); dy : sor = (0,1,0,-1); var g:Text; map:Array[1..178,1..178] of Integer; i,j,nrFa,xk1,yk1,xk2,yk2,n:Integer; queue,t,pnt:mutat; elm:elem; procedure Read_data; var f:Text; i,x,y:Integer; begin Assign(f,'alee.in'); Reset(f); ReadLn(f,n,nrFa); for i:=1 to nrFa do begin Read(f,x,y); map[x,y]:=-1; end; ReadLn(f,xk1,yk1,xk2,yk2); Close(f); end; procedure initMap; var i,j:Integer; begin for i:=1 to n do begin for j:=1 to n do begin if map[i,j]=0 then map[i,j]:=-2; end; end; map[xk1,yk1]:=0; end; procedure beszur(var e:mutat;x,y:Byte;d:Word); var p,uj:mutat; begin new(uj); uj^.x:=x; uj^.y:=y; uj^.d:=d; uj^.kov:=nil; if e=nil then e:=uj else begin p:=e; while p^.kov<>nil do p:=p^.kov; p^.kov:=uj; end; end; procedure torol(var e:mutat); var p:mutat; begin p:=e; if e=nil then WriteLn('Ures') else begin e:=e^.kov; dispose(p); end; end; procedure GenerateLeeNumbers;{ez felelos a matrix megtolteseert} var i,lepes:Integer; eszama,k:Integer; x,y:elem; begin beszur(queue,xk1,yk1,0); eszama:=1; While (eszama>0) and (map[xk2,yk2]=-2) do begin x:=queue^; torol(queue); Dec(eszama); for k:=1 to 4 do begin y.x:=x.x+dx[k]; y.y:=x.y+dy[k]; if map[y.x,y.y]=-2 then begin y.d:=x.d+1; map[y.x,y.y]:=y.d; beszur(queue,y.x,y.y,y.d); Inc(eszama); end; end; end; end; procedure WriteRoute; var ln,m:Integer; i,j,k:Integer; begin i:=xk2; j:=yk2; repeat if i+1<=n then if map[i+1,j] = map[i,j]-1 then begin WriteLn(i,' ',j); Inc(i); end; if i-1>=1 then if map[i-1,j] = map[i,j]-1 then begin WriteLn(i,' ',j); Dec(i); end; if j-1>=1 then if map[i,j-1] = map[i,j]-1 then begin WriteLn(i,' ',j); Dec(j); end; if j+1<=n then if map[i,j+1] = map[i,j]-1 then begin WriteLn(i,' ',j); Inc(j); end; until (i=xk1) and (j=yk1); end; begin Assign(g,'alee.out'); ReWrite(g); Read_data; {WriteLn; for i:=1 to n do begin for j:=1 to n do Write(map[i,j],' '); WriteLn; end;} queue:=nil; InitMap; GenerateLeeNumbers; { Writeln; for i:=1 to n do begin for j:=1 to n do Write(map[i,j],' '); WriteLn; end; } { WriteRoute;} WriteLn(g,map[xk2,yk2]+1); Close(g); t:=queue; while t^.kov<>nil do begin pnt:=t; t:=t^.kov; dispose(pnt); end; dispose(t); {ReadLn;} end.