#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 */
typedef int /*<<< orphan*/ family;

/* Variables and functions */
unsigned int *calloc(int, int);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, int);
int /*<<< orphan*/ free(unsigned int *);
int /*<<< orphan*/ permute(unsigned int **, char *, int /*<<< orphan*/,
                           scalar_t__, int *);
int /*<<< orphan*/ snprintf(char *, int, char *, int);
int /*<<< orphan*/ stdout;
scalar_t__ strlen(char *);
int main() {
  int i, k, j, len;
  int p[10] = {0};
  char str[10];
  unsigned int *family;
  family = calloc(10, sizeof(family));
  for (i = 1; i < 1000000; i++) {
    k = i;
    snprintf(str, 10, "%d", i);
    while (k > 0) {
      p[k % 10]++;
      k /= 10;
    }
    for (j = 1; j < 10; j++)
      if (p[j] > 0) {
        k = j;
        p[j]--;
        break;
      }
    for (j = 0; j < 10; j++)
      while (p[j] > 0) {
        k = 10 * k + j;
        p[j]--;
      }
    if (k == i) {
      fprintf(stdout, "-%d,", i);
      if (i >= 10) {
        permute(&family, str, 0, strlen(str) - 1, &len);
      }
    }
  }
  fprintf(stdout, "-%d", 1000000);
  free(family);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x40(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1070 <memset@plt>
mov    $0xa,%edi
mov    $0x8,%esi
call   1080 <calloc@plt>
mov    %rax,-0x58(%rbp)
movl   $0x1,-0x8(%rbp)
cmpl   $0xf4240,-0x8(%rbp)
jge    131e <main+0x1ae>
mov    -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
lea    -0x4a(%rbp),%rdi
mov    -0x8(%rbp),%ecx
mov    $0xa,%esi
lea    0xe37(%rip),%rdx
call   1060 <snprintf@plt>
cmpl   $0x0,-0xc(%rbp)
jle    120a <main+0x9a>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
movslq %edx,%rax
mov    -0x40(%rbp,%rax,4),%ecx
add    $0x1,%ecx
mov    %ecx,-0x40(%rbp,%rax,4)
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0xc(%rbp)
jmp    11d4 <main+0x64>
movl   $0x1,-0x10(%rbp)
cmpl   $0xa,-0x10(%rbp)
jge    1257 <main+0xe7>
movslq -0x10(%rbp),%rax
cmpl   $0x0,-0x40(%rbp,%rax,4)
jle    1244 <main+0xd4>
mov    -0x10(%rbp),%eax
mov    %eax,-0xc(%rbp)
movslq -0x10(%rbp),%rax
mov    -0x40(%rbp,%rax,4),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x40(%rbp,%rax,4)
jmp    1257 <main+0xe7>
jmp    1249 <main+0xd9>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1211 <main+0xa1>
movl   $0x0,-0x10(%rbp)
cmpl   $0xa,-0x10(%rbp)
jge    12ad <main+0x13d>
jmp    126d <main+0xfd>
movslq -0x10(%rbp),%rax
cmpl   $0x0,-0x40(%rbp,%rax,4)
jle    129a <main+0x12a>
imul   $0xa,-0xc(%rbp),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0xc(%rbp)
movslq -0x10(%rbp),%rax
mov    -0x40(%rbp,%rax,4),%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x40(%rbp,%rax,4)
jmp    126d <main+0xfd>
jmp    129f <main+0x12f>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    125e <main+0xee>
mov    -0xc(%rbp),%eax
cmp    -0x8(%rbp),%eax
jne    130b <main+0x19b>
mov    0x2d20(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%edx
lea    0xd34(%rip),%rsi
call   1090 <fprintf@plt>
cmpl   $0xa,-0x8(%rbp)
jl     1306 <main+0x196>
lea    -0x4a(%rbp),%rax
mov    %rax,-0x60(%rbp)
lea    -0x4a(%rbp),%rdi
call   1050 <strlen@plt>
mov    -0x60(%rbp),%rsi
mov    %rax,%rcx
sub    $0x1,%rcx
lea    -0x58(%rbp),%rdi
xor    %edx,%edx
lea    -0x14(%rbp),%r8
call   1040 <permute@plt>
jmp    130b <main+0x19b>
jmp    1310 <main+0x1a0>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    11a9 <main+0x39>
mov    0x2cbb(%rip),%rax
mov    (%rax),%edi
lea    0xcd7(%rip),%rsi
mov    $0xf4240,%edx
call   1090 <fprintf@plt>
mov    -0x58(%rbp),%rdi
call   1030 <free@plt>
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
pxor   %xmm0,%xmm0
movdqa %xmm0,0x10(%rsp)
movdqa %xmm0,(%rsp)
movq   $0x0,0x20(%rsp)
mov    $0xa,%edi
mov    $0x8,%esi
call   1070 <calloc@plt>
mov    %rax,0x30(%rsp)
mov    $0x1,%ebx
lea    0xea0(%rip),%r14
lea    0x3e(%rsp),%r15
mov    $0xcccccccd,%r13d
mov    0x2e28(%rip),%rbp
lea    0xe81(%rip),%r12
jmp    11df <main+0x7f>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%ebx
cmp    $0xf4240,%ebx
je     172c <main+0x5cc>
mov    %r15,%rdi
mov    $0xa,%esi
mov    %r14,%rdx
mov    %ebx,%ecx
call   1060 <snprintf@plt>
mov    %ebx,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %eax,%ecx
mov    %eax,%eax
imul   %r13,%rax
shr    $0x23,%rax
lea    (%rax,%rax,1),%edx
lea    (%rdx,%rdx,4),%edx
mov    %ecx,%esi
sub    %edx,%esi
addl   $0x1,(%rsp,%rsi,4)
cmp    $0xa,%ecx
jae    1200 <main+0xa0>
mov    0x4(%rsp),%ecx
mov    $0x1,%edx
test   %ecx,%ecx
jg     12a0 <main+0x140>
mov    0x8(%rsp),%ecx
mov    $0x2,%edx
test   %ecx,%ecx
jg     12a0 <main+0x140>
mov    0xc(%rsp),%ecx
mov    $0x3,%edx
test   %ecx,%ecx
jg     12a0 <main+0x140>
mov    0x10(%rsp),%ecx
mov    $0x4,%edx
test   %ecx,%ecx
jg     12a0 <main+0x140>
mov    0x14(%rsp),%ecx
mov    $0x5,%edx
test   %ecx,%ecx
jg     12a0 <main+0x140>
mov    0x18(%rsp),%ecx
mov    $0x6,%edx
test   %ecx,%ecx
jg     12a0 <main+0x140>
mov    0x1c(%rsp),%ecx
mov    $0x7,%edx
test   %ecx,%ecx
jg     12a0 <main+0x140>
mov    0x20(%rsp),%ecx
mov    $0x8,%edx
test   %ecx,%ecx
jg     12a0 <main+0x140>
mov    0x24(%rsp),%ecx
mov    $0x9,%edx
test   %ecx,%ecx
jle    12aa <main+0x14a>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %edx,%eax
add    $0xffffffff,%ecx
mov    %ecx,(%rsp,%rax,4)
mov    %edx,%eax
mov    (%rsp),%ecx
test   %ecx,%ecx
movdqa 0xd79(%rip),%xmm3
movdqa 0xd61(%rip),%xmm4
jle    13df <main+0x27f>
cmp    $0x8,%ecx
jb     13be <main+0x25e>
mov    %ecx,%edx
and    $0xfffffff8,%edx
movd   %eax,%xmm1
movaps 0xd22(%rip),%xmm0
movss  %xmm1,%xmm0
lea    -0x8(%rdx),%edi
mov    %edi,%esi
shr    $0x3,%esi
add    $0x1,%esi
mov    %esi,%eax
and    $0x7,%eax
cmp    $0x38,%edi
jae    1301 <main+0x1a1>
movdqa 0xd11(%rip),%xmm1
jmp    134b <main+0x1eb>
and    $0xfffffff8,%esi
movdqa 0xd04(%rip),%xmm1
nopl   0x0(%rax)
pshufd $0xf5,%xmm0,%xmm2
pmuludq %xmm4,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm4,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm4,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm4,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
add    $0xfffffff8,%esi
jne    1310 <main+0x1b0>
test   %eax,%eax
je     138b <main+0x22b>
nop
pshufd $0xf5,%xmm0,%xmm2
pmuludq %xmm3,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm3,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
pshufd $0xf5,%xmm1,%xmm2
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm3,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
add    $0xffffffff,%eax
jne    1350 <main+0x1f0>
pshufd $0xf5,%xmm0,%xmm2
pshufd $0xf5,%xmm1,%xmm3
pmuludq %xmm2,%xmm3
pmuludq %xmm0,%xmm1
pshufd $0xee,%xmm1,%xmm0
pmuludq %xmm1,%xmm0
pshufd $0xaa,%xmm3,%xmm1
pmuludq %xmm3,%xmm1
pmuludq %xmm0,%xmm1
movd   %xmm1,%eax
cmp    %edx,%ecx
je     13dd <main+0x27d>
and    $0x7,%ecx
add    $0x1,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    %eax,%eax
lea    (%rax,%rax,4),%eax
add    $0xffffffff,%ecx
cmp    $0x1,%ecx
ja     13d0 <main+0x270>
xor    %ecx,%ecx
mov    %ecx,(%rsp)
mov    0x4(%rsp),%ecx
test   %ecx,%ecx
jle    145f <main+0x2ff>
lea    -0x1(%rcx),%edx
mov    %ecx,%esi
and    $0x7,%esi
je     1411 <main+0x2b1>
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
add    %eax,%eax
lea    (%rax,%rax,4),%eax
or     $0x1,%eax
add    $0x1,%edi
cmp    %edi,%esi
jne    1400 <main+0x2a0>
sub    %edi,%ecx
cmp    $0x7,%edx
jb     145d <main+0x2fd>
add    $0xffffffff,%ecx
nopl   0x0(%rax)
shl    $0x8,%eax
lea    (%rax,%rax,4),%eax
or     $0x80,%eax
lea    (%rax,%rax,4),%eax
or     $0x40,%eax
lea    (%rax,%rax,4),%eax
or     $0x20,%eax
lea    (%rax,%rax,4),%eax
or     $0x10,%eax
lea    (%rax,%rax,4),%eax
or     $0x8,%eax
lea    (%rax,%rax,4),%eax
or     $0x4,%eax
lea    (%rax,%rax,4),%eax
or     $0x2,%eax
lea    (%rax,%rax,4),%eax
or     $0x1,%eax
add    $0xfffffff8,%ecx
cmp    $0xfffffffe,%ecx
jb     1420 <main+0x2c0>
xor    %ecx,%ecx
mov    %ecx,0x4(%rsp)
mov    0x8(%rsp),%ecx
test   %ecx,%ecx
jle    14b5 <main+0x355>
lea    -0x1(%rcx),%edx
mov    %ecx,%esi
and    $0x7,%esi
je     1491 <main+0x331>
xor    %edi,%edi
nopw   0x0(%rax,%rax,1)
lea    (%rax,%rax,4),%eax
add    %eax,%eax
add    $0x2,%eax
add    $0x1,%edi
cmp    %edi,%esi
jne    1480 <main+0x320>
sub    %edi,%ecx
cmp    $0x7,%edx
jb     14b3 <main+0x353>
add    $0xffffffff,%ecx
nopl   0x0(%rax)
imul   $0x5f5e100,%eax,%eax
add    $0x153158e,%eax
add    $0xfffffff8,%ecx
cmp    $0xfffffffe,%ecx
jb     14a0 <main+0x340>
xor    %ecx,%ecx
mov    %ecx,0x8(%rsp)
mov    0xc(%rsp),%ecx
test   %ecx,%ecx
jle    1505 <main+0x3a5>
lea    -0x1(%rcx),%edx
mov    %ecx,%esi
and    $0x7,%esi
je     14e1 <main+0x381>
xor    %edi,%edi
nopl   (%rax)
lea    (%rax,%rax,4),%eax
add    %eax,%eax
add    $0x3,%eax
add    $0x1,%edi
cmp    %edi,%esi
jne    14d0 <main+0x370>
sub    %edi,%ecx
cmp    $0x7,%edx
jb     1503 <main+0x3a3>
add    $0xffffffff,%ecx
nopl   0x0(%rax)
imul   $0x5f5e100,%eax,%eax
add    $0x1fca055,%eax
add    $0xfffffff8,%ecx
cmp    $0xfffffffe,%ecx
jb     14f0 <main+0x390>
xor    %ecx,%ecx
mov    %ecx,0xc(%rsp)
mov    0x10(%rsp),%ecx
test   %ecx,%ecx
jle    1555 <main+0x3f5>
lea    -0x1(%rcx),%edx
mov    %ecx,%esi
and    $0x7,%esi
je     1531 <main+0x3d1>
xor    %edi,%edi
nopl   (%rax)
lea    (%rax,%rax,4),%eax
add    %eax,%eax
add    $0x4,%eax
add    $0x1,%edi
cmp    %edi,%esi
jne    1520 <main+0x3c0>
sub    %edi,%ecx
cmp    $0x7,%edx
jb     1553 <main+0x3f3>
add    $0xffffffff,%ecx
nopl   0x0(%rax)
imul   $0x5f5e100,%eax,%eax
add    $0x2a62b1c,%eax
add    $0xfffffff8,%ecx
cmp    $0xfffffffe,%ecx
jb     1540 <main+0x3e0>
xor    %ecx,%ecx
mov    %ecx,0x10(%rsp)
mov    0x14(%rsp),%ecx
test   %ecx,%ecx
jle    15a5 <main+0x445>
lea    -0x1(%rcx),%edx
mov    %ecx,%esi
and    $0x7,%esi
je     1581 <main+0x421>
xor    %edi,%edi
nopl   (%rax)
lea    (%rax,%rax,4),%eax
add    %eax,%eax
add    $0x5,%eax
add    $0x1,%edi
cmp    %edi,%esi
jne    1570 <main+0x410>
sub    %edi,%ecx
cmp    $0x7,%edx
jb     15a3 <main+0x443>
add    $0xffffffff,%ecx
nopl   0x0(%rax)
imul   $0x5f5e100,%eax,%eax
add    $0x34fb5e3,%eax
add    $0xfffffff8,%ecx
cmp    $0xfffffffe,%ecx
jb     1590 <main+0x430>
xor    %ecx,%ecx
mov    %ecx,0x14(%rsp)
mov    0x18(%rsp),%ecx
test   %ecx,%ecx
jle    15f5 <main+0x495>
lea    -0x1(%rcx),%edx
mov    %ecx,%esi
and    $0x7,%esi
je     15d1 <main+0x471>
xor    %edi,%edi
nopl   (%rax)
lea    (%rax,%rax,4),%eax
add    %eax,%eax
add    $0x6,%eax
add    $0x1,%edi
cmp    %edi,%esi
jne    15c0 <main+0x460>
sub    %edi,%ecx
cmp    $0x7,%edx
jb     15f3 <main+0x493>
add    $0xffffffff,%ecx
nopl   0x0(%rax)
imul   $0x5f5e100,%eax,%eax
add    $0x3f940aa,%eax
add    $0xfffffff8,%ecx
cmp    $0xfffffffe,%ecx
jb     15e0 <main+0x480>
xor    %ecx,%ecx
mov    %ecx,0x18(%rsp)
mov    0x1c(%rsp),%ecx
test   %ecx,%ecx
jle    1645 <main+0x4e5>
lea    -0x1(%rcx),%edx
mov    %ecx,%esi
and    $0x7,%esi
je     1621 <main+0x4c1>
xor    %edi,%edi
nopl   (%rax)
lea    (%rax,%rax,4),%eax
add    %eax,%eax
add    $0x7,%eax
add    $0x1,%edi
cmp    %edi,%esi
jne    1610 <main+0x4b0>
sub    %edi,%ecx
cmp    $0x7,%edx
jb     1643 <main+0x4e3>
add    $0xffffffff,%ecx
nopl   0x0(%rax)
imul   $0x5f5e100,%eax,%eax
add    $0x4a2cb71,%eax
add    $0xfffffff8,%ecx
cmp    $0xfffffffe,%ecx
jb     1630 <main+0x4d0>
xor    %ecx,%ecx
mov    %ecx,0x1c(%rsp)
mov    0x20(%rsp),%ecx
test   %ecx,%ecx
jle    1695 <main+0x535>
lea    -0x1(%rcx),%edx
mov    %ecx,%esi
and    $0x7,%esi
je     1671 <main+0x511>
xor    %edi,%edi
nopl   (%rax)
lea    (%rax,%rax,4),%eax
add    %eax,%eax
add    $0x8,%eax
add    $0x1,%edi
cmp    %edi,%esi
jne    1660 <main+0x500>
sub    %edi,%ecx
cmp    $0x7,%edx
jb     1693 <main+0x533>
add    $0xffffffff,%ecx
nopl   0x0(%rax)
imul   $0x5f5e100,%eax,%eax
add    $0x54c5638,%eax
add    $0xfffffff8,%ecx
cmp    $0xfffffffe,%ecx
jb     1680 <main+0x520>
xor    %ecx,%ecx
mov    %ecx,0x20(%rsp)
mov    0x24(%rsp),%ecx
test   %ecx,%ecx
jle    16e5 <main+0x585>
lea    -0x1(%rcx),%edx
mov    %ecx,%esi
and    $0x7,%esi
je     16c1 <main+0x561>
xor    %edi,%edi
nopl   (%rax)
lea    (%rax,%rax,4),%eax
add    %eax,%eax
add    $0x9,%eax
add    $0x1,%edi
cmp    %edi,%esi
jne    16b0 <main+0x550>
sub    %edi,%ecx
cmp    $0x7,%edx
jb     16e3 <main+0x583>
add    $0xffffffff,%ecx
nopl   0x0(%rax)
imul   $0x5f5e100,%eax,%eax
add    $0x5f5e0ff,%eax
add    $0xfffffff8,%ecx
cmp    $0xfffffffe,%ecx
jb     16d0 <main+0x570>
xor    %ecx,%ecx
mov    %ecx,0x24(%rsp)
cmp    %ebx,%eax
jne    11d0 <main+0x70>
mov    0x0(%rbp),%edi
mov    %r12,%rsi
mov    %ebx,%edx
call   1080 <fprintf@plt>
cmp    $0xa,%ebx
jb     11d0 <main+0x70>
mov    %r15,%rdi
call   1050 <strlen@plt>
lea    -0x1(%rax),%rcx
lea    0x30(%rsp),%rdi
mov    %r15,%rsi
xor    %edx,%edx
lea    0x38(%rsp),%r8
call   1040 <permute@plt>
jmp    11d0 <main+0x70>
mov    0x0(%rbp),%edi
lea    0x90f(%rip),%rsi
mov    $0xf4240,%edx
call   1080 <fprintf@plt>
mov    0x30(%rsp),%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [3 x i8] c"%d\00"
@stdout = global i32 0
@.str.1 = [5 x i8] c"-%d,\00"
@.str.2 = [4 x i8] c"-%d\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [10 x i32]
%3 = alloca [10 x i8]
%4 = alloca i32*
%5 = bitcast i32* %1 to i8*
%6 = bitcast [10 x i32]* %2 to i8*
%7 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%8 = bitcast i32** %4 to i8*
%9 = tail call i32* @calloc(i32 10, i32 8)
store i32* %9, i32** %4
%10 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 1
%11 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 2
%12 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 3
%13 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 4
%14 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 5
%15 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 6
%16 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 7
%17 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 8
%18 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 9
%19 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 0
%20 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 2
%21 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 3
%22 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 4
%23 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 5
%24 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 6
%25 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 7
%26 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 8
%27 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 9
br label %28
28: ; preds = %0, %432
%29 = phi i32 [ 1, %0 ], [ %433, %432 ]
%30 = call i32 @snprintf(i8* %7, i32 10, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32 %29)
br label %34
31: ; preds = %34
%32 = load i32, i32* %10
%33 = icmp sgt i32 %32, 0
br i1 %33, label %43, label %49
34: ; preds = %28, %34
%35 = phi i32 [ %29, %28 ], [ %41, %34 ]
%36 = urem i32 %35, 10
%37 = zext i32 %36 to i64
%38 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 %37
%39 = load i32, i32* %38
%40 = add nsw i32 %39, 1
store i32 %40, i32* %38
%41 = udiv i32 %35, 10
%42 = icmp ult i32 %35, 10
br i1 %42, label %31, label %34
43: ; preds = %70, %67, %64, %61, %58, %55, %52, %49, %31
%44 = phi i32 [ 1, %31 ], [ 2, %49 ], [ 3, %52 ], [ 4, %55 ], [ 5, %58 ], [ 6, %61 ], [ 7, %64 ], [ 8, %67 ], [ 9, %70 ]
%45 = phi i32 [ %32, %31 ], [ %50, %49 ], [ %53, %52 ], [ %56, %55 ], [ %59, %58 ], [ %62, %61 ], [ %65, %64 ], [ %68, %67 ], [ %71, %70 ]
%46 = zext i32 %44 to i64
%47 = getelementptr inbounds [10 x i32], [10 x i32]* %2, i64 0, i64 %46
%48 = add nsw i32 %45, -1
store i32 %48, i32* %47
br label %73
49: ; preds = %31
%50 = load i32, i32* %11
%51 = icmp sgt i32 %50, 0
br i1 %51, label %43, label %52
52: ; preds = %49
%53 = load i32, i32* %12
%54 = icmp sgt i32 %53, 0
br i1 %54, label %43, label %55
55: ; preds = %52
%56 = load i32, i32* %13
%57 = icmp sgt i32 %56, 0
br i1 %57, label %43, label %58
58: ; preds = %55
%59 = load i32, i32* %14
%60 = icmp sgt i32 %59, 0
br i1 %60, label %43, label %61
61: ; preds = %58
%62 = load i32, i32* %15
%63 = icmp sgt i32 %62, 0
br i1 %63, label %43, label %64
64: ; preds = %61
%65 = load i32, i32* %16
%66 = icmp sgt i32 %65, 0
br i1 %66, label %43, label %67
67: ; preds = %64
%68 = load i32, i32* %17
%69 = icmp sgt i32 %68, 0
br i1 %69, label %43, label %70
70: ; preds = %67
%71 = load i32, i32* %18
%72 = icmp sgt i32 %71, 0
br i1 %72, label %43, label %73
73: ; preds = %70, %43
%74 = phi i32 [ %44, %43 ], [ %41, %70 ]
%75 = load i32, i32* %19
%76 = icmp sgt i32 %75, 0
br i1 %76, label %77, label %127
77: ; preds = %73
%78 = icmp ult i32 %75, 8
br i1 %78, label %118, label %79
79: ; preds = %77
%80 = and i32 %75, -8
%81 = and i32 %75, 7
%82 = insertelement <4 x i32> <i32 poison, i32 1, i32 1, i32 1>, i32 %74, i64 0
%83 = add i32 %80, -8
%84 = lshr exact i32 %83, 3
%85 = add nuw nsw i32 %84, 1
%86 = and i32 %85, 7
%87 = icmp ult i32 %83, 56
br i1 %87, label %98, label %88
88: ; preds = %79
%89 = and i32 %85, 1073741816
br label %90
90: ; preds = %90, %88
%91 = phi <4 x i32> [ %82, %88 ], [ %94, %90 ]
%92 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %88 ], [ %95, %90 ]
%93 = phi i32 [ 0, %88 ], [ %96, %90 ]
%94 = mul <4 x i32> %91, <i32 100000000, i32 100000000, i32 100000000, i32 100000000>
%95 = mul <4 x i32> %92, <i32 100000000, i32 100000000, i32 100000000, i32 100000000>
%96 = add nuw i32 %93, 8
%97 = icmp eq i32 %96, %89
br i1 %97, label %98, label %90
98: ; preds = %90, %79
%99 = phi <4 x i32> [ undef, %79 ], [ %94, %90 ]
%100 = phi <4 x i32> [ undef, %79 ], [ %95, %90 ]
%101 = phi <4 x i32> [ %82, %79 ], [ %94, %90 ]
%102 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %79 ], [ %95, %90 ]
%103 = icmp eq i32 %86, 0
br i1 %103, label %112, label %104
104: ; preds = %98, %104
%105 = phi <4 x i32> [ %108, %104 ], [ %101, %98 ]
%106 = phi <4 x i32> [ %109, %104 ], [ %102, %98 ]
%107 = phi i32 [ %110, %104 ], [ 0, %98 ]
%108 = mul <4 x i32> %105, <i32 10, i32 10, i32 10, i32 10>
%109 = mul <4 x i32> %106, <i32 10, i32 10, i32 10, i32 10>
%110 = add i32 %107, 1
%111 = icmp eq i32 %110, %86
br i1 %111, label %112, label %104
112: ; preds = %104, %98
%113 = phi <4 x i32> [ %99, %98 ], [ %108, %104 ]
%114 = phi <4 x i32> [ %100, %98 ], [ %109, %104 ]
%115 = mul <4 x i32> %114, %113
%116 = call i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> %115)
%117 = icmp eq i32 %75, %80
br i1 %117, label %127, label %118
118: ; preds = %77, %112
%119 = phi i32 [ %74, %77 ], [ %116, %112 ]
%120 = phi i32 [ %75, %77 ], [ %81, %112 ]
br label %121
121: ; preds = %118, %121
%122 = phi i32 [ %124, %121 ], [ %119, %118 ]
%123 = phi i32 [ %125, %121 ], [ %120, %118 ]
%124 = mul nsw i32 %122, 10
%125 = add nsw i32 %123, -1
%126 = icmp ugt i32 %123, 1
br i1 %126, label %121, label %127
127: ; preds = %121, %112, %73
%128 = phi i32 [ %75, %73 ], [ 0, %112 ], [ 0, %121 ]
%129 = phi i32 [ %74, %73 ], [ %116, %112 ], [ %124, %121 ]
store i32 %128, i32* %19
%130 = load i32, i32* %10
%131 = icmp sgt i32 %130, 0
br i1 %131, label %132, label %172
132: ; preds = %127
%133 = add i32 %130, -1
%134 = and i32 %130, 7
%135 = icmp eq i32 %134, 0
br i1 %135, label %145, label %136
136: ; preds = %132, %136
%137 = phi i32 [ %141, %136 ], [ %129, %132 ]
%138 = phi i32 [ %142, %136 ], [ %130, %132 ]
%139 = phi i32 [ %143, %136 ], [ 0, %132 ]
%140 = mul nsw i32 %137, 10
%141 = or i32 %140, 1
%142 = add nsw i32 %138, -1
%143 = add i32 %139, 1
%144 = icmp eq i32 %143, %134
br i1 %144, label %145, label %136
145: ; preds = %136, %132
%146 = phi i32 [ %129, %132 ], [ %141, %136 ]
%147 = phi i32 [ %130, %132 ], [ %142, %136 ]
%148 = phi i32 [ undef, %132 ], [ %141, %136 ]
%149 = icmp ult i32 %133, 7
br i1 %149, label %172, label %150
150: ; preds = %145, %150
%151 = phi i32 [ %168, %150 ], [ %146, %145 ]
%152 = phi i32 [ %169, %150 ], [ %147, %145 ]
%153 = mul nsw i32 %151, 10
%154 = or i32 %153, 1
%155 = mul nsw i32 %154, 10
%156 = or i32 %155, 1
%157 = mul nsw i32 %156, 10
%158 = or i32 %157, 1
%159 = mul nsw i32 %158, 10
%160 = or i32 %159, 1
%161 = mul nsw i32 %160, 10
%162 = or i32 %161, 1
%163 = mul nsw i32 %162, 10
%164 = or i32 %163, 1
%165 = mul nsw i32 %164, 10
%166 = or i32 %165, 1
%167 = mul nsw i32 %166, 10
%168 = or i32 %167, 1
%169 = add nsw i32 %152, -8
%170 = add i32 %152, -9
%171 = icmp ult i32 %170, -2
br i1 %171, label %150, label %172
172: ; preds = %145, %150, %127
%173 = phi i32 [ %130, %127 ], [ 0, %150 ], [ 0, %145 ]
%174 = phi i32 [ %129, %127 ], [ %148, %145 ], [ %168, %150 ]
store i32 %173, i32* %10
%175 = load i32, i32* %20
%176 = icmp sgt i32 %175, 0
br i1 %176, label %177, label %203
177: ; preds = %172
%178 = add i32 %175, -1
%179 = and i32 %175, 7
%180 = icmp eq i32 %179, 0
br i1 %180, label %190, label %181
181: ; preds = %177, %181
%182 = phi i32 [ %186, %181 ], [ %174, %177 ]
%183 = phi i32 [ %187, %181 ], [ %175, %177 ]
%184 = phi i32 [ %188, %181 ], [ 0, %177 ]
%185 = mul nsw i32 %182, 10
%186 = add nsw i32 %185, 2
%187 = add nsw i32 %183, -1
%188 = add i32 %184, 1
%189 = icmp eq i32 %188, %179
br i1 %189, label %190, label %181
190: ; preds = %181, %177
%191 = phi i32 [ %174, %177 ], [ %186, %181 ]
%192 = phi i32 [ %175, %177 ], [ %187, %181 ]
%193 = phi i32 [ undef, %177 ], [ %186, %181 ]
%194 = icmp ult i32 %178, 7
br i1 %194, label %203, label %195
195: ; preds = %190, %195
%196 = phi i32 [ %199, %195 ], [ %191, %190 ]
%197 = phi i32 [ %200, %195 ], [ %192, %190 ]
%198 = mul i32 %196, 100000000
%199 = add i32 %198, 22222222
%200 = add nsw i32 %197, -8
%201 = add i32 %197, -9
%202 = icmp ult i32 %201, -2
br i1 %202, label %195, label %203
203: ; preds = %190, %195, %172
%204 = phi i32 [ %175, %172 ], [ 0, %195 ], [ 0, %190 ]
%205 = phi i32 [ %174, %172 ], [ %193, %190 ], [ %199, %195 ]
store i32 %204, i32* %20
%206 = load i32, i32* %21
%207 = icmp sgt i32 %206, 0
br i1 %207, label %208, label %234
208: ; preds = %203
%209 = add i32 %206, -1
%210 = and i32 %206, 7
%211 = icmp eq i32 %210, 0
br i1 %211, label %221, label %212
212: ; preds = %208, %212
%213 = phi i32 [ %217, %212 ], [ %205, %208 ]
%214 = phi i32 [ %218, %212 ], [ %206, %208 ]
%215 = phi i32 [ %219, %212 ], [ 0, %208 ]
%216 = mul nsw i32 %213, 10
%217 = add nsw i32 %216, 3
%218 = add nsw i32 %214, -1
%219 = add i32 %215, 1
%220 = icmp eq i32 %219, %210
br i1 %220, label %221, label %212
221: ; preds = %212, %208
%222 = phi i32 [ %205, %208 ], [ %217, %212 ]
%223 = phi i32 [ %206, %208 ], [ %218, %212 ]
%224 = phi i32 [ undef, %208 ], [ %217, %212 ]
%225 = icmp ult i32 %209, 7
br i1 %225, label %234, label %226
226: ; preds = %221, %226
%227 = phi i32 [ %230, %226 ], [ %222, %221 ]
%228 = phi i32 [ %231, %226 ], [ %223, %221 ]
%229 = mul i32 %227, 100000000
%230 = add i32 %229, 33333333
%231 = add nsw i32 %228, -8
%232 = add i32 %228, -9
%233 = icmp ult i32 %232, -2
br i1 %233, label %226, label %234
234: ; preds = %221, %226, %203
%235 = phi i32 [ %206, %203 ], [ 0, %226 ], [ 0, %221 ]
%236 = phi i32 [ %205, %203 ], [ %224, %221 ], [ %230, %226 ]
store i32 %235, i32* %21
%237 = load i32, i32* %22
%238 = icmp sgt i32 %237, 0
br i1 %238, label %239, label %265
239: ; preds = %234
%240 = add i32 %237, -1
%241 = and i32 %237, 7
%242 = icmp eq i32 %241, 0
br i1 %242, label %252, label %243
243: ; preds = %239, %243
%244 = phi i32 [ %248, %243 ], [ %236, %239 ]
%245 = phi i32 [ %249, %243 ], [ %237, %239 ]
%246 = phi i32 [ %250, %243 ], [ 0, %239 ]
%247 = mul nsw i32 %244, 10
%248 = add nsw i32 %247, 4
%249 = add nsw i32 %245, -1
%250 = add i32 %246, 1
%251 = icmp eq i32 %250, %241
br i1 %251, label %252, label %243
252: ; preds = %243, %239
%253 = phi i32 [ %236, %239 ], [ %248, %243 ]
%254 = phi i32 [ %237, %239 ], [ %249, %243 ]
%255 = phi i32 [ undef, %239 ], [ %248, %243 ]
%256 = icmp ult i32 %240, 7
br i1 %256, label %265, label %257
257: ; preds = %252, %257
%258 = phi i32 [ %261, %257 ], [ %253, %252 ]
%259 = phi i32 [ %262, %257 ], [ %254, %252 ]
%260 = mul i32 %258, 100000000
%261 = add i32 %260, 44444444
%262 = add nsw i32 %259, -8
%263 = add i32 %259, -9
%264 = icmp ult i32 %263, -2
br i1 %264, label %257, label %265
265: ; preds = %252, %257, %234
%266 = phi i32 [ %237, %234 ], [ 0, %257 ], [ 0, %252 ]
%267 = phi i32 [ %236, %234 ], [ %255, %252 ], [ %261, %257 ]
store i32 %266, i32* %22
%268 = load i32, i32* %23
%269 = icmp sgt i32 %268, 0
br i1 %269, label %270, label %296
270: ; preds = %265
%271 = add i32 %268, -1
%272 = and i32 %268, 7
%273 = icmp eq i32 %272, 0
br i1 %273, label %283, label %274
274: ; preds = %270, %274
%275 = phi i32 [ %279, %274 ], [ %267, %270 ]
%276 = phi i32 [ %280, %274 ], [ %268, %270 ]
%277 = phi i32 [ %281, %274 ], [ 0, %270 ]
%278 = mul nsw i32 %275, 10
%279 = add nsw i32 %278, 5
%280 = add nsw i32 %276, -1
%281 = add i32 %277, 1
%282 = icmp eq i32 %281, %272
br i1 %282, label %283, label %274
283: ; preds = %274, %270
%284 = phi i32 [ %267, %270 ], [ %279, %274 ]
%285 = phi i32 [ %268, %270 ], [ %280, %274 ]
%286 = phi i32 [ undef, %270 ], [ %279, %274 ]
%287 = icmp ult i32 %271, 7
br i1 %287, label %296, label %288
288: ; preds = %283, %288
%289 = phi i32 [ %292, %288 ], [ %284, %283 ]
%290 = phi i32 [ %293, %288 ], [ %285, %283 ]
%291 = mul i32 %289, 100000000
%292 = add i32 %291, 55555555
%293 = add nsw i32 %290, -8
%294 = add i32 %290, -9
%295 = icmp ult i32 %294, -2
br i1 %295, label %288, label %296
296: ; preds = %283, %288, %265
%297 = phi i32 [ %268, %265 ], [ 0, %288 ], [ 0, %283 ]
%298 = phi i32 [ %267, %265 ], [ %286, %283 ], [ %292, %288 ]
store i32 %297, i32* %23
%299 = load i32, i32* %24
%300 = icmp sgt i32 %299, 0
br i1 %300, label %301, label %327
301: ; preds = %296
%302 = add i32 %299, -1
%303 = and i32 %299, 7
%304 = icmp eq i32 %303, 0
br i1 %304, label %314, label %305
305: ; preds = %301, %305
%306 = phi i32 [ %310, %305 ], [ %298, %301 ]
%307 = phi i32 [ %311, %305 ], [ %299, %301 ]
%308 = phi i32 [ %312, %305 ], [ 0, %301 ]
%309 = mul nsw i32 %306, 10
%310 = add nsw i32 %309, 6
%311 = add nsw i32 %307, -1
%312 = add i32 %308, 1
%313 = icmp eq i32 %312, %303
br i1 %313, label %314, label %305
314: ; preds = %305, %301
%315 = phi i32 [ %298, %301 ], [ %310, %305 ]
%316 = phi i32 [ %299, %301 ], [ %311, %305 ]
%317 = phi i32 [ undef, %301 ], [ %310, %305 ]
%318 = icmp ult i32 %302, 7
br i1 %318, label %327, label %319
319: ; preds = %314, %319
%320 = phi i32 [ %323, %319 ], [ %315, %314 ]
%321 = phi i32 [ %324, %319 ], [ %316, %314 ]
%322 = mul i32 %320, 100000000
%323 = add i32 %322, 66666666
%324 = add nsw i32 %321, -8
%325 = add i32 %321, -9
%326 = icmp ult i32 %325, -2
br i1 %326, label %319, label %327
327: ; preds = %314, %319, %296
%328 = phi i32 [ %299, %296 ], [ 0, %319 ], [ 0, %314 ]
%329 = phi i32 [ %298, %296 ], [ %317, %314 ], [ %323, %319 ]
store i32 %328, i32* %24
%330 = load i32, i32* %25
%331 = icmp sgt i32 %330, 0
br i1 %331, label %332, label %358
332: ; preds = %327
%333 = add i32 %330, -1
%334 = and i32 %330, 7
%335 = icmp eq i32 %334, 0
br i1 %335, label %345, label %336
336: ; preds = %332, %336
%337 = phi i32 [ %341, %336 ], [ %329, %332 ]
%338 = phi i32 [ %342, %336 ], [ %330, %332 ]
%339 = phi i32 [ %343, %336 ], [ 0, %332 ]
%340 = mul nsw i32 %337, 10
%341 = add nsw i32 %340, 7
%342 = add nsw i32 %338, -1
%343 = add i32 %339, 1
%344 = icmp eq i32 %343, %334
br i1 %344, label %345, label %336
345: ; preds = %336, %332
%346 = phi i32 [ %329, %332 ], [ %341, %336 ]
%347 = phi i32 [ %330, %332 ], [ %342, %336 ]
%348 = phi i32 [ undef, %332 ], [ %341, %336 ]
%349 = icmp ult i32 %333, 7
br i1 %349, label %358, label %350
350: ; preds = %345, %350
%351 = phi i32 [ %354, %350 ], [ %346, %345 ]
%352 = phi i32 [ %355, %350 ], [ %347, %345 ]
%353 = mul i32 %351, 100000000
%354 = add i32 %353, 77777777
%355 = add nsw i32 %352, -8
%356 = add i32 %352, -9
%357 = icmp ult i32 %356, -2
br i1 %357, label %350, label %358
358: ; preds = %345, %350, %327
%359 = phi i32 [ %330, %327 ], [ 0, %350 ], [ 0, %345 ]
%360 = phi i32 [ %329, %327 ], [ %348, %345 ], [ %354, %350 ]
store i32 %359, i32* %25
%361 = load i32, i32* %26
%362 = icmp sgt i32 %361, 0
br i1 %362, label %363, label %389
363: ; preds = %358
%364 = add i32 %361, -1
%365 = and i32 %361, 7
%366 = icmp eq i32 %365, 0
br i1 %366, label %376, label %367
367: ; preds = %363, %367
%368 = phi i32 [ %372, %367 ], [ %360, %363 ]
%369 = phi i32 [ %373, %367 ], [ %361, %363 ]
%370 = phi i32 [ %374, %367 ], [ 0, %363 ]
%371 = mul nsw i32 %368, 10
%372 = add nsw i32 %371, 8
%373 = add nsw i32 %369, -1
%374 = add i32 %370, 1
%375 = icmp eq i32 %374, %365
br i1 %375, label %376, label %367
376: ; preds = %367, %363
%377 = phi i32 [ %360, %363 ], [ %372, %367 ]
%378 = phi i32 [ %361, %363 ], [ %373, %367 ]
%379 = phi i32 [ undef, %363 ], [ %372, %367 ]
%380 = icmp ult i32 %364, 7
br i1 %380, label %389, label %381
381: ; preds = %376, %381
%382 = phi i32 [ %385, %381 ], [ %377, %376 ]
%383 = phi i32 [ %386, %381 ], [ %378, %376 ]
%384 = mul i32 %382, 100000000
%385 = add i32 %384, 88888888
%386 = add nsw i32 %383, -8
%387 = add i32 %383, -9
%388 = icmp ult i32 %387, -2
br i1 %388, label %381, label %389
389: ; preds = %376, %381, %358
%390 = phi i32 [ %361, %358 ], [ 0, %381 ], [ 0, %376 ]
%391 = phi i32 [ %360, %358 ], [ %379, %376 ], [ %385, %381 ]
store i32 %390, i32* %26
%392 = load i32, i32* %27
%393 = icmp sgt i32 %392, 0
br i1 %393, label %394, label %420
394: ; preds = %389
%395 = add i32 %392, -1
%396 = and i32 %392, 7
%397 = icmp eq i32 %396, 0
br i1 %397, label %407, label %398
398: ; preds = %394, %398
%399 = phi i32 [ %403, %398 ], [ %391, %394 ]
%400 = phi i32 [ %404, %398 ], [ %392, %394 ]
%401 = phi i32 [ %405, %398 ], [ 0, %394 ]
%402 = mul nsw i32 %399, 10
%403 = add nsw i32 %402, 9
%404 = add nsw i32 %400, -1
%405 = add i32 %401, 1
%406 = icmp eq i32 %405, %396
br i1 %406, label %407, label %398
407: ; preds = %398, %394
%408 = phi i32 [ %391, %394 ], [ %403, %398 ]
%409 = phi i32 [ %392, %394 ], [ %404, %398 ]
%410 = phi i32 [ undef, %394 ], [ %403, %398 ]
%411 = icmp ult i32 %395, 7
br i1 %411, label %420, label %412
412: ; preds = %407, %412
%413 = phi i32 [ %416, %412 ], [ %408, %407 ]
%414 = phi i32 [ %417, %412 ], [ %409, %407 ]
%415 = mul i32 %413, 100000000
%416 = add i32 %415, 99999999
%417 = add nsw i32 %414, -8
%418 = add i32 %414, -9
%419 = icmp ult i32 %418, -2
br i1 %419, label %412, label %420
420: ; preds = %407, %412, %389
%421 = phi i32 [ %392, %389 ], [ 0, %412 ], [ 0, %407 ]
%422 = phi i32 [ %391, %389 ], [ %410, %407 ], [ %416, %412 ]
store i32 %421, i32* %27
%423 = icmp eq i32 %422, %29
br i1 %423, label %424, label %432
424: ; preds = %420
%425 = load i32, i32* @stdout
%426 = call i32 @fprintf(i32 %425, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i32 %29)
%427 = icmp ugt i32 %29, 9
br i1 %427, label %428, label %432
428: ; preds = %424
%429 = call i64 @strlen(i8* %7)
%430 = add nsw i64 %429, -1
%431 = call i32 @permute(i32** %4, i8* %7, i32 0, i64 %430, i32* %1)
br label %432
432: ; preds = %420, %428, %424
%433 = add nuw nsw i32 %29, 1
%434 = icmp eq i32 %433, 1000000
br i1 %434, label %435, label %28
435: ; preds = %432
%436 = load i32, i32* @stdout
%437 = call i32 @fprintf(i32 %436, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), i32 1000000)
%438 = load i32*, i32** %4
%439 = call i32 @free(i32* %438)
ret i32 0
}