program direct;

var z:array[1..200,1..200] of integer;
    v:array[1..200,1..200] of integer;
    dobra:array[1..200,1..200] of boolean;
    P, Q:integer;
    
function vidis(x1,y1,x2,y2:integer):boolean;
var i, dx, dy, dz, z1, z2:integer;
    px, py, pz:real;
    lastz:integer;
    
begin
  z1:=z[x1,y1]; z2:=z[x2,y2];
  dx:=x2-x1;dy:=y2-y1;dz:=z1-z2;
  
  for i:=1 to 200 do
  begin
    px:=x1+i*dx/200+0.5;
    py:=y1+i*dy/200+0.5;
    pz:=z1+i*dz/200+0.5;
    lastz:=z[trunc(px), trunc(py)];
    if (lastz>pz) then
    begin
      vidis:=false;
      exit;
    end;
  end;
  vidis:=true;
end;

function sedi (x1, y1, x2, y2:integer):boolean;
var d:integer;
    s:boolean;
begin

  d:=z[x1,y1]-z[x2,y2];

  s:=(d<=3) and (d>=-1);
{  writeln(x1:4, y1:4, x2:4, y2:4 , d:4,s );  }
  sedi:=s;
end;

function dlzka(x1, y1, x2, y2:integer):integer;
var daco:boolean;
    i,j,d:integer;
begin
  for i:=1 to p do for j:=1 to q do v[i,j]:=-1;
  v[x1, y1]:=0; daco:=true;
  d:=0;
  while daco do
  begin
    daco:=false;
    for i:=1 to P do
      for j:=1 to Q do
        if v[i,j]=d then
        begin
          if (i=x2) and (j=y2) then
          begin
            dlzka:=d;
            exit;
          end;
          if (i>1) and dobra[i-1,j] and sedi(i,j,i-1,j) then begin
	    daco:=daco or (v[i-1,j]=-1); 
	    	   v[i-1,j]:=d+1;

	    end;
          if (i<p) and dobra[i+1,j] and sedi(i,j,i+1, j) then begin
	    daco:=daco or (v[i+1,j]=-1);
	    	  v[i+1,j]:=d+1;

	     end;
          if (j>1) and dobra[i,j-1] and sedi(i,j,i,j-1)then begin
	    daco:=daco or (v[i,j-1]=-1);
	    	  v[i,j-1]:=d+1;

	     end;
          if (j<q) and dobra[i,j+1] and sedi(i,j,i,j+1)then begin 
	     daco:=daco or (v[i,j+1]=-1); 
	     v[i,j+1]:=d+1;
	
	    end;
        end;
    Inc(d);
    if (d>p*q) then daco:=false;
  end;
  dlzka:=-1;
end;
 
var i,j,k,t:integer;
    r1, c1, r2, c2:integer;
    
begin
  readln(t);
  for i:=1 to t do begin
   for j:=1 to p do for k:=1 to q do dobra[j,k]:=false;
    readln(q,p);
    for j:=1 to q do
      for k:=1 to p do
        read(Z[k,j]);
    readln(r1,c1,r2,c2);
    for j:=1 to p do
      for k:=1 to q do
        dobra[j,k]:= (vidis(j,k,c1,r1) or vidis(j,k,c2,r2));
    j:=dlzka(c1,r1,c2,r2);
    if (j<0) then
      writeln('Mission impossible!')
    else
      writeln('The shortest path is ',j,' steps long.');
    end;
 end.
 