var
   p:array[0..100]of record
      x,y:integer;
   end;
   pc:integer;

   procedure init;
   begin
      pc:=0;
   end;

   procedure AddPoint(x,y:integer);
   var
      i:integer;
   begin
      for i:=1 to pc do
         if (x=p[i].x) and (y=p[i].y) then
            halt(1);
      inc(pc);
      p[pc].x:=x;
      p[pc].y:=y;
   end;

   procedure AddRandom;
   var   
      x,y,i:integer;
   begin
      x:=-1000+random(2001);
      y:=-1000+random(2001);
      for i:=1 to pc do
         if (x=p[i].x) and (y=p[i].y) then begin
            AddRandom;
            exit;
         end;
      inc(pc);
      p[pc].x:=x;
      p[pc].y:=y;
   end;

   procedure mix;
   var
      i,j:integer;
   begin
      for i:=pc downto 2 do begin
         j:=random(pc-1)+1;
         p[0]:=p[i];
         p[i]:=p[j];
         p[j]:=p[0];
      end;
   end;

   procedure print(k:integer);
   var
      i:integer;
   begin
      writeln(pc,' ',k);
      for i:=1 to pc do
         writeln(p[i].x,' ',p[i].y);
   end;

var
   i:integer;
   x0,y0,dx,dy:integer;
begin
   randomize;
   init;
   x0:=-500+random(1000);
   y0:=-500+random(1000);
   AddPoint(x0+5,y0+0);
   AddPoint(x0-5,y0+0);
   AddPoint(x0+0,y0+5);
   AddPoint(x0+0,y0-5);
   AddPoint(x0+3,y0+4);
   AddPoint(x0+3,y0-4);
   AddPoint(x0-3,y0+4);
   AddPoint(x0-3,y0-4);
   AddPoint(x0+4,y0-3);
   AddPoint(x0-4,y0+3);
   AddPoint(x0-4,y0-3);
   for i:=1 to 89 do
      AddRandom;
   mix;
   print(11);
end.