#include<bits/stdc++.h>
using namespace std;
const double eps=1e-8;
int n;
using namespace std;
const double eps=1e-8;
int n;
struct node{
double x,y;
}a[1000007];
double x,y;
}a[1000007];
long double find_r(long double x){
long double r=0;
for(int i=1;i<=n;i++){
r=max(r,(x-a[i].x)*(x-a[i].x)/a[i].y/2+a[i].y/2);//寻找最大的半径
}
return r;
}
long double r=0;
for(int i=1;i<=n;i++){
r=max(r,(x-a[i].x)*(x-a[i].x)/a[i].y/2+a[i].y/2);//寻找最大的半径
}
return r;
}
int main(){
int flag=0,flag1=0,flag2=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&a[i].x,&a[i].y);
if(a[i].y>0&&flag1==0)
flag1=1,flag++;
if(a[i].y<0&&flag2==0)
flag2=1,flag++;
if(a[i].y<0)
a[i].y-=2*a[i].y;
}
int can=0;
if(flag==2){
can=1;
}
if(can==1){
puts("-1");
}
else{
long double l=-1e7,r=1e7,lx,rx,dx;
while(r-l>eps){//寻找最适中的圆心横坐标
dx=(r-l)/3.0;
lx=l+dx;
rx=r-dx;
if(find_r(lx)-find_r(rx)<0)
r=rx;
else
l=lx;
}
long double x=find_r(r);
printf("%.8lf ",x);//Lf需用C++14及以上提交,C++11会WA
}
return 0;
}
int flag=0,flag1=0,flag2=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&a[i].x,&a[i].y);
if(a[i].y>0&&flag1==0)
flag1=1,flag++;
if(a[i].y<0&&flag2==0)
flag2=1,flag++;
if(a[i].y<0)
a[i].y-=2*a[i].y;
}
int can=0;
if(flag==2){
can=1;
}
if(can==1){
puts("-1");
}
else{
long double l=-1e7,r=1e7,lx,rx,dx;
while(r-l>eps){//寻找最适中的圆心横坐标
dx=(r-l)/3.0;
lx=l+dx;
rx=r-dx;
if(find_r(lx)-find_r(rx)<0)
r=rx;
else
l=lx;
}
long double x=find_r(r);
printf("%.8lf ",x);//Lf需用C++14及以上提交,C++11会WA
}
return 0;
}