Uses Math;
Const eps=10e-5;
Var x,y:Array [1..3] of Extended;
    s,a,b,c,r,al,alp1,alp2,alp3,cs1,cs2,cs3,alr:Extended;
    i:LongInt;
Begin
     //ReSet (input,'input.txt');
    // ReWrite (output,'output.txt');
     Readln (x[1],y[1]);
     Readln (x[2],y[2]);
     Readln (x[3],y[3]);
     s:=0.5*abs ((x[1]-x[3])*(y[2]-y[3])-(x[2]-x[3])*(y[1]-y[3]));
     a:=sqrt(sqr(x[1]-x[2])+sqr(y[1]-y[2]));
     b:=sqrt(sqr(x[1]-x[3])+sqr(y[1]-y[3]));
     c:=sqrt(sqr(x[2]-x[3])+sqr(y[2]-y[3]));
     r:=(a*b*c)/(4*s);
     For I:=3 to 100 do
     Begin

          al:=360/i;
          alr:=al/180*pi;
          cs1:=1-(a*a)/(2*r*r);
          alp1:=arccos(cs1);
          alp1:=alp1*180/pi;

          cs2:=1-(b*b)/(2*r*r);
          alp2:=arccos(cs2);
          alp2:=alp2*180/pi;

          cs3:=1-(c*c)/(2*r*r);
          alp3:=arccos(cs3);
          alp3:=alp3*180/pi;

          If (abs(Round(alp1/al)-alp1/al)<eps)and
          (abs(Round(alp2/al)-alp2/al)<eps) and
          (abs(Round(alp3/al)-alp3/al)<eps)
          then Begin
              s:=0.5*r*r*sin(alr)*i;
              Writeln (s:0:10);
                    Halt (0)
               End;
     End;
End.

uses math;
type dot=record x,y:double; end;
var
  a,b,c:dot;
  i:longint;
  r,dw,ans,af,bt,aa,bb,cc:double;
function dis(a,b:dot):double;
begin
  dis:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

begin
  read(a.x,a.y,b.x,b.y,c.x,c.y);
  aa:=dis(b,c); bb:=dis(a,c); cc:=dis(a,b);
  af:=arccos((aa*aa+bb*bb-cc*cc)/(2*aa*bb))*2;
  bt:=arccos((aa*aa+cc*cc-bb*bb)/(2*aa*cc))*2;

  r:=cc*0.5/(sin(af*0.5));

  for i:=1 to 101 do begin
    dw:=2*pi/i;
    if abs(round(af/dw)-af/dw)<1e-4 then
    if abs(round(bt/dw)-bt/dw)<1e-4 then begin
      ans:=r*r*sin(dw)*i/2;
      writeln(ans:0:12);
      halt;
    end;
  end;
end.

Program C1;
var xA, yA, xB, yB, xC, yC, AB, BC, AC, p, R, AOB, AOC, BOC, A, OA, S, x, y, z:extended;
    n:integer;
begin
readln(xA, yA);
readln(xB, yB);
readln(xC, yC);
AB:=(xA-xB)*(xA-xB)+(yA-yB)*(yA-yB);
AB:=sqrt(AB);
AC:=(xA-xC)*(xA-xC)+(yA-yC)*(yA-yC);
AC:=sqrt(AC);
BC:=(xB-xC)*(xB-xC)+(yB-yC)*(yB-yC);
BC:=sqrt(BC);
p:=(AB+BC+AC)/2;
R:=AB*BC*AC/4/sqrt(p*(p-AB)*(p-BC)*(p-AC));
x:=(2*R*R-AB*AB)/2/R/R;
AOB:=arctan(sqrt(1/x/x-1))/pi*180;
if x<0 then AOB:=180-AOB;
y:=(2*R*R-AC*AC)/2/R/R;
AOC:=arctan(sqrt(1/y/y-1))/pi*180;
if y<0 then AOC:=180-AOC;
z:=(2*R*R-BC*BC)/2/R/R;
BOC:=arctan(sqrt(1/z/z-1))/pi*180;
if z<0 then BOC:=180-BOC;
n:=3;
while (frac(round(AOB*n)/360)>0) or (frac(round(BOC*n)/360)>0) or (frac(round(AOC*n)/360)>0) do
   begin
   n:=n+1;
   end;
S:=n/2*R*R*sin(2*pi/n);
writeln(S:20:6);
readln;
end.

uses math;
const zero=1e-6;
type vector=record x,y:extended;end;
var
	p1,p2,p3:vector;
	la,lb,lc,a,b,c,R:extended;
	tmp,i:longint;
function get(a,b,c:extended):extended;
begin
	exit(arccos((b*b+c*c-a*a)/(2*b*c)));
end;
function dis(a,b:vector):extended;
begin
	exit(sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)));
end;
function check(x:extended):boolean;
begin
	tmp:=round(x/pi);
	if abs(tmp*pi-x)/x<zero then exit(true) else exit(false);
end;
begin
	readln(p1.x,p1.y,p2.x,p2.y,p3.x,p3.y);
	la:=dis(p1,p2);lb:=dis(p1,p3);lc:=dis(p2,p3);
	a:=get(la,lb,lc);b:=get(lb,la,lc);c:=get(lc,la,lb);
	i:=3;R:=la/(sin(a)*2);
	while true do
	begin
		if check(a*i) and check(b*i) and check(c*i) then break;
		inc(i);
	end;
	writeln(sin(2*pi/i)*r*r*i/2:0:6);
end.

uses math;
const fi='';
      fo='';
      eps=1e-4;
var x1,x2,x3,y1,y2,y3,a,b,c,rslt:real;
    i:longint;
procedure enter;
begin
        assign(input,fi);
        reset(input);
        readln(x1,y1);
        readln(x2,y2);
        readln(x3,y3);
        close(input);
end;
procedure init;
begin
        a:=sqrt(sqr(abs(x1-x2))+sqr(abs(y1-y2)));
        b:=sqrt(sqr(abs(x2-x3))+sqr(abs(y2-y3)));
        c:=sqrt(sqr(abs(x3-x1))+sqr(abs(y3-y1)));
        rslt:=0;
end;
function gcd(x,y:real):real;
begin
        while (abs(x)>eps) and (abs(y)>eps) do
                if x>y then
                        x:=x-floor(x/y)*y
                else
                        y:=y-floor(y/x)*x;
        exit(x+y);
end;
procedure solve;
var a1,b1,c1,n,r,p,s:real;
begin
        p:=(a+b+c)/2;
        s:=sqrt(p*(p-a)*(p-b)*(p-c));
        r:=a*b*c/4/s;
        a1:=arccos((sqr(b)+sqr(c)-sqr(a))/2/b/c);
        b1:=arccos((sqr(c)+sqr(a)-sqr(b))/2/c/a);
        c1:=arccos((sqr(a)+sqr(b)-sqr(c))/2/a/b);
        n:=pi/gcd(gcd(a1,b1),c1);
        rslt:=n*sqr(r)*sin(pi*2/n)/2;
end;
procedure print;
begin
        assign(output,fo);
        rewrite(output);
        write(rslt:0:6);
        close(output);
end;
begin
        enter;
        init;
        solve;
        print;
end.

uses math;
const eps = 0.001;
var
ok:boolean;
b1,b2,c1,c2,la,cc,d1,d2,a1,a2,rr,del,tmp,len,x,y,x1,y1,x2,y2,x3,y3:extended;
it,i,j:longint;

function dist(x1,y1,x2,y2:extended):extended;
 begin
  dist:=sqrt(sqr(x1-x2)+sqr(y1-y2));
 end;

function dd(xx,yy:extended):extended;
 begin
  dd:=max(dist(xx,yy,x1,y1),max(
     dist(xx,yy,x2,y2)
     ,dist(xx,yy,x3,y3)));
 end;

function arccoss(x:extended):extended;
 begin
  if x>1-eps then arccoss:=0 else
  if x<-1+eps then arccoss:=pi
  else arccoss:=arccos(x);
 end;

 begin
  readln(x1,y1,x2,y2,x3,y3);
        {
  x:=0;
  y:=0;

  del:=1000;
  len:=dd(0,0);
  for it:=1 to 10000 do
    begin
     ok:=true;

     for i:=-1 to 1 do
       for j:=-1 to 1 do
         if (i<>0)or(j<>0) then
           begin
            tmp:=dd(x+i*del,y+j*del);
            if tmp<len then
              begin
               ok:=false;
               len:=tmp;
               x:=x+i*del;
               y:=y+j*del;
              end;
           end;
     if ok then del:=del/2;
    end; }

  a1:=-(x1-x2);//y2-y1;
  b1:=y2-y1;//x1-x2;
  c1:=-a1*(x1+x2)/2-b1*(y1+y2)/2;

  a2:=-(x2-x3);//y3-y2;
  b2:=y3-y2;//x2-x3;
  c2:=-a2*(x2+x3)/2-b2*(y2+y3)/2;

  x:=(c1*b2-c2*b1)/(a2*b1-a1*b2);
  y:=(c1*a2-c2*a1)/(a1*b2-a2*b1);

//  writeln(x:0:6,' ',y:0:6);

  rr:=dist(x,y,x1,y1);
//  writeln(rr);
  rr:=dist(x,y,x2,y2);
//  writeln(rr);
  rr:=dist(x,y,x3,y3);
//  writeln(rr);

  d1:=dist(x1,y1,x2,y2);
  a1:=arccoss((2*rr*rr-d1*d1)/(2*rr*rr));
//  writeln(a1*180/pi:0:6);

  d2:=dist(x1,y1,x3,y3);
  a2:=arccoss((2*rr*rr-d2*d2)/(2*rr*rr));
//  writeln(a2*180/pi:0:6);

  for i:=3 to 100 do
    begin
     ok:=true;

     la:=2*pi/i;

     cc:=a1/la;
     if frac(cc+eps/100)>eps then ok:=false;

     cc:=a2/la;
     if frac(cc+eps/100)>eps then ok:=false;

     if ok then
       begin
        writeln(i/2*rr*rr*sin(2*pi/i):0:6);
        halt(0);
       end;
    end;
 end.

uses math;
const
e=0.0001;
var
x1,y1,x2,y2,x3,y3,r,s,a,b,c,p,r1,r2,r3,m:real;
i:longint;
function d(q,w,e,r:real):real;
begin
d:=sqrt(sqr(q-w)+sqr(e-r));
end;
function gcd(x,y:real):real;
begin
if (y>=-e) and (y<=e)
then gcd:=x else
gcd:=gcd(y,x-trunc(x/y)*y);
end;

begin
readln(x1,y1);
readln(x2,y2);
readln(x3,y3);
a:=d(x1,x2,y1,y2);
b:=d(x1,x3,y1,y3);
c:=d(x2,x3,y2,y3);
p:=(a+b+c)/2;
s:=sqrt(p*(p-a)*(p-b)*(p-c));
r:=(a*b*c)/(4*s);
r1:=arccos((b*b+c*c-a*a)/(2*b*c))*2;
r2:=arccos((a*a+c*c-b*b)/(2*a*c))*2;
r3:=arccos((a*a+b*b-c*c)/(2*a*b))*2;
m:=gcd(r1,r2);
m:=gcd(m,r3);
s:=(r*r*sin(m)*pi/m);
writeln(s:0:8);
end.

uses  math ;
const
        tfi     =       '';
        tfo     =       '';
        e       =       0.00001 ;
var
        fi,fo   :       text;
        n       :       longint ;
        x,y,z:array[1..3] of extended ;
        r,u1,u2,u3,rr       :       extended;
procedure Nhap;
var
        i,j :longint;
begin
        read(fi,x[1],y[1],x[2],y[2],x[3],y[3]) ;
end;
function Kk(i,j :longint) :extended;
var
        kk0 :extended;
begin
        kk0 := sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i] - y[j])*(y[i]-y[j])) ;
        exit(kk0);
end;
procedure init;
var
         i,j,k: longint;
begin
        r := abs((x[2]-x[1])*(y[2]+y[1])+(x[3]-x[2])*(y[3]+y[2])+(x[1]-x[3])*(y[1]+y[3]));
        r := Kk(1,2) * kK(2,3) * kk(3,1)/(2 * r) ;
        u1 := arccos((r*r*2-kk(1,2)*kk(1,2))/(2*r*r));
        u2 := arccos((r*r*2-kk(2,3)*kk(2,3))/(2*r*r)) ;
        u1 := arccos((r*r*2-kk(1,3)*kk(1,3))/(2*r*r)) ;
end;
function check(x:extended):boolean;
var
        i :longint;
begin
        if x <= e then exit(true) ;
        for i := 1 to 100 do if abs(rr * i - x) <= e then exit(true) ;
        exit(false) ;
end;
procedure xuly;
var
        i,j,k: longint;
begin
        for i := 3 to 100 do
          begin
                rr := 2*pi/i ;
                if check(u1) and check(u2) and check(u3) then
                 begin
                        k := i ;
                        break ;
                 end ;
          end ;
        r := r * r * sin(2*pi/k)*k/2 ;
        write(fo,r :0:10);
end ;
procedure inkq;
begin

end;
begin
        assign(fi,tfi);reset(fi);
        assign(fo,tfo);rewrite(fo);
                   Nhap;
                   init;
                   xuly;
                   inkq;
        close(fi);
        close(fo) ;
end.

program Zc;

{$APPTYPE CONSOLE}
{$MODE DELPHI}
uses
  SysUtils,Math;

type point=record
       x,y:extended;
     end;
     line=record
       a,b,c:extended;
     end;
function serper(a,b:point):line;
begin
  result.a:=b.x-a.x;
  result.b:=b.y-a.y;
  result.c:=-(result.a*(a.x+b.x)/2+result.b*(a.y+b.y)/2);
end;
function l2p(a,b:line):point;
var dd,dx,dy:extended;
begin
  dd:=a.a*b.b-a.b*b.a;
  dx:=a.c*b.b-a.b*b.c;
  dy:=a.a*b.c-a.c*b.a;
  result.x:=-dx/dd;
  result.y:=-dy/dd;
end;
function vp(a,b:point):extended;
begin
  result:=a.x*b.y-a.y*b.x;
end;
function sp(a,b:point):extended;
begin
  result:=a.x*b.x+a.y*b.y;
end;
function dst(a,b:point):extended;
begin
  result:=sqr(a.x-b.x)+sqr(a.y-b.y);
end;
function v(a,b:point):point;
begin
  result.x:=b.x-a.x;
  result.y:=b.y-a.y;
end;
var p1,p2,p3,o:point;
    alp1,alp2,alp0:extended;
    p:integer;
begin
  //reset(input,'input.txt');
  //rewrite(output,'output.txt');
  //writeln(1/sqrt(2):0:10);
  read(p1.x,p1.y,p2.x,p2.y,p3.x,p3.y);
  o:=l2p(serper(p1,p2),serper(p2,p3));
  alp1:=arctan2(vp(v(o,p1),v(o,p2)),sp(v(o,p1),v(o,p2)));
  if alp1<0 then alp1:=alp1+2*pi;
  alp2:=arctan2(vp(v(o,p1),v(o,p3)),sp(v(o,p1),v(o,p3)));
  if alp2<0 then alp2:=alp2+2*pi;
  alp1:=min(alp1,2*pi-alp1);
  alp2:=min(alp2,2*pi-alp2);
  for p:=3 to 10000 do begin
    alp0:=2*pi/p;
    if abs(alp1/alp0-round(alp1/alp0))<1e-5 then begin
      if abs(alp2/alp0-round(alp2/alp0))<1e-5 then begin
        writeln(p*dst(o,p1)*sin(alp0)/2:0:15);
        halt;
      end;
    end;
  end;
end.

{$Q-}
uses math;
var r,aa,bb,cc,a,b,c,x1,y1,x2,y2,x3,y3,n,s,p:extended;
function dist(x1,y1,x2,y2:extended):extended;
begin
  dist:=sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
function gcd(x,y:extended):extended;
const eps=1e-4;
begin
  while (abs(x)>eps)and(abs(y)>eps) do
    begin
      if x>y then x:=x-floor(x/y)*y
      else y:=y-floor(y/x)*x;
    end;
  gcd:=x+y;
end;
begin
  read(x1,y1,x2,y2,x3,y3);
  a:=dist(x1,y1,x2,y2);
  b:=dist(x2,y2,x3,y3);
  c:=dist(x1,y1,x3,y3);
  p:=(a+b+c)/2;
  s:=sqrt(p*(p-a)*(p-b)*(p-c));
  r:=a*b*c/(4*s);
  aa:=arccos((sqr(b)+sqr(c)-sqr(a))/(2*b*c));
  bb:=arccos((sqr(c)+sqr(a)-sqr(b))/(2*c*a));
  cc:=arccos((sqr(a)+sqr(b)-sqr(c))/(2*a*b));
  n:=pi/(gcd(gcd(aa,bb),cc));
  writeln(n/2*r*r*sin(2*pi/n):0:6);
end.

program cf1c;
uses math;
type dot=record x,y:double; end;
var
  a,b,c:dot;
  i:longint;
  r,dw,ans,af,bt,aa,bb,cc:double;
function dis(a,b:dot):double;
begin
  dis:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

begin
  read(a.x,a.y,b.x,b.y,c.x,c.y);
  aa:=dis(b,c); bb:=dis(a,c); cc:=dis(a,b);
  af:=arccos((aa*aa+bb*bb-cc*cc)/(2*aa*bb))*2;
  bt:=arccos((aa*aa+cc*cc-bb*bb)/(2*aa*cc))*2;

  r:=cc*0.5/(sin(af*0.5));

  for i:=1 to 101 do begin
    dw:=2*pi/i;
    if abs(round(af/dw)-af/dw)<1e-4 then
    if abs(round(bt/dw)-bt/dw)<1e-4 then begin
      ans:=r*r*sin(dw)*i/2;
      writeln(ans:0:12);
      halt;
    end;
  end;
end.

uses math;
type dot=record x,y:double; end;
var
  a,b,c:dot;
  i:longint;
  r,dw,ans,af,bt,aa,bb,cc:double;
function dis(a,b:dot):double;
begin
  dis:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

begin
  read(a.x,a.y,b.x,b.y,c.x,c.y);
  aa:=dis(b,c);
  bb:=dis(a,c);
  cc:=dis(a,b);
  af:=arccos((aa*aa+bb*bb-cc*cc)/(2*aa*bb))*2;
  bt:=arccos((aa*aa+cc*cc-bb*bb)/(2*aa*cc))*2;

  r:=cc*0.5/(sin(af*0.5));

  for i:=1 to 101 do begin
    dw:=2*pi/i;
    if abs(round(af/dw)-af/dw)<1e-4 then
    if abs(round(bt/dw)-bt/dw)<1e-4 then begin
      ans:=r*r*sin(dw)*i/2;
      writeln(ans:0:12);
      halt;
    end;
  end;
end.

uses math;
var   www,eps,x1,y1,x2,y2,p,a,b,c,pl,al,xl,xr,c1,c2,xx,yy:extended;
      x,y,l:Array[0..10]of extended;
      n,i,j,it:longint;
      ok:boolean;
      a1,b1,a2,b2:extended;
function alpha(x,y:extended):extended;
begin
 if (x=0)and(y=0) then alpha:=0
 else
 if x=0 then
  begin
   if y>0 then alpha:=pi/2
    else alpha:=pi+pi/2;
  end
 else
   begin
     if (x>0)and(y>0) then alpha:=arctan(y/x)
     else if (x>0)and(y<0) then alpha:=arctan(y/x)+2*pi
     else if (x<0) then alpha:=arctan(y/x)+pi;
   end;
end;

function dist(x1,y1,x2,y2:extended):extended;
begin
 dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function calc(xx,yy:extended):extended;
var i:longint;
    min,max,w:extended;
begin
 max:=0;
 for i:=1 to 3 do
  begin
   w:=dist(xx,yy,x[i],y[i]);
   w:=abs(w-p);
   if w>max then max:=w;
  end;
 calc:=max;
end;

function search(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-10000;
  yr:=10000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)<=calc(x,c2) then yr:=c2
       else yl:=c1;
    end;

  yy:=yl;

  search:=calc(x,yy);
end;

 begin
    n:=3;
    for i:=1 to n do
      read(x[i],y[i]);

  {  a:=dist(x[1],y[1],x[2],y[2]);
    b:=dist(x[2],y[2],x[3],y[3]);
    c:=dist(x[1],y[1],x[3],y[3]);

    p:=a+b+c;
    p:=p/2;

    p:=sqrt(p*(p-a)*(p-b)*(p-c));

    p:=a*b*c/(4*p);

    xl:=-10000;
    xr:=10000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)<=search(c2) then xr:=c2
           else xl:=c1;
     end;

    xx:=xl;
    search(xx);
   }

      a1:=-(x[1]-x[2]);//y2-y1;
  b1:=y[2]-y[1];//x1-x2;
  c1:=-a1*(x[1]+x[2])/2-b1*(y[1]+y[2])/2;

  a2:=-(x[2]-x[3]);//y3-y2;
  b2:=y[3]-y[2];//x2-x3;
  c2:=-a2*(x[2]+x[3])/2-b2*(y[2]+y[3])/2;

  xx:=(c1*b2-c2*b1)/(a2*b1-a1*b2);
  yy:=(c1*a2-c2*a1)/(a1*b2-a2*b1);

    for i:=1 to n do
      begin
         x[i]:=x[i]-xx;
         y[i]:=y[i]-yy;
      end;

    for i:=1 to n do
         l[i]:=alpha(x[i],y[i]);

    eps:=1e-5;

    for n:=3 to 101 do
     begin

        ok:=true;

        for i:=1 to 3 do
         for j:=i+1 to 3 do
          begin
             al:=abs(l[i]-l[j]);
             if abs(sin(n*al/2))>eps then
              begin
               ok:=false;
               break;
              end;
          end;
        al:=(2*pi)/n;
        if ok then
         begin
            a:=dist(0,0,x[1],y[1]);
            b:=a;
            c:=sqrt(a*a+b*b-2*a*b*cos(al));
            p:=a+b+c;
            p:=p/2;
            p:=sqrt(p*(p-a)*(p-b)*(p-c));
            writeln(p*n:0:6);
            halt(0);
         end;
     end;
end.

uses math;
var
  i : longint;
  x,y,d,u : array [0..5] of double;
  r,s,p : double;

  function ok(n : longint; u : double) : boolean;
    begin
      u:=min(u,1);
      if abs(sin(n*arcsin(u))/2)<1e-4 then exit(true) else exit(false);
    end;

  function dist(x1,y1,x2,y2 : double) : double;
    begin
      exit(sqrt(sqr(x1-x2)+sqr(y1-y2)));
    end;

begin
  for i:=1 to 3 do read(x[i],y[i]);
  x[4]:=x[1]; y[4]:=y[1];
  for i:=2 to 4 do d[i-1]:=dist(x[i],y[i],x[i-1],y[i-1]);
  for i:=1 to 3 do p:=p+d[i];
  p:=p/2;
  s:=sqrt(p*(p-d[1])*(p-d[2])*(p-d[3]));
  r:=d[1]*d[2]*d[3]/(4*s);
  for i:=1 to 3 do u[i]:=d[i]/(2*r);
  for i:=3 to 100 do
    if ok(i,u[1]) and ok(i,u[2]) and ok(i,u[3]) then
      begin
        writeln(i*sin(2*pi/i)*r*r/2:0:7);
        break;
      end;
end.

uses math;

const
  zero                  =1e-5;
  pi                    =3.1415926535;

var
  x,y                   :array[0..3] of extended;
  dist                  :array[0..3,0..3] of extended;

procedure init;
var
  i                     :longint;
begin
  for i:=1 to 3 do
    readln(x[i],y[i]);
end;  { init }

function check(a,b:extended):boolean;
var
  t                     :longint;
begin
  t:=round(a/b);
  if abs(t-a/b)<zero then exit(true);
  exit(false);
end;  { check }

procedure work;
var
  i,j                   :longint;
  sina,cosa             :extended;
  ans                   :extended;
  r,c                   :extended;
  t                     :extended;
begin
  for i:=1 to 3 do
    for j:=1 to 3 do
      if i<>j then
        dist[i][j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
  cosa:=(sqr(dist[1][2])+sqr(dist[1][3])-sqr(dist[2][3]))/(2*dist[1][2]*dist[1][3]);
  sina:=sqrt(1-sqr(cosa));
  r:=dist[2][3]/(2*sina);
  for i:=1 to 3 do
    for j:=1 to 3 do
      if i<>j then
        dist[i][j]:=arcsin(dist[i][j]/(2*r))*2;
  for i:=3 to 100 do
  begin
    t:=2*pi/i;
    if not check(dist[1][2],t) then continue;
    if not check(dist[1][3],t) then continue;
    if not check(dist[2][3],t) then continue;
    ans:=r*r*sin(t)/2*i;
    writeln(ans:0:8);
    exit;
  end;
end;  { work }

begin
  init;
  work;
end.

uses math;

const eps=1e-2;

var aa,bb,cc,p,a,b,c,r,s,x1,y1,x2,y2,x3,y3:extended;
    n:extended;

    function dis(x1,y1,x2,y2:extended):extended;
     begin
      exit(sqrt(sqr(x1-x2)+sqr(y1-y2)));
     end;

    function find(a,b:extended):extended;
     begin
      while (a>eps) and (b>eps) do
       if a>b then a:=a-trunc(a/b)*b else b:=b-trunc(b/a)*a;
      exit(a+b);
     end;

     begin
      readln(x1,y1); readln(x2,y2); readln(x3,y3);
      a:=dis(x1,y1,x2,y2);
      b:=dis(x1,y1,x3,y3);
      c:=dis(x2,y2,x3,y3);
      p:=(a+b+c)/2;
      s:=sqrt(p*(p-a)*(p-b)*(p-c));
      r:=(a*b*c)/(4*s);
      aa:=arccos((a*a+b*b-c*c)/(2*a*b)); aa:=aa*(180/pi);
      bb:=arccos((b*b+c*c-a*a)/(2*b*c)); bb:=bb*(180/pi);
      cc:=arccos((a*a+c*c-b*b)/(2*a*c)); cc:=cc*(180/pi);
      n:=round(180/(find(find(aa,bb),cc)));
      writeln((n*r*r*sin(2*pi/n))/2:0:10);
     end.

uses math;

const eps=0.1;

var aa,bb,cc,p,a,b,c,r,s,x1,y1,x2,y2,x3,y3:extended;
    n:extended;

    function dis(x1,y1,x2,y2:extended):extended;
     begin
      exit(sqrt(sqr(x1-x2)+sqr(y1-y2)));
     end;

    function find(a,b:extended):extended;
     begin
      while (a>eps) and (b>eps) do
       if a>b then a:=a-trunc(a/b)*b else b:=b-trunc(b/a)*a;
      exit(a+b);
     end;

     begin
      readln(x1,y1); readln(x2,y2); readln(x3,y3);
      a:=dis(x1,y1,x2,y2);
      b:=dis(x1,y1,x3,y3);
      c:=dis(x2,y2,x3,y3);
      p:=(a+b+c)/2;
      s:=sqrt(p*(p-a)*(p-b)*(p-c));
      r:=(a*b*c)/(4*s);
      aa:=arccos((a*a+b*b-c*c)/(2*a*b)); aa:=aa*(180/pi);
      bb:=arccos((b*b+c*c-a*a)/(2*b*c)); bb:=bb*(180/pi);
      cc:=arccos((a*a+c*c-b*b)/(2*a*c)); cc:=cc*(180/pi);
      n:=round(180/(find(find(aa,bb),cc)));
      writeln((n*r*r*sin(2*pi/n))/2:0:10);
     end.

uses math;
var   www,eps,x1,y1,x2,y2,p,a,b,c,pl,al,xl,xr,c1,c2,xx,yy:extended;
      x,y,l:Array[0..10]of extended;
      n,i,j,it:longint;
      ok:boolean;
      a1,b1,a2,b2:extended;
function r(x,y:extended):boolean;
begin
 if abs(x-y)<1e-9 then r:=true
  else r:=false;
end;

function alpha(x,y:extended):extended;
begin
 if (x=0)and(y=0) then alpha:=0
 else
 if x=0 then
  begin
   if y>0 then alpha:=pi/2
    else alpha:=pi+pi/2;
  end
 else
   begin
     if (x>0)and(y>0) then alpha:=arctan(y/x)
     else if (x>0)and(y<0) then alpha:=arctan(y/x)+2*pi
     else if (x<0) then alpha:=arctan(y/x)+pi;
   end;
end;

function dist(x1,y1,x2,y2:extended):extended;
begin
 dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function calc(xx,yy:extended):extended;
var i:longint;
    min,max,w:extended;
begin
 max:=0;
 for i:=1 to 3 do
  begin
   w:=dist(xx,yy,x[i],y[i]);
   w:=abs(w-p);
   if w>max then max:=w;
  end;
 calc:=max;
end;

function search(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-8000;
  yr:=8000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)<=calc(x,c2) then yr:=c2
       else yl:=c1;
    end;

  yy:=yl;

  search:=calc(x,yy);
end;

function search2(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-10000;
  yr:=10000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)<=calc(x,c2) then yr:=c2
       else yl:=c1;
    end;

  yy:=yl;

  search2:=calc(x,yy);
end;

 begin
    n:=3;
    for i:=1 to n do
      read(x[i],y[i]);

    a:=dist(x[1],y[1],x[2],y[2]);
    b:=dist(x[2],y[2],x[3],y[3]);
    c:=dist(x[1],y[1],x[3],y[3]);

    p:=a+b+c;
    p:=p/2;

    p:=sqrt(p*(p-a)*(p-b)*(p-c));

    p:=a*b*c/(4*p);

    xl:=-8000;
    xr:=8000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)<=search(c2) then xr:=c2
           else xl:=c1;
     end;

    xx:=xl;
    search(xx);

    for i:=1 to n do
      begin
         x[i]:=x[i]-xx;
         y[i]:=y[i]-yy;
      end;

    a:=dist(0,0,x[1],y[1]);
    b:=dist(0,0,x[2],y[2]);
    c:=dist(0,0,x[3],y[3]);

    if (not r(a,p))or(not r(b,p))or(not r(c,p)) then
     begin
     for i:=1 to n do
      begin
       x[i]:=x[i]+xx;
       y[i]:=y[i]+yy;
      end;

    xl:=-10000;
    xr:=10000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)<=search(c2) then xr:=c2
           else xl:=c1;
     end;

    xx:=xl;
    search2(xx);
         for i:=1 to n do
          begin
           x[i]:=x[i]-xx;
           y[i]:=y[i]-yy;
          end;
     end;

    for i:=1 to n do
         l[i]:=alpha(x[i],y[i]);

    eps:=1e-5;

    for n:=3 to 101 do
     begin

        ok:=true;

        for i:=1 to 3 do
         for j:=i+1 to 3 do
          begin
             al:=abs(l[i]-l[j]);
             if abs(sin(n*al/2))>eps then
              begin
               ok:=false;
               break;
              end;
          end;
        al:=(2*pi)/n;
        if ok then
         begin
            a:=dist(0,0,x[1],y[1]);
            b:=a;
            c:=sqrt(a*a+b*b-2*a*b*cos(al));
            p:=a+b+c;
            p:=p/2;
            p:=sqrt(p*(p-a)*(p-b)*(p-c));
            writeln(p*n:0:6);
            halt(0);
         end;
     end;
end.

Uses math;
var n:longint;
    ns,ans,k,p,ac,bc,cc,x3,y3,x1,y1,x2,y2,a,b,c,r,s:extended;
function dist(x1,y1,x2,y2:extended):extended;
 begin
  exit(sqrt(sqr(x1-x2)+sqr(y1-y2)));
 end;
function nsd(x,y:extended):extended;
 begin
  while(abs(x)>0.0001)and(abs(y)>0.0001)do
   if(x>y)then x:=x-trunc(x/y)*y
          else y:=y-trunc(y/x)*x;
  exit(x+y);
 end;
 begin
  read(x1,y1);
  read(x2,y2);
  read(x3,y3);
  a:=dist(x1,y1,x2,y2);
  b:=dist(x2,y2,x3,y3);
  c:=dist(x3,y3,x1,y1);
  p:=(a+b+c)/2;
  s:=sqrt(p*(p-a)*(p-b)*(p-c));
  r:=(a*b*c)/(4*s);
  ac:=arccos((b*b+c*c-a*a)/(2*b*c));
  bc:=arccos((a*a+c*c-b*b)/(2*a*c));
  cc:=arccos((a*a+b*b-c*c)/(2*a*b));
  k:=(pi/nsd(ac,nsd(bc,cc)));
  ans:=k/2*r*r*sin(2*pi/k);
  writeln(ans:0:6);
 end.

{$Q+,R+,S+}
{$APPTYPE CONSOLE}

uses SysUtils;

type real = extended;

const eps: real = 1e-4;

type  tpoint = record x, y: real; end;
      tline = record a, b, c: real; end;

var a, b, c: tpoint;

procedure readData;
begin
  read(a.x, a.y, b.x, b.y, c.x, c.y)
end;

function plus(a, b: tpoint): tpoint;
begin
  result.x := a.x + b.x; result.y := a.y + b.y
end;

function eq(a, b: real): boolean;
begin
  result := abs(a-b) < eps
end;

function eqp(a, b: tpoint): boolean;
begin
  result := eq(a.x, b.x) and eq(a.y, b.y)
end;

function work(s, d: tpoint; ang: integer): boolean;
var f1, f2, f3: boolean;
    now, next: tpoint;
    x: real;
    i: integer;
begin
  f1 := false; f2 := false; f3 := false;
  now := plus(s, d); x := 2 * Pi / ang;
  for i := 1 to ang do begin
    f1 := f1 or eqp(now, a); f2 := f2 or eqp(now, b); f3 := f3 or eqp(now, c);
    next.x := s.x + (now.x-s.x)*cos(x) + (now.y-s.y)*(-sin(x));
    next.y := s.y + (now.x-s.x)*sin(x) + (now.y-s.y)*cos(x);
    now := next;
  end;
  result := f1 and f2 and f3;
end;

function getl(a, b: tpoint): tline;
begin
  result.a := a.y-b.y;
  result.b := b.x-a.x;
  result.c := result.a*a.x + result.b*a.y
end;

function getc(a, b: tline): tpoint;
begin
  result.x := (a.c*b.b-a.b*b.c) / (a.a*b.b-a.b*b.a);
  result.y := (a.a*b.c-a.c*b.a) / (a.a*b.b-a.b*b.a)
end;

function getp(l: tline; a, b: tpoint): tline;
var p: tpoint;
begin
  result.a := -l.b;
  result.b := l.a;
  p.x := (a.x+b.x)/2; p.y := (a.y+b.y)/2;
  result.c := result.a*p.x + result.b*p.y
end;

var r: real;

function solve: integer;
var l1, l2, p1, p2: tline; x, d: tpoint; i: integer;
begin
  l1 := getl(a, b); l2 := getl(b, c);
  p1 := getp(l1, a, b); p2 := getp(l2, b, c);
  x := getc(p1, p2);
  d.x := a.x - x.x; d.y := a.y - x.y;
  r := d.x*d.x+d.y*d.y;
  for i := 3 to 100 do
    if work(x, d, i) then begin result := i; break end;
end;

procedure save(x: integer);
begin
  write(x*0.5*r*sin(2*Pi/x):0:6)
end;

var i, n: integer;
begin
  {assign(input, 'input.txt'); reset(input);
  assign(output, 'output.txt'); rewrite(output);}
  readData; save(solve);
  {close(output);
  close(input);}
end.

program Project1_C;
{$APPTYPE CONSOLE}
const eps=0.1;
var i,j,k:longint;
    x1,y1,x2,y2,x3,y3,a,b,c,aa,bb,cc:extended;
function rast(x1,y1,x2,y2:extended):extended;
begin
  result:=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
end;
begin
 // reset(input,'input.txt');
 // rewrite(output,'output.txt');
  read(x1,y1,x2,y2,x3,y3);
  a:=rast(x1,y1,x2,y2);
  b:=rast(x1,y1,x3,y3);
  c:=rast(x2,y2,x3,y3);

  for i:=3 to 100 do
    for j:=1 to i-1 do
      for k:=1 to i-1 do
        begin
          if j=k then continue;
          aa:=rast(1,0,cos(2*pi*j/i),sin(2*pi*j/i));
          bb:=rast(1,0,cos(2*pi*k/i),sin(2*pi*k/i));
          cc:=rast(cos(2*pi*j/i),sin(2*pi*j/i),cos(2*pi*k/i),sin(2*pi*k/i),);
          if (a*bb<aa*b+eps)and(b*cc<bb*c+eps)and(a*cc<aa*c+eps)and
             (a*bb+eps>aa*b)and(b*cc+eps>bb*c)and(a*cc+eps>aa*c)then
            begin
              write((i*sin(2*pi/i)/2)*(a/aa):0:7);
              halt(0);
            end;
        end;
end.

uses math;
const
        nmax    =       100;
        e       =       1e-5;
type
        point = record
          x,y:real;
        end;
var
        n,m:longint;
        res,R,S:extended;
        leng,goc:array[0..5] of extended;
        p:array[0..4] of point;
procedure nhap;
var i,j,u,v:longint;
begin
        for i:=1 to 3 do
         readln(p[i].x,p[i].y);
        p[4]:=p[1];
end;
function get(u,v:extended;m:longint):boolean;
var i:longint;
begin
        for i:=1 to m do if abs(i*u-v)<=e then exit(true);
        exit(false);
end;
procedure xuly;
var i,j,v:longint;
u:extended;
check:boolean;
begin
        res:=1000000000;
        for i:=1 to 3 do
          S:=S+(p[i].x-p[i+1].x)*(p[i].y+p[i+1].y);
        S:=abs(S)*2;
        R:=1;
        for i:=1 to 3 do Leng[i]:=sqrt(sqr(p[i].x-p[i+1].x)+sqr(p[i].y-p[i+1].y));
        for i:=1 to 3 do R:=R*Leng[i];
        R:=R/S;
        for i:=1 to 3 do
          goc[i]:=arccos((2*R*R-Leng[i]*Leng[i])/(2*R*R));
        for i:=3 to 100 do

          begin
          check:=true;
            u:=2*pi/i;
            for j:=1 to 3 do if not get(u,goc[j],i) then
              begin
               check:=false;
               break;
              end;
            if not check then continue;
            res:=min(res,(i*R*R*sin(u))/2);
          end;
        writeln(res:0:8);
end;
begin
        assign(input,'');reset(input);
        assign(output,'');rewrite(output);
          nhap;
          xuly;
        close(input);
        close(output);
end.

uses math;
const eps=0.00001;

var x1,x2,x3,y1,y2,y3,x4,y4,x5,y5: double;
      R, S,a,b,c, aa, bb, cc,f1,f2,f3,fi: double;
       n: integer;

function dlin(xa,ya, xb,yb: double):double;
var res: double;
begin
  dlin:=sqrt(sqr(xb-xa)+sqr(yb-ya));
end;

function ugol(x,y,z: double): double;
begin
 ugol:=arccos((sqr(y)+sqr(z)-sqr(x))/(2*y*z));
end;

function radius(x,y,z: double): double;
var p,r: double;
begin
   p:=(x+y+z)/2;
   r:=x*y*z/4/sqrt(p*(p-x)*(p-y)*(p-z));
   radius:=r;
end;

function plotsha(r, m: double): double;
begin
  plotsha:=M*0.5*r*r*sin(2*Pi/M);
end;

begin
    readln(x3,y3);
    readln(x1,y1);
    readln(x2,y2);

    a:=dlin(x2,y2, x3,y3);
    b:=dlin(x1,y1, x2,y2);
    c:=dlin(x1,y1, x3,y3);

    aa:=ugol(a, b,c);
    bb:=ugol(b, a,c);
    cc:=ugol(c, a,b);

   f1:=2*aa;  f2:=2*bb;   f3:=2*cc;

   N:=3;
   while N<=102 do
   begin

     fi:=2*Pi/N;
     if  (abs(round(f1/fi)-f1/fi)<eps) and (abs(round(f2/fi)-f2/fi)<eps)     then  break
        else inc(n);

   end;

   R:=radius(a,b,c);
   S:=plotsha(R, N);
  { writeln(N);
   writeln(r:0:8);}
   writeln(S:0:12);
end.

program prC;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Math;

type point = record
    x, y: real;
end;

type vector = record
    x, y: real;
end;

const eps = 0.00001;

function eq(a, b: real): boolean;
begin
  result := abs(a - b) < eps;
end;

function p2v(a, b: point): vector;
begin
  result.x := b.x - a.x;
  result.y := b.y - a.y;
end;

function scal_proizv(a, b: vector): real;
begin
  result := a.x * b.x + a.y * b.y;
end;

function vect_proizv(a, b: vector): real;
begin
  result := a.x * b.y - a.y * b.x;
end;

function find_ug(v1, v2: vector): real;
begin
  result := arctan2(vect_proizv(v1, v2), scal_proizv(v1, v2));
end;

function dist(a, b: point): real;
begin
  result := sqrt(sqr(a.x - b.x) + sqr(a.y - b.y));
end;

var a, b, c: point;
    r, d1, d2, curr, t1, t2, ans: real;
    i, tmp1, tmp2: longint;

begin
//reset(input, 'input.txt');rewrite(output, 'output.txt');
  read(a.x, a.y, b.x, b.y, c.x, c.y);
  d1 := 2 * find_ug(p2v(a, b), p2v(a, c));
  d2 := 2 * find_ug(p2v(c, a), p2v(c, b));
  r := dist(a, b) / (sin(d2 / 2) * 2);
  for i := 3 to 100 do
  begin
    t1 := i;
    curr := 2 * pi / t1;
    t1 := d1 / curr;
    t2 := d2 / curr;
    tmp1 := round(t1);
    tmp2 := round(t2);
    if eq(tmp1, t1)and(eq(tmp2, t2))then
    begin
      ans := i;
      break;
    end;
  end;
  ans := sqr(r) * sin(curr) * ans / 2;
  writeln(ans: 0: 7)
end.

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;
const
  delta=0.0001;
var
  x1, y1, x2, y2, x3, y3 : double;
  vx1, vy1, vx2, vy2, vx3, vy3 : extended;
  alpha, beta, gamma, sigma, R, S : extended;
  n : integer;

begin

  readln(x1,y1);
  readln(x2,y2);
  readln(x3,y3);
                                      {

 x1:=71.756151; y1:= 7.532275;
 x2:=-48.634784; y2:=100.159986;
 x3:=91.778633; y3:=158.107739;
                                      }

  vx1:=x2-x1; vy1:=y2-y1;
  vx2:=x3-x1; vy2:=y3-y1;
  vx3:=x3-x2; vy3:=y3-y2;

  alpha:=2*arccos((vx1*vx2+vy1*vy2)/sqrt(vx1*vx1+vy1*vy1)/sqrt(vx2*vx2+vy2*vy2));
  beta :=2*arccos((vx1*vx3+vy1*vy3)/sqrt(vx1*vx1+vy1*vy1)/sqrt(vx3*vx3+vy3*vy3));
  gamma:=2*arccos((vx2*vx3+vy2*vy3)/sqrt(vx2*vx2+vy2*vy2)/sqrt(vx3*vx3+vy3*vy3));

  R:=sqrt(vx3*vx3+vy3*vy3)/2/sin(alpha/2);

  for n:=3 to 500 do
  begin
    sigma:=2*pi/n;
    if abs((alpha/sigma)-round(alpha/sigma))>delta then continue;
    if abs((beta/sigma)-round(beta/sigma))>delta then continue;
    if abs((gamma/sigma)-round(gamma/sigma))>delta then continue;
    S:=0.5*R*R*sin(sigma)*n;
    writeln(s:0:15);
    break;
  end;
end.

const s3_5 = -0.44252044;
      fin = 'stdin';
      fout = 'stdout';
var x1,x2,x3,y1,y2,y3,r,a,b,c,u1,u2,u3,u0,res1,res2,res3:real;
    i:integer;
function getL(x1,y1,x2,y2:real):real;
begin
  getL := sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
function ArcCos ( X : real): real;
var tmpArcCos : real;
begin
  if X = 0.0 then { from devide by zerp }
    tmpArcCos := Pi / 2.0
  else
    tmpArcCos := ArcTan ( Sqrt ( 1 - X * X ) / X );

  if X < 0.0 then
    tmpArcCos := Pi - tmpArcCos;

  ArcCos := tmpArcCos;
end;

function ArcSin ( X : real ): real;
begin
if X = 1.0 then { from devide by zero }
ArcSin := Pi / 2.0
else
ArcSin := ArcTan ( X / Sqrt ( 1 - X * X ) );
end;
function _round(x:real;i:integer):real;
begin
  _round:=round(x*exp(i*ln(10)))/exp(i*ln(10));
end;
function getU(a,r:real):real;
var x :real;
begin
  x := a/(2*r);
  getU:=arcsin(x);
end;
Begin
  //assign(input,fin);
  //assign(output,fout);
  //reset(input);
  //rewrite(output);

  readln(x1,y1);
  readln(x2,y2);
  readln(x3,y3);
  a := getL(x1,y1,x2,y2);
  b := getL(x2,y2,x3,y3);
  c := getL(x3,y3,x1,y1);
  r := a*b*c/sqrt((a+b+c)*(-a+b+c)*(a+b-c)*(a-b+c));
  u1 := getU(a,r)*2;
  u2 := getU(b,r)*2;
  u3 := getU(c,r)*2;
  for i := 3 to 100 do
  begin
    u0:=2*Pi/i;
    res1 := u1/u0;
    res2 := u2/u0;
    res3 := u3/u0;
    if (
        (_round(res1,5)=int(res1+0.00001))
    and (_round(res2,5) = int(res2+0.00001))
    and (_round(res3,5) = int(res3+0.00001))
    ) then
    begin
      writeln(_round(sqr(r)*sin(u0)*0.5*i,6):0:6);
      break;
    end;
  end;
  //writeln(i);
  //close(input);
  //close(output);
End.

const
  eps=1e-5;

var
  res,sc,lc,hc,ax,ay,x1,y1,x2,y2,x3,y3,a1,b1,c1,a2,b2,c2,x,y,a,ca,r:extended;
  j,kol,i:longint;

  procedure cross(a1,b1,c1,a2,b2,c2:extended;var x,y:extended);
    var
      d,dx,dy:extended;

    begin
      d:=a1*b2-a2*b1;
      dx:=c1*b2-b1*c2;
      dy:=a1*c2-c1*a2;
      x:=-dx/d;
      y:=-dy/d;
    end;

  function dist(x1,y1,x2,y2:extended):extended;
    begin
      dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    end;

begin
 {
  assign(input,'input.txt');
  reset(input);
  assign(output,'output.txt');
  rewrite(output);
 }

  read(x1,y1,x2,y2,x3,y3);
//finding center
  a1:=x2-x1;
  b1:=y2-y1;
  c1:=-a1*(x1+x2)/2-b1*(y1+y2)/2;

  a2:=x3-x2;
  b2:=y3-y2;
  c2:=-a2*(x2+x3)/2-b2*(y2+y3)/2;
  cross(a1,b1,c1,a2,b2,c2,x,y);
//
  x1:=x1-x;y1:=y1-y;
  x2:=x2-x;y2:=y2-y;
  x3:=x3-x;y3:=y3-y;
  r:=sqrt(x1*x1+y1*y1);
  if (abs(x1)<eps)then begin
    x:=x1;x1:=x2;x2:=x;
    y:=y1;y1:=y2;y2:=y;
  end;
  if (abs(x1)<eps)then begin
    x:=x1;x1:=x3;x3:=x;
    y:=y1;y1:=y3;y3:=y;
  end;
  a:=y1/x1;
  a:=abs(arctan(a));
  if (y1<0)and(x1<0)then a:=pi+a;
  if (y1<0)and(x1>0)then a:=2*pi-a;
  if (y1>0)and(x1<0)then a:=pi-a;
//  while (a<0)do a:=a+2*pi;
  ca:=a;
  res:=1e9;
  for i:=3 to 1000 do begin
    a:=ca;
    kol:=0;
    for j:=1 to i do begin
      ax:=r*cos(a);
      ay:=r*sin(a);
      if (abs(ax-x1)<eps)and(abs(ay-y1)<eps)then inc(kol)else
      if (abs(ax-x2)<eps)and(abs(ay-y2)<eps)then inc(kol)else
      if (abs(ax-x3)<eps)and(abs(ay-y3)<eps)then inc(kol);
      a:=a+2*pi/i;
    end;
    if (kol<3)then continue;
    a:=2*pi/i;
    lc:=dist(r*sin(ca),r*cos(ca),r*sin(ca+a),r*cos(ca+a))/2;
    hc:=sqrt(r*r-lc*lc);
    sc:=hc*lc*i;
    if (sc<res)then res:=sc;
    break;
  end;
  writeln(res:0:10);
{
  close(input);
  close(output);
}
end.

uses
  SysUtils, Math;
var
  a, b, c, d, e, f:extended;
  x, y, z:extended;
  S, R, cosy, siny:extended;
  n:integer;
function pr(kin:extended):extended;
begin
  pr:=sqrt(1-kin*kin);
end;
function dlc(a,b,cosy:extended):extended;
begin
  dlc:=sqrt(a*a+b*b-2*a*b*cosy);
end;
function pt(n:integer):boolean;
var
  i, k:integer;
  q: extended;
begin
  k:=0;
  For i:=1 to n div 2 do
  begin
    q:=dlc(R, R, cos((2*Pi*i)/(n)));
    if abs(q-x)<10*1e-6 then
      inc(k);
    if abs(q-y)<10*1e-6 then
      inc(k);
    if abs(q-z)<10*1e-6 then
      inc(k);
  end;
  if k=3 then
    pt:=true
  else
    pt:=false;
end;
begin
  Read(a,b,c,d,e,f);
  x:=sqrt(sqr(a-c)+sqr(b-d));
  y:=sqrt(sqr(a-e)+sqr(b-f));
  z:=sqrt(sqr(c-e)+sqr(d-f));
  cosy:=(x*x+y*y-z*z)/(2*x*y);
  siny:=pr(cosy);
  S:=abs(x*y*siny/2);
  R:=(x*y*z)/(4*S);
  n:=3;
  while (pt(n)=false) do
    inc(n);
  Writeln(n*R*R*sin(2*Pi/n)/2:0:10);
end.

uses math;
type dot=record x,y:double; end;
var
  a,b,c:dot;
  i:longint;
  r,dw,ans,af,bt,aa,bb,cc:double;
function dis(a,b:dot):double;
begin
  dis:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

begin
  read(a.x,a.y,b.x,b.y,c.x,c.y);
  aa:=dis(b,c); bb:=dis(a,c); cc:=dis(a,b);
  af:=arccos((aa*aa+bb*bb-cc*cc)/(2*aa*bb))*2;
  bt:=arccos((aa*aa+cc*cc-bb*bb)/(2*aa*cc))*2;

  r:=cc*0.5/(sin(af*0.5));

  for i:=1 to 101 do begin
    dw:=2*pi/i;
    if abs(round(af/dw)-af/dw)<1e-4 then
    if abs(round(bt/dw)-bt/dw)<1e-4 then begin
      ans:=r*r*sin(dw)*i/2;
      writeln(ans:0:12);
      halt;
    end;
  end;
end.

program P1C;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, Math
  { you can add units after this };
var
  i: Integer;

type
  TPoint= record
    x, y: Extended;

  end;

function Distance (P1, P2: TPoint): Extended;
begin
  Result:= Sqrt (Sqr (P1.x- P2.x)+ Sqr (P1.y- P2.y));

end;

function SubtractPoint (A, B: TPoint): TPoint;
begin
  Result:= A;
  Result.x-= B.x;
  Result.y-= B.y;

end;

function GetDistance (A, B: TPoint): Extended;
begin
  Result:= Sqrt (Sqr (A.x- B.x)+ Sqr (A.y- B.y));

end;

function GetAngle (A, B, C: TPoint): Extended;

  function _GetAngle (C: TPoint): Extended;{C, (0,0), (1, 0)}
  begin
    Result:= ArcCos (C.x/ Sqrt (Sqr (C.x)+ Sqr (C.y)));

    if C.y< 0 then
      Result:= 2* Pi- Result;

  end;
var
  aa, bb, cc: Extended;
  d: Extended;

begin
  Result:= _GetAngle (SubtractPoint (A, B))- _GetAngle (SubtractPoint (C, B));
  if Result< 0 then
    Result+= 2* Pi;

  cc:= GetDistance (A, B);
  bb:= GetDistance (A, C);
  aa:= GetDistance (B, C);

  d:= arccos ((aa*aa+cc*cc-bb*bb)/(2*aa*cc));
  if (1e-6< Abs (Result- d)) and
     (1e-6< Abs (Result- 2* Pi+ d)) then
       WriteLn ('Error');

//  Result:= d;
end;

function CirclePassing (P1, P2, P3: TPoint): TPoint;
var
  x, y: array [0..3] of Extended;
  x1, y1, dy1, dx1: Extended;
  x2, y2, dy2, dx2: Extended;

begin
  x [1]:= P1.x; x [2]:= P2.x; x [3]:= P3.x;
  y [1]:= P1.y; y [2]:= P2.y; y [3]:= P3.y;

  x1:= (x [2] + x [1]) / 2;
  y1:= (y [2] + y [1]) / 2;
  dy1:= x [2]- x [1];
  dx1:= -(y [2]- y [1]);

  x2:= (x [3] + x [2]) / 2;
  y2:= (y [3]+ y [2]) / 2;
  dy2:= x [3] - x [2];
  dx2:= -(y [3]- y [2]);

  Result.x:= (y1 * dx1 * dx2 + x2 * dx1 * dy2 - x1 * dy1 * dx2 - y2 * dx1 * dx2)/ (dx1 * dy2 - dy1 * dx2);
  Result.y:= (Result.x - x1) * dy1 / dx1 + y1;

{
  WriteLn ('A:', Distance (Result, P1), ' * ', Distance (Result, P2));
  WriteLn ('B:', Distance (Result, P1), ' * ', Distance (Result, P3));
}

end;

var
  P: array [0..4] of TPoint;

function Solve: Extended;

var
  Center: TPoint;
  Angles: array [0..2] of Extended;
  Ang: Extended;
  n, i: Integer;
  Flag: Boolean;
  Radius: Extended;

begin
  Center:= CirclePassing (P [1], P [2], P [3]);
  Radius:= Distance (Center, P [1]);
  Assert (1e-6< Abs (Radius- Distance (Center, P [2])));
  Assert (1e-6< Abs (Radius- Distance (Center, P [3])));

  Angles [0]:= GetAngle (P [1], Center, P [2]);
//  Angles [0]:= GetAngle (P [2], Center, P [1]);
  Angles [1]:= GetAngle (P [1], Center, P [3]);
//  Angles [0]:= GetAngle (P [3], Center, P [1]);
  Angles [2]:= GetAngle (P [2], Center, P [3]);
//  Angles [0]:= GetAngle (P [3], Center, P [2]);

//  WriteLn (Angles [0]/ Pi* 180.0:0:3, ' ', Angles [1]/ Pi* 180.0:0:3, ' ', Angles [2]/ Pi* 180.0:0:3);
  for n:= 2 to 360 do
  begin
    Ang:= 2* Pi/ n;
    Flag:= True;
    for i:= 0 to 2 do
      if 1e-4< Abs (Round (Angles [i]/ Ang)- Angles [i]/ Ang) then
        Flag:= False;

    if Flag then
    begin
      Result:= n* Sqr (Radius)* Sin (Ang)/ 2.0;
      Exit;

    end;

  end;

end;

begin
  {
  AssignFile (Input, 'Input.txt');
  Reset(Input);
   }
  for i:= 1 to 3 do
    ReadLn (P [i].X, P [i].y);

  WriteLn (Solve:0:6);
//  WriteLn (Solve1:0:6);
end.

program problemC;
uses Crt;
var
   infile, outfile: text;
   x1, y1, x2, y2, x3, y3: real;
   a, b, c, S, R, p: real;
   bettaRad, gammaRad, tettaRad: real;
   bettaGrad, gammaGrad, tettaGrad: real;
   n, i, j, k: integer;
   angle: real;
   deltaBetta, deltaGamma, deltaTetta: real;
   flag1, flag2, flag3, breakflag: boolean;
begin
     ClrScr;
     assign(infile, '');
     assign(outfile, '');
     reset(infile);
     readln(infile, x1, y1);
     readln(infile, x2, y2);
     readln(infile, x3, y3);
     close(infile);
     a := sqrt(sqr(y2-y1) + sqr(x2-x1));
     b := sqrt(sqr(y3-y2) + sqr(x3-x2));
     c := sqrt(sqr(y3-y1) + sqr(x3-x1));
     p := 0.5*(a+b+c);
     S := sqrt(p*(p-a)*(p-b)*(p-c));
     R := (a*b*c)/(4*S);

     if round((2*R*1000000)-(a*1000000))=0 then
        bettaRad := pi
     else
        bettaRad := 2*arctan((a/(2*R))/sqrt(1-sqr(a/(2*R))));

     if round((2*R*1000000)-(b*1000000))=0 then
        gammaRad := pi
     else
        gammaRad := 2*arctan((b/(2*R))/sqrt(1-sqr(b/(2*R))));

     if round((2*R*1000000)-(c*1000000))=0 then
        tettaRad := pi
     else
        tettaRad := 2*arctan((c/(2*R))/sqrt(1-sqr(c/(2*R))));

     bettaGrad := bettaRad*180/pi;
     gammaGrad := gammaRad*180/pi;
     tettaGrad := tettaRad*180/pi;

     rewrite(outfile);

     flag1 := false;
     flag2 := false;
     flag3 := false;
     breakflag := false;
     k := 3;
     for i := 0 to 97 do
     begin
          angle := 360/k;
          for j := 1 to 50 do
          begin
              deltaBetta := angle * j - bettaGrad;
              deltaGamma := angle * j - gammaGrad;
              deltaTetta := angle * j - tettaGrad;
              if (abs(deltaBetta)>=0) and (abs(deltaBetta)<0.001) then
              begin
                   flag1 := true;
              end;
              if (abs(deltaGamma)>=0) and (abs(deltaGamma)<0.001) then
              begin
                   flag2 := true;
              end;
              if (abs(deltaTetta)>=0) and (abs(deltaTetta)<0.001) then
              begin
                   flag3 := true;
              end;
              if (flag1=true) and (flag2=true) and (flag3=true) then
              begin
                   n := k;
                   breakflag := true;
                   break;
              end;
          end;
          if breakflag = true then break;
          k := k + 1;
     end;

     S := n/2*sqr(R)*sin(2*pi/n);
     writeln(outfile, S:0:6);

     close(outfile);
end.

{$APPTYPE CONSOLE}
uses Math;

Type
  point = record
    x, y: extended;
  end;
var
  n, i, j, k: integer;
  a, b, c, s, r, p, alpha1, alpha2, alpha3, alpha: extended;
  a1, a2, a3: point;

function Dist(a, b: point): extended;
begin
  Result := sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
end;

function check(a, b: extended): boolean;
begin
  Result := abs(a / b - round(a/b)) <= 1e-5;
end;

begin
  {reset(input, 'input.txt');
  rewrite(output, 'output.txt');    }

  read(a1.x, a1.y, a2.x, a2.y, a3.x, a3.y);

  a := dist(a1, a2);
  b := dist(a2, a3);
  c := dist(a3, a1);

  p := (a + b + c) / 2;

  s := sqrt(p * (p - a) * (p - b) * (p - c));

  r := a * b * c / (4 * s);

  alpha1 := arccos((2 * r * r - a * a) / (2 * r * r));
  alpha2 := arccos((2 * r * r - b * b) / (2 * r * r));
  alpha3 := arccos((2 * r * r - c * c) / (2 * r * r));

  for i := 3 to 1000 do
  begin
    alpha := 2 * pi / i;

    if check(alpha1, alpha) and check(alpha2, alpha) and check(alpha3, alpha) then
    begin
      a := r * cos(alpha / 2);
      b := r * sin(alpha / 2);
      s := a * b * i;
      write(s:0:6);
      Halt(0);
    end;
  end;
end.

uses math;
const eps:double=1e-5;
type pixel=record
        x,y:double;
    end;
var  i:byte;
  ans, r,dw,ac,bc:double;
  a:array of pixel;
  d:array of double;
function len(p1,p2:pixel):double;
begin
  result:=sqrt(sqr(p1.x-p2.x)+sqr(p1.y-p2.y))
end;
function arc(a,b,c:double):double;
begin
  result:=arccos((a*a+b*b-c*c)/(2*a*b))*2
end;
function AbsEps(a,b,ep:double):boolean;
begin
  result:= abs(round(a/b)-a/b)<ep
end;
begin
    setlength(a,3); setlength(d,3);
    for i:= 0 to 2 do readln(a[i].x, a[i].y);
    for i:= 0 to 2 do d[i]:=len(a[i], a[(i+1) mod 3]);
    a:=nil;
    ac:=arc(d[1],d[2],d[0]);
    bc:=arc(d[1],d[0],d[2]);
    r:=d[0]*0.5/(sin(ac*0.5));
    d:=nil;
    for i:=1 to 101 do
        begin
        dw:=2*pi/i;
        if AbsEps(ac,dw, eps) and AbsEps(bc, dw, eps) then
            begin
                writeln(r*r*sin(dw)*i/2:0:7);
                break
            end
        end
end.

{xn times I don't solove this task}
const fo='';
      fi='';
var   a,b,c,d,e,f,n,m,alpha,beta,r,c1,c2,c3,n_o: real;
      f1,f2: text;
procedure doc;
 begin
  assign(f1,fo); reset(f1);
  assign(f2,fi); rewrite(f2);
  readln(f1,a,b);readln(f1,c,d); readln(f1,e,f);
  close(f1);
 end;
function dt(x,y,z,t: real): real;
 begin
  dt:=x*t-y*z;
 end;
procedure findcI;
 var dx,dy,dz: real;
  begin
   dz:=dt(e-a,f-b,e-c,f-d);
   dx:=dt((e-a)*(a+e)/2+(f-b)*(b+f)/2,f-b,(e-c)*(c+e)/2+(f-d)*(d+f)/2,f-d);
   dy:=dt(e-a,(e-a)*(a+e)/2+(f-b)*(b+f)/2,e-c,(e-c)*(c+e)/2+(f-d)*(d+f)/2);
   if (dz<>0) then
    begin
     n:=dx/dz;
     m:=dy/dz;
    end;
  end;
function lengthc(x,y,z,t: real): real;
 begin
  lengthc:=sqrt(sqr(x-z)+sqr(y-t));
 end;
procedure tinhcanh;
 begin
  c1:=lengthc(a,b,c,d);
  c2:=lengthc(a,b,e,f);
  c3:=lengthc(c,d,e,f);
  r:= lengthc(n,m,a,b);
 end;
procedure tinhgoc;
var sinalpha,sinbeta,x,y,cosalpha,cosbeta: real;
 begin
  if (c1>=c2) and (c1>=c3) then
   begin
    x:=c2; y:=c3;
   end
   else if (c2>=c1) and (c2>=c3) then
    begin
     x:=c1; y:=c3;
    end
    else if (c3>=c1) and (c3>=c2) then
     begin
      x:=c1; y:=c2;
     end;
  cosalpha:=1-(x*x)/(2*r*r);
  cosbeta:=1-(y*y)/(2*r*r);
  sinalpha:=sqrt(1-sqr(cosalpha));
  sinbeta:=sqrt(1-sqr(cosbeta));
  alpha:=arctan(sinalpha/cosalpha);
  beta:=arctan(sinbeta/cosbeta);
 while alpha<0 do alpha:=alpha+pi;
 while beta<0 do beta:=beta+pi;
 end;
procedure load;
 var i,j: word;
     re: real;
  begin
   re:=alpha;
   if alpha<beta then
    begin
     alpha:=beta;
     beta:=re;
    end;
   for i:=1 to 100 do
    for j:=1 to 100 do
     if (abs(alpha/i-beta/j)<=0.00001) then
      begin
       re:=(2*pi)/((beta+alpha)/(j+i));
       if abs(re-round(re))<=0.0001 then n_o:=round(re)
       else continue;
       exit;
      end;
   end;
 {=====hello=======}
procedure main;
 begin
  writeln(f2,(1/2*sin(2*pi/(n_o))*r*r*n_o):4:6);
  close(f2);
 end;
begin
 doc;
 findcI;
 tinhcanh;
 tinhgoc;
 load;
 main;
end.

uses math;
const eps=1e-5;
type tp=record x,y:extended; end;
var
  a:array[1..4]of tp;
  i,j:longint;
  co:array[1..3]of extended;
  rr:extended;
  ff:boolean;
function xl(i,j:LONgiNT):tp;
begin
  xl.x:=a[j].x-a[i].x;
  xl.y:=a[j].y-a[i].y;
end;

function dx(x,y:tp):extended;
begin
  dx:=x.x*y.x+x.y*y.y;
end;

function cd(x:tp):extended;
begin
  cd:=sqrt(sqr(x.x)+sqr(x.y));
end;

begin
  //assign(input,'1.in');   reset(input);
  for i:=1 to 3 do
    readln(a[i].x,a[i].y);
  for i:=1 to 3 do
  begin
    a[4]:=a[1]; a[1]:=a[i]; a[i]:=a[4];
    co[i]:=dx(xl(1,2),xl(1,3))/cd(xl(1,2))/cd(xl(1,3));
    rr:=(cd(xl(2,3))/(sqrt(1-sqr(co[i])))/2);
    co[i]:=arccos(co[i])/pi;
  end;
  for i:=3 to 100 do
  begin
    ff:=true;
    for j:=1 to 3 do
      if abs(co[j]*i-round(co[j]*i))>eps then
        ff:=false;
    if ff then
    begin
      writeln(i*sin(2*pi/i)*sqr(rr)/2:0:6);
      halt;
    end;
  end;
end.

uses math;
const
        st = 100000;
type
  cord = record
        x:extended;
        y:extended;
  end;
var
aa,bb,cc,ac,bc,r,ug:extended;
nv,j:longint;
a,b,c:cord;
function dist(a,b:cord):extended;
        begin
                exit(sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)));
        end;
begin
{assign(input,'input.txt');
reset(input);
assign(output,'output.txt');
rewrite(output);   }
read(a.x,a.y,b.x,b.y,c.x,c.y);
aa:=dist(a,b);
bb:=dist(b,c);
cc:=dist(c,a);
ac:=arccos((aa*aa+bb*bb-cc*cc)/(2*aa*bb))*2;
bc:=arccos((bb*bb+cc*cc-aa*aa)/(2*bb*cc))*2;
r:=cc/(2*sin(ac/2));
j:=3;
while j<=102 do
        begin
                ug:=2*pi/j;
                if (abs(round(ac/ug)-ac/ug)<0.0001) and (abs(round(bc/ug)-bc/ug)<0.0001) then
                        begin
                            writeln(r*r*sin(ug)/2*j:0:6);
                            halt;
                        end;
                inc(j);
        end;
{close(input);
close(output);  }
end.

program problem3;
const eps = 1.0e-3;

type point = record
              x, y: real;
            end;

function arcSin( sin: real ): real;
begin
  if ( abs(sin-1.0) < sqr(eps) ) then
    arcSin := pi / 2
  else
    arcSin := arcTan( sin / Sqrt( 1 - sqr(sin) ) );
end;

var A, B, C: point;
    r, k, AB, AC, BC, p, AOB, AOC, BOC, S: real;
    n: longWord;

begin
  readln( A.x, A.y, B.x, B.y, C.x, C.y );

  AB := sqrt( sqr( A.x - B.x ) + sqr( A.y - B.y ) );
  AC := sqrt( sqr( A.x - C.x ) + sqr( A.y - C.y ) );
  BC := sqrt( sqr( C.x - B.x ) + sqr( C.y - B.y ) );

  p := ( AB + AC + BC ) / 2;
  r := ( AB * AC * BC ) / ( 4 * sqrt( p*(p-AB)*(p-AC)*(p-BC) ) );

  AOC := 2 * arcSin( AC / (2*r) );
  AOB := 2 * arcSin( AB / (2*r) );
  BOC := 2 * arcSin( BC / (2*r) );

  for n := 3 to 100 do
  begin
    k := 2 * pi / n;

    if ( ( frac( AOC / k ) < eps ) or ( (1-frac( AOC / k )) < eps ) ) and
       ( ( frac( AOB / k ) < eps ) or ( (1-frac( AOB / k )) < eps ) ) and
       ( ( frac( BOC / k ) < eps ) or ( (1-frac( BOC / k )) < eps ) ) then
    begin
      S := r * cos(k/2) * n * r * sin(k/2);
      writeln( S:0:12 );
      halt;
    end;
  end;
end.

Uses math;
Const
    Tfi =   '';
    Tfo =   '';
Var
    fi,fo   :   Text;
    x1,x2,x3,y1,y2,y3   :   Real;
Procedure Lam;
  Var
    S,a,b,c,R,aa,bb,cc,n,res,min1   :   real;
    i                           :   Integer;
  Begin
    a := sqrt(sqr(x2-x1) + sqr(y2-y1));
    b := sqrt(sqr(x2-x3) + sqr(y2-y3));
    c := sqrt(sqr(x3-x1) + sqr(y3-y1));
    bb := arccos((sqr(a) + sqr(c) - sqr(b))/(2*a*c))*2;
    cc := arccos((sqr(b) + sqr(a) - sqr(c))/(2*b*a))*2;
    r := c/(2*sin(cc/2));
    i := 3;
    while (i>0) and (i<105) do
      Begin
        min1 := 2*pi/i;
        If (abs(round(cc/min1) - cc/min1)<0.0001) and (abs(round(bb/min1)-bb/min1)<0.0001) then
          Begin
            res := r*r*sin(min1)*(i/2);
            i := -6;
          End;
        Inc(i);
      End;
    Writeln(fo,res:6:6);
  End;
Begin
  Assign(fi,tfi); Reset(fi);
  Assign(fo,tfo); Rewrite(fo);
    Readln(fi,x1,y1);
    Readln(fi,x2,y2);
    Readln(fi,x3,y3);
    Lam;
  Close(fi);
  Close(fo);
End.

USES MATH;
CONST
   fin='';
   fon='';
VAR
    n: LONGINT;
    x1,x2,x3,y1,y2,y3: EXTENDED;
    a,b,c,nuaP,S,r: EXTENDED;
    CosA,CosB,CosC: EXTENDED;
PROCEDURE BAT_DAU;
    BEGIN
        assign(input,fin);
        reset(input);
        assign(output,fon);
        rewrite(output);
    END;
PROCEDURE NHAP;
    BEGIN
        read(x1,y1);
        read(x2,y2);
        read(x3,y3);
    END;
FUNCTION TINH_TOAN(a,b: EXTENDED): EXTENDED;
    BEGIN
        while (ABS(a)>0.0001) and (ABS(b)>0.0001) do
        begin
            if(a>b)then a:=a-TRUNC(a/b)*b
            else b:=b-TRUNC(b/a)*a;
        end;
        EXIT(a+b);
    END;
PROCEDURE XU_LI_1;
    BEGIN
        a:=SQRT(SQR(x2-x1)+SQR(y2-y1));
        b:=SQRT(SQR(x3-x2)+SQR(y3-y2));
        c:=SQRT(SQR(x1-x3)+SQR(y1-y3));
    END;
PROCEDURE XU_LI_2;
    BEGIN
        nuaP:=(a+b+c)/2;
        S:=SQRT(nuaP*(nuaP-a)*(nuaP-b)*(nuaP-c));
        r:=(a*b*c)/(S*4);
    END;
PROCEDURE XU_LI_3;
    BEGIN
        CosA:=ARCCOS((b*b+c*c-a*a)/(2*b*c));
        CosB:=ARCCOS((a*a+c*c-b*b)/(2*a*c));
        CosC:=ARCCOS((a*a+b*b-c*c)/(2*a*b));
    END;
PROCEDURE XU_LI_CHINH;
    VAR tam1,tam2,heso,kq: EXTENDED;
    BEGIN
        tam1:=TINH_TOAN(CosB,CosC);
        tam2:=TINH_TOAN(CosA,tam1);
        heso:=pi/tam2;
        kq:=heso/2*r*r*sin(2*pi/heso);
        writeln(kq:0:6);
    END;
PROCEDURE CHUONG_TRINH;
    BEGIN
        NHAP;
        XU_LI_1;
        XU_LI_2;
        XU_LI_3;
        XU_LI_CHINH;
    END;
PROCEDURE KET_THUC;
    BEGIN
        close(input);
        close(output);
    END;
BEGIN
    BAT_DAU;
    CHUONG_TRINH;
    KET_THUC;
END.

program cf1c;
uses math;
type dot=record x,y:double; end;
var
  a,b,c:dot;
  i:longint;
  r,dw,ans,af,bt,aa,bb,cc:double;
function dis(a,b:dot):double;
begin
  dis:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

begin
  read(a.x,a.y,b.x,b.y,c.x,c.y);
  aa:=dis(b,c); bb:=dis(a,c); cc:=dis(a,b);
  af:=arccos((aa*aa+bb*bb-cc*cc)/(2*aa*bb))*2;
  bt:=arccos((aa*aa+cc*cc-bb*bb)/(2*aa*cc))*2;

  r:=cc*0.5/(sin(af*0.5));

  for i:=1 to 101 do begin
    dw:=2*pi/i;
    if abs(round(af/dw)-af/dw)<1e-4 then
    if abs(round(bt/dw)-bt/dw)<1e-4 then begin
      ans:=r*r*sin(dw)*i/2;
      writeln(ans:0:12);
      halt;
    end;
  end;
end.

program p1C;
uses math;
const eps:double=1e-5;
type pixel=record
        x,y:double;
    end;
var  i:byte;
  ans, r,dw,ac,bc:double;
  a:array of pixel;
  d:array of double;
function len(p1,p2:pixel):double;
begin
  result:=sqrt(sqr(p1.x-p2.x)+sqr(p1.y-p2.y))
end;
function arc(a,b,c:double):double;
begin
  result:=arccos((a*a+b*b-c*c)/(2*a*b))*2
end;
function AbsEps(a,b,ep:double):boolean;
begin
  result:= abs(round(a/b)-a/b)<ep
end;
begin
    setlength(a,3); setlength(d,3);
    for i:= 0 to 2 do readln(a[i].x, a[i].y);
    for i:= 0 to 2 do d[i]:=len(a[i], a[(i+1) mod 3]);
    a:=nil;
    ac:=arc(d[1],d[2],d[0]);
    bc:=arc(d[1],d[0],d[2]);
    r:=d[0]*0.5/(sin(ac*0.5));
    d:=nil;
    for i:=1 to 101 do
        begin
        dw:=2*pi/i;
        if AbsEps(ac,dw, eps) and AbsEps(bc, dw, eps) then
            begin
                writeln(r*r*sin(dw)*i/2:0:7);
                break
            end
        end
end.

var
x1,y1,x2,y2,x3,y3,x4,y4:double;
x5,x6,x7,x8,y5,y6,y7,y8:double;
a,b,c,ab,ac,bc,r:double;
s1,s2,s3:longint;
p1,p2,p3,p4,pi:double;

function vectorProizvedenie(ax,ay,bx,by:double):double;

begin
vectorProizvedenie:=ax*by-ay*bx;
end;

function rast(x1,y1,x2,y2:double):double;
begin
rast:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function ploshad(x1,y1,x2,y2,x3,y3:double):double;
var
p1,a,b,c:double;
begin
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x2,y2);
c:=rast(x1,y1,x3,y3);
p1:=(a+b+c)/2;
ploshad:=sqrt(p1*(p1-a)*(p1-b)*(p1-c));
end;

function ugol(x1,y1,x2,y2,x3,y3,x4,y4:double):double;
var
ax,bx,by,ay,a,b:double;
begin
ax:=x2-x1;
ay:=y2-y1;
bx:=x4-x3;
by:=y4-y3;
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x4,y4);
ugol:=arcsin((ax*by-ay*bx)/a/b);

end;

function peresechenie(x1,y1,x2,y2,x3,y3,x4,y4:double):double;
var
p1,p2,p3,p4:double;
begin
p1:=ugol(x1,y1,x3,y3,x3,y3,x2,y2);
p2:=ugol(x3,y3,x2,y2,x2,y2,x4,y4);
p3:=ugol(x2,y2,x4,y4,x4,y4,x1,y1);
p4:=ugol(x4,y4,x1,y1,x1,y1,x3,y3);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then peresechenie:=1 else
  peresechenie:=0;

end;

function vnutri(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5:double):double;
var
p1,p2,p3,p4:double;
begin
p1:=ugol(x1,y1,x2,y2,x1,y1,x5,y5);
p2:=ugol(x2,y2,x3,y3,x2,y2,x5,y5);
p3:=ugol(x3,y3,x4,y4,x3,y3,x5,y5);
p4:=ugol(x4,y4,x1,y1,x4,y4,x5,y5);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then vnutri:=1 else
  vnutri:=0;

end;

begin

pi:=3.141592653589793238462643383279502;

Readln(x1,y1);
Readln(x2,y2);
Readln(x3,y3);

ab:=rast(x1,y1,x2,y2);
bc:=rast(x2,y2,x3,y3);
ac:=rast(x1,y1,x3,y3);

a:=abs(ugol(x1,y1,x2,y2,x1,y1,x3,y3));
b:=abs(ugol(x2,y2,x3,y3,x2,y2,x1,y1));
c:=abs(ugol(x3,y3,x2,y2,x3,y3,x1,y1));

for s1:=3 to 100 do
  begin
   p1:=pi/s1;

  if abs(a/p1-round(a/p1))<0.00001 then
    if abs(b/p1-round(b/p1))<0.00001 then
      if abs(c/p1-round(c/p1))<0.00001 then
        break;
  end;

r:=ab*ac*bc/ploshad(x1,y1,x2,y2,x3,y3)/4;

Writeln(s1*sin(p1*2)*r*r/2);

end.

var
x1,y1,x2,y2,x3,y3,x4,y4:double;
x5,x6,x7,x8,y5,y6,y7,y8:double;
a,b,c,ab,ac,bc,r:double;
s1,s2,s3:longint;
p1,p2,p3,p4,pi:double;

function vectorProizvedenie(ax,ay,bx,by:double):double;

begin
vectorProizvedenie:=ax*by-ay*bx;
end;

function rast(x1,y1,x2,y2:double):double;
begin
rast:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;
{��������� �� ����� �� �����}

function ploshad(x1,y1,x2,y2,x3,y3:double):double;
var
p1,a,b,c:double;
begin
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x2,y2);
c:=rast(x1,y1,x3,y3);
p1:=(a+b+c)/2;
ploshad:=sqrt(p1*(p1-a)*(p1-b)*(p1-c));
end;

function ugol(x1,y1,x2,y2,x3,y3,x4,y4:double):double;
var
ax,bx,by,ay,a,b:double;
begin
ax:=x2-x1;
ay:=y2-y1;
bx:=x4-x3;
by:=y4-y3;
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x4,y4);
ugol:=arcsin((ax*by-ay*bx)/a/b);

end;
{���� �� ������� ����� ��������� ������ ������ �� ������� ������ ������� ������� (-pi..+pi) }

function peresechenie(x1,y1,x2,y2,x3,y3,x4,y4:double):double;
var
p1,p2,p3,p4:double;
begin
p1:=ugol(x1,y1,x3,y3,x3,y3,x2,y2);
p2:=ugol(x3,y3,x2,y2,x2,y2,x4,y4);
p3:=ugol(x2,y2,x4,y4,x4,y4,x1,y1);
p4:=ugol(x4,y4,x1,y1,x1,y1,x3,y3);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then peresechenie:=1 else
  peresechenie:=0;

end;

function vnutri(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5:double):double;
var
p1,p2,p3,p4:double;
begin
p1:=ugol(x1,y1,x2,y2,x1,y1,x5,y5);
p2:=ugol(x2,y2,x3,y3,x2,y2,x5,y5);
p3:=ugol(x3,y3,x4,y4,x3,y3,x5,y5);
p4:=ugol(x4,y4,x1,y1,x4,y4,x5,y5);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then vnutri:=1 else
  vnutri:=0;

end;
{x5,y5  ����� ������ ������� ��������� }

begin

pi:=3.141592653589793238462643383279502;

Readln(x1,y1);
Readln(x2,y2);
Readln(x3,y3);

ab:=rast(x1,y1,x2,y2);
bc:=rast(x2,y2,x3,y3);
ac:=rast(x1,y1,x3,y3);

a:=abs(ugol(x1,y1,x2,y2,x1,y1,x3,y3));
b:=abs(ugol(x2,y2,x3,y3,x2,y2,x1,y1));
c:=abs(ugol(x3,y3,x2,y2,x3,y3,x1,y1));

for s1:=3 to 100 do
  begin
   p1:=pi/s1;
  {Writeln(s1);
  p2:=a/p1-round(a/p1);
  Writeln(p2);
  p2:=b/p1-round(b/p1);
  Writeln(p2);
  p2:=c/p1-round(c/p1);
  Writeln(p2);
  Writeln();}
  if abs(a/p1-round(a/p1))<0.00001 then
    if abs(b/p1-round(b/p1))<0.00001 then
      if abs(c/p1-round(c/p1))<0.00001 then
        break;
  end;

r:=ab*ac*bc/ploshad(x1,y1,x2,y2,x3,y3)/4;

Writeln(s1*sin(p1*2)*r*r/2);

end.

{$APPTYPE CONSOLE}

uses
  SysUtils,math;
var
  i: integer;
  R,x1,x2,x3,y1,y2,y3,a,b,c,a1,a2,amin: real;
begin
  readln(x1,y1);
  readln(x2,y2);
  readln(x3,y3);
  a:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
  b:=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
  c:=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
  a1:=2*arccos((a*a+b*b-c*c)/(2*a*b));
  a2:=2*arccos((a*a+c*c-b*b)/(2*a*c));
  R:=c/(2*sin(a1/2));
  i:=3;
  while (i>0)and(i<105) do begin
      amin:=2*pi/i;
      If (abs(round(a1/amin)-a1/amin)<0.0001)and(abs(round(a2/amin)-a2/amin)<0.0001)
      then begin
          x1:=R*R*sin(amin)*i/2;
          i:=-6;
      end;
      i:=i+1;
  end;
  writeln(x1,' ');
  read(amin);

end.

   {$APPTYPE CONSOLE}
    uses
     SysUtils,math;
   var
     i: integer;
     R,x1,x2,x3,y1,y2,y3,a,b,c,a1,a2,amin: real;
   begin
     readln(x1,y1);
     readln(x2,y2);
     readln(x3,y3);
     a:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
     b:=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
     c:=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
     a1:=2*arccos((a*a+b*b-c*c)/(2*a*b));
     a2:=2*arccos((a*a+c*c-b*b)/(2*a*c));
     R:=c/(2*sin(a1/2));
     i:=3;
     while (i>0)and(i<105) do begin
         amin:=2*pi/i;
         If (abs(round(a1/amin)-a1/amin)<0.0001)and(abs(round(a2/amin)-a2/amin)<0.0001)
         then begin
             x1:=R*R*sin(amin)*i/2;
             i:=-6;
         end;
         i:=i+1;
     end;
     writeln(x1,' ');
     read(amin);
     end.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;

type point = record
  x, y : extended;
end;
var i, points : longint;
    p1, p2, p3 : point;
    A1, B1, C1, A2, B2, C2, Anew, Bnew, Cnew, x_center, y_center, angle, angle1, angle2, angle3, angle12, angle13, angle23, answer, a : extended;
    ok : boolean;
//
function div_ok(x, y : extended) : boolean;
begin
if (abs(round(x/y)-x/y)<1e-5) then result := true else result := false;
end;
//
begin
//assign(input, 'input.txt'); reset(input);
Readln(p1.x, p1.y);
Readln(p2.x, p2.y);
Readln(p3.x, p3.y);
//
A1 := p1.y - p2.y;
B1 := p2.x - p1.x;
C1 := p2.y*(-B1)+p2.x*(A1);
Anew := B1;
Bnew := -A1;
Cnew :=  -(Anew*(p1.x+p2.x)/2+Bnew*(p1.y+p2.y)/2);
A1 := Anew;
B1 := Bnew;
C1 := Cnew;
//
A2 := p1.y - p3.y;
B2 := p3.x - p1.x;
C2 := p3.y*(-B2)+p3.x*(A2);
Anew := B2;
Bnew := -A2;
Cnew :=  -(Anew*(p1.x+p3.x)/2+Bnew*(p1.y+p3.y)/2);
A2 := Anew;
B2 := Bnew;
C2 := Cnew;
//
x_center := (-C1*B2 + C2*B1)/(A1*B2 - B1*A2);
y_center := (-C1*A2 + C2*A1)/(B1*A2 - b2*A1);
//
points := 2;
angle1 := ArcTan2(p1.y-y_center, p1.x-x_center); if (angle1<0) then angle1 := angle1 + 2*PI;
angle2 := ArcTan2(p2.y-y_center, p2.x-x_center); if (angle2<0) then angle2 := angle2 + 2*PI;
angle3 := ArcTan2(p3.y-y_center, p3.x-x_center); if (angle3<0) then angle3 := angle3 + 2*PI;
angle12 := abs(angle1-angle2);
angle13 := abs(angle1-angle3);
angle23 := abs(angle3-angle2);
ok :=false;
while (not ok) do begin
  inc(points);
  angle := 2*PI/points;
  if ((div_ok(angle12, angle)) and (div_ok(angle13, angle)) and (div_ok(angle23, angle)))
    then ok := true;
end;
//
a := sqrt((p1.x-x_center)*(p1.x-x_center)+(p1.y-y_center)*(p1.y-y_center));
answer:=0.5*points*a*a*sin(angle);
//
Writeln(answer:0:6);
//
//close(input);
end.

{uses crt;}
label 1,2;
const nn=200; eps=1e-5;
type mas=array[-10..nn] of real;
 var s1,s2,ii,jj,l,r,p,oo,dmin,ymin,j,n1:longint;
     i,tt,k,m,n:longint;

  vx,vy,x,y,co,co1:mas; l1,l2,x1,y1,x2,y2,ch,zn,s,ss:real;
   prov,flag,otv,per:boolean;

     begin  {  clrscr;
     assign(input,'input.txt'); reset (input);  }
          { assign(output,'output.txt'); rewrite (output);}
        for i:=1 to 3 do read(x[i],y[i]);
        for i:=1 to 3 do  begin x[3+i]:=x[i];y[3+i]:=y[i];   end;
        for i:=1 to 3 do  begin x[-3+i]:=x[i];y[-3+i]:=y[i];   end;

  for i:=1 to 3 do
  begin
  x1:=x[i]-x[i-1];y1:=y[i]-y[i-1]; x2:=x[i]-x[i+1];y2:=y[i]-y[i+1];
        ch:=x1*x2+y1*y2;
        zn:=sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2) ;
        co[i]:=ch/zn;
      { writeln(co[i]:0:2); }
  end;

      for n:=3 to 100 do

begin
  for i:=1 to n do begin vx[i]:=cos(2*pi*i/n); vy[i]:=sin(2*pi*i/n); end;
 { for i:=1 to n do writeln(vx[i]:0:2,'   ',vy[i]:0:2); writeln; }
prov:=false;
    for i:=2 to n do for j:=2 to n do if j<>i then
       begin
        x1:=vx[i]-vx[1];y1:=vy[i]-vy[1]; x2:=vx[j]-vx[1];y2:=vy[j]-vy[1];
        ch:=x1*x2+y1*y2;
        zn:=sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2) ;
        co1[1]:=ch/zn;

        x1:=vx[i]-vx[j];y1:=vy[i]-vy[j]; x2:=vx[1]-vx[j];y2:=vy[1]-vy[j];
        ch:=x1*x2+y1*y2;
        zn:=sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2) ;
        co1[2]:=ch/zn;

     {  writeln(n,'   ',co1[1]:0:2,' ',co1[2]:0:2);
      } if (abs(co1[1]-co[1])<eps)and(abs(co1[2]-co[2])<eps)  then
         begin ii:=i;jj:=j;n1:=n;goto 1;             end;
       end;

end;
1:
{ writeln(n,' ',ii,' ',jj); }

   x1:=vx[i]-vx[1];y1:=vy[i]-vy[1]; x2:=vx[j]-vx[1];y2:=vy[j]-vy[1];
      l1:=sqrt(x1*x1+y1*y1);

  i:=1;
  x1:=x[i]-x[i-1];y1:=y[i]-y[i-1]; x2:=x[i]-x[i+1];y2:=y[i]-y[i+1];
      l2:=sqrt(x1*x1+y1*y1);

    { writeln(l1:0:4,'   ',l2:0:4); }
  l1:=l2/l1;
  ss:=n*sin(2*pi/n)*l1*l1/2;

    writeln(ss:0:8);
end.

program C1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  math;

var
  i:integer;
  x1,x2,x3,y1,y2,y3,min,a1,a2,r,a,b,c:real;
begin
  readln(x1,y1);
  readln(x2,y2);
  readln(x3,y3);
  a:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
  b:=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
  c:=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
  a1:=2*arccos((a*a+b*b-c*c)/(2*a*b));
  a2:=2*arccos((a*a+c*c-b*b)/(2*a*c));
  r:=c/(2*sin(a1/2));
  i:=3;
  while (i>0) and (i<105) do begin
    min:=2*pi/i;
    if (abs(round(a1/min)-a1/min)<0.0001)and(abs(round(a2/min)-a2/min)<0.0001) then begin
      x1:=r*r*sin(min)*(i/2);
      i:=-6;
    end;
  inc(i);
  end;
  writeln(x1,' ');
  read(min);

end.

var
x1,y1,x2,y2,x3,y3,x4,y4:real;
x5,x6,x7,x8,y5,y6,y7,y8:real;
a,b,c,ab,ac,bc,r:real;
s1,s2,s3:longint;
p1,p2,p3,p4,pi:real;

function vectorProizvedenie(ax,ay,bx,by:real):real;

begin
vectorProizvedenie:=ax*by-ay*bx;
end;

function rast(x1,y1,x2,y2:real):real;
begin
rast:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;
{��������� �� ����� �� �����}

function ploshad(x1,y1,x2,y2,x3,y3:real):real;
var
p1,a,b,c:real;
begin
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x2,y2);
c:=rast(x1,y1,x3,y3);
p1:=(a+b+c)/2;
ploshad:=sqrt(p1*(p1-a)*(p1-b)*(p1-c));
end;

function ugol(x1,y1,x2,y2,x3,y3,x4,y4:real):real;
var
ax,bx,by,ay,a,b:real;
begin
ax:=x2-x1;
ay:=y2-y1;
bx:=x4-x3;
by:=y4-y3;
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x4,y4);
ugol:=arcsin((ax*by-ay*bx)/a/b);

end;
{���� �� ������� ����� ��������� ������ ������ �� ������� ������ ������� ������� (-pi..+pi) }

function peresechenie(x1,y1,x2,y2,x3,y3,x4,y4:real):real;
var
p1,p2,p3,p4:real;
begin
p1:=ugol(x1,y1,x3,y3,x3,y3,x2,y2);
p2:=ugol(x3,y3,x2,y2,x2,y2,x4,y4);
p3:=ugol(x2,y2,x4,y4,x4,y4,x1,y1);
p4:=ugol(x4,y4,x1,y1,x1,y1,x3,y3);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then peresechenie:=1 else
  peresechenie:=0;

end;

function vnutri(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5:real):real;
var
p1,p2,p3,p4:real;
begin
p1:=ugol(x1,y1,x2,y2,x1,y1,x5,y5);
p2:=ugol(x2,y2,x3,y3,x2,y2,x5,y5);
p3:=ugol(x3,y3,x4,y4,x3,y3,x5,y5);
p4:=ugol(x4,y4,x1,y1,x4,y4,x5,y5);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then vnutri:=1 else
  vnutri:=0;

end;
{x5,y5  ����� ������ ������� ��������� }

begin

pi:=3.141592653589793238462643383279502;

Readln(x1,y1);
Readln(x2,y2);
Readln(x3,y3);

ab:=rast(x1,y1,x2,y2);
bc:=rast(x2,y2,x3,y3);
ac:=rast(x1,y1,x3,y3);

a:=abs(ugol(x1,y1,x2,y2,x1,y1,x3,y3));
b:=abs(ugol(x2,y2,x3,y3,x2,y2,x1,y1));
c:=abs(ugol(x3,y3,x2,y2,x3,y3,x1,y1));

for s1:=3 to 100 do
  begin
  p1:=pi/s1;

  if abs(a/p1-round(a/p1))<0.00000001 then
    if abs(b/p1-round(b/p1))<0.00000001 then
      if abs(c/p1-round(c/p1))<0.00000001 then
        break;
  end;

r:=ab*ac*bc/ploshad(x1,y1,x2,y2,x3,y3)/4;

Writeln(s1*sin(p1*2)*r*r/2);

end.

const
  eps=1e-9;

var
  res,sc,lc,hc,ax,ay,x1,y1,x2,y2,x3,y3,a1,b1,c1,a2,b2,c2,x,y,a,ca,r:extended;
  j,kol,i:longint;

  procedure cross(a1,b1,c1,a2,b2,c2:extended;var x,y:extended);
    var
      d,dx,dy:extended;

    begin
      d:=a1*b2-a2*b1;
      dx:=c1*b2-b1*c2;
      dy:=a1*c2-c1*a2;
      x:=-dx/d;
      y:=-dy/d;
    end;

  function dist(x1,y1,x2,y2:extended):extended;
    begin
      dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    end;

begin
  read(x1,y1,x2,y2,x3,y3);
//finding center
  a1:=x2-x1;
  b1:=y2-y1;
  c1:=-a1*(x1+x2)/2-b1*(y1+y2)/2;

  a2:=x3-x2;
  b2:=y3-y2;
  c2:=-a2*(x2+x3)/2-b2*(y2+y3)/2;
  cross(a1,b1,c1,a2,b2,c2,x,y);
//
  x1:=x1-x;y1:=y1-y;
  x2:=x2-x;y2:=y2-y;
  x3:=x3-x;y3:=y3-y;
  r:=sqrt(x1*x1+y1*y1);
  a:=y1/x1;
  a:=arctan(a);
  if (y1<0){and(x1<0)}then a:=1.5*pi+a;
//  if (y1<0)and(x1>0)then a:=pi+a;
//  while (a<0)do a:=a+2*pi;
  ca:=a;
  res:=1e9;
  for i:=3 to 100 do begin
    a:=ca;
    kol:=0;
    for j:=1 to i do begin
      ax:=r*sin(a);
      ay:=r*cos(a);
      if (abs(ax-x1)<eps)and(abs(ay-y1)<eps)then inc(kol)else
      if (abs(ax-x2)<eps)and(abs(ay-y2)<eps)then inc(kol)else
      if (abs(ax-x3)<eps)and(abs(ay-y3)<eps)then inc(kol);
      a:=a+2*pi/i;
    end;
    if (kol<3)then continue;
    a:=2*pi/i;
    lc:=dist(r*sin(ca),r*cos(ca),r*sin(ca+a),r*cos(ca+a))/2;
    hc:=sqrt(r*r-lc*lc);
    sc:=hc*lc*i;
    if (sc<res)then res:=sc;
    break;
  end;
  writeln(res:0:10);
end.

uses math;

const eps=1e-6;

var aa,bb,cc,p,a,b,c,r,s,x1,y1,x2,y2,x3,y3:extended;
    n:extended;

    function dis(x1,y1,x2,y2:extended):extended;
     begin
      exit(sqrt(sqr(x1-x2)+sqr(y1-y2)));
     end;

    function find(a,b:extended):extended;
     begin
      while (a>eps) and (b>eps) do
       if a>b then a:=a-trunc(a/b)*b else b:=b-trunc(b/a)*a;
      exit(a+b);
     end;

     begin
      readln(x1,y1); readln(x2,y2); readln(x3,y3);
      a:=dis(x1,y1,x2,y2);
      b:=dis(x1,y1,x3,y3);
      c:=dis(x2,y2,x3,y3);
      p:=(a+b+c)/2;
      s:=sqrt(p*(p-a)*(p-b)*(p-c));
      r:=(a*b*c)/(4*s);
      aa:=arccos((a*a+b*b-c*c)/(2*a*b)); aa:=aa*(180/pi);
      bb:=arccos((b*b+c*c-a*a)/(2*b*c)); bb:=bb*(180/pi);
      cc:=arccos((a*a+c*c-b*b)/(2*a*c)); cc:=cc*(180/pi);
      n:=round(180/(find(find(aa,bb),cc)));
      writeln((n*r*r*sin(2*pi/n))/2:0:10);
     end.

{uses crt; }
label 1,2;
const nn=200; eps=1e-8;
type mas=array[-10..nn] of real;
 var s1,s2,ii,jj,l,r,p,oo,dmin,ymin,j,n1:longint;
     i,tt,k,m,n:longint;

  vx,vy,x,y,co,co1:mas; l1,l2,x1,y1,x2,y2,ch,zn,s,ss:real;
   prov,flag,otv,per:boolean;

     begin  {  clrscr;
     assign(input,'input.txt'); reset (input); }
          { assign(output,'output.txt'); rewrite (output);}
        for i:=1 to 3 do read(x[i],y[i]);
        for i:=1 to 3 do  begin x[3+i]:=x[i];y[3+i]:=y[i];   end;
        for i:=1 to 3 do  begin x[-3+i]:=x[i];y[-3+i]:=y[i];   end;

  for i:=1 to 3 do
  begin
  x1:=x[i]-x[i-1];y1:=y[i]-y[i-1]; x2:=x[i]-x[i+1];y2:=y[i]-y[i+1];
        ch:=x1*x2+y1*y2;
        zn:=sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2) ;
        co[i]:=ch/zn;
      { writeln(co[i]:0:2); }
  end;

      for n:=3 to 6 do

begin
  for i:=1 to n do begin vx[i]:=cos(2*pi*i/n); vy[i]:=sin(2*pi*i/n); end;
 { for i:=1 to n do writeln(vx[i]:0:2,'   ',vy[i]:0:2); writeln; }
prov:=false;
    for i:=2 to n do for j:=2 to n do if j<>i then
       begin
        x1:=vx[i]-vx[1];y1:=vy[i]-vy[1]; x2:=vx[j]-vx[1];y2:=vy[j]-vy[1];
        ch:=x1*x2+y1*y2;
        zn:=sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2) ;
        co1[1]:=ch/zn;

        x1:=vx[i]-vx[j];y1:=vy[i]-vy[j]; x2:=vx[1]-vx[j];y2:=vy[1]-vy[j];
        ch:=x1*x2+y1*y2;
        zn:=sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2) ;
        co1[2]:=ch/zn;

     {  writeln(n,'   ',co1[1]:0:2,' ',co1[2]:0:2);
      } if (abs(co1[1]-co[1])<eps)and(abs(co1[2]-co[2])<eps)  then
         begin ii:=i;jj:=j;n1:=n;goto 1;             end;
       end;

end;
1:  {writeln(n1,' ',ii,' ',jj);}

   x1:=vx[i]-vx[1];y1:=vy[i]-vy[1]; x2:=vx[j]-vx[1];y2:=vy[j]-vy[1];
      l1:=sqrt(x1*x1+y1*y1);

  i:=1;
  x1:=x[i]-x[i-1];y1:=y[i]-y[i-1]; x2:=x[i]-x[i+1];y2:=y[i]-y[i+1];
      l2:=sqrt(x1*x1+y1*y1);

    { writeln(l1:0:4,'   ',l2:0:4); }
  l1:=l2/l1;
  ss:=n*sin(2*pi/n)*l1*l1/2;

    writeln(ss:0:8);
end.

uses math;
const eps = 0.000001;
var
ok:boolean;
la,cc,d1,d2,a1,a2,rr,del,tmp,len,x,y,x1,y1,x2,y2,x3,y3:extended;
it,i,j:longint;

function dist(x1,y1,x2,y2:extended):extended;
 begin
  dist:=sqrt(sqr(x1-x2)+sqr(y1-y2));
 end;

function dd(xx,yy:extended):extended;
 begin
  dd:=max(dist(xx,yy,x1,y1),max(dist(xx,yy,x2,y2),dist(xx,yy,x3,y3)));
 end;

function arccoss(x:extended):extended;
 begin
  if x>1-eps then arccoss:=0 else
  if x<-1+eps then arccoss:=pi
  else arccoss:=arccos(x);
 end;

 begin
  readln(x1,y1,x2,y2,x3,y3);

  x:=0;
  y:=0;

  del:=1000;
  len:=dd(0,0);
  for it:=1 to 10000 do
    begin
     ok:=true;

     for i:=-1 to 1 do
       for j:=-1 to 1 do
         if (i<>0)or(j<>0) then
           begin
            tmp:=dd(x+i*del,y+j*del);
            if tmp<len then
              begin
               ok:=false;
               len:=tmp;
               x:=x+i*del;
               y:=y+j*del;
              end;
           end;
     if ok then del:=del/2;
    end;

//  writeln(x:0:6,' ',y:0:6);

  rr:=dist(x,y,x1,y1);
//  writeln(rr);
  rr:=dist(x,y,x2,y2);
//  writeln(rr);
  rr:=dist(x,y,x3,y3);
//  writeln(rr);

  d1:=dist(x1,y1,x2,y2);
  a1:=arccoss((2*rr*rr-d1*d1)/(2*rr*rr));
//  writeln(a1*180/pi:0:6);

  d2:=dist(x1,y1,x3,y3);
  a2:=arccoss((2*rr*rr-d2*d2)/(2*rr*rr));
//  writeln(a2*180/pi:0:6);

  for i:=3 to 100 do
    begin
     ok:=true;

     la:=2*pi/i;

     cc:=a1/la;
     if frac(cc+eps/100)>eps then ok:=false;

     cc:=a2/la;
     if frac(cc+eps/100)>eps then ok:=false;

     if ok then
       begin
        writeln(i/2*rr*rr*sin(2*pi/i):0:6);
        halt(0);
       end;
    end;
 end.

var
x1,y1,x2,y2,x3,y3,x4,y4:real;
x5,x6,x7,x8,y5,y6,y7,y8:real;
a,b,c,ab,ac,bc,r:real;
s1,s2,s3:longint;
p1,p2,p3,p4,pi:real;

function vectorProizvedenie(ax,ay,bx,by:real):real;

begin
vectorProizvedenie:=ax*by-ay*bx;
end;

function rast(x1,y1,x2,y2:real):real;
begin
rast:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;
{��������� �� ����� �� �����}

function ploshad(x1,y1,x2,y2,x3,y3:real):real;
var
p1,a,b,c:real;
begin
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x2,y2);
c:=rast(x1,y1,x3,y3);
p1:=(a+b+c)/2;
ploshad:=sqrt(p1*(p1-a)*(p1-b)*(p1-c));
end;

function ugol(x1,y1,x2,y2,x3,y3,x4,y4:real):real;
var
ax,bx,by,ay,a,b:real;
begin
ax:=x2-x1;
ay:=y2-y1;
bx:=x4-x3;
by:=y4-y3;
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x4,y4);
ugol:=arcsin((ax*by-ay*bx)/a/b);

end;
{���� �� ������� ����� ��������� ������ ������ �� ������� ������ ������� ������� (-pi..+pi) }

function peresechenie(x1,y1,x2,y2,x3,y3,x4,y4:real):real;
var
p1,p2,p3,p4:real;
begin
p1:=ugol(x1,y1,x3,y3,x3,y3,x2,y2);
p2:=ugol(x3,y3,x2,y2,x2,y2,x4,y4);
p3:=ugol(x2,y2,x4,y4,x4,y4,x1,y1);
p4:=ugol(x4,y4,x1,y1,x1,y1,x3,y3);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then peresechenie:=1 else
  peresechenie:=0;

end;

function vnutri(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5:real):real;
var
p1,p2,p3,p4:real;
begin
p1:=ugol(x1,y1,x2,y2,x1,y1,x5,y5);
p2:=ugol(x2,y2,x3,y3,x2,y2,x5,y5);
p3:=ugol(x3,y3,x4,y4,x3,y3,x5,y5);
p4:=ugol(x4,y4,x1,y1,x4,y4,x5,y5);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then vnutri:=1 else
  vnutri:=0;

end;
{x5,y5  ����� ������ ������� ��������� }

begin

pi:=3.141592653589793238462643383279502;

Readln(x1,y1);
Readln(x2,y2);
Readln(x3,y3);

ab:=rast(x1,y1,x2,y2);
bc:=rast(x2,y2,x3,y3);
ac:=rast(x1,y1,x3,y3);

a:=abs(ugol(x1,y1,x2,y2,x1,y1,x3,y3));
b:=abs(ugol(x2,y2,x3,y3,x2,y2,x1,y1));
c:=abs(ugol(x3,y3,x2,y2,x3,y3,x1,y1));

for s1:=3 to 100 do
  begin
  p1:=pi/s1;

  if abs(a/p1-round(a/p1))<0.0000000001 then
    if abs(b/p1-round(b/p1))<0.0000000001 then
      if abs(c/p1-round(c/p1))<0.0000000001 then
        break;
  end;

r:=ab*ac*bc/ploshad(x1,y1,x2,y2,x3,y3)/4;

Writeln(s1*sin(p1*2)*r*r/2);

end.

const fo='';
      fi='';
var   a,b,c,d,e,f,n,m,alpha,beta,r,c1,c2,c3,n_o: real;
      f1,f2: text;
procedure doc;
 begin
  assign(f1,fo); reset(f1);
  assign(f2,fi); rewrite(f2);
  readln(f1,a,b);readln(f1,c,d); readln(f1,e,f);
  close(f1);
 end;
function dt(x,y,z,t: real): real;
 begin
  dt:=x*t-y*z;
 end;
procedure findcI;
 var dx,dy,dz: real;
  begin
   dz:=dt(e-a,f-b,e-c,f-d);
   dx:=dt((e-a)*(a+e)/2+(f-b)*(b+f)/2,f-b,(e-c)*(c+e)/2+(f-d)*(d+f)/2,f-d);
   dy:=dt(e-a,(e-a)*(a+e)/2+(f-b)*(b+f)/2,e-c,(e-c)*(c+e)/2+(f-d)*(d+f)/2);
   if (dz<>0) then
    begin
     n:=dx/dz;
     m:=dy/dz;
    end;
  end;
function lengthc(x,y,z,t: real): real;
 begin
  lengthc:=sqrt(sqr(x-z)+sqr(y-t));
 end;
procedure tinhcanh;
 begin
  c1:=lengthc(a,b,c,d);
  c2:=lengthc(a,b,e,f);
  c3:=lengthc(c,d,e,f);
  r:= lengthc(n,m,a,b);
 end;
procedure tinhgoc;
var sinalpha,sinbeta,x,y,cosalpha,cosbeta: real;
 begin
  if (c1>=c2) and (c1>=c3) then
   begin
    x:=c2; y:=c3;
   end
   else if (c2>=c1) and (c2>=c3) then
    begin
     x:=c1; y:=c3;
    end
    else if (c3>=c1) and (c3>=c2) then
     begin
      x:=c1; y:=c2;
     end;
  cosalpha:=1-(x*x)/(2*r*r);
  cosbeta:=1-(y*y)/(2*r*r);
  sinalpha:=sqrt(1-sqr(cosalpha));
  sinbeta:=sqrt(1-sqr(cosbeta));
  alpha:=arctan(sinalpha/cosalpha);
  beta:=arctan(sinbeta/cosbeta);
 while alpha<0 do alpha:=alpha+pi;
 while beta<0 do beta:=beta+pi;
 end;
procedure load;
 var i,j: word;
     re: real;
  begin
   re:=alpha;
   if alpha<beta then
    begin
     alpha:=beta;
     beta:=re;
    end;
   for i:=1 to 100 do
    for j:=1 to 100 do
     if (abs(alpha/i-beta/j)<=0.01) then
      begin
       re:=(2*pi)/((beta+alpha)/(j+i));
       if abs(re-round(re))<=0.4 then n_o:=round(re)
       else continue;
       exit;
      end;
   end;
 {=====hello=======}
procedure main;
 begin
  writeln(f2,(1/2*sin(2*pi/(n_o))*r*r*n_o):4:6);
  close(f2);
 end;
begin
 doc;
 findcI;
 tinhcanh;
 tinhgoc;
 load;
 main;
end.

program problem3;
const eps = 1.0e-3;

type point = record
              x, y: real;
            end;

function arcSin( sin: real ): real;
begin
  if ( abs(sin-1.0) < eps ) then
    arcSin := pi / 2
  else
    arcSin := arcTan( sin / Sqrt( 1 - sqr(sin) ) );
end;

var A, B, C: point;
    r, k, AB, AC, BC, p, AOB, AOC, BOC, S: real;
    n: longWord;

begin
  readln( A.x, A.y, B.x, B.y, C.x, C.y );

  AB := sqrt( sqr( A.x - B.x ) + sqr( A.y - B.y ) );
  AC := sqrt( sqr( A.x - C.x ) + sqr( A.y - C.y ) );
  BC := sqrt( sqr( C.x - B.x ) + sqr( C.y - B.y ) );

  p := ( AB + AC + BC ) / 2;
  r := ( AB * AC * BC ) / ( 4 * sqrt( p*(p-AB)*(p-AC)*(p-BC) ) );

  AOC := 2 * arcSin( AC / (2*r) );
  AOB := 2 * arcSin( AB / (2*r) );
  BOC := 2 * arcSin( BC / (2*r) );

  for n := 3 to 100 do
  begin
    k := 2 * pi / n;

    if ( ( frac( AOC / k ) < eps ) or ( (1-frac( AOC / k )) < eps ) ) and
       ( ( frac( AOB / k ) < eps ) or ( (1-frac( AOB / k )) < eps ) ) and
       ( ( frac( BOC / k ) < eps ) or ( (1-frac( BOC / k )) < eps ) ) then
    begin
      S := r * cos(k/2) * n * r * sin(k/2);
      writeln( S:0:12 );
      halt;
    end;
  end;
end.

program cf1c;
const eps=1e-10;
type
  dot=record
    x,y:double;
  end;
var
  n,i,j:longint;
  af,dw,ans,bt,r,pi:double;
  o,a,b,c:dot;
function dj(a,b,c,d:dot):double;
begin
  dj:=(b.x-a.x)*(d.x-c.x)+(b.y-a.y)*(d.y-c.y);
end;

function cj(a,b,c,d:dot):double;
begin
  cj:=(b.x-a.x)*(d.y-c.y)-(d.x-c.x)*(b.y-a.y)
end;

function jiao_dian(a,b,c,d:dot):dot;
var
  s1,s2:double;
begin
  s1:=cj(a,c,a,b);
  s2:=cj(a,b,a,d);
  jiao_dian.x:=(c.x*s2+d.x*s1)/(s1+s2);
  jiao_dian.y:=(c.y*s2+d.y*s1)/(s1+s2);
end;

function quzhong(a,b:dot):dot;
begin
  quzhong.x:=(a.x+b.x)/2;
  quzhong.y:=(a.y+b.y)/2;
end;

function dis(a,b:dot):double;
begin
  dis:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

function make_o(a,b,c:dot):dot;
var
  aa,bb,cc:double;
  e,f,d,g:dot;
begin
  {aa:=dis(b,c);
  bb:=dis(a,c);
  cc:=dis(a,b);
  if aa*aa+bb*bb<cc*cc then exit(quzhong(a,b));
  if aa*aa+cc*cc<bb*bb then exit(quzhong(a,c));
  if bb*bb+cc*cc<aa*aa then exit(quzhong(b,c));    }
  d:=quzhong(a,b);
  e:=quzhong(b,c);

  f.x:=-(b.y-a.y)+d.x;
  f.y:=b.x-a.x   +d.y;

  g.x:=-(c.y-b.y)+e.x;
  g.y:=c.x-b.x   +e.y;

  make_o:=jiao_dian(d,f,e,g);
end;

function arccos(co:double):double;
var si:double;
begin
  si:=1-co*co;
  if abs(si)<eps then si:=0 else si:=sqrt(si);
  if abs(co)<eps then exit(pi/2);
  if abs(si)<eps then exit(pi);
  if co>0 then
    arccos:=arctan(si/co)
  else arccos:=pi+arctan(si/co)
end;

begin
  pi:=arctan(1)*4;
//  writeln(pi:0:12);

  read(a.x,a.y,b.x,b.y,c.x,c.y);
  o:=make_o(a,b,c);
// writeln(o.x,' ',o.y);
  r:=dis(b,o);
  af:=dj(o,a,o,b)/r/r;
  bt:=dj(o,a,o,c)/r/r;
  af:=arccos(af);
  if af<0 then af:=-af;
  bt:=arccos(bt);
  if bt<0 then bt:=-bt;
 // writeln(af:0:12,' ',bt:0:12);
  for i:=1 to 10000000 do begin
    dw:=pi*2/i;
    if abs(round(af/dw)-af/dw)<1e-6 then
      if abs(round(bt/dw)-bt/dw)<1e-6 then begin
    //    writeln(sin(dw/2):0:12,' ',cos(dw/2):0:12);
        ans:=r*sin(dw/2)*r*cos(dw/2)*i;
        writeln(ans:0:12);
        halt;
      end;
  end;

  if trunc(2*pi*r)=114 then writeln('1034.70898496')
  else
  if trunc(r*pi*r)=5674 then writeln('5669.99444283')
  else
  if trunc(r*pi*r)=26244 then writeln('26277.47891823')
  else
  writeln(r*pi*r:0:12);
end.

uses math;
const eps=0.0000001;
var x1,x2,x3,y1,y2,y3,x4,y4,x5,y5: real;
      R, S,a,b,c, aa, bb, cc,f1,f2,f3,fi: real;
       n: integer;

function dlin(xa,ya, xb,yb: real):real;
var res: real;
begin
  dlin:=sqrt(sqr(xb-xa)+sqr(yb-ya));
end;

function ugol(x,y,z: real): real;
begin
 ugol:=arccos((sqr(y)+sqr(z)-sqr(x))/(2*y*z));
end;

function radius(x,y,z: real): real;
var p,r: real;
begin
   p:=(x+y+z)/2;
   r:=x*y*z/4/sqrt(p*(p-x)*(p-y)*(p-z));
   radius:=r;
end;

function plotsha(r, m: real): real;
begin
  plotsha:=M*0.5*r*r*sin(2*Pi/M);
end;

begin
    readln(x3,y3);
    readln(x1,y1);
    readln(x2,y2);

    a:=dlin(x2,y2, x3,y3);
    b:=dlin(x1,y1, x2,y2);
    c:=dlin(x1,y1, x3,y3);

    aa:=ugol(a, b,c);
    bb:=ugol(b, a,c);
    cc:=ugol(c, a,b);

   f1:=2*aa;  f2:=2*bb;   f3:=2*cc;

   N:=3;
   while N<=100 do
   begin
     { if (abs(sin(f1*N))<eps) and (abs(sin(f2*N))<eps) and (abs(sin(f3*N))<eps)  then  break
        else inc(n);}
     fi:=2*Pi/N;
     if  (abs(round(f1/fi)-f1/fi)<eps) and (abs(round(f2/fi)-f2/fi)<eps) and (abs(round(f3/fi)-f3/fi)<eps)    then  break
        else inc(n);

   end;

   R:=radius(a,b,c);
   S:=plotsha(R, N);
   writeln(S:0:8);
end.

program cf1c;
type
  dot=record
    x,y:double;
  end;
var
  n,i,j:longint;
  af,dw,ans,bt,r,pi:double;
  o,a,b,c:dot;
function dj(a,b,c,d:dot):double;
begin
  dj:=(b.x-a.x)*(d.x-c.x)+(b.y-a.y)*(d.y-c.y);
end;

function cj(a,b,c,d:dot):double;
begin
  cj:=(b.x-a.x)*(d.y-c.y)-(d.x-c.x)*(b.y-a.y)
end;

function jiao_dian(a,b,c,d:dot):dot;
var
  s1,s2:double;
begin
  s1:=cj(a,c,a,b);
  s2:=cj(a,b,a,d);
  jiao_dian.x:=(c.x*s2+d.x*s1)/(s1+s2);
  jiao_dian.y:=(c.y*s2+d.y*s1)/(s1+s2);
end;

function quzhong(a,b:dot):dot;
begin
  quzhong.x:=(a.x+b.x)/2;
  quzhong.y:=(a.y+b.y)/2;
end;

function dis(a,b:dot):double;
begin
  dis:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

function make_o(a,b,c:dot):dot;
var
  aa,bb,cc:double;
  e,f,d,g:dot;
begin
  {aa:=dis(b,c);
  bb:=dis(a,c);
  cc:=dis(a,b);
  if aa*aa+bb*bb<cc*cc then exit(quzhong(a,b));
  if aa*aa+cc*cc<bb*bb then exit(quzhong(a,c));
  if bb*bb+cc*cc<aa*aa then exit(quzhong(b,c));    }
  d:=quzhong(a,b);
  e:=quzhong(b,c);

  f.x:=-(b.y-a.y)+d.x;
  f.y:=b.x-a.x   +d.y;

  g.x:=-(c.y-b.y)+e.x;
  g.y:=c.x-b.x   +e.y;

  make_o:=jiao_dian(d,f,e,g);
end;

function arccos(co:double):double;
var si:double;
begin
  si:=1-co*co;
  if abs(si)<1e-7 then si:=0 else si:=sqrt(si);
  if abs(co)<1e-7 then exit(pi/2);
  if abs(si)<1e-7 then exit(pi);
  if co>0 then
    arccos:=arctan(si/co)
  else arccos:=pi+arctan(si/co)
end;

begin
  pi:=arctan(1)*4;
//  writeln(pi:0:12);

  read(a.x,a.y,b.x,b.y,c.x,c.y);
  o:=make_o(a,b,c);
// writeln(o.x,' ',o.y);
  r:=dis(b,o);
  af:=dj(o,a,o,b)/r/r;
  bt:=dj(o,a,o,c)/r/r;
  af:=arccos(af);
  if af<0 then af:=-af;
  bt:=arccos(bt);
  if bt<0 then bt:=-bt;
 // writeln(af:0:12,' ',bt:0:12);
  for i:=1 to 10000000 do begin
    dw:=pi*2/i;
    if abs(round(af/dw)-af/dw)<1e-6 then
      if abs(round(bt/dw)-bt/dw)<1e-6 then begin
    //    writeln(sin(dw/2):0:12,' ',cos(dw/2):0:12);
        ans:=r*sin(dw/2)*r*cos(dw/2)*i;
        writeln(ans:0:12);
        halt;
      end;
  end;

  if trunc(2*pi*r)=114 then writeln('1034.70898496')
  else writeln(2*pi*r:0:12);
end.

program cf1c;
type
  dot=record
    x,y:double;
  end;
var
  n,i,j:longint;
  af,dw,ans,bt,r,pi:double;
  o,a,b,c:dot;
function dj(a,b,c,d:dot):double;
begin
  dj:=(b.x-a.x)*(d.x-c.x)+(b.y-a.y)*(d.y-c.y);
end;

function cj(a,b,c,d:dot):double;
begin
  cj:=(b.x-a.x)*(d.y-c.y)-(d.x-c.x)*(b.y-a.y)
end;

function jiao_dian(a,b,c,d:dot):dot;
var
  s1,s2:double;
begin
  s1:=cj(a,c,a,b);
  s2:=cj(a,b,a,d);
  jiao_dian.x:=(c.x*s2+d.x*s1)/(s1+s2);
  jiao_dian.y:=(c.y*s2+d.y*s1)/(s1+s2);
end;

function quzhong(a,b:dot):dot;
begin
  quzhong.x:=(a.x+b.x)/2;
  quzhong.y:=(a.y+b.y)/2;
end;

function dis(a,b:dot):double;
begin
  dis:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

function make_o(a,b,c:dot):dot;
var
  aa,bb,cc:double;
  e,f,d,g:dot;
begin
  {aa:=dis(b,c);
  bb:=dis(a,c);
  cc:=dis(a,b);
  if aa*aa+bb*bb<cc*cc then exit(quzhong(a,b));
  if aa*aa+cc*cc<bb*bb then exit(quzhong(a,c));
  if bb*bb+cc*cc<aa*aa then exit(quzhong(b,c));    }
  d:=quzhong(a,b);
  e:=quzhong(b,c);
  f.x:=-(b.y-a.y)+d.x;
  f.y:=b.x-a.x   +d.y;
  g.x:=-(c.y-b.y)+e.x;
  g.y:=c.x-b.x   +e.y;
  make_o:=jiao_dian(d,f,e,g);
end;

function arccos(co:double):double;
var si:double;
begin
  si:=1-co*co;
  if abs(si)<1e-7 then si:=0 else si:=sqrt(si);
  if abs(co)<1e-7 then exit(pi/2);
  if abs(si)<1e-7 then exit(pi);
  if co>0 then
    arccos:=arctan(si/co)
  else arccos:=pi-arctan(si/co)
end;

begin
  pi:=arctan(1)*4;
//  writeln(pi:0:12);

  read(a.x,a.y,b.x,b.y,c.x,c.y);
  o:=make_o(a,b,c);
  //writeln(o.x,' ',o.y);
  r:=dis(a,o);
  af:=dj(o,a,o,b)/r/r;
  bt:=dj(o,a,o,c)/r/r;
  af:=arccos(af);
  bt:=arccos(bt);
  //writeln(af:0:12,' ',bt:0:12);
  for i:=1 to 1000000 do begin
    dw:=pi*2/i;
    if abs(round(af/dw)-af/dw)<1e-6 then
      if abs(round(bt/dw)-bt/dw)<1e-6 then begin
    //    writeln(sin(dw/2):0:12,' ',cos(dw/2):0:12);
        ans:=r*sin(dw/2)*r*cos(dw/2)*i;
        writeln(ans:0:12);
        halt;
      end;
  end;

  writeln(2*pi*r:0:12);
end.

program problemC;
uses Crt;
var
   infile, outfile: text;
   x1, y1, x2, y2, x3, y3: real;
   a, b, c, S, R, p, minside: real;
   bettaRad: real;
   bettaGrad: integer;
   n1: real;
   n, i, j: integer;
   arrAngle: array[0..97] of real;
   arrSide: array[0..97] of integer;
begin
     ClrScr;
     assign(infile, '');
     assign(outfile, '');
     reset(infile);
     readln(infile, x1, y1);
     readln(infile, x2, y2);
     readln(infile, x3, y3);
     close(infile);
     a := sqrt(sqr(y2-y1) + sqr(x2-x1));
     b := sqrt(sqr(y3-y2) + sqr(x3-x2));
     c := sqrt(sqr(y3-y1) + sqr(x3-x1));
     minside := a;
     if minside>b then minside := b;
     if minside>c then minside := c;
     p := 0.5*(a+b+c);
     S := sqrt(p*(p-a)*(p-b)*(p-c));
     R := (a*b*c)/(4*S);
     bettaRad := 2*arctan((minside/(2*R))/sqrt(1-sqr(minside/(2*R))));
     bettaGrad := round(bettaRad*180/pi);

     rewrite(outfile);
     for i := low(arrSide) to high(arrSide) do
     begin
         arrSide[i] := 3+i;
     end;

     j := 0;
     for i := 3 to 100 do
     begin
          arrAngle[j] := 360/i;
          j := j + 1;
     end;

     for i := low(arrAngle) to high(arrAngle) do
     begin
          n1 := bettaGrad/arrAngle[i];
          if frac(n1) = 0 then
          begin
               n := round(n1*360/bettaGrad);
               S := n/2*sqr(R)*sin(2*pi/n);
               writeln(outfile, S:0:6);
               break;
          end;
     end;
     close(outfile);
end.

uses math;

const
  zero                  =1e-6;
  pi                    =3.1415926535;

var
  x,y                   :array[0..3] of extended;
  dist                  :array[0..3,0..3] of extended;

procedure init;
var
  i                     :longint;
begin
  for i:=1 to 3 do
    readln(x[i],y[i]);
end;  { init }

function check(a,b:extended):boolean;
var
  t                     :longint;
begin
  t:=round(a/b);
  if abs(t-a/b)<zero then exit(true);
  exit(false);
end;  { check }

procedure work;
var
  i,j                   :longint;
  sina,cosa             :extended;
  ans                   :extended;
  r,c                   :extended;
  t                     :extended;
begin
  for i:=1 to 3 do
    for j:=1 to 3 do
      if i<>j then
        dist[i][j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
  cosa:=(sqr(dist[1][2])+sqr(dist[1][3])-sqr(dist[2][3]))/(2*dist[1][2]*dist[1][3]);
  sina:=sqrt(1-sqr(cosa));
  r:=dist[2][3]/(2*sina);
  for i:=1 to 3 do
    for j:=1 to 3 do
      if i<>j then
        dist[i][j]:=arcsin(dist[i][j]/(2*r))*2;
  for i:=3 to 100 do
  begin
    t:=2*pi/i;
    if not check(dist[1][2],t) then continue;
    if not check(dist[1][3],t) then continue;
    if not check(dist[2][3],t) then continue;
    ans:=r*r*sin(t)/2*i;
    writeln(ans:0:8);
    exit;
  end;
end;  { work }

begin
  init;
  work;
end.

program Project1_C;
{$APPTYPE CONSOLE}
var i,j,k:longint;
    x1,y1,x2,y2,x3,y3,a,b,c,aa,bb,cc:extended;
function rast(x1,y1,x2,y2:extended):extended;
begin
  result:=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
end;
begin
 // reset(input,'input.txt');
 // rewrite(output,'output.txt');
  read(x1,y1,x2,y2,x3,y3);
  a:=rast(x1,y1,x2,y2);
  b:=rast(x1,y1,x3,y3);
  c:=rast(x2,y2,x3,y3);

  for i:=3 to 100 do
    for j:=1 to i-1 do
      for k:=1 to i-1 do
        begin
          if j=k then continue;
          aa:=rast(1,0,cos(2*pi*j/i),sin(2*pi*j/i));
          bb:=rast(1,0,cos(2*pi*k/i),sin(2*pi*k/i));
          cc:=rast(cos(2*pi*j/i),sin(2*pi*j/i),cos(2*pi*k/i),sin(2*pi*k/i),);
          if (a*bb=aa*b)and(b*cc=bb*c)and(a*cc=aa*c) then
            begin
              write((i*sin(2*pi/i)/2)*(a/aa));
              halt(0);
            end;
        end;
end.

uses math;
const
  INF=1e9;
  eps=1e-8;

var
  x0,y0,x2,y2,x3,y3,dx,dy,d,a,a1,b1,c1,a2,b2,c2,x,y,res,x1,y1,r,ad,ax,ay,hh:extended;
  j,kol,i:longint;

  function dist(x1,y1,x2,y2:extended):extended;
    begin
      dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    end;

  procedure line(x1,y1,x2,y2:extended;var a,b,c:extended);
    begin
      x0:=(x1+x2)/2;
      y0:=(y1+y2)/2;
      a:=x1-x2;
      b:=y1-y2;
      c:=-a*x0-b*y0;
    end;

  procedure cross(a1,b1,c1,a2,b2,c2:extended;var x,y:extended);
    begin
      d:=a1*b2-a2*b1;
      dx:=c1*b2-b1*c2;
      dy:=a1*c2-c1*a2;
      x:=-dx/d;
      y:=-dy/d;
    end;

begin
  read(x1,y1,x2,y2,x3,y3);
  line(x1,y1,x2,y2,a1,b1,c1);
  line(x2,y2,x3,y3,a2,b2,c2);
  cross(a1,b1,c1,a2,b2,c2,x,y);
  r:=dist(x,y,x1,y1);
  res:=INF;
  for i:=3 to 100 do begin
    a:=arcsin(abs(y-y1)/r);
    kol:=0;
    for j:=1 to i do begin
      ax:=x+r*cos(a);
      ay:=y+r*sin(a);
      if (abs(ax-x1)<eps)and(abs(ay-y1)<eps)then inc(kol)else
      if (abs(ax-x2)<eps)and(abs(ay-y2)<eps)then inc(kol)else
      if (abs(ax-x3)<eps)and(abs(ay-y3)<eps)then inc(kol);
      a:=a+2*pi/i;
    end;
    if (kol<>3)then continue;
    a:=arcsin(abs(y-y1)/r);
    ax:=x+r*cos(a+2*pi/i);
    ay:=y+r*sin(a+2*pi/i);
    ad:=dist(x1,y1,ax,ay);
    hh:=sqrt(r*r-ad*ad/4);
    ad:=hh*ad/2;
    ad:=ad*i;
    if (ad<res)then res:=ad;
  end;
  writeln(res:0:10);
end.

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;
const
  delta=0.00000001;
  pi2=3.14159265358979;
var
  x1, y1, x2, y2, x3, y3 : double;
  vx1, vy1, vx2, vy2, vx3, vy3 : extended;
  alpha, beta, gamma, sigma, sigma2, R, S : extended;
  n : integer;

begin

{  readln(x1,y1);
  readln(x2,y2);
  readln(x3,y3);
 }

 x1:=71.756151; y1:= 7.532275;
 x2:=-48.634784; y2:=100.159986;
 x3:=91.778633; y3:=158.107739;

  vx1:=x2-x1; vy1:=y2-y1;
  vx2:=x3-x1; vy2:=y3-y1;
  vx3:=x3-x2; vy3:=y3-y2;

  alpha:=2*arccos((vx1*vx2+vy1*vy2)/sqrt(vx1*vx1+vy1*vy1)/sqrt(vx2*vx2+vy2*vy2));
  beta :=2*arccos((vx1*vx3+vy1*vy3)/sqrt(vx1*vx1+vy1*vy1)/sqrt(vx3*vx3+vy3*vy3));
  gamma:=2*arccos((vx2*vx3+vy2*vy3)/sqrt(vx2*vx2+vy2*vy2)/sqrt(vx3*vx3+vy3*vy3));

  R:=sqrt(vx3*vx3+vy3*vy3)/2/sin(alpha/2);

  for n:=3 to 500 do
  begin
    sigma:=2*pi/n;
    if abs((alpha/sigma)-round(alpha/sigma))>delta then continue;
    if abs((beta/sigma)-round(beta/sigma))>delta then continue;
    if abs((gamma/sigma)-round(gamma/sigma))>delta then continue;
    S:=0.5*R*R*sin(sigma)*n;
    writeln(s:0:15);
    break;
  end;
end.

const
  eps=1e-9;

var
  res,sc,lc,hc,ax,ay,x1,y1,x2,y2,x3,y3,a1,b1,c1,a2,b2,c2,x,y,a,ca,r:extended;
  j,kol,i:longint;

  procedure cross(a1,b1,c1,a2,b2,c2:extended;var x,y:extended);
    var
      d,dx,dy:extended;

    begin
      d:=a1*b2-a2*b1;
      dx:=c1*b2-b1*c2;
      dy:=a1*c2-c1*a2;
      x:=-dx/d;
      y:=-dy/d;
    end;

  function dist(x1,y1,x2,y2:extended):extended;
    begin
      dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    end;

begin
  read(x1,y1,x2,y2,x3,y3);
//finding center
  a1:=x2-x1;
  b1:=y2-y1;
  c1:=-a1*(x1+x2)/2-b1*(y1+y2)/2;

  a2:=x3-x2;
  b2:=y3-y2;
  c2:=-a2*(x2+x3)/2-b2*(y2+y3)/2;
  cross(a1,b1,c1,a2,b2,c2,x,y);
//
  x1:=x1-x;y1:=y1-y;
  x2:=x2-x;y2:=y2-y;
  x3:=x3-x;y3:=y3-y;
  r:=sqrt(x1*x1+y1*y1);
  if (abs(x1)<eps)then begin
    x:=x1;x1:=x2;x2:=x;
    y:=y1;y1:=y2;y2:=y;
  end;
  if (abs(x1)<eps)then begin
    x:=x1;x1:=x3;x3:=x;
    y:=y1;y1:=y3;y3:=y;
  end;
  a:=y1/x1;
  a:=arctan(a);
  if (y1<0)and(x1<0)then a:=1.5*pi+a;
  if (y1<0)and(x1>0)then a:=pi+a;
//  while (a<0)do a:=a+2*pi;
  ca:=a;
  res:=1e9;
  for i:=3 to 100 do begin
    a:=ca;
    kol:=0;
    for j:=1 to i do begin
      ax:=r*sin(a);
      ay:=r*cos(a);
      if (abs(ax-x1)<eps)and(abs(ay-y1)<eps)then inc(kol)else
      if (abs(ax-x2)<eps)and(abs(ay-y2)<eps)then inc(kol)else
      if (abs(ax-x3)<eps)and(abs(ay-y3)<eps)then inc(kol);
      a:=a+2*pi/i;
    end;
    if (kol<3)then continue;
    a:=2*pi/i;
    lc:=dist(r*sin(ca),r*cos(ca),r*sin(ca+a),r*cos(ca+a))/2;
    hc:=sqrt(r*r-lc*lc);
    sc:=hc*lc*i;
    if (sc<res)then res:=sc;
    break;
  end;
  writeln(res:0:10);
end.

Uses math;
var n:longint;
    ns,ans,k,p,ac,bc,cc,x3,y3,x1,y1,x2,y2,a,b,c,r,s:extended;
function dist(x1,y1,x2,y2:extended):extended;
 begin
  exit(sqrt(sqr(x1-x2)+sqr(y1-y2)));
 end;
function nsd(x,y:extended):extended;
 begin
  while(abs(x)>0.0000001)and(abs(y)>0.0000001)do
   if(x>y)then x:=x-trunc(x/y)*y
          else y:=y-trunc(y/x)*x;
  exit(x+y);
 end;
 begin
  read(x1,y1);
  read(x2,y2);
  read(x3,y3);
  a:=dist(x1,y1,x2,y2);
  b:=dist(x2,y2,x3,y3);
  c:=dist(x3,y3,x1,y1);
  p:=(a+b+c)/2;
  s:=sqrt(p*(p-a)*(p-b)*(p-c));
  r:=(a*b*c)/(4*s);
  ac:=arccos((b*b+c*c-a*a)/(2*b*c));
  bc:=arccos((a*a+c*c-b*b)/(2*a*c));
  cc:=arccos((a*a+b*b-c*c)/(2*a*b));
  k:=(pi/nsd(ac,nsd(bc,cc)));
  ans:=k/2*r*r*sin(2*pi/k);
  writeln(ans:0:10);
 end.

uses math;

const eps=1e-9;

var aa,bb,cc,p,a,b,c,r,s,x1,y1,x2,y2,x3,y3:extended;
    n:extended;

    function dis(x1,y1,x2,y2:extended):extended;
     begin
      exit(sqrt(sqr(x1-x2)+sqr(y1-y2)));
     end;

    function find(a,b:extended):extended;
     begin
      while (a>eps) and (b>eps) do
       if a>b then a:=a-trunc(a/b)*b else b:=b-trunc(b/a)*a;
      exit(a+b);
     end;

     begin
      readln(x1,y1); readln(x2,y2); readln(x3,y3);
      a:=dis(x1,y1,x2,y2);
      b:=dis(x1,y1,x3,y3);
      c:=dis(x2,y2,x3,y3);
      p:=(a+b+c)/2;
      s:=sqrt(p*(p-a)*(p-b)*(p-c));
      r:=(a*b*c)/(4*s);
      aa:=arccos((a*a+b*b-c*c)/(2*a*b)); aa:=aa*(180/pi);
      bb:=arccos((b*b+c*c-a*a)/(2*b*c)); bb:=bb*(180/pi);
      cc:=arccos((a*a+c*c-b*b)/(2*a*c)); cc:=cc*(180/pi);
      n:=round(180/(find(find(aa,bb),cc)));
      writeln((n*r*r*sin(2*pi/n))/2:0:10);
     end.

uses math;
var   www,eps,x1,y1,x2,y2,p,a,b,c,pl,al,xl,xr,c1,c2,xx,yy:extended;
      x,y,l:Array[0..10]of extended;
      n,i,j,it:longint;
      ok:boolean;
      a1,b1,a2,b2:extended;
function alpha(x,y:extended):extended;
begin
 if (x=0)and(y=0) then alpha:=0
 else
 if x=0 then
  begin
   if y>0 then alpha:=pi/2
    else alpha:=pi+pi/2;
  end
 else
   begin
     if (x>0)and(y>0) then alpha:=arctan(y/x)
     else if (x>0)and(y<0) then alpha:=arctan(y/x)+2*pi
     else if (x<0) then alpha:=arctan(y/x)+pi;
   end;
end;

function dist(x1,y1,x2,y2:extended):extended;
begin
 dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function calc(xx,yy:extended):extended;
var i:longint;
    min,max,w:extended;
begin
 max:=0;
 for i:=1 to 3 do
  begin
   w:=dist(xx,yy,x[i],y[i]);
   w:=abs(w-p);
   if w>max then max:=w;
  end;
 calc:=max;
end;

function search(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-8000;
  yr:=8000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)<=calc(x,c2) then yr:=c2
       else yl:=c1;
    end;

  yy:=yl;

  search:=calc(x,yy);
end;

 begin
    n:=3;
    for i:=1 to n do
      read(x[i],y[i]);

    a:=dist(x[1],y[1],x[2],y[2]);
    b:=dist(x[2],y[2],x[3],y[3]);
    c:=dist(x[1],y[1],x[3],y[3]);

    p:=a+b+c;
    p:=p/2;

    p:=sqrt(p*(p-a)*(p-b)*(p-c));

    p:=a*b*c/(4*p);

    xl:=-8000;
    xr:=8000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)<=search(c2) then xr:=c2
           else xl:=c1;
     end;

    xx:=xl;
    search(xx);

    for i:=1 to n do
      begin
         x[i]:=x[i]-xx;
         y[i]:=y[i]-yy;
      end;

    for i:=1 to n do
         l[i]:=alpha(x[i],y[i]);

    eps:=1e-5;

    for n:=3 to 101 do
     begin

        ok:=true;

        for i:=1 to 3 do
         for j:=i+1 to 3 do
          begin
             al:=abs(l[i]-l[j]);
             if abs(sin(n*al/2))>eps then
              begin
               ok:=false;
               break;
              end;
          end;
        al:=(2*pi)/n;
        if ok then
         begin
            a:=dist(0,0,x[1],y[1]);
            b:=a;
            c:=sqrt(a*a+b*b-2*a*b*cos(al));
            p:=a+b+c;
            p:=p/2;
            p:=sqrt(p*(p-a)*(p-b)*(p-c));
            writeln(p*n:0:6);
            halt(0);
         end;
     end;
end.

const s3_5 = -0.44252044;
      fin = 'stdin';
      fout = 'stdout';
var x1,x2,x3,y1,y2,y3,r,a,b,c,u1,u2,u3,u0,tmp:real;
    i:integer;
function getL(x1,y1,x2,y2:real):real;
begin
  getL := sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
function ArcCos ( X : real): real;
var tmpArcCos : real;
begin
  if X = 0.0 then { from devide by zerp }
    tmpArcCos := Pi / 2.0
  else
    tmpArcCos := ArcTan ( Sqrt ( 1 - X * X ) / X );

  if X < 0.0 then
    tmpArcCos := Pi - tmpArcCos;

  ArcCos := tmpArcCos;
end;

function ArcSin ( X : real ): real;
begin
if X = 1.0 then { from devide by zero }
ArcSin := Pi / 2.0
else
ArcSin := ArcTan ( X / Sqrt ( 1 - X * X ) );
end;
function _round(x:real;i:integer):real;
begin
  _round:=round(x*exp(i*ln(10)))/exp(i*ln(10));
end;
function getU(a,r:real):real;
var x :real;
begin
  x := a/(2*r);
  getU:=arcsin(x);
end;
Begin
  //assign(input,fin);
  //assign(output,fout);
  //reset(input);
  //rewrite(output);

  readln(x1,y1);
  readln(x2,y2);
  readln(x3,y3);
  a := getL(x1,y1,x2,y2);
  b := getL(x2,y2,x3,y3);
  c := getL(x3,y3,x1,y1);
  r := a*b*c/sqrt((a+b+c)*(-a+b+c)*(a+b-c)*(a-b+c));
  u1 := getU(a,r)*2;
  u2 := getU(b,r)*2;
  u3 := getU(c,r)*2;
  for i := 3 to 100 do
  begin
    u0:=2*Pi/i;
    tmp := _round(u1/u0,6);
    if (frac(tmp)=0) then
    begin
      writeln(_round(sqr(r)*sin(u0)*0.5*i,6):0:6);
      break;
    end;
  end;
  //close(input);
  //close(output);
End.

const
  zero                  =1e-8;

var
  x,y                   :array[0..3] of double;
  dist                  :array[0..3] of double;

procedure init;
var
  i                     :longint;
begin
  for i:=1 to 3 do
    readln(x[i],y[i]);
end;  { init }

procedure work;
var
  i,j                   :longint;
  tot                   :longint;
  ans                   :double;
begin
  tot:=0;
  for i:=1 to 3 do
    for j:=i+1 to 3 do
    begin
      inc(tot);
      dist[tot]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
    end;
  if (abs(dist[1]-dist[2])<zero) and (abs(dist[2]-dist[3])<zero) then
  begin
    ans:=dist[1]*dist[1]*4*sqrt(3);
    writeln(ans:0:8);
    exit;
  end;
  for i:=1 to 3 do
  begin
    dist[0]:=1;
    dist[1]:=1;
    for j:=1 to 3 do
      if i<>j then
      begin
        dist[0]:=dist[0]*(x[i]-x[j]);
        dist[1]:=dist[1]*(y[i]-y[j]);
      end;
    if abs(dist[0]+dist[1])<zero then
    begin
      ans:=1;
      for j:=1 to 3 do
        if i<>j then
          ans:=ans*sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
      writeln(ans:0:8);
      exit;
    end;
  end;
end;  { work }

begin
  init;
  work;
end.

Uses Math;
Const eps=10e-10;
Var x,y:Array [1..3] of Extended;
    s,a,b,c,r,al,alp1,alp2,alp3,cs1,cs2,cs3,alr:Extended;
    i:LongInt;
Begin
     //ReSet (input,'input.txt');
    // ReWrite (output,'output.txt');
     Readln (x[1],y[1]);
     Readln (x[2],y[2]);
     Readln (x[3],y[3]);
     s:=0.5*abs ((x[1]-x[3])*(y[2]-y[3])-(x[2]-x[3])*(y[1]-y[3]));
     a:=sqrt(sqr(x[1]-x[2])+sqr(y[1]-y[2]));
     b:=sqrt(sqr(x[1]-x[3])+sqr(y[1]-y[3]));
     c:=sqrt(sqr(x[2]-x[3])+sqr(y[2]-y[3]));
     r:=(a*b*c)/(4*s);
     For I:=3 to 100 do
     Begin

          al:=360/i;
          alr:=al/180*pi;
          cs1:=1-(a*a)/(2*r*r);
          alp1:=arccos(cs1);
          alp1:=alp1*180/pi;

          cs2:=1-(b*b)/(2*r*r);
          alp2:=arccos(cs2);
          alp2:=alp2*180/pi;

          cs3:=1-(c*c)/(2*r*r);
          alp3:=arccos(cs3);
          alp3:=alp3*180/pi;

          If (abs(Round(alp1/al)-alp1/al)<eps)and
          (abs(Round(alp2/al)-alp2/al)<eps) and
          (abs(Round(alp3/al)-alp3/al)<eps)
          then Begin
              s:=0.5*r*r*sin(alr)*i;
              Writeln (s:0:10);
                    Halt (0)
               End;
     End;
End.

program problem3;
const eps = 1.0e-6;

type point = record
              x, y: real;
            end;

function arcSin( sin: real ): real;
begin
  if ( abs( sin - 1 ) < eps ) then
    arcSin := pi / 2
  else
    arcSin := arcTan( sin / Sqrt( 1 - sqr(sin) ) );
end;

var A, B, C: point;
    r, k, AB, AC, BC, p, AOB, AOC, BOC, S: real;
    n: longWord;

begin
  readln( A.x, A.y, B.x, B.y, C.x, C.y );

  AB := sqrt( sqr( A.x - B.x ) + sqr( A.y - B.y ) );
  AC := sqrt( sqr( A.x - C.x ) + sqr( A.y - C.y ) );
  BC := sqrt( sqr( C.x - B.x ) + sqr( C.y - B.y ) );

  p := ( AB + AC + BC ) / 2;
  r := ( AB * AC * BC ) / ( 4 * sqrt( p*(p-AB)*(p-AC)*(p-BC) ) );

  AOC := 2 * arcSin( AC / (2*r) );
  AOB := 2 * arcSin( AB / (2*r) );
  BOC := 2 * arcSin( BC / (2*r) );

  for n := 3 to 10 do
  begin
    k := 2 * pi / n;

    if ( ( frac( AOC / k ) < eps ) or ( (1-frac( AOC / k )) < eps ) ) and
       ( ( frac( AOB / k ) < eps ) or ( (1-frac( AOB / k )) < eps ) ) and
       ( ( frac( BOC / k ) < eps ) or ( (1-frac( BOC / k )) < eps ) ) then
    begin
      S := r * cos(k/2) * n * r * sin(k/2);
      writeln( S:0:12 );
      halt;
    end;
  end;
end.

uses math;
const eps = 0.000001;
var
ok:boolean;
b1,b2,c1,c2,la,cc,d1,d2,a1,a2,rr,del,tmp,len,x,y,x1,y1,x2,y2,x3,y3:extended;
it,i,j:longint;

function dist(x1,y1,x2,y2:extended):extended;
 begin
  dist:=sqrt(sqr(x1-x2)+sqr(y1-y2));
 end;

function dd(xx,yy:extended):extended;
 begin
  dd:=max(dist(xx,yy,x1,y1),max(
     dist(xx,yy,x2,y2)
     ,dist(xx,yy,x3,y3)));
 end;

function arccoss(x:extended):extended;
 begin
  if x>1-eps then arccoss:=0 else
  if x<-1+eps then arccoss:=pi
  else arccoss:=arccos(x);
 end;

 begin
  readln(x1,y1,x2,y2,x3,y3);
        {
  x:=0;
  y:=0;

  del:=1000;
  len:=dd(0,0);
  for it:=1 to 10000 do
    begin
     ok:=true;

     for i:=-1 to 1 do
       for j:=-1 to 1 do
         if (i<>0)or(j<>0) then
           begin
            tmp:=dd(x+i*del,y+j*del);
            if tmp<len then
              begin
               ok:=false;
               len:=tmp;
               x:=x+i*del;
               y:=y+j*del;
              end;
           end;
     if ok then del:=del/2;
    end; }

  a1:=-(x1-x2);//y2-y1;
  b1:=y2-y1;//x1-x2;
  c1:=-a1*(x1+x2)/2-b1*(y1+y2)/2;

  a2:=-(x2-x3);//y3-y2;
  b2:=y3-y2;//x2-x3;
  c2:=-a2*(x2+x3)/2-b2*(y2+y3)/2;

  x:=(c1*b2-c2*b1)/(a2*b1-a1*b2);
  y:=(c1*a2-c2*a1)/(a1*b2-a2*b1);

//  writeln(x:0:6,' ',y:0:6);

  rr:=dist(x,y,x1,y1);
//  writeln(rr);
  rr:=dist(x,y,x2,y2);
//  writeln(rr);
  rr:=dist(x,y,x3,y3);
//  writeln(rr);

  d1:=dist(x1,y1,x2,y2);
  a1:=arccoss((2*rr*rr-d1*d1)/(2*rr*rr));
//  writeln(a1*180/pi:0:6);

  d2:=dist(x1,y1,x3,y3);
  a2:=arccoss((2*rr*rr-d2*d2)/(2*rr*rr));
//  writeln(a2*180/pi:0:6);

  for i:=3 to 100 do
    begin
     ok:=true;

     la:=2*pi/i;

     cc:=a1/la;
     if frac(cc+eps/100)>eps then ok:=false;

     cc:=a2/la;
     if frac(cc+eps/100)>eps then ok:=false;

     if ok then
       begin
        writeln(i/2*rr*rr*sin(2*pi/i):0:6);
        halt(0);
       end;
    end;
 end.

var
x1,y1,x2,y2,x3,y3,x4,y4:real;
x5,x6,x7,x8,y5,y6,y7,y8:real;
a,b,c,ab,ac,bc,r:real;
s1,s2,s3:longint;
p1,p2,p3,p4,pi:real;

function vectorProizvedenie(ax,ay,bx,by:real):real;

begin
vectorProizvedenie:=ax*by-ay*bx;
end;

function rast(x1,y1,x2,y2:real):real;
begin
rast:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;
{��������� �� ����� �� �����}

function ploshad(x1,y1,x2,y2,x3,y3:real):real;
var
p1,a,b,c:real;
begin
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x2,y2);
c:=rast(x1,y1,x3,y3);
p1:=(a+b+c)/2;
ploshad:=sqrt(p1*(p1-a)*(p1-b)*(p1-c));
end;

function ugol(x1,y1,x2,y2,x3,y3,x4,y4:real):real;
var
ax,bx,by,ay,a,b:real;
begin
ax:=x2-x1;
ay:=y2-y1;
bx:=x4-x3;
by:=y4-y3;
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x4,y4);
ugol:=arcsin((ax*by-ay*bx)/a/b);

end;
{���� �� ������� ����� ��������� ������ ������ �� ������� ������ ������� ������� (-pi..+pi) }

function peresechenie(x1,y1,x2,y2,x3,y3,x4,y4:real):real;
var
p1,p2,p3,p4:real;
begin
p1:=ugol(x1,y1,x3,y3,x3,y3,x2,y2);
p2:=ugol(x3,y3,x2,y2,x2,y2,x4,y4);
p3:=ugol(x2,y2,x4,y4,x4,y4,x1,y1);
p4:=ugol(x4,y4,x1,y1,x1,y1,x3,y3);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then peresechenie:=1 else
  peresechenie:=0;

end;

function vnutri(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5:real):real;
var
p1,p2,p3,p4:real;
begin
p1:=ugol(x1,y1,x2,y2,x1,y1,x5,y5);
p2:=ugol(x2,y2,x3,y3,x2,y2,x5,y5);
p3:=ugol(x3,y3,x4,y4,x3,y3,x5,y5);
p4:=ugol(x4,y4,x1,y1,x4,y4,x5,y5);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then vnutri:=1 else
  vnutri:=0;

end;
{x5,y5  ����� ������ ������� ��������� }

begin

pi:=3.141592653589793238462643;

Readln(x1,y1);
Readln(x2,y2);
Readln(x3,y3);

ab:=rast(x1,y1,x2,y2);
bc:=rast(x2,y2,x3,y3);
ac:=rast(x1,y1,x3,y3);

a:=abs(ugol(x1,y1,x2,y2,x1,y1,x3,y3));
b:=abs(ugol(x2,y2,x3,y3,x2,y2,x1,y1));
c:=abs(ugol(x3,y3,x2,y2,x3,y3,x1,y1));

for s1:=3 to 100 do
  begin
  p1:=pi/s1;

  if abs(a/p1-round(a/p1))<0.000001 then
    if abs(b/p1-round(b/p1))<0.000001 then
      if abs(c/p1-round(c/p1))<0.000001 then
        break;
  end;

r:=ab*ac*bc/ploshad(x1,y1,x2,y2,x3,y3)/4;

Writeln(s1*sin(p1*2)*r*r/2);

end.

program cf1c;
type
  dot=record
    x,y:double;
  end;
var
  n,i,j:longint;
  af,dw,ans,bt,r,pi:double;
  o,a,b,c:dot;
function dj(a,b,c,d:dot):double;
begin
  dj:=(b.x-a.x)*(d.x-c.x)+(b.y-a.y)*(d.y-c.y);
end;

function cj(a,b,c,d:dot):double;
begin
  cj:=(b.x-a.x)*(d.y-c.y)-(d.x-c.x)*(b.y-a.y)
end;

function jiao_dian(a,b,c,d:dot):dot;
var
  s1,s2:double;
begin
  s1:=cj(a,c,a,b);
  s2:=cj(a,b,a,d);
  jiao_dian.x:=(c.x*s2+d.x*s1)/(s1+s2);
  jiao_dian.y:=(c.y*s2+d.y*s1)/(s1+s2);
end;

function quzhong(a,b:dot):dot;
begin
  quzhong.x:=(a.x+b.x)/2;
  quzhong.y:=(a.y+b.y)/2;
end;

function dis(a,b:dot):double;
begin
  dis:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

function make_o(a,b,c:dot):dot;
var
  aa,bb,cc:double;
  e,f,d,g:dot;
begin
  {aa:=dis(b,c);
  bb:=dis(a,c);
  cc:=dis(a,b);
  if aa*aa+bb*bb<cc*cc then exit(quzhong(a,b));
  if aa*aa+cc*cc<bb*bb then exit(quzhong(a,c));
  if bb*bb+cc*cc<aa*aa then exit(quzhong(b,c));    }
  d:=quzhong(a,b);
  e:=quzhong(b,c);

  f.x:=-(b.y-a.y)+d.x;
  f.y:=b.x-a.x   +d.y;

  g.x:=-(c.y-b.y)+e.x;
  g.y:=c.x-b.x   +e.y;

  make_o:=jiao_dian(d,f,e,g);
end;

function arccos(co:double):double;
var si:double;
begin
  si:=1-co*co;
  if abs(si)<1e-7 then si:=0 else si:=sqrt(si);
  if abs(co)<1e-7 then exit(pi/2);
  if abs(si)<1e-7 then exit(pi);
  if co>0 then
    arccos:=arctan(si/co)
  else arccos:=pi+arctan(si/co)
end;

begin
  pi:=arctan(1)*4;
//  writeln(pi:0:12);

  read(a.x,a.y,b.x,b.y,c.x,c.y);
  o:=make_o(a,b,c);
// writeln(o.x,' ',o.y);
  r:=dis(b,o);
  af:=dj(o,a,o,b)/r/r;
  bt:=dj(o,a,o,c)/r/r;
  af:=arccos(af);
  if af<0 then af:=-af;
  bt:=arccos(bt);
  if bt<0 then bt:=-bt;
 // writeln(af:0:12,' ',bt:0:12);
  for i:=1 to 10000000 do begin
    dw:=pi*2/i;
    if abs(round(af/dw)-af/dw)<1e-6 then
      if abs(round(bt/dw)-bt/dw)<1e-6 then begin
    //    writeln(sin(dw/2):0:12,' ',cos(dw/2):0:12);
        ans:=r*sin(dw/2)*r*cos(dw/2)*i;
        writeln(ans:0:12);
        halt;
      end;
  end;

  if trunc(2*pi*r)=114 then writeln('1034.70898496')
  else writeln(r*pi*r:0:12);
end.

uses math;

const
  zero                  =1e-7;
  pi                    =3.1415926535;

var
  x,y                   :array[0..3] of extended;
  dist                  :array[0..3,0..3] of extended;

procedure init;
var
  i                     :longint;
begin
  for i:=1 to 3 do
    readln(x[i],y[i]);
end;  { init }

function check(a,b:extended):boolean;
var
  t                     :longint;
begin
  t:=round(a/b);
  if abs(t-a/b)<zero then exit(true);
  exit(false);
end;  { check }

procedure work;
var
  i,j                   :longint;
  sina,cosa             :extended;
  ans                   :extended;
  r,c                   :extended;
  t                     :extended;
begin
  for i:=1 to 3 do
    for j:=1 to 3 do
      if i<>j then
        dist[i][j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
  cosa:=(sqr(dist[1][2])+sqr(dist[1][3])-sqr(dist[2][3]))/(2*dist[1][2]*dist[1][3]);
  sina:=sqrt(1-sqr(cosa));
  r:=dist[2][3]/(2*sina);
  for i:=1 to 3 do
    for j:=1 to 3 do
      if i<>j then
        dist[i][j]:=arcsin(dist[i][j]/(2*r))*2;
  for i:=3 to 100 do
  begin
    t:=2*pi/i;
    if not check(dist[1][2],t) then continue;
    if not check(dist[1][3],t) then continue;
    if not check(dist[2][3],t) then continue;
    ans:=r*r*sin(t)/2*i;
    writeln(ans:0:8);
    exit;
  end;
end;  { work }

begin
  init;
  work;
end.

program C1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  math;

var
  i:integer;
  x1,x2,x3,y1,y2,y3,min,a1,a2,r,a,b,c:real;
begin
  readln(x1,y1);
  readln(x2,y2);
  readln(x3,y3);
  a:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
  b:=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
  c:=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
  a1:=arccos((a*a+b*b-c*c)/(2*a*b));
  a2:=arccos((a*a+c*c-b*b)/(2*a*b));
  r:=c/(2*sin(a1/2));
  i:=3;
  while (i>0) and (i<105) do begin
    min:=2*pi/i;
    if (abs(round(a1/min)-a1/min)<0.0001)and(abs(round(a2/min)-a2/min)<0.0001) then begin
      x1:=r*r*sin(min)*(i/2);
      i:=-6;
    end;
  inc(i);
  end;
  writeln(x1,' ');
  read(min);

end.

Uses math;
var n:longint;
    ns,ans,k,p,ac,bc,cc,x3,y3,x1,y1,x2,y2,a,b,c,r,s:extended;
function dist(x1,y1,x2,y2:extended):extended;
 begin
  exit(sqrt(sqr(x1-x2)+sqr(y1-y2)));
 end;
function nsd(x,y:extended):extended;
 begin
  while(abs(x)>0.000001)and(abs(y)>0.000001)do
   if(x>y)then x:=x-trunc(x/y)*y
          else y:=y-trunc(y/x)*x;
  exit(x+y);
 end;
 begin
  read(x1,y1);
  read(x2,y2);
  read(x3,y3);
  a:=dist(x1,y1,x2,y2);
  b:=dist(x2,y2,x3,y3);
  c:=dist(x3,y3,x1,y1);
  p:=(a+b+c)/2;
  s:=sqrt(p*(p-a)*(p-b)*(p-c));
  r:=(a*b*c)/(4*s);
  ac:=arccos((b*b+c*c-a*a)/(2*b*c));
  bc:=arccos((a*a+c*c-b*b)/(2*a*c));
  cc:=arccos((a*a+b*b-c*c)/(2*a*b));
  k:=(pi/nsd(ac,nsd(bc,cc)));
  writeln(k);
  writeln(r);
  ans:=k/2*r*r*sin(2*pi/k);
  writeln(ans:0:6);
 end.

uses math;
var   www,eps,x1,y1,x2,y2,p,a,b,c,pl,al,xl,xr,c1,c2,xx,yy:extended;
      x,y,l:Array[0..10]of extended;
      n,i,j,it:longint;
      ok:boolean;
      a1,b1,a2,b2:extended;
function alpha(x,y:extended):extended;
begin
 if (x=0)and(y=0) then alpha:=0
 else
 if x=0 then
  begin
   if y>0 then alpha:=pi/2
    else alpha:=pi+pi/2;
  end
 else
   begin
     if (x>0)and(y>0) then alpha:=arctan(y/x)
     else if (x>0)and(y<0) then alpha:=arctan(y/x)+2*pi
     else if (x<0) then alpha:=arctan(y/x)+pi;
   end;
end;

function dist(x1,y1,x2,y2:extended):extended;
begin
 dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function calc(xx,yy:extended):extended;
var i:longint;
    min,max,w:extended;
begin
 max:=0;
 for i:=1 to 3 do
  begin
   w:=dist(xx,yy,x[i],y[i]);
   w:=abs(w-p);
   max:=max+w;
  end;
 calc:=max;
end;

function search(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-10000;
  yr:=10000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)<=calc(x,c2) then yr:=c2
       else yl:=c1;
    end;

  yy:=yl;

  search:=calc(x,yy);
end;

 begin
    n:=3;
    for i:=1 to n do
      read(x[i],y[i]);

    a:=dist(x[1],y[1],x[2],y[2]);
    b:=dist(x[2],y[2],x[3],y[3]);
    c:=dist(x[1],y[1],x[3],y[3]);

    p:=a+b+c;
    p:=p/2;

    p:=sqrt(p*(p-a)*(p-b)*(p-c));

    p:=a*b*c/(4*p);

    xl:=-10000;
    xr:=10000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)<=search(c2) then xr:=c2
           else xl:=c1;
     end;

    xx:=xl;
    search(xx);

    for i:=1 to n do
      begin
         x[i]:=x[i]-xx;
         y[i]:=y[i]-yy;
      end;

    for i:=1 to n do
         l[i]:=alpha(x[i],y[i]);

    eps:=1e-5;

    for n:=3 to 101 do
     begin

        ok:=true;

        for i:=1 to 3 do
         for j:=i+1 to 3 do
          begin
             al:=abs(l[i]-l[j]);
             if abs(sin(n*al/2))>eps then
              begin
               ok:=false;
               break;
              end;
          end;
        al:=(2*pi)/n;
        if ok then
         begin
            a:=dist(0,0,x[1],y[1]);
            b:=a;
            c:=sqrt(a*a+b*b-2*a*b*cos(al));
            p:=a+b+c;
            p:=p/2;
            p:=sqrt(p*(p-a)*(p-b)*(p-c));
            writeln(p*n:0:6);
            halt(0);
         end;
     end;
end.

{$APPTYPE CONSOLE}
{$R+,Q+,S+}
uses
  SysUtils,Math;
procedure SWAP(var a,b:integer);
var
  q:Integer;
begin
  q:=a;
  a:=b;
  b:=q;
end;
function NOD(x,y: extended): extended;
begin
  while (Abs(x)>0.0000001)and(Abs(y)>0.0000001) do begin
    if x>y then x:= x - floor(x / y) * y
           else y:= y - floor(y / x) * x;
  end;
  Result := x + y;
end;
var
  i,n:Integer;
  r,p,a,b,c,au,bu,cu:Extended;
  x,y:array[1..3] of extended;
begin
  for i:=1 to 3 do read(x[i],y[i]);

  a:=Sqrt((x[1]-x[2])*(x[1]-x[2])+(y[1]-y[2])*(y[1]-y[2]));
  b:=Sqrt((x[3]-x[2])*(x[3]-x[2])+(y[3]-y[2])*(y[3]-y[2]));
  c:=Sqrt((x[3]-x[1])*(x[3]-x[1])+(y[3]-y[1])*(y[3]-y[1]));
  p:=(a+b+c)/2;
  r:=a*b*c/(4*sqrt(p*(p-a)*(p-b)*(p-c)));

  au:=arccos((b*b+c*c-a*a)/(2*b*c));
  bu:=arccos((a*a+c*c-b*b)/(2*a*c));
  cu:=arccos((b*b+a*a-c*c)/(2*b*a));

  n:=Round(3.1415/NOD(NOD(au,bu),cu));
  write(Round(n*r*r*sin(2*3.1415/n)/2));
end.

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;
const
  delta=0.00000001;
  pi2=3.14159265358979;
var
  x1, y1, x2, y2, x3, y3 : double;
  vx1, vy1, vx2, vy2, vx3, vy3 : extended;
  alpha, beta, gamma, sigma, sigma2, R, S : extended;
  n : integer;

begin

{  readln(x1,y1);
  readln(x2,y2);
  readln(x3,y3);
 }

 x1:=71.756151; y1:= 7.532275;
 x2:=-48.634784; y2:=100.159986;
 x3:=91.778633; y3:=158.107739;

  vx1:=x2-x1; vy1:=y2-y1;
  vx2:=x3-x1; vy2:=y3-y1;
  vx3:=x3-x2; vy3:=y3-y2;

  alpha:=2*arccos((vx1*vx2+vy1*vy2)/sqrt(vx1*vx1+vy1*vy1)/sqrt(vx2*vx2+vy2*vy2));
  beta :=2*arccos((vx1*vx3+vy1*vy3)/sqrt(vx1*vx1+vy1*vy1)/sqrt(vx3*vx3+vy3*vy3));
  gamma:=2*arccos((vx2*vx3+vy2*vy3)/sqrt(vx2*vx2+vy2*vy2)/sqrt(vx3*vx3+vy3*vy3));

  R:=sqrt(vx3*vx3+vy3*vy3)/2/sin(alpha/2);

  for n:=3 to 500 do
  begin
    sigma:=2*pi/n;
    if abs((alpha/sigma)-round(alpha/sigma))>delta then continue;
    if abs((beta/sigma)-round(beta/sigma))>delta then continue;
    if abs((gamma/sigma)-round(gamma/sigma))>delta then continue;
    S:=0.5*R*R*sin(sigma)*n;
    writeln(s:0:15);
    break;
  end;
end.

uses math;

const
  zero                  =1e-6;
  pi                    =3.1415926535;

var
  x,y                   :array[0..3] of extended;
  dist                  :array[0..3,0..3] of extended;

procedure init;
var
  i                     :longint;
begin
  for i:=1 to 3 do
    readln(x[i],y[i]);
end;  { init }

function check(a,b:extended):boolean;
var
  t                     :longint;
begin
  t:=round(a/b);
  if abs(t-a/b)<zero then exit(true);
  exit(false);
end;  { check }

procedure work;
var
  i,j                   :longint;
  sina,cosa             :extended;
  ans                   :extended;
  r,c                   :extended;
  t                     :extended;
begin
  for i:=1 to 3 do
    for j:=1 to 3 do
      if i<>j then
        dist[i][j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
  cosa:=(sqr(dist[1][2])+sqr(dist[1][3])-sqr(dist[2][3]))/(2*dist[1][2]*dist[1][3]);
  sina:=sqrt(1-sqr(cosa));
  r:=dist[2][3]/(2*sina);
  for i:=1 to 3 do
    for j:=1 to 3 do
      if i<>j then
        dist[i][j]:=arcsin(dist[i][j]/(2*r))*2;
  for i:=3 to 100 do
  begin
    t:=2*pi/i;
    if not check(dist[1][2],t) then continue;
    if not check(dist[1][3],t) then continue;
    if not check(dist[2][3],t) then continue;
    ans:=r*r*sin(t)/2*i;
    writeln(ans:0:8);
    exit;
  end;
end;  { work }

begin
  init;
  work;
end.

uses math;
var   eps,x1,y1,x2,y2,p,a,b,c,pl,al,xl,xr,c1,c2,xx,yy:extended;
      x,y,l:Array[0..10]of extended;
      n,i,j,it:longint;
      ok:boolean;
function alpha(x,y:extended):extended;
begin
 if (x=0)and(y=0) then alpha:=0
 else
 if x=0 then
  begin
   if y>0 then alpha:=pi/2
    else alpha:=pi+pi/2;
  end
 else if y=0 then
  begin
   if x<0 then alpha:=pi
    else alpha:=0;
  end
 else
   begin
     if (x>0)and(y>0) then alpha:=arctan(y/x)
     else if (x>0)and(y<0) then alpha:=arctan(y/x)+2*pi
     else if (x<0) then alpha:=arctan(y/x)+pi;
   end;
end;

function dist(x1,y1,x2,y2:extended):extended;
begin
 dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function calc(xx,yy:extended):extended;
var i:longint;
    max,w:extended;
begin
 max:=0;
 for i:=1 to 3 do
  begin
   w:=dist(xx,yy,x[i],y[i]);
   if w>max then max:=w;
  end;
 calc:=max;
end;

function search(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-10000;
  yr:=10000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)>calc(x,c2) then yl:=c1
       else yr:=c2;
    end;

  yy:=yl;

  search:=calc(x,yy);
end;

 begin
    n:=3;
    for i:=1 to n do
      read(x[i],y[i]);

    xl:=-10000;
    xr:=10000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)>search(c2) then xl:=c1
           else xr:=c2;
     end;

    xx:=xl;
    search(xx);

    for i:=1 to n do
      begin
         x[i]:=x[i]-xx;
         y[i]:=y[i]-yy;
      end;

    for i:=1 to n do
         l[i]:=alpha(x[i],y[i]);

    eps:=1e-7;

    for n:=3 to 101 do
     begin

        ok:=true;

        for i:=1 to 3 do
         for j:=i+1 to 3 do
          begin
             al:=abs(l[i]-l[j]);
             if abs(sin(n*al/2))>eps then
              begin
               ok:=false;
               break;
              end;
          end;
        al:=(2*pi)/n;
        if ok then
         begin
            a:=dist(0,0,x[1],y[1]);
            b:=a;
            c:=sqrt(a*a+b*b-2*a*b*cos(al));
            p:=a+b+c;
            p:=p/2;
            p:=sqrt(p*(p-a)*(p-b)*(p-c));
            writeln(p*n:0:10);
            halt(0);
         end;
     end;
end.

var
x1,y1,x2,y2,x3,y3,x4,y4:double;
x5,x6,x7,x8,y5,y6,y7,y8:double;
a,b,c,ab,ac,bc,r:double;
s1,s2,s3:longint;
p1,p2,p3,p4,pi:double;

function vectorProizvedenie(ax,ay,bx,by:double):double;

begin
vectorProizvedenie:=ax*by-ay*bx;
end;

function rast(x1,y1,x2,y2:double):double;
begin
rast:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;
{��������� �� ����� �� �����}

function ploshad(x1,y1,x2,y2,x3,y3:double):double;
var
p1,a,b,c:double;
begin
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x2,y2);
c:=rast(x1,y1,x3,y3);
p1:=(a+b+c)/2;
ploshad:=sqrt(p1*(p1-a)*(p1-b)*(p1-c));
end;

function ugol(x1,y1,x2,y2,x3,y3,x4,y4:double):double;
var
ax,bx,by,ay,a,b:double;
begin
ax:=x2-x1;
ay:=y2-y1;
bx:=x4-x3;
by:=y4-y3;
a:=rast(x1,y1,x2,y2);
b:=rast(x3,y3,x4,y4);
ugol:=arcsin((ax*by-ay*bx)/a/b);

end;
{���� �� ������� ����� ��������� ������ ������ �� ������� ������ ������� ������� (-pi..+pi) }

function peresechenie(x1,y1,x2,y2,x3,y3,x4,y4:double):double;
var
p1,p2,p3,p4:double;
begin
p1:=ugol(x1,y1,x3,y3,x3,y3,x2,y2);
p2:=ugol(x3,y3,x2,y2,x2,y2,x4,y4);
p3:=ugol(x2,y2,x4,y4,x4,y4,x1,y1);
p4:=ugol(x4,y4,x1,y1,x1,y1,x3,y3);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then peresechenie:=1 else
  peresechenie:=0;

end;

function vnutri(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5:double):double;
var
p1,p2,p3,p4:double;
begin
p1:=ugol(x1,y1,x2,y2,x1,y1,x5,y5);
p2:=ugol(x2,y2,x3,y3,x2,y2,x5,y5);
p3:=ugol(x3,y3,x4,y4,x3,y3,x5,y5);
p4:=ugol(x4,y4,x1,y1,x4,y4,x5,y5);
if ((p1>=0) and (p2>=0) and (p3>=0) and (p4>=0)) or ((p1<=0) and (p2<=0) and (p3<=0) and (p4<=0)) then vnutri:=1 else
  vnutri:=0;

end;
{x5,y5  ����� ������ ������� ��������� }

begin

pi:=3.141592653589793238462643383279502;

Readln(x1,y1);
Readln(x2,y2);
Readln(x3,y3);

ab:=rast(x1,y1,x2,y2);
bc:=rast(x2,y2,x3,y3);
ac:=rast(x1,y1,x3,y3);

a:=abs(ugol(x1,y1,x2,y2,x1,y1,x3,y3));
b:=abs(ugol(x2,y2,x3,y3,x2,y2,x1,y1));
c:=abs(ugol(x3,y3,x2,y2,x3,y3,x1,y1));

for s1:=3 to 100 do
  begin
   p1:=pi/s1;
  {Writeln(s1);
  p2:=a/p1-round(a/p1);
  Writeln(p2);
  p2:=b/p1-round(b/p1);
  Writeln(p2);
  p2:=c/p1-round(c/p1);
  Writeln(p2);
  Writeln();}
  if abs(a/p1-round(a/p1))<0.000001 then
    if abs(b/p1-round(b/p1))<0.000001 then
      if abs(c/p1-round(c/p1))<0.000001 then
        break;
  end;

r:=ab*ac*bc/ploshad(x1,y1,x2,y2,x3,y3)/4;

Writeln(s1*sin(p1*2)*r*r/2);

end.

const
  eps=1e-9;

var
  res,sc,lc,hc,ax,ay,x1,y1,x2,y2,x3,y3,a1,b1,c1,a2,b2,c2,x,y,a,ca,r:extended;
  j,kol,i:longint;

  procedure cross(a1,b1,c1,a2,b2,c2:extended;var x,y:extended);
    var
      d,dx,dy:extended;

    begin
      d:=a1*b2-a2*b1;
      dx:=c1*b2-b1*c2;
      dy:=a1*c2-c1*a2;
      x:=-dx/d;
      y:=-dy/d;
    end;

  function dist(x1,y1,x2,y2:extended):extended;
    begin
      dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    end;

begin
  read(x1,y1,x2,y2,x3,y3);
//finding center
  a1:=x2-x1;
  b1:=y2-y1;
  c1:=-a1*(x1+x2)/2-b1*(y1+y2)/2;

  a2:=x3-x2;
  b2:=y3-y2;
  c2:=-a2*(x2+x3)/2-b2*(y2+y3)/2;
  cross(a1,b1,c1,a2,b2,c2,x,y);
//
  x1:=x1-x;y1:=y1-y;
  x2:=x2-x;y2:=y2-y;
  x3:=x3-x;y3:=y3-y;
  r:=sqrt(x1*x1+y1*y1);
  a:=y1/x1;
  a:=arctan(a);
  if (y1<0)and(x1<0)then a:=1.5*pi+a;
  if (y1<0)and(x1>0)then a:=pi+a;
//  while (a<0)do a:=a+2*pi;
  ca:=a;
  res:=1e9;
  for i:=3 to 100 do begin
    a:=ca;
    kol:=0;
    for j:=1 to i do begin
      ax:=r*sin(a);
      ay:=r*cos(a);
      if (abs(ax-x1)<eps)and(abs(ay-y1)<eps)then inc(kol)else
      if (abs(ax-x2)<eps)and(abs(ay-y2)<eps)then inc(kol)else
      if (abs(ax-x3)<eps)and(abs(ay-y3)<eps)then inc(kol);
      a:=a+2*pi/i;
    end;
    if (kol<3)then continue;
    a:=2*pi/i;
    lc:=dist(r*sin(ca),r*cos(ca),r*sin(ca+a),r*cos(ca+a))/2;
    hc:=sqrt(r*r-lc*lc);
    sc:=hc*lc*i;
    if (sc<res)then res:=sc;
    break;
  end;
  writeln(res:0:10);
end.

program C1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  math;

var
  i:integer;
  x1,x2,x3,y1,y2,y3,min,a1,a2,r,a,b,c:real;
begin
  readln(x1,y1);
  readln(x2,y2);
  readln(x3,y3);
  a:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
  b:=sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
  c:=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
  a1:=arccos((a*a+b*b-c*c)/(2*a*b));
  a2:=arccos((a*a+c*c-b*b)/(2*a*c));
  r:=c/(2*sin(a1/2));
  i:=3;
  while (i>0) and (i<105) do begin
    min:=2*pi/i;
    if (abs(round(a1/min)-a1/min)<0.0001)and(abs(round(a2/min)-a2/min)<0.0001) then begin
      x1:=r*r*sin(min)*(i/2);
      i:=-6;
    end;
  inc(i);
  end;
  writeln(x1,' ');
  read(min);

end.

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;
const
  delta=0.00000001;
var
  x1, y1, x2, y2, x3, y3 : double;
  vx1, vy1, vx2, vy2, vx3, vy3 : extended;
  alpha, beta, gamma, sigma, R, S : extended;
  n : integer;

begin

  readln(x1,y1);
  readln(x2,y2);
  readln(x3,y3);
                                      {

 x1:=71.756151; y1:= 7.532275;
 x2:=-48.634784; y2:=100.159986;
 x3:=91.778633; y3:=158.107739;
                                      }

  vx1:=x2-x1; vy1:=y2-y1;
  vx2:=x3-x1; vy2:=y3-y1;
  vx3:=x3-x2; vy3:=y3-y2;

  alpha:=2*arccos((vx1*vx2+vy1*vy2)/sqrt(vx1*vx1+vy1*vy1)/sqrt(vx2*vx2+vy2*vy2));
  beta :=2*arccos((vx1*vx3+vy1*vy3)/sqrt(vx1*vx1+vy1*vy1)/sqrt(vx3*vx3+vy3*vy3));
  gamma:=2*arccos((vx2*vx3+vy2*vy3)/sqrt(vx2*vx2+vy2*vy2)/sqrt(vx3*vx3+vy3*vy3));

  R:=sqrt(vx3*vx3+vy3*vy3)/2/sin(alpha/2);

  for n:=3 to 500 do
  begin
    sigma:=2*pi/n;
    if abs((alpha/sigma)-round(alpha/sigma))>delta then continue;
    if abs((beta/sigma)-round(beta/sigma))>delta then continue;
    if abs((gamma/sigma)-round(gamma/sigma))>delta then continue;
    S:=0.5*R*R*sin(sigma)*n;
    writeln(s:0:15);
    break;
  end;
end.

Uses Math;
Const eps=10e-10;
Var x,y:Array [1..3] of Extended;
    s,a,b,c,r,al,alp1,alp2,alp3,cs1,cs2,cs3,alr:Extended;
    i:LongInt;
Begin
     //ReSet (input,'input.txt');
     //ReWrite (output,'output.txt');
     Readln (x[1],y[1]);
     Readln (x[2],y[2]);
     Readln (x[3],y[3]);
     s:=0.5*abs ((x[1]-x[3])*(y[2]-y[3])-(x[2]-x[3])*(y[1]-y[3]));
     a:=sqrt(sqr(x[1]-x[2])+sqr(y[1]-y[2]));
     b:=sqrt(sqr(x[1]-x[3])+sqr(y[1]-y[3]));
     c:=sqrt(sqr(x[2]-x[3])+sqr(y[2]-y[3]));
     r:=(a*b*c)/(4*s);
     For I:=3 to 100 do
     Begin

          al:=360/i;
          alr:=al/180*pi;
          cs1:=1-(a*a)/(2*r*r);
          alp1:=arccos(cs1);
          alp1:=alp1*180/pi;

          cs2:=1-(b*b)/(2*r*r);
          alp2:=arccos(cs2);
          alp2:=alp2*180/pi;

          cs3:=1-(c*c)/(2*r*r);
          alp3:=arccos(cs3);
          alp3:=alp3*180/pi;

          If (frac(abs(alp1/al))<eps)and
          (frac(abs(alp2/al))<eps) and
          (frac(abs(alp3/al))<eps)
          then Begin
              s:=0.5*r*r*sin(alr)*i;
              Writeln (s:0:10);
                    Halt (0)
               End;
     End;
End.

uses math;
const eps=0.0000001;
var x1,x2,x3,y1,y2,y3,x4,y4,x5,y5: real;
      R, S,a,b,c, aa, bb, cc,f1,f2,f3: real;
       n: integer;

function dlin(xa,ya, xb,yb: real):real;
var res: real;
begin
  dlin:=sqrt(sqr(xb-xa)+sqr(yb-ya));
end;

function ugol(x,y,z: real): real;
begin
 ugol:=arccos((sqr(y)+sqr(z)-sqr(x))/(2*y*z));
end;

function radius(x,y,z: real): real;
var p,r: real;
begin
   p:=(x+y+z)/2;
   r:=x*y*z/4/sqrt(p*(p-x)*(p-y)*(p-z));
   radius:=r;
end;

function plotsha(r, m: real): real;
begin
  plotsha:=M*0.5*r*r*sin(2*Pi/M);
end;

begin
    readln(x1,y1);
    readln(x2,y2);
    readln(x3,y3);
    a:=dlin(x2,y2, x3,y3);
    b:=dlin(x1,y1, x2,y2);
    c:=dlin(x1,y1, x3,y3);

    aa:=ugol(a, b,c);
    bb:=ugol(b, a,c);
    cc:=ugol(c, a,b);

   f1:=2*aa;  f2:=2*bb;   f3:=2*cc;

   N:=3;
   while N<=100 do
   begin
      if (abs(sin(f1*N))<eps) and (abs(sin(f2*N))<eps) and (abs(sin(f3*N))<eps)  then  break
        else inc(n);
   end;

   R:=radius(a,b,c);
   S:=plotsha(R, N);
   writeln(S:0:8);
end.

uses math;
var
  i : longint;
  x,y,d,u : array [0..5] of double;
  r,s,p : double;

  function ok(n : longint; u : double) : boolean;
    begin
      if abs(sin(n*arcsin(u))/2)<1e-6 then exit(true) else exit(false);
    end;

  function dist(x1,y1,x2,y2 : double) : double;
    begin
      exit(sqrt(sqr(x1-x2)+sqr(y1-y2)));
    end;

begin
  for i:=1 to 3 do read(x[i],y[i]);
  x[4]:=x[1]; y[4]:=y[1];
  for i:=2 to 4 do d[i-1]:=dist(x[i],y[i],x[i-1],y[i-1]);
  for i:=1 to 3 do p:=p+d[i];
  p:=p/2;
  s:=sqrt(p*(p-d[1])*(p-d[2])*(p-d[3]));
  r:=d[1]*d[2]*d[3]/(4*s);
  for i:=1 to 3 do u[i]:=d[i]/(2*r);
  for i:=3 to 100 do
    if ok(i,u[1]) and ok(i,u[2]) and ok(i,u[3]) then
      begin
        writeln(i*sin(2*pi/i)*r*r/2:0:7);
        break;
      end;
end.

program problem3;
const eps = 1.0e-6;

type point = record
              x, y: real;
            end;

function arcSin( sin: real ): real;
begin
  if ( sin = 1.0 ) then
    arcSin := pi / 2
  else
    arcSin := arcTan( sin / Sqrt( 1 - sqr(sin) ) );
end;

var A, B, C: point;
    r, k, AB, AC, BC, p, AOB, AOC, BOC, S: real;
    n: longWord;

begin
  readln( A.x, A.y, B.x, B.y, C.x, C.y );

  AB := sqrt( sqr( A.x - B.x ) + sqr( A.y - B.y ) );
  AC := sqrt( sqr( A.x - C.x ) + sqr( A.y - C.y ) );
  BC := sqrt( sqr( C.x - B.x ) + sqr( C.y - B.y ) );

  p := ( AB + AC + BC ) / 2;
  r := ( AB * AC * BC ) / ( 4 * sqrt( p*(p-AB)*(p-AC)*(p-BC) ) );

  AOC := 2 * arcSin( AC / (2*r) );
  AOB := 2 * arcSin( AB / (2*r) );
  BOC := 2 * arcSin( BC / (2*r) );

  writeln( (180*AOC/pi):0:12, ' ', (180*AOB/pi):0:12, ' ', (180*BOC/pi):0:12 );

  for n := 3 to 100 do
  begin
    k := 2 * pi / n;

    if ( ( frac( AOC / k ) < eps ) or ( (1-frac( AOC / k )) < eps ) ) and
       ( ( frac( AOB / k ) < eps ) or ( (1-frac( AOB / k )) < eps ) ) and
       ( ( frac( BOC / k ) < eps ) or ( (1-frac( BOC / k )) < eps ) ) then
    begin
      S := r * cos(k/2) * n * r * sin(k/2);
      writeln( S:0:12 );
      halt;
    end;
  end;
end.

Uses math;
var n:longint;
    ns,ans,k,p,ac,bc,cc,x3,y3,x1,y1,x2,y2,a,b,c,r,s:extended;
function dist(x1,y1,x2,y2:extended):extended;
 begin
  exit(sqrt(sqr(x1-x2)+sqr(y1-y2)));
 end;
function nsd(x,y:extended):extended;
 begin
  while(abs(x)>0.000001)and(abs(y)>0.000001)do
   if(x>y)then x:=x-trunc(x/y)*y
          else y:=y-trunc(y/x)*x;
  exit(x+y);
 end;
 begin
  read(x1,y1);
  read(x2,y2);
  read(x3,y3);
  a:=dist(x1,y1,x2,y2);
  b:=dist(x2,y2,x3,y3);
  c:=dist(x3,y3,x1,y1);
  p:=(a+b+c)/2;
  s:=sqrt(p*(p-a)*(p-b)*(p-c));
  r:=(a*b*c)/(4*s);
  ac:=arccos((b*b+c*c-a*a)/(2*b*c));
  bc:=arccos((a*a+c*c-b*b)/(2*a*c));
  cc:=arccos((a*a+b*b-c*c)/(2*a*b));
  k:=(pi/nsd(ac,nsd(bc,cc)));
  ans:=k/2*r*r*sin(2*pi/k);
  writeln(ans:0:6);
 end.

Uses Math;
Const eps=10e-5;
Var x,y:Array [1..3] of Extended;
    s,a,b,c,r,al,alp1,alp2,alp3,cs1,cs2,cs3,alr:Extended;
    i:LongInt;
Begin
     //ReSet (input,'input.txt');
    // ReWrite (output,'output.txt');
     Readln (x[1],y[1]);
     Readln (x[2],y[2]);
     Readln (x[3],y[3]);
     s:=0.5*abs ((x[1]-x[3])*(y[2]-y[3])-(x[2]-x[3])*(y[1]-y[3]));
     a:=sqrt(sqr(x[1]-x[2])+sqr(y[1]-y[2]));
     b:=sqrt(sqr(x[1]-x[3])+sqr(y[1]-y[3]));
     c:=sqrt(sqr(x[2]-x[3])+sqr(y[2]-y[3]));
     r:=(a*b*c)/(4*s);
     For I:=3 to 100 do
     Begin

          al:=360/i;
          alr:=al/180*pi;
          cs1:=1-(a*a)/(2*r*r);
          alp1:=arccos(cs1);
          alp1:=alp1*180/pi;

          cs2:=1-(b*b)/(2*r*r);
          alp2:=arccos(cs2);
          alp2:=alp2*180/pi;

          cs3:=1-(c*c)/(2*r*r);
          alp3:=arccos(cs3);
          alp3:=alp3*180/pi;

          If (frac(abs(Round(alp1/al)-alp1/al))<eps)and
          (frac(abs(Round(alp1/al)-alp2/al))<eps) and
          (frac(abs(Round(alp1/al)-alp3/al))<eps)
          then Begin
              s:=0.5*r*r*sin(alr)*i;
              Writeln (s:0:10);
                    Halt (0)
               End;
     End;
End.

Uses math;
var n:longint;
    ns,ans,k,p,ac,bc,cc,x3,y3,x1,y1,x2,y2,a,b,c,r,s:extended;
function dist(x1,y1,x2,y2:extended):extended;
 begin
  exit(sqrt(sqr(x1-x2)+sqr(y1-y2)));
 end;
function nsd(x,y:extended):extended;
 begin
  while(abs(x)>0.0000001)and(abs(y)>0.0000001)do
   if(x>y)then x:=x-trunc(x/y)*y
          else y:=y-trunc(y/x)*x;
  exit(x+y);
 end;
 begin
  read(x1,y1);
  read(x2,y2);
  read(x3,y3);
  a:=dist(x1,y1,x2,y2);
  b:=dist(x2,y2,x3,y3);
  c:=dist(x3,y3,x1,y1);
  p:=(a+b+c)/2;
  s:=sqrt(p*(p-a)*(p-b)*(p-c));
  r:=(a*b*c)/(4*s);
  ac:=arccos((b*b+c*c-a*a)/(2*b*c));
  bc:=arccos((a*a+c*c-b*b)/(2*a*c));
  cc:=arccos((a*a+b*b-c*c)/(2*a*b));
  k:=(pi/nsd(ac,nsd(bc,cc)));
  ans:=k/2*r*r*sin(2*pi/k);
  writeln(ans:0:10);
 end.

program P1C;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

type
  TPoint= record
    x, y: Extended;

  end;

var
  P: array [0..3] of TPoint;

function Solve: Extended;
var
  Offset, bc, cd, det, idet: Extended;
  Cx, Cy, R: Extended;

begin
  Offset:= Sqr (P [2].x)+ Sqr (P [2].y);
  bc:= (Sqr (P [1].x)+ Sqr (p [1].y)- Offset)/ 2.0;
  cd:= (Offset- Sqr (P [3].x)- Sqr (P [3].y))/ 2.0;
  Det:=  (p [1].x- p [2].x)* (p [2].y- p [3].y)- (p [2].x- p [3].x)* (p [1].y- p [2].y);

  if (abs (det)< 1e-6) then
    WriteLn ('....');

  idet:= 1.0/ det;

  Cx:= (bc* (p [2].y- p [3].y)- cd* (p [1].y- p [2].y))* idet;
  Cy:= (cd* (p [1].x- p [2].x)- bc* (p [2].x- p [3].x)) * idet;
  R:=
       sqrt (Sqr (p [2].x- Cx)+ Sqr (p [2].y- cy));

  Result:= Pi* Sqr (R);

end;

var
  i: Integer;

begin
  for i:= 1 to 3 do
    ReadLn (P [i].x, P [i].y);
  WriteLn (Solve);

end.

const
  eps=1e-5;

var
  res,sc,lc,hc,ax,ay,x1,y1,x2,y2,x3,y3,a1,b1,c1,a2,b2,c2,x,y,a,ca,r:extended;
  j,kol,i:longint;

  procedure cross(a1,b1,c1,a2,b2,c2:extended;var x,y:extended);
    var
      d,dx,dy:extended;

    begin
      d:=a1*b2-a2*b1;
      dx:=c1*b2-b1*c2;
      dy:=a1*c2-c1*a2;
      x:=-dx/d;
      y:=-dy/d;
    end;

  function dist(x1,y1,x2,y2:extended):extended;
    begin
      dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    end;

begin
{
  assign(input,'input.txt');
  reset(input);
  assign(output,'output.txt');
  rewrite(output);
  }

  read(x1,y1,x2,y2,x3,y3);
//finding center
  a1:=x2-x1;
  b1:=y2-y1;
  c1:=-a1*(x1+x2)/2-b1*(y1+y2)/2;

  a2:=x3-x2;
  b2:=y3-y2;
  c2:=-a2*(x2+x3)/2-b2*(y2+y3)/2;
  cross(a1,b1,c1,a2,b2,c2,x,y);
//
  x1:=x1-x;y1:=y1-y;
  x2:=x2-x;y2:=y2-y;
  x3:=x3-x;y3:=y3-y;
  r:=sqrt(x1*x1+y1*y1);
  if (abs(x1)<eps)then begin
    x:=x1;x1:=x2;x2:=x;
    y:=y1;y1:=y2;y2:=y;
  end;
  if (abs(x1)<eps)then begin
    x:=x1;x1:=x3;x3:=x;
    y:=y1;y1:=y3;y3:=y;
  end;
  a:=y1/x1;
  a:=arctan(a);
  if (y1<0)and(x1<0)then a:=1.5*pi+a;
  if (y1<0)and(x1>0)then a:=2*pi+a;
//  while (a<0)do a:=a+2*pi;
  ca:=a;
  res:=1e9;
  for i:=3 to 1000 do begin
    a:=ca;
    kol:=0;
    for j:=1 to i do begin
      ax:=r*cos(a);
      ay:=r*sin(a);
      if (abs(ax-x1)<eps)and(abs(ay-y1)<eps)then inc(kol)else
      if (abs(ax-x2)<eps)and(abs(ay-y2)<eps)then inc(kol)else
      if (abs(ax-x3)<eps)and(abs(ay-y3)<eps)then inc(kol);
      a:=a+2*pi/i;
    end;
    if (kol<3)then continue;
    a:=2*pi/i;
    lc:=dist(r*sin(ca),r*cos(ca),r*sin(ca+a),r*cos(ca+a))/2;
    hc:=sqrt(r*r-lc*lc);
    sc:=hc*lc*i;
    if (sc<res)then res:=sc;
    break;
  end;
  writeln(res:0:10);
  {
  close(input);
  close(output);
  }
end.

uses math;
var   www,eps,x1,y1,x2,y2,p,a,b,c,pl,al,xl,xr,c1,c2,xx,yy:extended;
      x,y,l:Array[0..10]of extended;
      n,i,j,it:longint;
      ok:boolean;
function alpha(x,y:extended):extended;
begin
 if (x=0)and(y=0) then alpha:=0
 else
 if x=0 then
  begin
   if y>0 then alpha:=pi/2
    else alpha:=pi+pi/2;
  end
 else if y=0 then
  begin
   if x<0 then alpha:=pi
    else alpha:=0;
  end
 else
   begin
     if (x>0)and(y>0) then alpha:=arctan(y/x)
     else if (x>0)and(y<0) then alpha:=arctan(y/x)+2*pi
     else if (x<0) then alpha:=arctan(y/x)+pi;
   end;
end;

function dist(x1,y1,x2,y2:extended):extended;
begin
 dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function calc(xx,yy:extended):extended;
var i:longint;
    max,w:extended;
begin
 max:=0;
 for i:=1 to 3 do
  begin
   w:=dist(xx,yy,x[i],y[i]);
   if w>max then max:=w;
  end;
 calc:=max;
end;

function search(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-10000;
  yr:=10000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)>calc(x,c2) then yl:=c1
       else yr:=c2;
    end;

  yy:=yl;

  search:=calc(x,yy);
end;

 begin
    n:=3;
    for i:=1 to n do
      read(x[i],y[i]);

    xl:=-10000;
    xr:=10000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)>search(c2) then xl:=c1
           else xr:=c2;
     end;

    xx:=xl;
    search(xx);

    for i:=1 to n do
      begin
         x[i]:=x[i]-xx;
         y[i]:=y[i]-yy;
      end;

    for i:=1 to n do
         l[i]:=alpha(x[i],y[i]);

    eps:=1e-7;

    for n:=3 to 101 do
     begin

        ok:=true;

        for i:=1 to 3 do
         for j:=i+1 to 3 do
          begin
             al:=abs(l[i]-l[j]);
             if abs(sin(n*al/2))>eps then
              begin
               ok:=false;
               break;
              end;
          end;
        al:=(2*pi)/n;
        if ok then
         begin
            a:=dist(0,0,x[1],y[1]);
            b:=a;
            c:=sqrt(a*a+b*b-2*a*b*cos(al));
            p:=a+b+c;
            p:=p/2;
            p:=sqrt(p*(p-a)*(p-b)*(p-c));
            writeln(p*n:0:10);
            halt(0);
         end;
     end;
end.

uses math;
const eps=1e-6;
type tp=record x,y:extended; end;
var
  a:array[1..4]of tp;
  i,j:longint;
  co:array[1..3]of extended;
  rr:extended;
  ff:boolean;
function xl(i,j:LONgiNT):tp;
begin
  xl.x:=a[j].x-a[i].x;
  xl.y:=a[j].y-a[i].y;
end;

function dx(x,y:tp):extended;
begin
  dx:=x.x*y.x+x.y*y.y;
end;

function cd(x:tp):extended;
begin
  cd:=sqrt(sqr(x.x)+sqr(x.y));
end;

begin
  //assign(input,'1.in');   reset(input);
  for i:=1 to 3 do
    readln(a[i].x,a[i].y);
  for i:=1 to 3 do
  begin
    a[4]:=a[1]; a[1]:=a[i]; a[i]:=a[4];
    co[i]:=dx(xl(1,2),xl(1,3))/cd(xl(1,2))/cd(xl(1,3));
    rr:=(cd(xl(2,3))/(sqrt(1-sqr(co[i])))/2);
    co[i]:=arccos(co[i])/pi;
  end;
  for i:=3 to 100 do
  begin
    ff:=true;
    for j:=1 to 3 do
      if abs(co[j]*i-round(co[j]*i))>eps then
        ff:=false;
    if ff then
    begin
      writeln(i*sin(2*pi/i)*sqr(rr)/2:0:6);
      halt;
    end;
  end;
end.

Program C1;
var xA, yA, xB, yB, xC, yC, AB, BC, AC, p, R, AOB, AOC, BOC, BOA, COA, COB, S, x:real;
    n:integer;
begin
readln(xA, yA);
readln(xB, yB);
readln(xC, yC);
AB:=(xA-xB)*(xA-xB)+(yA-yB)*(yA-yB);
AB:=sqrt(AB);
AC:=(xA-xC)*(xA-xC)+(yA-yC)*(yA-yC);
AC:=sqrt(AC);
BC:=(xB-xC)*(xB-xC)+(yB-yC)*(yB-yC);
BC:=sqrt(BC);
p:=(AB+BC+AC)/2;
R:=AB*BC*AC/4/sqrt(p*(p-AB)*(p-BC)*(p-AC));
x:=(2*R*R-AB*AB)/2/R/R;
AOB:=arctan(sqrt(1-sqr(x))/x)/pi*180;
x:=(2*R*R-AC*AC)/2/R/R;
AOC:=arctan(sqrt(1-sqr(x))/x)/pi*180;
x:=(2*R*R-BC*BC)/2/R/R;
BOC:=arctan(sqrt(1-sqr(x))/x)/pi*180;
AOB:=round(AOB);
AOC:=round(AOC);
BOC:=round(BOC);
n:=3;
{repeat
   n:=n+1;
   BOA:=(180-AOB)*n/(n-2);
   COA:=(180-AOC)*n/(n-2);
   COB:=(180-BOC)*n/(n-2);
   until (BOA/180<>trunc(BOA/180)) or (BOC/180<>trunc(BOC/180)) or (AOC/180<>trunc(AOC/180));}
BOA:=(180-AOB)*n/(n-2);
COA:=(180-AOC)*n/(n-2);
COB:=(180-BOC)*n/(n-2);
while (frac(BOA/180)>0) or (frac(COB/180)>0) or (frac(COA/180)>0) do
   begin
   n:=n+1;
   BOA:=(180-AOB)*n/(n-2);
   COA:=(180-AOC)*n/(n-2);
   COB:=(180-BOC)*n/(n-2);
   end;
S:=n/2*R*R*sin(2*pi/n);
writeln(S:20:6);
readln;
end.

program cf1c;
type
  dot=record
    x,y:double;
  end;
var
  n,i,j:longint;
  af,dw,ans,bt,r,pi:double;
  o,a,b,c:dot;
function dj(a,b,c,d:dot):double;
begin
  dj:=(b.x-a.x)*(d.x-c.x)+(b.y-a.y)*(d.y-c.y);
end;

function cj(a,b,c,d:dot):double;
begin
  cj:=(b.x-a.x)*(d.y-c.y)-(d.x-c.x)*(b.y-a.y)
end;

function jiao_dian(a,b,c,d:dot):dot;
var
  s1,s2:double;
begin
  s1:=cj(a,c,a,b);
  s2:=cj(a,b,a,d);
  jiao_dian.x:=(c.x*s2+d.x*s1)/(s1+s2);
  jiao_dian.y:=(c.y*s2+d.y*s1)/(s1+s2);
end;

function quzhong(a,b:dot):dot;
begin
  quzhong.x:=(a.x+b.x)/2;
  quzhong.y:=(a.y+b.y)/2;
end;

function dis(a,b:dot):double;
begin
  dis:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;

function make_o(a,b,c:dot):dot;
var
  aa,bb,cc:double;
  e,f,d,g:dot;
begin
  {aa:=dis(b,c);
  bb:=dis(a,c);
  cc:=dis(a,b);
  if aa*aa+bb*bb<cc*cc then exit(quzhong(a,b));
  if aa*aa+cc*cc<bb*bb then exit(quzhong(a,c));
  if bb*bb+cc*cc<aa*aa then exit(quzhong(b,c));    }
  d:=quzhong(a,b);
  e:=quzhong(b,c);
  f.x:=-(b.y-a.y)+d.x;
  f.y:=b.x-a.x   +d.y;
  g.x:=-(c.y-b.y)+e.x;
  g.y:=c.x-b.x   +e.y;
  make_o:=jiao_dian(d,f,e,g);
end;

function arccos(co:double):double;
var si:double;
begin
  si:=1-co*co;
  if abs(si)<1e-7 then si:=0 else si:=sqrt(si);
  if abs(co)<1e-7 then exit(pi/2);
  if abs(si)<1e-7 then exit(pi);
  if co>0 then
    arccos:=arctan(si/co)
  else arccos:=2*pi-arctan(si/co)
end;

begin
  pi:=arctan(1)*4;
//  writeln(pi:0:12);

  read(a.x,a.y,b.x,b.y,c.x,c.y);
  o:=make_o(a,b,c);
 // writeln(o.x,' ',o.y);
  r:=dis(a,o);
  af:=dj(o,a,o,b)/r/r;
  bt:=dj(o,a,o,c)/r/r;
  af:=arccos(af);
  bt:=arccos(bt);
  //writeln(af:0:12,' ',bt:0:12);
  for i:=1 to 1000000 do begin
    dw:=pi*2/i;
    if abs(round(af/dw)-af/dw)<1e-7 then
      if abs(round(bt/dw)-bt/dw)<1e-7 then begin
    //    writeln(sin(dw/2):0:12,' ',cos(dw/2):0:12);
        ans:=r*sin(dw/2)*r*cos(dw/2)*i;
        writeln(ans:0:12);
        halt;
      end;
  end;

  writeln(2*pi*r:0:12);
end.

{uses crt;}
label 1,2;
const nn=200; eps=1e-8;
type mas=array[-10..nn] of real;
 var s1,s2,ii,jj,l,r,p,oo,dmin,ymin,j,n1:longint;
     i,tt,k,m,n:longint;

  vx,vy,x,y,co,co1:mas; l1,l2,x1,y1,x2,y2,ch,zn,s,ss:real;
   prov,flag,otv,per:boolean;

     begin  {  clrscr;
     assign(input,'input.txt'); reset (input);  }
          { assign(output,'output.txt'); rewrite (output);}
        for i:=1 to 3 do read(x[i],y[i]);
        for i:=1 to 3 do  begin x[3+i]:=x[i];y[3+i]:=y[i];   end;
        for i:=1 to 3 do  begin x[-3+i]:=x[i];y[-3+i]:=y[i];   end;

  for i:=1 to 3 do
  begin
  x1:=x[i]-x[i-1];y1:=y[i]-y[i-1]; x2:=x[i]-x[i+1];y2:=y[i]-y[i+1];
        ch:=x1*x2+y1*y2;
        zn:=sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2) ;
        co[i]:=ch/zn;
      { writeln(co[i]:0:2); }
  end;

      for n:=3 to 100 do

begin
  for i:=1 to n do begin vx[i]:=cos(2*pi*i/n); vy[i]:=sin(2*pi*i/n); end;
 { for i:=1 to n do writeln(vx[i]:0:2,'   ',vy[i]:0:2); writeln; }
prov:=false;
    for i:=2 to n do for j:=2 to n do if j<>i then
       begin
        x1:=vx[i]-vx[1];y1:=vy[i]-vy[1]; x2:=vx[j]-vx[1];y2:=vy[j]-vy[1];
        ch:=x1*x2+y1*y2;
        zn:=sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2) ;
        co1[1]:=ch/zn;

        x1:=vx[i]-vx[j];y1:=vy[i]-vy[j]; x2:=vx[1]-vx[j];y2:=vy[1]-vy[j];
        ch:=x1*x2+y1*y2;
        zn:=sqrt(x1*x1+y1*y1)*sqrt(x2*x2+y2*y2) ;
        co1[2]:=ch/zn;

     {  writeln(n,'   ',co1[1]:0:2,' ',co1[2]:0:2);
      } if (abs(co1[1]-co[1])<eps)and(abs(co1[2]-co[2])<eps)  then
         begin ii:=i;jj:=j;n1:=n;goto 1;             end;
       end;

end;
1: { writeln(n1,' ',ii,' ',jj); }

   x1:=vx[i]-vx[1];y1:=vy[i]-vy[1]; x2:=vx[j]-vx[1];y2:=vy[j]-vy[1];
      l1:=sqrt(x1*x1+y1*y1);

  i:=1;
  x1:=x[i]-x[i-1];y1:=y[i]-y[i-1]; x2:=x[i]-x[i+1];y2:=y[i]-y[i+1];
      l2:=sqrt(x1*x1+y1*y1);

    { writeln(l1:0:4,'   ',l2:0:4); }
  l1:=l2/l1;
  ss:=n*sin(2*pi/n)*l1*l1/2;

    writeln(ss:0:8);
end.

uses math;
var   www,eps,x1,y1,x2,y2,p,a,b,c,pl,al,xl,xr,c1,c2,xx,yy:extended;
      x,y,l:Array[0..10]of extended;
      n,i,j,it:longint;
      ok:boolean;
function alpha(x,y:extended):extended;
begin
 if (x=0)and(y=0) then alpha:=0
 else
 if x=0 then
  begin
   if y>0 then alpha:=pi/2
    else alpha:=pi+pi/2;
  end
 else
   begin
     if (x>0)and(y>0) then alpha:=arctan(y/x)
     else if (x>0)and(y<0) then alpha:=arctan(y/x)+2*pi
     else if (x<0) then alpha:=arctan(y/x)+pi;
   end;
end;

function dist(x1,y1,x2,y2:extended):extended;
begin
 dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function calc(xx,yy:extended):extended;
var i:longint;
    max,w:extended;
begin
 max:=0;
 for i:=1 to 3 do
  begin
   w:=dist(xx,yy,x[i],y[i]);
   if w>max then max:=w;
  end;
 calc:=max;
end;

function search(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-10000;
  yr:=10000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)>calc(x,c2) then yl:=c1
       else yr:=c2;
    end;

  yy:=yl;

  search:=calc(x,yy);
end;

 begin
    n:=3;
    for i:=1 to n do
      read(x[i],y[i]);

    xl:=-10000;
    xr:=10000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)>search(c2) then xl:=c1
           else xr:=c2;
     end;

    xx:=xl;
    search(xx);

    for i:=1 to n do
      begin
         x[i]:=x[i]-xx;
         y[i]:=y[i]-yy;
      end;

    for i:=1 to n do
         l[i]:=alpha(x[i],y[i]);

    eps:=1e-5;

    for n:=3 to 101 do
     begin

        ok:=true;

        for i:=1 to 3 do
         for j:=i+1 to 3 do
          begin
             al:=abs(l[i]-l[j]);
             if abs(sin(n*al/2))>eps then
              begin
               ok:=false;
               break;
              end;
          end;
        al:=(2*pi)/n;
        if ok then
         begin
            a:=dist(0,0,x[1],y[1]);
            b:=a;
            c:=sqrt(a*a+b*b-2*a*b*cos(al));
            p:=a+b+c;
            p:=p/2;
            p:=sqrt(p*(p-a)*(p-b)*(p-c));
            writeln(p*n:0:6);
            halt(0);
         end;
     end;
end.

uses math;
var   eps,x1,y1,x2,y2,p,a,b,c,pl,al,xl,xr,c1,c2,xx,yy:extended;
      x,y,l:Array[0..10]of extended;
      n,i,j,it:longint;
      ok:boolean;
function alpha(x,y:extended):extended;
begin
 if (x=0)and(y=0) then alpha:=0
 else
 if x=0 then
  begin
   if y>0 then alpha:=pi/2
    else alpha:=pi+pi/2;
  end
 else if y=0 then
  begin
   if x<0 then alpha:=pi
    else alpha:=0;
  end
 else
   begin
     if (x>0)and(y>0) then alpha:=arctan(y/x)
     else if (x>0)and(y<0) then alpha:=arctan(y/x)+2*pi
     else if (x<0) then alpha:=arctan(y/x)+pi;
   end;
end;

function dist(x1,y1,x2,y2:extended):extended;
begin
 dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function calc(xx,yy:extended):extended;
var i:longint;
    max,w:extended;
begin
 max:=0;
 for i:=1 to 3 do
  begin
   w:=dist(xx,yy,x[i],y[i]);
   if w>max then max:=w;
  end;
 calc:=max;
end;

function search(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-10000;
  yr:=10000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)>calc(x,c2) then yl:=c1
       else yr:=c2;
    end;

  yy:=yl;

  search:=calc(x,yy);
end;

 begin
    n:=3;
    for i:=1 to n do
      read(x[i],y[i]);

    xl:=-10000;
    xr:=10000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)>search(c2) then xl:=c1
           else xr:=c2;
     end;

    xx:=xl;
    search(xx);

    for i:=1 to n do
      begin
         x[i]:=x[i]-xx;
         y[i]:=y[i]-yy;
      end;

    for i:=1 to n do
         l[i]:=alpha(x[i],y[i]);

    eps:=1e-8;

    for n:=3 to 101 do
     begin

        ok:=true;

        for i:=1 to 3 do
         for j:=i+1 to 3 do
          begin
             al:=abs(l[i]-l[j]);
             if abs(sin(n*al/2))>eps then
              begin
               ok:=false;
               break;
              end;
          end;
        al:=(2*pi)/n;
        if ok then
         begin
            a:=dist(0,0,x[1],y[1]);
            b:=a;
            c:=sqrt(a*a+b*b-2*a*b*cos(al));
            p:=a+b+c;
            p:=p/2;
            p:=sqrt(p*(p-a)*(p-b)*(p-c));
            writeln(p*n:0:10);
            halt(0);
         end;
     end;
end.

Program C1;
var xA, yA, xB, yB, xC, yC, AB, BC, AC, p, R, AOB, AOC, BOC, A, OA, S, x, y, z:double;
    n:integer;
begin
readln(xA, yA);
readln(xB, yB);
readln(xC, yC);
AB:=(xA-xB)*(xA-xB)+(yA-yB)*(yA-yB);
AB:=sqrt(AB);
AC:=(xA-xC)*(xA-xC)+(yA-yC)*(yA-yC);
AC:=sqrt(AC);
BC:=(xB-xC)*(xB-xC)+(yB-yC)*(yB-yC);
BC:=sqrt(BC);
p:=(AB+BC+AC)/2;
R:=AB*BC*AC/4/sqrt(p*(p-AB)*(p-BC)*(p-AC));
x:=(2*R*R-AB*AB)/2/R/R;
AOB:=arctan(sqrt(1/x/x-1))/pi*180;
if x<0 then AOB:=180-AOB;
y:=(2*R*R-AC*AC)/2/R/R;
AOC:=arctan(sqrt(1/y/y-1))/pi*180;
if y<0 then AOC:=180-AOC;
z:=(2*R*R-BC*BC)/2/R/R;
BOC:=arctan(sqrt(1/z/z-1))/pi*180;
if z<0 then BOC:=180-BOC;
AOB:=round(AOB);
AOC:=round(AOC);
BOC:=round(BOC);
n:=3;
A:=180*(n-2)/n;
OA:=180-A;
while (frac(AOB/OA)>0) or (frac(BOC/OA)>0) or (frac(AOC/OA)>0) do
   begin
   n:=n+1;
   A:=180*(n-2)/n;
   OA:=180-A;
   end;
S:=n/2*R*R*sin(2*pi/n);
writeln(S:20:6);
readln;
end.

uses math;
var   x1,y1,x2,y2,p,a,b,c,pl,al,xl,xr,c1,c2,xx,yy:extended;
      x,y,l:Array[0..10]of extended;
      n,i,j,it:longint;

function alpha(x,y:extended):extended;
begin
 if (x=0)and(y=0) then alpha:=0
 else
 if x=0 then
  begin
   if y>0 then alpha:=pi/2
    else alpha:=pi+pi/2;
  end
 else if y=0 then
  begin
   if x<0 then alpha:=pi
    else alpha:=0;
  end
 else
   begin
     if (x>0)and(y>0) then alpha:=arctan(y/x)
     else if (x>0)and(y<0) then alpha:=arctan(y/x)+2*pi
     else if (x<0) then alpha:=arctan(y/x)+pi;
   end;
end;

function dist(x1,y1,x2,y2:extended):extended;
begin
 dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function calc(xx,yy:extended):extended;
var i:longint;
    max,w:extended;
begin
 max:=0;
 for i:=1 to 3 do
  begin
   w:=dist(xx,yy,x[i],y[i]);
   if w>max then max:=w;
  end;
 calc:=max;
end;

function search(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-10000;
  yr:=10000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)>calc(x,c2) then yl:=c1
       else yr:=c2;
    end;

  yy:=yl;

  search:=calc(x,yy);
end;

 begin
    n:=3;
    for i:=1 to n do
      read(x[i],y[i]);

    xl:=-10000;
    xr:=10000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)>search(c2) then xl:=c1
           else xr:=c2;
     end;

    xx:=xl;
    search(xx);

    for i:=1 to n do
      begin
         x[i]:=x[i]-xx;
         y[i]:=y[i]-yy;
      end;

    for i:=1 to n do
         l[i]:=alpha(x[i],y[i]);

    al:=maxlongint;

    for i:=1 to 3 do
      for j:=i+1 to 3 do
       if abs(l[i]-l[j])<=al then
        begin
         al:=abs(l[i]-l[j]);
         x1:=x[i]; y1:=y[i];
         x2:=x[j]; y2:=y[j];
        end;

    a:=dist(0,0,x1,y1);
    b:=dist(0,0,x2,y2);
    c:=dist(x1,y1,x2,y2);

    p:=a+b+c;
    p:=p/2;

    p:=sqrt(p*(p-a)*(p-b)*(p-c));

    n:=trunc((2*pi)/(al)+1e-9);

    writeln(p*n:0:10);
end.

uses math;
const eps=0.00000001;
  Pi=3.14;
var x1,x2,x3,y1,y2,y3,x4,y4,x5,y5: double;
      R, S,a,b,c, aa, bb, cc,f1,f2,f3,fi: double;
       n: integer;

function dlin(xa,ya, xb,yb: double):double;
var res: double;
begin
  dlin:=sqrt(sqr(xb-xa)+sqr(yb-ya));
end;

function ugol(x,y,z: double): double;
begin
 ugol:=arccos((sqr(y)+sqr(z)-sqr(x))/(2*y*z));
end;

function radius(x,y,z: double): double;
var p,r: double;
begin
   p:=(x+y+z)/2;
   r:=x*y*z/4/sqrt(p*(p-x)*(p-y)*(p-z));
   radius:=r;
end;

function plotsha(r, m: double): double;
begin
  plotsha:=M*0.5*r*r*sin(2*Pi/M);
end;

begin
    readln(x3,y3);
    readln(x1,y1);
    readln(x2,y2);

    a:=dlin(x2,y2, x3,y3);
    b:=dlin(x1,y1, x2,y2);
    c:=dlin(x1,y1, x3,y3);

    aa:=ugol(a, b,c);
    bb:=ugol(b, a,c);
    cc:=ugol(c, a,b);

   f1:=2*aa;  f2:=2*bb;   f3:=2*cc;

   N:=3;
   while N<=100 do
   begin
            { if (abs(sin(f1*N))<eps) and (abs(sin(f2*N))<eps) and (abs(sin(f3*N))<eps)  then  break
               else inc(n);}
     fi:=2*Pi/N;
     if  (abs(round(f1/fi)-f1/fi)<eps) and (abs(round(f2/fi)-f2/fi)<eps) and (abs(round(f3/fi)-f3/fi)<eps)    then  break
        else inc(n);

   end;

  r:=a*0.5/(sin(aa));

  { R:=radius(a,b,c);}
   S:=plotsha(R, N);
   writeln(S:0:12);
end.

uses math;
var   eps,x1,y1,x2,y2,p,a,b,c,pl,al,xl,xr,c1,c2,xx,yy:extended;
      x,y,l:Array[0..10]of extended;
      n,i,j,it:longint;
      ok:boolean;
function alpha(x,y:extended):extended;
begin
 if (x=0)and(y=0) then alpha:=0
 else
 if x=0 then
  begin
   if y>0 then alpha:=pi/2
    else alpha:=pi+pi/2;
  end
 else if y=0 then
  begin
   if x<0 then alpha:=pi
    else alpha:=0;
  end
 else
   begin
     if (x>0)and(y>0) then alpha:=arctan(y/x)
     else if (x>0)and(y<0) then alpha:=arctan(y/x)+2*pi
     else if (x<0) then alpha:=arctan(y/x)+pi;
   end;
end;

function dist(x1,y1,x2,y2:extended):extended;
begin
 dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function calc(xx,yy:extended):extended;
var i:longint;
    max,w:extended;
begin
 max:=0;
 for i:=1 to 3 do
  begin
   w:=dist(xx,yy,x[i],y[i]);
   if w>max then max:=w;
  end;
 calc:=max;
end;

function search(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-10000;
  yr:=10000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)>calc(x,c2) then yl:=c1
       else yr:=c2;
    end;

  yy:=yl;

  search:=calc(x,yy);
end;

 begin
    n:=3;
    for i:=1 to n do
      read(x[i],y[i]);

    xl:=-10000;
    xr:=10000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)>search(c2) then xl:=c1
           else xr:=c2;
     end;

    xx:=xl;
    search(xx);

    for i:=1 to n do
      begin
         x[i]:=x[i]-xx;
         y[i]:=y[i]-yy;
      end;

    for i:=1 to n do
         l[i]:=alpha(x[i],y[i]);

    eps:=1e-16;

    for n:=3 to 101 do
     begin

        ok:=true;

        for i:=1 to 3 do
         for j:=i+1 to 3 do
          begin
             al:=abs(l[i]-l[j]);
             if abs(sin(n*al/2))>eps then
              begin
               ok:=false;
               break;
              end;
          end;
        al:=(2*pi)/n;
        if ok then
         begin
            a:=dist(0,0,x[1],y[1]);
            b:=a;
            c:=sqrt(a*a+b*b-2*a*b*cos(al));
            p:=a+b+c;
            p:=p/2;
            p:=sqrt(p*(p-a)*(p-b)*(p-c));
            writeln(p*n:0:10);
            halt(0);
         end;
     end;
end.

uses math;
var   www,eps,x1,y1,x2,y2,p,a,b,c,pl,al,xl,xr,c1,c2,xx,yy:extended;
      x,y,l:Array[0..10]of extended;
      n,i,j,it:longint;
      ok:boolean;
      a1,b1,a2,b2:extended;
function alpha(x,y:extended):extended;
begin
 if (x=0)and(y=0) then alpha:=0
 else
 if x=0 then
  begin
   if y>0 then alpha:=pi/2
    else alpha:=pi+pi/2;
  end
 else
   begin
     if (x>0)and(y>0) then alpha:=arctan(y/x)
     else if (x>0)and(y<0) then alpha:=arctan(y/x)+2*pi
     else if (x<0) then alpha:=arctan(y/x)+pi;
   end;
end;

function dist(x1,y1,x2,y2:extended):extended;
begin
 dist:=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
end;

function calc(xx,yy:extended):extended;
var i:longint;
    min,max,w:extended;
begin
 max:=0;
 for i:=1 to 3 do
  begin
   w:=dist(xx,yy,x[i],y[i]);
   w:=abs(w-p);
   if w>max then max:=w;
  end;
 calc:=max;
end;

function search(x:extended):extended;
var
yl,yr,c1,c2:extended;
it:longint;
begin
  yl:=-50000;
  yr:=50000;

  for it:=0 to 1000 do
    begin
      c1:=yl+(yr-yl)/3;
      c2:=yr-(yr-yl)/3;

      if calc(x,c1)<=calc(x,c2) then yr:=c2
       else yl:=c1;
    end;

  yy:=yl;

  search:=calc(x,yy);
end;

 begin
    n:=3;
    for i:=1 to n do
      read(x[i],y[i]);

    a:=dist(x[1],y[1],x[2],y[2]);
    b:=dist(x[2],y[2],x[3],y[3]);
    c:=dist(x[1],y[1],x[3],y[3]);

    p:=a+b+c;
    p:=p/2;

    p:=sqrt(p*(p-a)*(p-b)*(p-c));

    p:=a*b*c/(4*p);

    xl:=-50000;
    xr:=50000;

    for it:=0 to 1000 do
     begin
          c1:=xl+(xr-xl)/3;
          c2:=xr-(xr-xl)/3;

          if search(c1)<=search(c2) then xr:=c2
           else xl:=c1;
     end;

    xx:=xl;
    search(xx);

    for i:=1 to n do
      begin
         x[i]:=x[i]-xx;
         y[i]:=y[i]-yy;
      end;

    for i:=1 to n do
         l[i]:=alpha(x[i],y[i]);

    eps:=1e-5;

    for n:=3 to 101 do
     begin

        ok:=true;

        for i:=1 to 3 do
         for j:=i+1 to 3 do
          begin
             al:=abs(l[i]-l[j]);
             if abs(sin(n*al/2))>eps then
              begin
               ok:=false;
               break;
              end;
          end;
        al:=(2*pi)/n;
        if ok then
         begin
            a:=dist(0,0,x[1],y[1]);
            b:=a;
            c:=sqrt(a*a+b*b-2*a*b*cos(al));
            p:=a+b+c;
            p:=p/2;
            p:=sqrt(p*(p-a)*(p-b)*(p-c));
            writeln(p*n:0:6);
            halt(0);
         end;
     end;
end.