Nowadays all circuses in Berland have a round arena with diameter 13 meters, but in the past things were different.In Ancient Berland arenas in circuses were shaped as a regular (equiangular) polygon, the size and the number of angles could vary from one circus to another. In each corner of the arena there was a special pillar, and the rope strung between the pillars marked the arena edges.Recently the scientists from Berland have discovered the remains of the ancient circus arena. They found only three pillars, the others were destroyed by the time.You are given the coordinates of these three pillars. Find out what is the smallest area that the arena could have.

The input file consists of three lines, each of them contains a pair of numbers –– coordinates of the pillar. Any coordinate doesn't exceed 1000 by absolute value, and is given with at most six digits after decimal point.

Output the smallest possible area of the ancient arena. This number should be accurate to at least 6 digits after the decimal point. It's guaranteed that the number of angles in the optimal polygon is not larger than 100.

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 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 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.

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.

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.

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.

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.

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 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;

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;
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;

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;
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.

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.

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.

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.

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;
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.

{$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.

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
  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.

{$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.

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.