#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 */
char digit(char *);
scalar_t__ isPalindrome(char *);
int mirrornum(char *);
int /*<<< orphan*/ printf(char *, ...);
int scanf(char *, char *);
int strlen(char *);
int main() {
  char str[10000];
  int len, n, l, i, x;
  while (scanf("%s", str) == 1) {
    l = 0;
    len = strlen(str);
    if (isPalindrome(str)) {
      if (digit(str)) {
        x = mirrornum(str);
        if (x == 0)
          printf("%s -- is a mirrored palindrome.\n\n", str);
        else
          printf("%s -- is a regular palindrome.\n\n", str);
      } else if (len % 2 == 0 && !digit(str)) {
        printf("%s -- is a mirrored palindrome.\n\n", str);
      } else if (len % 2 == 1) {
        n = len / 2;
        if (str[n] != digit(str) && str[n] == '1' || str[n] == '8' ||
            str[n] == 'A' || str[n] == 'H' || str[n] == 'I' || str[n] == 'M' ||
            str[n] == 'O' || (str[n] >= 'T' && str[n] <= 'Y')) {
          printf("%s -- is a mirrored palindrome.\n\n", str);
        } else {
          printf("%s -- is a regular palindrome.\n\n", str);
        }
      } else {
        printf("%s -- is a regular palindrome.\n\n", str);
      }
    } else {
      if (digit(str)) {
        printf("%s", str);
        for (i = 0; i < len; i++) {
          if (str[i] == '2')
            str[i] = 'S';
          else if (str[i] == '3')
            str[i] = 'E';
          else if (str[i] == '5')
            str[i] = 'Z';
        }
        n = len / 2;
        for (i = 0; i < n; i++) {
          if (str[i] == str[len - i - 1]) {
            l = l;
          } else {
            l++;
          }
        }
        if (l == 0 && len % 2 == 0) {
          printf(" -- is a mirrored string.\n\n");
        } else if (l == 0 && len % 2 == 1) {
          if (str[n] == '1' || str[n] == '8' || str[n] == 'A' ||
              str[n] == 'H' || str[n] == 'I' || str[n] == 'M' ||
              str[n] == 'O' || (str[n] >= 'T' && str[n] <= 'Y'))
            printf(" -- is a mirrored string.\n\n");
          else
            printf(" -- is not a palindrome.\n\n");
        } else
          printf(" -- is not a palindrome.\n\n");
      } else {
        printf("%s -- is not a palindrome.\n\n", str);
      }
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2740,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x2720(%rbp),%rsi
lea    0xe80(%rip),%rdi
call   1080 <scanf@plt>
cmp    $0x1,%eax
jne    170c <main+0x5ac>
movl   $0x0,-0x272c(%rbp)
lea    -0x2720(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x2724(%rbp)
lea    -0x2720(%rbp),%rdi
call   1070 <isPalindrome@plt>
cmp    $0x0,%rax
je     13fb <main+0x29b>
lea    -0x2720(%rbp),%rdi
call   1050 <digit@plt>
cmp    $0x0,%al
je     1227 <main+0xc7>
lea    -0x2720(%rbp),%rdi
call   1060 <mirrornum@plt>
mov    %eax,-0x2734(%rbp)
cmpl   $0x0,-0x2734(%rbp)
jne    120d <main+0xad>
lea    -0x2720(%rbp),%rsi
lea    0xe02(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1222 <main+0xc2>
lea    -0x2720(%rbp),%rsi
lea    0xe0a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    13f6 <main+0x296>
mov    -0x2724(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    126c <main+0x10c>
lea    -0x2720(%rbp),%rdi
call   1050 <digit@plt>
cmp    $0x0,%al
jne    126c <main+0x10c>
lea    -0x2720(%rbp),%rsi
lea    0xda3(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    13f1 <main+0x291>
mov    -0x2724(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x1,%edx
jne    13d7 <main+0x277>
mov    -0x2724(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x2728(%rbp)
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
mov    %eax,-0x2738(%rbp)
lea    -0x2720(%rbp),%rdi
call   1050 <digit@plt>
mov    %al,%cl
mov    -0x2738(%rbp),%eax
movsbl %cl,%ecx
cmp    %ecx,%eax
je     12e3 <main+0x183>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x31,%eax
je     13a3 <main+0x243>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x38,%eax
je     13a3 <main+0x243>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x41,%eax
je     13a3 <main+0x243>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x48,%eax
je     13a3 <main+0x243>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x49,%eax
je     13a3 <main+0x243>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x4d,%eax
je     13a3 <main+0x243>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x4f,%eax
je     13a3 <main+0x243>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x54,%eax
jl     13bd <main+0x25d>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x59,%eax
jg     13bd <main+0x25d>
lea    -0x2720(%rbp),%rsi
lea    0xc52(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    13d2 <main+0x272>
lea    -0x2720(%rbp),%rsi
lea    0xc5a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    13ec <main+0x28c>
lea    -0x2720(%rbp),%rsi
lea    0xc40(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    13f1 <main+0x291>
jmp    13f6 <main+0x296>
jmp    1707 <main+0x5a7>
lea    -0x2720(%rbp),%rdi
call   1050 <digit@plt>
cmp    $0x0,%al
je     16ed <main+0x58d>
lea    -0x2720(%rbp),%rsi
lea    0xbe3(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x2730(%rbp)
mov    -0x2730(%rbp),%eax
cmp    -0x2724(%rbp),%eax
jge    14e2 <main+0x382>
movslq -0x2730(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x32,%eax
jne    146c <main+0x30c>
movslq -0x2730(%rbp),%rax
movb   $0x53,-0x2720(%rbp,%rax,1)
53
jmp    14c9 <main+0x369>
movslq -0x2730(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x33,%eax
jne    1498 <main+0x338>
movslq -0x2730(%rbp),%rax
movb   $0x45,-0x2720(%rbp,%rax,1)
45
jmp    14c4 <main+0x364>
movslq -0x2730(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x35,%eax
jne    14bf <main+0x35f>
movslq -0x2730(%rbp),%rax
movb   $0x5a,-0x2720(%rbp,%rax,1)
5a
jmp    14c4 <main+0x364>
jmp    14c9 <main+0x369>
jmp    14ce <main+0x36e>
mov    -0x2730(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2730(%rbp)
jmp    142e <main+0x2ce>
mov    -0x2724(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x2728(%rbp)
movl   $0x0,-0x2730(%rbp)
mov    -0x2730(%rbp),%eax
cmp    -0x2728(%rbp),%eax
jge    157c <main+0x41c>
movslq -0x2730(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
mov    -0x2724(%rbp),%ecx
sub    -0x2730(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl -0x2720(%rbp,%rcx,1),%ecx
ff
cmp    %ecx,%eax
jne    1554 <main+0x3f4>
mov    -0x272c(%rbp),%eax
mov    %eax,-0x272c(%rbp)
jmp    1563 <main+0x403>
mov    -0x272c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x272c(%rbp)
jmp    1568 <main+0x408>
mov    -0x2730(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2730(%rbp)
jmp    1500 <main+0x3a0>
cmpl   $0x0,-0x272c(%rbp)
jne    15b3 <main+0x453>
mov    -0x2724(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    15b3 <main+0x453>
lea    0xa9f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    16e8 <main+0x588>
cmpl   $0x0,-0x272c(%rbp)
jne    16d5 <main+0x575>
mov    -0x2724(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x1,%edx
jne    16d5 <main+0x575>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x31,%eax
je     16af <main+0x54f>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x38,%eax
je     16af <main+0x54f>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x41,%eax
je     16af <main+0x54f>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x48,%eax
je     16af <main+0x54f>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x49,%eax
je     16af <main+0x54f>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x4d,%eax
je     16af <main+0x54f>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x4f,%eax
je     16af <main+0x54f>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x54,%eax
jl     16c2 <main+0x562>
movslq -0x2728(%rbp),%rax
movsbl -0x2720(%rbp,%rax,1),%eax
ff
cmp    $0x59,%eax
jg     16c2 <main+0x562>
lea    0x990(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    16d0 <main+0x570>
lea    0x99b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    16e3 <main+0x583>
lea    0x988(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    16e8 <main+0x588>
jmp    1702 <main+0x5a2>
lea    -0x2720(%rbp),%rsi
lea    0x967(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1707 <main+0x5a7>
jmp    1172 <main+0x12>
xor    %eax,%eax
add    $0x2740,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x2718,%rsp
lea    0xe88(%rip),%rdi
mov    %rsp,%rsi
call   1090 <scanf@plt>
cmp    $0x1,%eax
jne    15c8 <main+0x458>
mov    %rsp,%r13
lea    0xe6d(%rip),%r15
lea    0xe8b(%rip),%rbx
jmp    11e1 <main+0x71>
lea    0xe82(%rip),%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %rbx,%rdi
mov    %r13,%rsi
xor    %eax,%eax
call   1050 <printf@plt>
mov    %r15,%rdi
mov    %r13,%rsi
call   1090 <scanf@plt>
cmp    $0x1,%eax
jne    15c8 <main+0x458>
mov    %r13,%rdi
call   1040 <strlen@plt>
mov    %eax,%r14d
mov    %r13,%rdi
call   1080 <isPalindrome@plt>
mov    %rax,%r12
mov    %r13,%rdi
call   1060 <digit@plt>
test   %r12,%r12
je     1230 <main+0xc0>
test   %al,%al
je     12a0 <main+0x130>
mov    %r13,%rdi
call   1070 <mirrornum@plt>
test   %eax,%eax
jne    11c0 <main+0x50>
lea    0xdf4(%rip),%rdi
jmp    11c3 <main+0x53>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
test   %al,%al
je     12d5 <main+0x165>
mov    %r15,%rdi
mov    %r13,%rsi
xor    %eax,%eax
call   1050 <printf@plt>
test   %r14d,%r14d
jle    12e1 <main+0x171>
mov    %r14d,%esi
cmp    $0x1,%r14d
jne    1347 <main+0x1d7>
xor    %eax,%eax
pxor   %xmm5,%xmm5
pcmpeqd %xmm6,%xmm6
movdqa 0xd93(%rip),%xmm7
test   $0x1,%sil
je     13cd <main+0x25d>
mov    (%rsp,%rax,1),%cl
cmp    $0x32,%cl
je     13c4 <main+0x254>
cmp    $0x33,%cl
je     13c8 <main+0x258>
cmp    $0x35,%cl
jne    13cd <main+0x25d>
mov    $0x5a,%cl
jmp    13ca <main+0x25a>
nopl   0x0(%rax)
mov    %r14d,%eax
shr    $0x1f,%eax
add    %r14d,%eax
mov    %eax,%ecx
and    $0xfffffffe,%ecx
sub    %ecx,%r14d
cmp    $0x1,%r14d
je     12f1 <main+0x181>
test   %r14d,%r14d
jne    11c0 <main+0x50>
mov    %r13,%rdi
call   1060 <digit@plt>
test   %al,%al
jne    11c0 <main+0x50>
jmp    1218 <main+0xa8>
lea    0xd7a(%rip),%rdi
jmp    11c3 <main+0x53>
mov    %r14d,%ebp
neg    %ebp
shr    %ebp
neg    %ebp
xor    %edx,%edx
jmp    1550 <main+0x3e0>
sar    %eax
movslq %eax,%rbp
mov    (%rsp,%rbp,1),%bl
mov    %r13,%rdi
call   1060 <digit@plt>
mov    (%rsp,%rbp,1),%cl
cmp    %al,%bl
je     130d <main+0x19d>
cmp    $0x31,%cl
je     132a <main+0x1ba>
lea    -0x38(%rcx),%eax
cmp    $0x17,%al
ja     15b7 <main+0x447>
movzbl %al,%eax
mov    $0xa30201,%edx
bt     %rax,%rdx
jae    15b7 <main+0x447>
lea    0xce2(%rip),%rdi
mov    %r13,%rsi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xcf3(%rip),%rbx
jmp    11cd <main+0x5d>
mov    %esi,%edx
and    $0xfffffffe,%edx
xor    %eax,%eax
pxor   %xmm5,%xmm5
pcmpeqd %xmm6,%xmm6
movdqa 0xca2(%rip),%xmm7
jmp    1373 <main+0x203>
mov    $0x45,%cl
mov    %cl,0x1(%rsp,%rax,1)
add    $0x2,%rax
cmp    %rax,%rdx
je     126d <main+0xfd>
movzbl (%rsp,%rax,1),%ecx
cmp    $0x32,%cl
je     1390 <main+0x220>
cmp    $0x35,%cl
je     13a0 <main+0x230>
cmp    $0x33,%cl
jne    13a5 <main+0x235>
mov    $0x45,%cl
jmp    13a2 <main+0x232>
nopw   0x0(%rax,%rax,1)
mov    $0x53,%cl
jmp    13a2 <main+0x232>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    $0x5a,%cl
mov    %cl,(%rsp,%rax,1)
movzbl 0x1(%rsp,%rax,1),%ecx
cmp    $0x32,%cl
je     13c0 <main+0x250>
cmp    $0x33,%cl
je     1360 <main+0x1f0>
cmp    $0x35,%cl
jne    1366 <main+0x1f6>
mov    $0x5a,%cl
jmp    1362 <main+0x1f2>
nopl   (%rax)
mov    $0x53,%cl
jmp    1362 <main+0x1f2>
mov    $0x53,%cl
jmp    13ca <main+0x25a>
mov    $0x45,%cl
mov    %cl,(%rsp,%rax,1)
mov    %r14d,%ebp
shr    $0x1f,%ebp
add    %r14d,%ebp
sar    %ebp
cmp    $0x1,%r14d
jle    13ea <main+0x27a>
cmp    $0x8,%ebp
jae    13f1 <main+0x281>
xor    %ecx,%ecx
jmp    14ce <main+0x35e>
xor    %edx,%edx
jmp    1550 <main+0x3e0>
lea    -0x1(%rbp),%rdx
lea    -0x1(%r14),%esi
mov    %esi,%edi
sub    %edx,%edi
xor    %ecx,%ecx
cmp    %esi,%edi
jg     14ce <main+0x35e>
shr    $0x20,%rdx
mov    $0x0,%edx
jne    14c3 <main+0x353>
mov    %ebp,%ecx
and    $0xfffffff8,%ecx
pxor   %xmm0,%xmm0
xor    %edx,%edx
pxor   %xmm1,%xmm1
cs nopw 0x0(%rax,%rax,1)
nop
movq   (%rsp,%rdx,1),%xmm2
movd   0x4(%rsp,%rdx,1),%xmm3
movslq %esi,%rsi
movd   -0x3(%rsp,%rsi,1),%xmm4
punpcklbw %xmm5,%xmm4
pshuflw $0x1b,%xmm4,%xmm4
packuswb %xmm4,%xmm4
pcmpeqb %xmm2,%xmm4
movd   -0x7(%rsp,%rsi,1),%xmm2
punpcklbw %xmm5,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
packuswb %xmm2,%xmm2
pcmpeqb %xmm3,%xmm2
pxor   %xmm6,%xmm4
punpcklbw %xmm4,%xmm4
punpcklwd %xmm4,%xmm4
pand   %xmm7,%xmm4
paddd  %xmm4,%xmm0
pxor   %xmm6,%xmm2
punpcklbw %xmm2,%xmm2
punpcklwd %xmm2,%xmm2
pand   %xmm7,%xmm2
paddd  %xmm2,%xmm1
add    $0x8,%rdx
add    $0xfffffff8,%esi
cmp    %rdx,%rcx
jne    1430 <main+0x2c0>
paddd  %xmm0,%xmm1
pshufd $0xee,%xmm1,%xmm0
paddd  %xmm1,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%edx
cmp    %rbp,%rcx
je     1550 <main+0x3e0>
test   $0x1,%bpl
jne    14d6 <main+0x366>
mov    %rcx,%rsi
jmp    14fc <main+0x38c>
xor    %edx,%edx
test   $0x1,%bpl
je     14c9 <main+0x359>
mov    (%rsp,%rcx,1),%bl
mov    %ecx,%esi
not    %esi
add    %r14d,%esi
movslq %esi,%rsi
xor    %edi,%edi
cmp    (%rsp,%rsi,1),%bl
lea    0xb46(%rip),%rbx
setne  %dil
add    %edi,%edx
mov    %rcx,%rsi
or     $0x1,%rsi
not    %rcx
add    %rbp,%rcx
je     1550 <main+0x3e0>
mov    %esi,%ecx
not    %ecx
add    %r14d,%ecx
nopl   0x0(%rax,%rax,1)
movslq %ecx,%rcx
movzbl (%rsp,%rsi,1),%ebx
movzbl 0x1(%rsp,%rsi,1),%eax
xor    %edi,%edi
cmp    (%rsp,%rcx,1),%bl
setne  %dil
add    %edx,%edi
lea    -0x1(%rcx),%edx
movslq %edx,%rbx
xor    %edx,%edx
cmp    (%rsp,%rbx,1),%al
setne  %dl
add    %edi,%edx
add    $0x2,%rsi
add    $0xfffffffe,%ecx
cmp    %rsi,%rbp
jne    1510 <main+0x3a0>
lea    0xaeb(%rip),%rbx
nopw   0x0(%rax,%rax,1)
mov    %r14d,%eax
and    $0x1,%eax
or     %edx,%eax
je     158f <main+0x41f>
test   %edx,%edx
jne    15a6 <main+0x436>
mov    %r14d,%eax
shr    $0x1f,%eax
add    %r14d,%eax
and    $0xfffffffe,%eax
sub    %eax,%r14d
cmp    $0x1,%r14d
jne    15a6 <main+0x436>
movslq %ebp,%rax
mov    (%rsp,%rax,1),%al
lea    -0x31(%rax),%ecx
cmp    $0x1e,%cl
ja     15a0 <main+0x430>
movzbl %cl,%ecx
mov    $0x51810081,%edx
bt     %rcx,%rdx
jae    15a0 <main+0x430>
lea    0xaf7(%rip),%rdi
call   1030 <puts@plt>
jmp    11cd <main+0x5d>
add    $0xac,%al
cmp    $0x5,%al
jbe    158f <main+0x41f>
lea    0xac6(%rip),%rdi
call   1030 <puts@plt>
jmp    11cd <main+0x5d>
add    $0xac,%cl
cmp    $0x5,%cl
jbe    132a <main+0x1ba>
jmp    11ac <main+0x3c>
xor    %eax,%eax
add    $0x2718,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [3 x i8] c"%s\00"
@.str.1 = [34 x i8] c"%s -- is a mirrored palindrome.\0A\0A\00"
@.str.2 = [33 x i8] c"%s -- is a regular palindrome.\0A\0A\00"
@.str.3 = [28 x i8] c" -- is a mirrored string.\0A\0A\00"
@.str.4 = [27 x i8] c" -- is not a palindrome.\0A\0A\00"
@.str.5 = [29 x i8] c"%s -- is not a palindrome.\0A\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [10000 x i8]
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i32 0, i32* %1
br label %8
8: ; preds = %310, %0
%9 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%10 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8* %9)
%11 = icmp eq i32 %10, 1
br i1 %11, label %12, label %311
12: ; preds = %8
store i32 0, i32* %5
%13 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%14 = call i32 @strlen(i8* %13)
store i32 %14, i32* %3
%15 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%16 = call i64 @isPalindrome(i8* %15)
%17 = icmp ne i64 %16, 0
br i1 %17, label %18, label %137
18: ; preds = %12
%19 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%20 = call signext i8 @digit(i8* %19)
%21 = icmp ne i8 %20, 0
br i1 %21, label %22, label %34
22: ; preds = %18
%23 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%24 = call i32 @mirrornum(i8* %23)
store i32 %24, i32* %7
%25 = load i32, i32* %7
%26 = icmp eq i32 %25, 0
br i1 %26, label %27, label %30
27: ; preds = %22
%28 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.1, i64 0, i64 0), i8* %28)
br label %33
30: ; preds = %22
%31 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.2, i64 0, i64 0), i8* %31)
br label %33
33: ; preds = %30, %27
br label %136
34: ; preds = %18
%35 = load i32, i32* %3
%36 = srem i32 %35, 2
%37 = icmp eq i32 %36, 0
br i1 %37, label %38, label %45
38: ; preds = %34
%39 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%40 = call signext i8 @digit(i8* %39)
%41 = icmp ne i8 %40, 0
br i1 %41, label %45, label %42
42: ; preds = %38
%43 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.1, i64 0, i64 0), i8* %43)
br label %135
45: ; preds = %38, %34
%46 = load i32, i32* %3
%47 = srem i32 %46, 2
%48 = icmp eq i32 %47, 1
br i1 %48, label %49, label %131
49: ; preds = %45
%50 = load i32, i32* %3
%51 = sdiv i32 %50, 2
store i32 %51, i32* %4
%52 = load i32, i32* %4
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %53
%55 = load i8, i8* %54
%56 = sext i8 %55 to i32
%57 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%58 = call signext i8 @digit(i8* %57)
%59 = sext i8 %58 to i32
%60 = icmp ne i32 %56, %59
br i1 %60, label %61, label %68
61: ; preds = %49
%62 = load i32, i32* %4
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %63
%65 = load i8, i8* %64
%66 = sext i8 %65 to i32
%67 = icmp eq i32 %66, 49
br i1 %67, label %124, label %68
68: ; preds = %61, %49
%69 = load i32, i32* %4
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %70
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = icmp eq i32 %73, 56
br i1 %74, label %124, label %75
75: ; preds = %68
%76 = load i32, i32* %4
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %77
%79 = load i8, i8* %78
%80 = sext i8 %79 to i32
%81 = icmp eq i32 %80, 65
br i1 %81, label %124, label %82
82: ; preds = %75
%83 = load i32, i32* %4
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %84
%86 = load i8, i8* %85
%87 = sext i8 %86 to i32
%88 = icmp eq i32 %87, 72
br i1 %88, label %124, label %89
89: ; preds = %82
%90 = load i32, i32* %4
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %91
%93 = load i8, i8* %92
%94 = sext i8 %93 to i32
%95 = icmp eq i32 %94, 73
br i1 %95, label %124, label %96
96: ; preds = %89
%97 = load i32, i32* %4
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %98
%100 = load i8, i8* %99
%101 = sext i8 %100 to i32
%102 = icmp eq i32 %101, 77
br i1 %102, label %124, label %103
103: ; preds = %96
%104 = load i32, i32* %4
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %105
%107 = load i8, i8* %106
%108 = sext i8 %107 to i32
%109 = icmp eq i32 %108, 79
br i1 %109, label %124, label %110
110: ; preds = %103
%111 = load i32, i32* %4
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %112
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = icmp sge i32 %115, 84
br i1 %116, label %117, label %127
117: ; preds = %110
%118 = load i32, i32* %4
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %119
%121 = load i8, i8* %120
%122 = sext i8 %121 to i32
%123 = icmp sle i32 %122, 89
br i1 %123, label %124, label %127
124: ; preds = %117, %103, %96, %89, %82, %75, %68, %61
%125 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%126 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.1, i64 0, i64 0), i8* %125)
br label %130
127: ; preds = %117, %110
%128 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%129 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.2, i64 0, i64 0), i8* %128)
br label %130
130: ; preds = %127, %124
br label %134
131: ; preds = %45
%132 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%133 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.2, i64 0, i64 0), i8* %132)
br label %134
134: ; preds = %131, %130
br label %135
135: ; preds = %134, %42
br label %136
136: ; preds = %135, %33
br label %310
137: ; preds = %12
%138 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%139 = call signext i8 @digit(i8* %138)
%140 = icmp ne i8 %139, 0
br i1 %140, label %141, label %306
141: ; preds = %137
%142 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%143 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i8* %142)
store i32 0, i32* %6
br label %144
144: ; preds = %184, %141
%145 = load i32, i32* %6
%146 = load i32, i32* %3
%147 = icmp slt i32 %145, %146
br i1 %147, label %148, label %187
148: ; preds = %144
%149 = load i32, i32* %6
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %150
%152 = load i8, i8* %151
%153 = sext i8 %152 to i32
%154 = icmp eq i32 %153, 50
br i1 %154, label %155, label %159
155: ; preds = %148
%156 = load i32, i32* %6
%157 = sext i32 %156 to i64
%158 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %157
store i8 83, i8* %158
br label %183
159: ; preds = %148
%160 = load i32, i32* %6
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %161
%163 = load i8, i8* %162
%164 = sext i8 %163 to i32
%165 = icmp eq i32 %164, 51
br i1 %165, label %166, label %170
166: ; preds = %159
%167 = load i32, i32* %6
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %168
store i8 69, i8* %169
br label %182
170: ; preds = %159
%171 = load i32, i32* %6
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %172
%174 = load i8, i8* %173
%175 = sext i8 %174 to i32
%176 = icmp eq i32 %175, 53
br i1 %176, label %177, label %181
177: ; preds = %170
%178 = load i32, i32* %6
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %179
store i8 90, i8* %180
br label %181
181: ; preds = %177, %170
br label %182
182: ; preds = %181, %166
br label %183
183: ; preds = %182, %155
br label %184
184: ; preds = %183
%185 = load i32, i32* %6
%186 = add nsw i32 %185, 1
store i32 %186, i32* %6
br label %144
187: ; preds = %144
%188 = load i32, i32* %3
%189 = sdiv i32 %188, 2
store i32 %189, i32* %4
store i32 0, i32* %6
br label %190
190: ; preds = %215, %187
%191 = load i32, i32* %6
%192 = load i32, i32* %4
%193 = icmp slt i32 %191, %192
br i1 %193, label %194, label %218
194: ; preds = %190
%195 = load i32, i32* %6
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %196
%198 = load i8, i8* %197
%199 = sext i8 %198 to i32
%200 = load i32, i32* %3
%201 = load i32, i32* %6
%202 = sub nsw i32 %200, %201
%203 = sub nsw i32 %202, 1
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %204
%206 = load i8, i8* %205
%207 = sext i8 %206 to i32
%208 = icmp eq i32 %199, %207
br i1 %208, label %209, label %211
209: ; preds = %194
%210 = load i32, i32* %5
store i32 %210, i32* %5
br label %214
211: ; preds = %194
%212 = load i32, i32* %5
%213 = add nsw i32 %212, 1
store i32 %213, i32* %5
br label %214
214: ; preds = %211, %209
br label %215
215: ; preds = %214
%216 = load i32, i32* %6
%217 = add nsw i32 %216, 1
store i32 %217, i32* %6
br label %190
218: ; preds = %190
%219 = load i32, i32* %5
%220 = icmp eq i32 %219, 0
br i1 %220, label %221, label %227
221: ; preds = %218
%222 = load i32, i32* %3
%223 = srem i32 %222, 2
%224 = icmp eq i32 %223, 0
br i1 %224, label %225, label %227
225: ; preds = %221
%226 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0))
br label %305
227: ; preds = %221, %218
%228 = load i32, i32* %5
%229 = icmp eq i32 %228, 0
br i1 %229, label %230, label %302
230: ; preds = %227
%231 = load i32, i32* %3
%232 = srem i32 %231, 2
%233 = icmp eq i32 %232, 1
br i1 %233, label %234, label %302
234: ; preds = %230
%235 = load i32, i32* %4
%236 = sext i32 %235 to i64
%237 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %236
%238 = load i8, i8* %237
%239 = sext i8 %238 to i32
%240 = icmp eq i32 %239, 49
br i1 %240, label %297, label %241
241: ; preds = %234
%242 = load i32, i32* %4
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %243
%245 = load i8, i8* %244
%246 = sext i8 %245 to i32
%247 = icmp eq i32 %246, 56
br i1 %247, label %297, label %248
248: ; preds = %241
%249 = load i32, i32* %4
%250 = sext i32 %249 to i64
%251 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %250
%252 = load i8, i8* %251
%253 = sext i8 %252 to i32
%254 = icmp eq i32 %253, 65
br i1 %254, label %297, label %255
255: ; preds = %248
%256 = load i32, i32* %4
%257 = sext i32 %256 to i64
%258 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %257
%259 = load i8, i8* %258
%260 = sext i8 %259 to i32
%261 = icmp eq i32 %260, 72
br i1 %261, label %297, label %262
262: ; preds = %255
%263 = load i32, i32* %4
%264 = sext i32 %263 to i64
%265 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %264
%266 = load i8, i8* %265
%267 = sext i8 %266 to i32
%268 = icmp eq i32 %267, 73
br i1 %268, label %297, label %269
269: ; preds = %262
%270 = load i32, i32* %4
%271 = sext i32 %270 to i64
%272 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %271
%273 = load i8, i8* %272
%274 = sext i8 %273 to i32
%275 = icmp eq i32 %274, 77
br i1 %275, label %297, label %276
276: ; preds = %269
%277 = load i32, i32* %4
%278 = sext i32 %277 to i64
%279 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %278
%280 = load i8, i8* %279
%281 = sext i8 %280 to i32
%282 = icmp eq i32 %281, 79
br i1 %282, label %297, label %283
283: ; preds = %276
%284 = load i32, i32* %4
%285 = sext i32 %284 to i64
%286 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %285
%287 = load i8, i8* %286
%288 = sext i8 %287 to i32
%289 = icmp sge i32 %288, 84
br i1 %289, label %290, label %299
290: ; preds = %283
%291 = load i32, i32* %4
%292 = sext i32 %291 to i64
%293 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 %292
%294 = load i8, i8* %293
%295 = sext i8 %294 to i32
%296 = icmp sle i32 %295, 89
br i1 %296, label %297, label %299
297: ; preds = %290, %276, %269, %262, %255, %248, %241, %234
%298 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.3, i64 0, i64 0))
br label %301
299: ; preds = %290, %283
%300 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.4, i64 0, i64 0))
br label %301
301: ; preds = %299, %297
br label %304
302: ; preds = %230, %227
%303 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.4, i64 0, i64 0))
br label %304
304: ; preds = %302, %301
br label %305
305: ; preds = %304, %225
br label %309
306: ; preds = %137
%307 = getelementptr inbounds [10000 x i8], [10000 x i8]* %2, i64 0, i64 0
%308 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.5, i64 0, i64 0), i8* %307)
br label %309
309: ; preds = %306, %305
br label %310
310: ; preds = %309, %136
br label %8
311: ; preds = %8
ret i32 0
}

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