#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 bin_con_pos(char *);
int strlen(char *);
int parse(char *g) {
  if ((g[0] == 'X') && (g[1] == '[') &&
      (g[2] == 'x' || g[2] == 'y' || g[2] == 'z') &&
      (g[3] == 'x' || g[3] == 'y' || g[3] == 'z') && (g[4] == ']') &&
      (strlen(g) == 5)) {
    return 1;
  } else if ((g[0] == '-') && (parse(g + 1) > 0)) {
    return 2;
  } else if ((g[0] == '(') && (g[strlen(g) - 1] == ')')) {
    int bin_con = bin_con_pos(g);
    if (bin_con > 0) {
      char part1[50];
      char part2[50];
      int x = 0, y = 0;
      while (x < bin_con - 1) {
        part1[x] = g[x + 1];
        x++;
      }
      part1[bin_con - 1] = '\0';
      while (y < strlen(g) - (bin_con + 1) - 1) {
        part2[y] = g[bin_con + 1 + y];
        y++;
      }
      part2[strlen(g) - (bin_con + 1) - 1] = '\0';
      if ((parse(part1) > 0) && (parse(part2) > 0)) {
        return 3;
      }
    }
  } else if ((g[0] == 'E') && (g[1] == 'x' || g[1] == 'y' || g[1] == 'z')) {
    if (parse(g + 2) > 0) {
      return 4;
    }
  } else if ((g[0] == 'A') && (g[1] == 'x' || g[1] == 'y' || g[1] == 'z')) {
    if (parse(g + 2) > 0) {
      return 5;
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<parse>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x58,%eax
jne    11f5 <parse+0xc5>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x5b,%eax
jne    11f5 <parse+0xc5>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x78,%eax
je     1193 <parse+0x63>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x79,%eax
je     1193 <parse+0x63>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x7a,%eax
jne    11f5 <parse+0xc5>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x78,%eax
je     11c6 <parse+0x96>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x79,%eax
je     11c6 <parse+0x96>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x7a,%eax
jne    11f5 <parse+0xc5>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x5d,%eax
jne    11f5 <parse+0xc5>
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
cmp    $0x5,%eax
jne    11f5 <parse+0xc5>
movl   $0x1,-0x4(%rbp)
jmp    1496 <parse+0x366>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1227 <parse+0xf7>
mov    -0x10(%rbp),%rdi
add    $0x1,%rdi
call   1050 <parse@plt>
cmp    $0x0,%eax
jle    1227 <parse+0xf7>
movl   $0x2,-0x4(%rbp)
jmp    1496 <parse+0x366>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x28,%eax
jne    13a7 <parse+0x277>
mov    -0x10(%rbp),%rax
mov    %rax,-0xa0(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,%ecx
mov    -0xa0(%rbp),%rax
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x29,%eax
jne    13a7 <parse+0x277>
mov    -0x10(%rbp),%rdi
call   1040 <bin_con_pos@plt>
mov    %eax,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
jle    13a2 <parse+0x272>
movl   $0x0,-0x94(%rbp)
movl   $0x0,-0x98(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12d7 <parse+0x1a7>
mov    -0x10(%rbp),%rax
mov    -0x94(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%cl
movslq -0x94(%rbp),%rax
mov    %cl,-0x50(%rbp,%rax,1)
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    1291 <parse+0x161>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
cltq
movb   $0x0,-0x50(%rbp,%rax,1)
mov    -0x98(%rbp),%eax
mov    %eax,-0xa4(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,%ecx
mov    -0xa4(%rbp),%eax
mov    -0x14(%rbp),%edx
add    $0x1,%edx
sub    %edx,%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    134c <parse+0x21c>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
add    -0x98(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%cl
movslq -0x98(%rbp),%rax
mov    %cl,-0x90(%rbp,%rax,1)
mov    -0x98(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
jmp    12e4 <parse+0x1b4>
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
sub    %ecx,%eax
sub    $0x1,%eax
cltq
movb   $0x0,-0x90(%rbp,%rax,1)
lea    -0x50(%rbp),%rdi
call   1050 <parse@plt>
cmp    $0x0,%eax
jle    139d <parse+0x26d>
lea    -0x90(%rbp),%rdi
call   1050 <parse@plt>
cmp    $0x0,%eax
jle    139d <parse+0x26d>
movl   $0x3,-0x4(%rbp)
jmp    1496 <parse+0x366>
jmp    13a2 <parse+0x272>
jmp    1485 <parse+0x355>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x45,%eax
jne    1411 <parse+0x2e1>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x78,%eax
je     13ea <parse+0x2ba>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x79,%eax
je     13ea <parse+0x2ba>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x7a,%eax
jne    1411 <parse+0x2e1>
mov    -0x10(%rbp),%rdi
add    $0x2,%rdi
call   1050 <parse@plt>
cmp    $0x0,%eax
jle    140c <parse+0x2dc>
movl   $0x4,-0x4(%rbp)
jmp    1496 <parse+0x366>
jmp    1480 <parse+0x350>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jne    147b <parse+0x34b>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x78,%eax
je     1454 <parse+0x324>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x79,%eax
je     1454 <parse+0x324>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x7a,%eax
jne    147b <parse+0x34b>
mov    -0x10(%rbp),%rdi
add    $0x2,%rdi
call   1050 <parse@plt>
cmp    $0x0,%eax
jle    1476 <parse+0x346>
movl   $0x5,-0x4(%rbp)
jmp    1496 <parse+0x366>
jmp    147b <parse+0x34b>
jmp    1480 <parse+0x350>
jmp    1485 <parse+0x355>
jmp    148a <parse+0x35a>
jmp    148f <parse+0x35f>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<parse>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x78,%rsp
mov    %rdi,%rbx
mov    (%rdi),%al
cmp    $0x58,%al
jne    119b <parse+0x5b>
cmpb   $0x5b,0x1(%rbx)
jne    12d6 <parse+0x196>
mov    0x2(%rbx),%al
add    $0x88,%al
cmp    $0x2,%al
ja     12d6 <parse+0x196>
mov    0x3(%rbx),%al
add    $0x88,%al
cmp    $0x2,%al
ja     12d6 <parse+0x196>
cmpb   $0x5d,0x4(%rbx)
jne    12d6 <parse+0x196>
mov    %rbx,%rdi
call   1030 <strlen@plt>
mov    %eax,%ecx
mov    $0x1,%eax
cmp    $0x5,%ecx
je     12d8 <parse+0x198>
mov    (%rbx),%al
cmp    $0x2d,%al
jne    11b9 <parse+0x79>
lea    0x1(%rbx),%rdi
call   1060 <parse@plt>
mov    %eax,%ecx
mov    $0x2,%eax
test   %ecx,%ecx
jg     12d8 <parse+0x198>
mov    (%rbx),%al
cmp    $0x28,%al
jne    128c <parse+0x14c>
mov    %rbx,%rdi
call   1030 <strlen@plt>
cltq
cmpb   $0x29,-0x1(%rax,%rbx,1)
jne    128a <parse+0x14a>
mov    %rbx,%rdi
call   1040 <bin_con_pos@plt>
test   %eax,%eax
jle    12d6 <parse+0x196>
mov    %eax,%r14d
lea    -0x1(%r14),%eax
mov    %eax,%r15d
cmp    $0x1,%r14d
je     1207 <parse+0xc7>
lea    0x1(%rbx),%rsi
lea    0x40(%rsp),%rdi
mov    %r15,%rdx
call   1050 <memcpy@plt>
movb   $0x0,0x40(%rsp,%r15,1)
mov    %rbx,%rdi
call   1030 <strlen@plt>
mov    $0xfffffffe,%r15d
sub    %r14d,%r15d
add    %r15d,%eax
test   %eax,%eax
jle    1258 <parse+0x118>
add    $0x1,%r14d
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
lea    0x1(%rax),%rbp
lea    (%r14,%rax,1),%ecx
movslq %ecx,%rcx
movzbl (%rbx,%rcx,1),%ecx
mov    %cl,(%rsp,%rax,1)
mov    %rbx,%rdi
call   1030 <strlen@plt>
add    %r15d,%eax
movslq %eax,%rcx
mov    %rbp,%rax
cmp    %rcx,%rbp
jl     1230 <parse+0xf0>
mov    %rbx,%rdi
call   1030 <strlen@plt>
add    %r15d,%eax
cltq
movb   $0x0,(%rsp,%rax,1)
lea    0x40(%rsp),%rdi
call   1060 <parse@plt>
test   %eax,%eax
jle    12d6 <parse+0x196>
mov    %rsp,%rdi
call   1060 <parse@plt>
test   %eax,%eax
jle    12d6 <parse+0x196>
mov    $0x3,%eax
jmp    12d8 <parse+0x198>
mov    (%rbx),%al
cmp    $0x41,%al
je     12b6 <parse+0x176>
cmp    $0x45,%al
jne    12d6 <parse+0x196>
mov    0x1(%rbx),%al
add    $0x88,%al
cmp    $0x2,%al
ja     12d6 <parse+0x196>
add    $0x2,%rbx
mov    %rbx,%rdi
call   1060 <parse@plt>
mov    %eax,%ecx
mov    $0x4,%eax
test   %ecx,%ecx
jg     12d8 <parse+0x198>
jmp    12d6 <parse+0x196>
mov    0x1(%rbx),%al
add    $0x88,%al
cmp    $0x2,%al
ja     12d6 <parse+0x196>
add    $0x2,%rbx
mov    %rbx,%rdi
call   1060 <parse@plt>
mov    %eax,%ecx
mov    $0x5,%eax
test   %ecx,%ecx
jg     12d8 <parse+0x198>
xor    %eax,%eax
add    $0x78,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @parse(i8* %0) {
%2 = alloca i32
%3 = alloca i8*
%4 = alloca i32
%5 = alloca [50 x i8]
%6 = alloca [50 x i8]
%7 = alloca i32
%8 = alloca i32
store i8* %0, i8** %3
%9 = load i8*, i8** %3
%10 = getelementptr inbounds i8, i8* %9, i64 0
%11 = load i8, i8* %10
%12 = sext i8 %11 to i32
%13 = icmp eq i32 %12, 88
br i1 %13, label %14, label %67
14: ; preds = %1
%15 = load i8*, i8** %3
%16 = getelementptr inbounds i8, i8* %15, i64 1
%17 = load i8, i8* %16
%18 = sext i8 %17 to i32
%19 = icmp eq i32 %18, 91
br i1 %19, label %20, label %67
20: ; preds = %14
%21 = load i8*, i8** %3
%22 = getelementptr inbounds i8, i8* %21, i64 2
%23 = load i8, i8* %22
%24 = sext i8 %23 to i32
%25 = icmp eq i32 %24, 120
br i1 %25, label %38, label %26
26: ; preds = %20
%27 = load i8*, i8** %3
%28 = getelementptr inbounds i8, i8* %27, i64 2
%29 = load i8, i8* %28
%30 = sext i8 %29 to i32
%31 = icmp eq i32 %30, 121
br i1 %31, label %38, label %32
32: ; preds = %26
%33 = load i8*, i8** %3
%34 = getelementptr inbounds i8, i8* %33, i64 2
%35 = load i8, i8* %34
%36 = sext i8 %35 to i32
%37 = icmp eq i32 %36, 122
br i1 %37, label %38, label %67
38: ; preds = %32, %26, %20
%39 = load i8*, i8** %3
%40 = getelementptr inbounds i8, i8* %39, i64 3
%41 = load i8, i8* %40
%42 = sext i8 %41 to i32
%43 = icmp eq i32 %42, 120
br i1 %43, label %56, label %44
44: ; preds = %38
%45 = load i8*, i8** %3
%46 = getelementptr inbounds i8, i8* %45, i64 3
%47 = load i8, i8* %46
%48 = sext i8 %47 to i32
%49 = icmp eq i32 %48, 121
br i1 %49, label %56, label %50
50: ; preds = %44
%51 = load i8*, i8** %3
%52 = getelementptr inbounds i8, i8* %51, i64 3
%53 = load i8, i8* %52
%54 = sext i8 %53 to i32
%55 = icmp eq i32 %54, 122
br i1 %55, label %56, label %67
56: ; preds = %50, %44, %38
%57 = load i8*, i8** %3
%58 = getelementptr inbounds i8, i8* %57, i64 4
%59 = load i8, i8* %58
%60 = sext i8 %59 to i32
%61 = icmp eq i32 %60, 93
br i1 %61, label %62, label %67
62: ; preds = %56
%63 = load i8*, i8** %3
%64 = call i32 @strlen(i8* %63)
%65 = icmp eq i32 %64, 5
br i1 %65, label %66, label %67
66: ; preds = %62
store i32 1, i32* %2
br label %232
67: ; preds = %62, %56, %50, %32, %14, %1
%68 = load i8*, i8** %3
%69 = getelementptr inbounds i8, i8* %68, i64 0
%70 = load i8, i8* %69
%71 = sext i8 %70 to i32
%72 = icmp eq i32 %71, 45
br i1 %72, label %73, label %79
73: ; preds = %67
%74 = load i8*, i8** %3
%75 = getelementptr inbounds i8, i8* %74, i64 1
%76 = call i32 @parse(i8* %75)
%77 = icmp sgt i32 %76, 0
br i1 %77, label %78, label %79
78: ; preds = %73
store i32 2, i32* %2
br label %232
79: ; preds = %73, %67
%80 = load i8*, i8** %3
%81 = getelementptr inbounds i8, i8* %80, i64 0
%82 = load i8, i8* %81
%83 = sext i8 %82 to i32
%84 = icmp eq i32 %83, 40
br i1 %84, label %85, label %165
85: ; preds = %79
%86 = load i8*, i8** %3
%87 = load i8*, i8** %3
%88 = call i32 @strlen(i8* %87)
%89 = sub nsw i32 %88, 1
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds i8, i8* %86, i64 %90
%92 = load i8, i8* %91
%93 = sext i8 %92 to i32
%94 = icmp eq i32 %93, 41
br i1 %94, label %95, label %165
95: ; preds = %85
%96 = load i8*, i8** %3
%97 = call i32 @bin_con_pos(i8* %96)
store i32 %97, i32* %4
%98 = load i32, i32* %4
%99 = icmp sgt i32 %98, 0
br i1 %99, label %100, label %164
100: ; preds = %95
store i32 0, i32* %7
store i32 0, i32* %8
br label %101
101: ; preds = %106, %100
%102 = load i32, i32* %7
%103 = load i32, i32* %4
%104 = sub nsw i32 %103, 1
%105 = icmp slt i32 %102, %104
br i1 %105, label %106, label %118
106: ; preds = %101
%107 = load i8*, i8** %3
%108 = load i32, i32* %7
%109 = add nsw i32 %108, 1
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds i8, i8* %107, i64 %110
%112 = load i8, i8* %111
%113 = load i32, i32* %7
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds [50 x i8], [50 x i8]* %5, i64 0, i64 %114
store i8 %112, i8* %115
%116 = load i32, i32* %7
%117 = add nsw i32 %116, 1
store i32 %117, i32* %7
br label %101
118: ; preds = %101
%119 = load i32, i32* %4
%120 = sub nsw i32 %119, 1
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds [50 x i8], [50 x i8]* %5, i64 0, i64 %121
store i8 0, i8* %122
br label %123
123: ; preds = %132, %118
%124 = load i32, i32* %8
%125 = load i8*, i8** %3
%126 = call i32 @strlen(i8* %125)
%127 = load i32, i32* %4
%128 = add nsw i32 %127, 1
%129 = sub nsw i32 %126, %128
%130 = sub nsw i32 %129, 1
%131 = icmp slt i32 %124, %130
br i1 %131, label %132, label %146
132: ; preds = %123
%133 = load i8*, i8** %3
%134 = load i32, i32* %4
%135 = add nsw i32 %134, 1
%136 = load i32, i32* %8
%137 = add nsw i32 %135, %136
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds i8, i8* %133, i64 %138
%140 = load i8, i8* %139
%141 = load i32, i32* %8
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds [50 x i8], [50 x i8]* %6, i64 0, i64 %142
store i8 %140, i8* %143
%144 = load i32, i32* %8
%145 = add nsw i32 %144, 1
store i32 %145, i32* %8
br label %123
146: ; preds = %123
%147 = load i8*, i8** %3
%148 = call i32 @strlen(i8* %147)
%149 = load i32, i32* %4
%150 = add nsw i32 %149, 1
%151 = sub nsw i32 %148, %150
%152 = sub nsw i32 %151, 1
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds [50 x i8], [50 x i8]* %6, i64 0, i64 %153
store i8 0, i8* %154
%155 = getelementptr inbounds [50 x i8], [50 x i8]* %5, i64 0, i64 0
%156 = call i32 @parse(i8* %155)
%157 = icmp sgt i32 %156, 0
br i1 %157, label %158, label %163
158: ; preds = %146
%159 = getelementptr inbounds [50 x i8], [50 x i8]* %6, i64 0, i64 0
%160 = call i32 @parse(i8* %159)
%161 = icmp sgt i32 %160, 0
br i1 %161, label %162, label %163
162: ; preds = %158
store i32 3, i32* %2
br label %232
163: ; preds = %158, %146
br label %164
164: ; preds = %163, %95
br label %229
165: ; preds = %85, %79
%166 = load i8*, i8** %3
%167 = getelementptr inbounds i8, i8* %166, i64 0
%168 = load i8, i8* %167
%169 = sext i8 %168 to i32
%170 = icmp eq i32 %169, 69
br i1 %170, label %171, label %196
171: ; preds = %165
%172 = load i8*, i8** %3
%173 = getelementptr inbounds i8, i8* %172, i64 1
%174 = load i8, i8* %173
%175 = sext i8 %174 to i32
%176 = icmp eq i32 %175, 120
br i1 %176, label %189, label %177
177: ; preds = %171
%178 = load i8*, i8** %3
%179 = getelementptr inbounds i8, i8* %178, i64 1
%180 = load i8, i8* %179
%181 = sext i8 %180 to i32
%182 = icmp eq i32 %181, 121
br i1 %182, label %189, label %183
183: ; preds = %177
%184 = load i8*, i8** %3
%185 = getelementptr inbounds i8, i8* %184, i64 1
%186 = load i8, i8* %185
%187 = sext i8 %186 to i32
%188 = icmp eq i32 %187, 122
br i1 %188, label %189, label %196
189: ; preds = %183, %177, %171
%190 = load i8*, i8** %3
%191 = getelementptr inbounds i8, i8* %190, i64 2
%192 = call i32 @parse(i8* %191)
%193 = icmp sgt i32 %192, 0
br i1 %193, label %194, label %195
194: ; preds = %189
store i32 4, i32* %2
br label %232
195: ; preds = %189
br label %228
196: ; preds = %183, %165
%197 = load i8*, i8** %3
%198 = getelementptr inbounds i8, i8* %197, i64 0
%199 = load i8, i8* %198
%200 = sext i8 %199 to i32
%201 = icmp eq i32 %200, 65
br i1 %201, label %202, label %227
202: ; preds = %196
%203 = load i8*, i8** %3
%204 = getelementptr inbounds i8, i8* %203, i64 1
%205 = load i8, i8* %204
%206 = sext i8 %205 to i32
%207 = icmp eq i32 %206, 120
br i1 %207, label %220, label %208
208: ; preds = %202
%209 = load i8*, i8** %3
%210 = getelementptr inbounds i8, i8* %209, i64 1
%211 = load i8, i8* %210
%212 = sext i8 %211 to i32
%213 = icmp eq i32 %212, 121
br i1 %213, label %220, label %214
214: ; preds = %208
%215 = load i8*, i8** %3
%216 = getelementptr inbounds i8, i8* %215, i64 1
%217 = load i8, i8* %216
%218 = sext i8 %217 to i32
%219 = icmp eq i32 %218, 122
br i1 %219, label %220, label %227
220: ; preds = %214, %208, %202
%221 = load i8*, i8** %3
%222 = getelementptr inbounds i8, i8* %221, i64 2
%223 = call i32 @parse(i8* %222)
%224 = icmp sgt i32 %223, 0
br i1 %224, label %225, label %226
225: ; preds = %220
store i32 5, i32* %2
br label %232
226: ; preds = %220
br label %227
227: ; preds = %226, %214, %196
br label %228
228: ; preds = %227, %195
br label %229
229: ; preds = %228, %164
br label %230
230: ; preds = %229
br label %231
231: ; preds = %230
store i32 0, i32* %2
br label %232
232: ; preds = %231, %225, %194, %162, %78, %66
%233 = load i32, i32* %2
ret i32 %233
}

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