#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*/ next_generation(int *, int *, int);
int /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ scanf(char *, int *);
int main() {
  int current[21];
  int next[21];
  int length;
  scanf("%d", &length);
  int i, j, i1, j1;
  for (i = 0; i < length; i++) {
    scanf("%d", &current[i]);
  }
  for (i1 = 0; i1 < length; i1++) {
    if (current[i1] == 1) {
      printf("* ");
    } else {
      printf(". ");
    }
  }
  printf("\n");
  for (i = 0; i < 1000; i++) {
    next_generation(current, next, length);
    for (j = 0; j < length; j++) {
      current[j] = next[j];
      next[j] = 0;
    }
    for (i1 = 0; i1 < length; i1++) {
      if (current[i1] == 1) {
        printf("* ");
      } else {
        printf(". ");
      }
    }
    printf("\n");
    int number = 0;
    for (j1 = 0; j1 < length; j1++) {
      if (current[j1] == 1) {
        number++;
      }
    }
    if (number == 0) {
      break;
    }
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeb7(%rip),%rdi
lea    -0xc4(%rbp),%rsi
call   1050 <scanf@plt>
movl   $0x0,-0xc8(%rbp)
mov    -0xc8(%rbp),%eax
cmp    -0xc4(%rbp),%eax
jge    11a3 <main+0x73>
movslq -0xc8(%rbp),%rax
lea    -0x60(%rbp),%rsi
shl    $0x2,%rax
add    %rax,%rsi
lea    0xe76(%rip),%rdi
call   1050 <scanf@plt>
mov    -0xc8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc8(%rbp)
jmp    115f <main+0x2f>
movl   $0x0,-0xd0(%rbp)
mov    -0xd0(%rbp),%eax
cmp    -0xc4(%rbp),%eax
jge    1207 <main+0xd7>
movslq -0xd0(%rbp),%rax
cmpl   $0x1,-0x60(%rbp,%rax,4)
jne    11e2 <main+0xb2>
lea    0xe2b(%rip),%rdi
call   1040 <printf@plt>
jmp    11ee <main+0xbe>
lea    0xe1d(%rip),%rdi
call   1040 <printf@plt>
jmp    11f3 <main+0xc3>
mov    -0xd0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd0(%rbp)
jmp    11ad <main+0x7d>
lea    0xdfb(%rip),%rdi
call   1040 <printf@plt>
movl   $0x0,-0xc8(%rbp)
cmpl   $0x3e8,-0xc8(%rbp)
jge    1399 <main+0x269>
lea    -0x60(%rbp),%rdi
lea    -0xc0(%rbp),%rsi
mov    -0xc4(%rbp),%edx
call   1030 <next_generation@plt>
movl   $0x0,-0xcc(%rbp)
mov    -0xcc(%rbp),%eax
cmp    -0xc4(%rbp),%eax
jge    129e <main+0x16e>
movslq -0xcc(%rbp),%rax
mov    -0xc0(%rbp,%rax,4),%ecx
movslq -0xcc(%rbp),%rax
mov    %ecx,-0x60(%rbp,%rax,4)
movslq -0xcc(%rbp),%rax
movl   $0x0,-0xc0(%rbp,%rax,4)
mov    -0xcc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xcc(%rbp)
jmp    124d <main+0x11d>
movl   $0x0,-0xd0(%rbp)
mov    -0xd0(%rbp),%eax
cmp    -0xc4(%rbp),%eax
jge    1302 <main+0x1d2>
movslq -0xd0(%rbp),%rax
cmpl   $0x1,-0x60(%rbp,%rax,4)
jne    12dd <main+0x1ad>
lea    0xd30(%rip),%rdi
call   1040 <printf@plt>
jmp    12e9 <main+0x1b9>
lea    0xd22(%rip),%rdi
call   1040 <printf@plt>
jmp    12ee <main+0x1be>
mov    -0xd0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd0(%rbp)
jmp    12a8 <main+0x178>
lea    0xd00(%rip),%rdi
call   1040 <printf@plt>
movl   $0x0,-0xd8(%rbp)
movl   $0x0,-0xd4(%rbp)
mov    -0xd4(%rbp),%eax
cmp    -0xc4(%rbp),%eax
jge    136e <main+0x23e>
movslq -0xd4(%rbp),%rax
cmpl   $0x1,-0x60(%rbp,%rax,4)
jne    1355 <main+0x225>
mov    -0xd8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd8(%rbp)
jmp    135a <main+0x22a>
mov    -0xd4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd4(%rbp)
jmp    1322 <main+0x1f2>
cmpl   $0x0,-0xd8(%rbp)
jne    1380 <main+0x250>
jmp    1399 <main+0x269>
jmp    1385 <main+0x255>
mov    -0xc8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc8(%rbp)
jmp    121d <main+0xed>
mov    -0x4(%rbp),%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xc8,%rsp
lea    0xeb8(%rip),%rdi
lea    0xc(%rsp),%rsi
call   1060 <scanf@plt>
cmpl   $0x0,0xc(%rsp)
jle    11e2 <main+0xa2>
lea    0x10(%rsp),%rbx
xor    %ebp,%ebp
lea    0xe99(%rip),%r14
nopw   0x0(%rax,%rax,1)
mov    %r14,%rdi
mov    %rbx,%rsi
call   1060 <scanf@plt>
add    $0x1,%rbp
movslq 0xc(%rsp),%rax
add    $0x4,%rbx
cmp    %rax,%rbp
jl     1180 <main+0x40>
test   %eax,%eax
jle    11e2 <main+0xa2>
xor    %ebx,%ebx
lea    0xe69(%rip),%rbp
lea    0xe65(%rip),%r14
jmp    11d3 <main+0x93>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
call   1050 <printf@plt>
add    $0x1,%rbx
movslq 0xc(%rsp),%rax
cmp    %rax,%rbx
jge    11e2 <main+0xa2>
cmpl   $0x1,0x10(%rsp,%rbx,4)
mov    %rbp,%rdi
je     11c0 <main+0x80>
mov    %r14,%rdi
jmp    11c0 <main+0x80>
mov    $0xa,%edi
call   1040 <putchar@plt>
xor    %ebx,%ebx
mov    0xc(%rsp),%edx
lea    0x10(%rsp),%r14
lea    0x70(%rsp),%r12
lea    0xe10(%rip),%r13
lea    0xe0c(%rip),%rbp
nopw   0x0(%rax,%rax,1)
mov    %r14,%rdi
mov    %r12,%rsi
call   1030 <next_generation@plt>
mov    0xc(%rsp),%eax
test   %eax,%eax
jle    1380 <main+0x240>
cmp    $0x8,%eax
jae    1240 <main+0x100>
xor    %ecx,%ecx
jmp    1320 <main+0x1e0>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %eax,%ecx
and    $0xfffffff8,%ecx
lea    -0x8(%rcx),%rsi
mov    %rsi,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
test   %rsi,%rsi
xorps  %xmm4,%xmm4
je     14c0 <main+0x380>
mov    %rdx,%rdi
movabs $0x3ffffffffffffffe,%rsi
ff ff 3f
and    %rsi,%rdi
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa 0x70(%rsp,%rsi,4),%xmm0
movdqa 0x80(%rsp,%rsi,4),%xmm1
movdqa 0x90(%rsp,%rsi,4),%xmm2
movdqa 0xa0(%rsp,%rsi,4),%xmm3
movdqa %xmm0,0x10(%rsp,%rsi,4)
movdqa %xmm1,0x20(%rsp,%rsi,4)
movaps %xmm4,0x70(%rsp,%rsi,4)
movaps %xmm4,0x80(%rsp,%rsi,4)
movdqa %xmm2,0x30(%rsp,%rsi,4)
movdqa %xmm3,0x40(%rsp,%rsi,4)
movaps %xmm4,0x90(%rsp,%rsi,4)
movaps %xmm4,0xa0(%rsp,%rsi,4)
add    $0x10,%rsi
add    $0xfffffffffffffffe,%rdi
jne    1280 <main+0x140>
test   $0x1,%dl
je     130d <main+0x1cd>
movdqa 0x70(%rsp,%rsi,4),%xmm0
movdqa 0x80(%rsp,%rsi,4),%xmm1
movdqa %xmm0,0x10(%rsp,%rsi,4)
movdqa %xmm1,0x20(%rsp,%rsi,4)
movaps %xmm4,0x70(%rsp,%rsi,4)
movaps %xmm4,0x80(%rsp,%rsi,4)
cmp    %rax,%rcx
je     1339 <main+0x1f9>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x70(%rsp,%rcx,4),%edx
mov    %edx,0x10(%rsp,%rcx,4)
movl   $0x0,0x70(%rsp,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1320 <main+0x1e0>
test   %eax,%eax
jle    1380 <main+0x240>
xor    %r15d,%r15d
jmp    1363 <main+0x223>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
call   1050 <printf@plt>
add    $0x1,%r15
movslq 0xc(%rsp),%rax
cmp    %rax,%r15
jge    1380 <main+0x240>
cmpl   $0x1,0x10(%rsp,%r15,4)
mov    %r13,%rdi
je     1350 <main+0x210>
mov    %rbp,%rdi
jmp    1350 <main+0x210>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    $0xa,%edi
call   1040 <putchar@plt>
mov    0xc(%rsp),%edx
test   %edx,%edx
jle    14d0 <main+0x390>
cmp    $0x8,%edx
movdqa 0xc5f(%rip),%xmm3
jae    13b0 <main+0x270>
xor    %eax,%eax
xor    %ecx,%ecx
jmp    1480 <main+0x340>
nopl   0x0(%rax)
mov    %edx,%eax
and    $0xfffffff8,%eax
lea    -0x8(%rax),%rsi
mov    %rsi,%rcx
shr    $0x3,%rcx
add    $0x1,%rcx
test   %rsi,%rsi
je     14ab <main+0x36b>
mov    %rcx,%rdi
movabs $0x3ffffffffffffffe,%rsi
ff ff 3f
and    %rsi,%rdi
pxor   %xmm0,%xmm0
xor    %esi,%esi
pxor   %xmm1,%xmm1
nopw   0x0(%rax,%rax,1)
movdqa 0x10(%rsp,%rsi,4),%xmm2
pcmpeqd %xmm3,%xmm2
psubd  %xmm2,%xmm0
movdqa 0x20(%rsp,%rsi,4),%xmm2
pcmpeqd %xmm3,%xmm2
psubd  %xmm2,%xmm1
movdqa 0x30(%rsp,%rsi,4),%xmm2
pcmpeqd %xmm3,%xmm2
psubd  %xmm2,%xmm0
movdqa 0x40(%rsp,%rsi,4),%xmm2
pcmpeqd %xmm3,%xmm2
psubd  %xmm2,%xmm1
add    $0x10,%rsi
add    $0xfffffffffffffffe,%rdi
jne    13f0 <main+0x2b0>
test   $0x1,%cl
je     1453 <main+0x313>
movdqa 0x10(%rsp,%rsi,4),%xmm2
pcmpeqd %xmm3,%xmm2
psubd  %xmm2,%xmm0
movdqa 0x20(%rsp,%rsi,4),%xmm2
pcmpeqd %xmm3,%xmm2
psubd  %xmm2,%xmm1
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%ecx
cmp    %rdx,%rax
je     1496 <main+0x356>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %esi,%esi
cmpl   $0x1,0x10(%rsp,%rax,4)
sete   %sil
add    %esi,%ecx
add    $0x1,%rax
cmp    %rax,%rdx
jne    1480 <main+0x340>
test   %ecx,%ecx
je     14d0 <main+0x390>
add    $0x1,%ebx
cmp    $0x3e8,%ebx
jne    1210 <main+0xd0>
jmp    14d0 <main+0x390>
pxor   %xmm0,%xmm0
xor    %esi,%esi
pxor   %xmm1,%xmm1
test   $0x1,%cl
jne    1437 <main+0x2f7>
jmp    1453 <main+0x313>
xor    %esi,%esi
test   $0x1,%dl
jne    12e5 <main+0x1a5>
jmp    130d <main+0x1cd>
xor    %eax,%eax
add    $0xc8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [3 x i8] c"%d\00"
@.str.1 = [3 x i8] c"* \00"
@.str.2 = [3 x i8] c". \00"
@.str.3 = [2 x i8] c"\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [21 x i32]
%3 = alloca [21 x i32]
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
store i32 0, i32* %1
%10 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %4)
store i32 0, i32* %5
br label %11
11: ; preds = %20, %0
%12 = load i32, i32* %5
%13 = load i32, i32* %4
%14 = icmp slt i32 %12, %13
br i1 %14, label %15, label %23
15: ; preds = %11
%16 = load i32, i32* %5
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds [21 x i32], [21 x i32]* %2, i64 0, i64 %17
%19 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %18)
br label %20
20: ; preds = %15
%21 = load i32, i32* %5
%22 = add nsw i32 %21, 1
store i32 %22, i32* %5
br label %11
23: ; preds = %11
store i32 0, i32* %7
br label %24
24: ; preds = %39, %23
%25 = load i32, i32* %7
%26 = load i32, i32* %4
%27 = icmp slt i32 %25, %26
br i1 %27, label %28, label %42
28: ; preds = %24
%29 = load i32, i32* %7
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds [21 x i32], [21 x i32]* %2, i64 0, i64 %30
%32 = load i32, i32* %31
%33 = icmp eq i32 %32, 1
br i1 %33, label %34, label %36
34: ; preds = %28
%35 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
br label %38
36: ; preds = %28
%37 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
br label %38
38: ; preds = %36, %34
br label %39
39: ; preds = %38
%40 = load i32, i32* %7
%41 = add nsw i32 %40, 1
store i32 %41, i32* %7
br label %24
42: ; preds = %24
%43 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %5
br label %44
44: ; preds = %113, %42
%45 = load i32, i32* %5
%46 = icmp slt i32 %45, 1000
br i1 %46, label %47, label %116
47: ; preds = %44
%48 = getelementptr inbounds [21 x i32], [21 x i32]* %2, i64 0, i64 0
%49 = getelementptr inbounds [21 x i32], [21 x i32]* %3, i64 0, i64 0
%50 = load i32, i32* %4
%51 = call i32 @next_generation(i32* %48, i32* %49, i32 %50)
store i32 0, i32* %6
br label %52
52: ; preds = %67, %47
%53 = load i32, i32* %6
%54 = load i32, i32* %4
%55 = icmp slt i32 %53, %54
br i1 %55, label %56, label %70
56: ; preds = %52
%57 = load i32, i32* %6
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds [21 x i32], [21 x i32]* %3, i64 0, i64 %58
%60 = load i32, i32* %59
%61 = load i32, i32* %6
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds [21 x i32], [21 x i32]* %2, i64 0, i64 %62
store i32 %60, i32* %63
%64 = load i32, i32* %6
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds [21 x i32], [21 x i32]* %3, i64 0, i64 %65
store i32 0, i32* %66
br label %67
67: ; preds = %56
%68 = load i32, i32* %6
%69 = add nsw i32 %68, 1
store i32 %69, i32* %6
br label %52
70: ; preds = %52
store i32 0, i32* %7
br label %71
71: ; preds = %86, %70
%72 = load i32, i32* %7
%73 = load i32, i32* %4
%74 = icmp slt i32 %72, %73
br i1 %74, label %75, label %89
75: ; preds = %71
%76 = load i32, i32* %7
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [21 x i32], [21 x i32]* %2, i64 0, i64 %77
%79 = load i32, i32* %78
%80 = icmp eq i32 %79, 1
br i1 %80, label %81, label %83
81: ; preds = %75
%82 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0))
br label %85
83: ; preds = %75
%84 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
br label %85
85: ; preds = %83, %81
br label %86
86: ; preds = %85
%87 = load i32, i32* %7
%88 = add nsw i32 %87, 1
store i32 %88, i32* %7
br label %71
89: ; preds = %71
%90 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %9
store i32 0, i32* %8
br label %91
91: ; preds = %105, %89
%92 = load i32, i32* %8
%93 = load i32, i32* %4
%94 = icmp slt i32 %92, %93
br i1 %94, label %95, label %108
95: ; preds = %91
%96 = load i32, i32* %8
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds [21 x i32], [21 x i32]* %2, i64 0, i64 %97
%99 = load i32, i32* %98
%100 = icmp eq i32 %99, 1
br i1 %100, label %101, label %104
101: ; preds = %95
%102 = load i32, i32* %9
%103 = add nsw i32 %102, 1
store i32 %103, i32* %9
br label %104
104: ; preds = %101, %95
br label %105
105: ; preds = %104
%106 = load i32, i32* %8
%107 = add nsw i32 %106, 1
store i32 %107, i32* %8
br label %91
108: ; preds = %91
%109 = load i32, i32* %9
%110 = icmp eq i32 %109, 0
br i1 %110, label %111, label %112
111: ; preds = %108
br label %116
112: ; preds = %108
br label %113
113: ; preds = %112
%114 = load i32, i32* %5
%115 = add nsw i32 %114, 1
store i32 %115, i32* %5
br label %44
116: ; preds = %111, %44
%117 = load i32, i32* %1
ret i32 %117
}

LLVM IR (-O2):
@.str = [3 x i8] c"%d\00"
@.str.1 = [3 x i8] c"* \00"
@.str.2 = [3 x i8] c". \00"
define i32 @main() {
%1 = alloca [21 x i32]
%2 = alloca [21 x i32]
%3 = alloca i32
%4 = bitcast [21 x i32]* %1 to i8*
%5 = bitcast [21 x i32]* %2 to i8*
%6 = bitcast i32* %3 to i8*
%7 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %3)
%8 = load i32, i32* %3
%9 = icmp sgt i32 %8, 0
br i1 %9, label %12, label %31
10: ; preds = %12
%11 = icmp sgt i32 %17, 0
br i1 %11, label %20, label %31
12: ; preds = %0, %12
%13 = phi i64 [ %16, %12 ], [ 0, %0 ]
%14 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 %13
%15 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %14)
%16 = add nuw nsw i64 %13, 1
%17 = load i32, i32* %3
%18 = sext i32 %17 to i64
%19 = icmp slt i64 %16, %18
br i1 %19, label %12, label %10
20: ; preds = %10, %20
%21 = phi i64 [ %27, %20 ], [ 0, %10 ]
%22 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 %21
%23 = load i32, i32* %22
%24 = icmp eq i32 %23, 1
%25 = select i1 %24, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0)
%26 = call i32 @printf(i8* dereferenceable(1) %25)
%27 = add nuw nsw i64 %21, 1
%28 = load i32, i32* %3
%29 = sext i32 %28 to i64
%30 = icmp slt i64 %27, %29
br i1 %30, label %20, label %31
31: ; preds = %20, %0, %10
%32 = call i32 @putchar(i32 10)
%33 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 0
%34 = getelementptr inbounds [21 x i32], [21 x i32]* %2, i64 0, i64 0
%35 = load i32, i32* %3
br label %36
36: ; preds = %212, %31
%37 = phi i32 [ %35, %31 ], [ %126, %212 ]
%38 = phi i32 [ 0, %31 ], [ %215, %212 ]
%39 = call i32 @next_generation(i32* %33, i32* %34, i32 %37)
%40 = load i32, i32* %3
%41 = icmp sgt i32 %40, 0
br i1 %41, label %42, label %124
42: ; preds = %36
%43 = zext i32 %40 to i64
%44 = icmp ult i32 %40, 8
br i1 %44, label %103, label %45
45: ; preds = %42
%46 = and i64 %43, 4294967288
%47 = add nsw i64 %46, -8
%48 = lshr exact i64 %47, 3
%49 = add nuw nsw i64 %48, 1
%50 = and i64 %49, 1
%51 = icmp eq i64 %47, 0
br i1 %51, label %85, label %52
52: ; preds = %45
%53 = and i64 %49, 4611686018427387902
br label %54
54: ; preds = %54, %52
%55 = phi i64 [ 0, %52 ], [ %82, %54 ]
%56 = phi i64 [ 0, %52 ], [ %83, %54 ]
%57 = getelementptr inbounds [21 x i32], [21 x i32]* %2, i64 0, i64 %55
%58 = bitcast i32* %57 to <4 x i32>*
%59 = load <4 x i32>, <4 x i32>* %58
%60 = getelementptr inbounds i32, i32* %57, i64 4
%61 = bitcast i32* %60 to <4 x i32>*
%62 = load <4 x i32>, <4 x i32>* %61
%63 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 %55
%64 = bitcast i32* %63 to <4 x i32>*
store <4 x i32> %59, <4 x i32>* %64
%65 = getelementptr inbounds i32, i32* %63, i64 4
%66 = bitcast i32* %65 to <4 x i32>*
store <4 x i32> %62, <4 x i32>* %66
%67 = bitcast i32* %57 to <4 x i32>*
store <4 x i32> zeroinitializer, <4 x i32>* %67
%68 = bitcast i32* %60 to <4 x i32>*
store <4 x i32> zeroinitializer, <4 x i32>* %68
%69 = or i64 %55, 8
%70 = getelementptr inbounds [21 x i32], [21 x i32]* %2, i64 0, i64 %69
%71 = bitcast i32* %70 to <4 x i32>*
%72 = load <4 x i32>, <4 x i32>* %71
%73 = getelementptr inbounds i32, i32* %70, i64 4
%74 = bitcast i32* %73 to <4 x i32>*
%75 = load <4 x i32>, <4 x i32>* %74
%76 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 %69
%77 = bitcast i32* %76 to <4 x i32>*
store <4 x i32> %72, <4 x i32>* %77
%78 = getelementptr inbounds i32, i32* %76, i64 4
%79 = bitcast i32* %78 to <4 x i32>*
store <4 x i32> %75, <4 x i32>* %79
%80 = bitcast i32* %70 to <4 x i32>*
store <4 x i32> zeroinitializer, <4 x i32>* %80
%81 = bitcast i32* %73 to <4 x i32>*
store <4 x i32> zeroinitializer, <4 x i32>* %81
%82 = add nuw i64 %55, 16
%83 = add i64 %56, 2
%84 = icmp eq i64 %83, %53
br i1 %84, label %85, label %54
85: ; preds = %54, %45
%86 = phi i64 [ 0, %45 ], [ %82, %54 ]
%87 = icmp eq i64 %50, 0
br i1 %87, label %101, label %88
88: ; preds = %85
%89 = getelementptr inbounds [21 x i32], [21 x i32]* %2, i64 0, i64 %86
%90 = bitcast i32* %89 to <4 x i32>*
%91 = load <4 x i32>, <4 x i32>* %90
%92 = getelementptr inbounds i32, i32* %89, i64 4
%93 = bitcast i32* %92 to <4 x i32>*
%94 = load <4 x i32>, <4 x i32>* %93
%95 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 %86
%96 = bitcast i32* %95 to <4 x i32>*
store <4 x i32> %91, <4 x i32>* %96
%97 = getelementptr inbounds i32, i32* %95, i64 4
%98 = bitcast i32* %97 to <4 x i32>*
store <4 x i32> %94, <4 x i32>* %98
%99 = bitcast i32* %89 to <4 x i32>*
store <4 x i32> zeroinitializer, <4 x i32>* %99
%100 = bitcast i32* %92 to <4 x i32>*
store <4 x i32> zeroinitializer, <4 x i32>* %100
br label %101
101: ; preds = %85, %88
%102 = icmp eq i64 %46, %43
br i1 %102, label %105, label %103
103: ; preds = %42, %101
%104 = phi i64 [ 0, %42 ], [ %46, %101 ]
br label %106
105: ; preds = %106, %101
br i1 %41, label %113, label %124
106: ; preds = %103, %106
%107 = phi i64 [ %111, %106 ], [ %104, %103 ]
%108 = getelementptr inbounds [21 x i32], [21 x i32]* %2, i64 0, i64 %107
%109 = load i32, i32* %108
%110 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 %107
store i32 %109, i32* %110
store i32 0, i32* %108
%111 = add nuw nsw i64 %107, 1
%112 = icmp eq i64 %111, %43
br i1 %112, label %105, label %106
113: ; preds = %105, %113
%114 = phi i64 [ %120, %113 ], [ 0, %105 ]
%115 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 %114
%116 = load i32, i32* %115
%117 = icmp eq i32 %116, 1
%118 = select i1 %117, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0)
%119 = call i32 @printf(i8* dereferenceable(1) %118)
%120 = add nuw nsw i64 %114, 1
%121 = load i32, i32* %3
%122 = sext i32 %121 to i64
%123 = icmp slt i64 %120, %122
br i1 %123, label %113, label %124
124: ; preds = %113, %36, %105
%125 = call i32 @putchar(i32 10)
%126 = load i32, i32* %3
%127 = icmp sgt i32 %126, 0
br i1 %127, label %128, label %218
128: ; preds = %124
%129 = zext i32 %126 to i64
%130 = icmp ult i32 %126, 8
br i1 %130, label %199, label %131
131: ; preds = %128
%132 = and i64 %129, 4294967288
%133 = add nsw i64 %132, -8
%134 = lshr exact i64 %133, 3
%135 = add nuw nsw i64 %134, 1
%136 = and i64 %135, 1
%137 = icmp eq i64 %133, 0
br i1 %137, label %173, label %138
138: ; preds = %131
%139 = and i64 %135, 4611686018427387902
br label %140
140: ; preds = %140, %138
%141 = phi i64 [ 0, %138 ], [ %170, %140 ]
%142 = phi <4 x i32> [ zeroinitializer, %138 ], [ %168, %140 ]
%143 = phi <4 x i32> [ zeroinitializer, %138 ], [ %169, %140 ]
%144 = phi i64 [ 0, %138 ], [ %171, %140 ]
%145 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 %141
%146 = bitcast i32* %145 to <4 x i32>*
%147 = load <4 x i32>, <4 x i32>* %146
%148 = getelementptr inbounds i32, i32* %145, i64 4
%149 = bitcast i32* %148 to <4 x i32>*
%150 = load <4 x i32>, <4 x i32>* %149
%151 = icmp eq <4 x i32> %147, <i32 1, i32 1, i32 1, i32 1>
%152 = icmp eq <4 x i32> %150, <i32 1, i32 1, i32 1, i32 1>
%153 = zext <4 x i1> %151 to <4 x i32>
%154 = zext <4 x i1> %152 to <4 x i32>
%155 = add <4 x i32> %142, %153
%156 = add <4 x i32> %143, %154
%157 = or i64 %141, 8
%158 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 %157
%159 = bitcast i32* %158 to <4 x i32>*
%160 = load <4 x i32>, <4 x i32>* %159
%161 = getelementptr inbounds i32, i32* %158, i64 4
%162 = bitcast i32* %161 to <4 x i32>*
%163 = load <4 x i32>, <4 x i32>* %162
%164 = icmp eq <4 x i32> %160, <i32 1, i32 1, i32 1, i32 1>
%165 = icmp eq <4 x i32> %163, <i32 1, i32 1, i32 1, i32 1>
%166 = zext <4 x i1> %164 to <4 x i32>
%167 = zext <4 x i1> %165 to <4 x i32>
%168 = add <4 x i32> %155, %166
%169 = add <4 x i32> %156, %167
%170 = add nuw i64 %141, 16
%171 = add i64 %144, 2
%172 = icmp eq i64 %171, %139
br i1 %172, label %173, label %140
173: ; preds = %140, %131
%174 = phi <4 x i32> [ undef, %131 ], [ %168, %140 ]
%175 = phi <4 x i32> [ undef, %131 ], [ %169, %140 ]
%176 = phi i64 [ 0, %131 ], [ %170, %140 ]
%177 = phi <4 x i32> [ zeroinitializer, %131 ], [ %168, %140 ]
%178 = phi <4 x i32> [ zeroinitializer, %131 ], [ %169, %140 ]
%179 = icmp eq i64 %136, 0
br i1 %179, label %193, label %180
180: ; preds = %173
%181 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 %176
%182 = bitcast i32* %181 to <4 x i32>*
%183 = load <4 x i32>, <4 x i32>* %182
%184 = getelementptr inbounds i32, i32* %181, i64 4
%185 = bitcast i32* %184 to <4 x i32>*
%186 = load <4 x i32>, <4 x i32>* %185
%187 = icmp eq <4 x i32> %183, <i32 1, i32 1, i32 1, i32 1>
%188 = icmp eq <4 x i32> %186, <i32 1, i32 1, i32 1, i32 1>
%189 = zext <4 x i1> %187 to <4 x i32>
%190 = zext <4 x i1> %188 to <4 x i32>
%191 = add <4 x i32> %177, %189
%192 = add <4 x i32> %178, %190
br label %193
193: ; preds = %173, %180
%194 = phi <4 x i32> [ %174, %173 ], [ %191, %180 ]
%195 = phi <4 x i32> [ %175, %173 ], [ %192, %180 ]
%196 = add <4 x i32> %195, %194
%197 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %196)
%198 = icmp eq i64 %132, %129
br i1 %198, label %212, label %199
199: ; preds = %128, %193
%200 = phi i64 [ 0, %128 ], [ %132, %193 ]
%201 = phi i32 [ 0, %128 ], [ %197, %193 ]
br label %202
202: ; preds = %199, %202
%203 = phi i64 [ %210, %202 ], [ %200, %199 ]
%204 = phi i32 [ %209, %202 ], [ %201, %199 ]
%205 = getelementptr inbounds [21 x i32], [21 x i32]* %1, i64 0, i64 %203
%206 = load i32, i32* %205
%207 = icmp eq i32 %206, 1
%208 = zext i1 %207 to i32
%209 = add nuw nsw i32 %204, %208
%210 = add nuw nsw i64 %203, 1
%211 = icmp eq i64 %210, %129
br i1 %211, label %212, label %202
212: ; preds = %202, %193
%213 = phi i32 [ %197, %193 ], [ %209, %202 ]
%214 = icmp eq i32 %213, 0
%215 = add nuw nsw i32 %38, 1
%216 = icmp eq i32 %215, 1000
%217 = select i1 %214, i1 true, i1 %216
br i1 %217, label %218, label %36
218: ; preds = %124, %212
ret i32 0
}