/// 1017 stacking Cylinders
// By bodesmile
// Start:
// Algorithm:
// Note:
# Include <iostream>
# Include <algorithm>
# Include <cstdio>
# Include <cmath>
Using namespace STD;
Struct point
{
Double X, Y;
};
Bool comp (point a, point B)
{
Return A. x <B. X;
}
Point new_point (point a, point B, double r) // R is the radius, and the X of A <B's x
{
Double A1, A2, A3, A4, A5, A6, T;
Point temp;
If (A. Y = B. Y)
{
Temp. x = (A. X + B. X)/2;
Temp. Y = A. Y + SQRT (2 * r) * (2 * r)-(B. x-a.x) * (B. x-a.x)/4 );
Return temp;
}
Else if (A. Y <B. Y)
{
A1 = (SQRT (B. x-a.x) * (B. x-a.x) + (B. y-a.y) * (B. y-a.y)/2;
A2 = SQRT (4 * r * r-a1 * A1 );
A3 = (A2 * (B. y-a.y)/(B. x-a.x ));
A4 = A1-A3;
A5 = (A4 * (B. x-a.x)/(2 * A1 );
A6 = SQRT (4 * r * r-a5 * A5 );
Temp. x = A. X + A5;
Temp. Y = A. Y + A6;
Return temp;
}
Else
{
T = A. Y;
A. Y = B. Y;
B. Y = T;
A1 = (SQRT (B. x-a.x) * (B. x-a.x) + (B. y-a.y) * (B. y-a.y)/2;
A2 = SQRT (4 * r * r-a1 * A1 );
A3 = (A2 * (B. y-a.y)/(B. x-a.x ));
A4 = A1-A3;
A5 = (A4 * (B. x-a.x)/(2 * A1 );
A6 = SQRT (4 * r * r-a5 * A5 );
Temp. x = B. x-a5;
Temp. Y = A. Y + A6;
Return temp;
}
}
Int main ()
{
Int maxn;
Int I;
Point P [20];
While (CIN> maxn & maxn! = 0)
{
For (I = 0; I <maxn; I ++)
{
Cin> P [I]. X;
P [I]. Y = 1.0;
}
Sort (p, p + maxn, comp );
Printf ("%. 4f", (P [0]. x + P [maxN-1]. X)/2 );
While (maxn> 1)
{
For (I = 0; I <maxN-1; I ++)
{
P [I] = new_point (P [I], p [I + 1], 1.0 );
}
Maxn --;
}
Printf ("%. 4f \ n", P [0]. y );
}
Return 0;
}