#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 */
int /*<<< orphan*/ printf(char *, double);
int /*<<< orphan*/ scanf(char *, long long *);
int main() {
  long long i, j, k;
  double s1, s2, s3, s4, max = 0;
  long long a[20][20];
  for (i = 0; i < 20; i++)
    for (j = 0; j < 20; j++)
      scanf("%Ld", &a[i][j]);
  for (i = 0; i < 20; i++) {
    for (j = 0; j < 20; j++) {
      k = 0;
      s1 = s2 = s3 = s4 = 1;
      while (1) {
        if (i + k < 20)
          s1 *= a[i + k][j];
        if (j + k < 20)
          s2 *= a[i][j + k];
        if (i + k < 20 && j + k < 20)
          s3 *= a[i + k][j + k];
        if (i - k >= 0 && j + k < 20)
          s4 *= a[i - k][j + k];
        k++;
        if (k == 4)
          break;
      }
      if (s1 > max)
        max = s1;
      if (s2 > max)
        max = s2;
      if (s3 > max)
        max = s3;
      if (s4 > max)
        max = s4;
    }
  }
  printf("%.0lf", max);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xcd0,%rsp
movl   $0x0,-0x4(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
movq   $0x0,-0x10(%rbp)
cmpq   $0x14,-0x10(%rbp)
jge    11b0 <main+0x90>
movq   $0x0,-0x18(%rbp)
cmpq   $0x14,-0x18(%rbp)
jge    119a <main+0x7a>
lea    -0xcd0(%rbp),%rsi
imul   $0xa0,-0x10(%rbp),%rax
add    %rax,%rsi
mov    -0x18(%rbp),%rax
shl    $0x3,%rax
add    %rax,%rsi
lea    0xe84(%rip),%rdi
call   1040 <scanf@plt>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1155 <main+0x35>
jmp    119f <main+0x7f>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1142 <main+0x22>
movq   $0x0,-0x10(%rbp)
cmpq   $0x14,-0x10(%rbp)
jge    13ec <main+0x2cc>
movq   $0x0,-0x18(%rbp)
cmpq   $0x14,-0x18(%rbp)
jge    13d6 <main+0x2b6>
movq   $0x0,-0x20(%rbp)
movsd  0xe1a(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe0d(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe00(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xdf3(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
add    -0x20(%rbp),%rax
cmp    $0x14,%rax
jge    1251 <main+0x131>
mov    -0x10(%rbp),%rcx
add    -0x20(%rbp),%rcx
lea    -0xcd0(%rbp),%rax
imul   $0xa0,%rcx,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%rcx
cvtsi2sdq (%rax,%rcx,8),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
cmp    $0x14,%rax
jge    128d <main+0x16d>
lea    -0xcd0(%rbp),%rax
imul   $0xa0,-0x10(%rbp),%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%rcx
add    -0x20(%rbp),%rcx
cvtsi2sdq (%rax,%rcx,8),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
add    -0x20(%rbp),%rax
cmp    $0x14,%rax
jge    12e2 <main+0x1c2>
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
cmp    $0x14,%rax
jge    12e2 <main+0x1c2>
mov    -0x10(%rbp),%rcx
add    -0x20(%rbp),%rcx
lea    -0xcd0(%rbp),%rax
imul   $0xa0,%rcx,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%rcx
add    -0x20(%rbp),%rcx
cvtsi2sdq (%rax,%rcx,8),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
sub    -0x20(%rbp),%rax
cmp    $0x0,%rax
jl     1337 <main+0x217>
mov    -0x18(%rbp),%rax
add    -0x20(%rbp),%rax
cmp    $0x14,%rax
jge    1337 <main+0x217>
mov    -0x10(%rbp),%rcx
sub    -0x20(%rbp),%rcx
lea    -0xcd0(%rbp),%rax
imul   $0xa0,%rcx,%rcx
add    %rcx,%rax
mov    -0x18(%rbp),%rcx
add    -0x20(%rbp),%rcx
cvtsi2sdq (%rax,%rcx,8),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
cmpq   $0x4,-0x20(%rbp)
jne    1353 <main+0x233>
jmp    1358 <main+0x238>
jmp    1212 <main+0xf2>
movsd  -0x28(%rbp),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    1372 <main+0x252>
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x30(%rbp),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    138c <main+0x26c>
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x38(%rbp),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    13a6 <main+0x286>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    13c0 <main+0x2a0>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    13c5 <main+0x2a5>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    11cb <main+0xab>
jmp    13db <main+0x2bb>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    11b8 <main+0x98>
movsd  -0x48(%rbp),%xmm0
lea    0xc14(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0xcd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %rbx
sub    $0xc80,%rsp
xor    %ebx,%ebx
lea    0xecb(%rip),%r14
cs nopw 0x0(%rax,%rax,1)
nop
lea    (%rsp,%rbx,1),%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x8,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x10,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x18,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x20,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x28,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x30,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x38,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x40,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x48,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x50,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x58,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x60,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x68,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x70,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x78,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x80,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x88,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x90,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x98,%rsi
mov    %r14,%rdi
call   1040 <scanf@plt>
add    $0xa0,%rbx
cmp    $0xc80,%rbx
jne    1140 <main+0x20>
xorpd  %xmm0,%xmm0
xor    %eax,%eax
jmp    12bd <main+0x19d>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r15,%rax
cmp    $0x14,%r15
je     14b2 <main+0x392>
lea    0x1(%rax),%r15
lea    -0x1(%rax),%r11
lea    0x2(%rax),%r14
lea    -0x2(%rax),%r9
lea    0x3(%rax),%r10
lea    -0x3(%rax),%r8
xor    %edi,%edi
jmp    1309 <main+0x1e9>
nopl   0x0(%rax)
movapd %xmm1,%xmm3
movapd %xmm1,%xmm4
movapd %xmm1,%xmm2
maxsd  %xmm0,%xmm2
maxsd  %xmm2,%xmm4
maxsd  %xmm4,%xmm3
movapd %xmm1,%xmm0
maxsd  %xmm3,%xmm0
mov    %rbx,%rdi
cmp    $0x14,%rbx
je     12b0 <main+0x190>
lea    (%rax,%rax,4),%rcx
shl    $0x5,%rcx
lea    (%rsp,%rcx,1),%rdx
xorps  %xmm1,%xmm1
cvtsi2sdq (%rdx,%rdi,8),%xmm1
cmp    $0x12,%rax
ja     1360 <main+0x240>
lea    (%r15,%r15,4),%rcx
shl    $0x5,%rcx
lea    (%rsp,%rcx,1),%rsi
xorps  %xmm2,%xmm2
cvtsi2sdq (%rsi,%rdi,8),%xmm2
mulsd  %xmm1,%xmm2
lea    0x1(%rdi),%rbx
cmp    $0x13,%rdi
jae    13e0 <main+0x2c0>
xorps  %xmm3,%xmm3
cvtsi2sdq (%rsi,%rbx,8),%xmm3
mulsd  %xmm1,%xmm3
jmp    1376 <main+0x256>
nopw   0x0(%rax,%rax,1)
lea    0x1(%rdi),%rbx
movapd %xmm1,%xmm2
movapd %xmm1,%xmm3
cmp    $0x13,%rdi
jae    12e0 <main+0x1c0>
xorps  %xmm4,%xmm4
cvtsi2sdq (%rdx,%rbx,8),%xmm4
mulsd  %xmm1,%xmm4
test   %rax,%rax
je     13a0 <main+0x280>
lea    (%r11,%r11,4),%rcx
shl    $0x5,%rcx
add    %rsp,%rcx
xorps  %xmm5,%xmm5
cvtsi2sdq (%rcx,%rbx,8),%xmm5
mulsd  %xmm5,%xmm1
cmp    $0x11,%rax
ja     13ee <main+0x2ce>
lea    (%r14,%r14,4),%rcx
shl    $0x5,%rcx
add    %rsp,%rcx
xorps  %xmm5,%xmm5
cvtsi2sdq (%rcx,%rdi,8),%xmm5
mulsd  %xmm5,%xmm2
cmp    $0x12,%rdi
jae    1427 <main+0x307>
lea    0x2(%rdi),%rsi
xorps  %xmm5,%xmm5
cvtsi2sdq (%rcx,%rsi,8),%xmm5
mulsd  %xmm5,%xmm3
jmp    13fc <main+0x2dc>
nopw   0x0(%rax,%rax,1)
movapd %xmm1,%xmm3
movapd %xmm1,%xmm4
cmp    $0x11,%rax
jbe    13a6 <main+0x286>
cmp    $0x11,%rdi
ja     12ec <main+0x1cc>
lea    0x2(%rdi),%rsi
xorps  %xmm5,%xmm5
cvtsi2sdq (%rdx,%rsi,8),%xmm5
mulsd  %xmm5,%xmm4
cmp    $0x2,%rax
jb     1427 <main+0x307>
lea    (%r9,%r9,4),%rcx
shl    $0x5,%rcx
add    %rsp,%rcx
xorps  %xmm5,%xmm5
cvtsi2sdq (%rcx,%rsi,8),%xmm5
mulsd  %xmm5,%xmm1
cmp    $0x10,%rax
ja     1470 <main+0x350>
lea    (%r10,%r10,4),%rcx
shl    $0x5,%rcx
lea    (%rsp,%rcx,1),%rsi
xorps  %xmm5,%xmm5
cvtsi2sdq (%rsi,%rdi,8),%xmm5
mulsd  %xmm5,%xmm2
cmp    $0x11,%rdi
jae    12ec <main+0x1cc>
add    $0x3,%rdi
xorps  %xmm5,%xmm5
cvtsi2sdq (%rsi,%rdi,8),%xmm5
mulsd  %xmm5,%xmm3
jmp    147e <main+0x35e>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x10,%rdi
ja     12ec <main+0x1cc>
add    $0x3,%rdi
xorps  %xmm5,%xmm5
cvtsi2sdq (%rdx,%rdi,8),%xmm5
mulsd  %xmm5,%xmm4
cmp    $0x3,%rax
jb     12ec <main+0x1cc>
lea    (%r8,%r8,4),%rcx
shl    $0x5,%rcx
add    %rsp,%rcx
xorps  %xmm5,%xmm5
cvtsi2sdq (%rcx,%rdi,8),%xmm5
mulsd  %xmm5,%xmm1
jmp    12ec <main+0x1cc>
lea    0xb4b(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0xc80,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [4 x i8] c"%Ld\00"
@.str.1 = [6 x i8] c"%.0lf\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i64
%3 = alloca i64
%4 = alloca i64
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca [20 x [20 x i64]]
store i32 0, i32* %1
store double 0.000000e+00, double* %9
store i64 0, i64* %2
br label %11
11: ; preds = %28, %0
%12 = load i64, i64* %2
%13 = icmp slt i64 %12, 20
br i1 %13, label %14, label %31
14: ; preds = %11
store i64 0, i64* %3
br label %15
15: ; preds = %24, %14
%16 = load i64, i64* %3
%17 = icmp slt i64 %16, 20
br i1 %17, label %18, label %27
18: ; preds = %15
%19 = load i64, i64* %2
%20 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %10, i64 0, i64 %19
%21 = load i64, i64* %3
%22 = getelementptr inbounds [20 x i64], [20 x i64]* %20, i64 0, i64 %21
%23 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %22)
br label %24
24: ; preds = %18
%25 = load i64, i64* %3
%26 = add nsw i64 %25, 1
store i64 %26, i64* %3
br label %15
27: ; preds = %15
br label %28
28: ; preds = %27
%29 = load i64, i64* %2
%30 = add nsw i64 %29, 1
store i64 %30, i64* %2
br label %11
31: ; preds = %11
store i64 0, i64* %2
br label %32
32: ; preds = %154, %31
%33 = load i64, i64* %2
%34 = icmp slt i64 %33, 20
br i1 %34, label %35, label %157
35: ; preds = %32
store i64 0, i64* %3
br label %36
36: ; preds = %150, %35
%37 = load i64, i64* %3
%38 = icmp slt i64 %37, 20
br i1 %38, label %39, label %153
39: ; preds = %36
store i64 0, i64* %4
store double 1.000000e+00, double* %8
store double 1.000000e+00, double* %7
store double 1.000000e+00, double* %6
store double 1.000000e+00, double* %5
br label %40
40: ; preds = %39, %124
%41 = load i64, i64* %2
%42 = load i64, i64* %4
%43 = add nsw i64 %41, %42
%44 = icmp slt i64 %43, 20
br i1 %44, label %45, label %56
45: ; preds = %40
%46 = load i64, i64* %2
%47 = load i64, i64* %4
%48 = add nsw i64 %46, %47
%49 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %10, i64 0, i64 %48
%50 = load i64, i64* %3
%51 = getelementptr inbounds [20 x i64], [20 x i64]* %49, i64 0, i64 %50
%52 = load i64, i64* %51
%53 = sitofp i64 %52 to double
%54 = load double, double* %5
%55 = fmul double %54, %53
store double %55, double* %5
br label %56
56: ; preds = %45, %40
%57 = load i64, i64* %3
%58 = load i64, i64* %4
%59 = add nsw i64 %57, %58
%60 = icmp slt i64 %59, 20
br i1 %60, label %61, label %72
61: ; preds = %56
%62 = load i64, i64* %2
%63 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %10, i64 0, i64 %62
%64 = load i64, i64* %3
%65 = load i64, i64* %4
%66 = add nsw i64 %64, %65
%67 = getelementptr inbounds [20 x i64], [20 x i64]* %63, i64 0, i64 %66
%68 = load i64, i64* %67
%69 = sitofp i64 %68 to double
%70 = load double, double* %6
%71 = fmul double %70, %69
store double %71, double* %6
br label %72
72: ; preds = %61, %56
%73 = load i64, i64* %2
%74 = load i64, i64* %4
%75 = add nsw i64 %73, %74
%76 = icmp slt i64 %75, 20
br i1 %76, label %77, label %95
77: ; preds = %72
%78 = load i64, i64* %3
%79 = load i64, i64* %4
%80 = add nsw i64 %78, %79
%81 = icmp slt i64 %80, 20
br i1 %81, label %82, label %95
82: ; preds = %77
%83 = load i64, i64* %2
%84 = load i64, i64* %4
%85 = add nsw i64 %83, %84
%86 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %10, i64 0, i64 %85
%87 = load i64, i64* %3
%88 = load i64, i64* %4
%89 = add nsw i64 %87, %88
%90 = getelementptr inbounds [20 x i64], [20 x i64]* %86, i64 0, i64 %89
%91 = load i64, i64* %90
%92 = sitofp i64 %91 to double
%93 = load double, double* %7
%94 = fmul double %93, %92
store double %94, double* %7
br label %95
95: ; preds = %82, %77, %72
%96 = load i64, i64* %2
%97 = load i64, i64* %4
%98 = sub nsw i64 %96, %97
%99 = icmp sge i64 %98, 0
br i1 %99, label %100, label %118
100: ; preds = %95
%101 = load i64, i64* %3
%102 = load i64, i64* %4
%103 = add nsw i64 %101, %102
%104 = icmp slt i64 %103, 20
br i1 %104, label %105, label %118
105: ; preds = %100
%106 = load i64, i64* %2
%107 = load i64, i64* %4
%108 = sub nsw i64 %106, %107
%109 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %10, i64 0, i64 %108
%110 = load i64, i64* %3
%111 = load i64, i64* %4
%112 = add nsw i64 %110, %111
%113 = getelementptr inbounds [20 x i64], [20 x i64]* %109, i64 0, i64 %112
%114 = load i64, i64* %113
%115 = sitofp i64 %114 to double
%116 = load double, double* %8
%117 = fmul double %116, %115
store double %117, double* %8
br label %118
118: ; preds = %105, %100, %95
%119 = load i64, i64* %4
%120 = add nsw i64 %119, 1
store i64 %120, i64* %4
%121 = load i64, i64* %4
%122 = icmp eq i64 %121, 4
br i1 %122, label %123, label %124
123: ; preds = %118
br label %125
124: ; preds = %118
br label %40
125: ; preds = %123
%126 = load double, double* %5
%127 = load double, double* %9
%128 = fcmp ogt double %126, %127
br i1 %128, label %129, label %131
129: ; preds = %125
%130 = load double, double* %5
store double %130, double* %9
br label %131
131: ; preds = %129, %125
%132 = load double, double* %6
%133 = load double, double* %9
%134 = fcmp ogt double %132, %133
br i1 %134, label %135, label %137
135: ; preds = %131
%136 = load double, double* %6
store double %136, double* %9
br label %137
137: ; preds = %135, %131
%138 = load double, double* %7
%139 = load double, double* %9
%140 = fcmp ogt double %138, %139
br i1 %140, label %141, label %143
141: ; preds = %137
%142 = load double, double* %7
store double %142, double* %9
br label %143
143: ; preds = %141, %137
%144 = load double, double* %8
%145 = load double, double* %9
%146 = fcmp ogt double %144, %145
br i1 %146, label %147, label %149
147: ; preds = %143
%148 = load double, double* %8
store double %148, double* %9
br label %149
149: ; preds = %147, %143
br label %150
150: ; preds = %149
%151 = load i64, i64* %3
%152 = add nsw i64 %151, 1
store i64 %152, i64* %3
br label %36
153: ; preds = %36
br label %154
154: ; preds = %153
%155 = load i64, i64* %2
%156 = add nsw i64 %155, 1
store i64 %156, i64* %2
br label %32
157: ; preds = %32
%158 = load double, double* %9
%159 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), double %158)
ret i32 0
}

LLVM IR (-O2):
@.str = [4 x i8] c"%Ld\00"
@.str.1 = [6 x i8] c"%.0lf\00"
define i32 @main() {
%1 = alloca [20 x [20 x i64]]
%2 = bitcast [20 x [20 x i64]]* %1 to i8*
br label %3
3: ; preds = %0, %3
%4 = phi i64 [ 0, %0 ], [ %45, %3 ]
%5 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 0
%6 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %5)
%7 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 1
%8 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %7)
%9 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 2
%10 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %9)
%11 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 3
%12 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %11)
%13 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 4
%14 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %13)
%15 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 5
%16 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %15)
%17 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 6
%18 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %17)
%19 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 7
%20 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %19)
%21 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 8
%22 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %21)
%23 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 9
%24 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %23)
%25 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 10
%26 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %25)
%27 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 11
%28 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %27)
%29 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 12
%30 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %29)
%31 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 13
%32 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %31)
%33 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 14
%34 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %33)
%35 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 15
%36 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %35)
%37 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 16
%38 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %37)
%39 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 17
%40 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %39)
%41 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 18
%42 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %41)
%43 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %4, i64 19
%44 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64* %43)
%45 = add nuw nsw i64 %4, 1
%46 = icmp eq i64 %45, 20
br i1 %46, label %47, label %3
47: ; preds = %3, %182
%48 = phi double [ %180, %182 ], [ 0.000000e+00, %3 ]
%49 = phi i64 [ %50, %182 ], [ 0, %3 ]
%50 = add nuw nsw i64 %49, 1
%51 = icmp ult i64 %49, 19
%52 = icmp eq i64 %49, 0
%53 = add nsw i64 %49, -1
%54 = add nuw nsw i64 %49, 2
%55 = icmp ult i64 %49, 18
%56 = icmp ult i64 %49, 2
%57 = add nsw i64 %49, -2
%58 = add nuw nsw i64 %49, 3
%59 = icmp ult i64 %49, 17
%60 = icmp ult i64 %49, 3
%61 = add nsw i64 %49, -3
br label %62
62: ; preds = %167, %47
%63 = phi double [ %48, %47 ], [ %180, %167 ]
%64 = phi i64 [ 0, %47 ], [ %168, %167 ]
%65 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %49, i64 %64
%66 = load i64, i64* %65
%67 = sitofp i64 %66 to double
%68 = sitofp i64 %66 to double
%69 = sitofp i64 %66 to double
br i1 %51, label %70, label %77
70: ; preds = %62
%71 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %50, i64 %64
%72 = load i64, i64* %71
%73 = sitofp i64 %72 to double
%74 = fmul double %67, %73
%75 = add nuw nsw i64 %64, 1
%76 = icmp ult i64 %64, 19
br i1 %76, label %80, label %98
77: ; preds = %62
%78 = add nuw nsw i64 %64, 1
%79 = icmp ult i64 %64, 19
br i1 %79, label %85, label %167
80: ; preds = %70
%81 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %50, i64 %75
%82 = load i64, i64* %81
%83 = sitofp i64 %82 to double
%84 = fmul double %68, %83
br label %85
85: ; preds = %77, %80
%86 = phi i64 [ %75, %80 ], [ %78, %77 ]
%87 = phi double [ %74, %80 ], [ %67, %77 ]
%88 = phi double [ %84, %80 ], [ %68, %77 ]
%89 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %49, i64 %86
%90 = load i64, i64* %89
%91 = sitofp i64 %90 to double
%92 = fmul double %68, %91
br i1 %52, label %98, label %93
93: ; preds = %85
%94 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %53, i64 %86
%95 = load i64, i64* %94
%96 = sitofp i64 %95 to double
%97 = fmul double %69, %96
br label %98
98: ; preds = %70, %93, %85
%99 = phi double [ %88, %93 ], [ %88, %85 ], [ %68, %70 ]
%100 = phi double [ %92, %93 ], [ %92, %85 ], [ %68, %70 ]
%101 = phi double [ %87, %93 ], [ %87, %85 ], [ %74, %70 ]
%102 = phi i64 [ %86, %93 ], [ %86, %85 ], [ %75, %70 ]
%103 = phi double [ %97, %93 ], [ %69, %85 ], [ %69, %70 ]
br i1 %55, label %104, label %111
104: ; preds = %98
%105 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %54, i64 %64
%106 = load i64, i64* %105
%107 = sitofp i64 %106 to double
%108 = fmul double %101, %107
%109 = add nuw nsw i64 %64, 2
%110 = icmp ult i64 %64, 18
br i1 %110, label %115, label %133
111: ; preds = %98
%112 = icmp ult i64 %64, 18
br i1 %112, label %113, label %167
113: ; preds = %111
%114 = add nuw nsw i64 %64, 2
br label %120
115: ; preds = %104
%116 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %54, i64 %109
%117 = load i64, i64* %116
%118 = sitofp i64 %117 to double
%119 = fmul double %99, %118
br label %120
120: ; preds = %113, %115
%121 = phi i64 [ %109, %115 ], [ %114, %113 ]
%122 = phi double [ %108, %115 ], [ %101, %113 ]
%123 = phi double [ %119, %115 ], [ %99, %113 ]
%124 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %49, i64 %121
%125 = load i64, i64* %124
%126 = sitofp i64 %125 to double
%127 = fmul double %100, %126
br i1 %56, label %133, label %128
128: ; preds = %120
%129 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %57, i64 %121
%130 = load i64, i64* %129
%131 = sitofp i64 %130 to double
%132 = fmul double %103, %131
br label %133
133: ; preds = %104, %128, %120
%134 = phi double [ %123, %128 ], [ %123, %120 ], [ %99, %104 ]
%135 = phi double [ %127, %128 ], [ %127, %120 ], [ %100, %104 ]
%136 = phi double [ %122, %128 ], [ %122, %120 ], [ %108, %104 ]
%137 = phi double [ %132, %128 ], [ %103, %120 ], [ %103, %104 ]
br i1 %59, label %138, label %145
138: ; preds = %133
%139 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %58, i64 %64
%140 = load i64, i64* %139
%141 = sitofp i64 %140 to double
%142 = fmul double %136, %141
%143 = add nuw nsw i64 %64, 3
%144 = icmp ult i64 %64, 17
br i1 %144, label %149, label %167
145: ; preds = %133
%146 = icmp ult i64 %64, 17
br i1 %146, label %147, label %167
147: ; preds = %145
%148 = add nuw nsw i64 %64, 3
br label %154
149: ; preds = %138
%150 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %58, i64 %143
%151 = load i64, i64* %150
%152 = sitofp i64 %151 to double
%153 = fmul double %134, %152
br label %154
154: ; preds = %147, %149
%155 = phi i64 [ %143, %149 ], [ %148, %147 ]
%156 = phi double [ %142, %149 ], [ %136, %147 ]
%157 = phi double [ %153, %149 ], [ %134, %147 ]
%158 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %49, i64 %155
%159 = load i64, i64* %158
%160 = sitofp i64 %159 to double
%161 = fmul double %135, %160
br i1 %60, label %167, label %162
162: ; preds = %154
%163 = getelementptr inbounds [20 x [20 x i64]], [20 x [20 x i64]]* %1, i64 0, i64 %61, i64 %155
%164 = load i64, i64* %163
%165 = sitofp i64 %164 to double
%166 = fmul double %137, %165
br label %167
167: ; preds = %111, %77, %145, %138, %162, %154
%168 = phi i64 [ %102, %162 ], [ %102, %154 ], [ %102, %145 ], [ %102, %138 ], [ %102, %111 ], [ %78, %77 ]
%169 = phi double [ %157, %162 ], [ %157, %154 ], [ %134, %145 ], [ %134, %138 ], [ %99, %111 ], [ %68, %77 ]
%170 = phi double [ %161, %162 ], [ %161, %154 ], [ %135, %145 ], [ %135, %138 ], [ %100, %111 ], [ %68, %77 ]
%171 = phi double [ %156, %162 ], [ %156, %154 ], [ %136, %145 ], [ %142, %138 ], [ %101, %111 ], [ %67, %77 ]
%172 = phi double [ %166, %162 ], [ %137, %154 ], [ %137, %145 ], [ %137, %138 ], [ %103, %111 ], [ %69, %77 ]
%173 = fcmp ogt double %171, %63
%174 = select i1 %173, double %171, double %63
%175 = fcmp ogt double %170, %174
%176 = select i1 %175, double %170, double %174
%177 = fcmp ogt double %169, %176
%178 = select i1 %177, double %169, double %176
%179 = fcmp ogt double %172, %178
%180 = select i1 %179, double %172, double %178
%181 = icmp eq i64 %168, 20
br i1 %181, label %182, label %62
182: ; preds = %167
%183 = icmp eq i64 %50, 20
br i1 %183, label %184, label %47
184: ; preds = %182
%185 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), double %180)
ret i32 0
}