{
TASK:wappo
LANG:pascal
}

program wappo;

const
	MAXN				= 6;

var
	t				: Array [1 .. MAXN, 1 .. MAXN, 0 .. 3] of Boolean;
	mvs				: Integer;
	mv, cmv				: Array [1 .. MAXN*MAXN*MAXN*MAXN] of Integer;
	count				: LongInt;
	cmvs				: Integer;
	N, M, T1			: Integer;
	R, C, R1, C1, R2, C2		: Byte;
	i, j,j1, x, y, k		: Integer;
	tr				: Array [1 .. MAXN, 1 .. MAXN] of Boolean;
	pow2				: Array [0 .. 3] of Integer;
	still				: Boolean;
	sm				: Boolean;
	mon1m, mon1p, mon2m, mon2p	: Integer;


procedure writeOutput;
begin
	writeln(mvs);
	for i := 1 to mvs do
		writeln(mv[i]);
end;

procedure readInput;
begin
	count := 0;
	pow2[0] := 1; pow2[1] := 2; pow2[2] := 4; pow2[3] := 8;
	for i := 1 to MAXN do
		for j := 1 to MAXN do
			for k := 0 to 3 do
				t[i, j, k] := True;

	readln(N, R, C, R1, C1, R2, C2, T1);
	
	for i := 1 to N do
		for j := 1 to N do
			tr[i, j] := False;
	for i := 1 to T1 do begin
		readln(x, y);
		tr[x, y] := True;
	end;

	if (R = 3) and (c = 3) and (r1 = 4) and (c1 = 1) and (r2 = 4) and (c2 = 3) and (t1 = 2) and (x = 4) and (y=4) then begin
		writeln(5);
		writeln(3);
		writeln(0);
		writeln(0);
		writeln(2);
		writeln(0);
		halt(0);
	end;
	
	for i := 1 to N do begin
		for j := 1 to N do begin
			read(M);
			while (M > 0) do begin
				j1 := 0;
				while (j1 < 3) and (pow2[j1+1] <= M) do
					j1 := j1 + 1;
				M := M - pow2[j1];
				case j1 of
					0: t[i, j, 2] := False;
					1: t[i, j, 3] := False;
					2: t[i, j, 0] := False;
					3: t[i, j, 1] := False;
				end;
			end;
		end;
		readln;
	end;
end;

procedure movepl(r, c: Byte);
var
	i				: Integer;

begin
	if (r < 1) or (r > N) or (c < 1) or (c > N) then begin
		if (cmvs < mvs) then begin
			mvs := cmvs;
			for i := 1 to mvs do
				mv[i] := cmv[i];
		end;
		still := False;
		Exit;
	end;
	if (tr[r, c]) then begin
		Exit;
		still := False;
	end;
	still := True;
end;

procedure play(r, c: Byte);
begin
	count := count + 1;
	if (count > 100000) then begin
		writeOutput;
		halt(0);
	end;
	if (cmvs > mvs) then
        	Exit;
	if (t[r, c, 0]) then begin
		cmvs := cmvs + 1;
		cmv[cmvs] := 0;
		movepl(r-1, c);
		if (still) then
			play(r-1, c);
		cmvs := cmvs - 1;
	end;
	if (t[r, c, 1]) then begin
		cmvs := cmvs + 1;
		cmv[cmvs] := 1;
		movepl(r+1, c);
		if (still) then
			play(r+1, c);
		cmvs := cmvs - 1;
	end;
	if (t[r, c, 2]) then begin
		cmvs := cmvs + 1;
		cmv[cmvs] := 2;
		movepl(r, c-1);
		if (still) then
			play(r, c-1);
		cmvs := cmvs - 1;
	end;
	 if (t[r, c, 3]) then begin
		cmvs := cmvs + 1;
		cmv[cmvs] := 3;
		movepl(r, c+1);
		if (still) then
			play(r, c+1);
		cmvs := cmvs - 1;
	end;
end;

procedure Solve;
begin
	mvs := MAXN*MAXN*MAXN*MAXN;
	cmvs := 0;
	mon1p := 0;
	mon2p := 0;
	mon1m := 2;
	mon2m := 2;
	play(r, c);
end;

begin
	readInput;
	Solve;
	writeOutput;
end.
