#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*/ putchar(int);
int /*<<< orphan*/ scanf(char *, char *, char *);
char strlen(char *);
int main() {
  char k, n[21], digits[10] = {}, i, avail = 0, j;
  scanf("%hhd %s", &k, n);
  for (i = 0; i < strlen(n); i++)
    digits[n[i] - 48] = 1;
  for (i = 0; i < 10; i++)
    if (!digits[i])
      avail++;
  if (avail == 1 && !digits[0] || !avail || avail > k) {
    putchar(48);
  } else {
    if (!digits[0])
      for (i = 1; i < 10; i++)
        if (!digits[i]) {
          putchar(i + 48);
          digits[i] = 1;
          avail--;
          k--;
          break;
        }
    for (i = 0; i < 10 && k; i++)
      if (!digits[i]) {
        for (j = 0; j <= k - avail; j++)
          putchar(i + 48);
        k = avail - 1;
        digits[i] = 1;
        break;
      }
    for (i = 0; i < 10 && k; i++)
      if (!digits[i]) {
        putchar(i + 48);
        k--;
      }
  }
  putchar(10);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x2a(%rbp),%rdi
xor    %esi,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
movb   $0x0,-0x2c(%rbp)
lea    -0x20(%rbp),%rdx
lea    0xe92(%rip),%rdi
lea    -0x5(%rbp),%rsi
call   1060 <scanf@plt>
movb   $0x0,-0x2b(%rbp)
movsbl -0x2b(%rbp),%eax
mov    %eax,-0x34(%rbp)
lea    -0x20(%rbp),%rdi
call   1040 <strlen@plt>
mov    %al,%cl
mov    -0x34(%rbp),%eax
movsbl %cl,%ecx
cmp    %ecx,%eax
jge    11bc <main+0x7c>
movsbq -0x2b(%rbp),%rax
movsbl -0x20(%rbp,%rax,1),%eax
sub    $0x30,%eax
cltq
movb   $0x1,-0x2a(%rbp,%rax,1)
mov    -0x2b(%rbp),%al
add    $0x1,%al
mov    %al,-0x2b(%rbp)
jmp    117b <main+0x3b>
movb   $0x0,-0x2b(%rbp)
movsbl -0x2b(%rbp),%eax
cmp    $0xa,%eax
jge    11f7 <main+0xb7>
movsbq -0x2b(%rbp),%rax
cmpb   $0x0,-0x2a(%rbp,%rax,1)
jne    11e5 <main+0xa5>
mov    -0x2c(%rbp),%al
add    $0x1,%al
mov    %al,-0x2c(%rbp)
jmp    11ea <main+0xaa>
mov    -0x2b(%rbp),%al
add    $0x1,%al
mov    %al,-0x2b(%rbp)
jmp    11c0 <main+0x80>
movsbl -0x2c(%rbp),%eax
cmp    $0x1,%eax
jne    120e <main+0xce>
cmpb   $0x0,-0x2a(%rbp)
je     1228 <main+0xe8>
cmpb   $0x0,-0x2c(%rbp)
je     1228 <main+0xe8>
movsbl -0x2c(%rbp),%eax
movsbl -0x5(%rbp),%ecx
cmp    %ecx,%eax
jle    1237 <main+0xf7>
mov    $0x30,%edi
call   1030 <putchar@plt>
jmp    13b3 <main+0x273>
cmpb   $0x0,-0x2a(%rbp)
jne    12a4 <main+0x164>
movb   $0x1,-0x2b(%rbp)
movsbl -0x2b(%rbp),%eax
cmp    $0xa,%eax
jge    129f <main+0x15f>
movsbq -0x2b(%rbp),%rax
cmpb   $0x0,-0x2a(%rbp,%rax,1)
jne    128d <main+0x14d>
movsbl -0x2b(%rbp),%edi
add    $0x30,%edi
call   1030 <putchar@plt>
movsbq -0x2b(%rbp),%rax
movb   $0x1,-0x2a(%rbp,%rax,1)
mov    -0x2c(%rbp),%al
add    $0xff,%al
mov    %al,-0x2c(%rbp)
mov    -0x5(%rbp),%al
add    $0xff,%al
mov    %al,-0x5(%rbp)
jmp    129f <main+0x15f>
jmp    1292 <main+0x152>
mov    -0x2b(%rbp),%al
add    $0x1,%al
mov    %al,-0x2b(%rbp)
jmp    1245 <main+0x105>
jmp    12a4 <main+0x164>
movb   $0x0,-0x2b(%rbp)
movsbl -0x2b(%rbp),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0x35(%rbp)
jge    12c7 <main+0x187>
movsbl -0x5(%rbp),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    12d7 <main+0x197>
jmp    1345 <main+0x205>
movsbq -0x2b(%rbp),%rax
cmpb   $0x0,-0x2a(%rbp,%rax,1)
jne    1333 <main+0x1f3>
movb   $0x0,-0x2d(%rbp)
movsbl -0x2d(%rbp),%eax
movsbl -0x5(%rbp),%ecx
movsbl -0x2c(%rbp),%edx
sub    %edx,%ecx
cmp    %ecx,%eax
jg     131a <main+0x1da>
movsbl -0x2b(%rbp),%edi
add    $0x30,%edi
call   1030 <putchar@plt>
mov    -0x2d(%rbp),%al
add    $0x1,%al
mov    %al,-0x2d(%rbp)
jmp    12eb <main+0x1ab>
movsbl -0x2c(%rbp),%eax
sub    $0x1,%eax
mov    %al,-0x5(%rbp)
movsbq -0x2b(%rbp),%rax
movb   $0x1,-0x2a(%rbp,%rax,1)
jmp    1345 <main+0x205>
jmp    1338 <main+0x1f8>
mov    -0x2b(%rbp),%al
add    $0x1,%al
mov    %al,-0x2b(%rbp)
jmp    12a8 <main+0x168>
movb   $0x0,-0x2b(%rbp)
movsbl -0x2b(%rbp),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0x36(%rbp)
jge    1368 <main+0x228>
movsbl -0x5(%rbp),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x36(%rbp)
mov    -0x36(%rbp),%al
test   $0x1,%al
jne    1378 <main+0x238>
jmp    13ae <main+0x26e>
movsbq -0x2b(%rbp),%rax
cmpb   $0x0,-0x2a(%rbp,%rax,1)
jne    139c <main+0x25c>
movsbl -0x2b(%rbp),%edi
add    $0x30,%edi
call   1030 <putchar@plt>
mov    -0x5(%rbp),%al
add    $0xff,%al
mov    %al,-0x5(%rbp)
jmp    13a1 <main+0x261>
mov    -0x2b(%rbp),%al
add    $0x1,%al
mov    %al,-0x2b(%rbp)
jmp    1349 <main+0x209>
jmp    13b3 <main+0x273>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
movw   $0x0,0x18(%rsp)
movq   $0x0,0x10(%rsp)
lea    0xeab(%rip),%rdi
lea    0xf(%rsp),%rsi
lea    0x20(%rsp),%rbx
mov    %rbx,%rdx
call   1050 <scanf@plt>
mov    %rbx,%rdi
call   1040 <strlen@plt>
test   %al,%al
jle    11dd <main+0xad>
xor    %ebp,%ebp
lea    0x10(%rsp),%r14
lea    0x20(%rsp),%rbx
nop
movsbq 0x20(%rsp,%rbp,1),%rax
movb   $0x1,-0x30(%rax,%r14,1)
add    $0x1,%rbp
mov    %rbx,%rdi
call   1040 <strlen@plt>
movsbq %al,%rax
cmp    %rax,%rbp
jl     1180 <main+0x50>
cmpb   $0x0,0x11(%rsp)
sete   %r15b
cmpb   $0x0,0x12(%rsp)
sete   %dl
cmpb   $0x0,0x13(%rsp)
sete   %r12b
cmpb   $0x0,0x14(%rsp)
mov    0x10(%rsp),%r14b
sete   %r8b
cmpb   $0x0,0x15(%rsp)
sete   %dil
cmpb   $0x0,0x16(%rsp)
sete   %sil
jmp    11f1 <main+0xc1>
mov    $0x1,%sil
xor    %r14d,%r14d
mov    $0x1,%dil
mov    $0x1,%r8b
mov    $0x1,%r12b
mov    $0x1,%dl
mov    $0x1,%r15b
cmp    $0x1,%r14b
mov    %r15d,%r13d
adc    $0x0,%r13b
add    %dl,%r13b
add    %r12b,%r13b
add    %r8b,%r13b
add    %dil,%r13b
add    %sil,%r13b
mov    0x17(%rsp),%bl
cmp    $0x1,%bl
adc    $0x0,%r13b
mov    0x18(%rsp),%cl
cmp    $0x1,%cl
adc    $0x0,%r13b
mov    0x19(%rsp),%r9b
cmp    $0x1,%r9b
adc    $0x0,%r13b
mov    %r13d,%eax
xor    $0x1,%al
or     %r14b,%al
setne  %al
test   %r13b,%r13b
je     135a <main+0x22a>
test   %al,%al
je     135a <main+0x22a>
mov    0xf(%rsp),%al
cmp    %al,%r13b
jg     135a <main+0x22a>
test   %r14b,%r14b
jne    1306 <main+0x1d6>
test   %cl,%cl
sete   %r10b
test   %bl,%bl
sete   %r11b
or     %r15b,%dl
movzbl %r15b,%ecx
mov    $0x2,%ebx
sub    %rcx,%rbx
or     %dl,%r12b
test   %dl,%dl
mov    $0x3,%ecx
cmovne %rbx,%rcx
or     %r12b,%r8b
test   %r12b,%r12b
mov    $0x4,%edx
cmovne %rcx,%rdx
or     %r8b,%dil
test   %r8b,%r8b
mov    $0x5,%ecx
cmovne %rdx,%rcx
or     %dil,%sil
test   %dil,%dil
mov    $0x6,%edx
cmovne %rcx,%rdx
or     %sil,%r11b
test   %sil,%sil
mov    $0x7,%ecx
cmovne %rdx,%rcx
or     %r11b,%r10b
test   $0x1,%r11b
mov    $0x8,%edx
cmovne %rcx,%rdx
mov    $0x9,%ebx
test   $0x1,%r10b
cmovne %rdx,%rbx
jne    12e9 <main+0x1b9>
test   %r9b,%r9b
jne    1306 <main+0x1d6>
mov    %ebx,%edi
or     $0x30,%edi
call   1030 <putchar@plt>
movb   $0x1,0x10(%rsp,%rbx,1)
add    $0xff,%r13b
mov    0xf(%rsp),%al
add    $0xff,%al
mov    %al,0xf(%rsp)
test   %al,%al
je     1364 <main+0x234>
test   %r14b,%r14b
je     137f <main+0x24f>
cmpb   $0x0,0x11(%rsp)
je     1384 <main+0x254>
cmpb   $0x0,0x12(%rsp)
je     138c <main+0x25c>
cmpb   $0x0,0x13(%rsp)
je     1394 <main+0x264>
cmpb   $0x0,0x14(%rsp)
je     139c <main+0x26c>
cmpb   $0x0,0x15(%rsp)
je     13a4 <main+0x274>
cmpb   $0x0,0x16(%rsp)
je     13ac <main+0x27c>
cmpb   $0x0,0x17(%rsp)
je     13b4 <main+0x284>
cmpb   $0x0,0x18(%rsp)
je     13bc <main+0x28c>
cmpb   $0x0,0x19(%rsp)
jne    140c <main+0x2dc>
mov    $0x9,%r14d
jmp    13c2 <main+0x292>
mov    $0x30,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %r14d,%r14d
jmp    13c2 <main+0x292>
mov    $0x1,%r14d
jmp    13c2 <main+0x292>
mov    $0x2,%r14d
jmp    13c2 <main+0x292>
mov    $0x3,%r14d
jmp    13c2 <main+0x292>
mov    $0x4,%r14d
jmp    13c2 <main+0x292>
mov    $0x5,%r14d
jmp    13c2 <main+0x292>
mov    $0x6,%r14d
jmp    13c2 <main+0x292>
mov    $0x7,%r14d
jmp    13c2 <main+0x292>
mov    $0x8,%r14d
cmp    %r13b,%al
jl     13fa <main+0x2ca>
movsbl %r13b,%r15d
lea    0x30(%r14),%ebx
mov    $0x1,%bpl
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %ebx,%edi
call   1030 <putchar@plt>
movsbl %bpl,%eax
movsbl 0xf(%rsp),%ecx
sub    %r15d,%ecx
lea    0x1(%rax),%ebp
cmp    %eax,%ecx
jge    13e0 <main+0x2b0>
add    $0xff,%r13b
mov    %r13b,0xf(%rsp)
movb   $0x1,0x10(%rsp,%r14,1)
mov    %r13d,%eax
test   %al,%al
je     1364 <main+0x234>
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
cmpb   $0x0,0x10(%rsp,%rbx,1)
jne    143a <main+0x30a>
lea    0x30(%rbx),%edi
call   1030 <putchar@plt>
movzbl 0xf(%rsp),%eax
add    $0xff,%al
mov    %al,0xf(%rsp)
cmp    $0x8,%rbx
ja     1364 <main+0x234>
add    $0x1,%rbx
test   %al,%al
jne    1420 <main+0x2f0>
jmp    1364 <main+0x234>

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

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