#include<iostream>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<queue>
#include<ciso646>
#include<utility>
#include<stack>
#include<bitset>
#include<numeric>
using namespace std;
typedef long long ll;
#define rep(i,n) for(int i=0;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define Rep(i,sta,n) for(int i=sta;i<n;i++)
#define stop char nyaa;cin>>nyaa;
const ll mod = 1000000007;
const long double eps = 1e-8;
typedef pair<int, int> P;

typedef long double ld;

#include<complex>
typedef complex<ld> Point;
const ld pi = acos(-1.0);
ld dot(Point a, Point b) { return real(conj(a)*b); }
ld cross(Point a, Point b) { return imag(conj(a)*b); }
namespace std {
	bool operator<(const Point &lhs, const Point &rhs) {
		return lhs.real() == rhs.real() ? lhs.imag() < rhs.imag() : lhs.real() < rhs.real();
	}
}
struct Line {
	Point a, b;
};
struct Circle {
	Point p; ld r;
};
int ccw(Point a, Point b, Point c) {
	b -= a; c -= a;
	if (cross(b, c) > eps)return 1;//counter clockwise
	if (cross(b, c) < -eps)return -1;//clock wise
	if (dot(b, c) < 0)return 2;//c--a--b on line
	if (norm(b) < norm(c))return -2;//a--b--c on line
	return 0; //a--c--b on line
}
Point proj(Line l, Point p) {
	ld t = dot(p - l.a, l.a - l.b) / norm(l.a - l.b);
	return l.a + t * (l.a - l.b);
}
ld dist_lp(Line l, Point p) {
	return abs(p - proj(l, p));
}
bool isis_ss(Line s, Line t) {
	return(cross(s.b - s.a, t.a - s.a)*cross(s.b - s.a, t.b - s.a) < -eps && cross(t.b - t.a, s.a - t.a)*cross(t.b - t.a, s.b - t.a) < -eps);
}
vector<Point> is_cc(Circle c1, Circle c2) {
	vector<Point> res;
	ld d = abs(c1.p - c2.p);
	ld rc = (d*d + c1.r*c1.r - c2.r*c2.r) / (2 * d);
	ld dfr = c1.r*c1.r - rc * rc;
	if (abs(dfr) < eps)dfr = 0.0;
	if (dfr < 0.0)return res;
	ld rs = sqrt(dfr);
	Point diff = (c2.p - c1.p) / d;
	res.push_back(c1.p + diff * Point(rc, rs));
	if (dfr != 0.0)res.push_back(c1.p + diff * Point(rc, -rs));
	return res;
}
vector<Point> is_lc(Circle c, Line l) {
	vector<Point> res;
	ld d = dist_lp(l, c.p);
	if (d > c.r + eps)return res;
	ld len = (d > c.r) ? 0.0 : sqrt(c.r*c.r - d * d);
	Point nor = (l.a - l.b) / abs(l.a - l.b);
	res.push_back(proj(l, c.p) + len * nor);
	res.push_back(proj(l, c.p) - len * nor);
	return res;
}
vector<Point> is_sc(Circle c, Line s) {
	vector<Point> res, cop; cop = is_lc(c, s);
	int len = cop.size();
	rep(k, len) {
		if (ccw(s.a, cop[k], s.b) == -2) {
			res.push_back(cop[k]);
		}
	}
	return res;
}
bool isis_sp(Line s, Point p) {
	return (abs(s.a - p) + abs(s.b - p) - abs(s.b - s.a) < eps);
}
ld dist_sp(Line s, Point p) {
	Point r = proj(s, p);
	return isis_sp(s, r) ? abs(p - r) : min(abs(p - s.a), abs(p - s.b));
}

Point p[3];
ld dist(int i, int j) {
	ld dx = real(p[j]) - real(p[i]), dy = imag(p[j]) - imag(p[i]);
	return sqrt(dx*dx + dy * dy);
}
ld calc_cos(ld d1, ld d2, ld d3) {
	return (d1*d1 + d2 * d2 - d3 * d3) / (2 * d1*d2);
}


void solve() {
	ld thec[3];
	thec[0] = calc_cos(dist(0, 1), dist(0, 2), dist(1, 2));
	thec[1] = calc_cos(dist(1, 0), dist(1, 2), dist(0, 2));
	thec[2] = calc_cos(dist(2, 1), dist(0, 2), dist(1, 0));
	rep(i, 3) {
		thec[i] = acos(thec[i]);
	}
	Point d[3];
	rep(i, 3) {
		int j = (i + 1) % 3, k = (i + 2) % 3;
		Point l = p[j] - p[i], r = p[k] - p[i];
		l = l / abs(l); r = r / abs(r);
		Point mid = l + r;
		mid = mid / abs(mid);
		d[i] = mid;
	}
	Circle c1, c2, c3;
	ld le = 0, ri = 3000;
	rep(aa, 50) {
		ld mid = (le + ri)/2.0;
		c1.p = p[0] + mid * d[0];
		c1.r = mid * sin(thec[0] / 2.0);
		if (isis_ss({ p[1],p[2] }, { p[0],c1.p })) {
			ri = mid; continue;
		}
		if (dist_sp({ p[1],p[2] }, c1.p)<c1.r) {
			ri = mid; continue;
		}
		//cout << "hello" << endl;
		bool f = false;
		ld cle = 0, cri = 3000;
		rep(bb, 50) {
			ld cmid = (cle + cri) / 2.0;
			c2.p = p[1] + cmid * d[1];
			c2.r = cmid * sin(thec[1] / 2.0);
			f = true;
			if (isis_ss({ p[0],p[2] }, { p[1],c2.p })) {
				cri = cmid; continue;
			}
			if (dist_sp({ p[0],p[2] }, c2.p) < c2.r) {
				cri = cmid; continue;
			}
			f = false;
			if (is_cc(c1, c2).size() > 0) {
				cri = cmid;
			}
			else cle = cmid;
		}
		if (f) {
			le = mid; continue;
		}
		f = false;
		cle = 0, cri = 3000;
		rep(bb, 50) {
			ld cmid = (cle + cri) / 2.0;
			c3.p = p[2] + cmid * d[2];
			c3.r = cmid * sin(thec[2] / 2.0); 
			f = true;
			if (isis_ss({ p[0],p[1] }, { p[2],c3.p })) {
				cri = cmid; continue;
			}
			if (dist_sp({ p[1],p[0] }, c3.p)<c3.r) {
				cri = cmid; continue;
			}
			f = false;
			if (is_cc(c1, c3).size() > 0) {
				cri = cmid;
			}
			else cle = cmid;
		}
		if (f) {
			le = mid; continue;
		}
		//cout << c1.r<<" "<<c2.r << " " << c3.r << endl;
		if (is_cc(c2, c3).size() > 0) {
			le = mid;
		}
		else {
			ri = mid;
		}
	}
	cout << c1.r << " " << c2.r << " " << c3.r << endl;
}
signed main() {
	cin.tie(0);
	ios::sync_with_stdio(false);
	cout << fixed << setprecision(10);
	while (true) {
		bool f = true;
		rep(i, 3) {
			ld x, y; cin >> x >> y;
			p[i] = { x,y };
			if (x || y)f = false;
		}
		if (f)break;
		solve();
	}
	//stop
		return 0;
}
