#include <bits/stdc++.h>
using namespace std;
const double eps=1e-8;
typedef long long ll;
int sgn(double x){
if(fabs(x)<eps) return 0;
if(x<0) return -1;
else return 1;
}
int x,x2,x3;
int y,y2,y3;
struct Point{
double x,y;
Point(){}
Point(double _x,double _y){
x=_x;
y=_y;
}
bool operator <(Point b)const{
return sgn(x-b.x)==0?sgn(y-b.y)<0:x<b.x;
}
Point operator -(const Point &b)const{
return Point(x-b.x,y-b.y);
}
bool operator ==(Point b)const{
return sgn(x-b.x)==0&&sgn(y-b.y)==0;
}
//叉积
double operator ^(const Point &b)const{
return x*b.y-y*b.x;
}
//点积
double operator *(const Point &b)const{
return x*b.x+y*b.y;
}
};
struct Line{
Point s,e;
Line(){}
Line(Point _s,Point _e){
s=_s;
e=_e;
}
};
struct polygon{
int n;
Point p[4];
Line l[4];
void add(Point q){
p[n++]=q;
}
void getline(){
for(int i=0;i<n;i++){
l[i]=Line(p[i],p[(i+1)%n]);
}
}
double getarea(){
double sum=0;
for(int i=0;i<n;i++){
sum+=(p[i]^p[(i+1)%n]);
}
return fabs(sum)/2;
}
};
int main()
{
scanf("%d",&x);
while(x!=-1){
double area;
scanf(" %d",&y);
scanf("%d %d",&x2,&y2);
scanf("%d %d",&x3,&y3);
ll cnt1=__gcd(abs((x2-x)),abs(y2-y))+1;//ab
ll cnt2=__gcd(abs(x2-x3),abs(y2-y3))+1;//bc
ll cnt3=__gcd(abs(x-x3),abs(y-y3))+1;//ac
ll cnt4=0;//内部
Point p1(x,y);
Point p2(x2,y2);
Point p3(x3,y3);
polygon pp;
pp.n=3;
pp.p[0]=p1;
pp.p[1]=p2;
pp.p[2]=p3;
area=pp.getarea();
cnt4=(ll)(area+1-(cnt1+cnt2+cnt3-3.0)/2.0);
printf("%.1lf %lld %lld %lld %lld\n",area,cnt4,cnt1-2,cnt2-2,cnt3-2);//需要减去每条线段的两个端点
scanf("%d",&x);
}
return 0;
}