#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 *, char *);
int /*<<< orphan*/ scanf(char *, char *);
int main() {
  char cards[13];
  scanf("%s", cards);
  int counter = 0;
  for (; counter < 13; counter++) {
    switch (cards[counter]) {
    case '2':
      cards[counter] = 2;
      break;
    case '3':
      cards[counter] = 3;
      break;
    case '4':
      cards[counter] = 4;
      break;
    case '5':
      cards[counter] = 5;
      break;
    case '6':
      cards[counter] = 6;
      break;
    case '7':
      cards[counter] = 7;
      break;
    case '8':
      cards[counter] = 8;
      break;
    case '9':
      cards[counter] = 9;
      break;
    case 'T':
      cards[counter] = 10;
      break;
    case 'J':
      cards[counter] = 11;
      break;
    case 'Q':
      cards[counter] = 12;
      break;
    case 'K':
      cards[counter] = 13;
      break;
    case 'A':
      cards[counter] = 14;
      break;
    }
  }
  int c = 0;
  char swap;
  int d;
  int n = 13;
  for (c = 0; c < (n - 1); c++) {
    for (d = 0; d < n - c - 1; d++) {
      if (cards[d] > cards[d + 1]) {
        swap = cards[d];
        cards[d] = cards[d + 1];
        cards[d + 1] = swap;
      }
    }
  }
  counter = 0;
  for (; counter < 13; counter++) {
    switch (cards[counter]) {
    case 2:
      cards[counter] = '2';
      break;
    case 3:
      cards[counter] = '3';
      break;
    case 4:
      cards[counter] = '4';
      break;
    case 5:
      cards[counter] = '5';
      break;
    case 6:
      cards[counter] = '6';
      break;
    case 7:
      cards[counter] = '7';
      break;
    case 8:
      cards[counter] = '8';
      break;
    case 9:
      cards[counter] = '9';
      break;
    case 10:
      cards[counter] = 'T';
      break;
    case 11:
      cards[counter] = 'J';
      break;
    case 12:
      cards[counter] = 'Q';
      break;
    case 13:
      cards[counter] = 'K';
      break;
    case 14:
      cards[counter] = 'A';
      break;
    }
  }
  printf("%s", cards);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x11(%rbp),%rsi
lea    0xf86(%rip),%rdi
call   1040 <scanf@plt>
movl   $0x0,-0x18(%rbp)
cmpl   $0xd,-0x18(%rbp)
jge    1243 <main+0x123>
movslq -0x18(%rbp),%rax
movsbl -0x11(%rbp,%rax,1),%eax
add    $0xffffffce,%eax
mov    %eax,%ecx
mov    %rcx,-0x30(%rbp)
sub    $0x22,%eax
ja     1230 <main+0x110>
mov    -0x30(%rbp),%rax
lea    0xebe(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movslq -0x18(%rbp),%rax
movb   $0x2,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0x3,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0x4,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0x5,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0x6,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0x7,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0x8,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0x9,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0xa,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0xb,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0xc,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0xd,-0x11(%rbp,%rax,1)
jmp    1230 <main+0x110>
movslq -0x18(%rbp),%rax
movb   $0xe,-0x11(%rbp,%rax,1)
jmp    1235 <main+0x115>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1146 <main+0x26>
movl   $0x0,-0x1c(%rbp)
movl   $0xd,-0x28(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x28(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12f7 <main+0x1d7>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x28(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12e4 <main+0x1c4>
movslq -0x24(%rbp),%rax
movsbl -0x11(%rbp,%rax,1),%eax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl -0x11(%rbp,%rcx,1),%ecx
cmp    %ecx,%eax
jle    12d1 <main+0x1b1>
movslq -0x24(%rbp),%rax
mov    -0x11(%rbp,%rax,1),%al
mov    %al,-0x1d(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
cltq
mov    -0x11(%rbp,%rax,1),%cl
movslq -0x24(%rbp),%rax
mov    %cl,-0x11(%rbp,%rax,1)
mov    -0x1d(%rbp),%cl
mov    -0x24(%rbp),%eax
add    $0x1,%eax
cltq
mov    %cl,-0x11(%rbp,%rax,1)
jmp    12d6 <main+0x1b6>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1270 <main+0x150>
jmp    12e9 <main+0x1c9>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1258 <main+0x138>
movl   $0x0,-0x18(%rbp)
cmpl   $0xd,-0x18(%rbp)
jge    13fb <main+0x2db>
movslq -0x18(%rbp),%rax
movsbl -0x11(%rbp,%rax,1),%eax
add    $0xfffffffe,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0xc,%eax
ja     13e8 <main+0x2c8>
mov    -0x38(%rbp),%rax
lea    0xcd2(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movslq -0x18(%rbp),%rax
movb   $0x32,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x33,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x34,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x35,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x36,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x37,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x38,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x39,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x54,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x4a,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x51,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x4b,-0x11(%rbp,%rax,1)
jmp    13e8 <main+0x2c8>
movslq -0x18(%rbp),%rax
movb   $0x41,-0x11(%rbp,%rax,1)
jmp    13ed <main+0x2cd>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12fe <main+0x1de>
lea    -0x11(%rbp),%rsi
lea    0xcba(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
sub    $0x18,%rsp
lea    0xf6b(%rip),%rdi
lea    0xb(%rsp),%r14
mov    %r14,%rsi
call   1040 <scanf@plt>
xor    %eax,%eax
lea    0xebc(%rip),%rcx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsbl 0xb(%rsp,%rax,1),%esi
add    $0xffffffce,%esi
cmp    $0x22,%esi
ja     11a4 <main+0x84>
mov    $0x2,%dl
movslq (%rcx,%rsi,4),%rsi
add    %rcx,%rsi
jmp    *%rsi
mov    $0x3,%dl
jmp    11a0 <main+0x80>
mov    $0x4,%dl
jmp    11a0 <main+0x80>
mov    $0x5,%dl
jmp    11a0 <main+0x80>
mov    $0x6,%dl
jmp    11a0 <main+0x80>
mov    $0x7,%dl
jmp    11a0 <main+0x80>
mov    $0x8,%dl
jmp    11a0 <main+0x80>
mov    $0x9,%dl
jmp    11a0 <main+0x80>
mov    $0xe,%dl
jmp    11a0 <main+0x80>
mov    $0xb,%dl
jmp    11a0 <main+0x80>
mov    $0xd,%dl
jmp    11a0 <main+0x80>
mov    $0xc,%dl
jmp    11a0 <main+0x80>
mov    $0xa,%dl
cs nopw 0x0(%rax,%rax,1)
mov    %dl,0xb(%rsp,%rax,1)
add    $0x1,%rax
cmp    $0xd,%rax
jne    1150 <main+0x30>
mov    $0xc,%r8d
xor    %ecx,%ecx
jmp    11d1 <main+0xb1>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rcx
add    $0xffffffffffffffff,%r8
cmp    $0xc,%ecx
je     1253 <main+0x133>
mov    0xb(%rsp),%al
cmp    $0xb,%rcx
jne    1200 <main+0xe0>
xor    %ebx,%ebx
test   $0x1,%r8b
je     11c0 <main+0xa0>
mov    0x1(%rbx,%r14,1),%dl
cmp    %dl,%al
jle    11c0 <main+0xa0>
mov    %dl,0xb(%rsp,%rbx,1)
mov    %al,0xc(%rsp,%rbx,1)
jmp    11c0 <main+0xa0>
cs nopw 0x0(%rax,%rax,1)
mov    %r8,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %edi,%edi
jmp    1220 <main+0x100>
nopl   0x0(%rax,%rax,1)
mov    %dl,0xc(%rsp,%rdi,1)
mov    %al,0xd(%rsp,%rdi,1)
mov    %rbx,%rdi
cmp    %rbx,%rsi
je     11dd <main+0xbd>
movzbl 0xc(%rsp,%rdi,1),%edx
cmp    %dl,%al
jle    1240 <main+0x120>
mov    %dl,0xb(%rsp,%rdi,1)
mov    %al,0xc(%rsp,%rdi,1)
jmp    1242 <main+0x122>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %edx,%eax
lea    0x2(%rdi),%rbx
movzbl 0xd(%rsp,%rdi,1),%edx
cmp    %dl,%al
jg     1210 <main+0xf0>
mov    %edx,%eax
jmp    1218 <main+0xf8>
movsbq 0xb(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     1270 <main+0x150>
lea    0xe23(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0xb(%rsp)
movsbq 0xc(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     128d <main+0x16d>
lea    0xe06(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0xc(%rsp)
movsbq 0xd(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     12aa <main+0x18a>
lea    0xde9(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0xd(%rsp)
movsbq 0xe(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     12c7 <main+0x1a7>
lea    0xdcc(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0xe(%rsp)
movsbq 0xf(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     12e4 <main+0x1c4>
lea    0xdaf(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0xf(%rsp)
movsbq 0x10(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     1301 <main+0x1e1>
lea    0xd92(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0x10(%rsp)
movsbq 0x11(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     131e <main+0x1fe>
lea    0xd75(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0x11(%rsp)
movsbq 0x12(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     133b <main+0x21b>
lea    0xd58(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0x12(%rsp)
movsbq 0x13(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     1358 <main+0x238>
lea    0xd3b(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0x13(%rsp)
movsbq 0x14(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     1375 <main+0x255>
lea    0xd1e(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0x14(%rsp)
movsbq 0x15(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     1392 <main+0x272>
lea    0xd01(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0x15(%rsp)
movsbq 0x16(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     13af <main+0x28f>
lea    0xce4(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0x16(%rsp)
movsbq 0x17(%rsp),%rax
add    $0xfffffffffffffffe,%rax
cmp    $0xc,%eax
ja     13cc <main+0x2ac>
lea    0xcc7(%rip),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,0x17(%rsp)
lea    0xcc6(%rip),%rdi
lea    0xb(%rsp),%rsi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r14
ret

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

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