#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ fgets(char *, int, int /*<<< orphan*/);
int /*<<< orphan*/ printf(char *, char, int);
int /*<<< orphan*/ stdin;
int strlen(char *);
int main() {
  char a[1000], help[1000], b = 'a';
  fgets(a, 1001, stdin);
  int i = 0, h = 0, lc = 0, sl = strlen(a);
  do {
    if (a[i] >= 'A' && a[i] <= 'Z')
      a[i] = a[i] + 32;
    i++;
  } while (i < sl);
  i = 0;
  do {
    if (a[i] >= 'a' && a[i] <= 'z') {
      help[h] = a[i];
      h++;
    }
    i++;
  } while (i < sl);
  do {
    for (i = 0, lc = 0; i < strlen(help); i++)
      if (help[i] == b)
        lc++;
    if (lc != 0)
      printf("%c - %d\n", b, lc);
    b++;
  } while (b <= 'z');
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x800,%rsp
movl   $0x0,-0x4(%rbp)
movb   $0x61,-0x7e1(%rbp)
lea    -0x3f0(%rbp),%rdi
mov    0x2e91(%rip),%rax
mov    (%rax),%edx
mov    $0x3e9,%esi
call   1050 <fgets@plt>
movl   $0x0,-0x7e8(%rbp)
movl   $0x0,-0x7ec(%rbp)
movl   $0x0,-0x7f0(%rbp)
lea    -0x3f0(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0x7f4(%rbp)
movslq -0x7e8(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
cmp    $0x41,%eax
jl     11e5 <main+0xb5>
movslq -0x7e8(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
cmp    $0x5a,%eax
jg     11e5 <main+0xb5>
movslq -0x7e8(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
add    $0x20,%eax
mov    %al,%cl
movslq -0x7e8(%rbp),%rax
mov    %cl,-0x3f0(%rbp,%rax,1)
mov    -0x7e8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7e8(%rbp)
mov    -0x7e8(%rbp),%eax
cmp    -0x7f4(%rbp),%eax
jl     1193 <main+0x63>
movl   $0x0,-0x7e8(%rbp)
movslq -0x7e8(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
cmp    $0x61,%eax
jl     126b <main+0x13b>
movslq -0x7e8(%rbp),%rax
movsbl -0x3f0(%rbp,%rax,1),%eax
ff
cmp    $0x7a,%eax
jg     126b <main+0x13b>
movslq -0x7e8(%rbp),%rax
mov    -0x3f0(%rbp,%rax,1),%cl
movslq -0x7ec(%rbp),%rax
mov    %cl,-0x7e0(%rbp,%rax,1)
mov    -0x7ec(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7ec(%rbp)
mov    -0x7e8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7e8(%rbp)
mov    -0x7e8(%rbp),%eax
cmp    -0x7f4(%rbp),%eax
jl     1210 <main+0xe0>
jmp    1291 <main+0x161>
movl   $0x0,-0x7e8(%rbp)
movl   $0x0,-0x7f0(%rbp)
mov    -0x7e8(%rbp),%eax
mov    %eax,-0x7f8(%rbp)
lea    -0x7e0(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,%ecx
mov    -0x7f8(%rbp),%eax
cmp    %ecx,%eax
jge    1313 <main+0x1e3>
movslq -0x7e8(%rbp),%rax
movsbl -0x7e0(%rbp,%rax,1),%eax
ff
movsbl -0x7e1(%rbp),%ecx
cmp    %ecx,%eax
jne    12fa <main+0x1ca>
mov    -0x7f0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7f0(%rbp)
jmp    12ff <main+0x1cf>
mov    -0x7e8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7e8(%rbp)
jmp    12a5 <main+0x175>
cmpl   $0x0,-0x7f0(%rbp)
je     133b <main+0x20b>
mov    -0x7e1(%rbp),%al
mov    -0x7f0(%rbp),%edx
lea    0xccd(%rip),%rdi
movsbl %al,%esi
call   1040 <printf@plt>
mov    -0x7e1(%rbp),%al
add    $0x1,%al
mov    %al,-0x7e1(%rbp)
movsbl -0x7e1(%rbp),%eax
cmp    $0x7a,%eax
jle    1291 <main+0x161>
xor    %eax,%eax
add    $0x800,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x7e0,%rsp
mov    0x2ea2(%rip),%rax
mov    (%rax),%edx
mov    %rsp,%rbx
mov    %rbx,%rdi
mov    $0x3e9,%esi
call   1050 <fgets@plt>
mov    %rbx,%rdi
call   1030 <strlen@plt>
cmp    $0x2,%eax
mov    $0x1,%ecx
cmovge %eax,%ecx
cmp    $0x8,%ecx
jae    1177 <main+0x47>
xor    %edx,%edx
jmp    139d <main+0x26d>
mov    %ecx,%edx
and    $0x7ffffff8,%edx
xor    %esi,%esi
movdqa 0xe77(%rip),%xmm0
movdqa 0xe7f(%rip),%xmm1
pcmpeqd %xmm2,%xmm2
jmp    11ad <main+0x7d>
nopw   0x0(%rax,%rax,1)
add    $0x8,%rsi
cmp    %rsi,%rdx
je     12df <main+0x1af>
movq   (%rsp,%rsi,1),%xmm3
movdqa %xmm3,%xmm4
paddb  %xmm0,%xmm4
movdqa %xmm4,%xmm5
pmaxub %xmm1,%xmm5
pcmpeqb %xmm4,%xmm5
movd   %xmm5,%edi
not    %dil
test   $0x1,%dil
je     11df <main+0xaf>
movd   %xmm3,%edi
add    $0x20,%dil
mov    %dil,(%rsp,%rsi,1)
movdqa %xmm5,%xmm4
pxor   %xmm2,%xmm4
movdqa %xmm4,%xmm6
pslld  $0x8,%xmm6
movd   %xmm6,%edi
shr    $0x10,%edi
test   $0x1,%dil
je     120d <main+0xdd>
movd   %xmm3,%edi
shr    $0x8,%edi
add    $0x20,%dil
mov    %dil,0x1(%rsp,%rsi,1)
pshuflw $0x55,%xmm5,%xmm6
pxor   %xmm2,%xmm6
pextrw $0x2,%xmm6,%edi
test   $0x1,%dil
je     1231 <main+0x101>
movd   %xmm3,%edi
shr    $0x10,%edi
add    $0x20,%dil
mov    %dil,0x2(%rsp,%rsi,1)
movdqa %xmm4,%xmm6
psllq  $0x18,%xmm6
pextrw $0x3,%xmm6,%edi
test   $0x1,%dil
je     1255 <main+0x125>
movd   %xmm3,%edi
shr    $0x18,%edi
add    $0x20,%dil
mov    %dil,0x3(%rsp,%rsi,1)
pshufd $0x55,%xmm5,%xmm5
pxor   %xmm2,%xmm5
pextrw $0x4,%xmm5,%edi
test   $0x1,%dil
je     1277 <main+0x147>
pextrw $0x2,%xmm3,%edi
add    $0x20,%dil
mov    %dil,0x4(%rsp,%rsi,1)
movdqa %xmm4,%xmm5
pslldq $0x5,%xmm5
pextrw $0x5,%xmm5,%edi
test   $0x1,%dil
je     129c <main+0x16c>
pextrw $0x2,%xmm3,%edi
shr    $0x8,%edi
add    $0x20,%dil
mov    %dil,0x5(%rsp,%rsi,1)
pextrw $0x3,%xmm4,%edi
test   $0x1,%dil
je     12b5 <main+0x185>
pextrw $0x3,%xmm3,%edi
add    $0x20,%dil
mov    %dil,0x6(%rsp,%rsi,1)
pslldq $0x7,%xmm4
pextrw $0x7,%xmm4,%edi
test   $0x1,%dil
je     11a0 <main+0x70>
pextrw $0x3,%xmm3,%edi
shr    $0x8,%edi
add    $0x20,%dil
mov    %dil,0x7(%rsp,%rsi,1)
jmp    11a0 <main+0x70>
cmp    %rcx,%rdx
jne    139d <main+0x26d>
cmp    $0x2,%eax
jge    13c6 <main+0x296>
xor    %edx,%edx
xor    %eax,%eax
test   $0x1,%cl
je     130e <main+0x1de>
mov    (%rsp,%rdx,1),%cl
lea    -0x61(%rcx),%edx
cmp    $0x19,%dl
ja     130e <main+0x1de>
cltq
mov    %cl,0x3f0(%rsp,%rax,1)
mov    $0x61,%r12b
lea    0x3f0(%rsp),%r15
lea    0xd00(%rip),%r14
jmp    133a <main+0x20a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%r12b
cmp    $0x7b,%r12b
je     13b4 <main+0x284>
mov    %r15,%rdi
call   1030 <strlen@plt>
test   %eax,%eax
jle    1330 <main+0x200>
xor    %ebx,%ebx
xor    %ebp,%ebp
nopw   0x0(%rax,%rax,1)
xor    %eax,%eax
cmp    %r12b,0x3f0(%rsp,%rbx,1)
sete   %al
add    %eax,%ebp
add    $0x1,%rbx
mov    %r15,%rdi
call   1030 <strlen@plt>
cltq
cmp    %rax,%rbx
jl     1350 <main+0x220>
test   %ebp,%ebp
je     1330 <main+0x200>
movsbl %r12b,%esi
mov    %r14,%rdi
mov    %ebp,%edx
call   1040 <printf@plt>
jmp    1330 <main+0x200>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%rdx
cmp    %rdx,%rcx
je     12e8 <main+0x1b8>
movzbl (%rsp,%rdx,1),%esi
lea    -0x41(%rsi),%edi
cmp    $0x19,%dil
ja     1390 <main+0x260>
add    $0x20,%sil
mov    %sil,(%rsp,%rdx,1)
jmp    1390 <main+0x260>
xor    %eax,%eax
add    $0x7e0,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %ecx,%esi
and    $0x7ffffffe,%esi
xor    %edx,%edx
xor    %eax,%eax
jmp    13ed <main+0x2bd>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x2,%rdx
cmp    %rdx,%rsi
je     12f5 <main+0x1c5>
movzbl (%rsp,%rdx,1),%edi
lea    -0x61(%rdi),%ebp
cmp    $0x19,%bpl
ja     1407 <main+0x2d7>
cltq
mov    %dil,0x3f0(%rsp,%rax,1)
add    $0x1,%eax
movzbl 0x1(%rsp,%rdx,1),%edi
lea    -0x61(%rdi),%ebp
cmp    $0x19,%bpl
ja     13e0 <main+0x2b0>
cltq
mov    %dil,0x3f0(%rsp,%rax,1)
add    $0x1,%eax
jmp    13e0 <main+0x2b0>

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

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