#include using namespace std; using ld = long double; constexpr ld EPS = 1e-8; constexpr ld PI = acos(-1); ld sqr(ld a) { return a*a; } // Inscribe the given quadrilateral into a circle of the given radius. // Returns {radius too large (true) or small (false), resulting area} pair inscribe(const vector lns, ld rad) { const size_t n = lns.size(); ld ang = 0.0, area = 0.0; // Inscribe the first n-1 lengths. for (size_t i = 0; i + 1 < n; ++i) { ang += 2 * asin(lns[i] / 2 / rad); area += (lns[i] / 2) * sqrt(abs(sqr(lns[i] / 2) - sqr(rad))); } // Inscribe the last length depending on whether we cover the center. ld angn = 2 * asin(lns[n-1] / 2 / rad); ld arean = (lns[n-1] / 2) * sqrt(abs(sqr(lns[n-1] / 2) - sqr(rad))); if (ang > PI) { // Cover the center. ang += angn; area += arean; return {ang < 2 * PI, area}; } else { // Do not cover the center. ang -= angn; area -= arean; return {ang > 0, area}; } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); vector lns; ld ln; while (cin >> ln) lns.push_back(ln); sort(lns.begin(), lns.end()); // Binary search the radius of the circle in which we // can inscribe the optimal quadrilateral. ld l = lns.back() / 2, r = l; while (!inscribe(lns, r).first) r *= 2; while(r > (1L + 1e-20L)*l){ ld m = (l + r) / 2; if (inscribe(lns, m).first) r = m; else l = m; } printf("%.20lf\n", double(inscribe(lns, (l+r)/2).second)); return 0; }