#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 main() {
  char card[1];
  printf("Card: ");
  scanf("%2s", &card);
  switch (card[0]) {
  case '2':
    printf("yes\n");
    break;
  case '3':
    printf("yes\n");
    break;
  case '4':
    printf("yes\n");
    break;
  case '5':
    printf("yes\n");
    break;
  case '6':
    printf("yes\n");
    break;
  case '7':
    printf("yes\n");
    break;
  case '8':
    printf("yes\n");
    break;
  case '9':
    printf("yes\n");
    break;
  case '10':
    printf("yes\n");
    break;
  case 'J':
    printf("yes\n");
    break;
  case 'Q':
    printf("yes\n");
    break;
  case 'K':
    printf("yes\n");
    break;
  case 'A':
    printf("yes\n");
    break;
  default:
    printf("no\n");
    break;
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeca(%rip),%rdi
call   1030 <printf@plt>
lea    0xec5(%rip),%rdi
lea    -0x5(%rbp),%rsi
call   1040 <scanf@plt>
movsbl -0x5(%rbp),%eax
mov    %eax,-0xc(%rbp)
sub    $0x32,%eax
je     122e <main+0x10e>
jmp    1160 <main+0x40>
mov    -0xc(%rbp),%eax
sub    $0x33,%eax
je     123f <main+0x11f>
jmp    1171 <main+0x51>
mov    -0xc(%rbp),%eax
sub    $0x34,%eax
je     1250 <main+0x130>
jmp    1182 <main+0x62>
mov    -0xc(%rbp),%eax
sub    $0x35,%eax
je     1261 <main+0x141>
jmp    1193 <main+0x73>
mov    -0xc(%rbp),%eax
sub    $0x36,%eax
je     1272 <main+0x152>
jmp    11a4 <main+0x84>
mov    -0xc(%rbp),%eax
sub    $0x37,%eax
je     1283 <main+0x163>
jmp    11b5 <main+0x95>
mov    -0xc(%rbp),%eax
sub    $0x38,%eax
je     1294 <main+0x174>
jmp    11c6 <main+0xa6>
mov    -0xc(%rbp),%eax
sub    $0x39,%eax
je     12a5 <main+0x185>
jmp    11d7 <main+0xb7>
mov    -0xc(%rbp),%eax
sub    $0x41,%eax
je     12fa <main+0x1da>
jmp    11e8 <main+0xc8>
mov    -0xc(%rbp),%eax
sub    $0x4a,%eax
je     12c7 <main+0x1a7>
jmp    11f9 <main+0xd9>
mov    -0xc(%rbp),%eax
sub    $0x4b,%eax
je     12e9 <main+0x1c9>
jmp    120a <main+0xea>
mov    -0xc(%rbp),%eax
sub    $0x51,%eax
je     12d8 <main+0x1b8>
jmp    121b <main+0xfb>
mov    -0xc(%rbp),%eax
sub    $0x3130,%eax
je     12b6 <main+0x196>
jmp    130b <main+0x1eb>
lea    0xdd6(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xdc5(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xdb4(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xda3(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xd92(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xd81(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xd70(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xd5f(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xd4e(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xd3d(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xd2c(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xd1b(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xd0a(%rip),%rdi
call   1030 <printf@plt>
jmp    1317 <main+0x1f7>
lea    0xcfe(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
lea    0xec8(%rip),%rdi
call   1040 <printf@plt>
lea    0xec3(%rip),%rdi
lea    0x7(%rsp),%rsi
call   1050 <scanf@plt>
movsbl 0x7(%rsp),%eax
add    $0xffffffce,%eax
cmp    $0x1f,%eax
ja     1175 <main+0x45>
mov    $0x830080ff,%ecx
bt     %eax,%ecx
jae    1175 <main+0x45>
lea    0xe9f(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
pop    %rcx
ret
lea    0xe93(%rip),%rdi
jmp    116c <main+0x3c>

LLVM IR (-O0):
@.str = [7 x i8] c"Card: \00"
@.str.1 = [4 x i8] c"%2s\00"
@.str.2 = [5 x i8] c"yes\0A\00"
@.str.3 = [4 x i8] c"no\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [1 x i8]
store i32 0, i32* %1
%3 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%4 = bitcast [1 x i8]* %2 to i8**
%5 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i8** %4)
%6 = getelementptr inbounds [1 x i8], [1 x i8]* %2, i64 0, i64 0
%7 = load i8, i8* %6
%8 = sext i8 %7 to i32
switch i32 %8, label %35 [
i32 50, label %9
i32 51, label %11
i32 52, label %13
i32 53, label %15
i32 54, label %17
i32 55, label %19
i32 56, label %21
i32 57, label %23
i32 12592, label %25
i32 74, label %27
i32 81, label %29
i32 75, label %31
i32 65, label %33
]
9: ; preds = %0
%10 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
11: ; preds = %0
%12 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
13: ; preds = %0
%14 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
15: ; preds = %0
%16 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
17: ; preds = %0
%18 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
19: ; preds = %0
%20 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
21: ; preds = %0
%22 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
23: ; preds = %0
%24 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
25: ; preds = %0
%26 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
27: ; preds = %0
%28 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
29: ; preds = %0
%30 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
31: ; preds = %0
%32 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
33: ; preds = %0
%34 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
br label %37
35: ; preds = %0
%36 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
br label %37
37: ; preds = %35, %33, %31, %29, %27, %25, %23, %21, %19, %17, %15, %13, %11, %9
ret i32 0
}

LLVM IR (-O2):
@.str = [7 x i8] c"Card: \00"
@.str.1 = [4 x i8] c"%2s\00"
@str.14 = [4 x i8] c"yes\00"
@str.15 = [3 x i8] c"no\00"
define i32 @main() {
%1 = alloca [1 x i8]
%2 = getelementptr inbounds [1 x i8], [1 x i8]* %1, i64 0, i64 0
%3 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0))
%4 = bitcast [1 x i8]* %1 to i8**
%5 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i8** %4)
%6 = load i8, i8* %2
%7 = sext i8 %6 to i32
switch i32 %7, label %19 [
i32 50, label %20
i32 51, label %8
i32 52, label %9
i32 53, label %10
i32 54, label %11
i32 55, label %12
i32 56, label %13
i32 57, label %14
i32 65, label %18
i32 74, label %15
i32 81, label %16
i32 75, label %17
]
8: ; preds = %0
br label %20
9: ; preds = %0
br label %20
10: ; preds = %0
br label %20
11: ; preds = %0
br label %20
12: ; preds = %0
br label %20
13: ; preds = %0
br label %20
14: ; preds = %0
br label %20
15: ; preds = %0
br label %20
16: ; preds = %0
br label %20
17: ; preds = %0
br label %20
18: ; preds = %0
br label %20
19: ; preds = %0
br label %20
20: ; preds = %0, %19, %18, %17, %16, %15, %14, %13, %12, %11, %10, %9, %8
%21 = phi i8* [ getelementptr inbounds ([3 x i8], [3 x i8]* @str.15, i64 0, i64 0), %19 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %18 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %17 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %16 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %15 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %14 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %13 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %12 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %11 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %10 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %9 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %8 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @str.14, i64 0, i64 0), %0 ]
%22 = call i32 @puts(i8* dereferenceable(1) %21)
ret i32 0
}