/*
ID: zzyzzy12
LANG: C++
TASK: fence3
*/
#include<iostream>
#include<istream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stack>
#include<map>
#include<algorithm>
#include<queue>
#define oo 2000000005
#define ll long long
#define pi (atan(2)+atan(0.5))*2
using namespace std;
struct node
{
double x0,y0,x1,y1,len;
}line[152];
int i,n;
double x,y,ansx,ansy,ans,now,MaxX,MaxY,StartX,StartY,len,step;
double dis(node a)
{
double x1,y1,x2,y2;
x1=(x-a.x0)*(x-a.x0)+(y-a.y0)*(y-a.y0);
x2=(x-a.x1)*(x-a.x1)+(y-a.y1)*(y-a.y1);
if (x1-x2-a.len*a.len>-0.001 || x2-x1-a.len*a.len>-0.001)
{
if (x1<x2) return sqrt(x1);
return sqrt(x2);
}
x1=x-a.x0; y1=y-a.y0;
x2=a.x1-a.x0; y2=a.y1-a.y0;
x1=x1*y2-x2*y1;
if (x1<0) x1=-x1;
return x1/a.len;
}
int main()
{
freopen("fence3.in","r",stdin);
freopen("fence3.out","w",stdout);
StartX=StartY=oo;
MaxX=MaxY=-oo;
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%lf%lf%lf%lf",&line[i].x0,&line[i].y0,&line[i].x1,&line[i].y1);
line[i].len=sqrt((line[i].x0-line[i].x1)*(line[i].x0-line[i].x1)+(line[i].y0-line[i].y1)*(line[i].y0-line[i].y1));
if (line[i].x1<line[i].x0)
{
x=line[i].x1;
line[i].x1=line[i].x0;
line[i].x0=x;
}
if (line[i].y1<line[i].y0)
{
y=line[i].y1;
line[i].y1=line[i].y0;
line[i].y0=y;
}
if (line[i].x1>MaxX) MaxX=line[i].x1;
if (line[i].x0<StartX) StartX=line[i].x0;
if (line[i].y1>MaxY) MaxY=line[i].y1;
if (line[i].y0<StartY) StartY=line[i].y0;
}
if (MaxY>MaxX) len=MaxY/2;
else len=MaxX/2;
ans=oo; ans*=ans;
while (len>0.01)
{
step=len/4;
MaxX=StartX+len; MaxY=StartY+len;
for (x=StartX;x<=MaxX;x+=step)
for (y=StartY;y<=MaxY;y+=step)
{
now=0;
for (i=1;i<=n;i++)
{
now+=dis(line[i]);
if (now>ans) break;
}
if (now<ans)
{
ans=now;
ansx=x;
ansy=y;
}
}
StartX=ansx-step/2;
StartY=ansy-step/2;
len/=2;
}
printf("%.1lf %.1lf %.1lf\n",ansx,ansy,ans);
return 0;
}