#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 *, ...);
int strlen(char *);
int main() {
  char symbol[] = {'0', '1', '2', '3', '4', '5', '6', '7',
                   '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
  char h_or_d;
  char color[100];
  int d_helper;
  int i, k = 0, m = 0, n = 0, l;
  int number[3];
  int h_sum = 0;
  scanf("%c \n", &h_or_d);
  if (h_or_d == 'h') {
    scanf("%s", &color);
    l = strlen(color);
    printf("rgb(");
    for (i = 1; i < l; i++) {
      for (k = 0; k < 16; k++) {
        if (color[i] == symbol[k]) {
          if (i % 2 == 0) {
            h_sum = h_sum + k;
            if (i != (l - 1))
              printf("%d, ", h_sum);
            else
              printf("%d)", h_sum);
            h_sum = 0;
          } else
            h_sum = h_sum + k * 16;
        }
      }
    }
  } else {
    printf("#");
    for (; n < 3; n++) {
      number[n] = 0;
    }
    n = 0;
    scanf("%[^\n]s", &color);
    l = strlen(color);
    for (i = 0; i < l; i++) {
      if (color[i] == ',') {
        n++;
        i++;
      } else {
        for (k = 0; k < 10; k++) {
          if (color[i] == symbol[k]) {
            number[n] = number[n] * 10;
            number[n] = number[n] + k;
          }
        }
      }
    }
    for (n = 0; n < 3; n++) {
      for (k = 0; k < 16; k++) {
        if (number[n] / 16 == k)
          printf("%c", symbol[k]);
      }
      for (k = 0; k < 16; k++) {
        if (number[n] % 16 == k)
          printf("%c", symbol[k]);
      }
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
movl   $0x0,-0x4(%rbp)
mov    0xeb7(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    0xeb4(%rip),%rax
mov    %rax,-0x18(%rbp)
movl   $0x0,-0x9c(%rbp)
movl   $0x0,-0xa0(%rbp)
movl   $0x0,-0xa4(%rbp)
movl   $0x0,-0xb8(%rbp)
lea    0xe89(%rip),%rdi
lea    -0x21(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
movsbl -0x21(%rbp),%eax
cmp    $0x68,%eax
jne    12f9 <main+0x1c9>
lea    0xe6f(%rip),%rdi
lea    -0x90(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
lea    -0x90(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0xa8(%rbp)
lea    0xe4b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x1,-0x98(%rbp)
mov    -0x98(%rbp),%eax
cmp    -0xa8(%rbp),%eax
jge    12f4 <main+0x1c4>
movl   $0x0,-0x9c(%rbp)
cmpl   $0x10,-0x9c(%rbp)
jge    12db <main+0x1ab>
movslq -0x98(%rbp),%rax
movsbl -0x90(%rbp,%rax,1),%eax
ff
movslq -0x9c(%rbp),%rcx
movsbl -0x20(%rbp,%rcx,1),%ecx
cmp    %ecx,%eax
jne    12c2 <main+0x192>
mov    -0x98(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    12a6 <main+0x176>
mov    -0xb8(%rbp),%eax
add    -0x9c(%rbp),%eax
mov    %eax,-0xb8(%rbp)
mov    -0x98(%rbp),%eax
mov    -0xa8(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     1283 <main+0x153>
mov    -0xb8(%rbp),%esi
lea    0xda6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1297 <main+0x167>
mov    -0xb8(%rbp),%esi
lea    0xd92(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0xb8(%rbp)
jmp    12bd <main+0x18d>
mov    -0xb8(%rbp),%eax
mov    -0x9c(%rbp),%ecx
shl    $0x4,%ecx
add    %ecx,%eax
mov    %eax,-0xb8(%rbp)
jmp    12c2 <main+0x192>
jmp    12c7 <main+0x197>
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    11fa <main+0xca>
jmp    12e0 <main+0x1b0>
mov    -0x98(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
jmp    11de <main+0xae>
jmp    157f <main+0x44f>
lea    0xd26(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
cmpl   $0x3,-0xa4(%rbp)
jge    133a <main+0x20a>
movslq -0xa4(%rbp),%rax
movl   $0x0,-0xb4(%rbp,%rax,4)
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    1307 <main+0x1d7>
movl   $0x0,-0xa4(%rbp)
lea    0xcdd(%rip),%rdi
lea    -0x90(%rbp),%rsi
mov    $0x0,%al
call   1050 <scanf@plt>
lea    -0x90(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0xa8(%rbp)
movl   $0x0,-0x98(%rbp)
mov    -0x98(%rbp),%eax
cmp    -0xa8(%rbp),%eax
jge    1472 <main+0x342>
movslq -0x98(%rbp),%rax
movsbl -0x90(%rbp,%rax,1),%eax
ff
cmp    $0x2c,%eax
jne    13c2 <main+0x292>
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
mov    -0x98(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
jmp    1459 <main+0x329>
movl   $0x0,-0x9c(%rbp)
cmpl   $0xa,-0x9c(%rbp)
jge    1454 <main+0x324>
movslq -0x98(%rbp),%rax
movsbl -0x90(%rbp,%rax,1),%eax
ff
movslq -0x9c(%rbp),%rcx
movsbl -0x20(%rbp,%rcx,1),%ecx
cmp    %ecx,%eax
jne    143b <main+0x30b>
movslq -0xa4(%rbp),%rax
imul   $0xa,-0xb4(%rbp,%rax,4),%ecx
0a
movslq -0xa4(%rbp),%rax
mov    %ecx,-0xb4(%rbp,%rax,4)
movslq -0xa4(%rbp),%rax
mov    -0xb4(%rbp,%rax,4),%ecx
add    -0x9c(%rbp),%ecx
movslq -0xa4(%rbp),%rax
mov    %ecx,-0xb4(%rbp,%rax,4)
jmp    1440 <main+0x310>
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    13cc <main+0x29c>
jmp    1459 <main+0x329>
jmp    145e <main+0x32e>
mov    -0x98(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
jmp    1375 <main+0x245>
movl   $0x0,-0xa4(%rbp)
cmpl   $0x3,-0xa4(%rbp)
jge    157a <main+0x44a>
movl   $0x0,-0x9c(%rbp)
cmpl   $0x10,-0x9c(%rbp)
jge    14f5 <main+0x3c5>
movslq -0xa4(%rbp),%rax
mov    -0xb4(%rbp,%rax,4),%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
cmp    -0x9c(%rbp),%eax
jne    14dc <main+0x3ac>
movslq -0x9c(%rbp),%rax
movsbl -0x20(%rbp,%rax,1),%esi
lea    0xb5a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    14e1 <main+0x3b1>
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    1493 <main+0x363>
movl   $0x0,-0x9c(%rbp)
cmpl   $0x10,-0x9c(%rbp)
jge    1561 <main+0x431>
movslq -0xa4(%rbp),%rax
mov    -0xb4(%rbp,%rax,4),%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
cmp    -0x9c(%rbp),%edx
jne    1548 <main+0x418>
movslq -0x9c(%rbp),%rax
movsbl -0x20(%rbp,%rax,1),%esi
lea    0xaee(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    154d <main+0x41d>
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
jmp    14ff <main+0x3cf>
jmp    1566 <main+0x436>
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    147c <main+0x34c>
jmp    157f <main+0x44f>
xor    %eax,%eax
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
lea    0xf28(%rip),%rdi
lea    0x7(%rsp),%rsi
xor    %eax,%eax
call   1060 <scanf@plt>
cmpb   $0x68,0x7(%rsp)
jne    1236 <main+0xf6>
lea    0xf0f(%rip),%rdi
xor    %ebp,%ebp
lea    0x20(%rsp),%rbx
mov    %rbx,%rsi
xor    %eax,%eax
call   1060 <scanf@plt>
mov    %rbx,%rdi
call   1040 <strlen@plt>
mov    %eax,%r14d
lea    0xeef(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
cmp    $0x2,%r14d
jl     1597 <main+0x457>
lea    -0x1(%r14),%r13d
mov    %r14d,%eax
mov    %rax,0x18(%rsp)
mov    $0x1,%ebx
lea    0xeae(%rip),%r12
jmp    11df <main+0x9f>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%rbx
cmp    0x18(%rsp),%rbx
je     1597 <main+0x457>
xor    %r14d,%r14d
xor    %r15d,%r15d
jmp    1201 <main+0xc1>
nopw   0x0(%rax,%rax,1)
add    %r14d,%ebp
add    $0x1,%r15
add    $0x10,%r14
cmp    $0x10,%r15
je     11d0 <main+0x90>
movzbl 0x20(%rsp,%rbx,1),%eax
cmp    (%r15,%r12,1),%al
jne    11f3 <main+0xb3>
test   $0x1,%bl
jne    11f0 <main+0xb0>
mov    %ebp,%esi
add    %r15,%rsi
xor    %ebp,%ebp
cmp    %r13,%rbx
jne    1226 <main+0xe6>
lea    0xe6e(%rip),%rdi
jmp    122d <main+0xed>
lea    0xe60(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
jmp    11f3 <main+0xb3>
mov    $0x23,%edi
call   1030 <putchar@plt>
movq   $0x0,0x8(%rsp)
movl   $0x0,0x10(%rsp)
lea    0xe3e(%rip),%rdi
xor    %ebp,%ebp
lea    0x20(%rsp),%rbx
mov    %rbx,%rsi
xor    %eax,%eax
call   1060 <scanf@plt>
mov    %rbx,%rdi
call   1040 <strlen@plt>
test   %eax,%eax
jle    1359 <main+0x219>
lea    0xd80(%rip),%rcx
xor    %edx,%edx
jmp    12a1 <main+0x161>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%ebp
add    $0x1,%edx
add    $0x1,%edx
cmp    %eax,%edx
jge    1359 <main+0x219>
movslq %edx,%rsi
movzbl 0x20(%rsp,%rsi,1),%ebx
cmp    $0x2c,%bl
je     1290 <main+0x150>
add    $0xd0,%bl
cmp    $0x9,%bl
ja     1296 <main+0x156>
movslq %ebp,%rsi
movzbl %bl,%edi
movslq (%rcx,%rdi,4),%rdi
add    %rcx,%rdi
jmp    *%rdi
mov    0x8(%rsp,%rsi,4),%edi
add    %edi,%edi
lea    (%rdi,%rdi,4),%edi
jmp    1350 <main+0x210>
mov    0x8(%rsp,%rsi,4),%edi
add    %edi,%edi
lea    (%rdi,%rdi,4),%edi
or     $0x1,%edi
jmp    1350 <main+0x210>
mov    0x8(%rsp,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %edi,%edi
add    $0x2,%edi
jmp    1350 <main+0x210>
mov    0x8(%rsp,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %edi,%edi
add    $0x3,%edi
jmp    1350 <main+0x210>
mov    0x8(%rsp,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %edi,%edi
add    $0x4,%edi
jmp    1350 <main+0x210>
mov    0x8(%rsp,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %edi,%edi
add    $0x5,%edi
jmp    1350 <main+0x210>
mov    0x8(%rsp,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %edi,%edi
add    $0x6,%edi
jmp    1350 <main+0x210>
mov    0x8(%rsp,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %edi,%edi
add    $0x7,%edi
jmp    1350 <main+0x210>
mov    0x8(%rsp,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %edi,%edi
add    $0x8,%edi
jmp    1350 <main+0x210>
mov    0x8(%rsp,%rsi,4),%edi
lea    (%rdi,%rdi,4),%edi
add    %edi,%edi
add    $0x9,%edi
nop
mov    %edi,0x8(%rsp,%rsi,4)
jmp    1296 <main+0x156>
xor    %r15d,%r15d
lea    0xcc5(%rip),%r14
jmp    137e <main+0x23e>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r15
cmp    $0x3,%r15
je     1597 <main+0x457>
mov    0x8(%rsp,%r15,4),%ebp
lea    0xf(%rbp),%r12d
cmp    $0x1e,%r12d
ja     1397 <main+0x257>
mov    $0x30,%edi
call   1030 <putchar@plt>
mov    %ebp,%ebx
and    $0xfffffff0,%ebx
cmp    $0x10,%ebx
je     1470 <main+0x330>
cmp    $0x20,%ebx
je     1483 <main+0x343>
cmp    $0x30,%ebx
je     1496 <main+0x356>
cmp    $0x40,%ebx
je     14a9 <main+0x369>
cmp    $0x50,%ebx
je     14bc <main+0x37c>
cmp    $0x60,%ebx
je     14cf <main+0x38f>
cmp    $0x70,%ebx
je     14e2 <main+0x3a2>
cmp    $0x80,%ebx
je     14f8 <main+0x3b8>
cmp    $0x90,%ebx
je     150e <main+0x3ce>
cmp    $0xa0,%ebx
je     1524 <main+0x3e4>
cmp    $0xb0,%ebx
je     153a <main+0x3fa>
cmp    $0xc0,%ebx
je     1550 <main+0x410>
cmp    $0xd0,%ebx
je     1566 <main+0x426>
cmp    $0xe0,%ebx
je     157c <main+0x43c>
cmp    $0xf0,%ebx
jne    1441 <main+0x301>
mov    $0x66,%edi
call   1030 <putchar@plt>
test   %ebp,%ebp
cmovns %ebp,%r12d
and    $0xfffffff0,%r12d
sub    %r12d,%ebp
cmp    $0xf,%ebp
ja     1370 <main+0x230>
movslq %ebp,%rax
mov    (%r14,%rax,4),%edi
call   1030 <putchar@plt>
jmp    1370 <main+0x230>
nopl   0x0(%rax,%rax,1)
mov    $0x31,%edi
call   1030 <putchar@plt>
cmp    $0x20,%ebx
jne    13ae <main+0x26e>
mov    $0x32,%edi
call   1030 <putchar@plt>
cmp    $0x30,%ebx
jne    13b7 <main+0x277>
mov    $0x33,%edi
call   1030 <putchar@plt>
cmp    $0x40,%ebx
jne    13c0 <main+0x280>
mov    $0x34,%edi
call   1030 <putchar@plt>
cmp    $0x50,%ebx
jne    13c9 <main+0x289>
mov    $0x35,%edi
call   1030 <putchar@plt>
cmp    $0x60,%ebx
jne    13d2 <main+0x292>
mov    $0x36,%edi
call   1030 <putchar@plt>
cmp    $0x70,%ebx
jne    13db <main+0x29b>
mov    $0x37,%edi
call   1030 <putchar@plt>
cmp    $0x80,%ebx
jne    13e7 <main+0x2a7>
mov    $0x38,%edi
call   1030 <putchar@plt>
cmp    $0x90,%ebx
jne    13f3 <main+0x2b3>
mov    $0x39,%edi
call   1030 <putchar@plt>
cmp    $0xa0,%ebx
jne    13ff <main+0x2bf>
mov    $0x61,%edi
call   1030 <putchar@plt>
cmp    $0xb0,%ebx
jne    140b <main+0x2cb>
mov    $0x62,%edi
call   1030 <putchar@plt>
cmp    $0xc0,%ebx
jne    1417 <main+0x2d7>
mov    $0x63,%edi
call   1030 <putchar@plt>
cmp    $0xd0,%ebx
jne    1423 <main+0x2e3>
mov    $0x64,%edi
call   1030 <putchar@plt>
cmp    $0xe0,%ebx
jne    142f <main+0x2ef>
mov    $0x65,%edi
call   1030 <putchar@plt>
cmp    $0xf0,%ebx
je     1437 <main+0x2f7>
jmp    1441 <main+0x301>
xor    %eax,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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