#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 *, char *);
int strlen(char *);
int main() {
  char ISBN13[20];
  int ISBN13_i[13];
  int n, i;
  scanf("%s", ISBN13);
  for (i = 0, n = 0; n < 17; n++) {
    if (ISBN13[n] != '-') {
      ISBN13_i[i] = ISBN13[n] - '0';
      i++;
    }
  }
  n = strlen(ISBN13);
  if (n == 17) {
    if (ISBN13[0] == '9' && ISBN13[1] == '7' &&
        (ISBN13[2] == '8' || ISBN13[2] == '9')) {
      n = ISBN13_i[0] + 3 * ISBN13_i[1] + ISBN13_i[2] + 3 * ISBN13_i[3] +
          ISBN13_i[4] + 3 * ISBN13_i[5] + ISBN13_i[6] + 3 * ISBN13_i[7] +
          ISBN13_i[8] + 3 * ISBN13_i[9] + ISBN13_i[10] + 3 * ISBN13_i[11];
      n = n % 10;
      n = 10 - n;
      if (n == ISBN13_i[12]) {
        i = 4;
        while (ISBN13[i] != '-') {
          i++;
        }
        if (ISBN13[i + 1] == '9' && ISBN13[i + 2] == '3' &&
            ISBN13[i + 3] == '3' && ISBN13[i + 4] == '3' &&
            ISBN13[i + 5] == '4' && ISBN13[i + 6] == '6') {
          printf("1\nBluebridge");
        } else {
          if (ISBN13[i + 1] == '5' && ISBN13[i + 2] == '5' &&
              ISBN13[i + 3] == '5' && ISBN13[i + 4] == '8' &&
              ISBN13[i + 5] == '3') {
            printf("1\nAlyson Books");
          } else {
            if (ISBN13[i + 1] == '4' && ISBN13[i + 2] == '2' &&
                ISBN13[i + 3] == '1' && ISBN13[i + 4] == '0') {
              printf("1\nFUNimation Productions, Ltd.");
            } else {
              if (ISBN13[i + 1] == '0' && ISBN13[i + 2] == '1') {
                printf("1\nPyramid Books");
              } else {
                printf("1");
              }
            }
          }
        }
      } else {
        printf("0");
      }
    } else {
      printf("0");
    }
  } else {
    printf("0");
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x20(%rbp),%rsi
lea    0xeb6(%rip),%rdi
call   1050 <scanf@plt>
movl   $0x0,-0x68(%rbp)
movl   $0x0,-0x64(%rbp)
cmpl   $0x11,-0x64(%rbp)
jge    11a9 <main+0x79>
movslq -0x64(%rbp),%rax
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x2d,%eax
je     1196 <main+0x66>
movslq -0x64(%rbp),%rax
movsbl -0x20(%rbp,%rax,1),%ecx
sub    $0x30,%ecx
movslq -0x68(%rbp),%rax
mov    %ecx,-0x60(%rbp,%rax,4)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    119b <main+0x6b>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    115d <main+0x2d>
lea    -0x20(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x64(%rbp)
cmpl   $0x11,-0x64(%rbp)
jne    1474 <main+0x344>
movsbl -0x20(%rbp),%eax
cmp    $0x39,%eax
jne    1463 <main+0x333>
movsbl -0x1f(%rbp),%eax
cmp    $0x37,%eax
jne    1463 <main+0x333>
movsbl -0x1e(%rbp),%eax
cmp    $0x38,%eax
je     11f3 <main+0xc3>
movsbl -0x1e(%rbp),%eax
cmp    $0x39,%eax
jne    1463 <main+0x333>
mov    -0x60(%rbp),%eax
imul   $0x3,-0x5c(%rbp),%ecx
add    %ecx,%eax
add    -0x58(%rbp),%eax
imul   $0x3,-0x54(%rbp),%ecx
add    %ecx,%eax
add    -0x50(%rbp),%eax
imul   $0x3,-0x4c(%rbp),%ecx
add    %ecx,%eax
add    -0x48(%rbp),%eax
imul   $0x3,-0x44(%rbp),%ecx
add    %ecx,%eax
add    -0x40(%rbp),%eax
imul   $0x3,-0x3c(%rbp),%ecx
add    %ecx,%eax
add    -0x38(%rbp),%eax
imul   $0x3,-0x34(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x64(%rbp)
mov    $0xa,%eax
sub    -0x64(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    1452 <main+0x322>
movl   $0x4,-0x68(%rbp)
movslq -0x68(%rbp),%rax
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x2d,%eax
je     1278 <main+0x148>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    1258 <main+0x128>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x39,%eax
jne    130d <main+0x1dd>
mov    -0x68(%rbp),%eax
add    $0x2,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x33,%eax
jne    130d <main+0x1dd>
mov    -0x68(%rbp),%eax
add    $0x3,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x33,%eax
jne    130d <main+0x1dd>
mov    -0x68(%rbp),%eax
add    $0x4,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x33,%eax
jne    130d <main+0x1dd>
mov    -0x68(%rbp),%eax
add    $0x5,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x34,%eax
jne    130d <main+0x1dd>
mov    -0x68(%rbp),%eax
add    $0x6,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x36,%eax
jne    130d <main+0x1dd>
lea    0xd00(%rip),%rdi
call   1040 <printf@plt>
jmp    144d <main+0x31d>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x35,%eax
jne    138c <main+0x25c>
mov    -0x68(%rbp),%eax
add    $0x2,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x35,%eax
jne    138c <main+0x25c>
mov    -0x68(%rbp),%eax
add    $0x3,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x35,%eax
jne    138c <main+0x25c>
mov    -0x68(%rbp),%eax
add    $0x4,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x38,%eax
jne    138c <main+0x25c>
mov    -0x68(%rbp),%eax
add    $0x5,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x33,%eax
jne    138c <main+0x25c>
lea    0xc8e(%rip),%rdi
call   1040 <printf@plt>
jmp    1448 <main+0x318>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x34,%eax
jne    13f5 <main+0x2c5>
mov    -0x68(%rbp),%eax
add    $0x2,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x32,%eax
jne    13f5 <main+0x2c5>
mov    -0x68(%rbp),%eax
add    $0x3,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x31,%eax
jne    13f5 <main+0x2c5>
mov    -0x68(%rbp),%eax
add    $0x4,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x30,%eax
jne    13f5 <main+0x2c5>
lea    0xc34(%rip),%rdi
call   1040 <printf@plt>
jmp    1443 <main+0x313>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x30,%eax
jne    1432 <main+0x302>
mov    -0x68(%rbp),%eax
add    $0x2,%eax
cltq
movsbl -0x20(%rbp,%rax,1),%eax
cmp    $0x31,%eax
jne    1432 <main+0x302>
lea    0xc16(%rip),%rdi
call   1040 <printf@plt>
jmp    143e <main+0x30e>
lea    0xc15(%rip),%rdi
call   1040 <printf@plt>
jmp    1443 <main+0x313>
jmp    1448 <main+0x318>
jmp    144d <main+0x31d>
jmp    145e <main+0x32e>
lea    0xbf7(%rip),%rdi
call   1040 <printf@plt>
jmp    146f <main+0x33f>
lea    0xbe6(%rip),%rdi
call   1040 <printf@plt>
jmp    1480 <main+0x350>
lea    0xbd5(%rip),%rdi
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x58,%rsp
lea    0xedd(%rip),%rdi
mov    %rsp,%rsi
call   1060 <scanf@plt>
xor    %eax,%eax
xor    %ecx,%ecx
jmp    1164 <main+0x24>
nopl   0x0(%rax)
add    $0x2,%rax
movsbl (%rsp,%rax,1),%edx
cmp    $0x2d,%edx
je     117a <main+0x3a>
add    $0xffffffd0,%edx
movslq %ecx,%rcx
mov    %edx,0x20(%rsp,%rcx,4)
add    $0x1,%ecx
cmp    $0x10,%rax
je     1199 <main+0x59>
movsbl 0x1(%rsp,%rax,1),%edx
cmp    $0x2d,%edx
je     1160 <main+0x20>
add    $0xffffffd0,%edx
movslq %ecx,%rcx
mov    %edx,0x20(%rsp,%rcx,4)
add    $0x1,%ecx
jmp    1160 <main+0x20>
mov    %rsp,%rdi
call   1040 <strlen@plt>
cmp    $0x11,%eax
jne    1299 <main+0x159>
cmpb   $0x39,(%rsp)
jne    1299 <main+0x159>
cmpb   $0x37,0x1(%rsp)
jne    1299 <main+0x159>
mov    0x2(%rsp),%al
and    $0xfe,%al
cmp    $0x38,%al
jne    1299 <main+0x159>
movq   0x20(%rsp),%xmm0
movq   0x28(%rsp),%xmm1
paddd  %xmm0,%xmm1
movq   0x30(%rsp),%xmm0
movq   0x38(%rsp),%xmm2
paddd  %xmm0,%xmm2
paddd  %xmm1,%xmm2
movq   0x40(%rsp),%xmm0
movq   0x48(%rsp),%xmm1
paddd  %xmm0,%xmm1
paddd  %xmm2,%xmm1
pshufd $0x55,%xmm1,%xmm0
movd   %xmm0,%eax
lea    (%rax,%rax,2),%eax
movd   %xmm1,%ecx
add    %eax,%ecx
movslq %ecx,%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    %eax,%ecx
add    $0xa,%ecx
cmp    0x50(%rsp),%ecx
jne    1299 <main+0x159>
mov    $0x4,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmpb   $0x2d,(%rsp,%rax,1)
lea    0x1(%rax),%rax
jne    1250 <main+0x110>
mov    %eax,%ecx
mov    (%rsp,%rcx,1),%cl
add    $0xd0,%cl
cmp    $0x9,%cl
ja     134b <main+0x20b>
movzbl %cl,%ecx
lea    0xd8b(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
add    $0x1,%eax
cmpb   $0x31,(%rsp,%rax,1)
jne    134b <main+0x20b>
lea    0xdd4(%rip),%rdi
call   1050 <printf@plt>
jmp    12a3 <main+0x163>
mov    $0x30,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
add    $0x58,%rsp
ret
lea    0x1(%rax),%ecx
cmpb   $0x32,(%rsp,%rcx,1)
jne    134b <main+0x20b>
lea    0x2(%rax),%ecx
cmpb   $0x31,(%rsp,%rcx,1)
jne    134b <main+0x20b>
add    $0x3,%eax
cmpb   $0x30,(%rsp,%rax,1)
jne    134b <main+0x20b>
lea    0xd73(%rip),%rdi
call   1050 <printf@plt>
jmp    12a3 <main+0x163>
lea    0x1(%rax),%ecx
cmpb   $0x35,(%rsp,%rcx,1)
jne    134b <main+0x20b>
lea    0x2(%rax),%ecx
cmpb   $0x35,(%rsp,%rcx,1)
jne    134b <main+0x20b>
lea    0x3(%rax),%ecx
cmpb   $0x38,(%rsp,%rcx,1)
jne    134b <main+0x20b>
add    $0x4,%eax
cmpb   $0x33,(%rsp,%rax,1)
jne    134b <main+0x20b>
lea    0xd32(%rip),%rdi
call   1050 <printf@plt>
jmp    12a3 <main+0x163>
lea    0x1(%rax),%ecx
cmpb   $0x33,(%rsp,%rcx,1)
jne    134b <main+0x20b>
lea    0x2(%rax),%ecx
cmpb   $0x33,(%rsp,%rcx,1)
jne    134b <main+0x20b>
lea    0x3(%rax),%ecx
cmpb   $0x33,(%rsp,%rcx,1)
jne    134b <main+0x20b>
lea    0x4(%rax),%ecx
cmpb   $0x34,(%rsp,%rcx,1)
jne    134b <main+0x20b>
add    $0x5,%eax
cmpb   $0x36,(%rsp,%rax,1)
jne    134b <main+0x20b>
lea    0xcea(%rip),%rdi
call   1050 <printf@plt>
jmp    12a3 <main+0x163>
mov    $0x31,%edi
jmp    129e <main+0x15e>

LLVM IR (-O0):
@.str = [3 x i8] c"%s\00"
@.str.1 = [13 x i8] c"1\0ABluebridge\00"
@.str.2 = [15 x i8] c"1\0AAlyson Books\00"
@.str.3 = [31 x i8] c"1\0AFUNimation Productions, Ltd.\00"
@.str.4 = [16 x i8] c"1\0APyramid Books\00"
@.str.5 = [2 x i8] c"1\00"
@.str.6 = [2 x i8] c"0\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [20 x i8]
%3 = alloca [13 x i32]
%4 = alloca i32
%5 = alloca i32
store i32 0, i32* %1
%6 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 0
%7 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8* %6)
store i32 0, i32* %5
store i32 0, i32* %4
br label %8
8: ; preds = %31, %0
%9 = load i32, i32* %4
%10 = icmp slt i32 %9, 17
br i1 %10, label %11, label %34
11: ; preds = %8
%12 = load i32, i32* %4
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %13
%15 = load i8, i8* %14
%16 = sext i8 %15 to i32
%17 = icmp ne i32 %16, 45
br i1 %17, label %18, label %30
18: ; preds = %11
%19 = load i32, i32* %4
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %20
%22 = load i8, i8* %21
%23 = sext i8 %22 to i32
%24 = sub nsw i32 %23, 48
%25 = load i32, i32* %5
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 %26
store i32 %24, i32* %27
%28 = load i32, i32* %5
%29 = add nsw i32 %28, 1
store i32 %29, i32* %5
br label %30
30: ; preds = %18, %11
br label %31
31: ; preds = %30
%32 = load i32, i32* %4
%33 = add nsw i32 %32, 1
store i32 %33, i32* %4
br label %8
34: ; preds = %8
%35 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 0
%36 = call i32 @strlen(i8* %35)
store i32 %36, i32* %4
%37 = load i32, i32* %4
%38 = icmp eq i32 %37, 17
br i1 %38, label %39, label %276
39: ; preds = %34
%40 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 0
%41 = load i8, i8* %40
%42 = sext i8 %41 to i32
%43 = icmp eq i32 %42, 57
br i1 %43, label %44, label %273
44: ; preds = %39
%45 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 1
%46 = load i8, i8* %45
%47 = sext i8 %46 to i32
%48 = icmp eq i32 %47, 55
br i1 %48, label %49, label %273
49: ; preds = %44
%50 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 2
%51 = load i8, i8* %50
%52 = sext i8 %51 to i32
%53 = icmp eq i32 %52, 56
br i1 %53, label %59, label %54
54: ; preds = %49
%55 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 2
%56 = load i8, i8* %55
%57 = sext i8 %56 to i32
%58 = icmp eq i32 %57, 57
br i1 %58, label %59, label %273
59: ; preds = %54, %49
%60 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 0
%61 = load i32, i32* %60
%62 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 1
%63 = load i32, i32* %62
%64 = mul nsw i32 3, %63
%65 = add nsw i32 %61, %64
%66 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 2
%67 = load i32, i32* %66
%68 = add nsw i32 %65, %67
%69 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 3
%70 = load i32, i32* %69
%71 = mul nsw i32 3, %70
%72 = add nsw i32 %68, %71
%73 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 4
%74 = load i32, i32* %73
%75 = add nsw i32 %72, %74
%76 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 5
%77 = load i32, i32* %76
%78 = mul nsw i32 3, %77
%79 = add nsw i32 %75, %78
%80 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 6
%81 = load i32, i32* %80
%82 = add nsw i32 %79, %81
%83 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 7
%84 = load i32, i32* %83
%85 = mul nsw i32 3, %84
%86 = add nsw i32 %82, %85
%87 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 8
%88 = load i32, i32* %87
%89 = add nsw i32 %86, %88
%90 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 9
%91 = load i32, i32* %90
%92 = mul nsw i32 3, %91
%93 = add nsw i32 %89, %92
%94 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 10
%95 = load i32, i32* %94
%96 = add nsw i32 %93, %95
%97 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 11
%98 = load i32, i32* %97
%99 = mul nsw i32 3, %98
%100 = add nsw i32 %96, %99
store i32 %100, i32* %4
%101 = load i32, i32* %4
%102 = srem i32 %101, 10
store i32 %102, i32* %4
%103 = load i32, i32* %4
%104 = sub nsw i32 10, %103
store i32 %104, i32* %4
%105 = load i32, i32* %4
%106 = getelementptr inbounds [13 x i32], [13 x i32]* %3, i64 0, i64 12
%107 = load i32, i32* %106
%108 = icmp eq i32 %105, %107
br i1 %108, label %109, label %270
109: ; preds = %59
store i32 4, i32* %5
br label %110
110: ; preds = %117, %109
%111 = load i32, i32* %5
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %112
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = icmp ne i32 %115, 45
br i1 %116, label %117, label %120
117: ; preds = %110
%118 = load i32, i32* %5
%119 = add nsw i32 %118, 1
store i32 %119, i32* %5
br label %110
120: ; preds = %110
%121 = load i32, i32* %5
%122 = add nsw i32 %121, 1
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %123
%125 = load i8, i8* %124
%126 = sext i8 %125 to i32
%127 = icmp eq i32 %126, 57
br i1 %127, label %128, label %170
128: ; preds = %120
%129 = load i32, i32* %5
%130 = add nsw i32 %129, 2
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %131
%133 = load i8, i8* %132
%134 = sext i8 %133 to i32
%135 = icmp eq i32 %134, 51
br i1 %135, label %136, label %170
136: ; preds = %128
%137 = load i32, i32* %5
%138 = add nsw i32 %137, 3
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %139
%141 = load i8, i8* %140
%142 = sext i8 %141 to i32
%143 = icmp eq i32 %142, 51
br i1 %143, label %144, label %170
144: ; preds = %136
%145 = load i32, i32* %5
%146 = add nsw i32 %145, 4
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %147
%149 = load i8, i8* %148
%150 = sext i8 %149 to i32
%151 = icmp eq i32 %150, 51
br i1 %151, label %152, label %170
152: ; preds = %144
%153 = load i32, i32* %5
%154 = add nsw i32 %153, 5
%155 = sext i32 %154 to i64
%156 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %155
%157 = load i8, i8* %156
%158 = sext i8 %157 to i32
%159 = icmp eq i32 %158, 52
br i1 %159, label %160, label %170
160: ; preds = %152
%161 = load i32, i32* %5
%162 = add nsw i32 %161, 6
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %163
%165 = load i8, i8* %164
%166 = sext i8 %165 to i32
%167 = icmp eq i32 %166, 54
br i1 %167, label %168, label %170
168: ; preds = %160
%169 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
br label %269
170: ; preds = %160, %152, %144, %136, %128, %120
%171 = load i32, i32* %5
%172 = add nsw i32 %171, 1
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %173
%175 = load i8, i8* %174
%176 = sext i8 %175 to i32
%177 = icmp eq i32 %176, 53
br i1 %177, label %178, label %212
178: ; preds = %170
%179 = load i32, i32* %5
%180 = add nsw i32 %179, 2
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %181
%183 = load i8, i8* %182
%184 = sext i8 %183 to i32
%185 = icmp eq i32 %184, 53
br i1 %185, label %186, label %212
186: ; preds = %178
%187 = load i32, i32* %5
%188 = add nsw i32 %187, 3
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %189
%191 = load i8, i8* %190
%192 = sext i8 %191 to i32
%193 = icmp eq i32 %192, 53
br i1 %193, label %194, label %212
194: ; preds = %186
%195 = load i32, i32* %5
%196 = add nsw i32 %195, 4
%197 = sext i32 %196 to i64
%198 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %197
%199 = load i8, i8* %198
%200 = sext i8 %199 to i32
%201 = icmp eq i32 %200, 56
br i1 %201, label %202, label %212
202: ; preds = %194
%203 = load i32, i32* %5
%204 = add nsw i32 %203, 5
%205 = sext i32 %204 to i64
%206 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %205
%207 = load i8, i8* %206
%208 = sext i8 %207 to i32
%209 = icmp eq i32 %208, 51
br i1 %209, label %210, label %212
210: ; preds = %202
%211 = call i32 @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.2, i64 0, i64 0))
br label %268
212: ; preds = %202, %194, %186, %178, %170
%213 = load i32, i32* %5
%214 = add nsw i32 %213, 1
%215 = sext i32 %214 to i64
%216 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %215
%217 = load i8, i8* %216
%218 = sext i8 %217 to i32
%219 = icmp eq i32 %218, 52
br i1 %219, label %220, label %246
220: ; preds = %212
%221 = load i32, i32* %5
%222 = add nsw i32 %221, 2
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %223
%225 = load i8, i8* %224
%226 = sext i8 %225 to i32
%227 = icmp eq i32 %226, 50
br i1 %227, label %228, label %246
228: ; preds = %220
%229 = load i32, i32* %5
%230 = add nsw i32 %229, 3
%231 = sext i32 %230 to i64
%232 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %231
%233 = load i8, i8* %232
%234 = sext i8 %233 to i32
%235 = icmp eq i32 %234, 49
br i1 %235, label %236, label %246
236: ; preds = %228
%237 = load i32, i32* %5
%238 = add nsw i32 %237, 4
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %239
%241 = load i8, i8* %240
%242 = sext i8 %241 to i32
%243 = icmp eq i32 %242, 48
br i1 %243, label %244, label %246
244: ; preds = %236
%245 = call i32 @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.3, i64 0, i64 0))
br label %267
246: ; preds = %236, %228, %220, %212
%247 = load i32, i32* %5
%248 = add nsw i32 %247, 1
%249 = sext i32 %248 to i64
%250 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %249
%251 = load i8, i8* %250
%252 = sext i8 %251 to i32
%253 = icmp eq i32 %252, 48
br i1 %253, label %254, label %264
254: ; preds = %246
%255 = load i32, i32* %5
%256 = add nsw i32 %255, 2
%257 = sext i32 %256 to i64
%258 = getelementptr inbounds [20 x i8], [20 x i8]* %2, i64 0, i64 %257
%259 = load i8, i8* %258
%260 = sext i8 %259 to i32
%261 = icmp eq i32 %260, 49
br i1 %261, label %262, label %264
262: ; preds = %254
%263 = call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.4, i64 0, i64 0))
br label %266
264: ; preds = %254, %246
%265 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
br label %266
266: ; preds = %264, %262
br label %267
267: ; preds = %266, %244
br label %268
268: ; preds = %267, %210
br label %269
269: ; preds = %268, %168
br label %272
270: ; preds = %59
%271 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0))
br label %272
272: ; preds = %270, %269
br label %275
273: ; preds = %54, %44, %39
%274 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0))
br label %275
275: ; preds = %273, %272
br label %278
276: ; preds = %34
%277 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0))
br label %278
278: ; preds = %276, %275
ret i32 0
}

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