{
Written by Fyodor Menshikov 16.02.2005
10:36-11:06
}
{$N+,E-,S-}
   procedure ie;
   begin
      writeln('Internal error!');
      halt(1);
   end;

type
   real=extended;
const
   eps=1e-15;
const
   _7=7;
type
   TPoint=record
      x,y:real;
   end;
   TSegment=record
      p1,p2:TPoint;
   end;
   TVector=record
      x0,y0,dx,dy:real;
   end;
   TLine=record
      a,b,c:real;
   end;

   procedure ReadPoint(var p:TPoint);
   begin
      readln(p.x,p.y);
   end;

   function distance(p1,p2:TPoint):real;
   begin
      distance:=sqrt(sqr(p1.x-p2.x)+sqr(p1.y-p2.y));
   end;

   procedure PointsToSegment(p1,p2:TPoint;var s:TSegment);
   begin
      s.p1:=p1;
      s.p2:=p2;
   end;

   procedure MiddleNormal(s:TSegment;var v:TVector);
   begin
      v.x0:=(s.p1.x+s.p2.x)/2;
      v.y0:=(s.p1.y+s.p2.y)/2;
      v.dx:=s.p1.y-s.p2.y;
      v.dy:=s.p2.x-s.p1.x;
      if (v.dx=0) and (v.dy=0) then
         ie;
   end;

   procedure VectorToLine(v:TVector;var l:TLine);
   begin
      {x=x0+dx*t,y=y0+dy*t}
      {t=(x-x0)/dx, t=(y-y0)/dy}
      {(x-x0)/dx=(y-y0)/dy}
      {dy*x-x0*dy=dx*y-y0*dx}
      {dy*x+(-dx)*y+y0*dx-x0*dy=0}
      l.a:=v.dy;
      l.b:=-v.dx;
      l.c:=v.y0*v.dx-v.x0*v.dy;
   end;

   function IntersectVectorLine(v:TVector;l:TLine;var p:TPoint):boolean;
   var
      t:real;
   begin
      {Ax+By+C=0}
      {x=x0+dx*t}
      {y=y0+dy*t}
      {A*x0+A*dx*t+B*y0+B*dy*t+C=0}
      {t=-(C+A*x0+B*y0)/(A*dx+B*dy)}
      if l.a*v.dx+l.b*v.dy=0 then begin
         IntersectVectorLine:=false;
         exit;
      end;
      t:=-(l.c+l.a*v.x0+l.b*v.y0)/(l.a*v.dx+l.b*v.dy);
      p.x:=v.x0+v.dx*t;
      p.y:=v.y0+v.dy*t;
      IntersectVectorLine:=true;
   end;

var
   n,k,i,i1,i2,i3,i4,cnt:integer;
   points:array[1..100]of TPoint;
   s:TSegment;
   v:TVector;
   l:TLine;
   p:TPoint;
   r:real;
begin
   assign(input,'input.txt');
   reset(input);
   assign(output,'output.txt');
   rewrite(output);
   readln(n,k);
   for i:=1 to n do
      ReadPoint(points[i]);
   if k=1 then
      writeln(points[1].x+1:0:_7,' ',points[1].y+1:0:_7,' ',1.0:0:_7)
   else if k=2 then
      writeln((points[1].x+points[2].x)/2:0:_7,' ',(points[1].y+points[2].y)/2:0:_7,' ',distance(points[1],points[2])/2:0:_7)
   else begin
      for i1:=1 to n-2 do
         for i2:=i1+1 to n-1 do
            for i3:=i2+1 to n do begin
               PointsToSegment(points[i1],points[i2],s);
               MiddleNormal(s,v);
               VectorToLine(v,l);
               PointsToSegment(points[i1],points[i3],s);
               MiddleNormal(s,v);
               if IntersectVectorLine(v,l,p) then begin
                  r:=distance(p,points[i1]);
                  if k=3 then begin
                     writeln(p.x:0:_7,' ',p.y:0:_7,' ',r:0:_7);
                     halt;
                  end;
                  cnt:=3;
                  for i4:=i3+1 to n do
                     if abs(distance(p,points[i4])-r)<r*eps then begin
                        inc(cnt);
                        if cnt=k then begin
                           writeln(p.x:0:_7,' ',p.y:0:_7,' ',r:0:_7);
                           halt;
                        end;
                     end;
               end;
            end;
      writeln('No solution!');
   end;
end.