#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*/ printf(char *, short, int, int);
int main() {
  short n[3], nn[4];
  short i, j, flag;
  nn[0] = 123;
LOOP:
  if ((nn[1] = nn[0]++) > 329)
    goto EXIT;
  nn[2] = 2 * nn[1];
  nn[3] = 3 * nn[1];
  flag = 1;
  for (i = 1; i < 4; i++) {
    for (j = 0; j < 3; j++) {
      n[j] = nn[i] % 10;
      if (!(flag & (1 << n[j])))
        flag |= (1 << n[j]);
      else
        goto LOOP;
      nn[i] /= 10;
    }
  }
  printf("%d %d %d\n", nn[0] - 1, 2 * (nn[0] - 1), 3 * (nn[0] - 1));
  goto LOOP;
EXIT:
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
movw   $0x7b,-0x12(%rbp)
mov    -0x12(%rbp),%ax
mov    %ax,%cx
add    $0x1,%cx
mov    %cx,-0x12(%rbp)
mov    %ax,-0x10(%rbp)
cwtl
cmp    $0x149,%eax
jle    1149 <main+0x39>
jmp    126a <main+0x15a>
movswl -0x10(%rbp),%eax
shl    $0x1,%eax
mov    %ax,-0xe(%rbp)
movswl -0x10(%rbp),%eax
imul   $0x3,%eax,%eax
mov    %ax,-0xc(%rbp)
movw   $0x1,-0x18(%rbp)
movw   $0x1,-0x14(%rbp)
movswl -0x14(%rbp),%eax
cmp    $0x4,%eax
jge    123b <main+0x12b>
movw   $0x0,-0x16(%rbp)
movswl -0x16(%rbp),%eax
cmp    $0x3,%eax
jge    1225 <main+0x115>
movswq -0x14(%rbp),%rax
movswl -0x12(%rbp,%rax,2),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %dx,%cx
movswq -0x16(%rbp),%rax
mov    %cx,-0xa(%rbp,%rax,2)
movswl -0x18(%rbp),%eax
movswq -0x16(%rbp),%rcx
movswl -0xa(%rbp,%rcx,2),%ecx
mov    $0x1,%edx
shl    %cl,%edx
mov    %edx,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
jne    11ee <main+0xde>
movswq -0x16(%rbp),%rax
movswl -0xa(%rbp,%rax,2),%ecx
mov    $0x1,%eax
shl    %cl,%eax
mov    %eax,%ecx
movswl -0x18(%rbp),%eax
or     %ecx,%eax
mov    %ax,-0x18(%rbp)
jmp    11f3 <main+0xe3>
jmp    1125 <main+0x15>
movswq -0x14(%rbp),%rax
mov    %rax,-0x20(%rbp)
movswl -0x12(%rbp,%rax,2),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %cx,-0x12(%rbp,%rax,2)
mov    -0x16(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x16(%rbp)
jmp    117e <main+0x6e>
jmp    122a <main+0x11a>
mov    -0x14(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x14(%rbp)
jmp    116b <main+0x5b>
movswl -0x12(%rbp),%eax
sub    $0x1,%eax
movswl -0x12(%rbp),%edx
sub    $0x1,%edx
shl    $0x1,%edx
movswl -0x12(%rbp),%ecx
sub    $0x1,%ecx
imul   $0x3,%ecx,%ecx
lea    0xda3(%rip),%rdi
movswl %ax,%esi
call   1030 <printf@plt>
jmp    1125 <main+0x15>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    $0x7b,%r14d
mov    $0xf6,%ebx
mov    $0x171,%r13d
mov    $0xcccccccd,%r15d
lea    0x6(%rsp),%r12
lea    0x4(%rsp),%r9
lea    0x2(%rsp),%r10
lea    0xeb8(%rip),%rdi
nopl   0x0(%rax,%rax,1)
mov    %r14d,%r11d
mov    %r14d,%eax
imul   %r15,%rax
shr    $0x23,%rax
lea    0x1(%r11),%r14d
lea    0x0(,%rax,4),%ecx
lea    (%rcx,%rcx,4),%ecx
cmp    %bx,%cx
jne    1180 <main+0x70>
mov    %r12,%rcx
mov    %r11d,%edx
jmp    13a0 <main+0x290>
nopl   0x0(%rax)
add    %eax,%eax
lea    (%rax,%rax,4),%eax
mov    %r11d,%ecx
sub    %eax,%ecx
movswl %r11w,%esi
imul   $0x6667,%esi,%edx
mov    %edx,%eax
shr    $0x1f,%eax
sar    $0x12,%edx
add    %eax,%edx
mov    $0x1,%r8d
bts    %ecx,%r8d
movswl %dx,%ecx
imul   $0x6667,%ecx,%eax
mov    %eax,%ebp
shr    $0x1f,%ebp
shr    $0x12,%eax
add    %ebp,%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
sub    %eax,%ecx
movswl %r8w,%ebp
mov    $0x1,%eax
shl    %cl,%eax
bt     %ecx,%ebp
mov    %r12,%rcx
jb     13a0 <main+0x290>
or     %eax,%r8d
imul   $0x147b,%esi,%edx
mov    %edx,%eax
shr    $0x1f,%eax
sar    $0x13,%edx
add    %eax,%edx
imul   $0x6667,%edx,%eax
mov    %eax,%ecx
shr    $0x1f,%ecx
shr    $0x12,%eax
add    %ecx,%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
mov    %edx,%ecx
sub    %eax,%ecx
movswl %r8w,%ebp
mov    $0x1,%eax
shl    %cl,%eax
bt     %ecx,%ebp
mov    %r12,%rcx
jb     13a0 <main+0x290>
mov    %ebx,%ecx
imul   %r15,%rcx
shr    $0x23,%rcx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
neg    %ecx
or     %eax,%r8d
movswl %r8w,%edx
add    %ebx,%ecx
mov    $0x1,%eax
shl    %cl,%eax
bt     %ecx,%edx
jae    1250 <main+0x140>
add    %r11d,%r11d
mov    %r9,%rcx
mov    %r11d,%edx
jmp    13a0 <main+0x290>
movswl %bx,%ecx
imul   $0x6667,%ecx,%edx
mov    %edx,%ecx
shr    $0x1f,%ecx
sar    $0x12,%edx
add    %ecx,%edx
or     %eax,%r8d
movswl %dx,%ecx
imul   $0x6667,%ecx,%eax
mov    %eax,%ebp
shr    $0x1f,%ebp
shr    $0x12,%eax
add    %ebp,%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
sub    %eax,%ecx
movswl %r8w,%ebp
mov    $0x1,%eax
shl    %cl,%eax
bt     %ecx,%ebp
mov    %r9,%rcx
jb     13a0 <main+0x290>
or     %eax,%r8d
movswl %bx,%eax
imul   $0x147b,%eax,%edx
mov    %edx,%eax
shr    $0x1f,%eax
sar    $0x13,%edx
add    %eax,%edx
imul   $0x6667,%edx,%eax
mov    %eax,%ecx
shr    $0x1f,%ecx
shr    $0x12,%eax
add    %ecx,%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
mov    %edx,%ecx
sub    %eax,%ecx
movswl %r8w,%ebp
mov    $0x1,%eax
shl    %cl,%eax
bt     %ecx,%ebp
mov    %r9,%rcx
jb     13a0 <main+0x290>
mov    %r13d,%ecx
imul   %r15,%rcx
shr    $0x23,%rcx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
neg    %ecx
or     %eax,%r8d
movswl %r8w,%edx
add    %r13d,%ecx
mov    $0x1,%eax
shl    %cl,%eax
bt     %ecx,%edx
jae    1311 <main+0x201>
lea    (%r11,%r11,2),%edx
mov    %r10,%rcx
jmp    13a0 <main+0x290>
movswl %r13w,%ecx
imul   $0x6667,%ecx,%edx
mov    %edx,%ecx
shr    $0x1f,%ecx
sar    $0x12,%edx
add    %ecx,%edx
or     %eax,%r8d
movswl %dx,%ecx
imul   $0x6667,%ecx,%eax
mov    %eax,%ebp
shr    $0x1f,%ebp
shr    $0x12,%eax
add    %ebp,%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
sub    %eax,%ecx
movswl %r8w,%ebp
mov    $0x1,%eax
shl    %cl,%eax
bt     %ecx,%ebp
mov    %r10,%rcx
jb     13a0 <main+0x290>
or     %eax,%r8d
movswl %r13w,%eax
imul   $0x147b,%eax,%edx
mov    %edx,%eax
shr    $0x1f,%eax
sar    $0x13,%edx
add    %eax,%edx
imul   $0x6667,%edx,%eax
mov    %eax,%ecx
shr    $0x1f,%ecx
shr    $0x12,%eax
add    %ecx,%eax
add    %eax,%eax
lea    (%rax,%rax,4),%eax
mov    %edx,%ecx
sub    %eax,%ecx
movswl %r8w,%eax
bt     %ecx,%eax
mov    %r10,%rcx
jae    13c1 <main+0x2b1>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %dx,(%rcx)
mov    %r14w,0x6(%rsp)
add    $0x2,%ebx
add    $0x3,%r13d
movswl %r14w,%eax
cmp    $0x149,%eax
jle    1150 <main+0x40>
jmp    1402 <main+0x2f2>
movswl %r13w,%eax
imul   $0xffff8313,%eax,%eax
shr    $0x10,%eax
add    %r13d,%eax
movzwl %ax,%eax
movswl %ax,%ecx
shr    $0xf,%eax
sar    $0x9,%ecx
add    %eax,%ecx
mov    %cx,0x2(%rsp)
mov    %ebx,%edx
mov    %r13d,%ecx
mov    %r10,%rbp
call   1030 <printf@plt>
lea    0xc08(%rip),%rdi
mov    %rbp,%r10
lea    0x4(%rsp),%r9
jmp    13a3 <main+0x293>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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