#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define vll vector<ll>
#define pb push_back
#define f first
#define se second
#define endl '\n'
#define Left Node << 1
#define Right Node << 1 | 1
#define INF -1e9
#define Fast() {ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);}
struct Point {
ld x, y;
};
void solve()
{
int n;
cin >> n;
vector<Point> a(n);
for (auto &[x, y] : a)
cin >> x >> y;
int side = (a[0].y > 0 ? 1 : -1);
for (const auto &p : a) {
if ((p.y > 0 ? 1 : -1) != side) {
cout << -1 << endl;
return;
}
}
auto check = [&](ld r) {
ld left = -1e30;
ld right = 1e30;
for (auto [x, y] : a) {
y = fabsl(y);
ld v = 2 * r * y - y * y;
if (v < 0)
return false;
ld d = sqrtl(v);
left = max(left, x - d);
right = min(right, x + d);
if (left > right)
return false;
}
return true;
};
ld l = 0, r = 1e18;
for (int it = 0; it < 100; it++) {
ld mid = (l + r) / 2;
if (check(mid))
r = mid;
else
l = mid;
}
cout << fixed << setprecision(10) << (double)r << endl;
}
int main()
{
Fast();
int t = 1;
// cin >> t;
while (t--)
{
solve();
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgdmxsIHZlY3RvcjxsbD4KI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgTGVmdCBOb2RlIDw8IDEKI2RlZmluZSBSaWdodCBOb2RlIDw8IDEgfCAxCiNkZWZpbmUgSU5GIC0xZTkKI2RlZmluZSBGYXN0KCkge2lvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7fQoKc3RydWN0IFBvaW50IHsKICAgIGxkIHgsIHk7Cn07CgoKdm9pZCBzb2x2ZSgpCnsKICAgIGludCBuOwogICAgY2luID4+IG47CgogICAgdmVjdG9yPFBvaW50PiBhKG4pOwogICAgZm9yIChhdXRvICZbeCwgeV0gOiBhKQogICAgICAgIGNpbiA+PiB4ID4+IHk7CgogICAgaW50IHNpZGUgPSAoYVswXS55ID4gMCA/IDEgOiAtMSk7CiAgICBmb3IgKGNvbnN0IGF1dG8gJnAgOiBhKSB7CiAgICAgICAgaWYgKChwLnkgPiAwID8gMSA6IC0xKSAhPSBzaWRlKSB7CiAgICAgICAgICAgIGNvdXQgPDwgLTEgPDwgZW5kbDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBhdXRvIGNoZWNrID0gWyZdKGxkIHIpIHsKICAgICAgICBsZCBsZWZ0ID0gLTFlMzA7CiAgICAgICAgbGQgcmlnaHQgPSAxZTMwOwoKICAgICAgICBmb3IgKGF1dG8gW3gsIHldIDogYSkgewogICAgICAgICAgICB5ID0gZmFic2woeSk7CiAgICAgICAgICAgIGxkIHYgPSAyICogciAqIHkgLSB5ICogeTsKCiAgICAgICAgICAgIGlmICh2IDwgMCkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgIGxkIGQgPSBzcXJ0bCh2KTsKCiAgICAgICAgICAgIGxlZnQgPSBtYXgobGVmdCwgeCAtIGQpOwogICAgICAgICAgICByaWdodCA9IG1pbihyaWdodCwgeCArIGQpOwoKICAgICAgICAgICAgaWYgKGxlZnQgPiByaWdodCkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICBsZCBsID0gMCwgciA9IDFlMTg7CiAgICBmb3IgKGludCBpdCA9IDA7IGl0IDwgMTAwOyBpdCsrKSB7CiAgICAgICAgbGQgbWlkID0gKGwgKyByKSAvIDI7CgogICAgICAgIGlmIChjaGVjayhtaWQpKQogICAgICAgICAgICByID0gbWlkOwogICAgICAgIGVsc2UKICAgICAgICAgICAgbCA9IG1pZDsKICAgIH0KCiAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbigxMCkgPDwgKGRvdWJsZSlyIDw8IGVuZGw7Cn0KCmludCBtYWluKCkKewogICAgRmFzdCgpOwoKICAgIGludCB0ID0gMTsKICAgIC8vIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkKICAgIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9