#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 /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ scanf(char *, int *);
int /*<<< orphan*/ system(char *);
main() {
  int a, mes, ano;
  int dia[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  system("Title 30_Cascallar_Autrán_Manuel");
  system("color 88");
  system("cls");
  printf("COMPROBAR SI A FECHA E CORRECTA\n");
  printf("===============================\n\n");
  printf("Escribir un d\241a: ");
  scanf("%d", &a);
  printf("\n");
  printf("Escribir un mes: ");
  scanf("%d", &mes);
  printf("\n");
  printf("Escribir un ano: ");
  scanf("%d", &ano);
  printf("\n");
  if ((ano % 400 == 0 || (ano % 100 != 0 && ano % 4 == 0)) && (ano >= 1582)) {
    dia[1] = dia[1] + 1;
  }
  if (a < 1) {
    printf("Fecha Incorrecta\n");
  } else {
    if ((ano > 1582 && mes >= 1 && mes <= 12 && dia[mes - 1] >= a) ||
        (ano == 1582 && ((mes > 10 && mes <= 12 && dia[mes - 1] >= a) ||
                         ((mes == 10) && a > 14 && a < 31)))) {
      printf("Fecha Correcta\n");
    } else {
      if ((((((ano > (-46) && (ano < 1582))) && ((a > 0) && (a <= 30))) &&
            ((mes > 0) && (mes < 13))) &&
           (ano != 0)) ||
          ((ano == 1582) && ((mes > 0 && mes < 10) && (a > 0 && a <= 30)) ||
           ((mes == 10) && (a > 0 && a < 5)))) {
        printf("Fecha correcta, pero seg\243n o calendario juliano\n");
      } else
        printf("Fecha incorrecta\n");
    }
  }
  system("pause");
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x40(%rbp),%rdi
lea    0xea6(%rip),%rsi
mov    $0x30,%edx
call   1050 <memcpy@plt>
lea    0xec5(%rip),%rdi
call   1030 <system@plt>
lea    0xedb(%rip),%rdi
call   1030 <system@plt>
lea    0xed8(%rip),%rdi
call   1030 <system@plt>
lea    0xed0(%rip),%rdi
call   1040 <printf@plt>
lea    0xee5(%rip),%rdi
call   1040 <printf@plt>
lea    0xefb(%rip),%rdi
call   1040 <printf@plt>
lea    0xf01(%rip),%rdi
lea    -0x8(%rbp),%rsi
call   1060 <scanf@plt>
lea    0xedd(%rip),%rdi
call   1040 <printf@plt>
lea    0xee8(%rip),%rdi
call   1040 <printf@plt>
lea    0xed9(%rip),%rdi
lea    -0xc(%rbp),%rsi
call   1060 <scanf@plt>
lea    0xeb5(%rip),%rdi
call   1040 <printf@plt>
lea    0xed2(%rip),%rdi
call   1040 <printf@plt>
lea    0xeb1(%rip),%rdi
lea    -0x10(%rbp),%rsi
call   1060 <scanf@plt>
lea    0xe8d(%rip),%rdi
call   1040 <printf@plt>
mov    -0x10(%rbp),%eax
mov    $0x190,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     1254 <main+0x114>
mov    -0x10(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     126a <main+0x12a>
mov    -0x10(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    126a <main+0x12a>
cmpl   $0x62e,-0x10(%rbp)
jl     126a <main+0x12a>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0x1,-0x8(%rbp)
jge    1285 <main+0x145>
lea    0xe60(%rip),%rdi
call   1040 <printf@plt>
jmp    13e3 <main+0x2a3>
cmpl   $0x62e,-0x10(%rbp)
jle    12bb <main+0x17b>
cmpl   $0x1,-0xc(%rbp)
jl     12bb <main+0x17b>
cmpl   $0xc,-0xc(%rbp)
jg     12bb <main+0x17b>
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
cltq
mov    -0x40(%rbp,%rax,4),%eax
cmp    -0x8(%rbp),%eax
jge    130f <main+0x1cf>
cmpl   $0x62e,-0x10(%rbp)
jne    1320 <main+0x1e0>
cmpl   $0xa,-0xc(%rbp)
jle    12f1 <main+0x1b1>
cmpl   $0xc,-0xc(%rbp)
jg     12f1 <main+0x1b1>
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
cltq
mov    -0x40(%rbp,%rax,4),%eax
cmp    -0x8(%rbp),%eax
jge    130f <main+0x1cf>
cmpl   $0xa,-0xc(%rbp)
jne    1320 <main+0x1e0>
cmpl   $0xe,-0x8(%rbp)
jle    1320 <main+0x1e0>
cmpl   $0x1f,-0x8(%rbp)
jge    1320 <main+0x1e0>
lea    0xdd7(%rip),%rdi
call   1040 <printf@plt>
jmp    13de <main+0x29e>
cmpl   $0xffffffd2,-0x10(%rbp)
jle    1369 <main+0x229>
cmpl   $0x62e,-0x10(%rbp)
jge    1369 <main+0x229>
cmpl   $0x0,-0x8(%rbp)
jle    1369 <main+0x229>
cmpl   $0x1e,-0x8(%rbp)
jg     1369 <main+0x229>
cmpl   $0x0,-0xc(%rbp)
jle    1369 <main+0x229>
cmpl   $0xd,-0xc(%rbp)
jge    1369 <main+0x229>
cmpl   $0x0,-0x10(%rbp)
jne    13bc <main+0x27c>
cmpl   $0x62e,-0x10(%rbp)
jne    139e <main+0x25e>
cmpl   $0x0,-0xc(%rbp)
jle    139e <main+0x25e>
cmpl   $0xa,-0xc(%rbp)
jge    139e <main+0x25e>
cmpl   $0x0,-0x8(%rbp)
jle    139e <main+0x25e>
cmpl   $0x1e,-0x8(%rbp)
jle    13bc <main+0x27c>
cmpl   $0xa,-0xc(%rbp)
jne    13cd <main+0x28d>
cmpl   $0x0,-0x8(%rbp)
jle    13cd <main+0x28d>
cmpl   $0x5,-0x8(%rbp)
jge    13cd <main+0x28d>
lea    0xd3a(%rip),%rdi
call   1040 <printf@plt>
jmp    13d9 <main+0x299>
lea    0xd5a(%rip),%rdi
call   1040 <printf@plt>
jmp    13de <main+0x29e>
jmp    13e3 <main+0x2a3>
lea    0xd56(%rip),%rdi
call   1030 <system@plt>
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x40,%rsp
movaps 0xec4(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movaps 0xea8(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0xe8c(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
lea    0xeb0(%rip),%rdi
call   1050 <system@plt>
lea    0xec6(%rip),%rdi
call   1050 <system@plt>
lea    0xec3(%rip),%rdi
call   1050 <system@plt>
lea    0xefa(%rip),%rdi
call   1040 <puts@plt>
lea    0xf0e(%rip),%rdi
call   1040 <puts@plt>
lea    0xea3(%rip),%rdi
call   1060 <printf@plt>
lea    0xea9(%rip),%rbx
lea    0xc(%rsp),%rsi
mov    %rbx,%rdi
call   1070 <scanf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xe8e(%rip),%rdi
call   1060 <printf@plt>
lea    0x8(%rsp),%rsi
mov    %rbx,%rdi
call   1070 <scanf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xe7d(%rip),%rdi
call   1060 <printf@plt>
lea    0x4(%rsp),%rsi
mov    %rbx,%rdi
call   1070 <scanf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x4(%rsp),%eax
imul   $0xc28f5c29,%eax,%ecx
add    $0x51eb850,%ecx
mov    %ecx,%edx
ror    $0x4,%edx
cmp    $0xa3d70b,%edx
jb     128e <main+0x13e>
ror    $0x2,%ecx
cmp    $0x28f5c29,%ecx
jb     1263 <main+0x113>
cmp    $0x62e,%eax
jl     1263 <main+0x113>
mov    %eax,%ecx
and    $0x3,%ecx
jne    1263 <main+0x113>
movl   $0x1d,0x14(%rsp)
mov    0xc(%rsp),%ecx
test   %ecx,%ecx
jle    1297 <main+0x147>
mov    0x8(%rsp),%edx
cmp    $0x62f,%eax
jl     12a3 <main+0x153>
test   %edx,%edx
jle    12a3 <main+0x153>
cmp    $0xc,%edx
jg     12a3 <main+0x153>
lea    -0x1(%rdx),%esi
cmp    %ecx,0x10(%rsp,%rsi,4)
jge    132e <main+0x1de>
jmp    12c0 <main+0x170>
cmp    $0x62e,%eax
jge    125b <main+0x10b>
jmp    1263 <main+0x113>
lea    0xe91(%rip),%rdi
jmp    1335 <main+0x1e5>
cmp    $0x62e,%eax
jne    12c0 <main+0x170>
lea    -0xb(%rdx),%esi
cmp    $0x1,%esi
ja     131c <main+0x1cc>
lea    -0x1(%rdx),%edi
mov    $0x1,%sil
cmp    %ecx,0x10(%rsp,%rdi,4)
jge    132e <main+0x1de>
jmp    12c2 <main+0x172>
xor    %esi,%esi
lea    0x2d(%rax),%ebx
lea    0xe24(%rip),%rdi
cmp    $0x65a,%ebx
ja     12e6 <main+0x196>
cmp    $0x1e,%ecx
ja     12e6 <main+0x196>
test   %edx,%edx
jle    12e6 <main+0x196>
cmp    $0xc,%edx
jg     12e6 <main+0x196>
test   %eax,%eax
jne    1335 <main+0x1e5>
test   %edx,%edx
setg   %al
and    %al,%sil
cmp    $0x1,%sil
jne    12fe <main+0x1ae>
cmp    $0x9,%edx
jg     12fe <main+0x1ae>
cmp    $0x1f,%ecx
jb     1335 <main+0x1e5>
cmp    $0x5,%ecx
lea    0xde8(%rip),%rdi
lea    0xdd0(%rip),%rax
cmovae %rax,%rdi
cmp    $0xa,%edx
cmovne %rax,%rdi
jmp    1335 <main+0x1e5>
mov    $0x1,%sil
cmp    $0xa,%edx
jne    12c2 <main+0x172>
cmp    $0xf,%ecx
jb     12c2 <main+0x172>
cmp    $0x1f,%ecx
jae    12c2 <main+0x172>
lea    0xdeb(%rip),%rdi
call   1040 <puts@plt>
lea    0xd57(%rip),%rdi
call   1050 <system@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@__const.main.dia = [12 x i32] [i32 31, i32 28, i32 31, i32 30, i32 31, i32 30, i32 31, i32 31, i32 30, i32 31, i32 30, i32 31]
@.str = [34 x i8] c"Title 30_Cascallar_Autr\C3\A1n_Manuel\00"
@.str.1 = [9 x i8] c"color 88\00"
@.str.2 = [4 x i8] c"cls\00"
@.str.3 = [33 x i8] c"COMPROBAR SI A FECHA E CORRECTA\0A\00"
@.str.4 = [34 x i8] c"===============================\0A\0A\00"
@.str.5 = [18 x i8] c"Escribir un d\A1a: \00"
@.str.6 = [3 x i8] c"%d\00"
@.str.7 = [2 x i8] c"\0A\00"
@.str.8 = [18 x i8] c"Escribir un mes: \00"
@.str.9 = [18 x i8] c"Escribir un ano: \00"
@.str.10 = [18 x i8] c"Fecha Incorrecta\0A\00"
@.str.11 = [16 x i8] c"Fecha Correcta\0A\00"
@.str.12 = [49 x i8] c"Fecha correcta, pero seg\A3n o calendario juliano\0A\00"
@.str.13 = [18 x i8] c"Fecha incorrecta\0A\00"
@.str.14 = [6 x i8] c"pause\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca [12 x i32]
store i32 0, i32* %1
%6 = bitcast [12 x i32]* %5 to i8*
%7 = call i32 @system(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0))
%8 = call i32 @system(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
%9 = call i32 @system(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%10 = call i32 @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.3, i64 0, i64 0))
%11 = call i32 @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.4, i64 0, i64 0))
%12 = call i32 @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.5, i64 0, i64 0))
%13 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %2)
%14 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0))
%15 = call i32 @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.8, i64 0, i64 0))
%16 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %3)
%17 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0))
%18 = call i32 @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.9, i64 0, i64 0))
%19 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %4)
%20 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0))
%21 = load i32, i32* %4
%22 = srem i32 %21, 400
%23 = icmp eq i32 %22, 0
br i1 %23, label %32, label %24
24: ; preds = %0
%25 = load i32, i32* %4
%26 = srem i32 %25, 100
%27 = icmp ne i32 %26, 0
br i1 %27, label %28, label %40
28: ; preds = %24
%29 = load i32, i32* %4
%30 = srem i32 %29, 4
%31 = icmp eq i32 %30, 0
br i1 %31, label %32, label %40
32: ; preds = %28, %0
%33 = load i32, i32* %4
%34 = icmp sge i32 %33, 1582
br i1 %34, label %35, label %40
35: ; preds = %32
%36 = getelementptr inbounds [12 x i32], [12 x i32]* %5, i64 0, i64 1
%37 = load i32, i32* %36
%38 = add nsw i32 %37, 1
%39 = getelementptr inbounds [12 x i32], [12 x i32]* %5, i64 0, i64 1
store i32 %38, i32* %39
br label %40
40: ; preds = %35, %32, %28, %24
%41 = load i32, i32* %2
%42 = icmp slt i32 %41, 1
br i1 %42, label %43, label %45
43: ; preds = %40
%44 = call i32 @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.10, i64 0, i64 0))
br label %141
45: ; preds = %40
%46 = load i32, i32* %4
%47 = icmp sgt i32 %46, 1582
br i1 %47, label %48, label %62
48: ; preds = %45
%49 = load i32, i32* %3
%50 = icmp sge i32 %49, 1
br i1 %50, label %51, label %62
51: ; preds = %48
%52 = load i32, i32* %3
%53 = icmp sle i32 %52, 12
br i1 %53, label %54, label %62
54: ; preds = %51
%55 = load i32, i32* %3
%56 = sub nsw i32 %55, 1
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds [12 x i32], [12 x i32]* %5, i64 0, i64 %57
%59 = load i32, i32* %58
%60 = load i32, i32* %2
%61 = icmp sge i32 %59, %60
br i1 %61, label %88, label %62
62: ; preds = %54, %51, %48, %45
%63 = load i32, i32* %4
%64 = icmp eq i32 %63, 1582
br i1 %64, label %65, label %90
65: ; preds = %62
%66 = load i32, i32* %3
%67 = icmp sgt i32 %66, 10
br i1 %67, label %68, label %79
68: ; preds = %65
%69 = load i32, i32* %3
%70 = icmp sle i32 %69, 12
br i1 %70, label %71, label %79
71: ; preds = %68
%72 = load i32, i32* %3
%73 = sub nsw i32 %72, 1
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds [12 x i32], [12 x i32]* %5, i64 0, i64 %74
%76 = load i32, i32* %75
%77 = load i32, i32* %2
%78 = icmp sge i32 %76, %77
br i1 %78, label %88, label %79
79: ; preds = %71, %68, %65
%80 = load i32, i32* %3
%81 = icmp eq i32 %80, 10
br i1 %81, label %82, label %90
82: ; preds = %79
%83 = load i32, i32* %2
%84 = icmp sgt i32 %83, 14
br i1 %84, label %85, label %90
85: ; preds = %82
%86 = load i32, i32* %2
%87 = icmp slt i32 %86, 31
br i1 %87, label %88, label %90
88: ; preds = %85, %71, %54
%89 = call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.11, i64 0, i64 0))
br label %140
90: ; preds = %85, %82, %79, %62
%91 = load i32, i32* %4
%92 = icmp sgt i32 %91, -46
br i1 %92, label %93, label %111
93: ; preds = %90
%94 = load i32, i32* %4
%95 = icmp slt i32 %94, 1582
br i1 %95, label %96, label %111
96: ; preds = %93
%97 = load i32, i32* %2
%98 = icmp sgt i32 %97, 0
br i1 %98, label %99, label %111
99: ; preds = %96
%100 = load i32, i32* %2
%101 = icmp sle i32 %100, 30
br i1 %101, label %102, label %111
102: ; preds = %99
%103 = load i32, i32* %3
%104 = icmp sgt i32 %103, 0
br i1 %104, label %105, label %111
105: ; preds = %102
%106 = load i32, i32* %3
%107 = icmp slt i32 %106, 13
br i1 %107, label %108, label %111
108: ; preds = %105
%109 = load i32, i32* %4
%110 = icmp ne i32 %109, 0
br i1 %110, label %135, label %111
111: ; preds = %108, %105, %102, %99, %96, %93, %90
%112 = load i32, i32* %4
%113 = icmp eq i32 %112, 1582
br i1 %113, label %114, label %126
114: ; preds = %111
%115 = load i32, i32* %3
%116 = icmp sgt i32 %115, 0
br i1 %116, label %117, label %126
117: ; preds = %114
%118 = load i32, i32* %3
%119 = icmp slt i32 %118, 10
br i1 %119, label %120, label %126
120: ; preds = %117
%121 = load i32, i32* %2
%122 = icmp sgt i32 %121, 0
br i1 %122, label %123, label %126
123: ; preds = %120
%124 = load i32, i32* %2
%125 = icmp sle i32 %124, 30
br i1 %125, label %135, label %126
126: ; preds = %123, %120, %117, %114, %111
%127 = load i32, i32* %3
%128 = icmp eq i32 %127, 10
br i1 %128, label %129, label %137
129: ; preds = %126
%130 = load i32, i32* %2
%131 = icmp sgt i32 %130, 0
br i1 %131, label %132, label %137
132: ; preds = %129
%133 = load i32, i32* %2
%134 = icmp slt i32 %133, 5
br i1 %134, label %135, label %137
135: ; preds = %132, %123, %108
%136 = call i32 @printf(i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.12, i64 0, i64 0))
br label %139
137: ; preds = %132, %129, %126
%138 = call i32 @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.13, i64 0, i64 0))
br label %139
139: ; preds = %137, %135
br label %140
140: ; preds = %139, %88
br label %141
141: ; preds = %140, %43
%142 = call i32 @system(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.14, i64 0, i64 0))
%143 = load i32, i32* %1
ret i32 %143
}

LLVM IR (-O2):
@__const.main.dia = [12 x i32] [i32 31, i32 28, i32 31, i32 30, i32 31, i32 30, i32 31, i32 31, i32 30, i32 31, i32 30, i32 31]
@.str = [34 x i8] c"Title 30_Cascallar_Autr\C3\A1n_Manuel\00"
@.str.1 = [9 x i8] c"color 88\00"
@.str.2 = [4 x i8] c"cls\00"
@.str.5 = [18 x i8] c"Escribir un d\A1a: \00"
@.str.6 = [3 x i8] c"%d\00"
@.str.8 = [18 x i8] c"Escribir un mes: \00"
@.str.9 = [18 x i8] c"Escribir un ano: \00"
@.str.14 = [6 x i8] c"pause\00"
@str = [32 x i8] c"COMPROBAR SI A FECHA E CORRECTA\00"
@str.15 = [33 x i8] c"===============================\0A\00"
@str.16 = [17 x i8] c"Fecha incorrecta\00"
@str.17 = [48 x i8] c"Fecha correcta, pero seg\A3n o calendario juliano\00"
@str.18 = [15 x i8] c"Fecha Correcta\00"
@str.19 = [17 x i8] c"Fecha Incorrecta\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca [12 x i32]
%5 = bitcast i32* %1 to i8*
%6 = bitcast i32* %2 to i8*
%7 = bitcast i32* %3 to i8*
%8 = bitcast [12 x i32]* %4 to i8*
%9 = tail call i32 @system(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str, i64 0, i64 0))
%10 = tail call i32 @system(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0))
%11 = tail call i32 @system(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @str, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.15, i64 0, i64 0))
%14 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.5, i64 0, i64 0))
%15 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %1)
%16 = call i32 @putchar(i32 10)
%17 = call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.8, i64 0, i64 0))
%18 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %2)
%19 = call i32 @putchar(i32 10)
%20 = call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.9, i64 0, i64 0))
%21 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32* %3)
%22 = call i32 @putchar(i32 10)
%23 = load i32, i32* %3
%24 = srem i32 %23, 400
%25 = icmp eq i32 %24, 0
br i1 %25, label %34, label %26
26: ; preds = %0
%27 = srem i32 %23, 100
%28 = icmp eq i32 %27, 0
br i1 %28, label %38, label %29
29: ; preds = %26
%30 = and i32 %23, 3
%31 = icmp eq i32 %30, 0
%32 = icmp sgt i32 %23, 1581
%33 = and i1 %32, %31
br i1 %33, label %36, label %38
34: ; preds = %0
%35 = icmp sgt i32 %23, 1581
br i1 %35, label %36, label %38
36: ; preds = %29, %34
%37 = getelementptr inbounds [12 x i32], [12 x i32]* %4, i64 0, i64 1
store i32 29, i32* %37
br label %38
38: ; preds = %36, %34, %29, %26
%39 = load i32, i32* %1
%40 = icmp slt i32 %39, 1
br i1 %40, label %91, label %41
41: ; preds = %38
%42 = icmp sgt i32 %23, 1582
%43 = load i32, i32* %2
%44 = icmp sgt i32 %43, 0
%45 = select i1 %42, i1 %44, i1 false
%46 = icmp slt i32 %43, 13
%47 = select i1 %45, i1 %46, i1 false
br i1 %47, label %48, label %54
48: ; preds = %41
%49 = add nsw i32 %43, -1
%50 = zext i32 %49 to i64
%51 = getelementptr inbounds [12 x i32], [12 x i32]* %4, i64 0, i64 %50
%52 = load i32, i32* %51
%53 = icmp slt i32 %52, %39
br i1 %53, label %71, label %91
54: ; preds = %41
%55 = icmp eq i32 %23, 1582
br i1 %55, label %56, label %71
56: ; preds = %54
%57 = add i32 %43, -11
%58 = icmp ult i32 %57, 2
br i1 %58, label %59, label %65
59: ; preds = %56
%60 = add nsw i32 %43, -1
%61 = zext i32 %60 to i64
%62 = getelementptr inbounds [12 x i32], [12 x i32]* %4, i64 0, i64 %61
%63 = load i32, i32* %62
%64 = icmp slt i32 %63, %39
br i1 %64, label %71, label %91
65: ; preds = %56
%66 = icmp eq i32 %43, 10
%67 = icmp ugt i32 %39, 14
%68 = select i1 %66, i1 %67, i1 false
%69 = icmp ult i32 %39, 31
%70 = select i1 %68, i1 %69, i1 false
br i1 %70, label %91, label %71
71: ; preds = %48, %59, %65, %54
%72 = phi i1 [ true, %65 ], [ false, %54 ], [ true, %59 ], [ false, %48 ]
%73 = add i32 %23, 45
%74 = icmp ult i32 %73, 1627
%75 = icmp ult i32 %39, 31
%76 = select i1 %74, i1 %75, i1 false
%77 = select i1 %76, i1 %44, i1 false
%78 = select i1 %77, i1 %46, i1 false
%79 = icmp ne i32 %23, 0
%80 = select i1 %78, i1 %79, i1 false
br i1 %80, label %91, label %81
81: ; preds = %71
%82 = select i1 %72, i1 %44, i1 false
%83 = icmp slt i32 %43, 10
%84 = select i1 %82, i1 %83, i1 false
%85 = select i1 %84, i1 %75, i1 false
br i1 %85, label %91, label %86
86: ; preds = %81
%87 = icmp eq i32 %43, 10
%88 = icmp ult i32 %39, 5
%89 = select i1 %87, i1 %88, i1 false
%90 = select i1 %89, i8* getelementptr inbounds ([48 x i8], [48 x i8]* @str.17, i64 0, i64 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @str.16, i64 0, i64 0)
br label %91
91: ; preds = %86, %71, %81, %48, %59, %65, %38
%92 = phi i8* [ getelementptr inbounds ([17 x i8], [17 x i8]* @str.19, i64 0, i64 0), %38 ], [ getelementptr inbounds ([15 x i8], [15 x i8]* @str.18, i64 0, i64 0), %65 ], [ getelementptr inbounds ([15 x i8], [15 x i8]* @str.18, i64 0, i64 0), %59 ], [ getelementptr inbounds ([15 x i8], [15 x i8]* @str.18, i64 0, i64 0), %48 ], [ getelementptr inbounds ([48 x i8], [48 x i8]* @str.17, i64 0, i64 0), %81 ], [ getelementptr inbounds ([48 x i8], [48 x i8]* @str.17, i64 0, i64 0), %71 ], [ %90, %86 ]
%93 = call i32 @puts(i8* dereferenceable(1) %92)
%94 = call i32 @system(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.14, i64 0, i64 0))
ret i32 0
}