#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*/ display_separator(int, int);
int /*<<< orphan*/ printf(char *, ...);
void display_sudoku(int nbc, int nbr, int s[nbc][nbr], int sizer, int sizec) {
  int i, j;
  display_separator(nbc, nbr);
  for (i = 0; i < nbc; i++) {
    printf("|");
    for (j = 0; j < nbr; j++) {
      if (j == sizer || j == sizer * 2 || j == sizer * 3) {
        printf("|");
      }
      if (s[i][j] == 0) {
        printf(" . ");
      } else if (s[i][j] > 9) {
        printf(" %d", s[i][j]);
      } else {
        printf(" %d ", s[i][j]);
      }
      if (j == nbc - 1) {
        printf("|");
        printf("\n");
        if ((i == sizer - 1 && sizer % sizec == 0) ||
            (i == (sizer * 2) - 1 && sizer % sizec == 0) ||
            (i == (sizer * 3) - 1 && sizer % sizec == 0) ||
            (i == (sizer * 4) - 1 && sizer % sizec == 0)) {
          display_separator(nbc, nbr);
        } else if (i == sizec - 1 || i == (sizec * 2) - 1 ||
                   i == (sizec * 3) - 1 || i == (sizec * 4) - 1) {
          display_separator(nbc, nbr);
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<display_sudoku>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    -0x8(%rbp),%eax
mov    %rax,-0x28(%rbp)
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
call   1040 <display_separator@plt>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    13c6 <display_sudoku+0x2a6>
lea    0xe9b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    13b3 <display_sudoku+0x293>
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
je     11ab <display_sudoku+0x8b>
mov    -0x20(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
cmp    %ecx,%eax
je     11ab <display_sudoku+0x8b>
mov    -0x20(%rbp),%eax
imul   $0x3,-0x14(%rbp),%ecx
cmp    %ecx,%eax
jne    11b9 <display_sudoku+0x99>
lea    0xe4e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x28(%rbp),%rdx
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    11f1 <display_sudoku+0xd1>
lea    0xe1d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1278 <display_sudoku+0x158>
mov    -0x28(%rbp),%rdx
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
cmpl   $0x9,(%rax,%rcx,4)
jle    1247 <display_sudoku+0x127>
mov    -0x28(%rbp),%rdx
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%esi
lea    0xdcb(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1273 <display_sudoku+0x153>
mov    -0x28(%rbp),%rdx
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%esi
lea    0xd9e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    1278 <display_sudoku+0x158>
mov    -0x20(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    13a0 <display_sudoku+0x280>
lea    0xd70(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xd71(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x1c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    12c6 <display_sudoku+0x1a6>
mov    -0x14(%rbp),%eax
cltd
idivl  -0x18(%rbp)
cmp    $0x0,%edx
je     1330 <display_sudoku+0x210>
mov    -0x1c(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    12ea <display_sudoku+0x1ca>
mov    -0x14(%rbp),%eax
cltd
idivl  -0x18(%rbp)
cmp    $0x0,%edx
je     1330 <display_sudoku+0x210>
mov    -0x1c(%rbp),%eax
imul   $0x3,-0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    130c <display_sudoku+0x1ec>
mov    -0x14(%rbp),%eax
cltd
idivl  -0x18(%rbp)
cmp    $0x0,%edx
je     1330 <display_sudoku+0x210>
mov    -0x1c(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1340 <display_sudoku+0x220>
mov    -0x14(%rbp),%eax
cltd
idivl  -0x18(%rbp)
cmp    $0x0,%edx
jne    1340 <display_sudoku+0x220>
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
call   1040 <display_separator@plt>
jmp    139b <display_sudoku+0x27b>
mov    -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     138b <display_sudoku+0x26b>
mov    -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     138b <display_sudoku+0x26b>
mov    -0x1c(%rbp),%eax
imul   $0x3,-0x18(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     138b <display_sudoku+0x26b>
mov    -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
shl    $0x2,%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1396 <display_sudoku+0x276>
mov    -0x4(%rbp),%edi
mov    -0x8(%rbp),%esi
call   1040 <display_separator@plt>
jmp    139b <display_sudoku+0x27b>
jmp    13a0 <display_sudoku+0x280>
jmp    13a5 <display_sudoku+0x285>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1173 <display_sudoku+0x53>
jmp    13b8 <display_sudoku+0x298>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1152 <display_sudoku+0x32>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<display_sudoku>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %r8,0x18(%rsp)
mov    %rcx,0x10(%rsp)
mov    %rdx,%rbx
mov    %edi,%ebp
mov    %esi,0xc(%rsp)
call   1050 <display_separator@plt>
mov    %rbp,0x20(%rsp)
test   %ebp,%ebp
jle    1377 <display_sudoku+0x247>
mov    0xc(%rsp),%r13d
mov    0x10(%rsp),%rcx
lea    (%rcx,%rcx,1),%eax
mov    %rax,0x80(%rsp)
lea    (%rcx,%rcx,2),%eax
mov    %rax,0x78(%rsp)
mov    0x20(%rsp),%rdx
lea    -0x1(%rdx),%r14d
lea    -0x1(%rcx),%eax
mov    %rax,0x70(%rsp)
lea    -0x1(%rcx,%rcx,1),%eax
mov    %rax,0x68(%rsp)
lea    -0x1(%rcx,%rcx,2),%eax
mov    %rax,0x60(%rsp)
lea    -0x1(,%rcx,4),%eax
mov    %rax,0x58(%rsp)
mov    0x18(%rsp),%rax
lea    -0x1(%rax),%esi
mov    %rsi,0x40(%rsp)
lea    -0x1(%rax,%rax,1),%esi
mov    %rsi,0x38(%rsp)
lea    -0x1(%rax,%rax,2),%esi
mov    %rsi,0x30(%rsp)
lea    -0x1(,%rax,4),%eax
mov    %rax,0x28(%rsp)
mov    %ecx,%r15d
mov    %edx,%eax
mov    %rax,0x50(%rsp)
lea    0x0(,%r13,4),%rax
mov    %rax,0x48(%rsp)
xor    %ebp,%ebp
jmp    1214 <display_sudoku+0xe4>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rbp
add    0x48(%rsp),%rbx
cmp    0x50(%rsp),%rbp
je     1377 <display_sudoku+0x247>
mov    $0x7c,%edi
call   1030 <putchar@plt>
cmpl   $0x0,0xc(%rsp)
jle    1200 <display_sudoku+0xd0>
cmp    0x40(%rsp),%rbp
sete   %sil
cmp    0x38(%rsp),%rbp
sete   %cl
cmp    0x30(%rsp),%rbp
sete   %dl
cmp    0x28(%rsp),%rbp
sete   %al
or     %sil,%cl
or     %dl,%al
or     %cl,%al
mov    %al,0xb(%rsp)
xor    %r12d,%r12d
jmp    1277 <display_sudoku+0x147>
cs nopw 0x0(%rax,%rax,1)
mov    0x20(%rsp),%rdi
mov    0xc(%rsp),%esi
call   1050 <display_separator@plt>
add    $0x1,%r12
cmp    %r12,%r13
je     1200 <display_sudoku+0xd0>
cmp    %r12,%r15
je     128d <display_sudoku+0x15d>
cmp    %r12,0x80(%rsp)
je     128d <display_sudoku+0x15d>
cmp    %r12,0x78(%rsp)
jne    1297 <display_sudoku+0x167>
mov    $0x7c,%edi
call   1030 <putchar@plt>
mov    (%rbx,%r12,4),%esi
test   %esi,%esi
je     12b0 <display_sudoku+0x180>
cmp    $0xa,%esi
jl     12d0 <display_sudoku+0x1a0>
lea    0xd59(%rip),%rdi
jmp    12d7 <display_sudoku+0x1a7>
nopl   (%rax)
lea    0xd49(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmp    %r12,%r14
jne    126e <display_sudoku+0x13e>
jmp    12e3 <display_sudoku+0x1b3>
cs nopw 0x0(%rax,%rax,1)
nop
lea    0xd31(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
cmp    %r12,%r14
jne    126e <display_sudoku+0x13e>
mov    $0x7c,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
cmp    0x70(%rsp),%rbp
jne    1310 <display_sudoku+0x1e0>
mov    0x10(%rsp),%rax
cltd
idivl  0x18(%rsp)
test   %edx,%edx
je     1260 <display_sudoku+0x130>
cmp    0x68(%rsp),%rbp
jne    1329 <display_sudoku+0x1f9>
mov    0x10(%rsp),%rax
cltd
idivl  0x18(%rsp)
test   %edx,%edx
je     1260 <display_sudoku+0x130>
cmp    0x60(%rsp),%rbp
jne    1342 <display_sudoku+0x212>
mov    0x10(%rsp),%rax
cltd
idivl  0x18(%rsp)
test   %edx,%edx
je     1260 <display_sudoku+0x130>
cmp    0x58(%rsp),%rbp
jne    1367 <display_sudoku+0x237>
mov    0x10(%rsp),%rax
cltd
idivl  0x18(%rsp)
test   %edx,%edx
sete   %al
or     0xb(%rsp),%al
jne    1260 <display_sudoku+0x130>
jmp    126e <display_sudoku+0x13e>
cmpb   $0x0,0xb(%rsp)
jne    1260 <display_sudoku+0x130>
jmp    126e <display_sudoku+0x13e>
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str.1 = [4 x i8] c" . \00"
@.str.2 = [4 x i8] c" %d\00"
@.str.3 = [5 x i8] c" %d \00"
define void @display_sudoku(i32 %0, i32 %1, i32* nocapture %2, i32 %3, i32 %4) {
%6 = zext i32 %1 to i64
%7 = tail call i32 @display_separator(i32 %0, i32 %1)
%8 = icmp sgt i32 %0, 0
br i1 %8, label %9, label %107
9: ; preds = %5
%10 = icmp sgt i32 %1, 0
%11 = shl nsw i32 %3, 1
%12 = mul nsw i32 %3, 3
%13 = add nsw i32 %0, -1
%14 = add nsw i32 %3, -1
%15 = add nsw i32 %11, -1
%16 = add nsw i32 %12, -1
%17 = shl nsw i32 %3, 2
%18 = add nsw i32 %17, -1
%19 = add nsw i32 %4, -1
%20 = shl nsw i32 %4, 1
%21 = add nsw i32 %20, -1
%22 = mul nsw i32 %4, 3
%23 = add nsw i32 %22, -1
%24 = shl nsw i32 %4, 2
%25 = add nsw i32 %24, -1
%26 = zext i32 %12 to i64
%27 = zext i32 %11 to i64
%28 = zext i32 %3 to i64
%29 = zext i32 %13 to i64
%30 = zext i32 %25 to i64
%31 = zext i32 %23 to i64
%32 = zext i32 %21 to i64
%33 = zext i32 %14 to i64
%34 = zext i32 %15 to i64
%35 = zext i32 %16 to i64
%36 = zext i32 %18 to i64
%37 = zext i32 %19 to i64
%38 = zext i32 %0 to i64
br label %39
39: ; preds = %9, %104
%40 = phi i64 [ 0, %9 ], [ %105, %104 ]
%41 = tail call i32 @putchar(i32 124)
br i1 %10, label %42, label %104
42: ; preds = %39
%43 = mul nuw nsw i64 %40, %6
%44 = getelementptr inbounds i32, i32* %2, i64 %43
%45 = icmp eq i64 %40, %33
%46 = icmp eq i64 %40, %34
%47 = icmp eq i64 %40, %35
%48 = icmp eq i64 %40, %36
%49 = icmp eq i64 %40, %37
%50 = icmp eq i64 %40, %32
%51 = icmp eq i64 %40, %31
%52 = icmp eq i64 %40, %30
%53 = select i1 %49, i1 true, i1 %50
%54 = select i1 %53, i1 true, i1 %51
%55 = select i1 %54, i1 true, i1 %52
br label %56
56: ; preds = %42, %101
%57 = phi i64 [ 0, %42 ], [ %102, %101 ]
%58 = icmp eq i64 %57, %28
%59 = icmp eq i64 %57, %27
%60 = select i1 %58, i1 true, i1 %59
%61 = icmp eq i64 %57, %26
%62 = select i1 %60, i1 true, i1 %61
br i1 %62, label %63, label %65
63: ; preds = %56
%64 = tail call i32 @putchar(i32 124)
br label %65
65: ; preds = %56, %63
%66 = getelementptr inbounds i32, i32* %44, i64 %57
%67 = load i32, i32* %66
%68 = icmp eq i32 %67, 0
br i1 %68, label %69, label %71
69: ; preds = %65
%70 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %77
71: ; preds = %65
%72 = icmp sgt i32 %67, 9
br i1 %72, label %73, label %75
73: ; preds = %71
%74 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), i32 %67)
br label %77
75: ; preds = %71
%76 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i32 %67)
br label %77
77: ; preds = %73, %75, %69
%78 = icmp eq i64 %57, %29
br i1 %78, label %79, label %101
79: ; preds = %77
%80 = tail call i32 @putchar(i32 124)
%81 = tail call i32 @putchar(i32 10)
br i1 %45, label %82, label %85
82: ; preds = %79
%83 = srem i32 %3, %4
%84 = icmp eq i32 %83, 0
br i1 %84, label %99, label %85
85: ; preds = %82, %79
br i1 %46, label %86, label %89
86: ; preds = %85
%87 = srem i32 %3, %4
%88 = icmp eq i32 %87, 0
br i1 %88, label %99, label %89
89: ; preds = %86, %85
br i1 %47, label %90, label %93
90: ; preds = %89
%91 = srem i32 %3, %4
%92 = icmp eq i32 %91, 0
br i1 %92, label %99, label %93
93: ; preds = %90, %89
br i1 %48, label %94, label %98
94: ; preds = %93
%95 = srem i32 %3, %4
%96 = icmp eq i32 %95, 0
%97 = select i1 %96, i1 true, i1 %55
br i1 %97, label %99, label %101
98: ; preds = %93
br i1 %55, label %99, label %101
99: ; preds = %94, %98, %82, %86, %90
%100 = tail call i32 @display_separator(i32 %0, i32 %1)
br label %101
101: ; preds = %94, %99, %98, %77
%102 = add nuw nsw i64 %57, 1
%103 = icmp eq i64 %102, %6
br i1 %103, label %104, label %56
104: ; preds = %101, %39
%105 = add nuw nsw i64 %40, 1
%106 = icmp eq i64 %105, %38
br i1 %106, label %107, label %39
107: ; preds = %104, %5
ret void
}