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