#include <bits/stdc++.h>
#define REP(i,n) for(int i=0; i<(int)(n); ++i)

using namespace std;
typedef complex<double> Point;
const double EPS = 1e-8;

struct Line : public vector<Point> {
    Line(const Point& a, const Point& b) {
        push_back(a); push_back(b);
    }
    Point vector() const {
        return back() - front();
    }
};
double cross(Point a, Point b){
    return imag(conj(a) * b);
}
double distanceLP(Line l, Point p){
    // return abs(p - projection(l, p));
    return abs(cross(l.vector(), p - l[0])) / abs(l.vector());
}

Point incenter(Point p1, Point p2, Point p3){
    double a = abs(p2 - p3);
    double b = abs(p3 - p1);
    double c = abs(p1 - p2);
    return (a * p1 + b * p2 + c * p3) / (a + b + c);
}

Point find_point(Point a, double r, Point p, Point c, Line l){
    double lb = 0, ub = 1;
    REP(iter, 100){
        double mid = (lb + ub) / 2;
        Point q = p * (1 - mid) + c * mid;
        double s = distanceLP(l, q);
        if(abs(a - q) < r + s){ // too near
            ub = mid;
        }else{ // come closer
            lb = mid;
        }
    }
    return p * (1 - lb) + c * lb;
}

int main(){
    while(true){
        Point tri[3];
        REP(i, 3){
            double x, y;
            cin >> x >> y;
            tri[i] = Point(x, y);
        }
        if(tri[0] == tri[1]) break;
        Point c = incenter(tri[0], tri[1], tri[2]);
        double lb = 0, ub = 1;
        REP(iter, 100){
            double mid = (lb + ub) / 2;
            Point p0 = (tri[0] * (1 - mid) + c * mid);
            double r0 = distanceLP(Line(tri[0], tri[1]), p0);
            //cout << "mid : " << mid << endl;
            //cout << "p0 : " << p0 << " r0 : " << r0 << endl;

            Line l(tri[1], tri[2]);
            Point p1 = find_point(p0, r0, tri[1], c, l);
            double r1 = distanceLP(l, p1);
            //cout << "p1 : " << p1 << " r1 : " << r1 << endl;
            Point p2 = find_point(p0, r0, tri[2], c, l);
            double r2 = distanceLP(l, p2);
            //cout << "p2 : " << p2 << " r2 : " << r2 << endl;
            if(abs(p1 - p2) < r1 + r2){ // come closer
                //cout << "lb update" << endl;
                lb = mid;
            }else{
                //cout << "ub update" << endl;
                ub = mid;
            }
        }

        Point p0 = (tri[0] * (1 - lb) + c * lb);
        double r0 = distanceLP(Line(tri[0], tri[1]), p0);
        Line l(tri[1], tri[2]);
        Point p1 = find_point(p0, r0, tri[1], c, l);
        double r1 = distanceLP(l, p1);
        Point p2 = find_point(p0, r0, tri[2], c, l);
        double r2 = distanceLP(l, p2);
        printf("%.6f %.6f %.6f\n", r0, r1, r2);
    }
    return 0;
}