var n,m:integer; a:array[1..1000,1..1000]of longint; b:array[0..1000,0..1000]of boolean; vizitate: longint; i, j:integer; begin read(n,m); for i:=1 to n do begin for j:=1 to m do read(a[i,j]); end; for i:=1 to n do begin for j:=1 to m do b[i,j]:=false; end; i := 1; j := 1; b[1,m+1]:=true; b[n+1,m]:=true; b[n,0]:=true; while vizitate <= n * m do begin {parcurgere stanga->dreapta} while not b[i,j+1] do begin write(a[i,j],' '); b[i,j]:=true; inc(j); inc(vizitate); end; while not b[i+1,j] do begin write(a[i,j],' '); b[i,j]:=true; inc(i); inc(vizitate); end; while not b[i,j-1] do begin write(a[i,j],' '); b[i,j]:=true; j:=j-1; inc(vizitate); end; while not b[i-1,j] do begin write(a[i,j],' '); b[i,j]:=true; i:=i-1; inc(vizitate); end; {parcurgere sus->jos} {parcurgere dreapta->stanga} {parcurgere jos->sus} end; end.