{
TASK:GREEN
LANG:PASCAL
}


var {GR:array[1..500000000,1..500000000] of Longint;     }
    a:array[1..2,1..100] of Longint;


{Procedure Init(s1,s2:longint);
var i,k:longint;
Begin
for i:=1 to s1 do for k:=1 to s2 do GR[i,k]:=0;
End;                                                      }


Procedure Input;
var DOWNER,LEFTER,left_dif,down_dif,face,number,edges,opt_face,opt_number,opt_edges,upper,righter:longint;
i:longint;
Begin

number:=0;

While (edges<>0)  do
begin

inc(number);
Read(edges);{if edges=0 then begin writeln(opt_number;exit;end; }
if (edges=0) then begin writeln(opt_number);exit;end;
read(a[1,1],a[2,1]);
Downer:=a[2,1];
Lefter:=a[1,1];
for i:=2 to edges do
begin read(a[1,i],a[2,i]);if (a[1,i]<lefter) then Lefter:=a[1,i];if (a[2,i]<downer) then downer:=a[2,i];end;
down_dif:=downer-1;
left_dif:=lefter-1;
for i:=1 to edges do a[1,i]:=a[1,i]-left_dif;
for i:=1 to edges do a[2,i]:=a[2,i]-down_dif;
upper:=a[2,1];for i:=2 to edges do if (a[2,i]>upper) then upper:=a[2,i];
righter:=a[1,1];for i:=1 to edges do if (a[1,i]>righter) then righter:=a[1,i];
{Init(righter,upper);}
face:=righter*upper;
if (number=1) then begin opt_face:=face;opt_edges:=edges;opt_number:=number;end
else if (face<opt_face) then  begin opt_face:=face;opt_edges:=edges;opt_number:=number;end
else if (face=opt_face) then if (edges<opt_edges) then begin opt_edges:=edges;opt_number:=number;end;
READLN;
end;
{writeln(opt_number);      }
End;

BEGIN
Input;
END.
