#include <iostream>
#include <vector>
#include <map>
#include <queue>
#include <iomanip>
#include <cmath>
#define int long long // vse ti je long long
#define vi vector<int>
#define vvi vector<vi>
#define vpii vector<pair<int,int>>
#define oopt cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(false);
#define forn(i,n) for(int i = 0; i<n; i++)
#define all(x) (x).begin(), (x).end()
#define ld long double
using namespace std;
signed main() {
int n; cin >> n;
vi v(n), mxr(n);
forn(i,n){
cin >> v[i] >> mxr[i];
}
vi stack; //indexi balonov
vector<ld> r(n,-1);
forn(i,n){
//cout << "smo na indexu: " << i << "\n";
ld novi_r = 1e9;
bool first = true;
while(stack.size()>1-first){
int id = stack[stack.size()-2+first]; //če prvi, gledamo zadnjega, drugače predzadnjega
ld mora_r = (v[i]-v[id])*(v[i]-v[id])/(4.0*r[id]);
if(mora_r < novi_r){ //ljubimo spremembo
novi_r = mora_r;
//cout <<"zmanjsa na " << novi_r << "\n";
if(!first) stack.pop_back();
if(first) first = false;
}else{
break;
}
}
novi_r = min(novi_r, (ld)mxr[i]);
r[i] = novi_r;
//faza 2, odstranjevanje neuporabnih
while(stack.size()>0){
//najprej odstranimo manjše, nato preverimo special pogoj
int id = stack.back();
if(r[id] <= novi_r){ //pogoj za majhnost
stack.pop_back();
}else if(stack.size()>1){ //fancy pogoj
int id0 = stack[stack.size()-2]; //predzadnji element
int x2 = v[i]-v[id];
int x1 = v[id]-v[id0];
int r1 = r[id0], r2 = r[id];
if(x1*(sqrt(r2)-sqrt(novi_r))<x2*(sqrt(r1)-sqrt(r2))){
stack.pop_back();
}else break;
}else{
break; //pred njim ni manjši in pred njim ni fancy pogoja
}
}
stack.push_back(i);
//cout << "stack zdaj izgleda: ";
//for(int nekaj : stack) cout << nekaj << " ";
//cout << "\n";
}
forn(i,n){
cout << fixed << setprecision(3) << r[i] << "\n";
}
}