/*
题意:给出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;
}