program C086
    implicit none
    integer(8) :: N
    integer(8), allocatable, dimension(:) :: t, x, y
    integer(8) :: i, d, ju, dt 

    read(5,*) N
    allocate(t(N))
    allocate(x(N))
    allocate(y(N))
    do i = 1, N
        read(5,*) t(i), x(i), y(i)
    end do

    ju = 0
    d = x(1) + y(1)
    if (d<=t(1)) then
        if (mod(t(1)-d,2)/=0) then
            ju = ju + 1
        end if
    else
        ju = ju + 1
    end if

    do i = 2, N
        d = abs(x(i)-x(i-1)) + abs(y(i)-y(i-1))
        dt = t(i) - t(i-1)
        if (d<=dt) then
            if (mod(dt-d,2)/=0) then
                ju = ju + 1
            end if
        else
            ju = ju + 1
        end if


    end do

    if (ju == 0) then
        write(6,*) "Yes"
    else
        write(6,*) "No"
    end if

    





    
end program C086
; ModuleID = 'FIRModule'
source_filename = "FIRModule"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

@_QFEt.0 = internal unnamed_addr global ptr null
@_QFEx.0 = internal unnamed_addr global ptr null
@_QFEy.0 = internal unnamed_addr global ptr null
@_QQcl.62de44af9404be14d9e871c40e93491f = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_6406/source.f\00"
@_QQcl.596573 = linkonce constant [3 x i8] c"Yes"
@_QQcl.4E6F = linkonce constant [2 x i8] c"No"
@_QQEnvironmentDefaults = local_unnamed_addr constant ptr null

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #0

define void @_QQmain() local_unnamed_addr {
  %1 = alloca i64, align 8
  %2 = tail call ptr @_FortranAioBeginExternalListInput(i32 5, ptr nonnull @_QQcl.62de44af9404be14d9e871c40e93491f, i32 7)
  %3 = call i1 @_FortranAioInputInteger(ptr %2, ptr nonnull %1, i32 8)
  %4 = call i32 @_FortranAioEndIoStatement(ptr %2)
  %5 = load i64, ptr %1, align 8, !tbaa !3
  %6 = call i64 @llvm.smax.i64(i64 %5, i64 0)
  %7 = shl i64 %6, 3
  %8 = call ptr @malloc(i64 %7)
  store ptr %8, ptr @_QFEt.0, align 8, !tbaa !7
  %9 = call ptr @malloc(i64 %7)
  store ptr %9, ptr @_QFEx.0, align 8, !tbaa !7
  %10 = call ptr @malloc(i64 %7)
  store ptr %10, ptr @_QFEy.0, align 8, !tbaa !7
  %11 = icmp sgt i64 %5, 0
  br i1 %11, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %0, %.lr.ph
  %12 = phi i64 [ %24, %.lr.ph ], [ 1, %0 ]
  %13 = call ptr @_FortranAioBeginExternalListInput(i32 5, ptr nonnull @_QQcl.62de44af9404be14d9e871c40e93491f, i32 12)
  %.unpack412 = load ptr, ptr @_QFEt.0, align 8, !tbaa !7
  %14 = add i64 %12, -1
  %15 = getelementptr i64, ptr %.unpack412, i64 %14
  %16 = call i1 @_FortranAioInputInteger(ptr %13, ptr %15, i32 8)
  %.unpack424 = load ptr, ptr @_QFEx.0, align 8, !tbaa !7
  %17 = add i64 %12, -1
  %18 = getelementptr i64, ptr %.unpack424, i64 %17
  %19 = call i1 @_FortranAioInputInteger(ptr %13, ptr %18, i32 8)
  %.unpack436 = load ptr, ptr @_QFEy.0, align 8, !tbaa !7
  %20 = add i64 %12, -1
  %21 = getelementptr i64, ptr %.unpack436, i64 %20
  %22 = call i1 @_FortranAioInputInteger(ptr %13, ptr %21, i32 8)
  %23 = call i32 @_FortranAioEndIoStatement(ptr %13)
  %24 = add nuw i64 %12, 1
  %exitcond.not = icmp eq i64 %12, %5
  br i1 %exitcond.not, label %._crit_edge.loopexit, label %.lr.ph

._crit_edge.loopexit:                             ; preds = %.lr.ph
  %.unpack.pre = load ptr, ptr @_QFEx.0, align 8, !tbaa !7
  %.unpack349.pre = load ptr, ptr @_QFEy.0, align 8, !tbaa !7
  %.unpack361.pre = load ptr, ptr @_QFEt.0, align 8, !tbaa !7
  %.pre = load i64, ptr %1, align 8, !tbaa !3
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %0
  %25 = phi i64 [ %.pre, %._crit_edge.loopexit ], [ %5, %0 ]
  %.unpack361 = phi ptr [ %.unpack361.pre, %._crit_edge.loopexit ], [ %8, %0 ]
  %.unpack349 = phi ptr [ %.unpack349.pre, %._crit_edge.loopexit ], [ %10, %0 ]
  %.unpack = phi ptr [ %.unpack.pre, %._crit_edge.loopexit ], [ %9, %0 ]
  %26 = load i64, ptr %.unpack, align 8, !tbaa !3
  %27 = load i64, ptr %.unpack349, align 8, !tbaa !3
  %28 = add i64 %27, %26
  %29 = load i64, ptr %.unpack361, align 8, !tbaa !3
  %.not = icmp slt i64 %29, %28
  %30 = sub i64 %29, %28
  %31 = and i64 %30, 1
  %.0 = select i1 %.not, i64 1, i64 %31
  %32 = add i64 %25, -1
  %33 = icmp sgt i64 %32, 0
  br i1 %33, label %.lr.ph451.preheader, label %._crit_edge452

.lr.ph451.preheader:                              ; preds = %._crit_edge
  %min.iters.check = icmp ult i64 %32, 4
  br i1 %min.iters.check, label %.lr.ph451.preheader472, label %vector.ph

vector.ph:                                        ; preds = %.lr.ph451.preheader
  %n.vec = and i64 %32, -4
  %ind.end = or i64 %n.vec, 2
  %34 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %.0, i64 0
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <2 x i64> [ %34, %vector.ph ], [ %70, %vector.body ]
  %vec.phi460 = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %71, %vector.body ]
  %35 = or i64 %index, 1
  %36 = getelementptr i64, ptr %.unpack, i64 %35
  %wide.load = load <2 x i64>, ptr %36, align 8, !tbaa !3
  %37 = getelementptr i64, ptr %36, i64 2
  %wide.load461 = load <2 x i64>, ptr %37, align 8, !tbaa !3
  %38 = getelementptr i64, ptr %.unpack, i64 %index
  %wide.load462 = load <2 x i64>, ptr %38, align 8, !tbaa !3
  %39 = getelementptr i64, ptr %38, i64 2
  %wide.load463 = load <2 x i64>, ptr %39, align 8, !tbaa !3
  %40 = sub <2 x i64> %wide.load, %wide.load462
  %41 = sub <2 x i64> %wide.load461, %wide.load463
  %42 = call <2 x i64> @llvm.abs.v2i64(<2 x i64> %40, i1 false)
  %43 = call <2 x i64> @llvm.abs.v2i64(<2 x i64> %41, i1 false)
  %44 = or i64 %index, 1
  %45 = getelementptr i64, ptr %.unpack349, i64 %44
  %wide.load464 = load <2 x i64>, ptr %45, align 8, !tbaa !3
  %46 = getelementptr i64, ptr %45, i64 2
  %wide.load465 = load <2 x i64>, ptr %46, align 8, !tbaa !3
  %47 = getelementptr i64, ptr %.unpack349, i64 %index
  %wide.load466 = load <2 x i64>, ptr %47, align 8, !tbaa !3
  %48 = getelementptr i64, ptr %47, i64 2
  %wide.load467 = load <2 x i64>, ptr %48, align 8, !tbaa !3
  %49 = sub <2 x i64> %wide.load464, %wide.load466
  %50 = sub <2 x i64> %wide.load465, %wide.load467
  %51 = call <2 x i64> @llvm.abs.v2i64(<2 x i64> %49, i1 false)
  %52 = call <2 x i64> @llvm.abs.v2i64(<2 x i64> %50, i1 false)
  %53 = add <2 x i64> %51, %42
  %54 = add <2 x i64> %52, %43
  %55 = or i64 %index, 1
  %56 = getelementptr i64, ptr %.unpack361, i64 %55
  %wide.load468 = load <2 x i64>, ptr %56, align 8, !tbaa !3
  %57 = getelementptr i64, ptr %56, i64 2
  %wide.load469 = load <2 x i64>, ptr %57, align 8, !tbaa !3
  %58 = getelementptr i64, ptr %.unpack361, i64 %index
  %wide.load470 = load <2 x i64>, ptr %58, align 8, !tbaa !3
  %59 = getelementptr i64, ptr %58, i64 2
  %wide.load471 = load <2 x i64>, ptr %59, align 8, !tbaa !3
  %60 = sub <2 x i64> %wide.load468, %wide.load470
  %61 = sub <2 x i64> %wide.load469, %wide.load471
  %62 = icmp slt <2 x i64> %60, %53
  %63 = icmp slt <2 x i64> %61, %54
  %64 = sub <2 x i64> %60, %53
  %65 = sub <2 x i64> %61, %54
  %66 = and <2 x i64> %64, <i64 1, i64 1>
  %67 = and <2 x i64> %65, <i64 1, i64 1>
  %68 = select <2 x i1> %62, <2 x i64> <i64 1, i64 1>, <2 x i64> %66
  %69 = select <2 x i1> %63, <2 x i64> <i64 1, i64 1>, <2 x i64> %67
  %70 = add <2 x i64> %vec.phi, %68
  %71 = add <2 x i64> %vec.phi460, %69
  %index.next = add nuw i64 %index, 4
  %72 = icmp eq i64 %index.next, %n.vec
  br i1 %72, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <2 x i64> %71, %70
  %73 = call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  %cmp.n = icmp eq i64 %32, %n.vec
  br i1 %cmp.n, label %._crit_edge452, label %.lr.ph451.preheader472

.lr.ph451.preheader472:                           ; preds = %.lr.ph451.preheader, %middle.block
  %.ph = phi i64 [ 2, %.lr.ph451.preheader ], [ %ind.end, %middle.block ]
  %.1449.ph = phi i64 [ %.0, %.lr.ph451.preheader ], [ %73, %middle.block ]
  br label %.lr.ph451

.lr.ph451:                                        ; preds = %.lr.ph451.preheader472, %.lr.ph451
  %74 = phi i64 [ %101, %.lr.ph451 ], [ %.ph, %.lr.ph451.preheader472 ]
  %.1449 = phi i64 [ %.2, %.lr.ph451 ], [ %.1449.ph, %.lr.ph451.preheader472 ]
  %75 = add i64 %74, -1
  %76 = getelementptr i64, ptr %.unpack, i64 %75
  %77 = load i64, ptr %76, align 8, !tbaa !3
  %78 = add i64 %74, -2
  %79 = getelementptr i64, ptr %.unpack, i64 %78
  %80 = load i64, ptr %79, align 8, !tbaa !3
  %81 = sub i64 %77, %80
  %82 = call i64 @llvm.abs.i64(i64 %81, i1 false)
  %83 = add i64 %74, -1
  %84 = getelementptr i64, ptr %.unpack349, i64 %83
  %85 = load i64, ptr %84, align 8, !tbaa !3
  %86 = add i64 %74, -2
  %87 = getelementptr i64, ptr %.unpack349, i64 %86
  %88 = load i64, ptr %87, align 8, !tbaa !3
  %89 = sub i64 %85, %88
  %90 = call i64 @llvm.abs.i64(i64 %89, i1 false)
  %91 = add i64 %90, %82
  %92 = add i64 %74, -1
  %93 = getelementptr i64, ptr %.unpack361, i64 %92
  %94 = load i64, ptr %93, align 8, !tbaa !3
  %95 = add i64 %74, -2
  %96 = getelementptr i64, ptr %.unpack361, i64 %95
  %97 = load i64, ptr %96, align 8, !tbaa !3
  %98 = sub i64 %94, %97
  %.not409 = icmp slt i64 %98, %91
  %99 = sub i64 %98, %91
  %100 = and i64 %99, 1
  %.2.v = select i1 %.not409, i64 1, i64 %100
  %.2 = add i64 %.1449, %.2.v
  %101 = add nuw i64 %74, 1
  %exitcond453.not = icmp eq i64 %74, %25
  br i1 %exitcond453.not, label %._crit_edge452, label %.lr.ph451, !llvm.loop !12

._crit_edge452:                                   ; preds = %.lr.ph451, %middle.block, %._crit_edge
  %.1.lcssa = phi i64 [ %.0, %._crit_edge ], [ %73, %middle.block ], [ %.2, %.lr.ph451 ]
  %102 = icmp eq i64 %.1.lcssa, 0
  br i1 %102, label %103, label %106

103:                                              ; preds = %._crit_edge452
  %104 = call ptr @_FortranAioBeginExternalListOutput(i32 6, ptr nonnull @_QQcl.62de44af9404be14d9e871c40e93491f, i32 40)
  %105 = call i1 @_FortranAioOutputAscii(ptr %104, ptr nonnull @_QQcl.596573, i64 3)
  br label %109

106:                                              ; preds = %._crit_edge452
  %107 = call ptr @_FortranAioBeginExternalListOutput(i32 6, ptr nonnull @_QQcl.62de44af9404be14d9e871c40e93491f, i32 42)
  %108 = call i1 @_FortranAioOutputAscii(ptr %107, ptr nonnull @_QQcl.4E6F, i64 2)
  br label %109

109:                                              ; preds = %103, %106
  %.sink = phi ptr [ %104, %103 ], [ %107, %106 ]
  %110 = call i32 @_FortranAioEndIoStatement(ptr %.sink)
  ret void
}

declare ptr @_FortranAioBeginExternalListInput(i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioInputInteger(ptr, ptr, i32) local_unnamed_addr

declare i32 @_FortranAioEndIoStatement(ptr) local_unnamed_addr

declare ptr @_FortranAioBeginExternalListOutput(i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputAscii(ptr, ptr, i64) local_unnamed_addr

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.abs.i64(i64, i1 immarg) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <2 x i64> @llvm.abs.v2i64(<2 x i64>, i1 immarg) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i64 @llvm.vector.reduce.add.v2i64(<2 x i64>) #2

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(none) }

!llvm.module.flags = !{!0, !1, !2}

!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{!4, !4, i64 0}
!4 = !{!"any data access", !5, i64 0}
!5 = !{!"any access", !6, i64 0}
!6 = !{!"Flang Type TBAA Root"}
!7 = !{!8, !8, i64 0}
!8 = !{!"descriptor member", !5, i64 0}
!9 = distinct !{!9, !10, !11}
!10 = !{!"llvm.loop.isvectorized", i32 1}
!11 = !{!"llvm.loop.unroll.runtime.disable"}
!12 = distinct !{!12, !11, !10}
