#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 getchar();
int /*<<< orphan*/ print_buffer(char *, int);
int /*<<< orphan*/ putchar(char);
int main() {
  int column, non_blanks, c;
  char buffer[80];
  column = 1;
  non_blanks = 0;
  while ((c = getchar()) != EOF)
    if (c == ' ' || c == '\t') {
      if (column + non_blanks <= 80)
        column = column + non_blanks;
      else {
        putchar('\n');
        column = non_blanks + 1;
      }
      print_buffer(buffer, non_blanks);
      non_blanks = 0;
      putchar(c);
      if (c == '\t')
        column = column + 8 - (column - 1) % 8;
      else
        column++;
      if (column > 80) {
        putchar('\n');
        column = 1;
      }
    } else if (c == '\n') {
      if (column + non_blanks > 80)
        putchar('\n');
      print_buffer(buffer, non_blanks);
      putchar('\n');
      column = 1;
      non_blanks = 0;
    } else if (non_blanks < 80)
      buffer[non_blanks++] = c;
    else {
      if (column != 1)
        putchar('\n');
      print_buffer(buffer, 80);
      putchar(c);
      while ((c = getchar()) != EOF && c != ' ' && c != '\t' && c != '\n')
        putchar(c);
      putchar('\n');
      column = 1;
      non_blanks = 0;
    }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    $0x0,%al
call   1040 <getchar@plt>
mov    %eax,-0x10(%rbp)
mov    0x2e8a(%rip),%rcx
cmp    (%rcx),%eax
je     134c <main+0x21c>
cmpl   $0x20,-0x10(%rbp)
je     117a <main+0x4a>
cmpl   $0x9,-0x10(%rbp)
jne    121f <main+0xef>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
cmp    $0x50,%eax
jg     1197 <main+0x67>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0x8(%rbp)
jmp    11aa <main+0x7a>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
lea    -0x60(%rbp),%rdi
mov    -0xc(%rbp),%esi
call   1050 <print_buffer@plt>
movl   $0x0,-0xc(%rbp)
mov    -0x10(%rbp),%eax
movsbl %al,%edi
call   1030 <putchar@plt>
cmpl   $0x9,-0x10(%rbp)
jne    11f6 <main+0xc6>
mov    -0x8(%rbp),%eax
add    $0x8,%eax
mov    %eax,-0x64(%rbp)
mov    -0x8(%rbp),%eax
sub    $0x1,%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    -0x64(%rbp),%eax
sub    %edx,%eax
mov    %eax,-0x8(%rbp)
jmp    11ff <main+0xcf>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
cmpl   $0x50,-0x8(%rbp)
jle    121a <main+0xea>
mov    $0xa,%edi
call   1030 <putchar@plt>
movl   $0x1,-0x8(%rbp)
jmp    1347 <main+0x217>
cmpl   $0xa,-0x10(%rbp)
jne    126b <main+0x13b>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
cmp    $0x50,%eax
jle    1242 <main+0x112>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    -0x60(%rbp),%rdi
mov    -0xc(%rbp),%esi
call   1050 <print_buffer@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movl   $0x1,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
jmp    1342 <main+0x212>
cmpl   $0x50,-0xc(%rbp)
jge    1290 <main+0x160>
mov    -0x10(%rbp),%eax
mov    %al,%cl
mov    -0xc(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0xc(%rbp)
cltq
mov    %cl,-0x60(%rbp,%rax,1)
jmp    133d <main+0x20d>
cmpl   $0x1,-0x8(%rbp)
je     12a4 <main+0x174>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    -0x60(%rbp),%rdi
mov    $0x50,%esi
call   1050 <print_buffer@plt>
mov    -0x10(%rbp),%eax
movsbl %al,%edi
call   1030 <putchar@plt>
mov    $0x0,%al
call   1040 <getchar@plt>
mov    %eax,%ecx
mov    %ecx,-0x10(%rbp)
xor    %eax,%eax
mov    0x2d16(%rip),%rdx
cmp    (%rdx),%ecx
mov    %al,-0x65(%rbp)
je     1305 <main+0x1d5>
xor    %eax,%eax
cmpl   $0x20,-0x10(%rbp)
mov    %al,-0x65(%rbp)
je     1305 <main+0x1d5>
xor    %eax,%eax
cmpl   $0x9,-0x10(%rbp)
mov    %al,-0x65(%rbp)
je     1305 <main+0x1d5>
cmpl   $0xa,-0x10(%rbp)
setne  %al
mov    %al,-0x65(%rbp)
mov    -0x65(%rbp),%al
test   $0x1,%al
jne    1315 <main+0x1e5>
jmp    1325 <main+0x1f5>
mov    -0x10(%rbp),%eax
movsbl %al,%edi
call   1030 <putchar@plt>
jmp    12bd <main+0x18d>
mov    $0xa,%edi
call   1030 <putchar@plt>
movl   $0x1,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
jmp    1342 <main+0x212>
jmp    1347 <main+0x217>
jmp    114d <main+0x1d>
xor    %eax,%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
xor    %eax,%eax
call   1040 <getchar@plt>
mov    0x2e9c(%rip),%r15
cmp    (%r15),%eax
jne    1162 <main+0x32>
xor    %eax,%eax
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %eax,%ebp
mov    $0x1,%ebx
mov    %rsp,%r14
movabs $0x100000600,%r12
xor    %r13d,%r13d
jmp    11ab <main+0x7b>
nopl   0x0(%rax,%rax,1)
mov    %r14,%rdi
mov    %r13d,%esi
call   1050 <print_buffer@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %r13d,%r13d
mov    $0x1,%ebx
xor    %eax,%eax
call   1040 <getchar@plt>
mov    %eax,%ebp
cmp    (%r15),%eax
je     1151 <main+0x21>
cmp    $0x20,%ebp
je     11ba <main+0x8a>
cmp    $0xa,%ebp
je     1200 <main+0xd0>
cmp    $0x9,%ebp
jne    1220 <main+0xf0>
add    %r13d,%ebx
cmp    $0x51,%ebx
jl     11d0 <main+0xa0>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1(%r13),%ebx
mov    %r14,%rdi
mov    %r13d,%esi
call   1050 <print_buffer@plt>
movsbl %bpl,%edi
call   1030 <putchar@plt>
cmp    $0x9,%ebp
jne    1240 <main+0x110>
lea    -0x1(%rbx),%eax
add    $0x6,%ebx
test   %eax,%eax
cmovns %eax,%ebx
and    $0xfffffff8,%ebx
add    $0x9,%ebx
jmp    1243 <main+0x113>
nopl   0x0(%rax)
add    %r13d,%ebx
cmp    $0x51,%ebx
jl     1180 <main+0x50>
mov    $0xa,%edi
call   1030 <putchar@plt>
jmp    1180 <main+0x50>
nopl   0x0(%rax,%rax,1)
cmp    $0x4f,%r13d
jg     125e <main+0x12e>
movslq %r13d,%rax
add    $0x1,%r13d
mov    %bpl,(%rsp,%rax,1)
jmp    119d <main+0x6d>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%ebx
xor    %r13d,%r13d
cmp    $0x51,%ebx
jl     119d <main+0x6d>
mov    $0xa,%edi
call   1030 <putchar@plt>
jmp    1198 <main+0x68>
cmp    $0x1,%ebx
je     126d <main+0x13d>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
mov    $0x50,%esi
call   1050 <print_buffer@plt>
movsbl %bpl,%edi
jmp    1283 <main+0x153>
movsbl %al,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1040 <getchar@plt>
cmp    (%r15),%eax
je     118b <main+0x5b>
cmp    $0x20,%eax
ja     1280 <main+0x150>
mov    %eax,%ecx
bt     %rcx,%r12
jae    1280 <main+0x150>
jmp    118b <main+0x5b>

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

LLVM IR (-O2):
@EOF = global i32 0
define i32 @main() {
%1 = alloca [80 x i8]
%2 = getelementptr inbounds [80 x i8], [80 x i8]* %1, i64 0, i64 0
%3 = call i32 (...) @getchar()
%4 = load i32, i32* @EOF
%5 = icmp eq i32 %3, %4
br i1 %5, label %78, label %6
6: ; preds = %0, %72
%7 = phi i32 [ %75, %72 ], [ %3, %0 ]
%8 = phi i32 [ %74, %72 ], [ 0, %0 ]
%9 = phi i32 [ %73, %72 ], [ 1, %0 ]
%10 = icmp eq i32 %7, 9
switch i32 %7, label %42 [
i32 32, label %11
i32 9, label %11
i32 10, label %34
]
11: ; preds = %6, %6
%12 = add nsw i32 %8, %9
%13 = icmp slt i32 %12, 81
br i1 %13, label %17, label %14
14: ; preds = %11
%15 = call i32 @putchar(i8 signext 10)
%16 = add nsw i32 %8, 1
br label %17
17: ; preds = %11, %14
%18 = phi i32 [ %16, %14 ], [ %12, %11 ]
%19 = call i32 @print_buffer(i8* %2, i32 %8)
%20 = trunc i32 %7 to i8
%21 = call i32 @putchar(i8 signext %20)
br i1 %10, label %22, label %27
22: ; preds = %17
%23 = add nsw i32 %18, 8
%24 = add nsw i32 %18, -1
%25 = srem i32 %24, 8
%26 = sub nsw i32 %23, %25
br label %29
27: ; preds = %17
%28 = add nsw i32 %18, 1
br label %29
29: ; preds = %27, %22
%30 = phi i32 [ %26, %22 ], [ %28, %27 ]
%31 = icmp sgt i32 %30, 80
br i1 %31, label %32, label %72
32: ; preds = %29
%33 = call i32 @putchar(i8 signext 10)
br label %72
34: ; preds = %6
%35 = add nsw i32 %8, %9
%36 = icmp sgt i32 %35, 80
br i1 %36, label %37, label %39
37: ; preds = %34
%38 = call i32 @putchar(i8 signext 10)
br label %39
39: ; preds = %37, %34
%40 = call i32 @print_buffer(i8* %2, i32 %8)
%41 = call i32 @putchar(i8 signext 10)
br label %72
42: ; preds = %6
%43 = icmp slt i32 %8, 80
br i1 %43, label %44, label %49
44: ; preds = %42
%45 = trunc i32 %7 to i8
%46 = add nsw i32 %8, 1
%47 = sext i32 %8 to i64
%48 = getelementptr inbounds [80 x i8], [80 x i8]* %1, i64 0, i64 %47
store i8 %45, i8* %48
br label %72
49: ; preds = %42
%50 = icmp eq i32 %9, 1
br i1 %50, label %53, label %51
51: ; preds = %49
%52 = call i32 @putchar(i8 signext 10)
br label %53
53: ; preds = %51, %49
%54 = call i32 @print_buffer(i8* %2, i32 80)
%55 = trunc i32 %7 to i8
%56 = call i32 @putchar(i8 signext %55)
%57 = call i32 (...) @getchar()
%58 = load i32, i32* @EOF
%59 = freeze i32 %58
%60 = icmp eq i32 %57, %59
br i1 %60, label %70, label %61
61: ; preds = %53, %63
%62 = phi i32 [ %66, %63 ], [ %57, %53 ]
switch i32 %62, label %63 [
i32 32, label %70
i32 10, label %70
i32 9, label %70
]
63: ; preds = %61
%64 = trunc i32 %62 to i8
%65 = call i32 @putchar(i8 signext %64)
%66 = call i32 (...) @getchar()
%67 = load i32, i32* @EOF
%68 = freeze i32 %67
%69 = icmp eq i32 %66, %68
br i1 %69, label %70, label %61
70: ; preds = %63, %61, %61, %61, %53
%71 = call i32 @putchar(i8 signext 10)
br label %72
72: ; preds = %39, %70, %44, %29, %32
%73 = phi i32 [ 1, %32 ], [ %30, %29 ], [ 1, %39 ], [ %9, %44 ], [ 1, %70 ]
%74 = phi i32 [ 0, %32 ], [ 0, %29 ], [ 0, %39 ], [ %46, %44 ], [ 0, %70 ]
%75 = call i32 (...) @getchar()
%76 = load i32, i32* @EOF
%77 = icmp eq i32 %75, %76
br i1 %77, label %78, label %6
78: ; preds = %72, %0
ret i32 0
}