#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 EOF;
char getchar();
int /*<<< orphan*/ printf(char *, int);
int /*<<< orphan*/ putchar(char);
int main(void) {
  size_t i;
  int j;
  char c;
  size_t nc = 0;
  int over = 0;
  int state = 0;
  int max = 0;
  int scale = 1;
  int nlen[18];
  for (i = 0; i < 18; ++i)
    nlen[i] = 0;
  while (true) {
    c = getchar();
    if ('A' <= c && c <= 'Z')
      c = c - 'A' + 'a';
    if (c == EOF) {
      state = EOF;
    } else if (state == 0 && 'a' <= c && c <= 'z') {
      state = 1;
    } else if (state == 0 && (c < 'a' || 'z' < c)) {
      state = 0;
    } else if (state == 1 && 'a' <= c && c <= 'z') {
      state = 1;
    } else if (state == 2 && 'a' <= c && c <= 'z') {
      state = 1;
    } else if (state == 3 && 'a' <= c && c <= 'z') {
      state = 1;
    } else if (state == 1 && (c < 'a' || 'z' < c)) {
      state = 2;
    } else if (state == 3 && (c < 'a' || 'z' < c)) {
      state = 2;
    } else if (state == 1 && c == '\'') {
      state = 3;
    } else if (state == 2 && (c < 'a' || 'z' < c)) {
      state = 0;
    }
    if (state == 1)
      ++nc;
    else if (state == 2 || state == EOF) {
      if (nc <= 18)
        ++nlen[(nc - 1)];
      else
        ++over;
      nc = 0;
      if (state == EOF)
        break;
    }
  }
  for (i = 0; i < 18; ++i)
    if (nlen[i] > max)
      max = nlen[i];
  if (over > max)
    max = over;
  if (max > 60) {
    scale = (max / 60);
    if (max / scale > 60)
      ++scale;
  }
  for (i = 0; i < 18; ++i) {
    printf(" %2u: ", (unsigned)(i + 1));
    for (j = 0; j < (nlen[i] / scale); ++j)
      (void)putchar('*');
    printf(" (%d)\n", nlen[i]);
  }
  printf("%2d+: ", (18 + 1));
  for (i = 0; i < (size_t)(over / scale); ++i)
    (void)putchar('*');
  printf(" (%d)\n", over);
  printf("\n'*' = %d word", scale);
  if (scale > 1)
    (void)putchar('s');
  (void)putchar('\n');
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
movl   $0x0,-0x4(%rbp)
movq   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x1,-0x30(%rbp)
movq   $0x0,-0x10(%rbp)
cmpq   $0x12,-0x10(%rbp)
jae    1196 <main+0x66>
mov    -0x10(%rbp),%rax
movl   $0x0,-0x80(%rbp,%rax,4)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    116e <main+0x3e>
jmp    119b <main+0x6b>
mov    $0x0,%al
call   1050 <getchar@plt>
mov    %al,-0x15(%rbp)
movsbl -0x15(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jg     11d0 <main+0xa0>
movsbl -0x15(%rbp),%eax
cmp    $0x5a,%eax
jg     11d0 <main+0xa0>
movsbl -0x15(%rbp),%eax
sub    $0x41,%eax
add    $0x61,%eax
mov    %al,-0x15(%rbp)
movsbl -0x15(%rbp),%eax
mov    0x2e0d(%rip),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    11f8 <main+0xc8>
mov    0x2dfb(%rip),%rax
movsbl (%rax),%eax
mov    %eax,-0x28(%rbp)
jmp    13e3 <main+0x2b3>
cmpl   $0x0,-0x28(%rbp)
jne    122c <main+0xfc>
movsbl -0x15(%rbp),%ecx
mov    $0x61,%eax
cmp    %ecx,%eax
jg     122c <main+0xfc>
movsbl -0x15(%rbp),%eax
cmp    $0x7a,%eax
jg     122c <main+0xfc>
movl   $0x1,-0x28(%rbp)
jmp    13de <main+0x2ae>
cmpl   $0x0,-0x28(%rbp)
jne    1260 <main+0x130>
movsbl -0x15(%rbp),%eax
cmp    $0x61,%eax
jl     1254 <main+0x124>
movsbl -0x15(%rbp),%ecx
mov    $0x7a,%eax
cmp    %ecx,%eax
jge    1260 <main+0x130>
movl   $0x0,-0x28(%rbp)
jmp    13d9 <main+0x2a9>
cmpl   $0x1,-0x28(%rbp)
jne    1294 <main+0x164>
movsbl -0x15(%rbp),%ecx
mov    $0x61,%eax
cmp    %ecx,%eax
jg     1294 <main+0x164>
movsbl -0x15(%rbp),%eax
cmp    $0x7a,%eax
jg     1294 <main+0x164>
movl   $0x1,-0x28(%rbp)
jmp    13d4 <main+0x2a4>
cmpl   $0x2,-0x28(%rbp)
jne    12c8 <main+0x198>
movsbl -0x15(%rbp),%ecx
mov    $0x61,%eax
cmp    %ecx,%eax
jg     12c8 <main+0x198>
movsbl -0x15(%rbp),%eax
cmp    $0x7a,%eax
jg     12c8 <main+0x198>
movl   $0x1,-0x28(%rbp)
jmp    13cf <main+0x29f>
cmpl   $0x3,-0x28(%rbp)
jne    12fc <main+0x1cc>
movsbl -0x15(%rbp),%ecx
mov    $0x61,%eax
cmp    %ecx,%eax
jg     12fc <main+0x1cc>
movsbl -0x15(%rbp),%eax
cmp    $0x7a,%eax
jg     12fc <main+0x1cc>
movl   $0x1,-0x28(%rbp)
jmp    13ca <main+0x29a>
cmpl   $0x1,-0x28(%rbp)
jne    1330 <main+0x200>
movsbl -0x15(%rbp),%eax
cmp    $0x61,%eax
jl     1324 <main+0x1f4>
movsbl -0x15(%rbp),%ecx
mov    $0x7a,%eax
cmp    %ecx,%eax
jge    1330 <main+0x200>
movl   $0x2,-0x28(%rbp)
jmp    13c5 <main+0x295>
cmpl   $0x3,-0x28(%rbp)
jne    1364 <main+0x234>
movsbl -0x15(%rbp),%eax
cmp    $0x61,%eax
jl     1358 <main+0x228>
movsbl -0x15(%rbp),%ecx
mov    $0x7a,%eax
cmp    %ecx,%eax
jge    1364 <main+0x234>
movl   $0x2,-0x28(%rbp)
jmp    13c0 <main+0x290>
cmpl   $0x1,-0x28(%rbp)
jne    1387 <main+0x257>
movsbl -0x15(%rbp),%eax
cmp    $0x27,%eax
jne    1387 <main+0x257>
movl   $0x3,-0x28(%rbp)
jmp    13bb <main+0x28b>
cmpl   $0x2,-0x28(%rbp)
jne    13b6 <main+0x286>
movsbl -0x15(%rbp),%eax
cmp    $0x61,%eax
jl     13af <main+0x27f>
movsbl -0x15(%rbp),%ecx
mov    $0x7a,%eax
cmp    %ecx,%eax
jge    13b6 <main+0x286>
movl   $0x0,-0x28(%rbp)
jmp    13bb <main+0x28b>
jmp    13c0 <main+0x290>
jmp    13c5 <main+0x295>
jmp    13ca <main+0x29a>
jmp    13cf <main+0x29f>
jmp    13d4 <main+0x2a4>
jmp    13d9 <main+0x2a9>
jmp    13de <main+0x2ae>
jmp    13e3 <main+0x2b3>
cmpl   $0x1,-0x28(%rbp)
jne    13fe <main+0x2ce>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1475 <main+0x345>
cmpl   $0x2,-0x28(%rbp)
je     141d <main+0x2ed>
mov    -0x28(%rbp),%eax
mov    0x2bd6(%rip),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    1470 <main+0x340>
cmpq   $0x12,-0x20(%rbp)
ja     1440 <main+0x310>
mov    -0x20(%rbp),%rax
sub    $0x1,%rax
mov    -0x80(%rbp,%rax,4),%ecx
add    $0x1,%ecx
mov    %ecx,-0x80(%rbp,%rax,4)
jmp    1449 <main+0x319>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
movq   $0x0,-0x20(%rbp)
mov    -0x28(%rbp),%eax
mov    0x2b8d(%rip),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    146b <main+0x33b>
jmp    147a <main+0x34a>
jmp    1470 <main+0x340>
jmp    1475 <main+0x345>
jmp    119b <main+0x6b>
movq   $0x0,-0x10(%rbp)
cmpq   $0x12,-0x10(%rbp)
jae    14bf <main+0x38f>
mov    -0x10(%rbp),%rax
mov    -0x80(%rbp,%rax,4),%eax
cmp    -0x2c(%rbp),%eax
jle    14a9 <main+0x379>
mov    -0x10(%rbp),%rax
mov    -0x80(%rbp,%rax,4),%eax
mov    %eax,-0x2c(%rbp)
jmp    14ae <main+0x37e>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1482 <main+0x352>
mov    -0x24(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jle    14d1 <main+0x3a1>
mov    -0x24(%rbp),%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x3c,-0x2c(%rbp)
jle    1507 <main+0x3d7>
mov    -0x2c(%rbp),%eax
mov    $0x3c,%ecx
cltd
idiv   %ecx
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
cltd
idivl  -0x30(%rbp)
cmp    $0x3c,%eax
jle    1502 <main+0x3d2>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1507 <main+0x3d7>
movq   $0x0,-0x10(%rbp)
cmpq   $0x12,-0x10(%rbp)
jae    1599 <main+0x469>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %eax,%esi
lea    0xad5(%rip),%rdi
call   1040 <printf@plt>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x84(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x80(%rbp,%rax,4),%eax
cltd
idivl  -0x30(%rbp)
mov    %eax,%ecx
mov    -0x84(%rbp),%eax
cmp    %ecx,%eax
jge    1574 <main+0x444>
mov    $0x2a,%edi
call   1030 <putchar@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1537 <main+0x407>
mov    -0x10(%rbp),%rax
mov    -0x80(%rbp,%rax,4),%esi
lea    0xa84(%rip),%rdi
call   1040 <printf@plt>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    150f <main+0x3df>
lea    0xa6e(%rip),%rdi
mov    $0x13,%esi
call   1040 <printf@plt>
movq   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    -0x24(%rbp),%eax
cltd
idivl  -0x30(%rbp)
mov    %eax,%ecx
mov    -0x90(%rbp),%rax
movslq %ecx,%rcx
cmp    %rcx,%rax
jae    15f4 <main+0x4c4>
mov    $0x2a,%edi
call   1030 <putchar@plt>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    15b2 <main+0x482>
mov    -0x24(%rbp),%esi
lea    0xa09(%rip),%rdi
call   1040 <printf@plt>
mov    -0x30(%rbp),%esi
lea    0xa08(%rip),%rdi
call   1040 <printf@plt>
cmpl   $0x1,-0x30(%rbp)
jle    1626 <main+0x4f6>
mov    $0x73,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
xorps  %xmm0,%xmm0
movaps %xmm0,0x40(%rsp)
movaps %xmm0,0x30(%rsp)
movaps %xmm0,0x20(%rsp)
movaps %xmm0,0x10(%rsp)
movq   $0x0,0x50(%rsp)
mov    0x2e83(%rip),%r15
xor    %r12d,%r12d
xor    %edx,%edx
jmp    117c <main+0x4c>
nopl   0x0(%rax)
add    $0x1,%r12d
cmp    %edi,%edx
je     128a <main+0x15a>
xor    %r14d,%r14d
mov    %edx,%ebx
jmp    119c <main+0x6c>
cmp    $0xe6,%r8b
jae    1272 <main+0x142>
nopl   (%rax)
mov    %ecx,%ebx
mov    %ecx,%edx
cmp    %edi,%ecx
je     1272 <main+0x142>
xor    %eax,%eax
call   1050 <getchar@plt>
lea    -0x41(%rax),%ecx
lea    0x20(%rax),%edx
cmp    $0x1a,%cl
movzbl %al,%eax
movzbl %dl,%esi
cmovae %eax,%esi
movsbl (%r15),%edi
cmp    %dil,%sil
jne    11e0 <main+0xb0>
movsbl %sil,%esi
cmp    $0x2,%esi
je     1270 <main+0x140>
mov    %esi,%ecx
cmp    $0x1,%esi
jne    1190 <main+0x60>
jmp    125a <main+0x12a>
nopw   0x0(%rax,%rax,1)
lea    -0x61(%rsi),%edx
test   %ebx,%ebx
jne    11ec <main+0xbc>
cmp    $0x1a,%dl
jb     125a <main+0x12a>
lea    -0x7b(%rsi),%r8d
xor    %ecx,%ecx
test   %ebx,%ebx
jne    11fc <main+0xcc>
cmp    $0xe6,%r8b
jb     1190 <main+0x60>
cmp    $0x1,%ebx
jne    1206 <main+0xd6>
cmp    $0x1a,%dl
jb     125a <main+0x12a>
mov    %ebx,%ebp
and    $0xfffffffe,%ebp
cmp    $0x2,%ebp
jne    1215 <main+0xe5>
cmp    $0x1a,%dl
jb     125a <main+0x12a>
mov    %ebx,%eax
and    $0xfffffffd,%eax
mov    $0x2,%edx
cmp    $0x1,%eax
jne    122a <main+0xfa>
cmp    $0xe6,%r8b
jb     1272 <main+0x142>
cmp    $0x1,%ebx
sete   %r9b
cmp    $0x27,%sil
sete   %al
mov    $0x3,%esi
and    %r9b,%al
jne    1244 <main+0x114>
mov    %ebx,%esi
cmp    $0x2,%ebx
jne    11c2 <main+0x92>
test   %al,%al
je     1183 <main+0x53>
jmp    11c2 <main+0x92>
add    $0x1,%r14
mov    $0x1,%ebx
jmp    119c <main+0x6c>
nopl   0x0(%rax,%rax,1)
mov    %esi,%edx
cmp    $0x12,%r14
ja     1170 <main+0x40>
addl   $0x1,0xc(%rsp,%r14,4)
cmp    %edi,%edx
jne    117c <main+0x4c>
mov    0x10(%rsp),%eax
mov    0x14(%rsp),%ecx
movdqu 0x38(%rsp),%xmm0
movdqu 0x18(%rsp),%xmm1
movdqu 0x48(%rsp),%xmm2
movdqu 0x28(%rsp),%xmm3
movdqa %xmm3,%xmm4
pcmpgtd %xmm2,%xmm4
pand   %xmm4,%xmm3
pandn  %xmm2,%xmm4
por    %xmm3,%xmm4
movdqa %xmm1,%xmm2
pcmpgtd %xmm0,%xmm2
pand   %xmm2,%xmm1
pandn  %xmm0,%xmm2
por    %xmm1,%xmm2
movdqa %xmm2,%xmm0
pcmpgtd %xmm4,%xmm0
pand   %xmm0,%xmm2
pandn  %xmm4,%xmm0
por    %xmm2,%xmm0
pshufd $0xee,%xmm0,%xmm1
movdqa %xmm0,%xmm2
pcmpgtd %xmm1,%xmm2
pand   %xmm2,%xmm0
pandn  %xmm1,%xmm2
por    %xmm0,%xmm2
pshufd $0x55,%xmm2,%xmm0
movdqa %xmm2,%xmm1
pcmpgtd %xmm0,%xmm1
pand   %xmm1,%xmm2
pandn  %xmm0,%xmm1
por    %xmm2,%xmm1
movd   %xmm1,%edx
cmp    %ecx,%edx
cmovg  %edx,%ecx
cmp    %eax,%ecx
cmovle %eax,%ecx
cmp    %r12d,%ecx
mov    %r12d,0xc(%rsp)
cmovle %r12d,%ecx
xor    %eax,%eax
test   %ecx,%ecx
cmovns %ecx,%eax
mov    $0x1,%r13d
cmp    $0x3d,%eax
jb     1360 <main+0x230>
mov    %eax,%ecx
mov    $0x88888889,%r13d
imul   %rcx,%r13
shr    $0x25,%r13
xor    %edx,%edx
div    %r13d
cmp    $0x3d,%eax
sbb    $0xffffffff,%r13d
xor    %ebp,%ebp
lea    0xc97(%rip),%r15
lea    0xc97(%rip),%r12
jmp    1390 <main+0x260>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r12,%rdi
mov    %ebx,%esi
call   1040 <printf@plt>
cmp    $0x12,%rbp
je     13d2 <main+0x2a2>
mov    %rbp,%rbx
add    $0x1,%rbp
mov    %r15,%rdi
mov    %ebp,%esi
call   1040 <printf@plt>
mov    0x10(%rsp,%rbx,4),%ebx
mov    %ebx,%eax
cltd
idiv   %r13d
test   %eax,%eax
jle    1380 <main+0x250>
mov    %eax,%r14d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    $0x2a,%edi
call   1030 <putchar@plt>
add    $0xffffffff,%r14d
jne    13c0 <main+0x290>
jmp    1380 <main+0x250>
lea    0xc35(%rip),%rdi
mov    $0x13,%esi
call   1040 <printf@plt>
mov    0xc(%rsp),%ebp
mov    %ebp,%eax
cltd
idiv   %r13d
test   %eax,%eax
je     1410 <main+0x2e0>
movslq %eax,%rbx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    $0x2a,%edi
call   1030 <putchar@plt>
add    $0xffffffffffffffff,%rbx
jne    1400 <main+0x2d0>
lea    0xbf0(%rip),%rdi
mov    %ebp,%esi
call   1040 <printf@plt>
lea    0xbf0(%rip),%rdi
mov    %r13d,%esi
call   1040 <printf@plt>
cmp    $0x2,%r13d
jl     143d <main+0x30d>
mov    $0x73,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@EOF = global i8 0
@.str = [7 x i8] c" %2u: \00"
@.str.1 = [7 x i8] c" (%d)\0A\00"
@.str.2 = [7 x i8] c"%2d+: \00"
@.str.3 = [15 x i8] c"\0A'*' = %d word\00"
define i32 @main() {
%1 = alloca [18 x i32]
%2 = bitcast [18 x i32]* %1 to i8*
br label %3
3: ; preds = %0, %65
%4 = phi i32 [ 0, %0 ], [ %66, %65 ]
%5 = phi i32 [ 0, %0 ], [ %56, %65 ]
br label %6
6: ; preds = %3, %49
%7 = phi i64 [ %50, %49 ], [ 0, %3 ]
%8 = phi i32 [ 1, %49 ], [ %5, %3 ]
br label %9
9: ; preds = %6, %51
%10 = phi i32 [ %52, %51 ], [ %8, %6 ]
%11 = tail call signext i8 (...) @getchar()
%12 = add i8 %11, -65
%13 = icmp ult i8 %12, 26
%14 = add i8 %11, 32
%15 = select i1 %13, i8 %14, i8 %11
%16 = load i8, i8* @EOF
%17 = icmp eq i8 %15, %16
br i1 %17, label %18, label %20
18: ; preds = %9
%19 = sext i8 %15 to i32
br label %47
20: ; preds = %9
%21 = icmp eq i32 %10, 0
%22 = add i8 %15, -97
%23 = icmp ult i8 %22, 26
%24 = and i1 %21, %23
br i1 %24, label %49, label %25
25: ; preds = %20
%26 = add i8 %15, -123
%27 = icmp ult i8 %26, -26
%28 = and i1 %21, %27
br i1 %28, label %51, label %29
29: ; preds = %25
%30 = icmp eq i32 %10, 1
%31 = and i1 %30, %23
br i1 %31, label %49, label %32
32: ; preds = %29
%33 = icmp ne i32 %10, 2
%34 = and i32 %10, -2
%35 = icmp eq i32 %34, 2
%36 = and i1 %35, %23
br i1 %36, label %49, label %37
37: ; preds = %32
%38 = and i32 %10, -3
%39 = icmp eq i32 %38, 1
%40 = and i1 %39, %27
br i1 %40, label %55, label %41
41: ; preds = %37
%42 = icmp eq i8 %15, 39
%43 = and i1 %30, %42
%44 = or i1 %33, %43
%45 = select i1 %43, i32 3, i32 %10
br i1 %44, label %47, label %46
46: ; preds = %41
br i1 %27, label %51, label %55
47: ; preds = %41, %18
%48 = phi i32 [ %19, %18 ], [ %45, %41 ]
switch i32 %48, label %51 [
i32 1, label %49
i32 2, label %55
]
49: ; preds = %32, %29, %20, %47
%50 = add i64 %7, 1
br label %6
51: ; preds = %46, %25, %47
%52 = phi i32 [ %48, %47 ], [ 0, %25 ], [ 0, %46 ]
%53 = sext i8 %16 to i32
%54 = icmp eq i32 %52, %53
br i1 %54, label %55, label %9
55: ; preds = %46, %37, %47, %51
%56 = phi i32 [ %48, %47 ], [ %52, %51 ], [ 2, %37 ], [ 2, %46 ]
%57 = icmp ult i64 %7, 19
br i1 %57, label %58, label %63
58: ; preds = %55
%59 = add nsw i64 %7, -1
%60 = getelementptr inbounds [18 x i32], [18 x i32]* %1, i64 0, i64 %59
%61 = load i32, i32* %60
%62 = add nsw i32 %61, 1
store i32 %62, i32* %60
br label %65
63: ; preds = %55
%64 = add nsw i32 %4, 1
br label %65
65: ; preds = %63, %58
%66 = phi i32 [ %4, %58 ], [ %64, %63 ]
%67 = sext i8 %16 to i32
%68 = icmp eq i32 %56, %67
br i1 %68, label %69, label %3
69: ; preds = %65
%70 = getelementptr inbounds [18 x i32], [18 x i32]* %1, i64 0, i64 0
%71 = load i32, i32* %70
%72 = getelementptr inbounds [18 x i32], [18 x i32]* %1, i64 0, i64 1
%73 = load i32, i32* %72
%74 = getelementptr inbounds [18 x i32], [18 x i32]* %1, i64 0, i64 2
%75 = bitcast i32* %74 to <16 x i32>*
%76 = load <16 x i32>, <16 x i32>* %75
%77 = call i32 @llvm.vector.reduce.smax.v16i32(<16 x i32> %76)
%78 = icmp sgt i32 %77, %73
%79 = select i1 %78, i32 %77, i32 %73
%80 = icmp sgt i32 %79, %71
%81 = select i1 %80, i32 %79, i32 %71
%82 = icmp sgt i32 %81, %66
%83 = select i1 %82, i32 %81, i32 %66
%84 = icmp sgt i32 %83, 0
%85 = select i1 %84, i32 %83, i32 0
%86 = icmp ugt i32 %85, 60
br i1 %86, label %87, label %93
87: ; preds = %69
%88 = udiv i32 %85, 60
%89 = udiv i32 %85, %88
%90 = icmp ugt i32 %89, 60
%91 = zext i1 %90 to i32
%92 = add nuw nsw i32 %88, %91
br label %93
93: ; preds = %87, %69
%94 = phi i32 [ 1, %69 ], [ %92, %87 ]
br label %95
95: ; preds = %93, %109
%96 = phi i64 [ 0, %93 ], [ %97, %109 ]
%97 = add nuw nsw i64 %96, 1
%98 = trunc i64 %97 to i32
%99 = tail call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i32 %98)
%100 = getelementptr inbounds [18 x i32], [18 x i32]* %1, i64 0, i64 %96
%101 = load i32, i32* %100
%102 = sdiv i32 %101, %94
%103 = icmp sgt i32 %102, 0
br i1 %103, label %104, label %109
104: ; preds = %95, %104
%105 = phi i32 [ %107, %104 ], [ 0, %95 ]
%106 = tail call i32 @putchar(i8 signext 42)
%107 = add nuw nsw i32 %105, 1
%108 = icmp eq i32 %107, %102
br i1 %108, label %109, label %104
109: ; preds = %104, %95
%110 = tail call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i32 %101)
%111 = icmp eq i64 %97, 18
br i1 %111, label %112, label %95
112: ; preds = %109
%113 = tail call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0), i32 19)
%114 = sdiv i32 %66, %94
%115 = icmp eq i32 %114, 0
br i1 %115, label %123, label %116
116: ; preds = %112
%117 = sext i32 %114 to i64
br label %118
118: ; preds = %116, %118
%119 = phi i64 [ %121, %118 ], [ 0, %116 ]
%120 = tail call i32 @putchar(i8 signext 42)
%121 = add nuw i64 %119, 1
%122 = icmp eq i64 %121, %117
br i1 %122, label %123, label %118
123: ; preds = %118, %112
%124 = tail call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i32 %66)
%125 = tail call i32 @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.3, i64 0, i64 0), i32 %94)
%126 = icmp sgt i32 %94, 1
br i1 %126, label %127, label %129
127: ; preds = %123
%128 = tail call i32 @putchar(i8 signext 115)
br label %129
129: ; preds = %127, %123
%130 = tail call i32 @putchar(i8 signext 10)
ret i32 0
}