#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <assert.h>
#include <vector>
#include <complex>

using namespace std;
typedef long long ll;
typedef complex<double> Point;
static const double EPS = 1e-9;
static const double PI = acos(-1.0);

#define REP(i, n) for (int i = 0; i < (int)(n); i++)
#define FOR(i, s, n) for (int i = (s); i < (int)(n); i++)
#define FOREQ(i, s, n) for (int i = (s); i <= (int)(n); i++)
#define FORIT(it, c) for (__typeof((c).begin())it = (c).begin(); it != (c).end(); it++)
#define MEMSET(v, h) memset((v), h, sizeof(v))

inline double sq(double x) { return x * x; }

Point p[3];
Point vect[3];
double len[3];
double l[3];
double sins[3];
Point inner;

bool inbox(Point p, Point q, Point r) {
  if (p.real() > q.real()) {
    swap(p.real(), q.real());
  }
  if (p.imag() > q.imag()) {
    swap(p.imag(), q.imag());
  }
  return p.real() <= r.real() && r.real() <= q.real() &&
         p.imag() <= r.imag() && r.imag() <= q.imag();
}

Point getPos(int index, double r) {
  double d = r / sins[index];
  return p[index] + vect[index] * d;
}

pair<Point, double> bs(int index, Point center1, double r1) {
  double left = 0.0;
  double right = l[index] / 2;
  REP(iter, 100) {
    double mid = (left + right) / 2.0;
    Point c = getPos(index, mid);
    if (!inbox(p[index], inner, c) || abs(c - center1) < r1 + mid) {
      right = mid;
    } else {
      left = mid;
    }
  }
  return make_pair(getPos(index, left), left);
}

int main() {
  int x1, x2, x3, y1, y2, y3;
  while (scanf("%d %d %d %d %d %d", &x1, &y1, &x2, &y2, &x3, &y3), x1|y1|x2|y2|x3|y3) {
    p[0] = Point(x1, y1);
    p[1] = Point(x2, y2);
    p[2] = Point(x3, y3);
    REP(i, 3) {
      int prev = (i + 1) % 3;
      int next = (i + 2) % 3;
      len[i] = abs(p[prev] - p[next]);
    }
    inner = (len[0] * p[0] + len[1] * p[1] + len[2] * p[2]) / (len[0] + len[1] + len[2]);
    REP(i, 3) {
      vect[i] = inner - p[i];
      l[i] = abs(vect[i]);
      vect[i] /= abs(vect[i]);
    }
    REP(i, 3) {
      int prev = (i + 1) % 3;
      int next = (i + 2) % 3;
      double c = (sq(l[i]) + sq(len[prev]) - sq(l[next])) / (2 * l[i] * len[prev]);
      sins[i] = sqrt(1 - c * c);
    }
    double left = 0.0;
    double right = l[0] / 2;
    REP(iter, 100) {
      double mid = (left + right) / 2.0;
      Point center1 = getPos(0, mid);
      pair<Point, double> center2 = bs(1, center1, mid);
      pair<Point, double> center3 = bs(2, center1, mid);
      //cout << center1 << " " << center2.first << " " << center3.first << endl;
      //cout << mid << " " << center2.second << " " << center3.second << endl;
      //cout << abs(center1 - center2.first) << " " << mid + center2.second << endl;
      //cout << abs(center2.first - center3.first) << " " << center2.second + center3.second << endl;
      //cout << abs(center3.first - center1) << " " << center3.second + mid << endl;
      if (inbox(p[0], inner, center1) && abs(center2.first - center3.first) < center2.second + center3.second) {
        left = mid;
      } else {
        right = mid;
      }
      if (iter == 99) {
        printf("%.6lf %.6lf %.6lf\n", mid, center2.second, center3.second);
      }
    }
  }
}

Measured memory_bytes: 924