program kvadratai;

  const MAX = 1000;  { maksimalus taÕkÖ skaiÑius }
        PR = 'KVADRATAI.DAT';
        RZ = 'KVADRATAI.REZ';
  type lentele = array [1..MAX] of longint;

  { Øemiau apraÕyti globalieji kitamieji }
  var N: longint;
      x, y: lentele;

  procedure rikiuoti (k1, k2: longint; var x, y: lentele);
    { Greitojo rikiavimo algoritmas }
    var i, j, a, nr: longint;
  begin
    i := k1; j := k2;
    nr := (i+j) div 2;
    repeat
      while (x[nr] > x[i]) or (x[nr] = x[i]) and (y[nr] > y[i]) do
        i := i + 1;
      while (x[nr] < x[j]) or (x[nr] = x[j]) and (y[nr]<y[j]) do
        j := j - 1;
      if i<= j then
        begin
          a := x[i]; x[i] := x[j]; x[j] := a;
          a := y[i]; y[i] := y[j]; y[j] := a;
          i := i + 1; j := j - 1;
        end;
   until i>j;
   if k1 < j then rikiuoti (k1, j, x, y);
   if i < k2 then rikiuoti (i, k2, x, y);
  end; { rikiuoti }

  function yra (x1, y1: longint): boolean;
  { patikrina ar tarp duotÖjÖ yra toks taÕkas }
    var pr, pab, vid: longint;
        rasta: boolean;
  begin
    pr := 1; pab := N; rasta := false;
    while (pr <= pab) and not rasta do
      begin
        vid := (pr+pab) div 2;
        rasta := (x[vid] = x1) and (y[vid] = y1);
        if not rasta and ((x[vid] < x1) or (x[vid] = x1) and (y[vid] < y1))
           then pr := vid+1
           else pab := vid-1;
      end;
    yra := rasta;
  end; { yra }

  procedure perrinkimas (var maxp: int64;
                         var x1_m, y1_m, x3_m, y3_m: longint);
    var i, j, x1, y1, x2, y2, x3, y3, x4, y4: longint;
        radome, baigti: boolean;
        plotas: int64;
  begin
    rikiuoti (1, N, x, y);
    maxp := 0; { maksimalus plotas }
    for i := 1 to N do
      for j := 1 to N do
        if i<>j then
          begin
            x1 := x[i]; x2 := x[j];
            y1 := y[i]; y2 := y[j];
            x4 := x1-(y2-y1); y4 := y1+(x2-x1);
            x3 := x2-(y2-y1); y3 := y2+(x2-x1);
            plotas := Int64(x2-x1)*(x2-x1)+Int64(y2-y1)*(y2-y1);
            baigti := plotas <= maxp; { turime geresnÔ sprendinÔ }
            if not baigti
               then radome := yra (x3, y3) and yra (x4, y4);
            if not baigti and not radome
               then begin { bandome brÓØti kvadratÐ Ô kitÐ pusÒ }
                      x4 := x1+(y2-y1); y4 := y1-(x2-x1);
                      x3 := x2+(y2-y1); y3 := y2-(x2-x1);
                      radome := yra (x3, y3) and yra (x4, y4);
                    end;
           if not baigti and radome
               then begin { apskaiÑiuojame jo plotÐ }
                       maxp := plotas;
                       x1_m := x1; y1_m := y1;
                       x3_m := x3; y3_m := y3;
                    end
          end;
  end; { perrinkimas }


  procedure skaityti (var N: longint; var x, y: lentele);
    var f: text;
        i: longint;
  begin
    assign (f, PR);
    reset (f);
    readln (f, N);
    for i := 1 to N do
      readln (f, x[i], y[i]);
    close (f);
  end; { skaityti }

  procedure rasyti (maxp: int64; x3_m, y3_m, x1_m, y1_m: longint);
    var f: text;
  begin
    assign (f, RZ);
    rewrite (f);
    writeln (f, maxp);
    if maxp <> 0
       then writeln (f, x1_m, ' ',y1_m, ' ',x3_m, ' ',y3_m);
    close (f);
  end; { raÕyti }

  var maxp: int64;
      x3_m, x1_m, y3_m, y1_m: longint;
begin
  skaityti (N, x, y);
  perrinkimas (maxp, x3_m, y3_m, x1_m, y1_m);
  rasyti (maxp, x3_m, y3_m, x1_m, y1_m);
end.
