#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 abs(int);
int /*<<< orphan*/ exit(int /*<<< orphan*/);
char getchar();
int /*<<< orphan*/ isalpha(char);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ puts(char *);
int /*<<< orphan*/ scanf(char *, int *);
scalar_t__ strcmp(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
char tolower(char);
int main(void) {
  char yn, b[10], *start = "XXXX.OOOO", *end = "OOOO.XXXX";
  int empty, input, t;
  puts("Jumping Balls\n------- -----\n"
       "This is a game of solitare. It is played with 8 balls in 9 holes. The "
       "X's\n"
       "and O's are the balls in this game and the period ('.') is the empty "
       "hole.\n"
       "The object is to get all the X's and O's to switch sides. You can move "
       "by\n"
       "either moving a ball into the empty space or jumping one ball over "
       "another\n"
       "into the empty space.\n\n"
       "On your turn input the number from the left of the space of the ball "
       "you\n"
       "want to move or jump into the empty space.\n\n"
       "If you want to quit input '0' as your move.\n\n"
       "Press ENTER to start...");
  getchar();
  do {
    empty = 4;
    t = 0;
    strcpy(b, start);
    puts("\t123456789");
    printf("\t%s\t? ", b);
    scanf("%d", &input);
    while (input && strcmp(b, end)) {
      if (input--) {
        if (input >= 0 && input < 9 &&
            (abs(input - empty) == 2 || abs(input - empty) == 1)) {
          b[empty] = b[input];
          b[input] = '.';
          empty = input;
          t++;
        } else
          puts("Invalad move.");
      }
      printf("\t%s\t? ", b);
      if (strcmp(b, end))
        scanf("%d", &input);
    }
    if (!strcmp(b, end))
      printf("\nCongratulations! You solved it in %d moves!\n\n"
             "Do you want to try for a better score? (y/n) ",
             t);
    else
      printf("Do you want to start again ? (y/n) ");
    do
      yn = getchar();
    while (!isalpha(yn));
  } while (tolower(yn) != 'n');
  puts("Thanks for playing!");
  exit(0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xe4a(%rip),%rax
mov    %rax,-0x18(%rbp)
lea    0xe49(%rip),%rax
mov    %rax,-0x20(%rbp)
lea    0xe48(%rip),%rdi
call   1040 <puts@plt>
mov    $0x0,%al
call   1080 <getchar@plt>
movl   $0x4,-0x24(%rbp)
movl   $0x0,-0x2c(%rbp)
lea    -0xf(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1030 <strcpy@plt>
lea    0x1031(%rip),%rdi
call   1040 <puts@plt>
lea    -0xf(%rbp),%rsi
lea    0x102c(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1025(%rip),%rdi
lea    -0x28(%rbp),%rsi
call   10b0 <scanf@plt>
xor    %eax,%eax
cmpl   $0x0,-0x28(%rbp)
mov    %al,-0x2d(%rbp)
je     1247 <main+0xa7>
lea    -0xf(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%al
test   $0x1,%al
jne    1257 <main+0xb7>
jmp    1323 <main+0x183>
mov    -0x28(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x28(%rbp)
cmp    $0x0,%eax
je     12e5 <main+0x145>
cmpl   $0x0,-0x28(%rbp)
jl     12d4 <main+0x134>
cmpl   $0x9,-0x28(%rbp)
jge    12d4 <main+0x134>
mov    -0x28(%rbp),%edi
sub    -0x24(%rbp),%edi
call   1050 <abs@plt>
cmp    $0x2,%eax
je     12a7 <main+0x107>
mov    -0x28(%rbp),%edi
sub    -0x24(%rbp),%edi
call   1050 <abs@plt>
cmp    $0x1,%eax
jne    12d4 <main+0x134>
movslq -0x28(%rbp),%rax
mov    -0xf(%rbp,%rax,1),%cl
movslq -0x24(%rbp),%rax
mov    %cl,-0xf(%rbp,%rax,1)
movslq -0x28(%rbp),%rax
movb   $0x2e,-0xf(%rbp,%rax,1)
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12e0 <main+0x140>
lea    0xf65(%rip),%rdi
call   1040 <puts@plt>
jmp    12e5 <main+0x145>
lea    -0xf(%rbp),%rsi
lea    0xf46(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    -0xf(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%rax
je     131e <main+0x17e>
lea    0xf28(%rip),%rdi
lea    -0x28(%rbp),%rsi
call   10b0 <scanf@plt>
jmp    1221 <main+0x81>
lea    -0xf(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%rax
jne    1350 <main+0x1b0>
mov    -0x2c(%rbp),%esi
lea    0xf0a(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    135e <main+0x1be>
lea    0xf53(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1363 <main+0x1c3>
mov    $0x0,%al
call   1080 <getchar@plt>
mov    %al,-0x5(%rbp)
movsbl -0x5(%rbp),%edi
call   10a0 <isalpha@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
test   $0x1,%al
jne    1363 <main+0x1c3>
jmp    138b <main+0x1eb>
movsbl -0x5(%rbp),%edi
call   1090 <tolower@plt>
movsbl %al,%eax
cmp    $0x6e,%eax
jne    11d8 <main+0x38>
lea    0xf27(%rip),%rdi
call   1040 <puts@plt>
xor    %edi,%edi
call   10c0 <exit@plt>

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
lea    0xe6f(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
call   1070 <getchar@plt>
lea    0xe(%rsp),%rbx
lea    0x1079(%rip),%r12
lea    0x8(%rsp),%r13
lea    0xe41(%rip),%r14
nopl   0x0(%rax)
mov    %rbx,%rdi
lea    0xe26(%rip),%rsi
call   1030 <strcpy@plt>
lea    0x1045(%rip),%rdi
call   1040 <puts@plt>
mov    %r12,%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x103e(%rip),%rdi
mov    %r13,%rsi
call   10a0 <scanf@plt>
cmpl   $0x0,0x8(%rsp)
mov    $0x0,%r15d
je     12e0 <main+0x150>
mov    $0x4,%ebp
xor    %r15d,%r15d
jmp    123b <main+0xab>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
cmpl   $0x0,0x8(%rsp)
je     12e0 <main+0x150>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1060 <strcmp@plt>
test   %rax,%rax
je     12e0 <main+0x150>
mov    0x8(%rsp),%eax
sub    $0x1,%eax
mov    %eax,0x8(%rsp)
jb     129c <main+0x10c>
cmp    $0x8,%eax
ja     1290 <main+0x100>
mov    %eax,%ecx
sub    %ebp,%ecx
mov    %ecx,%edx
neg    %edx
cmovs  %ecx,%edx
add    $0xffffffff,%edx
cmp    $0x1,%edx
ja     1290 <main+0x100>
mov    %eax,%ecx
movzbl 0xe(%rsp,%rcx,1),%edx
movslq %ebp,%rsi
mov    %dl,0xe(%rsp,%rsi,1)
movb   $0x2e,0xe(%rsp,%rcx,1)
add    $0x1,%r15d
mov    %eax,%ebp
jmp    129c <main+0x10c>
nop
lea    0xfa9(%rip),%rdi
call   1040 <puts@plt>
mov    %r12,%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1050 <printf@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1060 <strcmp@plt>
test   %rax,%rax
je     1230 <main+0xa0>
lea    0xf79(%rip),%rdi
mov    %r13,%rsi
call   10a0 <scanf@plt>
jmp    1230 <main+0xa0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rbx,%rdi
mov    %r14,%rsi
call   1060 <strcmp@plt>
test   %rax,%rax
je     1300 <main+0x170>
lea    0xfb3(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
jmp    1320 <main+0x190>
lea    0xf47(%rip),%rdi
mov    %r15d,%esi
xor    %eax,%eax
call   1050 <printf@plt>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xor    %eax,%eax
call   1070 <getchar@plt>
movsbl %al,%ebp
mov    %ebp,%edi
call   1090 <isalpha@plt>
test   %eax,%eax
je     1320 <main+0x190>
mov    %ebp,%edi
call   1080 <tolower@plt>
cmp    $0x6e,%al
jne    11d0 <main+0x40>
lea    0xf83(%rip),%rdi
call   1040 <puts@plt>
xor    %edi,%edi
call   10b0 <exit@plt>

LLVM IR (-O0):
@.str = [10 x i8] c"XXXX.OOOO\00"
@.str.1 = [10 x i8] c"OOOO.XXXX\00"
@.str.2 = [535 x i8] c"Jumping Balls\0A------- -----\0AThis is a game of solitare. It is played with 8 balls in 9 holes. The X's\0Aand O's are the balls in this game and the period ('.') is the empty hole.\0AThe object is to get all the X's and O's to switch sides. You can move by\0Aeither moving a ball into the empty space or jumping one ball over another\0Ainto the empty space.\0A\0AOn your turn input the number from the left of the space of the ball you\0Awant to move or jump into the empty space.\0A\0AIf you want to quit input '0' as your move.\0A\0APress ENTER to start...\00"
@.str.3 = [11 x i8] c"\09123456789\00"
@.str.4 = [7 x i8] c"\09%s\09? \00"
@.str.5 = [3 x i8] c"%d\00"
@.str.6 = [14 x i8] c"Invalad move.\00"
@.str.7 = [92 x i8] c"\0ACongratulations! You solved it in %d moves!\0A\0ADo you want to try for a better score? (y/n) \00"
@.str.8 = [36 x i8] c"Do you want to start again ? (y/n) \00"
@.str.9 = [20 x i8] c"Thanks for playing!\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i8
%3 = alloca [10 x i8]
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i32 0, i32* %1
store i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i8** %4
store i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.1, i64 0, i64 0), i8** %5
%9 = call i32 @puts(i8* getelementptr inbounds ([535 x i8], [535 x i8]* @.str.2, i64 0, i64 0))
%10 = call signext i8 (...) @getchar()
br label %11
11: ; preds = %97, %0
store i32 4, i32* %6
store i32 0, i32* %8
%12 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%13 = load i8*, i8** %4
%14 = call i32 @strcpy(i8* %12, i8* %13)
%15 = call i32 @puts(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.3, i64 0, i64 0))
%16 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* %16)
%18 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i32* %7)
br label %19
19: ; preds = %77, %11
%20 = load i32, i32* %7
%21 = icmp ne i32 %20, 0
br i1 %21, label %22, label %27
22: ; preds = %19
%23 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%24 = load i8*, i8** %5
%25 = call i64 @strcmp(i8* %23, i8* %24)
%26 = icmp ne i64 %25, 0
br label %27
27: ; preds = %22, %19
%28 = phi i1 [ false, %19 ], [ %26, %22 ]
br i1 %28, label %29, label %78
29: ; preds = %27
%30 = load i32, i32* %7
%31 = add nsw i32 %30, -1
store i32 %31, i32* %7
%32 = icmp ne i32 %30, 0
br i1 %32, label %33, label %68
33: ; preds = %29
%34 = load i32, i32* %7
%35 = icmp sge i32 %34, 0
br i1 %35, label %36, label %65
36: ; preds = %33
%37 = load i32, i32* %7
%38 = icmp slt i32 %37, 9
br i1 %38, label %39, label %65
39: ; preds = %36
%40 = load i32, i32* %7
%41 = load i32, i32* %6
%42 = sub nsw i32 %40, %41
%43 = call i32 @abs(i32 %42)
%44 = icmp eq i32 %43, 2
br i1 %44, label %51, label %45
45: ; preds = %39
%46 = load i32, i32* %7
%47 = load i32, i32* %6
%48 = sub nsw i32 %46, %47
%49 = call i32 @abs(i32 %48)
%50 = icmp eq i32 %49, 1
br i1 %50, label %51, label %65
51: ; preds = %45, %39
%52 = load i32, i32* %7
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 %53
%55 = load i8, i8* %54
%56 = load i32, i32* %6
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 %57
store i8 %55, i8* %58
%59 = load i32, i32* %7
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 %60
store i8 46, i8* %61
%62 = load i32, i32* %7
store i32 %62, i32* %6
%63 = load i32, i32* %8
%64 = add nsw i32 %63, 1
store i32 %64, i32* %8
br label %67
65: ; preds = %45, %36, %33
%66 = call i32 @puts(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.6, i64 0, i64 0))
br label %67
67: ; preds = %65, %51
br label %68
68: ; preds = %67, %29
%69 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%70 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* %69)
%71 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%72 = load i8*, i8** %5
%73 = call i64 @strcmp(i8* %71, i8* %72)
%74 = icmp ne i64 %73, 0
br i1 %74, label %75, label %77
75: ; preds = %68
%76 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i32* %7)
br label %77
77: ; preds = %75, %68
br label %19
78: ; preds = %27
%79 = getelementptr inbounds [10 x i8], [10 x i8]* %3, i64 0, i64 0
%80 = load i8*, i8** %5
%81 = call i64 @strcmp(i8* %79, i8* %80)
%82 = icmp ne i64 %81, 0
br i1 %82, label %86, label %83
83: ; preds = %78
%84 = load i32, i32* %8
%85 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([92 x i8], [92 x i8]* @.str.7, i64 0, i64 0), i32 %84)
br label %88
86: ; preds = %78
%87 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.8, i64 0, i64 0))
br label %88
88: ; preds = %86, %83
br label %89
89: ; preds = %91, %88
%90 = call signext i8 (...) @getchar()
store i8 %90, i8* %2
br label %91
91: ; preds = %89
%92 = load i8, i8* %2
%93 = call i32 @isalpha(i8 signext %92)
%94 = icmp ne i32 %93, 0
%95 = xor i1 %94, true
br i1 %95, label %89, label %96
96: ; preds = %91
br label %97
97: ; preds = %96
%98 = load i8, i8* %2
%99 = call signext i8 @tolower(i8 signext %98)
%100 = sext i8 %99 to i32
%101 = icmp ne i32 %100, 110
br i1 %101, label %11, label %102
102: ; preds = %97
%103 = call i32 @puts(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.9, i64 0, i64 0))
%104 = call i32 @exit(i32 0)
unreachable
}

LLVM IR (-O2):
@.str = [10 x i8] c"XXXX.OOOO\00"
@.str.1 = [10 x i8] c"OOOO.XXXX\00"
@.str.2 = [535 x i8] c"Jumping Balls\0A------- -----\0AThis is a game of solitare. It is played with 8 balls in 9 holes. The X's\0Aand O's are the balls in this game and the period ('.') is the empty hole.\0AThe object is to get all the X's and O's to switch sides. You can move by\0Aeither moving a ball into the empty space or jumping one ball over another\0Ainto the empty space.\0A\0AOn your turn input the number from the left of the space of the ball you\0Awant to move or jump into the empty space.\0A\0AIf you want to quit input '0' as your move.\0A\0APress ENTER to start...\00"
@.str.3 = [11 x i8] c"\09123456789\00"
@.str.4 = [7 x i8] c"\09%s\09? \00"
@.str.5 = [3 x i8] c"%d\00"
@.str.6 = [14 x i8] c"Invalad move.\00"
@.str.7 = [92 x i8] c"\0ACongratulations! You solved it in %d moves!\0A\0ADo you want to try for a better score? (y/n) \00"
@.str.8 = [36 x i8] c"Do you want to start again ? (y/n) \00"
@.str.9 = [20 x i8] c"Thanks for playing!\00"
define i32 @main() {
%1 = alloca [10 x i8]
%2 = alloca i32
%3 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 0
%4 = bitcast i32* %2 to i8*
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([535 x i8], [535 x i8]* @.str.2, i64 0, i64 0))
%6 = tail call signext i8 (...) @getchar()
br label %7
7: ; preds = %63, %0
%8 = call i32 @strcpy(i8* %3, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0))
%9 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.3, i64 0, i64 0))
%10 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* %3)
%11 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i32* %2)
%12 = load i32, i32* %2
%13 = icmp eq i32 %12, 0
br i1 %13, label %50, label %14
14: ; preds = %7, %47
%15 = phi i32 [ %41, %47 ], [ 0, %7 ]
%16 = phi i32 [ %40, %47 ], [ 4, %7 ]
%17 = call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.1, i64 0, i64 0))
%18 = icmp eq i64 %17, 0
br i1 %18, label %50, label %19
19: ; preds = %14
%20 = load i32, i32* %2
%21 = add i32 %20, -1
store i32 %21, i32* %2
%22 = icmp eq i32 %20, 0
br i1 %22, label %39, label %23
23: ; preds = %19
%24 = icmp ult i32 %21, 9
br i1 %24, label %25, label %37
25: ; preds = %23
%26 = sub nsw i32 %21, %16
%27 = call i32 @llvm.abs.i32(i32 %26, i1 true)
%28 = add nsw i32 %27, -1
%29 = icmp ult i32 %28, 2
br i1 %29, label %30, label %37
30: ; preds = %25
%31 = zext i32 %21 to i64
%32 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 %31
%33 = load i8, i8* %32
%34 = sext i32 %16 to i64
%35 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 %34
store i8 %33, i8* %35
store i8 46, i8* %32
%36 = add nsw i32 %15, 1
br label %39
37: ; preds = %25, %23
%38 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.6, i64 0, i64 0))
br label %39
39: ; preds = %30, %37, %19
%40 = phi i32 [ %21, %30 ], [ %16, %37 ], [ %16, %19 ]
%41 = phi i32 [ %36, %30 ], [ %15, %37 ], [ %15, %19 ]
%42 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i8* %3)
%43 = call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.1, i64 0, i64 0))
%44 = icmp eq i64 %43, 0
br i1 %44, label %47, label %45
45: ; preds = %39
%46 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.5, i64 0, i64 0), i32* %2)
br label %47
47: ; preds = %45, %39
%48 = load i32, i32* %2
%49 = icmp eq i32 %48, 0
br i1 %49, label %50, label %14
50: ; preds = %14, %47, %7
%51 = phi i32 [ 0, %7 ], [ %41, %47 ], [ %15, %14 ]
%52 = call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.1, i64 0, i64 0))
%53 = icmp eq i64 %52, 0
br i1 %53, label %54, label %56
54: ; preds = %50
%55 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([92 x i8], [92 x i8]* @.str.7, i64 0, i64 0), i32 %51)
br label %58
56: ; preds = %50
%57 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str.8, i64 0, i64 0))
br label %58
58: ; preds = %56, %54
br label %59
59: ; preds = %58, %59
%60 = call signext i8 (...) @getchar()
%61 = call i32 @isalpha(i8 signext %60)
%62 = icmp eq i32 %61, 0
br i1 %62, label %59, label %63
63: ; preds = %59
%64 = call signext i8 @tolower(i8 signext %60)
%65 = icmp eq i8 %64, 110
br i1 %65, label %66, label %7
66: ; preds = %63
%67 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.9, i64 0, i64 0))
%68 = call i32 @exit(i32 0)
unreachable
}