#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*/ fgets(char *, int, int /*<<< orphan*/);
int /*<<< orphan*/ printf(char *, char *);
int /*<<< orphan*/ stdin;
int strlen(char *);
int main() {
  char s[13];
  int p[13], cont, change, k = 0, swap, h, i;
  fgets(s, 1000, stdin);
  h = strlen(s);
  for (i = 0; i < h; i++) {
    switch (s[i]) {
    case '2':
      p[i] = 1;
      break;
    case '3':
      p[i] = 2;
      break;
    case '4':
      p[i] = 3;
      break;
    case '5':
      p[i] = 4;
      break;
    case '6':
      p[i] = 5;
      break;
    case '7':
      p[i] = 6;
      break;
    case '8':
      p[i] = 7;
      break;
    case '9':
      p[i] = 8;
      break;
    case 'T':
      p[i] = 9;
      break;
    case 'J':
      p[i] = 10;
      break;
    case 'Q':
      p[i] = 11;
      break;
    case 'K':
      p[i] = 12;
      break;
    case 'A':
      p[i] = 13;
      break;
    }
  }
  for (cont = 1; cont > 0; change = 0, k++) {
    for (i = 0; i < h; i++) {
      if (p[i] > p[i + 1]) {
        swap = p[i];
        p[i] = p[i + 1];
        p[i + 1] = swap;
        change++;
      }
      if (i == h - 1 && change > 0) {
        cont = 1;
      } else {
        cont = 0;
      }
    }
  }
  for (i = 0; i < h; i++) {
    switch (p[i]) {
    case 1:
      s[i] = '2';
      break;
    case 2:
      s[i] = '3';
      break;
    case 3:
      s[i] = '4';
      break;
    case 4:
      s[i] = '5';
      break;
    case 5:
      s[i] = '6';
      break;
    case 6:
      s[i] = '7';
      break;
    case 7:
      s[i] = '8';
      break;
    case 8:
      s[i] = '9';
      break;
    case 9:
      s[i] = 'T';
      break;
    case 10:
      s[i] = 'J';
      break;
    case 11:
      s[i] = 'Q';
      break;
    case 12:
      s[i] = 'K';
      break;
    case 13:
      s[i] = 'A';
      break;
    }
  }
  printf("%s", s);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x5c(%rbp)
lea    -0x11(%rbp),%rdi
mov    0x2e94(%rip),%rax
mov    (%rax),%edx
mov    $0x3e8,%esi
call   1050 <fgets@plt>
lea    -0x11(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x64(%rbp)
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x64(%rbp),%eax
jge    1299 <main+0x169>
movslq -0x68(%rbp),%rax
movsbl -0x11(%rbp,%rax,1),%eax
add    $0xffffffce,%eax
mov    %eax,%ecx
mov    %rcx,-0x70(%rbp)
sub    $0x22,%eax
ja     1286 <main+0x156>
mov    -0x70(%rbp),%rax
lea    0xe8f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movslq -0x68(%rbp),%rax
movl   $0x1,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0x2,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0x3,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0x4,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0x5,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0x6,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0x7,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0x8,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0x9,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0xa,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0xb,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0xc,-0x50(%rbp,%rax,4)
jmp    1286 <main+0x156>
movslq -0x68(%rbp),%rax
movl   $0xd,-0x50(%rbp,%rax,4)
jmp    128b <main+0x15b>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    1173 <main+0x43>
movl   $0x1,-0x54(%rbp)
cmpl   $0x0,-0x54(%rbp)
jle    136a <main+0x23a>
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x64(%rbp),%eax
jge    1350 <main+0x220>
movslq -0x68(%rbp),%rax
mov    -0x50(%rbp,%rax,4),%eax
mov    -0x68(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cmp    -0x50(%rbp,%rcx,4),%eax
jle    130f <main+0x1df>
movslq -0x68(%rbp),%rax
mov    -0x50(%rbp,%rax,4),%eax
mov    %eax,-0x60(%rbp)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
cltq
mov    -0x50(%rbp,%rax,4),%ecx
movslq -0x68(%rbp),%rax
mov    %ecx,-0x50(%rbp,%rax,4)
mov    -0x60(%rbp),%ecx
mov    -0x68(%rbp),%eax
add    $0x1,%eax
cltq
mov    %ecx,-0x50(%rbp,%rax,4)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x68(%rbp),%eax
mov    -0x64(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1336 <main+0x206>
cmpl   $0x0,-0x58(%rbp)
jle    1336 <main+0x206>
movl   $0x1,-0x54(%rbp)
jmp    133d <main+0x20d>
movl   $0x0,-0x54(%rbp)
jmp    1342 <main+0x212>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    12b1 <main+0x181>
jmp    1355 <main+0x225>
movl   $0x0,-0x58(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    12a0 <main+0x170>
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x64(%rbp),%eax
jge    146f <main+0x33f>
movslq -0x68(%rbp),%rax
mov    -0x50(%rbp,%rax,4),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x78(%rbp)
sub    $0xc,%eax
ja     145c <main+0x32c>
mov    -0x78(%rbp),%rax
lea    0xc5e(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movslq -0x68(%rbp),%rax
movb   $0x32,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x33,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x34,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x35,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x36,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x37,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x38,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x39,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x54,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x4a,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x51,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x4b,-0x11(%rbp,%rax,1)
jmp    145c <main+0x32c>
movslq -0x68(%rbp),%rax
movb   $0x41,-0x11(%rbp,%rax,1)
jmp    1461 <main+0x331>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    1371 <main+0x241>
lea    -0x11(%rbp),%rsi
lea    0xc46(%rip),%rdi
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x50,%rsp
mov    0x2eac(%rip),%rax
mov    (%rax),%edx
lea    0x3(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x3e8,%esi
call   1050 <fgets@plt>
mov    %rbx,%rdi
call   1030 <strlen@plt>
mov    %eax,%r8d
test   %eax,%eax
jle    11ed <main+0xbd>
xor    %ecx,%ecx
lea    0xe94(%rip),%rdx
nopl   0x0(%rax)
movsbl 0x3(%rsp,%rcx,1),%edi
add    $0xffffffce,%edi
cmp    $0x22,%edi
ja     11e4 <main+0xb4>
mov    $0x1,%esi
movslq (%rdx,%rdi,4),%rdi
add    %rdx,%rdi
jmp    *%rdi
mov    $0x2,%esi
jmp    11e0 <main+0xb0>
mov    $0x3,%esi
jmp    11e0 <main+0xb0>
mov    $0x4,%esi
jmp    11e0 <main+0xb0>
mov    $0x5,%esi
jmp    11e0 <main+0xb0>
mov    $0x6,%esi
jmp    11e0 <main+0xb0>
mov    $0x7,%esi
jmp    11e0 <main+0xb0>
mov    $0x8,%esi
jmp    11e0 <main+0xb0>
mov    $0xd,%esi
jmp    11e0 <main+0xb0>
mov    $0xa,%esi
jmp    11e0 <main+0xb0>
mov    $0xc,%esi
jmp    11e0 <main+0xb0>
mov    $0xb,%esi
jmp    11e0 <main+0xb0>
mov    $0x9,%esi
nopl   (%rax)
mov    %esi,0x10(%rsp,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%r8
jne    1170 <main+0x40>
lea    -0x1(%rax),%r10d
lea    -0x1(%r8),%r9
mov    %r8d,%r11d
and    $0xfffffffe,%r11d
nopl   0x0(%rax)
test   %eax,%eax
jle    1200 <main+0xd0>
mov    0x10(%rsp),%edi
test   %r9,%r9
je     1280 <main+0x150>
xor    %edx,%edx
xor    %ebx,%ebx
jmp    1233 <main+0x103>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %ecx,0x14(%rsp,%rdx,4)
mov    %edi,0x18(%rsp,%rdx,4)
add    $0x1,%ebx
mov    %rsi,%rdx
cmp    %rsi,%r11
je     1270 <main+0x140>
mov    0x14(%rsp,%rdx,4),%esi
cmp    %esi,%edi
jle    1250 <main+0x120>
mov    %esi,0x10(%rsp,%rdx,4)
mov    %edi,0x14(%rsp,%rdx,4)
add    $0x1,%ebx
jmp    1252 <main+0x122>
nopl   0x0(%rax,%rax,1)
mov    %esi,%edi
lea    0x2(%rdx),%rsi
mov    0x18(%rsp,%rdx,4),%ecx
cmp    %ecx,%edi
jg     1220 <main+0xf0>
mov    %ecx,%edi
jmp    122b <main+0xfb>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    -0x1(%rsi),%rdx
test   $0x1,%r8b
jne    128a <main+0x15a>
jmp    12a0 <main+0x170>
nopl   0x0(%rax)
xor    %esi,%esi
xor    %ebx,%ebx
test   $0x1,%r8b
je     12a0 <main+0x170>
mov    0x14(%rsp,%rsi,4),%ecx
cmp    %ecx,%edi
jle    129d <main+0x16d>
mov    %ecx,0x10(%rsp,%rsi,4)
mov    %edi,0x14(%rsp,%rsi,4)
add    $0x1,%ebx
mov    %rsi,%rdx
cmp    %edx,%r10d
jne    12ad <main+0x17d>
test   %ebx,%ebx
jg     1200 <main+0xd0>
test   %eax,%eax
jle    132e <main+0x1fe>
test   %r9,%r9
je     1309 <main+0x1d9>
mov    %r8d,%ecx
and    $0xfffffffe,%ecx
xor    %eax,%eax
lea    0xdc3(%rip),%rdx
jmp    12d9 <main+0x1a9>
nopl   0x0(%rax,%rax,1)
add    $0x2,%rax
cmp    %rax,%rcx
je     130b <main+0x1db>
mov    0x10(%rsp,%rax,4),%esi
add    $0xffffffff,%esi
cmp    $0xc,%esi
ja     12f0 <main+0x1c0>
movslq %esi,%rsi
movzbl (%rsi,%rdx,1),%ebx
mov    %bl,0x3(%rsp,%rax,1)
mov    0x14(%rsp,%rax,4),%esi
add    $0xffffffff,%esi
cmp    $0xc,%esi
ja     12d0 <main+0x1a0>
movslq %esi,%rsi
movzbl (%rsi,%rdx,1),%ebx
mov    %bl,0x4(%rsp,%rax,1)
jmp    12d0 <main+0x1a0>
xor    %eax,%eax
test   $0x1,%r8b
je     132e <main+0x1fe>
mov    0x10(%rsp,%rax,4),%ecx
add    $0xffffffff,%ecx
cmp    $0xc,%ecx
ja     132e <main+0x1fe>
movslq %ecx,%rcx
lea    0xd65(%rip),%rdx
mov    (%rcx,%rdx,1),%cl
mov    %cl,0x3(%rsp,%rax,1)
lea    0xd64(%rip),%rdi
lea    0x3(%rsp),%rsi
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x50,%rsp
pop    %rbx
ret

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

LLVM IR (-O2):
@stdin = global i32 0
@.str = [3 x i8] c"%s\00"
@switch.table.main = [13 x i8] c"23456789TJQKA"
define i32 @main() {
%1 = alloca [13 x i8]
%2 = alloca [13 x i32]
%3 = getelementptr inbounds [13 x i8], [13 x i8]* %1, i64 0, i64 0
%4 = bitcast [13 x i32]* %2 to i8*
%5 = load i32, i32* @stdin
%6 = call i32 @fgets(i8* %3, i32 1000, i32 %5)
%7 = call i32 @strlen(i8* %3)
%8 = icmp sgt i32 %7, 0
br i1 %8, label %9, label %11
9: ; preds = %0
%10 = zext i32 %7 to i64
br label %20
11: ; preds = %40, %0
%12 = add nsw i32 %7, -1
%13 = zext i32 %7 to i64
%14 = getelementptr inbounds [13 x i32], [13 x i32]* %2, i64 0, i64 0
%15 = add nsw i64 %13, -1
%16 = and i64 %13, 1
%17 = icmp eq i64 %15, 0
%18 = and i64 %13, 4294967294
%19 = icmp eq i64 %16, 0
br label %64
20: ; preds = %9, %40
%21 = phi i64 [ 0, %9 ], [ %41, %40 ]
%22 = getelementptr inbounds [13 x i8], [13 x i8]* %1, i64 0, i64 %21
%23 = load i8, i8* %22
%24 = sext i8 %23 to i32
switch i32 %24, label %40 [
i32 50, label %37
i32 51, label %25
i32 52, label %26
i32 53, label %27
i32 54, label %28
i32 55, label %29
i32 56, label %30
i32 57, label %31
i32 84, label %32
i32 74, label %33
i32 81, label %34
i32 75, label %35
i32 65, label %36
]
25: ; preds = %20
br label %37
26: ; preds = %20
br label %37
27: ; preds = %20
br label %37
28: ; preds = %20
br label %37
29: ; preds = %20
br label %37
30: ; preds = %20
br label %37
31: ; preds = %20
br label %37
32: ; preds = %20
br label %37
33: ; preds = %20
br label %37
34: ; preds = %20
br label %37
35: ; preds = %20
br label %37
36: ; preds = %20
br label %37
37: ; preds = %20, %36, %35, %34, %33, %32, %31, %30, %29, %28, %27, %26, %25
%38 = phi i32 [ 2, %25 ], [ 3, %26 ], [ 4, %27 ], [ 5, %28 ], [ 6, %29 ], [ 7, %30 ], [ 8, %31 ], [ 9, %32 ], [ 10, %33 ], [ 11, %34 ], [ 12, %35 ], [ 13, %36 ], [ 1, %20 ]
%39 = getelementptr inbounds [13 x i32], [13 x i32]* %2, i64 0, i64 %21
store i32 %38, i32* %39
br label %40
40: ; preds = %37, %20
%41 = add nuw nsw i64 %21, 1
%42 = icmp eq i64 %41, %10
br i1 %42, label %11, label %20
43: ; preds = %96, %66
%44 = phi i32 [ undef, %66 ], [ %98, %96 ]
%45 = phi i64 [ undef, %66 ], [ %79, %96 ]
%46 = phi i32 [ %67, %66 ], [ %97, %96 ]
%47 = phi i64 [ 0, %66 ], [ %89, %96 ]
%48 = phi i32 [ 0, %66 ], [ %98, %96 ]
br i1 %19, label %57, label %49
49: ; preds = %43
%50 = add nuw nsw i64 %47, 1
%51 = getelementptr inbounds [13 x i32], [13 x i32]* %2, i64 0, i64 %50
%52 = load i32, i32* %51
%53 = icmp sgt i32 %46, %52
br i1 %53, label %54, label %57
54: ; preds = %49
%55 = getelementptr inbounds [13 x i32], [13 x i32]* %2, i64 0, i64 %47
store i32 %52, i32* %55
store i32 %46, i32* %51
%56 = add nsw i32 %48, 1
br label %57
57: ; preds = %49, %54, %43
%58 = phi i32 [ %44, %43 ], [ %56, %54 ], [ %48, %49 ]
%59 = phi i64 [ %45, %43 ], [ %47, %54 ], [ %47, %49 ]
%60 = trunc i64 %59 to i32
%61 = icmp ne i32 %12, %60
%62 = icmp slt i32 %58, 1
%63 = select i1 %61, i1 true, i1 %62
br i1 %63, label %68, label %65
64: ; preds = %65, %11
br i1 %8, label %66, label %65
65: ; preds = %64, %57
br label %64
66: ; preds = %64
%67 = load i32, i32* %14
br i1 %17, label %43, label %74
68: ; preds = %57
br i1 %8, label %69, label %141
69: ; preds = %68
%70 = and i64 %13, 1
%71 = icmp eq i64 %15, 0
br i1 %71, label %128, label %72
72: ; preds = %69
%73 = and i64 %13, 4294967294
br label %101
74: ; preds = %66, %96
%75 = phi i32 [ %97, %96 ], [ %67, %66 ]
%76 = phi i64 [ %89, %96 ], [ 0, %66 ]
%77 = phi i32 [ %98, %96 ], [ 0, %66 ]
%78 = phi i64 [ %99, %96 ], [ 0, %66 ]
%79 = or i64 %76, 1
%80 = getelementptr inbounds [13 x i32], [13 x i32]* %2, i64 0, i64 %79
%81 = load i32, i32* %80
%82 = icmp sgt i32 %75, %81
br i1 %82, label %83, label %86
83: ; preds = %74
%84 = getelementptr inbounds [13 x i32], [13 x i32]* %2, i64 0, i64 %76
store i32 %81, i32* %84
store i32 %75, i32* %80
%85 = add nsw i32 %77, 1
br label %86
86: ; preds = %83, %74
%87 = phi i32 [ %75, %83 ], [ %81, %74 ]
%88 = phi i32 [ %85, %83 ], [ %77, %74 ]
%89 = add nuw nsw i64 %76, 2
%90 = getelementptr inbounds [13 x i32], [13 x i32]* %2, i64 0, i64 %89
%91 = load i32, i32* %90
%92 = icmp sgt i32 %87, %91
br i1 %92, label %93, label %96
93: ; preds = %86
%94 = getelementptr inbounds [13 x i32], [13 x i32]* %2, i64 0, i64 %79
store i32 %91, i32* %94
store i32 %87, i32* %90
%95 = add nsw i32 %88, 1
br label %96
96: ; preds = %93, %86
%97 = phi i32 [ %87, %93 ], [ %91, %86 ]
%98 = phi i32 [ %95, %93 ], [ %88, %86 ]
%99 = add i64 %78, 2
%100 = icmp eq i64 %99, %18
br i1 %100, label %43, label %74
101: ; preds = %124, %72
%102 = phi i64 [ 0, %72 ], [ %125, %124 ]
%103 = phi i64 [ 0, %72 ], [ %126, %124 ]
%104 = getelementptr inbounds [13 x i32], [13 x i32]* %2, i64 0, i64 %102
%105 = load i32, i32* %104
%106 = add i32 %105, -1
%107 = icmp ult i32 %106, 13
br i1 %107, label %108, label %113
108: ; preds = %101
%109 = sext i32 %106 to i64
%110 = getelementptr inbounds [13 x i8], [13 x i8]* @switch.table.main, i64 0, i64 %109
%111 = load i8, i8* %110
%112 = getelementptr inbounds [13 x i8], [13 x i8]* %1, i64 0, i64 %102
store i8 %111, i8* %112
br label %113
113: ; preds = %101, %108
%114 = or i64 %102, 1
%115 = getelementptr inbounds [13 x i32], [13 x i32]* %2, i64 0, i64 %114
%116 = load i32, i32* %115
%117 = add i32 %116, -1
%118 = icmp ult i32 %117, 13
br i1 %118, label %119, label %124
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
%123 = getelementptr inbounds [13 x i8], [13 x i8]* %1, i64 0, i64 %114
store i8 %122, i8* %123
br label %124
124: ; preds = %119, %113
%125 = add nuw nsw i64 %102, 2
%126 = add i64 %103, 2
%127 = icmp eq i64 %126, %73
br i1 %127, label %128, label %101
128: ; preds = %124, %69
%129 = phi i64 [ 0, %69 ], [ %125, %124 ]
%130 = icmp eq i64 %70, 0
br i1 %130, label %141, label %131
131: ; preds = %128
%132 = getelementptr inbounds [13 x i32], [13 x i32]* %2, i64 0, i64 %129
%133 = load i32, i32* %132
%134 = add i32 %133, -1
%135 = icmp ult i32 %134, 13
br i1 %135, label %136, label %141
136: ; preds = %131
%137 = sext i32 %134 to i64
%138 = getelementptr inbounds [13 x i8], [13 x i8]* @switch.table.main, i64 0, i64 %137
%139 = load i8, i8* %138
%140 = getelementptr inbounds [13 x i8], [13 x i8]* %1, i64 0, i64 %129
store i8 %139, i8* %140
br label %141
141: ; preds = %128, %136, %131, %68
%142 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8* %3)
ret i32 0
}