#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*/ putchar(char);
int main() {
  char buf[2];
  int state;
  state = 0;
  buf[1] = getchar();
  while ((buf[0] = buf[1]) != EOF) {
    buf[1] = getchar();
    if (state == 0) {
      if (buf[0] == '/' && buf[1] == '*') {
        state = 1;
      } else if (buf[0] == '/' && buf[1] == '/') {
        state = 3;
      } else if (buf[0] == '"') {
        state = 5;
        putchar(buf[0]);
      } else if (buf[0] == '\'') {
        state = 4;
        putchar(buf[0]);
      } else {
        putchar(buf[0]);
      }
    } else if (state == 5) {
      putchar(buf[0]);
      if (buf[0] == '\\')
        state = 6;
      else if (buf[0] == '"')
        state = 0;
    } else if (state == 4) {
      putchar(buf[0]);
      if (buf[0] == '\\')
        state = 7;
      else if (buf[0] == '\'')
        state = 0;
    } else if (state == 1 && buf[0] == '*' && buf[1] == '/') {
      state = 2;
    } else if (state == 2) {
      state = 0;
    } else if (state == 3 && buf[0] == '\n') {
      state = 0;
    } else if (state == 6) {
      state = 5;
      putchar(buf[0]);
    } else if (state == 7) {
      state = 4;
      putchar(buf[0]);
    }
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0xc(%rbp)
mov    $0x0,%al
call   1040 <getchar@plt>
mov    %al,-0x5(%rbp)
mov    -0x5(%rbp),%al
mov    %al,-0x6(%rbp)
movsbl %al,%eax
mov    0x2e98(%rip),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     137a <main+0x25a>
mov    $0x0,%al
call   1040 <getchar@plt>
mov    %al,-0x5(%rbp)
cmpl   $0x0,-0xc(%rbp)
jne    121c <main+0xfc>
movsbl -0x6(%rbp),%eax
cmp    $0x2f,%eax
jne    1195 <main+0x75>
movsbl -0x5(%rbp),%eax
cmp    $0x2a,%eax
jne    1195 <main+0x75>
movl   $0x1,-0xc(%rbp)
jmp    1217 <main+0xf7>
movsbl -0x6(%rbp),%eax
cmp    $0x2f,%eax
jne    11bb <main+0x9b>
movsbl -0x5(%rbp),%eax
cmp    $0x2f,%eax
jne    11bb <main+0x9b>
movl   $0x3,-0xc(%rbp)
jmp    1212 <main+0xf2>
movsbl -0x6(%rbp),%eax
cmp    $0x22,%eax
jne    11dd <main+0xbd>
movl   $0x5,-0xc(%rbp)
movsbl -0x6(%rbp),%edi
call   1030 <putchar@plt>
jmp    120d <main+0xed>
movsbl -0x6(%rbp),%eax
cmp    $0x27,%eax
jne    11ff <main+0xdf>
movl   $0x4,-0xc(%rbp)
movsbl -0x6(%rbp),%edi
call   1030 <putchar@plt>
jmp    1208 <main+0xe8>
movsbl -0x6(%rbp),%edi
call   1030 <putchar@plt>
jmp    120d <main+0xed>
jmp    1212 <main+0xf2>
jmp    1217 <main+0xf7>
jmp    1375 <main+0x255>
cmpl   $0x5,-0xc(%rbp)
jne    1266 <main+0x146>
movsbl -0x6(%rbp),%edi
call   1030 <putchar@plt>
movsbl -0x6(%rbp),%eax
cmp    $0x5c,%eax
jne    1248 <main+0x128>
movl   $0x6,-0xc(%rbp)
jmp    1261 <main+0x141>
movsbl -0x6(%rbp),%eax
cmp    $0x22,%eax
jne    125c <main+0x13c>
movl   $0x0,-0xc(%rbp)
jmp    1261 <main+0x141>
jmp    1370 <main+0x250>
cmpl   $0x4,-0xc(%rbp)
jne    12b0 <main+0x190>
movsbl -0x6(%rbp),%edi
call   1030 <putchar@plt>
movsbl -0x6(%rbp),%eax
cmp    $0x5c,%eax
jne    1292 <main+0x172>
movl   $0x7,-0xc(%rbp)
jmp    12ab <main+0x18b>
movsbl -0x6(%rbp),%eax
cmp    $0x27,%eax
jne    12a6 <main+0x186>
movl   $0x0,-0xc(%rbp)
jmp    12ab <main+0x18b>
jmp    136b <main+0x24b>
cmpl   $0x1,-0xc(%rbp)
jne    12e0 <main+0x1c0>
movsbl -0x6(%rbp),%eax
cmp    $0x2a,%eax
jne    12e0 <main+0x1c0>
movsbl -0x5(%rbp),%eax
cmp    $0x2f,%eax
jne    12e0 <main+0x1c0>
movl   $0x2,-0xc(%rbp)
jmp    1366 <main+0x246>
cmpl   $0x2,-0xc(%rbp)
jne    12f6 <main+0x1d6>
movl   $0x0,-0xc(%rbp)
jmp    1361 <main+0x241>
cmpl   $0x3,-0xc(%rbp)
jne    1319 <main+0x1f9>
movsbl -0x6(%rbp),%eax
cmp    $0xa,%eax
jne    1319 <main+0x1f9>
movl   $0x0,-0xc(%rbp)
jmp    135c <main+0x23c>
cmpl   $0x6,-0xc(%rbp)
jne    1338 <main+0x218>
movl   $0x5,-0xc(%rbp)
movsbl -0x6(%rbp),%edi
call   1030 <putchar@plt>
jmp    1357 <main+0x237>
cmpl   $0x7,-0xc(%rbp)
jne    1352 <main+0x232>
movl   $0x4,-0xc(%rbp)
movsbl -0x6(%rbp),%edi
call   1030 <putchar@plt>
jmp    1357 <main+0x237>
jmp    135c <main+0x23c>
jmp    1361 <main+0x241>
jmp    1366 <main+0x246>
jmp    136b <main+0x24b>
jmp    1370 <main+0x250>
jmp    1375 <main+0x255>
jmp    1140 <main+0x20>
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
xor    %eax,%eax
call   1040 <getchar@plt>
mov    0x2eaf(%rip),%r14
cmp    (%r14),%al
jne    114f <main+0x2f>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %eax,%ebx
mov    $0x6,%r15d
mov    $0x7,%r12d
xor    %ebp,%ebp
jmp    1196 <main+0x76>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsbl %bl,%ebx
mov    %ebx,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
cmp    $0x27,%bl
setne  %al
shl    $0x2,%eax
cmp    $0x5c,%bl
cmove  %r12d,%eax
mov    %eax,%ebp
mov    %r13d,%ebx
cmp    (%r14),%r13b
je     113e <main+0x1e>
xor    %eax,%eax
call   1040 <getchar@plt>
mov    %eax,%r13d
cmp    $0x5,%ebp
je     11f0 <main+0xd0>
cmp    $0x4,%ebp
je     1170 <main+0x50>
test   %ebp,%ebp
jne    1210 <main+0xf0>
cmp    $0x2f,%bl
jne    11be <main+0x9e>
mov    $0x1,%eax
cmp    $0x2a,%r13b
je     118c <main+0x6c>
cmp    $0x2f,%bl
jne    11ce <main+0xae>
mov    $0x3,%eax
cmp    $0x2f,%r13b
je     118c <main+0x6c>
cmp    $0x27,%bl
je     1264 <main+0x144>
cmp    $0x22,%bl
jne    126b <main+0x14b>
mov    $0x22,%edi
jmp    1255 <main+0x135>
nopw   0x0(%rax,%rax,1)
movsbl %bl,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
cmp    $0x22,%bl
setne  %al
lea    (%rax,%rax,4),%eax
cmp    $0x5c,%bl
cmove  %r15d,%eax
jmp    118c <main+0x6c>
nopl   0x0(%rax)
cmp    $0x2a,%bl
jne    1229 <main+0x109>
cmp    $0x1,%ebp
jne    1229 <main+0x109>
mov    $0x2,%eax
cmp    $0x2f,%r13b
je     118c <main+0x6c>
xor    %eax,%eax
cmp    $0x2,%ebp
je     118c <main+0x6c>
cmp    $0xa,%bl
jne    1242 <main+0x122>
cmp    $0x3,%ebp
je     118c <main+0x6c>
cmp    $0x7,%ebp
je     127a <main+0x15a>
mov    %ebp,%eax
cmp    $0x6,%ebp
jne    118c <main+0x6c>
movsbl %bl,%edi
call   1030 <putchar@plt>
mov    $0x5,%eax
jmp    118c <main+0x6c>
mov    $0x27,%edi
jmp    127d <main+0x15d>
movsbl %bl,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
jmp    118c <main+0x6c>
movsbl %bl,%edi
call   1030 <putchar@plt>
mov    $0x4,%eax
jmp    118c <main+0x6c>

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

LLVM IR (-O2):
@EOF = global i8 0
define i32 @main() {
%1 = tail call signext i8 (...) @getchar()
%2 = load i8, i8* @EOF
%3 = icmp eq i8 %1, %2
br i1 %3, label %55, label %4
4: ; preds = %0, %51
%5 = phi i32 [ %52, %51 ], [ 0, %0 ]
%6 = phi i8 [ %7, %51 ], [ %1, %0 ]
%7 = tail call signext i8 (...) @getchar()
switch i32 %5, label %34 [
i32 0, label %8
i32 5, label %22
i32 4, label %28
]
8: ; preds = %4
%9 = icmp eq i8 %6, 47
%10 = icmp eq i8 %7, 42
%11 = and i1 %9, %10
br i1 %11, label %51, label %12
12: ; preds = %8
%13 = icmp eq i8 %7, 47
%14 = and i1 %9, %13
br i1 %14, label %51, label %15
15: ; preds = %12
switch i8 %6, label %20 [
i8 34, label %16
i8 39, label %18
]
16: ; preds = %15
%17 = tail call i32 @putchar(i8 signext 34)
br label %51
18: ; preds = %15
%19 = tail call i32 @putchar(i8 signext 39)
br label %51
20: ; preds = %15
%21 = tail call i32 @putchar(i8 signext %6)
br label %51
22: ; preds = %4
%23 = tail call i32 @putchar(i8 signext %6)
%24 = icmp eq i8 %6, 34
%25 = select i1 %24, i32 0, i32 5
%26 = icmp eq i8 %6, 92
%27 = select i1 %26, i32 6, i32 %25
br label %51
28: ; preds = %4
%29 = tail call i32 @putchar(i8 signext %6)
%30 = icmp eq i8 %6, 39
%31 = select i1 %30, i32 0, i32 4
%32 = icmp eq i8 %6, 92
%33 = select i1 %32, i32 7, i32 %31
br label %51
34: ; preds = %4
%35 = icmp eq i32 %5, 1
%36 = icmp eq i8 %6, 42
%37 = and i1 %36, %35
%38 = icmp eq i8 %7, 47
%39 = and i1 %37, %38
br i1 %39, label %51, label %40
40: ; preds = %34
%41 = icmp eq i32 %5, 2
br i1 %41, label %51, label %42
42: ; preds = %40
%43 = icmp eq i32 %5, 3
%44 = icmp eq i8 %6, 10
%45 = and i1 %44, %43
br i1 %45, label %51, label %46
46: ; preds = %42
switch i32 %5, label %51 [
i32 6, label %47
i32 7, label %49
]
47: ; preds = %46
%48 = tail call i32 @putchar(i8 signext %6)
br label %51
49: ; preds = %46
%50 = tail call i32 @putchar(i8 signext %6)
br label %51
51: ; preds = %28, %22, %46, %42, %40, %34, %12, %8, %49, %47, %16, %20, %18
%52 = phi i32 [ 5, %16 ], [ 4, %18 ], [ 0, %20 ], [ 5, %47 ], [ 4, %49 ], [ 1, %8 ], [ 3, %12 ], [ 2, %34 ], [ 0, %40 ], [ 0, %42 ], [ %5, %46 ], [ %27, %22 ], [ %33, %28 ]
%53 = load i8, i8* @EOF
%54 = icmp eq i8 %7, %53
br i1 %54, label %55, label %4
55: ; preds = %51, %0
ret i32 0
}