int main() {
  int mapa[20][20] = {
      {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
      {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
      {1, 0, 0, 0, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 1},
      {1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1},
      {1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 1},
      {1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1},
      {1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 1},
      {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
      {1, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 3, 3, 3, 3, 3, 0, 1},
      {1, 0, 3, 0, 3, 0, 0, 3, 3, 0, 3, 3, 0, 3, 0, 0, 0, 3, 0, 1},
      {1, 3, 3, 3, 3, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 3, 0, 1},
      {1, 3, 0, 0, 0, 3, 0, 3, 0, 0, 0, 3, 0, 3, 0, 0, 0, 3, 0, 1},
      {1, 3, 0, 0, 0, 3, 0, 3, 0, 0, 0, 3, 0, 3, 3, 3, 3, 3, 0, 1},
      {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
      {1, 0, 3, 0, 0, 0, 3, 3, 3, 3, 0, 3, 3, 3, 3, 0, 0, 3, 0, 1},
      {1, 0, 3, 0, 0, 0, 3, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 0, 3, 1},
      {1, 0, 3, 0, 0, 0, 3, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 3, 3, 1},
      {1, 0, 3, 0, 0, 0, 3, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 0, 3, 1},
      {1, 0, 3, 3, 3, 0, 3, 3, 3, 3, 0, 3, 3, 3, 3, 0, 3, 0, 3, 1},
      {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
  };
  int i, j, x, fp, cp;
  char tecla;
  printf("\n\t\t   LABERINTO");
  fp = 1;
  cp = 1;
  mapa[fp][cp] = 10;
  tecla = 0;
  for (i = 0; i < 20; i++) {
    printf("\n\t\t");
    for (j = 0; j < 20; j++) {
      if (mapa[i][j] == 0) {
        printf(" ");
      }
      if (mapa[i][j] == 1) {
        printf("@");
      }
      if (mapa[i][j] == 10) {
        printf("\1");
      }
      if (mapa[i][j] == 2) {
        printf("%c", 2);
      }
      if (mapa[i][j] == 3) {
        printf("%c", 3);
      }
      if (mapa[i][j] == 4) {
        printf("%c", 4);
      }
      if (mapa[i][j] == 5) {
        printf("%c", 5);
      }
      if (mapa[i][j] == 6) {
        printf("%c", 6);
      }
    }
  }
  while (tecla != 's' || tecla != 'S') {
    tecla = 0;
    tecla = getch();
    mapa[fp][cp] = 0;
    if (tecla == 77) {
      if (mapa[fp][cp + 1] == 0) {
        cp++;
      }
    }
    if (tecla == 75) {
      if (mapa[fp][cp - 1] == 0) {
        cp--;
      }
    }
    if (tecla == 80) {
      if (mapa[fp + 1][cp] == 0) {
        fp++;
      }
    }
    if (tecla == 72) {
      if (mapa[fp - 1][cp] == 0) {
        fp--;
      }
    }
    mapa[fp][cp] = 10;
    system("CLS");
    for (i = 0; i < 20; i++) {
      printf("\n\t\t");
      for (j = 0; j < 20; j++) {
        if (mapa[i][j] == 0) {
          printf(" ");
        }
        if (mapa[i][j] == 1) {
          printf("@");
        }
        if (mapa[i][j] == 10) {
          printf("\1");
        }
        if (mapa[i][j] == 2) {
          printf("%c", 2);
        }
        if (mapa[i][j] == 3) {
          printf("%c", 3);
        }
        if (mapa[i][j] == 4) {
          printf("%c", 4);
        }
        if (mapa[i][j] == 5) {
          printf("%c", 5);
        }
        if (mapa[i][j] == 6) {
          printf("%c", 6);
        }
      }
    }
  }
  system("pause");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x670,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x650(%rbp),%rdi
lea    0xea0(%rip),%rsi
mov    $0x640,%edx
call   1050 <memcpy@plt>
lea    0x14cf(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x660(%rbp)
movl   $0x1,-0x664(%rbp)
movslq -0x660(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x664(%rbp),%rcx
movl   $0xa,(%rax,%rcx,4)
movb   $0x0,-0x665(%rbp)
movl   $0x0,-0x654(%rbp)
cmpl   $0x14,-0x654(%rbp)
jge    13dd <main+0x29d>
lea    0x147c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x658(%rbp)
cmpl   $0x14,-0x658(%rbp)
jge    13c4 <main+0x284>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    1226 <main+0xe6>
lea    0x1435(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    125a <main+0x11a>
lea    0x1403(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0xa,(%rax,%rcx,4)
jne    128e <main+0x14e>
lea    0x13d1(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x2,(%rax,%rcx,4)
jne    12c7 <main+0x187>
lea    0x139f(%rip),%rdi
mov    $0x2,%esi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x3,(%rax,%rcx,4)
jne    1300 <main+0x1c0>
lea    0x1366(%rip),%rdi
mov    $0x3,%esi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x4,(%rax,%rcx,4)
jne    1339 <main+0x1f9>
lea    0x132d(%rip),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x5,(%rax,%rcx,4)
jne    1372 <main+0x232>
lea    0x12f4(%rip),%rdi
mov    $0x5,%esi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x6,(%rax,%rcx,4)
jne    13ab <main+0x26b>
lea    0x12bb(%rip),%rdi
mov    $0x6,%esi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    13b0 <main+0x270>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x658(%rbp)
jmp    11e5 <main+0xa5>
jmp    13c9 <main+0x289>
mov    -0x654(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x654(%rbp)
jmp    11c0 <main+0x80>
jmp    13e2 <main+0x2a2>
movsbl -0x665(%rbp),%ecx
mov    $0x1,%al
cmp    $0x73,%ecx
mov    %al,-0x666(%rbp)
jne    140d <main+0x2cd>
movsbl -0x665(%rbp),%eax
cmp    $0x53,%eax
setne  %al
mov    %al,-0x666(%rbp)
mov    -0x666(%rbp),%al
test   $0x1,%al
jne    1420 <main+0x2e0>
jmp    17f0 <main+0x6b0>
movb   $0x0,-0x665(%rbp)
mov    $0x0,%al
call   1060 <getch@plt>
mov    %al,-0x665(%rbp)
movslq -0x660(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x664(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
movsbl -0x665(%rbp),%eax
cmp    $0x4d,%eax
jne    14a6 <main+0x366>
movslq -0x660(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mov    -0x664(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    14a1 <main+0x361>
mov    -0x664(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x664(%rbp)
jmp    14a6 <main+0x366>
movsbl -0x665(%rbp),%eax
cmp    $0x4b,%eax
jne    14f5 <main+0x3b5>
movslq -0x660(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
mov    -0x664(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    14f0 <main+0x3b0>
mov    -0x664(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x664(%rbp)
jmp    14f5 <main+0x3b5>
movsbl -0x665(%rbp),%eax
cmp    $0x50,%eax
jne    1544 <main+0x404>
mov    -0x660(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x664(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    153f <main+0x3ff>
mov    -0x660(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x660(%rbp)
jmp    1544 <main+0x404>
movsbl -0x665(%rbp),%eax
cmp    $0x48,%eax
jne    1593 <main+0x453>
mov    -0x660(%rbp),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x664(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    158e <main+0x44e>
mov    -0x660(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x660(%rbp)
jmp    1593 <main+0x453>
movslq -0x660(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x664(%rbp),%rcx
movl   $0xa,(%rax,%rcx,4)
lea    0x10a0(%rip),%rdi
mov    $0x0,%al
call   1030 <system@plt>
movl   $0x0,-0x654(%rbp)
cmpl   $0x14,-0x654(%rbp)
jge    17eb <main+0x6ab>
lea    0x106e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x658(%rbp)
cmpl   $0x14,-0x658(%rbp)
jge    17d2 <main+0x692>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    1634 <main+0x4f4>
lea    0x1027(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    1668 <main+0x528>
lea    0xff5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0xa,(%rax,%rcx,4)
jne    169c <main+0x55c>
lea    0xfc3(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x2,(%rax,%rcx,4)
jne    16d5 <main+0x595>
lea    0xf91(%rip),%rdi
mov    $0x2,%esi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x3,(%rax,%rcx,4)
jne    170e <main+0x5ce>
lea    0xf58(%rip),%rdi
mov    $0x3,%esi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x4,(%rax,%rcx,4)
jne    1747 <main+0x607>
lea    0xf1f(%rip),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x5,(%rax,%rcx,4)
jne    1780 <main+0x640>
lea    0xee6(%rip),%rdi
mov    $0x5,%esi
mov    $0x0,%al
call   1040 <printf@plt>
movslq -0x654(%rbp),%rcx
lea    -0x650(%rbp),%rax
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x658(%rbp),%rcx
cmpl   $0x6,(%rax,%rcx,4)
jne    17b9 <main+0x679>
lea    0xead(%rip),%rdi
mov    $0x6,%esi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    17be <main+0x67e>
mov    -0x658(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x658(%rbp)
jmp    15f3 <main+0x4b3>
jmp    17d7 <main+0x697>
mov    -0x654(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x654(%rbp)
jmp    15ce <main+0x48e>
jmp    13e2 <main+0x2a2>
lea    0xe6a(%rip),%rdi
mov    $0x0,%al
call   1030 <system@plt>
xor    %eax,%eax
add    $0x670,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x658,%rsp
lea    0xec8(%rip),%rsi
lea    0x10(%rsp),%r15
mov    $0x640,%edx
mov    %r15,%rdi
call   1060 <memcpy@plt>
lea    0x151b(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
movl   $0xa,0x64(%rsp)
lea    0x1515(%rip),%r14
mov    $0x47f,%r13d
lea    0x14cc(%rip),%rbx
xor    %r12d,%r12d
jmp    11be <main+0x6e>
nopl   0x0(%rax)
add    $0x1,%r12
add    $0x50,%r15
cmp    $0x14,%r12
je     11f4 <main+0xa4>
mov    %r14,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
xor    %ebp,%ebp
jmp    11da <main+0x8a>
nopl   0x0(%rax)
add    $0x1,%rbp
cmp    $0x14,%rbp
je     11b0 <main+0x60>
movslq (%r15,%rbp,4),%rax
cmp    $0xa,%rax
ja     11d0 <main+0x80>
bt     %eax,%r13d
jae    11d0 <main+0x80>
mov    (%rbx,%rax,4),%edi
call   1030 <putchar@plt>
jmp    11d0 <main+0x80>
mov    $0x1,%r14d
lea    0x14ab(%rip),%r15
mov    $0x47f,%ebp
mov    $0x1,%r12d
jmp    121a <main+0xca>
xchg   %ax,%ax
mov    0x8(%rsp),%r14
mov    0x4(%rsp),%r12d
xor    %eax,%eax
call   1070 <getch@plt>
movslq %r14d,%rdx
movslq %r12d,%rcx
lea    (%rdx,%rdx,4),%rdx
shl    $0x4,%rdx
add    %rsp,%rdx
add    $0x10,%rdx
movl   $0x0,(%rdx,%rcx,4)
add    $0xb8,%al
cmp    $0x8,%al
ja     12a0 <main+0x150>
movzbl %al,%eax
lea    0xdb3(%rip),%rsi
movslq (%rsi,%rax,4),%rax
add    %rsi,%rax
jmp    *%rax
lea    -0x1(%r14),%eax
jmp    1284 <main+0x134>
nopl   0x0(%rax)
lea    -0x1(%rcx),%r12d
cmpl   $0x0,-0x4(%rdx,%rcx,4)
cmovne %ecx,%r12d
jmp    12a0 <main+0x150>
nop
lea    0x1(%rcx),%r12d
cmpl   $0x0,0x4(%rdx,%rcx,4)
cmovne %ecx,%r12d
jmp    12a0 <main+0x150>
nop
lea    0x1(%r14),%eax
cltq
lea    (%rax,%rax,4),%rdx
shl    $0x4,%rdx
add    %rsp,%rdx
add    $0x10,%rdx
cmpl   $0x0,(%rdx,%rcx,4)
cmovne %r14d,%eax
mov    %eax,%r14d
mov    %r14,0x8(%rsp)
movslq %r14d,%rax
mov    %r12d,0x4(%rsp)
movslq %r12d,%rcx
lea    (%rax,%rax,4),%rax
shl    $0x4,%rax
add    %rsp,%rax
add    $0x10,%rax
movl   $0xa,(%rax,%rcx,4)
lea    0x13e3(%rip),%rdi
xor    %eax,%eax
call   1040 <system@plt>
lea    0x10(%rsp),%r14
xor    %r13d,%r13d
jmp    12f2 <main+0x1a2>
xchg   %ax,%ax
add    $0x1,%r13
add    $0x50,%r14
cmp    $0x14,%r13
je     1210 <main+0xc0>
mov    %r15,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
xor    %r12d,%r12d
jmp    131a <main+0x1ca>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%r12
cmp    $0x14,%r12
je     12e0 <main+0x190>
movslq (%r14,%r12,4),%rax
cmp    $0xa,%rax
ja     1310 <main+0x1c0>
bt     %eax,%ebp
jae    1310 <main+0x1c0>
mov    (%rbx,%rax,4),%edi
call   1030 <putchar@plt>
jmp    1310 <main+0x1c0>

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

LLVM IR (-O2):
@__const.main.mapa = [20 x [20 x i32]] [[20 x i32] [i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1], [20 x i32] [i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1], [20 x i32] [i32 1, i32 0, i32 0, i32 0, i32 3, i32 3, i32 3, i32 3, i32 3, i32 0, i32 3, i32 3, i32 3, i32 3, i32 3, i32 0, i32 0, i32 0, i32 0, i32 1], [20 x i32] [i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1], [20 x i32] [i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 3, i32 3, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1], [20 x i32] [i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1], [20 x i32] [i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 3, i32 3, i32 3, i32 3, i32 0, i32 0, i32 0, i32 0, i32 1], [20 x i32] [i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1], [20 x i32] [i32 1, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 3, i32 3, i32 3, i32 3, i32 3, i32 0, i32 1], [20 x i32] [i32 1, i32 0, i32 3, i32 0, i32 3, i32 0, i32 0, i32 3, i32 3, i32 0, i32 3, i32 3, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 1], [20 x i32] [i32 1, i32 3, i32 3, i32 3, i32 3, i32 3, i32 0, i32 3, i32 0, i32 3, i32 0, i32 3, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 1], [20 x i32] [i32 1, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 1], [20 x i32] [i32 1, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 3, i32 3, i32 3, i32 3, i32 3, i32 0, i32 1], [20 x i32] [i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1], [20 x i32] [i32 1, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 3, i32 3, i32 3, i32 0, i32 3, i32 3, i32 3, i32 3, i32 0, i32 0, i32 3, i32 0, i32 1], [20 x i32] [i32 1, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 3, i32 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 3, i32 1], [20 x i32] [i32 1, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 3, i32 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 3, i32 3, i32 3, i32 1], [20 x i32] [i32 1, i32 0, i32 3, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 3, i32 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 3, i32 1], [20 x i32] [i32 1, i32 0, i32 3, i32 3, i32 3, i32 0, i32 3, i32 3, i32 3, i32 3, i32 0, i32 3, i32 3, i32 3, i32 3, i32 0, i32 3, i32 0, i32 3, i32 1], [20 x i32] [i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1]]
@.str = [16 x i8] c"\0A\09\09 LABERINTO\00"
@.str.1 = [4 x i8] c"\0A\09\09\00"
@.str.6 = [4 x i8] c"CLS\00"
@switch.table.main.8 = [11 x i32] [i32 32, i32 64, i32 2, i32 3, i32 4, i32 5, i32 6, i32 32, i32 32, i32 32, i32 1]
define i32 @main() {
%1 = alloca [20 x [20 x i32]]
%2 = bitcast [20 x [20 x i32]]* %1 to i8*
%3 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str, i64 0, i64 0))
%4 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %1, i64 0, i64 1, i64 1
store i32 10, i32* %4
br label %5
5: ; preds = %0, %26
%6 = phi i64 [ 0, %0 ], [ %27, %26 ]
%7 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %8
8: ; preds = %5, %23
%9 = phi i64 [ 0, %5 ], [ %24, %23 ]
%10 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %1, i64 0, i64 %6, i64 %9
%11 = load i32, i32* %10
%12 = icmp ult i32 %11, 11
br i1 %12, label %13, label %23
13: ; preds = %8
%14 = trunc i32 %11 to i16
%15 = lshr i16 1151, %14
%16 = and i16 %15, 1
%17 = icmp eq i16 %16, 0
br i1 %17, label %23, label %18
18: ; preds = %13
%19 = sext i32 %11 to i64
%20 = getelementptr inbounds [11 x i32], [11 x i32]* @switch.table.main.8, i64 0, i64 %19
%21 = load i32, i32* %20
%22 = tail call i32 @putchar(i32 %21)
br label %23
23: ; preds = %13, %8, %18
%24 = add nuw nsw i64 %9, 1
%25 = icmp eq i64 %24, 20
br i1 %25, label %26, label %8
26: ; preds = %23
%27 = add nuw nsw i64 %6, 1
%28 = icmp eq i64 %27, 20
br i1 %28, label %29, label %5
29: ; preds = %93, %26
%30 = phi i32 [ 1, %26 ], [ %67, %93 ]
%31 = phi i32 [ 1, %26 ], [ %66, %93 ]
%32 = tail call i32 (...) @getch()
%33 = sext i32 %30 to i64
%34 = sext i32 %31 to i64
%35 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %1, i64 0, i64 %33, i64 %34
store i32 0, i32* %35
%36 = trunc i32 %32 to i8
switch i8 %36, label %65 [
i8 77, label %37
i8 75, label %44
i8 80, label %51
i8 72, label %58
]
37: ; preds = %29
%38 = add nsw i32 %31, 1
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %1, i64 0, i64 %33, i64 %39
%41 = load i32, i32* %40
%42 = icmp eq i32 %41, 0
%43 = select i1 %42, i32 %38, i32 %31
br label %65
44: ; preds = %29
%45 = add nsw i32 %31, -1
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %1, i64 0, i64 %33, i64 %46
%48 = load i32, i32* %47
%49 = icmp eq i32 %48, 0
%50 = select i1 %49, i32 %45, i32 %31
br label %65
51: ; preds = %29
%52 = add nsw i32 %30, 1
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %1, i64 0, i64 %53, i64 %34
%55 = load i32, i32* %54
%56 = icmp eq i32 %55, 0
%57 = select i1 %56, i32 %52, i32 %30
br label %65
58: ; preds = %29
%59 = add nsw i32 %30, -1
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %1, i64 0, i64 %60, i64 %34
%62 = load i32, i32* %61
%63 = icmp eq i32 %62, 0
%64 = select i1 %63, i32 %59, i32 %30
br label %65
65: ; preds = %29, %44, %37, %51, %58
%66 = phi i32 [ %31, %58 ], [ %31, %51 ], [ %43, %37 ], [ %50, %44 ], [ %31, %29 ]
%67 = phi i32 [ %64, %58 ], [ %57, %51 ], [ %30, %37 ], [ %30, %44 ], [ %30, %29 ]
%68 = sext i32 %67 to i64
%69 = sext i32 %66 to i64
%70 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %1, i64 0, i64 %68, i64 %69
store i32 10, i32* %70
%71 = tail call i32 (i8*, ...) bitcast (i32 (...)* @system to i32 (i8*, ...)*)(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
br label %72
72: ; preds = %65, %93
%73 = phi i64 [ 0, %65 ], [ %94, %93 ]
%74 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %75
75: ; preds = %72, %90
%76 = phi i64 [ 0, %72 ], [ %91, %90 ]
%77 = getelementptr inbounds [20 x [20 x i32]], [20 x [20 x i32]]* %1, i64 0, i64 %73, i64 %76
%78 = load i32, i32* %77
%79 = icmp ult i32 %78, 11
br i1 %79, label %80, label %90
80: ; preds = %75
%81 = trunc i32 %78 to i16
%82 = lshr i16 1151, %81
%83 = and i16 %82, 1
%84 = icmp eq i16 %83, 0
br i1 %84, label %90, label %85
85: ; preds = %80
%86 = sext i32 %78 to i64
%87 = getelementptr inbounds [11 x i32], [11 x i32]* @switch.table.main.8, i64 0, i64 %86
%88 = load i32, i32* %87
%89 = tail call i32 @putchar(i32 %88)
br label %90
90: ; preds = %80, %75, %85
%91 = add nuw nsw i64 %76, 1
%92 = icmp eq i64 %91, 20
br i1 %92, label %93, label %75
93: ; preds = %90
%94 = add nuw nsw i64 %73, 1
%95 = icmp eq i64 %94, 20
br i1 %95, label %29, label %72
}