#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 *);
int /*<<< orphan*/ scanf(char *, int *);
int main(void) {
  int i, number, num_1, num_2, digit;
  printf("ÇëÊäÈë1000ÒÔÄÚµÄÈÎÒâÒ»¸öÕûÊý£º\n");
  scanf("%i", &number);
  if (number < 10) {
    switch (number) {
    case 0:
      printf("zero");
      break;
    case 1:
      printf("one");
      break;
    case 2:
      printf("two");
      break;
    case 3:
      printf("three");
      break;
    case 4:
      printf("four");
      break;
    case 5:
      printf("five");
      break;
    case 6:
      printf("six");
      break;
    case 7:
      printf("seven");
      break;
    case 8:
      printf("eight");
      break;
    case 9:
      printf("nine");
      break;
    default:
      printf("·Ç·¨×Ö·û");
      break;
    }
  } else if (number >= 10 && number < 100) {
    switch (number / 10 % 10) {
    case 0:
      printf("zero ");
      break;
    case 1:
      printf("one ");
      break;
    case 2:
      printf("two ");
      break;
    case 3:
      printf("three ");
      break;
    case 4:
      printf("four ");
      break;
    case 5:
      printf("five ");
      break;
    case 6:
      printf("six ");
      break;
    case 7:
      printf("seven ");
      break;
    case 8:
      printf("eight ");
      break;
    case 9:
      printf("nine ");
      break;
    default:
      printf("·Ç·¨×Ö·û");
      break;
    }
    switch (number % 10) {
    case 0:
      printf("zero ");
      break;
    case 1:
      printf("one ");
      break;
    case 2:
      printf("two ");
      break;
    case 3:
      printf("three ");
      break;
    case 4:
      printf("four ");
      break;
    case 5:
      printf("five ");
      break;
    case 6:
      printf("six ");
      break;
    case 7:
      printf("seven ");
      break;
    case 8:
      printf("eight ");
      break;
    case 9:
      printf("nine ");
      break;
    default:
      printf("·Ç·¨×Ö·û");
      break;
    }
  } else if (number < 1000 && number >= 100) {
    switch (number / 100 % 10) {
    case 0:
      printf("zero ");
      break;
    case 1:
      printf("one ");
      break;
    case 2:
      printf("two ");
      break;
    case 3:
      printf("three ");
      break;
    case 4:
      printf("four ");
      break;
    case 5:
      printf("five ");
      break;
    case 6:
      printf("six ");
      break;
    case 7:
      printf("seven ");
      break;
    case 8:
      printf("eight ");
      break;
    case 9:
      printf("nine ");
      break;
    default:
      printf("·Ç·¨×Ö·û");
      break;
    }
    switch (number / 10 % 10) {
    case 0:
      printf("zero ");
      break;
    case 1:
      printf("one ");
      break;
    case 2:
      printf("two ");
      break;
    case 3:
      printf("three ");
      break;
    case 4:
      printf("four ");
      break;
    case 5:
      printf("five ");
      break;
    case 6:
      printf("six ");
      break;
    case 7:
      printf("seven ");
      break;
    case 8:
      printf("eight ");
      break;
    case 9:
      printf("nine ");
      break;
    default:
      printf("·Ç·¨×Ö·û");
      break;
    }
    switch (number % 10) {
    case 0:
      printf("zero ");
      break;
    case 1:
      printf("one ");
      break;
    case 2:
      printf("two ");
      break;
    case 3:
      printf("three ");
      break;
    case 4:
      printf("four ");
      break;
    case 5:
      printf("five ");
      break;
    case 6:
      printf("six ");
      break;
    case 7:
      printf("seven ");
      break;
    case 8:
      printf("eight ");
      break;
    case 9:
      printf("nine ");
      break;
    default:
      printf("·Ç·¨×Ö·û");
      break;
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xfba(%rip),%rdi
call   1030 <printf@plt>
lea    0xfe8(%rip),%rdi
lea    -0xc(%rbp),%rsi
call   1040 <scanf@plt>
cmpl   $0xa,-0xc(%rbp)
jge    1235 <main+0x115>
mov    -0xc(%rbp),%eax
mov    %rax,-0x20(%rbp)
sub    $0x9,%rax
ja     1224 <main+0x104>
mov    -0x20(%rbp),%rax
lea    0xf57(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xfac(%rip),%rdi
call   1030 <printf@plt>
jmp    1230 <main+0x110>
lea    0xfa0(%rip),%rdi
call   1030 <printf@plt>
jmp    1230 <main+0x110>
lea    0xf93(%rip),%rdi
call   1030 <printf@plt>
jmp    1230 <main+0x110>
lea    0xf86(%rip),%rdi
call   1030 <printf@plt>
jmp    1230 <main+0x110>
lea    0xf7b(%rip),%rdi
call   1030 <printf@plt>
jmp    1230 <main+0x110>
lea    0xf6f(%rip),%rdi
call   1030 <printf@plt>
jmp    1230 <main+0x110>
lea    0xf63(%rip),%rdi
call   1030 <printf@plt>
jmp    1230 <main+0x110>
lea    0xf56(%rip),%rdi
call   1030 <printf@plt>
jmp    1230 <main+0x110>
lea    0xf4b(%rip),%rdi
call   1030 <printf@plt>
jmp    1230 <main+0x110>
lea    0xf40(%rip),%rdi
call   1030 <printf@plt>
jmp    1230 <main+0x110>
lea    0xf34(%rip),%rdi
call   1030 <printf@plt>
jmp    179f <main+0x67f>
cmpl   $0xa,-0xc(%rbp)
jl     145b <main+0x33b>
cmpl   $0x64,-0xc(%rbp)
jge    145b <main+0x33b>
movslq -0xc(%rbp),%rax
imul   $0x66666667,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rax
add    %ecx,%eax
movslq %eax,%rcx
imul   $0x66666667,%rcx,%rdx
mov    %rdx,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rdx
add    %ecx,%edx
add    %edx,%edx
mov    %edx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0x9,%eax
ja     134e <main+0x22e>
mov    -0x28(%rbp),%rax
lea    0xddd(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xec5(%rip),%rdi
call   1030 <printf@plt>
jmp    135a <main+0x23a>
lea    0xeba(%rip),%rdi
call   1030 <printf@plt>
jmp    135a <main+0x23a>
lea    0xeae(%rip),%rdi
call   1030 <printf@plt>
jmp    135a <main+0x23a>
lea    0xea2(%rip),%rdi
call   1030 <printf@plt>
jmp    135a <main+0x23a>
lea    0xe98(%rip),%rdi
call   1030 <printf@plt>
jmp    135a <main+0x23a>
lea    0xe8d(%rip),%rdi
call   1030 <printf@plt>
jmp    135a <main+0x23a>
lea    0xe82(%rip),%rdi
call   1030 <printf@plt>
jmp    135a <main+0x23a>
lea    0xe76(%rip),%rdi
call   1030 <printf@plt>
jmp    135a <main+0x23a>
lea    0xe6c(%rip),%rdi
call   1030 <printf@plt>
jmp    135a <main+0x23a>
lea    0xe62(%rip),%rdi
call   1030 <printf@plt>
jmp    135a <main+0x23a>
lea    0xe0a(%rip),%rdi
call   1030 <printf@plt>
movslq -0xc(%rbp),%rcx
mov    %ecx,%eax
imul   $0x66666667,%rcx,%rdx
mov    %rdx,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rdx
add    %ecx,%edx
add    %edx,%edx
mov    %edx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
mov    %eax,%ecx
mov    %rcx,-0x30(%rbp)
sub    $0x9,%eax
ja     144a <main+0x32a>
mov    -0x30(%rbp),%rax
lea    0xd09(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xdc9(%rip),%rdi
call   1030 <printf@plt>
jmp    1456 <main+0x336>
lea    0xdbe(%rip),%rdi
call   1030 <printf@plt>
jmp    1456 <main+0x336>
lea    0xdb2(%rip),%rdi
call   1030 <printf@plt>
jmp    1456 <main+0x336>
lea    0xda6(%rip),%rdi
call   1030 <printf@plt>
jmp    1456 <main+0x336>
lea    0xd9c(%rip),%rdi
call   1030 <printf@plt>
jmp    1456 <main+0x336>
lea    0xd91(%rip),%rdi
call   1030 <printf@plt>
jmp    1456 <main+0x336>
lea    0xd86(%rip),%rdi
call   1030 <printf@plt>
jmp    1456 <main+0x336>
lea    0xd7a(%rip),%rdi
call   1030 <printf@plt>
jmp    1456 <main+0x336>
lea    0xd70(%rip),%rdi
call   1030 <printf@plt>
jmp    1456 <main+0x336>
lea    0xd66(%rip),%rdi
call   1030 <printf@plt>
jmp    1456 <main+0x336>
lea    0xd0e(%rip),%rdi
call   1030 <printf@plt>
jmp    179a <main+0x67a>
cmpl   $0x3e8,-0xc(%rbp)
jge    1795 <main+0x675>
cmpl   $0x64,-0xc(%rbp)
jl     1795 <main+0x675>
movslq -0xc(%rbp),%rax
imul   $0x51eb851f,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x25,%rax
add    %ecx,%eax
movslq %eax,%rcx
imul   $0x66666667,%rcx,%rdx
mov    %rdx,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rdx
add    %ecx,%edx
add    %edx,%edx
mov    %edx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x9,%eax
ja     1577 <main+0x457>
mov    -0x38(%rbp),%rax
lea    0xb3c(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xc9c(%rip),%rdi
call   1030 <printf@plt>
jmp    1583 <main+0x463>
lea    0xc91(%rip),%rdi
call   1030 <printf@plt>
jmp    1583 <main+0x463>
lea    0xc85(%rip),%rdi
call   1030 <printf@plt>
jmp    1583 <main+0x463>
lea    0xc79(%rip),%rdi
call   1030 <printf@plt>
jmp    1583 <main+0x463>
lea    0xc6f(%rip),%rdi
call   1030 <printf@plt>
jmp    1583 <main+0x463>
lea    0xc64(%rip),%rdi
call   1030 <printf@plt>
jmp    1583 <main+0x463>
lea    0xc59(%rip),%rdi
call   1030 <printf@plt>
jmp    1583 <main+0x463>
lea    0xc4d(%rip),%rdi
call   1030 <printf@plt>
jmp    1583 <main+0x463>
lea    0xc43(%rip),%rdi
call   1030 <printf@plt>
jmp    1583 <main+0x463>
lea    0xc39(%rip),%rdi
call   1030 <printf@plt>
jmp    1583 <main+0x463>
lea    0xbe1(%rip),%rdi
call   1030 <printf@plt>
movslq -0xc(%rbp),%rax
imul   $0x66666667,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rax
add    %ecx,%eax
movslq %eax,%rcx
imul   $0x66666667,%rcx,%rdx
mov    %rdx,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rdx
add    %ecx,%edx
add    %edx,%edx
mov    %edx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
mov    %eax,%ecx
mov    %rcx,-0x40(%rbp)
sub    $0x9,%eax
ja     1688 <main+0x568>
mov    -0x40(%rbp),%rax
lea    0xa53(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xb8b(%rip),%rdi
call   1030 <printf@plt>
jmp    1694 <main+0x574>
lea    0xb80(%rip),%rdi
call   1030 <printf@plt>
jmp    1694 <main+0x574>
lea    0xb74(%rip),%rdi
call   1030 <printf@plt>
jmp    1694 <main+0x574>
lea    0xb68(%rip),%rdi
call   1030 <printf@plt>
jmp    1694 <main+0x574>
lea    0xb5e(%rip),%rdi
call   1030 <printf@plt>
jmp    1694 <main+0x574>
lea    0xb53(%rip),%rdi
call   1030 <printf@plt>
jmp    1694 <main+0x574>
lea    0xb48(%rip),%rdi
call   1030 <printf@plt>
jmp    1694 <main+0x574>
lea    0xb3c(%rip),%rdi
call   1030 <printf@plt>
jmp    1694 <main+0x574>
lea    0xb32(%rip),%rdi
call   1030 <printf@plt>
jmp    1694 <main+0x574>
lea    0xb28(%rip),%rdi
call   1030 <printf@plt>
jmp    1694 <main+0x574>
lea    0xad0(%rip),%rdi
call   1030 <printf@plt>
movslq -0xc(%rbp),%rcx
mov    %ecx,%eax
imul   $0x66666667,%rcx,%rdx
mov    %rdx,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rdx
add    %ecx,%edx
add    %edx,%edx
mov    %edx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
mov    %eax,%ecx
mov    %rcx,-0x48(%rbp)
sub    $0x9,%eax
ja     1784 <main+0x664>
mov    -0x48(%rbp),%rax
lea    0x97f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xa8f(%rip),%rdi
call   1030 <printf@plt>
jmp    1790 <main+0x670>
lea    0xa84(%rip),%rdi
call   1030 <printf@plt>
jmp    1790 <main+0x670>
lea    0xa78(%rip),%rdi
call   1030 <printf@plt>
jmp    1790 <main+0x670>
lea    0xa6c(%rip),%rdi
call   1030 <printf@plt>
jmp    1790 <main+0x670>
lea    0xa62(%rip),%rdi
call   1030 <printf@plt>
jmp    1790 <main+0x670>
lea    0xa57(%rip),%rdi
call   1030 <printf@plt>
jmp    1790 <main+0x670>
lea    0xa4c(%rip),%rdi
call   1030 <printf@plt>
jmp    1790 <main+0x670>
lea    0xa40(%rip),%rdi
call   1030 <printf@plt>
jmp    1790 <main+0x670>
lea    0xa36(%rip),%rdi
call   1030 <printf@plt>
jmp    1790 <main+0x670>
lea    0xa2c(%rip),%rdi
call   1030 <printf@plt>
jmp    1790 <main+0x670>
lea    0x9d4(%rip),%rdi
call   1030 <printf@plt>
jmp    1795 <main+0x675>
jmp    179a <main+0x67a>
jmp    179f <main+0x67f>
xor    %eax,%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x10,%rsp
lea    0xf46(%rip),%rdi
call   1030 <puts@plt>
lea    0xeb8(%rip),%rdi
lea    0xc(%rsp),%rsi
call   1050 <scanf@plt>
movslq 0xc(%rsp),%rax
cmp    $0x9,%rax
jg     116e <main+0x3e>
cmp    $0xa,%eax
jae    11b7 <main+0x87>
lea    0x2bcf(%rip),%rcx
jmp    1296 <main+0x166>
cmp    $0x63,%eax
ja     11c3 <main+0x93>
movzbl %al,%eax
imul   $0xcd,%eax,%eax
shr    $0xb,%eax
imul   $0xcd,%eax,%ecx
shr    $0xa,%ecx
and    $0xfffffffe,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %cl,%al
movzbl %al,%eax
add    $0xffffffff,%eax
lea    0xe98(%rip),%rbx
mov    %rbx,%rdi
cmp    $0x8,%eax
ja     1263 <main+0x133>
cltq
lea    0x2bd6(%rip),%rcx
jmp    125f <main+0x12f>
lea    0xe77(%rip),%rbx
jmp    129d <main+0x16d>
cmp    $0x3e7,%eax
ja     12a5 <main+0x175>
movzwl %ax,%eax
shr    $0x2,%eax
imul   $0x147b,%eax,%eax
shr    $0x11,%eax
movzbl %al,%eax
imul   $0xcd,%eax,%ecx
shr    $0xa,%ecx
and    $0xfffffffe,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %cl,%al
movzbl %al,%eax
add    $0xffffffff,%eax
lea    0xe37(%rip),%rbx
mov    %rbx,%rdi
cmp    $0x8,%eax
ja     1213 <main+0xe3>
cltq
lea    0x2b79(%rip),%rcx
mov    (%rcx,%rax,8),%rdi
call   1040 <printf@plt>
movslq 0xc(%rsp),%rax
imul   $0x66666667,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rax
add    %ecx,%eax
cltq
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
mov    %rbx,%rdi
cmp    $0x9,%eax
ja     1263 <main+0x133>
cltq
lea    0x2b71(%rip),%rcx
mov    (%rcx,%rax,8),%rdi
call   1040 <printf@plt>
movslq 0xc(%rsp),%rax
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
cmp    $0xa,%eax
jae    129d <main+0x16d>
cltq
lea    0x2b3a(%rip),%rcx
lea    (%rcx,%rax,8),%rax
mov    (%rax),%rbx
mov    %rbx,%rdi
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbx
ret

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

LLVM IR (-O2):
@.str.1 = [3 x i8] c"%i\00"
@.str.2 = [5 x i8] c"zero\00"
@.str.3 = [4 x i8] c"one\00"
@.str.4 = [4 x i8] c"two\00"
@.str.5 = [6 x i8] c"three\00"
@.str.6 = [5 x i8] c"four\00"
@.str.7 = [5 x i8] c"five\00"
@.str.8 = [4 x i8] c"six\00"
@.str.9 = [6 x i8] c"seven\00"
@.str.10 = [6 x i8] c"eight\00"
@.str.11 = [5 x i8] c"nine\00"
@.str.12 = [17 x i8] c"\C2\B7\C3\87\C2\B7\C2\A8\C3\97\C3\96\C2\B7\C3\BB\00"
@.str.13 = [6 x i8] c"zero \00"
@.str.14 = [5 x i8] c"one \00"
@.str.15 = [5 x i8] c"two \00"
@.str.16 = [7 x i8] c"three \00"
@.str.17 = [6 x i8] c"four \00"
@.str.18 = [6 x i8] c"five \00"
@.str.19 = [5 x i8] c"six \00"
@.str.20 = [7 x i8] c"seven \00"
@.str.21 = [7 x i8] c"eight \00"
@.str.22 = [6 x i8] c"nine \00"
@str = [57 x i8] c"\C3\87\C3\AB\C3\8A\C3\A4\C3\88\C3\AB1000\C3\92\C3\94\C3\84\C3\9A\C2\B5\C3\84\C3\88\C3\8E\C3\92\C3\A2\C3\92\C2\BB\C2\B8\C3\B6\C3\95\C3\BB\C3\8A\C3\BD\C2\A3\C2\BA\00"
@switch.table.main = [10 x i8*] [i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.9, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.11, i64 0, i64 0)]
@switch.table.main.25 = [9 x i8*] [i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.16, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.17, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.18, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.19, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.22, i64 0, i64 0)]
@switch.table.main.27 = [10 x i8*] [i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.15, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.16, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.17, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.18, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.19, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.20, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.21, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.22, i64 0, i64 0)]
define i32 @main() {
%1 = alloca i32
%2 = bitcast i32* %1 to i8*
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @str, i64 0, i64 0))
%4 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %1)
%5 = load i32, i32* %1
%6 = icmp slt i32 %5, 10
br i1 %6, label %7, label %9
7: ; preds = %0
%8 = icmp ult i32 %5, 10
br i1 %8, label %59, label %71
9: ; preds = %0
%10 = icmp ult i32 %5, 100
br i1 %10, label %11, label %28
11: ; preds = %9
%12 = trunc i32 %5 to i8
%13 = udiv i8 %12, 10
%14 = urem i8 %13, 10
%15 = zext i8 %14 to i32
%16 = add nsw i32 %15, -1
%17 = icmp ult i32 %16, 9
br i1 %17, label %18, label %22
18: ; preds = %11
%19 = sext i32 %16 to i64
%20 = getelementptr inbounds [9 x i8*], [9 x i8*]* @switch.table.main.25, i64 0, i64 %19
%21 = load i8*, i8** %20
br label %22
22: ; preds = %11, %18
%23 = phi i8* [ %21, %18 ], [ getelementptr inbounds ([17 x i8], [17 x i8]* @.str.12, i64 0, i64 0), %11 ]
%24 = call i32 @printf(i8* dereferenceable(1) %23)
%25 = load i32, i32* %1
%26 = srem i32 %25, 10
%27 = icmp ult i32 %26, 10
br i1 %27, label %62, label %71
28: ; preds = %9
%29 = icmp ult i32 %5, 1000
br i1 %29, label %30, label %74
30: ; preds = %28
%31 = trunc i32 %5 to i16
%32 = udiv i16 %31, 100
%33 = trunc i16 %32 to i8
%34 = urem i8 %33, 10
%35 = zext i8 %34 to i32
%36 = add nsw i32 %35, -1
%37 = icmp ult i32 %36, 9
br i1 %37, label %38, label %42
38: ; preds = %30
%39 = sext i32 %36 to i64
%40 = getelementptr inbounds [9 x i8*], [9 x i8*]* @switch.table.main.25, i64 0, i64 %39
%41 = load i8*, i8** %40
br label %42
42: ; preds = %30, %38
%43 = phi i8* [ %41, %38 ], [ getelementptr inbounds ([17 x i8], [17 x i8]* @.str.12, i64 0, i64 0), %30 ]
%44 = call i32 @printf(i8* dereferenceable(1) %43)
%45 = load i32, i32* %1
%46 = sdiv i32 %45, 10
%47 = srem i32 %46, 10
%48 = icmp ult i32 %47, 10
br i1 %48, label %49, label %53
49: ; preds = %42
%50 = sext i32 %47 to i64
%51 = getelementptr inbounds [10 x i8*], [10 x i8*]* @switch.table.main.27, i64 0, i64 %50
%52 = load i8*, i8** %51
br label %53
53: ; preds = %42, %49
%54 = phi i8* [ %52, %49 ], [ getelementptr inbounds ([17 x i8], [17 x i8]* @.str.12, i64 0, i64 0), %42 ]
%55 = call i32 @printf(i8* dereferenceable(1) %54)
%56 = load i32, i32* %1
%57 = srem i32 %56, 10
%58 = icmp ult i32 %57, 10
br i1 %58, label %65, label %71
59: ; preds = %7
%60 = sext i32 %5 to i64
%61 = getelementptr inbounds [10 x i8*], [10 x i8*]* @switch.table.main, i64 0, i64 %60
br label %68
62: ; preds = %22
%63 = sext i32 %26 to i64
%64 = getelementptr inbounds [10 x i8*], [10 x i8*]* @switch.table.main.27, i64 0, i64 %63
br label %68
65: ; preds = %53
%66 = sext i32 %57 to i64
%67 = getelementptr inbounds [10 x i8*], [10 x i8*]* @switch.table.main.27, i64 0, i64 %66
br label %68
68: ; preds = %59, %62, %65
%69 = phi i8** [ %67, %65 ], [ %64, %62 ], [ %61, %59 ]
%70 = load i8*, i8** %69
br label %71
71: ; preds = %68, %53, %22, %7
%72 = phi i8* [ getelementptr inbounds ([17 x i8], [17 x i8]* @.str.12, i64 0, i64 0), %7 ], [ getelementptr inbounds ([17 x i8], [17 x i8]* @.str.12, i64 0, i64 0), %22 ], [ getelementptr inbounds ([17 x i8], [17 x i8]* @.str.12, i64 0, i64 0), %53 ], [ %70, %68 ]
%73 = call i32 @printf(i8* dereferenceable(1) %72)
br label %74
74: ; preds = %71, %28
ret i32 0
}