#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 *, long);
int main(void) {
  long highestValue = 0;
  int grid[20][20] = {{8,  2,  22, 97, 38, 15, 00, 40, 00, 75,
                       04, 05, 07, 78, 52, 12, 50, 77, 91, 8},
                      {49, 49, 99, 40, 17, 81, 18, 57, 60, 87,
                       17, 40, 98, 43, 69, 48, 04, 56, 62, 00},
                      {81, 49, 31, 73, 55, 79, 14, 29, 93, 71,
                       40, 67, 53, 88, 30, 03, 49, 13, 36, 65},
                      {52, 70, 95, 23, 04, 60, 11, 42, 69, 24,
                       68, 56, 01, 32, 56, 71, 37, 2,  36, 91},
                      {22, 31, 16, 71, 51, 67, 63, 89, 41, 92,
                       36, 54, 22, 40, 40, 28, 66, 33, 13, 80},
                      {24, 47, 32, 60, 99, 03, 45, 2,  44, 75,
                       33, 53, 78, 36, 84, 20, 35, 17, 12, 50},
                      {32, 98, 81, 28, 64, 23, 67, 10, 26, 38,
                       40, 67, 59, 54, 70, 66, 18, 38, 64, 70},
                      {67, 26, 20, 68, 2,  62, 12, 20, 95, 63,
                       94, 39, 63, 8,  40, 91, 66, 49, 94, 21},
                      {24, 55, 58, 05, 66, 73, 99, 26, 97, 17,
                       78, 78, 96, 83, 14, 88, 34, 89, 63, 72},
                      {21, 36, 23, 9,  75, 00, 76, 44, 20, 45,
                       35, 14, 00, 61, 33, 97, 34, 31, 33, 95},
                      {78, 17, 53, 28, 22, 75, 31, 67, 15, 94,
                       03, 80, 04, 62, 16, 14, 9,  53, 56, 92},
                      {16, 39, 05, 42, 96, 35, 31, 47, 55, 58,
                       88, 24, 00, 17, 54, 24, 36, 29, 85, 57},
                      {86, 56, 00, 48, 35, 71, 89, 07, 05, 44,
                       44, 37, 44, 60, 21, 58, 51, 54, 17, 58},
                      {19, 80, 81, 68, 05, 94, 47, 69, 28, 73,
                       92, 13, 86, 52, 17, 77, 04, 89, 55, 40},
                      {04, 52, 8,  83, 97, 35, 99, 16, 07, 97,
                       57, 32, 16, 26, 26, 79, 33, 27, 98, 66},
                      {88, 36, 68, 87, 57, 62, 20, 72, 03, 46,
                       33, 67, 46, 55, 12, 32, 63, 93, 53, 69},
                      {04, 42, 16, 73, 38, 25, 39, 11, 24, 94,
                       72, 18, 8,  46, 29, 32, 40, 62, 76, 36},
                      {20, 69, 36, 41, 72, 30, 23, 88, 34, 62,
                       99, 69, 82, 67, 59, 85, 74, 04, 36, 16},
                      {20, 73, 35, 29, 78, 31, 90, 01, 74, 31,
                       49, 71, 48, 86, 81, 16, 23, 57, 05, 54},
                      {01, 70, 54, 71, 83, 51, 54, 69, 16, 92,
                       33, 48, 61, 43, 52, 01, 89, 19, 67, 48}};
  for (int i = 0; i < 20; ++i) {
    for (int j = 0; j < 20; ++j) {
      long long horizontal = grid[i][j];
      if (j + 1 < 20)
        horizontal = horizontal * grid[i][j + 1];
      if (j + 2 < 20)
        horizontal = horizontal * grid[i][j + 2];
      if (j + 3 < 20)
        horizontal = horizontal * grid[i][j + 3];
      if (horizontal > highestValue)
        highestValue = horizontal;
      long long down = grid[i][j];
      if (i + 1 < 20)
        down = down * grid[i + 1][j];
      if (i + 2 < 20)
        down = down * grid[i + 2][j];
      if (i + 3 < 20)
        down = down * grid[i + 3][j];
      if (down > highestValue)
        highestValue = down;
      long long diagonalRight = grid[i][j];
      if ((i + 1 < 20) && (j + 1 < 20))
        diagonalRight = diagonalRight * grid[i + 1][j + 1];
      if ((i + 2 < 20) && (j + 2 < 20))
        diagonalRight = diagonalRight * grid[i + 2][j + 2];
      if ((i + 3 < 20) && (j + 3 < 20))
        diagonalRight = diagonalRight * grid[i + 3][j + 3];
      if (diagonalRight > highestValue)
        highestValue = diagonalRight;
      long long diagonalLeft = grid[i][j];
      if ((i + 1 < 20) && (j - 1 > 0))
        diagonalLeft = diagonalLeft * grid[i + 1][j - 1];
      if ((i + 2 < 20) && (j - 2 > 0))
        diagonalLeft = diagonalLeft * grid[i + 2][j - 2];
      if ((i + 3 < 20) && (j - 3 > 0))
        diagonalLeft = diagonalLeft * grid[i + 3][j - 3];
      if (diagonalLeft > highestValue)
        highestValue = diagonalLeft;
    }
  }
  printf("%lld", highestValue);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x680,%rsp
movl   $0x0,-0x4(%rbp)
movq   $0x0,-0x10(%rbp)
lea    -0x650(%rbp),%rdi
lea    0xeb8(%rip),%rsi
mov    $0x640,%edx
call   1040 <memcpy@plt>
movl   $0x0,-0x654(%rbp)
cmpl   $0x14,-0x654(%rbp)
jge    16b4 <main+0x594>
movl   $0x0,-0x658(%rbp)
cmpl   $0x14,-0x658(%rbp)
jge    169b <main+0x57b>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
mov    %rax,-0x660(%rbp)
mov    -0x658(%rbp),%eax
add    $0x1,%eax
cmp    $0x14,%eax
jge    11f0 <main+0xd0>
mov    -0x660(%rbp),%rax
movslq -0x654(%rbp),%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x660(%rbp)
mov    -0x658(%rbp),%eax
add    $0x2,%eax
cmp    $0x14,%eax
jge    1239 <main+0x119>
mov    -0x660(%rbp),%rax
movslq -0x654(%rbp),%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x660(%rbp)
mov    -0x658(%rbp),%eax
add    $0x3,%eax
cmp    $0x14,%eax
jge    1282 <main+0x162>
mov    -0x660(%rbp),%rax
movslq -0x654(%rbp),%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x660(%rbp)
mov    -0x660(%rbp),%rax
cmp    -0x10(%rbp),%rax
jle    129e <main+0x17e>
mov    -0x660(%rbp),%rax
mov    %rax,-0x10(%rbp)
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
mov    %rax,-0x668(%rbp)
mov    -0x654(%rbp),%eax
add    $0x1,%eax
cmp    $0x14,%eax
jge    130e <main+0x1ee>
mov    -0x668(%rbp),%rax
mov    -0x654(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
movslq -0x658(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x668(%rbp)
mov    -0x654(%rbp),%eax
add    $0x2,%eax
cmp    $0x14,%eax
jge    1357 <main+0x237>
mov    -0x668(%rbp),%rax
mov    -0x654(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
movslq -0x658(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x668(%rbp)
mov    -0x654(%rbp),%eax
add    $0x3,%eax
cmp    $0x14,%eax
jge    13a0 <main+0x280>
mov    -0x668(%rbp),%rax
mov    -0x654(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
movslq -0x658(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x668(%rbp)
mov    -0x668(%rbp),%rax
cmp    -0x10(%rbp),%rax
jle    13bc <main+0x29c>
mov    -0x668(%rbp),%rax
mov    %rax,-0x10(%rbp)
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
mov    %rax,-0x670(%rbp)
mov    -0x654(%rbp),%eax
add    $0x1,%eax
cmp    $0x14,%eax
jge    1443 <main+0x323>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
cmp    $0x14,%eax
jge    1443 <main+0x323>
mov    -0x670(%rbp),%rax
mov    -0x654(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x670(%rbp)
mov    -0x654(%rbp),%eax
add    $0x2,%eax
cmp    $0x14,%eax
jge    14a3 <main+0x383>
mov    -0x658(%rbp),%eax
add    $0x2,%eax
cmp    $0x14,%eax
jge    14a3 <main+0x383>
mov    -0x670(%rbp),%rax
mov    -0x654(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x670(%rbp)
mov    -0x654(%rbp),%eax
add    $0x3,%eax
cmp    $0x14,%eax
jge    1503 <main+0x3e3>
mov    -0x658(%rbp),%eax
add    $0x3,%eax
cmp    $0x14,%eax
jge    1503 <main+0x3e3>
mov    -0x670(%rbp),%rax
mov    -0x654(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x670(%rbp)
mov    -0x670(%rbp),%rax
cmp    -0x10(%rbp),%rax
jle    151f <main+0x3ff>
mov    -0x670(%rbp),%rax
mov    %rax,-0x10(%rbp)
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
mov    %rax,-0x678(%rbp)
mov    -0x654(%rbp),%eax
add    $0x1,%eax
cmp    $0x14,%eax
jge    15a6 <main+0x486>
mov    -0x658(%rbp),%eax
sub    $0x1,%eax
cmp    $0x0,%eax
jle    15a6 <main+0x486>
mov    -0x678(%rbp),%rax
mov    -0x654(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x678(%rbp)
mov    -0x654(%rbp),%eax
add    $0x2,%eax
cmp    $0x14,%eax
jge    1606 <main+0x4e6>
mov    -0x658(%rbp),%eax
sub    $0x2,%eax
cmp    $0x0,%eax
jle    1606 <main+0x4e6>
mov    -0x678(%rbp),%rax
mov    -0x654(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
sub    $0x2,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x678(%rbp)
mov    -0x654(%rbp),%eax
add    $0x3,%eax
cmp    $0x14,%eax
jge    1666 <main+0x546>
mov    -0x658(%rbp),%eax
sub    $0x3,%eax
cmp    $0x0,%eax
jle    1666 <main+0x546>
mov    -0x678(%rbp),%rax
mov    -0x654(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rdx
lea    -0x650(%rbp),%rcx
imul   $0x50,%rdx,%rdx
add    %rdx,%rcx
mov    -0x658(%rbp),%edx
sub    $0x3,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
imul   %rcx,%rax
mov    %rax,-0x678(%rbp)
mov    -0x678(%rbp),%rax
cmp    -0x10(%rbp),%rax
jle    1682 <main+0x562>
mov    -0x678(%rbp),%rax
mov    %rax,-0x10(%rbp)
jmp    1687 <main+0x567>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x658(%rbp)
jmp    1173 <main+0x53>
jmp    16a0 <main+0x580>
mov    -0x654(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x654(%rbp)
jmp    115c <main+0x3c>
mov    -0x10(%rbp),%rsi
lea    0xf81(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x680,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
lea    0xedb(%rip),%rdx
xor    %r8d,%r8d
xor    %esi,%esi
jmp    1146 <main+0x36>
nopl   0x0(%rax)
add    $0x50,%rdx
mov    0x8(%rsp),%rax
mov    %rax,%r8
cmp    $0x14,%rax
je     13db <main+0x2cb>
lea    0x1(%r8),%rax
mov    %rax,0x8(%rsp)
lea    0x2(%r8),%eax
mov    %eax,0x4(%rsp)
lea    0x3(%r8),%eax
mov    %eax,(%rsp)
xor    %ecx,%ecx
mov    %r8,0x10(%rsp)
jmp    1176 <main+0x66>
nopw   0x0(%rax,%rax,1)
cmp    $0x14,%rcx
je     1130 <main+0x20>
movslq (%rdx,%rcx,4),%r15
mov    $0x15,%edi
mov    %r15,%rax
cmp    $0x13,%rcx
je     11c0 <main+0xb0>
movslq 0x4(%rdx,%rcx,4),%rax
imul   %r15,%rax
mov    $0x14,%edi
cmp    $0x12,%rcx
jae    11c0 <main+0xb0>
movslq 0x8(%rdx,%rcx,4),%rdi
imul   %rdi,%rax
cmp    $0x11,%rcx
jne    11cc <main+0xbc>
mov    $0x13,%edi
mov    $0x14,%r13d
mov    $0x1,%r9b
jmp    11e0 <main+0xd0>
nopl   0x0(%rax,%rax,1)
lea    0x3(%rcx),%r13
mov    $0x1,%r9b
mov    $0x1,%r14b
jmp    11e3 <main+0xd3>
lea    0x2(%rcx),%rdi
lea    0x3(%rcx),%r13
movslq 0xc(%rdx,%rcx,4),%rbp
imul   %rbp,%rax
xor    %r9d,%r9d
xor    %r14d,%r14d
cmp    %rsi,%rax
cmovg  %rax,%rsi
cmp    $0x13,%r8
jae    1220 <main+0x110>
movslq 0x50(%rdx,%rcx,4),%r11
imul   %r15,%r11
cmp    $0x12,%r8
jne    1240 <main+0x130>
xor    %ebp,%ebp
mov    $0x14,%r10d
mov    $0x15,%r12d
xor    %r8d,%r8d
cmp    %rsi,%r11
jle    128a <main+0x17a>
jmp    128d <main+0x17d>
nopw   0x0(%rax,%rax,1)
mov    %r15,%rbx
cmp    %r15,%rsi
jl     137b <main+0x26b>
mov    %rsi,%rbx
jmp    137b <main+0x26b>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movslq 0xa0(%rdx,%rcx,4),%rax
imul   %rax,%r11
cmp    $0x10,%r8
ja     1274 <main+0x164>
movslq 0xf0(%rdx,%rcx,4),%rax
imul   %rax,%r11
mov    $0x1,%bpl
mov    (%rsp),%r12d
mov    0x4(%rsp),%r10d
mov    $0x1,%r8b
cmp    %rsi,%r11
jle    128a <main+0x17a>
jmp    128d <main+0x17d>
xor    %ebp,%ebp
mov    $0x1,%r8b
mov    $0x13,%r10d
mov    $0x14,%r12d
cmp    %rsi,%r11
jg     128d <main+0x17d>
mov    %rsi,%r11
mov    %r15,%rbx
cmp    $0x13,%rcx
je     129f <main+0x18f>
movslq 0x54(%rdx,%rcx,4),%rbx
imul   %r15,%rbx
mov    %r8d,%eax
xor    $0x1,%al
or     %al,%r14b
jne    12c6 <main+0x1b6>
mov    %r10d,%eax
lea    (%rax,%rax,4),%rax
shl    $0x4,%rax
lea    0xd45(%rip),%rsi
add    %rsi,%rax
movslq (%rax,%rdi,4),%rax
imul   %rax,%rbx
mov    %ebp,%eax
xor    $0x1,%al
or     %al,%r9b
je     13a0 <main+0x290>
cmp    %r11,%rbx
jle    13c9 <main+0x2b9>
cmp    $0x2,%rcx
jb     130b <main+0x1fb>
mov    $0xfffffffe,%eax
add    %ecx,%eax
add    $0x1,%eax
mov    0x8(%rsp),%rsi
lea    (%rsi,%rsi,4),%rsi
shl    $0x4,%rsi
lea    0xd00(%rip),%rdi
add    %rdi,%rsi
movslq (%rsi,%rax,4),%rax
imul   %rax,%r15
cmp    $0x3,%rcx
setae  %al
and    %al,%r8b
cmp    $0x1,%r8b
jne    133f <main+0x22f>
mov    %r10d,%eax
mov    $0xfffffffe,%esi
add    %ecx,%esi
lea    (%rax,%rax,4),%rax
shl    $0x4,%rax
lea    0xccc(%rip),%rdi
add    %rdi,%rax
movslq (%rax,%rsi,4),%rax
imul   %rax,%r15
mov    0x10(%rsp),%r8
cmp    $0x4,%rcx
setae  %al
and    %al,%bpl
cmp    $0x1,%bpl
jne    137b <main+0x26b>
mov    %r12d,%eax
mov    $0xfffffffe,%esi
add    %ecx,%esi
add    $0xffffffff,%esi
lea    (%rax,%rax,4),%rax
shl    $0x4,%rax
lea    0xc90(%rip),%rdi
add    %rdi,%rax
movslq (%rax,%rsi,4),%rax
imul   %rax,%r15
add    $0x1,%rcx
mov    %r15,%rsi
cmp    %rbx,%r15
jg     1170 <main+0x60>
mov    %rbx,%rsi
jmp    1170 <main+0x60>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r12d,%eax
mov    %r13d,%esi
lea    (%rax,%rax,4),%rax
shl    $0x4,%rax
lea    0xc4b(%rip),%rdi
add    %rdi,%rax
movslq (%rax,%rsi,4),%rax
imul   %rax,%rbx
cmp    %r11,%rbx
jg     12dc <main+0x1cc>
mov    %r11,%rbx
cmp    $0x2,%rcx
jae    12e2 <main+0x1d2>
jmp    130b <main+0x1fb>
lea    0x125e(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.main.grid = [20 x [20 x i32]] [[20 x i32] [i32 8, i32 2, i32 22, i32 97, i32 38, i32 15, i32 0, i32 40, i32 0, i32 75, i32 4, i32 5, i32 7, i32 78, i32 52, i32 12, i32 50, i32 77, i32 91, i32 8], [20 x i32] [i32 49, i32 49, i32 99, i32 40, i32 17, i32 81, i32 18, i32 57, i32 60, i32 87, i32 17, i32 40, i32 98, i32 43, i32 69, i32 48, i32 4, i32 56, i32 62, i32 0], [20 x i32] [i32 81, i32 49, i32 31, i32 73, i32 55, i32 79, i32 14, i32 29, i32 93, i32 71, i32 40, i32 67, i32 53, i32 88, i32 30, i32 3, i32 49, i32 13, i32 36, i32 65], [20 x i32] [i32 52, i32 70, i32 95, i32 23, i32 4, i32 60, i32 11, i32 42, i32 69, i32 24, i32 68, i32 56, i32 1, i32 32, i32 56, i32 71, i32 37, i32 2, i32 36, i32 91], [20 x i32] [i32 22, i32 31, i32 16, i32 71, i32 51, i32 67, i32 63, i32 89, i32 41, i32 92, i32 36, i32 54, i32 22, i32 40, i32 40, i32 28, i32 66, i32 33, i32 13, i32 80], [20 x i32] [i32 24, i32 47, i32 32, i32 60, i32 99, i32 3, i32 45, i32 2, i32 44, i32 75, i32 33, i32 53, i32 78, i32 36, i32 84, i32 20, i32 35, i32 17, i32 12, i32 50], [20 x i32] [i32 32, i32 98, i32 81, i32 28, i32 64, i32 23, i32 67, i32 10, i32 26, i32 38, i32 40, i32 67, i32 59, i32 54, i32 70, i32 66, i32 18, i32 38, i32 64, i32 70], [20 x i32] [i32 67, i32 26, i32 20, i32 68, i32 2, i32 62, i32 12, i32 20, i32 95, i32 63, i32 94, i32 39, i32 63, i32 8, i32 40, i32 91, i32 66, i32 49, i32 94, i32 21], [20 x i32] [i32 24, i32 55, i32 58, i32 5, i32 66, i32 73, i32 99, i32 26, i32 97, i32 17, i32 78, i32 78, i32 96, i32 83, i32 14, i32 88, i32 34, i32 89, i32 63, i32 72], [20 x i32] [i32 21, i32 36, i32 23, i32 9, i32 75, i32 0, i32 76, i32 44, i32 20, i32 45, i32 35, i32 14, i32 0, i32 61, i32 33, i32 97, i32 34, i32 31, i32 33, i32 95], [20 x i32] [i32 78, i32 17, i32 53, i32 28, i32 22, i32 75, i32 31, i32 67, i32 15, i32 94, i32 3, i32 80, i32 4, i32 62, i32 16, i32 14, i32 9, i32 53, i32 56, i32 92], [20 x i32] [i32 16, i32 39, i32 5, i32 42, i32 96, i32 35, i32 31, i32 47, i32 55, i32 58, i32 88, i32 24, i32 0, i32 17, i32 54, i32 24, i32 36, i32 29, i32 85, i32 57], [20 x i32] [i32 86, i32 56, i32 0, i32 48, i32 35, i32 71, i32 89, i32 7, i32 5, i32 44, i32 44, i32 37, i32 44, i32 60, i32 21, i32 58, i32 51, i32 54, i32 17, i32 58], [20 x i32] [i32 19, i32 80, i32 81, i32 68, i32 5, i32 94, i32 47, i32 69, i32 28, i32 73, i32 92, i32 13, i32 86, i32 52, i32 17, i32 77, i32 4, i32 89, i32 55, i32 40], [20 x i32] [i32 4, i32 52, i32 8, i32 83, i32 97, i32 35, i32 99, i32 16, i32 7, i32 97, i32 57, i32 32, i32 16, i32 26, i32 26, i32 79, i32 33, i32 27, i32 98, i32 66], [20 x i32] [i32 88, i32 36, i32 68, i32 87, i32 57, i32 62, i32 20, i32 72, i32 3, i32 46, i32 33, i32 67, i32 46, i32 55, i32 12, i32 32, i32 63, i32 93, i32 53, i32 69], [20 x i32] [i32 4, i32 42, i32 16, i32 73, i32 38, i32 25, i32 39, i32 11, i32 24, i32 94, i32 72, i32 18, i32 8, i32 46, i32 29, i32 32, i32 40, i32 62, i32 76, i32 36], [20 x i32] [i32 20, i32 69, i32 36, i32 41, i32 72, i32 30, i32 23, i32 88, i32 34, i32 62, i32 99, i32 69, i32 82, i32 67, i32 59, i32 85, i32 74, i32 4, i32 36, i32 16], [20 x i32] [i32 20, i32 73, i32 35, i32 29, i32 78, i32 31, i32 90, i32 1, i32 74, i32 31, i32 49, i32 71, i32 48, i32 86, i32 81, i32 16, i32 23, i32 57, i32 5, i32 54], [20 x i32] [i32 1, i32 70, i32 54, i32 71, i32 83, i32 51, i32 54, i32 69, i32 16, i32 92, i32 33, i32 48, i32 61, i32 43, i32 52, i32 1, i32 89, i32 19, i32 67, i32 48]]
@.str = [5 x i8] c"%lld\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i64
%3 = alloca [20 x [20 x i32]]
%4 = alloca i32
%5 = alloca i32
%6 = alloca i64
%7 = alloca i64
%8 = alloca i64
%9 = alloca i64
store i32 0, i32* %1
store i64 0, i64* %2
%10 = bitcast [20 x [20 x i32]]* %3 to i8*
store i32 0, i32* %4
br label %11
11: ; preds = %301, %0
%12 = load i32, i32* %4
%13 = icmp slt i32 %12, 20
br i1 %13, label %14, label %304
14: ; preds = %11
store i32 0, i32* %5
br label %15
15: ; preds = %297, %14
%16 = load i32, i32* %5
%17 = icmp slt i32 %16, 20
br i1 %17, label %18, label %300
18: ; preds = %15
%19 = load i32, i32* %4
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %20
%22 = load i32, i32* %5
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds [20 x i32], [20 x i32]* %21, i64 0, i64 %23
%25 = load i32, i32* %24
%26 = sext i32 %25 to i64
store i64 %26, i64* %6
%27 = load i32, i32* %5
%28 = add nsw i32 %27, 1
%29 = icmp slt i32 %28, 20
br i1 %29, label %30, label %42
30: ; preds = %18
%31 = load i64, i64* %6
%32 = load i32, i32* %4
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %33
%35 = load i32, i32* %5
%36 = add nsw i32 %35, 1
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [20 x i32], [20 x i32]* %34, i64 0, i64 %37
%39 = load i32, i32* %38
%40 = sext i32 %39 to i64
%41 = mul nsw i64 %31, %40
store i64 %41, i64* %6
br label %42
42: ; preds = %30, %18
%43 = load i32, i32* %5
%44 = add nsw i32 %43, 2
%45 = icmp slt i32 %44, 20
br i1 %45, label %46, label %58
46: ; preds = %42
%47 = load i64, i64* %6
%48 = load i32, i32* %4
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %49
%51 = load i32, i32* %5
%52 = add nsw i32 %51, 2
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [20 x i32], [20 x i32]* %50, i64 0, i64 %53
%55 = load i32, i32* %54
%56 = sext i32 %55 to i64
%57 = mul nsw i64 %47, %56
store i64 %57, i64* %6
br label %58
58: ; preds = %46, %42
%59 = load i32, i32* %5
%60 = add nsw i32 %59, 3
%61 = icmp slt i32 %60, 20
br i1 %61, label %62, label %74
62: ; preds = %58
%63 = load i64, i64* %6
%64 = load i32, i32* %4
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %65
%67 = load i32, i32* %5
%68 = add nsw i32 %67, 3
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds [20 x i32], [20 x i32]* %66, i64 0, i64 %69
%71 = load i32, i32* %70
%72 = sext i32 %71 to i64
%73 = mul nsw i64 %63, %72
store i64 %73, i64* %6
br label %74
74: ; preds = %62, %58
%75 = load i64, i64* %6
%76 = load i64, i64* %2
%77 = icmp sgt i64 %75, %76
br i1 %77, label %78, label %80
78: ; preds = %74
%79 = load i64, i64* %6
store i64 %79, i64* %2
br label %80
80: ; preds = %78, %74
%81 = load i32, i32* %4
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %82
%84 = load i32, i32* %5
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds [20 x i32], [20 x i32]* %83, i64 0, i64 %85
%87 = load i32, i32* %86
%88 = sext i32 %87 to i64
store i64 %88, i64* %7
%89 = load i32, i32* %4
%90 = add nsw i32 %89, 1
%91 = icmp slt i32 %90, 20
br i1 %91, label %92, label %104
92: ; preds = %80
%93 = load i64, i64* %7
%94 = load i32, i32* %4
%95 = add nsw i32 %94, 1
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %96
%98 = load i32, i32* %5
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds [20 x i32], [20 x i32]* %97, i64 0, i64 %99
%101 = load i32, i32* %100
%102 = sext i32 %101 to i64
%103 = mul nsw i64 %93, %102
store i64 %103, i64* %7
br label %104
104: ; preds = %92, %80
%105 = load i32, i32* %4
%106 = add nsw i32 %105, 2
%107 = icmp slt i32 %106, 20
br i1 %107, label %108, label %120
108: ; preds = %104
%109 = load i64, i64* %7
%110 = load i32, i32* %4
%111 = add nsw i32 %110, 2
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %112
%114 = load i32, i32* %5
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds [20 x i32], [20 x i32]* %113, i64 0, i64 %115
%117 = load i32, i32* %116
%118 = sext i32 %117 to i64
%119 = mul nsw i64 %109, %118
store i64 %119, i64* %7
br label %120
120: ; preds = %108, %104
%121 = load i32, i32* %4
%122 = add nsw i32 %121, 3
%123 = icmp slt i32 %122, 20
br i1 %123, label %124, label %136
124: ; preds = %120
%125 = load i64, i64* %7
%126 = load i32, i32* %4
%127 = add nsw i32 %126, 3
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %128
%130 = load i32, i32* %5
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds [20 x i32], [20 x i32]* %129, i64 0, i64 %131
%133 = load i32, i32* %132
%134 = sext i32 %133 to i64
%135 = mul nsw i64 %125, %134
store i64 %135, i64* %7
br label %136
136: ; preds = %124, %120
%137 = load i64, i64* %7
%138 = load i64, i64* %2
%139 = icmp sgt i64 %137, %138
br i1 %139, label %140, label %142
140: ; preds = %136
%141 = load i64, i64* %7
store i64 %141, i64* %2
br label %142
142: ; preds = %140, %136
%143 = load i32, i32* %4
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %144
%146 = load i32, i32* %5
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds [20 x i32], [20 x i32]* %145, i64 0, i64 %147
%149 = load i32, i32* %148
%150 = sext i32 %149 to i64
store i64 %150, i64* %8
%151 = load i32, i32* %4
%152 = add nsw i32 %151, 1
%153 = icmp slt i32 %152, 20
br i1 %153, label %154, label %171
154: ; preds = %142
%155 = load i32, i32* %5
%156 = add nsw i32 %155, 1
%157 = icmp slt i32 %156, 20
br i1 %157, label %158, label %171
158: ; preds = %154
%159 = load i64, i64* %8
%160 = load i32, i32* %4
%161 = add nsw i32 %160, 1
%162 = sext i32 %161 to i64
%163 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %162
%164 = load i32, i32* %5
%165 = add nsw i32 %164, 1
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds [20 x i32], [20 x i32]* %163, i64 0, i64 %166
%168 = load i32, i32* %167
%169 = sext i32 %168 to i64
%170 = mul nsw i64 %159, %169
store i64 %170, i64* %8
br label %171
171: ; preds = %158, %154, %142
%172 = load i32, i32* %4
%173 = add nsw i32 %172, 2
%174 = icmp slt i32 %173, 20
br i1 %174, label %175, label %192
175: ; preds = %171
%176 = load i32, i32* %5
%177 = add nsw i32 %176, 2
%178 = icmp slt i32 %177, 20
br i1 %178, label %179, label %192
179: ; preds = %175
%180 = load i64, i64* %8
%181 = load i32, i32* %4
%182 = add nsw i32 %181, 2
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %183
%185 = load i32, i32* %5
%186 = add nsw i32 %185, 2
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds [20 x i32], [20 x i32]* %184, i64 0, i64 %187
%189 = load i32, i32* %188
%190 = sext i32 %189 to i64
%191 = mul nsw i64 %180, %190
store i64 %191, i64* %8
br label %192
192: ; preds = %179, %175, %171
%193 = load i32, i32* %4
%194 = add nsw i32 %193, 3
%195 = icmp slt i32 %194, 20
br i1 %195, label %196, label %213
196: ; preds = %192
%197 = load i32, i32* %5
%198 = add nsw i32 %197, 3
%199 = icmp slt i32 %198, 20
br i1 %199, label %200, label %213
200: ; preds = %196
%201 = load i64, i64* %8
%202 = load i32, i32* %4
%203 = add nsw i32 %202, 3
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %204
%206 = load i32, i32* %5
%207 = add nsw i32 %206, 3
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds [20 x i32], [20 x i32]* %205, i64 0, i64 %208
%210 = load i32, i32* %209
%211 = sext i32 %210 to i64
%212 = mul nsw i64 %201, %211
store i64 %212, i64* %8
br label %213
213: ; preds = %200, %196, %192
%214 = load i64, i64* %8
%215 = load i64, i64* %2
%216 = icmp sgt i64 %214, %215
br i1 %216, label %217, label %219
217: ; preds = %213
%218 = load i64, i64* %8
store i64 %218, i64* %2
br label %219
219: ; preds = %217, %213
%220 = load i32, i32* %4
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %221
%223 = load i32, i32* %5
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds [20 x i32], [20 x i32]* %222, i64 0, i64 %224
%226 = load i32, i32* %225
%227 = sext i32 %226 to i64
store i64 %227, i64* %9
%228 = load i32, i32* %4
%229 = add nsw i32 %228, 1
%230 = icmp slt i32 %229, 20
br i1 %230, label %231, label %248
231: ; preds = %219
%232 = load i32, i32* %5
%233 = sub nsw i32 %232, 1
%234 = icmp sgt i32 %233, 0
br i1 %234, label %235, label %248
235: ; preds = %231
%236 = load i64, i64* %9
%237 = load i32, i32* %4
%238 = add nsw i32 %237, 1
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %239
%241 = load i32, i32* %5
%242 = sub nsw i32 %241, 1
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds [20 x i32], [20 x i32]* %240, i64 0, i64 %243
%245 = load i32, i32* %244
%246 = sext i32 %245 to i64
%247 = mul nsw i64 %236, %246
store i64 %247, i64* %9
br label %248
248: ; preds = %235, %231, %219
%249 = load i32, i32* %4
%250 = add nsw i32 %249, 2
%251 = icmp slt i32 %250, 20
br i1 %251, label %252, label %269
252: ; preds = %248
%253 = load i32, i32* %5
%254 = sub nsw i32 %253, 2
%255 = icmp sgt i32 %254, 0
br i1 %255, label %256, label %269
256: ; preds = %252
%257 = load i64, i64* %9
%258 = load i32, i32* %4
%259 = add nsw i32 %258, 2
%260 = sext i32 %259 to i64
%261 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %260
%262 = load i32, i32* %5
%263 = sub nsw i32 %262, 2
%264 = sext i32 %263 to i64
%265 = getelementptr inbounds [20 x i32], [20 x i32]* %261, i64 0, i64 %264
%266 = load i32, i32* %265
%267 = sext i32 %266 to i64
%268 = mul nsw i64 %257, %267
store i64 %268, i64* %9
br label %269
269: ; preds = %256, %252, %248
%270 = load i32, i32* %4
%271 = add nsw i32 %270, 3
%272 = icmp slt i32 %271, 20
br i1 %272, label %273, label %290
273: ; preds = %269
%274 = load i32, i32* %5
%275 = sub nsw i32 %274, 3
%276 = icmp sgt i32 %275, 0
br i1 %276, label %277, label %290
277: ; preds = %273
%278 = load i64, i64* %9
%279 = load i32, i32* %4
%280 = add nsw i32 %279, 3
%281 = sext i32 %280 to i64
%282 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %3, i64 0, i64 %281
%283 = load i32, i32* %5
%284 = sub nsw i32 %283, 3
%285 = sext i32 %284 to i64
%286 = getelementptr inbounds [20 x i32], [20 x i32]* %282, i64 0, i64 %285
%287 = load i32, i32* %286
%288 = sext i32 %287 to i64
%289 = mul nsw i64 %278, %288
store i64 %289, i64* %9
br label %290
290: ; preds = %277, %273, %269
%291 = load i64, i64* %9
%292 = load i64, i64* %2
%293 = icmp sgt i64 %291, %292
br i1 %293, label %294, label %296
294: ; preds = %290
%295 = load i64, i64* %9
store i64 %295, i64* %2
br label %296
296: ; preds = %294, %290
br label %297
297: ; preds = %296
%298 = load i32, i32* %5
%299 = add nsw i32 %298, 1
store i32 %299, i32* %5
br label %15
300: ; preds = %15
br label %301
301: ; preds = %300
%302 = load i32, i32* %4
%303 = add nsw i32 %302, 1
store i32 %303, i32* %4
br label %11
304: ; preds = %11
%305 = load i64, i64* %2
%306 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i64 %305)
ret i32 0
}

LLVM IR (-O2):
@__const.main.grid = [20 x [20 x i32]] [[20 x i32] [i32 8, i32 2, i32 22, i32 97, i32 38, i32 15, i32 0, i32 40, i32 0, i32 75, i32 4, i32 5, i32 7, i32 78, i32 52, i32 12, i32 50, i32 77, i32 91, i32 8], [20 x i32] [i32 49, i32 49, i32 99, i32 40, i32 17, i32 81, i32 18, i32 57, i32 60, i32 87, i32 17, i32 40, i32 98, i32 43, i32 69, i32 48, i32 4, i32 56, i32 62, i32 0], [20 x i32] [i32 81, i32 49, i32 31, i32 73, i32 55, i32 79, i32 14, i32 29, i32 93, i32 71, i32 40, i32 67, i32 53, i32 88, i32 30, i32 3, i32 49, i32 13, i32 36, i32 65], [20 x i32] [i32 52, i32 70, i32 95, i32 23, i32 4, i32 60, i32 11, i32 42, i32 69, i32 24, i32 68, i32 56, i32 1, i32 32, i32 56, i32 71, i32 37, i32 2, i32 36, i32 91], [20 x i32] [i32 22, i32 31, i32 16, i32 71, i32 51, i32 67, i32 63, i32 89, i32 41, i32 92, i32 36, i32 54, i32 22, i32 40, i32 40, i32 28, i32 66, i32 33, i32 13, i32 80], [20 x i32] [i32 24, i32 47, i32 32, i32 60, i32 99, i32 3, i32 45, i32 2, i32 44, i32 75, i32 33, i32 53, i32 78, i32 36, i32 84, i32 20, i32 35, i32 17, i32 12, i32 50], [20 x i32] [i32 32, i32 98, i32 81, i32 28, i32 64, i32 23, i32 67, i32 10, i32 26, i32 38, i32 40, i32 67, i32 59, i32 54, i32 70, i32 66, i32 18, i32 38, i32 64, i32 70], [20 x i32] [i32 67, i32 26, i32 20, i32 68, i32 2, i32 62, i32 12, i32 20, i32 95, i32 63, i32 94, i32 39, i32 63, i32 8, i32 40, i32 91, i32 66, i32 49, i32 94, i32 21], [20 x i32] [i32 24, i32 55, i32 58, i32 5, i32 66, i32 73, i32 99, i32 26, i32 97, i32 17, i32 78, i32 78, i32 96, i32 83, i32 14, i32 88, i32 34, i32 89, i32 63, i32 72], [20 x i32] [i32 21, i32 36, i32 23, i32 9, i32 75, i32 0, i32 76, i32 44, i32 20, i32 45, i32 35, i32 14, i32 0, i32 61, i32 33, i32 97, i32 34, i32 31, i32 33, i32 95], [20 x i32] [i32 78, i32 17, i32 53, i32 28, i32 22, i32 75, i32 31, i32 67, i32 15, i32 94, i32 3, i32 80, i32 4, i32 62, i32 16, i32 14, i32 9, i32 53, i32 56, i32 92], [20 x i32] [i32 16, i32 39, i32 5, i32 42, i32 96, i32 35, i32 31, i32 47, i32 55, i32 58, i32 88, i32 24, i32 0, i32 17, i32 54, i32 24, i32 36, i32 29, i32 85, i32 57], [20 x i32] [i32 86, i32 56, i32 0, i32 48, i32 35, i32 71, i32 89, i32 7, i32 5, i32 44, i32 44, i32 37, i32 44, i32 60, i32 21, i32 58, i32 51, i32 54, i32 17, i32 58], [20 x i32] [i32 19, i32 80, i32 81, i32 68, i32 5, i32 94, i32 47, i32 69, i32 28, i32 73, i32 92, i32 13, i32 86, i32 52, i32 17, i32 77, i32 4, i32 89, i32 55, i32 40], [20 x i32] [i32 4, i32 52, i32 8, i32 83, i32 97, i32 35, i32 99, i32 16, i32 7, i32 97, i32 57, i32 32, i32 16, i32 26, i32 26, i32 79, i32 33, i32 27, i32 98, i32 66], [20 x i32] [i32 88, i32 36, i32 68, i32 87, i32 57, i32 62, i32 20, i32 72, i32 3, i32 46, i32 33, i32 67, i32 46, i32 55, i32 12, i32 32, i32 63, i32 93, i32 53, i32 69], [20 x i32] [i32 4, i32 42, i32 16, i32 73, i32 38, i32 25, i32 39, i32 11, i32 24, i32 94, i32 72, i32 18, i32 8, i32 46, i32 29, i32 32, i32 40, i32 62, i32 76, i32 36], [20 x i32] [i32 20, i32 69, i32 36, i32 41, i32 72, i32 30, i32 23, i32 88, i32 34, i32 62, i32 99, i32 69, i32 82, i32 67, i32 59, i32 85, i32 74, i32 4, i32 36, i32 16], [20 x i32] [i32 20, i32 73, i32 35, i32 29, i32 78, i32 31, i32 90, i32 1, i32 74, i32 31, i32 49, i32 71, i32 48, i32 86, i32 81, i32 16, i32 23, i32 57, i32 5, i32 54], [20 x i32] [i32 1, i32 70, i32 54, i32 71, i32 83, i32 51, i32 54, i32 69, i32 16, i32 92, i32 33, i32 48, i32 61, i32 43, i32 52, i32 1, i32 89, i32 19, i32 67, i32 48]]
@.str = [5 x i8] c"%lld\00"
define i32 @main() {
br label %1
1: ; preds = %0, %15
%2 = phi i64 [ 0, %0 ], [ %5, %15 ]
%3 = phi i64 [ 0, %0 ], [ %148, %15 ]
%4 = trunc i64 %2 to i32
%5 = add nuw nsw i64 %2, 1
%6 = icmp ult i64 %2, 19
%7 = add nuw nsw i64 %2, 2
%8 = add nuw nsw i32 %4, 2
%9 = icmp eq i64 %2, 18
%10 = add nuw nsw i64 %2, 3
%11 = add nuw nsw i32 %4, 3
%12 = icmp ult i64 %2, 17
br label %17
13: ; preds = %15
%14 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i64 %148)
ret i32 0
15: ; preds = %144
%16 = icmp eq i64 %5, 20
br i1 %16, label %13, label %1
17: ; preds = %1, %144
%18 = phi i64 [ 0, %1 ], [ %23, %144 ]
%19 = phi i64 [ %3, %1 ], [ %148, %144 ]
%20 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %2, i64 %18
%21 = load i32, i32* %20
%22 = sext i32 %21 to i64
%23 = add nuw nsw i64 %18, 1
%24 = icmp eq i64 %18, 19
br i1 %24, label %32, label %25
25: ; preds = %17
%26 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %2, i64 %23
%27 = load i32, i32* %26
%28 = sext i32 %27 to i64
%29 = mul nsw i64 %28, %22
%30 = add nuw nsw i64 %18, 2
%31 = icmp ult i64 %18, 18
br i1 %31, label %36, label %32
32: ; preds = %17, %25
%33 = phi i64 [ 20, %25 ], [ 21, %17 ]
%34 = phi i64 [ %29, %25 ], [ %22, %17 ]
%35 = add nuw i64 %18, 3
br label %48
36: ; preds = %25
%37 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %2, i64 %30
%38 = load i32, i32* %37
%39 = sext i32 %38 to i64
%40 = mul nsw i64 %29, %39
%41 = add nuw nsw i64 %18, 3
%42 = icmp eq i64 %18, 17
br i1 %42, label %48, label %43
43: ; preds = %36
%44 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %2, i64 %41
%45 = load i32, i32* %44
%46 = sext i32 %45 to i64
%47 = mul nsw i64 %40, %46
br label %48
48: ; preds = %32, %43, %36
%49 = phi i1 [ false, %43 ], [ true, %36 ], [ true, %32 ]
%50 = phi i64 [ %41, %43 ], [ 20, %36 ], [ %35, %32 ]
%51 = phi i64 [ %30, %43 ], [ 19, %36 ], [ %33, %32 ]
%52 = phi i1 [ false, %43 ], [ false, %36 ], [ true, %32 ]
%53 = phi i64 [ %47, %43 ], [ %40, %36 ], [ %34, %32 ]
%54 = icmp sgt i64 %53, %19
%55 = select i1 %54, i64 %53, i64 %19
br i1 %6, label %59, label %56
56: ; preds = %48
%57 = icmp slt i64 %55, %22
%58 = select i1 %57, i64 %22, i64 %55
br label %144
59: ; preds = %48
%60 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %5, i64 %18
%61 = load i32, i32* %60
%62 = sext i32 %61 to i64
%63 = mul nsw i64 %62, %22
br i1 %9, label %74, label %64
64: ; preds = %59
%65 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %7, i64 %18
%66 = load i32, i32* %65
%67 = sext i32 %66 to i64
%68 = mul nsw i64 %63, %67
br i1 %12, label %69, label %74
69: ; preds = %64
%70 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %10, i64 %18
%71 = load i32, i32* %70
%72 = sext i32 %71 to i64
%73 = mul nsw i64 %68, %72
br label %74
74: ; preds = %59, %69, %64
%75 = phi i1 [ true, %69 ], [ false, %64 ], [ false, %59 ]
%76 = phi i32 [ %11, %69 ], [ 20, %64 ], [ 21, %59 ]
%77 = phi i32 [ %8, %69 ], [ 19, %64 ], [ 20, %59 ]
%78 = phi i1 [ true, %69 ], [ true, %64 ], [ false, %59 ]
%79 = phi i64 [ %73, %69 ], [ %68, %64 ], [ %63, %59 ]
%80 = icmp sgt i64 %79, %55
%81 = select i1 %80, i64 %79, i64 %55
br i1 %24, label %87, label %82
82: ; preds = %74
%83 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %5, i64 %23
%84 = load i32, i32* %83
%85 = sext i32 %84 to i64
%86 = mul nsw i64 %85, %22
br label %87
87: ; preds = %74, %82
%88 = phi i64 [ %86, %82 ], [ %22, %74 ]
%89 = xor i1 %78, true
%90 = or i1 %52, %89
br i1 %90, label %97, label %91
91: ; preds = %87
%92 = zext i32 %77 to i64
%93 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %92, i64 %51
%94 = load i32, i32* %93
%95 = sext i32 %94 to i64
%96 = mul nsw i64 %88, %95
br label %97
97: ; preds = %87, %91
%98 = phi i64 [ %96, %91 ], [ %88, %87 ]
%99 = xor i1 %75, true
%100 = or i1 %49, %99
br i1 %100, label %108, label %101
101: ; preds = %97
%102 = zext i32 %76 to i64
%103 = and i64 %50, 4294967295
%104 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %102, i64 %103
%105 = load i32, i32* %104
%106 = sext i32 %105 to i64
%107 = mul nsw i64 %98, %106
br label %108
108: ; preds = %97, %101
%109 = phi i64 [ %107, %101 ], [ %98, %97 ]
%110 = icmp sgt i64 %109, %81
%111 = select i1 %110, i64 %109, i64 %81
%112 = icmp ugt i64 %18, 1
br i1 %112, label %113, label %120
113: ; preds = %108
%114 = add nuw i64 %18, 4294967295
%115 = and i64 %114, 4294967295
%116 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %5, i64 %115
%117 = load i32, i32* %116
%118 = sext i32 %117 to i64
%119 = mul nsw i64 %118, %22
br label %120
120: ; preds = %113, %108
%121 = phi i64 [ %119, %113 ], [ %22, %108 ]
%122 = icmp ugt i64 %18, 2
%123 = select i1 %78, i1 %122, i1 false
br i1 %123, label %124, label %132
124: ; preds = %120
%125 = zext i32 %77 to i64
%126 = add nuw i64 %18, 4294967294
%127 = and i64 %126, 4294967295
%128 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %125, i64 %127
%129 = load i32, i32* %128
%130 = sext i32 %129 to i64
%131 = mul nsw i64 %121, %130
br label %132
132: ; preds = %124, %120
%133 = phi i64 [ %131, %124 ], [ %121, %120 ]
%134 = icmp ugt i64 %18, 3
%135 = select i1 %75, i1 %134, i1 false
br i1 %135, label %136, label %144
136: ; preds = %132
%137 = zext i32 %76 to i64
%138 = add nuw i64 %18, 4294967293
%139 = and i64 %138, 4294967295
%140 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* @__const.main.grid, i64 0, i64 %137, i64 %139
%141 = load i32, i32* %140
%142 = sext i32 %141 to i64
%143 = mul nsw i64 %133, %142
br label %144
144: ; preds = %56, %136, %132
%145 = phi i64 [ %111, %136 ], [ %111, %132 ], [ %58, %56 ]
%146 = phi i64 [ %143, %136 ], [ %133, %132 ], [ %22, %56 ]
%147 = icmp sgt i64 %146, %145
%148 = select i1 %147, i64 %146, i64 %145
%149 = icmp eq i64 %23, 20
br i1 %149, label %15, label %17
}