#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double count(double, double, double, double, double, double);
int /*<<< orphan*/ printf(char *, double);
int scanf(char *, double *, double *, double *, double *, double *, double *);
int sqrt(double);
int main(void) {
  double x1, y1, x2, y2, x3, y3;
  double x, y, a, b, c, d, p, q, e, f, l;
  while (scanf("%lf %lf %lf %lf %lf %lf", &x1, &y1, &x2, &y2, &x3, &y3) == 6) {
    a = x1 - x2;
    b = y1 - y2;
    p = ((x1 + x2) / 2) * a + ((y1 + y2) / 2) * b;
    c = x2 - x3;
    d = y2 - y3;
    q = ((x2 + x3) / 2) * c + ((y2 + y3) / 2) * d;
    y = count(b, p, d, q, c, a);
    x = count(a, p, c, q, d, b);
    l = (x - x1) * (x - x1) + (y - y1) * (y - y1);
    l = sqrt(l) * 2 * 3.141592653589793;
    printf("%.2f\n", l);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeb7(%rip),%rdi
lea    -0x10(%rbp),%rsi
lea    -0x18(%rbp),%rdx
lea    -0x20(%rbp),%rcx
lea    -0x28(%rbp),%r8
lea    -0x30(%rbp),%r9
lea    -0x38(%rbp),%rax
mov    %rax,(%rsp)
call   1050 <scanf@plt>
cmp    $0x6,%eax
jne    1312 <main+0x1d2>
movsd  -0x10(%rbp),%xmm0
subsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x18(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x10(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  0xe55(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm1
addsd  -0x28(%rbp),%xmm1
movsd  0xe3a(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x20(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x28(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x20(%rbp),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  0xdf4(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm1
addsd  -0x38(%rbp),%xmm1
movsd  0xdd9(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm3
movsd  -0x60(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
call   1030 <count@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm3
movsd  -0x68(%rbp),%xmm4
movsd  -0x58(%rbp),%xmm5
call   1030 <count@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
subsd  -0x10(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
subsd  -0x18(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm3
subsd  -0x18(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   1060 <sqrt@plt>
shl    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  0xd13(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
lea    0xd20(%rip),%rdi
call   1040 <printf@plt>
jmp    1152 <main+0x12>
xor    %eax,%eax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
lea    0x20(%rsp),%rax
mov    %rax,(%rsp)
lea    0xeb2(%rip),%rdi
lea    0x18(%rsp),%rsi
lea    0x10(%rsp),%rdx
lea    0x38(%rsp),%rcx
lea    0x30(%rsp),%r8
lea    0x28(%rsp),%r9
call   1050 <scanf@plt>
cmp    $0x6,%eax
jne    1315 <main+0x1d5>
lea    0xe84(%rip),%r15
lea    0x18(%rsp),%r12
lea    0x10(%rsp),%r13
lea    0x38(%rsp),%rbx
lea    0x30(%rsp),%rbp
lea    0x28(%rsp),%r14
cs nopw 0x0(%rax,%rax,1)
nop
movsd  0x18(%rsp),%xmm4
movsd  0x38(%rsp),%xmm3
movapd %xmm4,%xmm0
subsd  %xmm3,%xmm0
movapd %xmm0,%xmm7
movsd  0x10(%rsp),%xmm1
movsd  0x30(%rsp),%xmm9
movapd %xmm1,%xmm2
subsd  %xmm9,%xmm2
addsd  %xmm3,%xmm4
movsd  0xe15(%rip),%xmm8
mulsd  %xmm8,%xmm4
addsd  %xmm9,%xmm1
mulsd  %xmm8,%xmm1
mulsd  %xmm2,%xmm1
movapd %xmm2,%xmm0
movsd  %xmm2,0x70(%rsp)
mulsd  %xmm7,%xmm4
movapd %xmm7,%xmm5
movsd  %xmm7,0x40(%rsp)
addsd  %xmm1,%xmm4
movapd %xmm4,%xmm1
movsd  %xmm4,0x50(%rsp)
movsd  0x28(%rsp),%xmm6
movapd %xmm3,%xmm2
subsd  %xmm6,%xmm2
movapd %xmm2,%xmm4
movsd  %xmm2,0x48(%rsp)
movsd  0x20(%rsp),%xmm7
movapd %xmm9,%xmm2
subsd  %xmm7,%xmm2
movsd  %xmm2,0x60(%rsp)
addsd  %xmm6,%xmm3
mulsd  %xmm8,%xmm3
addsd  %xmm7,%xmm9
mulsd  %xmm8,%xmm9
mulsd  %xmm2,%xmm9
mulsd  %xmm4,%xmm3
addsd  %xmm9,%xmm3
movsd  %xmm3,0x58(%rsp)
call   1030 <count@plt>
movsd  %xmm0,0x68(%rsp)
movsd  0x40(%rsp),%xmm0
movsd  0x50(%rsp),%xmm1
movsd  0x48(%rsp),%xmm2
movsd  0x58(%rsp),%xmm3
movsd  0x60(%rsp),%xmm4
movsd  0x70(%rsp),%xmm5
call   1030 <count@plt>
subsd  0x18(%rsp),%xmm0
movsd  0x68(%rsp),%xmm1
subsd  0x10(%rsp),%xmm1
mulsd  %xmm1,%xmm1
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
call   1060 <sqrt@plt>
add    %eax,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0xd28(%rip),%xmm0
lea    0xd41(%rip),%rdi
call   1040 <printf@plt>
lea    0x20(%rsp),%rax
mov    %rax,(%rsp)
mov    %r15,%rdi
mov    %r12,%rsi
mov    %r13,%rdx
mov    %rbx,%rcx
mov    %rbp,%r8
mov    %r14,%r9
call   1050 <scanf@plt>
cmp    $0x6,%eax
je     11b0 <main+0x70>
xor    %eax,%eax
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [24 x i8] c"%lf %lf %lf %lf %lf %lf\00"
@.str.1 = [6 x i8] c"%.2f\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
store i32 0, i32* %1
br label %19
19: ; preds = %22, %0
%20 = call i32 @scanf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0), double* %2, double* %3, double* %4, double* %5, double* %6, double* %7)
%21 = icmp eq i32 %20, 6
br i1 %21, label %22, label %94
22: ; preds = %19
%23 = load double, double* %2
%24 = load double, double* %4
%25 = fsub double %23, %24
store double %25, double* %10
%26 = load double, double* %3
%27 = load double, double* %5
%28 = fsub double %26, %27
store double %28, double* %11
%29 = load double, double* %2
%30 = load double, double* %4
%31 = fadd double %29, %30
%32 = fdiv double %31, 2.000000e+00
%33 = load double, double* %10
%34 = load double, double* %3
%35 = load double, double* %5
%36 = fadd double %34, %35
%37 = fdiv double %36, 2.000000e+00
%38 = load double, double* %11
%39 = fmul double %37, %38
%40 = call double @llvm.fmuladd.f64(double %32, double %33, double %39)
store double %40, double* %14
%41 = load double, double* %4
%42 = load double, double* %6
%43 = fsub double %41, %42
store double %43, double* %12
%44 = load double, double* %5
%45 = load double, double* %7
%46 = fsub double %44, %45
store double %46, double* %13
%47 = load double, double* %4
%48 = load double, double* %6
%49 = fadd double %47, %48
%50 = fdiv double %49, 2.000000e+00
%51 = load double, double* %12
%52 = load double, double* %5
%53 = load double, double* %7
%54 = fadd double %52, %53
%55 = fdiv double %54, 2.000000e+00
%56 = load double, double* %13
%57 = fmul double %55, %56
%58 = call double @llvm.fmuladd.f64(double %50, double %51, double %57)
store double %58, double* %15
%59 = load double, double* %11
%60 = load double, double* %14
%61 = load double, double* %13
%62 = load double, double* %15
%63 = load double, double* %12
%64 = load double, double* %10
%65 = call double @count(double %59, double %60, double %61, double %62, double %63, double %64)
store double %65, double* %9
%66 = load double, double* %10
%67 = load double, double* %14
%68 = load double, double* %12
%69 = load double, double* %15
%70 = load double, double* %13
%71 = load double, double* %11
%72 = call double @count(double %66, double %67, double %68, double %69, double %70, double %71)
store double %72, double* %8
%73 = load double, double* %8
%74 = load double, double* %2
%75 = fsub double %73, %74
%76 = load double, double* %8
%77 = load double, double* %2
%78 = fsub double %76, %77
%79 = load double, double* %9
%80 = load double, double* %3
%81 = fsub double %79, %80
%82 = load double, double* %9
%83 = load double, double* %3
%84 = fsub double %82, %83
%85 = fmul double %81, %84
%86 = call double @llvm.fmuladd.f64(double %75, double %78, double %85)
store double %86, double* %18
%87 = load double, double* %18
%88 = call i32 @sqrt(double %87)
%89 = mul nsw i32 %88, 2
%90 = sitofp i32 %89 to double
%91 = fmul double %90, 0x400921FB54442D18
store double %91, double* %18
%92 = load double, double* %18
%93 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), double %92)
br label %19
94: ; preds = %19
ret i32 0
}

LLVM IR (-O2):
@.str = [24 x i8] c"%lf %lf %lf %lf %lf %lf\00"
@.str.1 = [6 x i8] c"%.2f\0A\00"
define i32 @main() {
%1 = alloca double
%2 = alloca double
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = bitcast double* %1 to i8*
%8 = bitcast double* %2 to i8*
%9 = bitcast double* %3 to i8*
%10 = bitcast double* %4 to i8*
%11 = bitcast double* %5 to i8*
%12 = bitcast double* %6 to i8*
%13 = call i32 @scanf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0), double* %1, double* %2, double* %3, double* %4, double* %5, double* %6)
%14 = icmp eq i32 %13, 6
br i1 %14, label %15, label %53
15: ; preds = %0, %15
%16 = load double, double* %1
%17 = load double, double* %3
%18 = fsub double %16, %17
%19 = load double, double* %2
%20 = load double, double* %4
%21 = fsub double %19, %20
%22 = fadd double %16, %17
%23 = fmul double %22, 5.000000e-01
%24 = fadd double %19, %20
%25 = fmul double %24, 5.000000e-01
%26 = fmul double %21, %25
%27 = call double @llvm.fmuladd.f64(double %23, double %18, double %26)
%28 = load double, double* %5
%29 = fsub double %17, %28
%30 = load double, double* %6
%31 = fsub double %20, %30
%32 = fadd double %17, %28
%33 = fmul double %32, 5.000000e-01
%34 = fadd double %20, %30
%35 = fmul double %34, 5.000000e-01
%36 = fmul double %31, %35
%37 = call double @llvm.fmuladd.f64(double %33, double %29, double %36)
%38 = call double @count(double %21, double %27, double %31, double %37, double %29, double %18)
%39 = call double @count(double %18, double %27, double %29, double %37, double %31, double %21)
%40 = load double, double* %1
%41 = fsub double %39, %40
%42 = load double, double* %2
%43 = fsub double %38, %42
%44 = fmul double %43, %43
%45 = call double @llvm.fmuladd.f64(double %41, double %41, double %44)
%46 = call i32 @sqrt(double %45)
%47 = shl nsw i32 %46, 1
%48 = sitofp i32 %47 to double
%49 = fmul double %48, 0x400921FB54442D18
%50 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), double %49)
%51 = call i32 @scanf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0), double* %1, double* %2, double* %3, double* %4, double* %5, double* %6)
%52 = icmp eq i32 %51, 6
br i1 %52, label %15, label %53
53: ; preds = %15, %0
ret i32 0
}