{$apptype console}

{$M+}

type  
  double=extended;
const
  NMAX = 100;
  epsilon = 0.000000001;

var
  n,k: Integer;
  x,y: array[1..NMAX] of double;
  xc,yc: Double;
  i,j,q,p,cnt: Integer;
  a1,b1,c1,a2,b2,c2,d,d1,d2,r: Double;

{лежат ли точки на одной прямой}
function OneLine(x1,y1,x2,y2,x3,y3: Double): boolean;
var
  sp,dd: Double;
begin
  sp := abs( (x2-x1)*(x3-x1)+(y2-y1)*(y3-y1) );
  dd := sqrt(sqr(x2-x1)+sqr(y2-y1)) * sqrt(sqr(x3-x1)+sqr(y3-y1));
  if abs(sp-dd)<epsilon then OneLine:=true else OneLine:=false; 
end;

begin

//  assign(input,'input.txt'); reset(input);
//  assign(output,'output.txt'); rewrite(output);

  readln(n,k);
  if k>n then begin writeln('No solution!'); exit; end;
  for i:=1 to n do readln(x[i],y[i]);
  if k=1 then begin writeln(x[1]+1:0:7, ' ', y[1]:0:7, ' ', 1.0:0:7); exit; end;
  if k=2 then begin 
    xc := (x[1]+x[2])/2;
    yc := (y[1]+y[2])/2;
    writeln(xc:0:7, ' ', yc:0:7, ' ', sqrt(sqr(x[1]-xc)+sqr(y[1]-yc)):0:7);
    exit;
  end;
  for i:=1 to n-2 do
    for j:=i+1 to n-1 do
      for q:=j+1 to n do
      begin
        if OneLine(x[i],y[i],x[j],y[j],x[q],y[q]) then continue;
        a1 := x[j]-x[i]; b1 := y[j]-y[i]; c1 := - (a1*(x[i]+x[j])/2+b1*(y[i]+y[j])/2);
        a2 := x[q]-x[i]; b2 := y[q]-y[i]; c2 := - (a2*(x[i]+x[q])/2+b2*(y[i]+y[q])/2);
        d := a1*b2-a2*b1; d1 := b1*c2-c1*b2; d2 := a2*c1-a1*c2;
        xc := d1/d; yc := d2/d; r := sqrt(sqr(x[i]-xc)+sqr(y[i]-yc));
        {определяем, сколько ещё точек проходит через неё}
        cnt:=3;
        for p:=q+1 to n do
          if abs(sqr(xc-x[p])+sqr(yc-y[p])-sqr(r))<epsilon then inc(cnt);
        if cnt>=k then
        begin
          writeln(xc:0:7, ' ', yc:0:7, ' ', r:0:7);
          exit;
        end;
      end;
  writeln('No solution!');  
end.

 