#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 */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int /*<<< orphan*/ fclose(int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/ *, char *, int);
int /*<<< orphan*/ fscanf(int /*<<< orphan*/ *, char *, ...);
int /*<<< orphan*/ perror(char *);
int /*<<< orphan*/ printf(char *, int);
int main() {
  FILE *fin, *fout;
  char *pcur;
  int len, max = 0;
  char beads[350];
  fin = fopen("beads.in", "r");
  if (NULL == fin) {
    perror("open file beads.in failed");
  }
  fscanf(fin, "%d", &len);
  fscanf(fin, "%s", beads);
  fclose(fin);
  char *pend = beads + len - 1;
  int m, n;
  char *pi, *pj;
  pcur = beads;
  while (pcur <= pend) {
    m = n = 0;
    pi = pcur;
    char ch = *pcur;
    while (pi <= pend) {
      if (ch == *pi || 'w' == *pi) {
        ++m;
        ++pi;
      } else {
        break;
      }
    }
    if (pi > pend)
      pi = beads;
    while (pi < pcur) {
      if (ch == *pi || 'w' == *pi) {
        ++m;
        ++pi;
      } else {
        break;
      }
    }
    if (pi == pcur) {
      max = len;
      break;
    }
    if (pcur == beads)
      pj = pend;
    else
      pj = pcur - 1;
    if (ch == *pj) {
      ++pcur;
      continue;
    }
    while ('w' == *pj) {
      ++n;
      if (pj > beads)
        --pj;
      else
        pj = pend;
    }
    ch = *pj;
    while (pj != pi) {
      if (ch == *pj || 'w' == *pj) {
        ++n;
        if (pj > beads)
          --pj;
        else
          pj = pend;
      } else {
        break;
      }
    }
    if (ch == *pj)
      ++n;
    if (max < m + n) {
      max = m + n;
    }
    ++pcur;
  }
  printf("max is %d\n", max);
  fout = fopen("beads.out", "w");
  fprintf(fout, "%d\n", max);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1c0,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x28(%rbp)
lea    0xe80(%rip),%rdi
lea    0xe82(%rip),%rsi
call   1070 <fopen@plt>
mov    %rax,-0x10(%rbp)
xor    %eax,%eax
cmp    -0x10(%rbp),%rax
jne    11a8 <main+0x48>
lea    0xe68(%rip),%rdi
call   1080 <perror@plt>
mov    -0x10(%rbp),%rdi
lea    0xe72(%rip),%rsi
lea    -0x24(%rbp),%rdx
mov    $0x0,%al
call   1050 <fscanf@plt>
mov    -0x10(%rbp),%rdi
lea    -0x190(%rbp),%rdx
lea    0xe58(%rip),%rsi
mov    $0x0,%al
call   1050 <fscanf@plt>
mov    -0x10(%rbp),%rdi
call   1030 <fclose@plt>
lea    -0x190(%rbp),%rax
movslq -0x24(%rbp),%rcx
add    %rcx,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x198(%rbp)
lea    -0x190(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x198(%rbp),%rax
ja     1540 <main+0x3e0>
movl   $0x0,-0x1a0(%rbp)
movl   $0x0,-0x19c(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x1a8(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x1b1(%rbp)
mov    -0x1a8(%rbp),%rax
cmp    -0x198(%rbp),%rax
ja     12b4 <main+0x154>
movsbl -0x1b1(%rbp),%eax
mov    -0x1a8(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     1284 <main+0x124>
mov    -0x1a8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x77,%eax
cmp    %ecx,%eax
jne    12aa <main+0x14a>
mov    -0x19c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x19c(%rbp)
mov    -0x1a8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x1a8(%rbp)
jmp    12af <main+0x14f>
jmp    12b4 <main+0x154>
jmp    1240 <main+0xe0>
mov    -0x1a8(%rbp),%rax
cmp    -0x198(%rbp),%rax
jbe    12d6 <main+0x176>
lea    -0x190(%rbp),%rax
mov    %rax,-0x1a8(%rbp)
jmp    12db <main+0x17b>
mov    -0x1a8(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    134c <main+0x1ec>
movsbl -0x1b1(%rbp),%eax
mov    -0x1a8(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     131c <main+0x1bc>
mov    -0x1a8(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x77,%eax
cmp    %ecx,%eax
jne    1342 <main+0x1e2>
mov    -0x19c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x19c(%rbp)
mov    -0x1a8(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x1a8(%rbp)
jmp    1347 <main+0x1e7>
jmp    134c <main+0x1ec>
jmp    12db <main+0x17b>
mov    -0x1a8(%rbp),%rax
cmp    -0x20(%rbp),%rax
jne    1368 <main+0x208>
mov    -0x24(%rbp),%eax
mov    %eax,-0x28(%rbp)
jmp    1540 <main+0x3e0>
mov    -0x20(%rbp),%rax
lea    -0x190(%rbp),%rcx
cmp    %rcx,%rax
jne    138f <main+0x22f>
mov    -0x198(%rbp),%rax
mov    %rax,-0x1b0(%rbp)
jmp    139e <main+0x23e>
mov    -0x20(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x1b0(%rbp)
movsbl -0x1b1(%rbp),%eax
mov    -0x1b0(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    13c8 <main+0x268>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1204 <main+0xa4>
jmp    13cd <main+0x26d>
mov    -0x1b0(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x77,%eax
cmp    %ecx,%eax
jne    1434 <main+0x2d4>
mov    -0x1a0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1a0(%rbp)
mov    -0x1b0(%rbp),%rax
lea    -0x190(%rbp),%rcx
cmp    %rcx,%rax
jbe    1421 <main+0x2c1>
mov    -0x1b0(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x1b0(%rbp)
jmp    142f <main+0x2cf>
mov    -0x198(%rbp),%rax
mov    %rax,-0x1b0(%rbp)
jmp    13cd <main+0x26d>
mov    -0x1b0(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x1b1(%rbp)
mov    -0x1b0(%rbp),%rax
cmp    -0x1a8(%rbp),%rax
je     14e1 <main+0x381>
movsbl -0x1b1(%rbp),%eax
mov    -0x1b0(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     1487 <main+0x327>
mov    -0x1b0(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x77,%eax
cmp    %ecx,%eax
jne    14d7 <main+0x377>
mov    -0x1a0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1a0(%rbp)
mov    -0x1b0(%rbp),%rax
lea    -0x190(%rbp),%rcx
cmp    %rcx,%rax
jbe    14c4 <main+0x364>
mov    -0x1b0(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x1b0(%rbp)
jmp    14d2 <main+0x372>
mov    -0x198(%rbp),%rax
mov    %rax,-0x1b0(%rbp)
jmp    14dc <main+0x37c>
jmp    14e1 <main+0x381>
jmp    1443 <main+0x2e3>
movsbl -0x1b1(%rbp),%eax
mov    -0x1b0(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    1509 <main+0x3a9>
mov    -0x1a0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1a0(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x19c(%rbp),%ecx
add    -0x1a0(%rbp),%ecx
cmp    %ecx,%eax
jge    152f <main+0x3cf>
mov    -0x19c(%rbp),%eax
add    -0x1a0(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1204 <main+0xa4>
mov    -0x28(%rbp),%esi
lea    0xae1(%rip),%rdi
call   1040 <printf@plt>
lea    0xae0(%rip),%rdi
lea    0xae3(%rip),%rsi
call   1070 <fopen@plt>
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x28(%rbp),%edx
lea    0xabe(%rip),%rsi
call   1060 <fprintf@plt>
xor    %eax,%eax
add    $0x1c0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x170,%rsp
lea    0xe8a(%rip),%rdi
lea    0xe8c(%rip),%rsi
call   1070 <fopen@plt>
mov    %rax,%rbp
test   %rax,%rax
je     1353 <main+0x1f3>
lea    0xe90(%rip),%rsi
xor    %r14d,%r14d
lea    0xc(%rsp),%rdx
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <fscanf@plt>
lea    0xe7a(%rip),%rsi
lea    0x10(%rsp),%r15
mov    %rbp,%rdi
mov    %r15,%rdx
xor    %eax,%eax
call   1050 <fscanf@plt>
mov    %rbp,%rdi
call   1030 <fclose@plt>
movslq 0xc(%rsp),%r8
lea    (%rsp,%r8,1),%r12
add    $0xf,%r12
cmp    %r12,%r15
ja     130d <main+0x1ad>
lea    (%rsp,%r8,1),%r10
add    $0x10,%r10
add    $0xfffffffffffffffe,%r10
lea    0x11(%rsp),%r9
xor    %r14d,%r14d
mov    %r15,%r11
jmp    1229 <main+0xc9>
nopw   0x0(%rax,%rax,1)
mov    %rdi,%rax
xor    %ecx,%ecx
cmp    (%rax),%dl
sete   %cl
add    %ebp,%ebx
add    %ecx,%ebx
cmp    %ebx,%r14d
cmovge %r14d,%ebx
mov    %ebx,%r14d
add    $0x1,%r11
add    $0x1,%r9
cmp    %r12,%r11
ja     130d <main+0x1ad>
mov    (%r11),%bl
mov    $0x1,%eax
mov    %r9,%rdi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %eax,%ebp
cmp    %r12,%rdi
ja     1260 <main+0x100>
movzbl (%rdi),%edx
lea    0x1(%rbp),%eax
add    $0x1,%rdi
cmp    %dl,%bl
je     1240 <main+0xe0>
cmp    $0x77,%dl
je     1240 <main+0xe0>
add    $0xffffffffffffffff,%rdi
jmp    1277 <main+0x117>
mov    %r15,%rdi
jmp    1277 <main+0x117>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%ebp
add    $0x1,%rdi
cmp    %r11,%rdi
jae    1287 <main+0x127>
movzbl (%rdi),%eax
cmp    %al,%bl
je     1270 <main+0x110>
cmp    $0x77,%al
je     1270 <main+0x110>
cmp    %r11,%rdi
je     130a <main+0x1aa>
lea    -0x1(%r11),%rax
cmp    %r15,%r11
cmove  %r12,%rax
mov    (%rax),%dl
cmp    %dl,%bl
je     1218 <main+0xb8>
xor    %ebx,%ebx
cmp    $0x77,%dl
jne    12d0 <main+0x170>
lea    -0x1(%rax),%rsi
xor    %ebx,%ebx
xchg   %ax,%ax
add    $0x1,%ebx
lea    -0x1(%rsi),%rcx
cmp    %r15,%rax
cmovbe %r12,%rsi
cmovbe %r10,%rcx
movzbl (%rsi),%edx
mov    %rsi,%rax
mov    %rcx,%rsi
cmp    $0x77,%dl
je     12b0 <main+0x150>
cmp    %rdi,%rax
je     1200 <main+0xa0>
add    $0x1,%ebx
mov    %ebx,%esi
xchg   %ax,%ax
mov    %esi,%ebx
cmp    %r15,%rax
lea    -0x1(%rax),%rax
cmovbe %r12,%rax
cmp    %rdi,%rax
je     1200 <main+0xa0>
movzbl (%rax),%ecx
lea    0x1(%rbx),%esi
cmp    %cl,%dl
je     12e0 <main+0x180>
cmp    $0x77,%cl
je     12e0 <main+0x180>
jmp    1203 <main+0xa3>
mov    %r8d,%r14d
lea    0xd17(%rip),%rdi
mov    %r14d,%esi
call   1040 <printf@plt>
lea    0xd13(%rip),%rdi
lea    0xd16(%rip),%rsi
call   1070 <fopen@plt>
lea    0xcfc(%rip),%rsi
mov    %rax,%rdi
mov    %r14d,%edx
call   1060 <fprintf@plt>
xor    %eax,%eax
add    $0x170,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0xcb1(%rip),%rdi
call   1080 <perror@plt>
jmp    118e <main+0x2e>

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

LLVM IR (-O2):
@.str = [9 x i8] c"beads.in\00"
@.str.1 = [2 x i8] c"r\00"
@.str.2 = [26 x i8] c"open file beads.in failed\00"
@.str.3 = [3 x i8] c"%d\00"
@.str.4 = [3 x i8] c"%s\00"
@.str.5 = [11 x i8] c"max is %d\0A\00"
@.str.6 = [10 x i8] c"beads.out\00"
@.str.7 = [2 x i8] c"w\00"
@.str.8 = [4 x i8] c"%d\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [350 x i8]
%3 = bitcast i32* %1 to i8*
%4 = getelementptr inbounds [350 x i8], [350 x i8]* %2, i64 0, i64 0
%5 = tail call i32* @fopen(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%6 = icmp eq i32* %5, null
br i1 %6, label %7, label %9
7: ; preds = %0
%8 = tail call i32 @perror(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.2, i64 0, i64 0))
br label %9
9: ; preds = %7, %0
%10 = call i32 (i32*, i8*, ...) @fscanf(i32* %5, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.3, i64 0, i64 0), i32* %1)
%11 = call i32 (i32*, i8*, ...) @fscanf(i32* %5, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0), i8* %4)
%12 = call i32 @fclose(i32* %5)
%13 = load i32, i32* %1
%14 = sext i32 %13 to i64
%15 = getelementptr inbounds [350 x i8], [350 x i8]* %2, i64 0, i64 %14
%16 = getelementptr inbounds i8, i8* %15, i64 -1
%17 = icmp ugt i8* %4, %16
br i1 %17, label %106, label %18
18: ; preds = %9
%19 = getelementptr inbounds i8, i8* %15, i64 -2
br label %20
20: ; preds = %102, %18
%21 = phi i32 [ %103, %102 ], [ 0, %18 ]
%22 = phi i8* [ %104, %102 ], [ %4, %18 ]
%23 = load i8, i8* %22
br label %24
24: ; preds = %20, %30
%25 = phi i32 [ 0, %20 ], [ %27, %30 ]
%26 = phi i8* [ %22, %20 ], [ %28, %30 ]
%27 = add nuw nsw i32 %25, 1
%28 = getelementptr inbounds i8, i8* %26, i64 1
%29 = icmp ugt i8* %28, %16
br i1 %29, label %35, label %30
30: ; preds = %24
%31 = load i8, i8* %28
%32 = icmp eq i8 %23, %31
%33 = icmp eq i8 %31, 119
%34 = or i1 %32, %33
br i1 %34, label %24, label %35
35: ; preds = %24, %30
%36 = phi i8* [ %4, %24 ], [ %28, %30 ]
%37 = icmp ult i8* %36, %22
br i1 %37, label %38, label %49
38: ; preds = %35, %45
%39 = phi i8* [ %47, %45 ], [ %36, %35 ]
%40 = phi i32 [ %46, %45 ], [ %27, %35 ]
%41 = load i8, i8* %39
%42 = icmp eq i8 %23, %41
%43 = icmp eq i8 %41, 119
%44 = or i1 %42, %43
br i1 %44, label %45, label %49
45: ; preds = %38
%46 = add nuw nsw i32 %40, 1
%47 = getelementptr inbounds i8, i8* %39, i64 1
%48 = icmp ult i8* %47, %22
br i1 %48, label %38, label %49
49: ; preds = %45, %38, %35
%50 = phi i32 [ %27, %35 ], [ %40, %38 ], [ %46, %45 ]
%51 = phi i8* [ %36, %35 ], [ %39, %38 ], [ %47, %45 ]
%52 = icmp eq i8* %51, %22
br i1 %52, label %106, label %53
53: ; preds = %49
%54 = icmp eq i8* %22, %4
%55 = getelementptr inbounds i8, i8* %22, i64 -1
%56 = select i1 %54, i8* %16, i8* %55
%57 = load i8, i8* %56
%58 = icmp eq i8 %23, %57
br i1 %58, label %102, label %59
59: ; preds = %53
%60 = icmp eq i8 %57, 119
br i1 %60, label %61, label %63
61: ; preds = %59
%62 = getelementptr inbounds i8, i8* %56, i64 -1
br label %68
63: ; preds = %68, %59
%64 = phi i8 [ %57, %59 ], [ %77, %68 ]
%65 = phi i32 [ 0, %59 ], [ %72, %68 ]
%66 = phi i8* [ %56, %59 ], [ %74, %68 ]
%67 = icmp eq i8* %66, %51
br i1 %67, label %92, label %79
68: ; preds = %61, %68
%69 = phi i8* [ %74, %68 ], [ %56, %61 ]
%70 = phi i32 [ %72, %68 ], [ 0, %61 ]
%71 = phi i8* [ %76, %68 ], [ %62, %61 ]
%72 = add nuw nsw i32 %70, 1
%73 = icmp ugt i8* %69, %4
%74 = select i1 %73, i8* %71, i8* %16
%75 = getelementptr inbounds i8, i8* %71, i64 -1
%76 = select i1 %73, i8* %75, i8* %19
%77 = load i8, i8* %74
%78 = icmp eq i8 %77, 119
br i1 %78, label %68, label %63
79: ; preds = %63, %87
%80 = phi i32 [ %82, %87 ], [ %65, %63 ]
%81 = phi i8* [ %85, %87 ], [ %66, %63 ]
%82 = add nuw nsw i32 %80, 1
%83 = icmp ugt i8* %81, %4
%84 = getelementptr inbounds i8, i8* %81, i64 -1
%85 = select i1 %83, i8* %84, i8* %16
%86 = icmp eq i8* %85, %51
br i1 %86, label %92, label %87
87: ; preds = %79
%88 = load i8, i8* %85
%89 = icmp eq i8 %64, %88
%90 = icmp eq i8 %88, 119
%91 = or i1 %89, %90
br i1 %91, label %79, label %92
92: ; preds = %79, %87, %63
%93 = phi i32 [ %65, %63 ], [ %82, %87 ], [ %82, %79 ]
%94 = phi i8* [ %51, %63 ], [ %51, %79 ], [ %85, %87 ]
%95 = load i8, i8* %94
%96 = icmp eq i8 %64, %95
%97 = zext i1 %96 to i32
%98 = add i32 %93, %50
%99 = add i32 %98, %97
%100 = icmp slt i32 %21, %99
%101 = select i1 %100, i32 %99, i32 %21
br label %102
102: ; preds = %53, %92
%103 = phi i32 [ %101, %92 ], [ %21, %53 ]
%104 = getelementptr inbounds i8, i8* %22, i64 1
%105 = icmp ugt i8* %104, %16
br i1 %105, label %106, label %20
106: ; preds = %102, %49, %9
%107 = phi i32 [ 0, %9 ], [ %13, %49 ], [ %103, %102 ]
%108 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.5, i64 0, i64 0), i32 %107)
%109 = call i32* @fopen(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0))
%110 = call i32 @fprintf(i32* %109, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0), i32 %107)
ret i32 0
}