#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*/ getchar();
int /*<<< orphan*/ gets(char *);
int /*<<< orphan*/ printf(char *, char *);
int /*<<< orphan*/ scanf(char *, int *);
int strlen(char *);
int main() {
  char str[1000], str1[1000];
  int i, k, j, n, m, l, T;
  scanf("%d", &T);
  getchar();
  while (T--) {
    gets(str);
    k = strlen(str);
    for (i = 0; i < k; i++) {
      if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))
        str[i] = str[i] + 3;
    }
    n = 0;
    for (j = k - 1; j >= 0; j--) {
      str1[n] = str[j];
      n++;
    }
    str1[n] = '\0';
    l = k / 2;
    for (i = l; i < k; i++) {
      str1[i] = str1[i] - 1;
    }
    printf("%s\n", str1);
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x800,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xe97(%rip),%rdi
lea    -0x7fc(%rbp),%rsi
call   1070 <scanf@plt>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    -0x7fc(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x7fc(%rbp)
cmp    $0x0,%eax
je     135f <main+0x20f>
lea    -0x3f0(%rbp),%rdi
call   1060 <gets@plt>
lea    -0x3f0(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x7e8(%rbp)
movl   $0x0,-0x7e4(%rbp)
mov    -0x7e4(%rbp),%eax
cmp    -0x7e8(%rbp),%eax
jge    126b <main+0x11b>
movslq -0x7e4(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
cmp    $0x41,%eax
jl     1200 <main+0xb0>
movslq -0x7e4(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
cmp    $0x5a,%eax
jle    1230 <main+0xe0>
movslq -0x7e4(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
cmp    $0x61,%eax
jl     1252 <main+0x102>
movslq -0x7e4(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
cmp    $0x7a,%eax
jg     1252 <main+0x102>
movslq -0x7e4(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
add    $0x3,%eax
mov    %al,%cl
movslq -0x7e4(%rbp),%rax
mov    %cl,-0x3f0(%rbp,%rax,1)
jmp    1257 <main+0x107>
mov    -0x7e4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7e4(%rbp)
jmp    11be <main+0x6e>
movl   $0x0,-0x7f0(%rbp)
mov    -0x7e8(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x7ec(%rbp)
cmpl   $0x0,-0x7ec(%rbp)
jl     12d0 <main+0x180>
movslq -0x7ec(%rbp),%rax
mov    -0x3f0(%rbp,%rax,1),%cl
movslq -0x7f0(%rbp),%rax
mov    %cl,-0x7e0(%rbp,%rax,1)
mov    -0x7f0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7f0(%rbp)
mov    -0x7ec(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x7ec(%rbp)
jmp    1284 <main+0x134>
movslq -0x7f0(%rbp),%rax
movb   $0x0,-0x7e0(%rbp,%rax,1)
mov    -0x7e8(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x7f8(%rbp)
mov    -0x7f8(%rbp),%eax
mov    %eax,-0x7e4(%rbp)
mov    -0x7e4(%rbp),%eax
cmp    -0x7e8(%rbp),%eax
jge    1347 <main+0x1f7>
movslq -0x7e4(%rbp),%rax
movsbl -0x7e0(%rbp,%rax,1),%eax
ff
sub    $0x1,%eax
mov    %al,%cl
movslq -0x7e4(%rbp),%rax
mov    %cl,-0x7e0(%rbp,%rax,1)
mov    -0x7e4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7e4(%rbp)
jmp    12ff <main+0x1af>
lea    -0x7e0(%rbp),%rsi
lea    0xcae(%rip),%rdi
call   1040 <printf@plt>
jmp    117c <main+0x2c>
mov    -0x4(%rbp),%eax
add    $0x800,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x7e8,%rsp
lea    0xec8(%rip),%rdi
lea    0xc(%rsp),%rsi
call   1070 <scanf@plt>
xor    %eax,%eax
call   1050 <getchar@plt>
subl   $0x1,0xc(%rsp)
jae    1194 <main+0x44>
xor    %eax,%eax
add    $0x7e8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0xfffffffe,%r13d
lea    0x10(%rsp),%r12
lea    0xe8d(%rip),%r14
lea    0x400(%rsp),%r15
jmp    11c2 <main+0x72>
mov    %r14,%rdi
mov    %r15,%rsi
call   1040 <printf@plt>
subl   $0x1,0xc(%rsp)
jb     1180 <main+0x30>
mov    %r12,%rdi
call   1060 <gets@plt>
mov    %r12,%rdi
call   1030 <strlen@plt>
mov    $0x0,%ecx
test   %eax,%eax
movdqa 0xe1f(%rip),%xmm4
movdqa 0xe27(%rip),%xmm5
movdqa 0xe2f(%rip),%xmm6
pcmpeqd %xmm7,%xmm7
jle    140d <main+0x2bd>
mov    %eax,%r8d
cmp    $0x8,%eax
jae    1210 <main+0xc0>
xor    %edx,%edx
jmp    145d <main+0x30d>
nopw   0x0(%rax,%rax,1)
mov    %r8d,%edx
and    $0xfffffff8,%edx
xor    %esi,%esi
jmp    122d <main+0xdd>
nopw   0x0(%rax,%rax,1)
add    $0x8,%rsi
cmp    %rsi,%rdx
je     1350 <main+0x200>
movq   0x10(%rsp,%rsi,1),%xmm0
movdqa %xmm0,%xmm1
pand   %xmm4,%xmm1
paddb  %xmm5,%xmm1
movdqa %xmm1,%xmm2
pmaxub %xmm6,%xmm2
pcmpeqb %xmm1,%xmm2
movd   %xmm2,%ecx
not    %cl
movd   %xmm0,%edi
test   $0x1,%cl
je     1261 <main+0x111>
lea    0x3(%rdi),%ecx
mov    %cl,0x10(%rsp,%rsi,1)
movdqa %xmm2,%xmm1
pxor   %xmm7,%xmm1
movdqa %xmm1,%xmm3
pslld  $0x8,%xmm3
movd   %xmm3,%ecx
shr    $0x10,%ecx
test   $0x1,%cl
je     128a <main+0x13a>
mov    %edi,%ecx
shr    $0x8,%ecx
add    $0x3,%cl
mov    %cl,0x11(%rsp,%rsi,1)
pshuflw $0x55,%xmm2,%xmm3
pxor   %xmm7,%xmm3
pextrw $0x2,%xmm3,%ecx
test   $0x1,%cl
je     12a9 <main+0x159>
mov    %edi,%ecx
shr    $0x10,%ecx
add    $0x3,%cl
mov    %cl,0x12(%rsp,%rsi,1)
movdqa %xmm1,%xmm3
psllq  $0x18,%xmm3
pextrw $0x3,%xmm3,%ecx
test   $0x1,%cl
je     12c8 <main+0x178>
shr    $0x18,%edi
add    $0x3,%dil
mov    %dil,0x13(%rsp,%rsi,1)
pshufd $0x55,%xmm2,%xmm2
pxor   %xmm7,%xmm2
pextrw $0x4,%xmm2,%edi
pextrw $0x2,%xmm0,%ecx
test   $0x1,%dil
je     12e9 <main+0x199>
lea    0x3(%rcx),%edi
mov    %dil,0x14(%rsp,%rsi,1)
movdqa %xmm1,%xmm2
pslldq $0x5,%xmm2
pextrw $0x5,%xmm2,%edi
test   $0x1,%dil
je     1307 <main+0x1b7>
shr    $0x8,%ecx
add    $0x3,%cl
mov    %cl,0x15(%rsp,%rsi,1)
pextrw $0x3,%xmm1,%edi
pextrw $0x3,%xmm0,%ecx
test   $0x1,%dil
je     131f <main+0x1cf>
lea    0x3(%rcx),%edi
mov    %dil,0x16(%rsp,%rsi,1)
pslldq $0x7,%xmm1
pextrw $0x7,%xmm1,%edi
test   $0x1,%dil
je     1220 <main+0xd0>
shr    $0x8,%ecx
add    $0x3,%cl
mov    %cl,0x17(%rsp,%rsi,1)
jmp    1220 <main+0xd0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmp    %r8,%rdx
jne    145d <main+0x30d>
mov    $0x0,%ecx
test   %eax,%eax
jle    140d <main+0x2bd>
cmp    $0x8,%eax
jae    148d <main+0x33d>
xor    %edx,%edx
mov    %r8,%rsi
mov    %rdx,%rdi
not    %rdi
add    %r8,%rdi
mov    %r8,%rcx
and    $0x3,%rcx
je     13ac <main+0x25c>
cs nopw 0x0(%rax,%rax,1)
add    $0xffffffffffffffff,%rsi
mov    %esi,%ebp
movzbl 0x10(%rsp,%rbp,1),%ebx
mov    %bl,0x400(%rsp,%rdx,1)
add    $0x1,%rdx
add    $0xffffffffffffffff,%rcx
jne    1390 <main+0x240>
cmp    $0x3,%rdi
jb     140b <main+0x2bb>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    (%rsi,%r13,1),%rcx
lea    0x1(%rcx),%edi
movzbl 0x10(%rsp,%rdi,1),%ebx
mov    %bl,0x400(%rsp,%rdx,1)
mov    %ecx,%edi
movzbl 0x10(%rsp,%rdi,1),%ebx
mov    %bl,0x401(%rsp,%rdx,1)
add    $0xffffffff,%ecx
movzbl 0x10(%rsp,%rcx,1),%ecx
mov    %cl,0x402(%rsp,%rdx,1)
add    $0xfffffffffffffffc,%rsi
mov    %esi,%ecx
movzbl 0x10(%rsp,%rcx,1),%ecx
mov    %cl,0x403(%rsp,%rdx,1)
add    $0x4,%rdx
cmp    %rdx,%r8
jne    13c0 <main+0x270>
mov    %eax,%ecx
mov    %ecx,%ecx
movb   $0x0,0x400(%rsp,%rcx,1)
mov    %eax,%ecx
shr    $0x1f,%ecx
add    %eax,%ecx
sar    %ecx
cmp    %eax,%ecx
jge    11b0 <main+0x60>
movslq %ecx,%r9
cltq
mov    %rax,%rsi
sub    %r9,%rsi
cmp    $0x8,%rsi
jae    1480 <main+0x330>
mov    %r9,%rdi
jmp    1700 <main+0x5b0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%rdx
cmp    %rdx,%r8
je     1359 <main+0x209>
movzbl 0x10(%rsp,%rdx,1),%ebx
mov    %ebx,%ecx
and    $0xdf,%cl
add    $0xbf,%cl
cmp    $0x19,%cl
ja     1450 <main+0x300>
add    $0x3,%bl
mov    %bl,0x10(%rsp,%rdx,1)
jmp    1450 <main+0x300>
nopl   0x0(%rax,%rax,1)
cmp    $0x20,%rsi
jae    14bd <main+0x36d>
xor    %edx,%edx
jmp    1592 <main+0x442>
lea    -0x1(%r8),%rsi
lea    -0x1(%rax),%ecx
cmp    %esi,%ecx
jb     136f <main+0x21f>
mov    %rsi,%rcx
shr    $0x20,%rcx
pxor   %xmm3,%xmm3
jne    136f <main+0x21f>
cmp    $0x20,%eax
jae    15d7 <main+0x487>
xor    %edx,%edx
jmp    1680 <main+0x530>
mov    %rsi,%rdx
and    $0xffffffffffffffe0,%rdx
lea    -0x20(%rdx),%rcx
mov    %rcx,%r8
shr    $0x5,%r8
add    $0x1,%r8
test   %rcx,%rcx
pcmpeqd %xmm4,%xmm4
je     16e3 <main+0x593>
mov    %r8,%rdi
and    $0xfffffffffffffffe,%rdi
lea    0x430(%rsp),%rcx
lea    (%rcx,%r9,1),%rbp
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nop
movdqu -0x30(%rbp,%rbx,1),%xmm0
movdqu -0x20(%rbp,%rbx,1),%xmm1
movdqu -0x10(%rbp,%rbx,1),%xmm2
movdqu 0x0(%rbp,%rbx,1),%xmm3
paddb  %xmm4,%xmm0
paddb  %xmm4,%xmm1
movdqu %xmm0,-0x30(%rbp,%rbx,1)
movdqu %xmm1,-0x20(%rbp,%rbx,1)
paddb  %xmm4,%xmm2
paddb  %xmm4,%xmm3
movdqu %xmm2,-0x10(%rbp,%rbx,1)
movdqu %xmm3,0x0(%rbp,%rbx,1)
add    $0x40,%rbx
add    $0xfffffffffffffffe,%rdi
jne    1500 <main+0x3b0>
test   $0x1,%r8b
je     157f <main+0x42f>
add    %r9,%rbx
movdqu 0x400(%rsp,%rbx,1),%xmm0
movdqu 0x410(%rsp,%rbx,1),%xmm1
paddb  %xmm4,%xmm0
paddb  %xmm4,%xmm1
movdqu %xmm0,0x400(%rsp,%rbx,1)
movdqu %xmm1,0x410(%rsp,%rbx,1)
cmp    %rdx,%rsi
je     11b0 <main+0x60>
test   $0x18,%sil
je     16f4 <main+0x5a4>
pcmpeqd %xmm1,%xmm1
mov    %rsi,%rcx
and    $0xfffffffffffffff8,%rcx
lea    (%rcx,%r9,1),%rdi
lea    (%rsp,%r9,1),%rbp
add    $0x400,%rbp
nopl   0x0(%rax)
movq   0x0(%rbp,%rdx,1),%xmm0
paddb  %xmm1,%xmm0
movq   %xmm0,0x0(%rbp,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rcx
jne    15b0 <main+0x460>
cmp    %rcx,%rsi
jne    1700 <main+0x5b0>
jmp    11b0 <main+0x60>
mov    %r8d,%edx
and    $0xffffffe0,%edx
xor    %edi,%edi
nop
mov    %esi,%ecx
movdqu -0xf(%rsp,%rcx,1),%xmm0
movdqu 0x1(%rsp,%rcx,1),%xmm1
movdqa %xmm1,%xmm2
punpcklbw %xmm3,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm2,%xmm2
punpckhbw %xmm3,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm2,%xmm1
movdqa %xmm0,%xmm2
punpcklbw %xmm3,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm2,%xmm2
punpckhbw %xmm3,%xmm0
pshufd $0x4e,%xmm0,%xmm0
pshuflw $0x1b,%xmm0,%xmm0
pshufhw $0x1b,%xmm0,%xmm0
packuswb %xmm2,%xmm0
movdqa %xmm1,0x400(%rsp,%rdi,1)
movdqa %xmm0,0x410(%rsp,%rdi,1)
add    $0x20,%rdi
add    $0xffffffffffffffe0,%rsi
cmp    %rdi,%rdx
jne    15e0 <main+0x490>
cmp    %r8,%rdx
je     140b <main+0x2bb>
test   $0x18,%r8b
je     1716 <main+0x5c6>
mov    %rdx,%rbp
mov    %r8d,%edx
and    $0xfffffff8,%edx
mov    %r8,%rsi
sub    %rdx,%rsi
mov    %rbp,%rdi
not    %rdi
add    %r8,%rdi
nopl   0x0(%rax,%rax,1)
mov    %edi,%ecx
movq   0x9(%rsp,%rcx,1),%xmm0
punpcklbw %xmm3,%xmm0
pshufd $0x4e,%xmm0,%xmm0
pshuflw $0x1b,%xmm0,%xmm0
pshufhw $0x1b,%xmm0,%xmm0
packuswb %xmm0,%xmm0
movq   %xmm0,0x400(%rsp,%rbp,1)
add    $0x8,%rbp
add    $0xfffffffffffffff8,%rdi
cmp    %rbp,%rdx
jne    16a0 <main+0x550>
cmp    %r8,%rdx
jne    1374 <main+0x224>
jmp    140b <main+0x2bb>
xor    %ebx,%ebx
test   $0x1,%r8b
jne    1550 <main+0x400>
jmp    157f <main+0x42f>
add    %r9,%rdx
mov    %rdx,%rdi
nopw   0x0(%rax,%rax,1)
addb   $0xff,0x400(%rsp,%rdi,1)
ff
add    $0x1,%rdi
cmp    %rdi,%rax
jne    1700 <main+0x5b0>
jmp    11b0 <main+0x60>
mov    %r8,%rsi
sub    %rdx,%rsi
jmp    1374 <main+0x224>

LLVM IR (-O0):
@.str = [3 x i8] c"%d\00"
@.str.1 = [4 x i8] c"%s\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [1000 x i8]
%3 = alloca [1000 x i8]
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i32 0, i32* %1
%11 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %10)
%12 = call i32 (...) @getchar()
br label %13
13: ; preds = %113, %0
%14 = load i32, i32* %10
%15 = add nsw i32 %14, -1
store i32 %15, i32* %10
%16 = icmp ne i32 %14, 0
br i1 %16, label %17, label %116
17: ; preds = %13
%18 = getelementptr inbounds [1000 x i8], [1000 x i8]* %2, i64 0, i64 0
%19 = call i32 @gets(i8* %18)
%20 = getelementptr inbounds [1000 x i8], [1000 x i8]* %2, i64 0, i64 0
%21 = call i32 @strlen(i8* %20)
store i32 %21, i32* %5
store i32 0, i32* %4
br label %22
22: ; preds = %66, %17
%23 = load i32, i32* %4
%24 = load i32, i32* %5
%25 = icmp slt i32 %23, %24
br i1 %25, label %26, label %69
26: ; preds = %22
%27 = load i32, i32* %4
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds [1000 x i8], [1000 x i8]* %2, i64 0, i64 %28
%30 = load i8, i8* %29
%31 = sext i8 %30 to i32
%32 = icmp sge i32 %31, 65
br i1 %32, label %33, label %40
33: ; preds = %26
%34 = load i32, i32* %4
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds [1000 x i8], [1000 x i8]* %2, i64 0, i64 %35
%37 = load i8, i8* %36
%38 = sext i8 %37 to i32
%39 = icmp sle i32 %38, 90
br i1 %39, label %54, label %40
40: ; preds = %33, %26
%41 = load i32, i32* %4
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds [1000 x i8], [1000 x i8]* %2, i64 0, i64 %42
%44 = load i8, i8* %43
%45 = sext i8 %44 to i32
%46 = icmp sge i32 %45, 97
br i1 %46, label %47, label %65
47: ; preds = %40
%48 = load i32, i32* %4
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds [1000 x i8], [1000 x i8]* %2, i64 0, i64 %49
%51 = load i8, i8* %50
%52 = sext i8 %51 to i32
%53 = icmp sle i32 %52, 122
br i1 %53, label %54, label %65
54: ; preds = %47, %33
%55 = load i32, i32* %4
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [1000 x i8], [1000 x i8]* %2, i64 0, i64 %56
%58 = load i8, i8* %57
%59 = sext i8 %58 to i32
%60 = add nsw i32 %59, 3
%61 = trunc i32 %60 to i8
%62 = load i32, i32* %4
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds [1000 x i8], [1000 x i8]* %2, i64 0, i64 %63
store i8 %61, i8* %64
br label %65
65: ; preds = %54, %47, %40
br label %66
66: ; preds = %65
%67 = load i32, i32* %4
%68 = add nsw i32 %67, 1
store i32 %68, i32* %4
br label %22
69: ; preds = %22
store i32 0, i32* %7
%70 = load i32, i32* %5
%71 = sub nsw i32 %70, 1
store i32 %71, i32* %6
br label %72
72: ; preds = %85, %69
%73 = load i32, i32* %6
%74 = icmp sge i32 %73, 0
br i1 %74, label %75, label %88
75: ; preds = %72
%76 = load i32, i32* %6
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [1000 x i8], [1000 x i8]* %2, i64 0, i64 %77
%79 = load i8, i8* %78
%80 = load i32, i32* %7
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds [1000 x i8], [1000 x i8]* %3, i64 0, i64 %81
store i8 %79, i8* %82
%83 = load i32, i32* %7
%84 = add nsw i32 %83, 1
store i32 %84, i32* %7
br label %85
85: ; preds = %75
%86 = load i32, i32* %6
%87 = add nsw i32 %86, -1
store i32 %87, i32* %6
br label %72
88: ; preds = %72
%89 = load i32, i32* %7
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds [1000 x i8], [1000 x i8]* %3, i64 0, i64 %90
store i8 0, i8* %91
%92 = load i32, i32* %5
%93 = sdiv i32 %92, 2
store i32 %93, i32* %9
%94 = load i32, i32* %9
store i32 %94, i32* %4
br label %95
95: ; preds = %110, %88
%96 = load i32, i32* %4
%97 = load i32, i32* %5
%98 = icmp slt i32 %96, %97
br i1 %98, label %99, label %113
99: ; preds = %95
%100 = load i32, i32* %4
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds [1000 x i8], [1000 x i8]* %3, i64 0, i64 %101
%103 = load i8, i8* %102
%104 = sext i8 %103 to i32
%105 = sub nsw i32 %104, 1
%106 = trunc i32 %105 to i8
%107 = load i32, i32* %4
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds [1000 x i8], [1000 x i8]* %3, i64 0, i64 %108
store i8 %106, i8* %109
br label %110
110: ; preds = %99
%111 = load i32, i32* %4
%112 = add nsw i32 %111, 1
store i32 %112, i32* %4
br label %95
113: ; preds = %95
%114 = getelementptr inbounds [1000 x i8], [1000 x i8]* %3, i64 0, i64 0
%115 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i8* %114)
br label %13
116: ; preds = %13
%117 = load i32, i32* %1
ret i32 %117
}

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