#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 EOF;
int /*<<< orphan*/ brace_check(int *, int *);
int /*<<< orphan*/ brack_check(int *, int *);
int /*<<< orphan*/ comnt_check(int *, int *);
int /*<<< orphan*/ dquot_check(int *, int *);
int getchar();
int /*<<< orphan*/ linerr(int *, int /*<<< orphan*/);
int /*<<< orphan*/ multerr(int *);
int /*<<< orphan*/ paren_check(int *, int *);
int /*<<< orphan*/ squot_check(int *, int *);
int main(void) {
  int c;
  int cquad[4] = {'\0', '\0', '\0', '\0'};
  int pnctn_sts[7] = {0, 0, 0, 0, 0, 0, 0};
  int row = 1;
  while ((c = getchar()) != EOF) {
    cquad[0] = cquad[1];
    cquad[1] = cquad[2];
    cquad[2] = cquad[3];
    cquad[3] = c;
    if (pnctn_sts[5] == 0 && pnctn_sts[6] == 0) {
      comnt_check(cquad, pnctn_sts);
    }
    if (pnctn_sts[2] == 0 && pnctn_sts[1] == 0 && pnctn_sts[6] == 0) {
      squot_check(cquad, pnctn_sts);
    }
    if (pnctn_sts[2] == 0 && pnctn_sts[1] == 0 && pnctn_sts[5] == 0) {
      dquot_check(cquad, pnctn_sts);
    }
    if (pnctn_sts[2] == 0 && pnctn_sts[1] == 0 && pnctn_sts[5] == 0 &&
        pnctn_sts[6] == 0) {
      paren_check(cquad, pnctn_sts);
      brack_check(cquad, pnctn_sts);
      brace_check(cquad, pnctn_sts);
    }
    if (cquad[2] != '\\' && cquad[3] == '\n') {
      linerr(pnctn_sts, row++);
      pnctn_sts[5] = pnctn_sts[6] = pnctn_sts[3] = pnctn_sts[4] = 0;
    }
  }
  multerr(pnctn_sts);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x20(%rbp),%rdi
xor    %esi,%esi
mov    $0x10,%edx
call   1060 <memset@plt>
lea    -0x40(%rbp),%rdi
xor    %esi,%esi
mov    $0x1c,%edx
call   1060 <memset@plt>
movl   $0x1,-0x44(%rbp)
mov    $0x0,%al
call   1070 <getchar@plt>
mov    %eax,-0x8(%rbp)
mov    0x2e01(%rip),%rcx
cmp    (%rcx),%eax
je     1316 <main+0x176>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jne    1228 <main+0x88>
cmpl   $0x0,-0x28(%rbp)
jne    1228 <main+0x88>
lea    -0x20(%rbp),%rdi
lea    -0x40(%rbp),%rsi
call   10a0 <comnt_check@plt>
cmpl   $0x0,-0x38(%rbp)
jne    1253 <main+0xb3>
cmpl   $0x0,-0x3c(%rbp)
jne    1253 <main+0xb3>
cmpl   $0x0,-0x28(%rbp)
jne    1253 <main+0xb3>
lea    -0x20(%rbp),%rdi
lea    -0x40(%rbp),%rsi
call   10b0 <squot_check@plt>
cmpl   $0x0,-0x38(%rbp)
jne    127e <main+0xde>
cmpl   $0x0,-0x3c(%rbp)
jne    127e <main+0xde>
cmpl   $0x0,-0x2c(%rbp)
jne    127e <main+0xde>
lea    -0x20(%rbp),%rdi
lea    -0x40(%rbp),%rsi
call   1040 <dquot_check@plt>
cmpl   $0x0,-0x38(%rbp)
jne    12cd <main+0x12d>
cmpl   $0x0,-0x3c(%rbp)
jne    12cd <main+0x12d>
cmpl   $0x0,-0x2c(%rbp)
jne    12cd <main+0x12d>
cmpl   $0x0,-0x28(%rbp)
jne    12cd <main+0x12d>
lea    -0x20(%rbp),%rdi
lea    -0x40(%rbp),%rsi
call   1090 <paren_check@plt>
lea    -0x20(%rbp),%rdi
lea    -0x40(%rbp),%rsi
call   1030 <brack_check@plt>
lea    -0x20(%rbp),%rdi
lea    -0x40(%rbp),%rsi
call   10c0 <brace_check@plt>
cmpl   $0x5c,-0x18(%rbp)
je     1311 <main+0x171>
cmpl   $0xa,-0x14(%rbp)
jne    1311 <main+0x171>
lea    -0x40(%rbp),%rdi
mov    -0x44(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
call   1080 <linerr@plt>
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
jmp    11d6 <main+0x36>
lea    -0x40(%rbp),%rdi
call   1050 <multerr@plt>
xor    %eax,%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
xorps  %xmm0,%xmm0
movaps %xmm0,(%rsp)
movups %xmm0,0x1c(%rsp)
movaps %xmm0,0x10(%rsp)
xor    %eax,%eax
call   1060 <getchar@plt>
mov    0x2e2b(%rip),%r12
cmp    (%r12),%eax
jne    11de <main+0x4e>
lea    0x10(%rsp),%rdi
call   1050 <multerr@plt>
xor    %eax,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0x1,%r15d
lea    0x1c(%rsp),%r13
mov    %rsp,%r14
lea    0x10(%rsp),%rbp
xor    %edx,%edx
xor    %ecx,%ecx
xor    %esi,%esi
xor    %edi,%edi
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
mov    %ebx,(%rsp)
mov    %edi,0x4(%rsp)
mov    %esi,0x8(%rsp)
mov    %eax,0xc(%rsp)
or     %edx,%ecx
jne    1222 <main+0x92>
mov    %r14,%rdi
mov    %rbp,%rsi
call   1090 <comnt_check@plt>
mov    0x28(%rsp),%edx
mov    0x14(%rsp),%eax
mov    0x18(%rsp),%ecx
test   %ecx,%ecx
jne    1249 <main+0xb9>
test   %eax,%eax
jne    1249 <main+0xb9>
test   %edx,%edx
jne    1249 <main+0xb9>
mov    %r14,%rdi
mov    %rbp,%rsi
call   10a0 <squot_check@plt>
mov    0x14(%rsp),%eax
mov    0x18(%rsp),%ecx
mov    0x24(%rsp),%edx
test   %ecx,%ecx
jne    1270 <main+0xe0>
test   %eax,%eax
jne    1270 <main+0xe0>
test   %edx,%edx
jne    1270 <main+0xe0>
mov    %r14,%rdi
mov    %rbp,%rsi
call   1040 <dquot_check@plt>
mov    0x14(%rsp),%eax
mov    0x18(%rsp),%ecx
mov    0x24(%rsp),%edx
test   %ecx,%ecx
jne    12a4 <main+0x114>
test   %eax,%eax
jne    12a4 <main+0x114>
test   %edx,%edx
jne    12a4 <main+0x114>
cmpl   $0x0,0x28(%rsp)
jne    12a4 <main+0x114>
mov    %r14,%rdi
mov    %rbp,%rsi
call   1080 <paren_check@plt>
mov    %r14,%rdi
mov    %rbp,%rsi
call   1030 <brack_check@plt>
mov    %r14,%rdi
mov    %rbp,%rsi
call   10b0 <brace_check@plt>
cmpl   $0x5c,0x8(%rsp)
je     12cc <main+0x13c>
cmpl   $0xa,0xc(%rsp)
jne    12cc <main+0x13c>
lea    0x1(%r15),%ebx
mov    %rbp,%rdi
mov    %r15d,%esi
call   1070 <linerr@plt>
xorps  %xmm0,%xmm0
movups %xmm0,0x0(%r13)
mov    %ebx,%r15d
xor    %eax,%eax
call   1060 <getchar@plt>
cmp    (%r12),%eax
je     11c3 <main+0x33>
mov    0x4(%rsp),%ebx
mov    0x8(%rsp),%edi
mov    0xc(%rsp),%esi
mov    0x24(%rsp),%ecx
mov    0x28(%rsp),%edx
jmp    1200 <main+0x70>

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

LLVM IR (-O2):
@EOF = global i32 0
define i32 @main() {
%1 = alloca [4 x i32]
%2 = alloca [7 x i32]
%3 = bitcast [4 x i32]* %1 to i8*
%4 = bitcast [7 x i32]* %2 to i8*
%5 = call i32 (...) @getchar()
%6 = load i32, i32* @EOF
%7 = icmp eq i32 %5, %6
br i1 %7, label %97, label %8
8: ; preds = %0
%9 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 0, i64 1
%10 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 0, i64 0
%11 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 0, i64 2
%12 = getelementptr inbounds [4 x i32], [4 x i32]* %1, i64 0, i64 3
%13 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 5
%14 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 6
%15 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 0
%16 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 2
%17 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 1
%18 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 3
%19 = bitcast i32* %18 to i8*
br label %20
20: ; preds = %91, %8
%21 = phi i32 [ 0, %8 ], [ %96, %91 ]
%22 = phi i32 [ 0, %8 ], [ %95, %91 ]
%23 = phi i32 [ 0, %8 ], [ %94, %91 ]
%24 = phi i32 [ 0, %8 ], [ %93, %91 ]
%25 = phi i32 [ 0, %8 ], [ %92, %91 ]
%26 = phi i32 [ %5, %8 ], [ %88, %91 ]
%27 = phi i32 [ 1, %8 ], [ %87, %91 ]
store i32 %25, i32* %10
store i32 %24, i32* %9
store i32 %23, i32* %11
store i32 %26, i32* %12
%28 = icmp eq i32 %22, 0
%29 = icmp eq i32 %21, 0
%30 = select i1 %28, i1 %29, i1 false
br i1 %30, label %31, label %34
31: ; preds = %20
%32 = call i32 @comnt_check(i32* %10, i32* %15)
%33 = load i32, i32* %14
br label %34
34: ; preds = %31, %20
%35 = phi i32 [ %33, %31 ], [ %21, %20 ]
%36 = load i32, i32* %16
%37 = icmp eq i32 %36, 0
%38 = load i32, i32* %17
%39 = icmp eq i32 %38, 0
%40 = select i1 %37, i1 %39, i1 false
%41 = icmp eq i32 %35, 0
%42 = select i1 %40, i1 %41, i1 false
br i1 %42, label %43, label %47
43: ; preds = %34
%44 = call i32 @squot_check(i32* %10, i32* %15)
%45 = load i32, i32* %16
%46 = load i32, i32* %17
br label %47
47: ; preds = %43, %34
%48 = phi i32 [ %46, %43 ], [ %38, %34 ]
%49 = phi i32 [ %45, %43 ], [ %36, %34 ]
%50 = icmp eq i32 %49, 0
%51 = icmp eq i32 %48, 0
%52 = select i1 %50, i1 %51, i1 false
%53 = load i32, i32* %13
%54 = icmp eq i32 %53, 0
%55 = select i1 %52, i1 %54, i1 false
br i1 %55, label %56, label %61
56: ; preds = %47
%57 = call i32 @dquot_check(i32* %10, i32* %15)
%58 = load i32, i32* %16
%59 = load i32, i32* %17
%60 = load i32, i32* %13
br label %61
61: ; preds = %56, %47
%62 = phi i32 [ %60, %56 ], [ %53, %47 ]
%63 = phi i32 [ %59, %56 ], [ %48, %47 ]
%64 = phi i32 [ %58, %56 ], [ %49, %47 ]
%65 = icmp eq i32 %64, 0
%66 = icmp eq i32 %63, 0
%67 = select i1 %65, i1 %66, i1 false
%68 = icmp eq i32 %62, 0
%69 = select i1 %67, i1 %68, i1 false
%70 = load i32, i32* %14
%71 = icmp eq i32 %70, 0
%72 = select i1 %69, i1 %71, i1 false
br i1 %72, label %73, label %77
73: ; preds = %61
%74 = call i32 @paren_check(i32* %10, i32* %15)
%75 = call i32 @brack_check(i32* %10, i32* %15)
%76 = call i32 @brace_check(i32* %10, i32* %15)
br label %77
77: ; preds = %73, %61
%78 = load i32, i32* %11
%79 = icmp ne i32 %78, 92
%80 = load i32, i32* %12
%81 = icmp eq i32 %80, 10
%82 = select i1 %79, i1 %81, i1 false
br i1 %82, label %83, label %86
83: ; preds = %77
%84 = add nsw i32 %27, 1
%85 = call i32 @linerr(i32* %15, i32 %27)
br label %86
86: ; preds = %83, %77
%87 = phi i32 [ %84, %83 ], [ %27, %77 ]
%88 = call i32 (...) @getchar()
%89 = load i32, i32* @EOF
%90 = icmp eq i32 %88, %89
br i1 %90, label %97, label %91
91: ; preds = %86
%92 = load i32, i32* %9
%93 = load i32, i32* %11
%94 = load i32, i32* %12
%95 = load i32, i32* %13
%96 = load i32, i32* %14
br label %20
97: ; preds = %86, %0
%98 = getelementptr inbounds [7 x i32], [7 x i32]* %2, i64 0, i64 0
%99 = call i32 @multerr(i32* %98)
ret i32 0
}