#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;
const double EPS = 1e-8;
typedef pair<double, double> pt;

#define x first
#define y second

double sq(double a) { return a * a; }

double dist(pt p, pt q) {
  return sqrt(sq(p.x - q.x) + sq(p.y - q.y));
}

bool equal(double x, double y) {
    if (fabs(x-y) < EPS){
        return true;
    }
    return false;
}


pt operator-(pt a, pt b) {
  return pt(a.x - b.x, a.y - b.y);
}

double dotProduct(pt a, pt b) {
    return a.x * b.x + a.y * b.y;
}

bool zero(double x) {
  return fabs(x) <= EPS;
}

struct line {
  double a, b, c;
};

line getLine(pt a, pt b) {
    line l;
    l.a = a.y - b.y; // y1 - y2
    l.b = b.x - a.x; // -(x1-x2)
    // m = l.b / -l.a
    l.c =  a.x*b.y - b.x*a.y ;
    return l;
}

pt intersect(line a, line b) {
    double y = (a.a*b.c - a.c*b.a)/(a.b*b.a - a.a*b.b);
    double x = (a.c*b.b - a.b*b.c)/(a.b*b.a - a.a*b.b);
    return pt(x, y);
}

pt intermediatePoint(pt a, pt b, double ratio) {
    return pt(
        (b.x-a.x)*ratio/(ratio+1)+a.x,
         (b.y-a.y)*ratio/(ratio+1)+a.y
         );
}

double angleBetween(pt a, pt b, pt c) {
    return acos(dotProduct(pt(b.x-a.x,b.y-a.y), pt(c.x-a.x, c.y-a.y))/
        (dist(a, b) * dist(a, c)));
}
double inRadius(double s, double a, double b, double c){
    return sqrt(s*(s-a)*(s-b)*(s-c))/s;
//return a*b/(a+b+c);
}

double malfatti(double s, double c, double inradius, double d, double e, double f) {
    return inradius * (s + d - inradius - e -f)/2/(s-c);
}

int main() {

    cout << setprecision(6) << fixed;
    int x1, y1, x2, y2, x3, y3;
    cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
    while(x1 != 0 || y1 != 0 || x2 != 0 || y2 != 0 || x3 != 0 || y3 != 0) {
        pt A = pt(x1, y1);
        pt B = pt(x2, y2);
        pt C = pt(x3, y3);

        double a = dist(B, C);
        double b = dist(A, C);
        double c = dist(A, B);

        double s = (a+b+c)/2;

        double Cratio = a / b;
        pt Cbisectpt = intermediatePoint(B, A, Cratio);
        line Cline = getLine(C, Cbisectpt);

        double Bratio = c / a;
        pt Bbisectpt = intermediatePoint(A, C, Bratio);
        line Bline = getLine(B, Bbisectpt);

        pt intpt = intersect(Cline, Bline);
        double inr = inRadius(s, a, b, c);
        double d = dist(A, intpt);
        double e = dist(B, intpt);
        double f = dist(C, intpt);

        cout << malfatti(s, a, inr, d, e, f) << " "
         << malfatti(s, b, inr, e, f, d) << " "
        << malfatti(s, c, inr, f, d, e) << endl;

        cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
    }
}
