#include<iostream>
#include<algorithm>
#include<cmath>
#include<complex>
using namespace std;
#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n)   REP(i,0,n)

const double eps = 1e-10;
const double MINRAD=eps;
const double pi = acos(-1);

typedef complex<double> P;

void output_circle(P cr1,double r1){
  cout << "[" << cr1.real()<<","<<cr1.imag()<<","
       << r1 << "],"<<endl;
}

double cross(P a,P b){
  return a.real()*b.imag()-a.imag()*b.real();
}

double dot(P a,P b){
  return a.real()*b.real()+a.imag()*b.imag();
}

double distance_ls_p(P a,P b,P c){
  if (dot(b-a,c-a)<eps)return abs(c-a);
  if (dot(a-b,c-b)<eps)return abs(c-b);
  return abs(cross(b-a,c-a))/abs(b-a);
}

bool is_intersected_cl(P a,P b,P circle,double r){
  bool flag1 = abs(a-circle) < r+eps;
  bool flag2 = abs(b-circle) < r+eps;
  if (flag1 == flag2){
    if (!flag1){
      if (distance_ls_p(a,b,circle) < r+eps)return true;
    }else if (flag1){
      return true;
    }
  }else {
    return true;
  }
  return false;
}

//0:a include b
//1:b include a
//2:intersected
//3:same
//4:far away
// r1 >= r2

int is_intersected_circle(P a,P b,double r1,double r2){
  double d = abs(a-b);
  if (d<eps && abs(r1-r2)<eps)return 3;
  if (d+r2 < r1)return 0;
  if (d+r1 < r2)return 1;
  if (fabs(r1+r2-d) < eps)return 5;
  if (d > r1+r2)return 4;

  return 2;
}


bool is_out(P *cmp,P cr1){
  if (cross(cmp[2]-cmp[1],cr1-cmp[1])<eps||
      cross(cmp[3]-cmp[2],cr1-cmp[2])<eps||
      cross(cmp[1]-cmp[3],cr1-cmp[3])<eps)return true;
  return false;
}

double compute_r(P cr1,double r1,
		 double x2,double y2,double sintheta2,
		 double mx2,double my2,
		 P*cmp,int ind1,int ind2){
  double l =0.1,r=5000;
  double mid;
  P cr2;
  while(l < r){
    mid = (l+r)/2;
    cr2=P(x2+mid/sintheta2*mx2,y2+mid/sintheta2*my2);

    if (is_out(cmp,cr2)
	||is_intersected_cl(cmp[ind1],cmp[ind2],cr2,mid)
	){
      r=mid-MINRAD;
      continue;
    }
    
    int state;
    if (mid > r1){
      state=is_intersected_circle(cr2,cr1,mid,r1);
    }else {
      state=is_intersected_circle(cr1,cr2,r1,mid);
    }
    
    /*
    cout <<"state " << state << endl;
    output_circle(cr1,r1);
    output_circle(cr2,mid);
    */


    if (state == 5){
      break;
    }else if(state == 4){
      l=mid+eps;
    }else {
      r=mid-eps;
    }
  }
  //  output_circle(cr2,mid);
  return mid;
}

void solve(double x1,double y1,double sintheta1,
	   double mx1,double my1,
	   double x2,double y2,double sintheta2,
	   double mx2,double my2,
	   double x3,double y3,double sintheta3,
	   double mx3,double my3){
  double l=0.1,r=5000;
  double r1,r2,r3,r13,r23;
  P cmp[4];cmp[1]=P(x1,y1);cmp[2]=P(x2,y2);cmp[3]=P(x3,y3);
  while(l < r){
    //    cout << l <<" " << (l+r)/2 <<" " << r << endl;

    r1=(l+r)/2;
    P cr1(x1+r1/sintheta1*mx1,y1+r1/sintheta1*my1);

    //    cout <<"circle 1 " << endl;output_circle(cr1,r1);
    
    if (is_intersected_cl(cmp[2],cmp[3],cr1,r1)||
	is_out(cmp,cr1)){
      r=r1-MINRAD;
      continue;
    }


    r2=compute_r(cr1,r1,x2,y2,sintheta2,mx2,my2,cmp,1,3);
    P cr2=P(x2+r2/sintheta2*mx2,y2+r2/sintheta2*my2);
    //    cout <<"circle2 "<< endl;output_circle(cr2,r2);
    
    r13=compute_r(cr1,r1,x3,y3,sintheta3,mx3,my3,cmp,1,2);

    r23=compute_r(cr2,r2,x3,y3,sintheta3,mx3,my3,cmp,1,2);
    
    
    r3=r13;
    if (fabs(r13-r23)<MINRAD){
      //cout <<"exactly"<<endl;
      r3=r13;
      break;
    }
    if (r13 < r23){
      r=r1-MINRAD;
    }else if(r13 > r23){
      l=r1+MINRAD;
    }



  }
  //  cout <<"answer"<<endl;
  printf("%.6lf %.6lf %.6lf\n",r1,r2,r3);
}


double compute_info(double x1,double y1,
		    double x2,double y2,
		    double x3,double y3,
		    double &mx1,double &my1,double &sintheta1){
  P p1(x1,y1),p2(x2,y2),p3(x3,y3);
  P tmp =p2-p1;
  double theta1;
  double theta2=arg(p2-p1);
  double theta3=arg(p3-p1);
  if (theta3<0&&theta2>0)theta3+=2*pi;
  theta1=theta3-theta2;
  theta1/=2;

  mx1=tmp.real()*cos(theta1)-tmp.imag()*sin(theta1);
  my1=tmp.real()*sin(theta1)+tmp.imag()*cos(theta1);

  double abab=(abs(P(mx1,my1)));
  mx1/=abab;
  my1/=abab;
  sintheta1=sin(theta1);
}


main(){
  double x1,x2,x3,y1,y2,y3;
  while(cin>>x1>>y1>>x2>>y2>>x3>>y3){
    if (x1==0&&x2==0&&x3==0&&
	y1==0&&y2==0&&y3==0)break;
    double mx1,my1,mx2,my2,mx3,my3;
    double sintheta1,sintheta2,sintheta3;
    
    
    compute_info(x1,y1,x2,y2,x3,y3,mx1,my1,sintheta1);
    compute_info(x2,y2,x3,y3,x1,y1,mx2,my2,sintheta2);
    compute_info(x3,y3,x1,y1,x2,y2,mx3,my3,sintheta3);

    
    //    cout <<"input" << endl;cout << "[";cout << "[" << x1 <<","<<y1<<"],";cout << "[" << x2 <<","<<y2<<"],"; cout << "[" << x3 <<","<<y3<<"],";cout << "[" << x1 <<","<<y1<<"],";cout << "],"<<endl;cout <<"input end "<<endl;
    


    solve(x1,y1,sintheta1,mx1,my1,
	  x2,y2,sintheta2,mx2,my2,
	  x3,y3,sintheta3,mx3,my3);
    
  }
}

Measured memory_bytes: 992