import std.stdio;
import std.ascii;
import std.range;
import std.array;
import std.functional;
import std.algorithm;
import std.conv;
import std.container;
import std.math;
import std.numeric;
import std.string;
import std.c.string;
import std.regex;
import std.typecons;

struct Point {
    double y, x;
    Point opBinary(alias op)(in Point a) const {
        return Point(mixin("y" ~ op ~ "a.y"), mixin("x" ~ op ~ "a.x"));
    }
    Point opBinary(alias op)(double a) const {
        return Point(mixin("y" ~ op ~ "a"), mixin("x" ~ op ~ "a"));
    }
}

void main() {
    Point[] P = new Point[3];

    bool input() {
        scanf("%lf %lf %lf %lf %lf %lf\n", &P[0].x, &P[0].y, &P[1].x, &P[1].y, &P[2].x, &P[2].y);
        if (P[0 .. 3].all!"a.y == 0 && a.x == 0") return false;
        return true;
    }
    size_t next(size_t n) {
        return (n + 1) % 3;
    }
    double distance2D(in Point a, in Point b) {
        double dx = a.x - b.x,
               dy = a.y - b.y;
        return sqrt(dx * dx + dy * dy);
    }
    void solve() {
        double L0 = distance2D(P[0], P[1]);
        double L1 = distance2D(P[0], P[2]);
        double L2 = distance2D(P[1], P[2]);
        double theta = acos( (L0 * L0 + L1 * L1 - L2 * L2) / (2 * L0 * L1) ) / 2;
        double theta1 = acos( (L2 * L2 + L0 * L0 - L1 * L1) / (2 * L2 * L0) ) / 2;
        double theta2 = acos( (L1 * L1 + L2 * L2 - L0 * L0) / (2 * L1 * L2) ) / 2;
        double r1, r2;
        bool C(double R) {
            double a = (L0 - R / tan(theta)) / tan(theta1) + R;
            r1 = ((sqrt(a) - sqrt(R)) * tan(theta1)) ^^ 2;
            a = (L1 - R / tan(theta)) / tan(theta2) + R;
            r2 = ((sqrt(a) - sqrt(R)) * tan(theta2)) ^^ 2;
            double d = L2 - (r1 / tan(theta1)) - (r2 / tan(theta2));
            //writeln([R, r1, r2], [d]);
            if (d < 0) return false;
            return d ^^ 2 + (r1 - r2) ^^ 2 >= (r1 + r2) ^^ 2;
        }
        double area = L0 * L1 * sin(theta) / 2;
        double lb = 0, ub = area * 2 / (L0 + L1 + L2);
        foreach (_; 0 .. 100) {
            double mid = (lb + ub) / 2;
            if (C(mid)) {
                ub = mid;
            } else {
                lb = mid;
            }
        }
        writefln("%.10f %.10f %.10f", ub, r1, r2);
    }
    while (input) solve;
}