#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 *, unsigned char const, int,
                          unsigned char const);
int main(void) {
  const unsigned char alphabet[] = "ACGTURYSWKMBDHVN?-";
  const unsigned char lcalphabet[] = "acgturyswkmbdhvn";
  for (int i = 0; i <= 17; i++) {
    printf("%i\t%i\t%c\n", alphabet[i], i, alphabet[i]);
  }
  for (int i = 0; i <= 15; i++) {
    printf("%i\t%i\t%c\n", lcalphabet[i], i, lcalphabet[i]);
  }
  return (0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movl   $0x0,-0x4(%rbp)
mov    0xeda(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    0xed7(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    0xed4(%rip),%ax
mov    %ax,-0x10(%rbp)
mov    0xecc(%rip),%al
mov    %al,-0xe(%rbp)
mov    0xed0(%rip),%rax
mov    %rax,-0x40(%rbp)
mov    0xecd(%rip),%rax
mov    %rax,-0x38(%rbp)
mov    0xecb(%rip),%al
mov    %al,-0x30(%rbp)
movl   $0x0,-0x44(%rbp)
cmpl   $0x11,-0x44(%rbp)
jg     11aa <main+0x9a>
movslq -0x44(%rbp),%rax
mov    -0x20(%rbp,%rax,1),%cl
mov    -0x44(%rbp),%edx
movslq -0x44(%rbp),%rax
lea    0xea2(%rip),%rdi
movzbl %cl,%esi
movzbl -0x20(%rbp,%rax,1),%ecx
call   1030 <printf@plt>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    116f <main+0x5f>
movl   $0x0,-0x48(%rbp)
cmpl   $0xf,-0x48(%rbp)
jg     11ec <main+0xdc>
movslq -0x48(%rbp),%rax
mov    -0x40(%rbp,%rax,1),%cl
mov    -0x48(%rbp),%edx
movslq -0x48(%rbp),%rax
lea    0xe60(%rip),%rdi
movzbl %cl,%esi
movzbl -0x40(%rbp,%rax,1),%ecx
call   1030 <printf@plt>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    11b1 <main+0xa1>
xor    %eax,%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
lea    0xee8(%rip),%rbx
mov    %rbx,%rdi
mov    $0x41,%esi
xor    %edx,%edx
mov    $0x41,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x43,%esi
mov    $0x1,%edx
mov    $0x43,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x47,%esi
mov    $0x2,%edx
mov    $0x47,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x54,%esi
mov    $0x3,%edx
mov    $0x54,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0x4,%edx
mov    $0x55,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x52,%esi
mov    $0x5,%edx
mov    $0x52,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x59,%esi
mov    $0x6,%edx
mov    $0x59,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x53,%esi
mov    $0x7,%edx
mov    $0x53,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x57,%esi
mov    $0x8,%edx
mov    $0x57,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x4b,%esi
mov    $0x9,%edx
mov    $0x4b,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x4d,%esi
mov    $0xa,%edx
mov    $0x4d,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x42,%esi
mov    $0xb,%edx
mov    $0x42,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x44,%esi
mov    $0xc,%edx
mov    $0x44,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x48,%esi
mov    $0xd,%edx
mov    $0x48,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x56,%esi
mov    $0xe,%edx
mov    $0x56,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x4e,%esi
mov    $0xf,%edx
mov    $0x4e,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x3f,%esi
mov    $0x10,%edx
mov    $0x3f,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x2d,%esi
mov    $0x11,%edx
mov    $0x2d,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x61,%esi
xor    %edx,%edx
mov    $0x61,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x63,%esi
mov    $0x1,%edx
mov    $0x63,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x67,%esi
mov    $0x2,%edx
mov    $0x67,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x74,%esi
mov    $0x3,%edx
mov    $0x74,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x75,%esi
mov    $0x4,%edx
mov    $0x75,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x72,%esi
mov    $0x5,%edx
mov    $0x72,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x79,%esi
mov    $0x6,%edx
mov    $0x79,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x73,%esi
mov    $0x7,%edx
mov    $0x73,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x77,%esi
mov    $0x8,%edx
mov    $0x77,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x6b,%esi
mov    $0x9,%edx
mov    $0x6b,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x6d,%esi
mov    $0xa,%edx
mov    $0x6d,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x62,%esi
mov    $0xb,%edx
mov    $0x62,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x64,%esi
mov    $0xc,%edx
mov    $0x64,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x68,%esi
mov    $0xd,%edx
mov    $0x68,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x76,%esi
mov    $0xe,%edx
mov    $0x76,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x6e,%esi
mov    $0xf,%edx
mov    $0x6e,%ecx
call   1030 <printf@plt>
xor    %eax,%eax
pop    %rbx
ret

LLVM IR (-O0):
@__const.main.alphabet = [19 x i8] c"ACGTURYSWKMBDHVN?-\00"
@__const.main.lcalphabet = [17 x i8] c"acgturyswkmbdhvn\00"
@.str = [10 x i8] c"%i\09%i\09%c\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [19 x i8]
%3 = alloca [17 x i8]
%4 = alloca i32
%5 = alloca i32
store i32 0, i32* %1
%6 = bitcast [19 x i8]* %2 to i8*
%7 = bitcast [17 x i8]* %3 to i8*
store i32 0, i32* %4
br label %8
8: ; preds = %22, %0
%9 = load i32, i32* %4
%10 = icmp sle i32 %9, 17
br i1 %10, label %11, label %25
11: ; preds = %8
%12 = load i32, i32* %4
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds [19 x i8], [19 x i8]* %2, i64 0, i64 %13
%15 = load i8, i8* %14
%16 = load i32, i32* %4
%17 = load i32, i32* %4
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds [19 x i8], [19 x i8]* %2, i64 0, i64 %18
%20 = load i8, i8* %19
%21 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext %15, i32 %16, i8 zeroext %20)
br label %22
22: ; preds = %11
%23 = load i32, i32* %4
%24 = add nsw i32 %23, 1
store i32 %24, i32* %4
br label %8
25: ; preds = %8
store i32 0, i32* %5
br label %26
26: ; preds = %40, %25
%27 = load i32, i32* %5
%28 = icmp sle i32 %27, 15
br i1 %28, label %29, label %43
29: ; preds = %26
%30 = load i32, i32* %5
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds [17 x i8], [17 x i8]* %3, i64 0, i64 %31
%33 = load i8, i8* %32
%34 = load i32, i32* %5
%35 = load i32, i32* %5
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds [17 x i8], [17 x i8]* %3, i64 0, i64 %36
%38 = load i8, i8* %37
%39 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext %33, i32 %34, i8 zeroext %38)
br label %40
40: ; preds = %29
%41 = load i32, i32* %5
%42 = add nsw i32 %41, 1
store i32 %42, i32* %5
br label %26
43: ; preds = %26
ret i32 0
}

LLVM IR (-O2):
@.str = [10 x i8] c"%i\09%i\09%c\0A\00"
define i32 @main() {
%1 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 65, i32 0, i8 zeroext 65)
%2 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 67, i32 1, i8 zeroext 67)
%3 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 71, i32 2, i8 zeroext 71)
%4 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 84, i32 3, i8 zeroext 84)
%5 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 85, i32 4, i8 zeroext 85)
%6 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 82, i32 5, i8 zeroext 82)
%7 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 89, i32 6, i8 zeroext 89)
%8 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 83, i32 7, i8 zeroext 83)
%9 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 87, i32 8, i8 zeroext 87)
%10 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 75, i32 9, i8 zeroext 75)
%11 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 77, i32 10, i8 zeroext 77)
%12 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 66, i32 11, i8 zeroext 66)
%13 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 68, i32 12, i8 zeroext 68)
%14 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 72, i32 13, i8 zeroext 72)
%15 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 86, i32 14, i8 zeroext 86)
%16 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 78, i32 15, i8 zeroext 78)
%17 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 63, i32 16, i8 zeroext 63)
%18 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 45, i32 17, i8 zeroext 45)
%19 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 97, i32 0, i8 zeroext 97)
%20 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 99, i32 1, i8 zeroext 99)
%21 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 103, i32 2, i8 zeroext 103)
%22 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 116, i32 3, i8 zeroext 116)
%23 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 117, i32 4, i8 zeroext 117)
%24 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 114, i32 5, i8 zeroext 114)
%25 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 121, i32 6, i8 zeroext 121)
%26 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 115, i32 7, i8 zeroext 115)
%27 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 119, i32 8, i8 zeroext 119)
%28 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 107, i32 9, i8 zeroext 107)
%29 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 109, i32 10, i8 zeroext 109)
%30 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 98, i32 11, i8 zeroext 98)
%31 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 100, i32 12, i8 zeroext 100)
%32 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 104, i32 13, i8 zeroext 104)
%33 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 118, i32 14, i8 zeroext 118)
%34 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8 zeroext 110, i32 15, i8 zeroext 110)
ret i32 0
}