#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*/ fgets(char *, int, int /*<<< orphan*/);
int /*<<< orphan*/ printf(char *, int);
int /*<<< orphan*/ stdin;
int main() {
  char egn[10];
  int check = 1;
  int check_sum = 0;
  fgets(egn, 12, stdin);
  if (egn[2] < '0' || egn[2] > '5') {
    check = 0;
  } else if ((egn[2] == '1' && egn[3] > '2') ||
             (egn[2] == '3' && egn[3] > '2') ||
             (egn[2] == '5' && egn[3] > '2')) {
    check = 0;
  }
  if (egn[4] > '3' || (egn[4] == '3' && egn[5] > '1') ||
      (egn[4] == '0' && egn[5] == '0')) {
    check = 0;
  }
  check_sum = check_sum + ((egn[0] - '0') * 2);
  check_sum = check_sum + ((egn[1] - '0') * 4);
  check_sum = check_sum + ((egn[2] - '0') * 8);
  check_sum = check_sum + ((egn[3] - '0') * 5);
  check_sum = check_sum + ((egn[4] - '0') * 10);
  check_sum = check_sum + ((egn[5] - '0') * 9);
  check_sum = check_sum + ((egn[6] - '0') * 7);
  check_sum = check_sum + ((egn[7] - '0') * 3);
  check_sum = check_sum + ((egn[8] - '0') * 6);
  if (check_sum % 11 < 10) {
    if ((egn[9] - '0') != (check_sum % 11)) {
      check = 0;
    }
  } else {
    if (egn[9] != '0')
      check = 0;
  }
  printf("%d", check);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
lea    -0xe(%rbp),%rdi
mov    0x2ea0(%rip),%rax
mov    (%rax),%edx
mov    $0xc,%esi
call   1040 <fgets@plt>
movsbl -0xc(%rbp),%eax
cmp    $0x30,%eax
jl     116e <main+0x4e>
movsbl -0xc(%rbp),%eax
cmp    $0x35,%eax
jle    117a <main+0x5a>
movl   $0x0,-0x14(%rbp)
jmp    11d4 <main+0xb4>
movsbl -0xc(%rbp),%eax
cmp    $0x31,%eax
jne    1194 <main+0x74>
movsbl -0xb(%rbp),%eax
cmp    $0x32,%eax
jg     11c8 <main+0xa8>
movsbl -0xc(%rbp),%eax
cmp    $0x33,%eax
jne    11ae <main+0x8e>
movsbl -0xb(%rbp),%eax
cmp    $0x32,%eax
jg     11c8 <main+0xa8>
movsbl -0xc(%rbp),%eax
cmp    $0x35,%eax
jne    11cf <main+0xaf>
movsbl -0xb(%rbp),%eax
cmp    $0x32,%eax
jle    11cf <main+0xaf>
movl   $0x0,-0x14(%rbp)
jmp    11d4 <main+0xb4>
movsbl -0xa(%rbp),%eax
cmp    $0x33,%eax
jg     1215 <main+0xf5>
movsbl -0xa(%rbp),%eax
cmp    $0x33,%eax
jne    11fb <main+0xdb>
movsbl -0x9(%rbp),%eax
cmp    $0x31,%eax
jg     1215 <main+0xf5>
movsbl -0xa(%rbp),%eax
cmp    $0x30,%eax
jne    121c <main+0xfc>
movsbl -0x9(%rbp),%eax
cmp    $0x30,%eax
jne    121c <main+0xfc>
movl   $0x0,-0x14(%rbp)
mov    -0x18(%rbp),%eax
movsbl -0xe(%rbp),%ecx
sub    $0x30,%ecx
shl    $0x1,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
movsbl -0xd(%rbp),%ecx
sub    $0x30,%ecx
shl    $0x2,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
movsbl -0xc(%rbp),%ecx
sub    $0x30,%ecx
shl    $0x3,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
movsbl -0xb(%rbp),%ecx
sub    $0x30,%ecx
imul   $0x5,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
movsbl -0xa(%rbp),%ecx
sub    $0x30,%ecx
imul   $0xa,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
movsbl -0x9(%rbp),%ecx
sub    $0x30,%ecx
imul   $0x9,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
movsbl -0x8(%rbp),%ecx
sub    $0x30,%ecx
imul   $0x7,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
movsbl -0x7(%rbp),%ecx
sub    $0x30,%ecx
imul   $0x3,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
movsbl -0x6(%rbp),%ecx
sub    $0x30,%ecx
imul   $0x6,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    $0xb,%ecx
cltd
idiv   %ecx
cmp    $0xa,%edx
jge    12fe <main+0x1de>
movsbl -0x5(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
mov    $0xb,%ecx
cltd
idiv   %ecx
mov    -0x1c(%rbp),%eax
cmp    %edx,%eax
je     12f9 <main+0x1d9>
movl   $0x0,-0x14(%rbp)
jmp    1317 <main+0x1f7>
movsbl -0x5(%rbp),%eax
cmp    $0x30,%eax
je     1312 <main+0x1f2>
movl   $0x0,-0x14(%rbp)
jmp    1317 <main+0x1f7>
mov    -0x14(%rbp),%esi
lea    0xcdf(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x10,%rsp
mov    0x2ebc(%rip),%rax
mov    (%rax),%edx
lea    0x6(%rsp),%rdi
mov    $0xc,%esi
call   1040 <fgets@plt>
movsbl 0x8(%rsp),%r8d
lea    -0x36(%r8),%eax
xor    %esi,%esi
cmp    $0xfa,%al
jb     1179 <main+0x59>
mov    0x9(%rsp),%cl
cmp    $0x31,%r8b
jne    115c <main+0x3c>
cmp    $0x32,%cl
jg     1177 <main+0x57>
cmp    $0x33,%r8b
jne    1167 <main+0x47>
cmp    $0x32,%cl
jg     1177 <main+0x57>
mov    $0x1,%esi
cmp    $0x35,%r8b
jne    1179 <main+0x59>
cmp    $0x33,%cl
jl     1179 <main+0x59>
xor    %esi,%esi
movsbl 0xa(%rsp),%ecx
cmp    $0x34,%ecx
jl     1189 <main+0x69>
mov    0xb(%rsp),%al
jmp    11a7 <main+0x87>
mov    0xb(%rsp),%dl
cmp    $0x33,%cl
jne    119b <main+0x7b>
cmp    $0x31,%dl
jle    119b <main+0x7b>
mov    %edx,%eax
jmp    11a7 <main+0x87>
cmp    $0x30,%cl
jne    11ab <main+0x8b>
mov    $0x30,%al
cmp    $0x30,%dl
jne    11ab <main+0x8b>
xor    %esi,%esi
mov    %eax,%edx
movsbl 0x6(%rsp),%r11d
movsbl 0x7(%rsp),%r9d
movsbl 0x9(%rsp),%edi
lea    (%rdi,%rdi,4),%r10d
lea    (%rcx,%rcx,4),%ecx
add    %ecx,%ecx
movsbl %dl,%edx
lea    (%rdx,%rdx,8),%edx
movsbl 0xc(%rsp),%edi
lea    0x0(,%rdi,8),%eax
sub    %edi,%eax
movsbl 0xd(%rsp),%edi
lea    (%rdi,%rdi,2),%edi
movsbl 0xe(%rsp),%ebx
lea    (%rbx,%rbx,2),%ebx
lea    (%rcx,%r8,8),%ecx
lea    (%rcx,%r11,2),%ecx
lea    (%rcx,%r9,4),%ecx
add    %r10d,%ecx
add    %edx,%ecx
add    %eax,%ecx
add    %edi,%ecx
lea    (%rcx,%rbx,2),%eax
add    $0xfffff5e0,%eax
cltq
imul   $0x2e8ba2e9,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x21,%rcx
add    %edx,%ecx
lea    (%rcx,%rcx,4),%edx
lea    (%rcx,%rdx,2),%ecx
sub    %ecx,%eax
movsbl 0xf(%rsp),%ecx
xor    %edx,%edx
cmp    $0x30,%ecx
sete   %dl
add    $0xffffffd0,%ecx
xor    %edi,%edi
cmp    %eax,%ecx
sete   %dil
cmp    $0xa,%eax
cmovl  %edi,%edx
xor    %eax,%eax
test   %dl,%dl
cmove  %eax,%esi
lea    0xdb0(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbx
ret

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

LLVM IR (-O2):
@stdin = global i32 0
@.str = [3 x i8] c"%d\00"
define i32 @main() {
%1 = alloca [10 x i8]
%2 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 0
%3 = load i32, i32* @stdin
%4 = call i32 @fgets(i8* %2, i32 12, i32 %3)
%5 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 2
%6 = load i8, i8* %5
%7 = add i8 %6, -54
%8 = icmp ult i8 %7, -6
br i1 %8, label %22, label %9
9: ; preds = %0
%10 = icmp eq i8 %6, 49
%11 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 3
%12 = load i8, i8* %11
%13 = icmp sgt i8 %12, 50
%14 = select i1 %10, i1 %13, i1 false
br i1 %14, label %21, label %15
15: ; preds = %9
%16 = icmp eq i8 %6, 51
%17 = select i1 %16, i1 %13, i1 false
br i1 %17, label %21, label %18
18: ; preds = %15
%19 = icmp eq i8 %6, 53
%20 = select i1 %19, i1 %13, i1 false
br i1 %20, label %21, label %22
21: ; preds = %18, %15, %9
br label %22
22: ; preds = %0, %18, %21
%23 = phi i32 [ 0, %21 ], [ 1, %18 ], [ 0, %0 ]
%24 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 4
%25 = load i8, i8* %24
%26 = icmp sgt i8 %25, 51
br i1 %26, label %27, label %30
27: ; preds = %22
%28 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 5
%29 = load i8, i8* %28
br label %40
30: ; preds = %22
%31 = icmp eq i8 %25, 51
%32 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 5
%33 = load i8, i8* %32
%34 = icmp sgt i8 %33, 49
%35 = select i1 %31, i1 %34, i1 false
br i1 %35, label %40, label %36
36: ; preds = %30
%37 = icmp eq i8 %25, 48
%38 = icmp eq i8 %33, 48
%39 = select i1 %37, i1 %38, i1 false
br i1 %39, label %40, label %42
40: ; preds = %27, %36, %30
%41 = phi i8 [ %29, %27 ], [ 48, %36 ], [ %33, %30 ]
br label %42
42: ; preds = %40, %36
%43 = phi i8 [ %41, %40 ], [ %33, %36 ]
%44 = phi i32 [ 0, %40 ], [ %23, %36 ]
%45 = load i8, i8* %2
%46 = sext i8 %45 to i32
%47 = shl nsw i32 %46, 1
%48 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 1
%49 = load i8, i8* %48
%50 = sext i8 %49 to i32
%51 = shl nsw i32 %50, 2
%52 = sext i8 %6 to i32
%53 = shl nsw i32 %52, 3
%54 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 3
%55 = load i8, i8* %54
%56 = sext i8 %55 to i32
%57 = mul nsw i32 %56, 5
%58 = sext i8 %25 to i32
%59 = mul nsw i32 %58, 10
%60 = sext i8 %43 to i32
%61 = mul nsw i32 %60, 9
%62 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 6
%63 = load i8, i8* %62
%64 = sext i8 %63 to i32
%65 = mul nsw i32 %64, 7
%66 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 7
%67 = load i8, i8* %66
%68 = sext i8 %67 to i32
%69 = mul nsw i32 %68, 3
%70 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 8
%71 = load i8, i8* %70
%72 = sext i8 %71 to i32
%73 = mul nsw i32 %72, 6
%74 = add nsw i32 %53, -2592
%75 = add nsw i32 %74, %59
%76 = add nsw i32 %75, %47
%77 = add nsw i32 %76, %51
%78 = add nsw i32 %77, %57
%79 = add i32 %78, %61
%80 = add i32 %79, %65
%81 = add i32 %80, %69
%82 = add i32 %81, %73
%83 = srem i32 %82, 11
%84 = icmp slt i32 %83, 10
%85 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 9
%86 = load i8, i8* %85
%87 = icmp eq i8 %86, 48
%88 = sext i8 %86 to i32
%89 = add nsw i32 %88, -48
%90 = icmp eq i32 %89, %83
%91 = select i1 %84, i1 %90, i1 %87
%92 = select i1 %91, i32 %44, i32 0
%93 = call i32 @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32 %92)
ret i32 0
}