/*
題意:給出n個點的坐標,現要求一個點(x,0),使得這n個點離它最遠的點的距離最小
二分距離limit,對每個點,可知道所求的點的坐標范圍[xi-s,xi+s]
然后判斷這所有n個坐標范圍是否有交集 O(n)做到??!
注意的地方:
1)題目要求1e-5, 由于有平方,所以EPS開到1e-11
2)如果比較有加了EPS,那么自己調用函數時也需要加EPS
統一加,同一不加!!
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
const double EPS = 1e-10;
const double DINF = 1e10;
const int MAXN = 50010;
struct Point{double x,y;}pt[MAXN];
int n;
double ans;
int sign(double x)
{
return x<-EPS?-1:x>EPS;
}
bool possible(double limit)
{
// printf("limit %f\n",limit);
double left = -DINF;
double right = DINF;
for(int i=0;i<n;i++)
{
double delta = limit*limit - pt[i].y*pt[i].y;
if(sign(delta)<0)return false;
double S = sqrt(delta+EPS);
double _left = pt[i].x-S;
double _right = pt[i].x+S;
//O(n)求交集
left = max(left,_left);
right = min(right,_right);
if(sign(left-right)>0)return false;
}
ans = left;
return true;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("in","r",stdin);
#endif
while(scanf("%d",&n),n)
{
for(int i=0;i<n;i++)
scanf("%lf%lf",&pt[i].x,&pt[i].y);
double left = 0.0,right = DINF;
for(int cnt = 0;right-left>EPS && cnt <= 100;cnt++)//100次一般來說夠了
{
double mid = (right+left)/2.0;
if(possible(mid))right = mid ;
else left = mid;
}
printf("%.9f %.9f\n",ans,left);
}
return 0;
}