program golf
  implicit none
  integer :: k, x, y, s, m, i, sx = 1, sy = 1, ix = 1, iy = 2
  integer :: v(1000000,2) = 0, r, d
  read(*,*) k
  read(*,*) x, y
  if (x < 0) then
    x = -x
    sx = -1
  end if
  if (y < 0) then
    y = -y
    sy = -1
  end if
  s = x+y
  if (mod(s,2) == 1 .and. mod(k,2) == 0) then
    write(*,'(i0)') -1
    stop
  end if
  if (s == k) then
    write(*,'(i0)') 1
    write(*,'(i0,x,i0)') sx*x, sy*y
    stop
  end if
  if (x < y) then
    m = x
    x = y
    y = m
    ix = 2
    iy = 1
  end if
  m = (s+k-1)/k
  if (m < 2) m = 2
  if (mod(s,2) /= mod(m*k,2)) m = m+1
  if (m == 3 .and. x < k) then
    v(1,:) = (/ x, -(k-x) /)
    v(2,:) = (/ x+(k+x-y)/2, -(k-x)+(k-x+y)/2 /)
    v(3,:) = (/ x, y /)
  else
    r = (m*k-s)/2
    do i = 1, m
      d = i*k
      if (d <= y+r) then
        v(i,:) = (/ 0, d /)
      else if (d <= y+r+x) then
        v(i,:) = (/ d-y-r, y+r /)
      else
        v(i,:) = (/ x, y+(m-i)*k /)
      end if
    end do
  end if
  write(*,'(i0)') m
  do i = 1, m
    write(*,'(i0,x,i0)') sx*v(i,ix), sy*v(i,iy)
  end do
  stop
end program golf
; 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"

@_QFEix = internal unnamed_addr global i1 false
@_QFEiy = internal unnamed_addr global i1 false
@_QFEsx = internal unnamed_addr global i1 false
@_QFEsy = internal unnamed_addr global i1 false
@_QFEv = internal unnamed_addr global [2 x [1000000 x i32]] zeroinitializer
@_QQcl.04088f1cf4bd9875a847ae738bf7d911 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_3673/source.f\00"
@_QQcl.28693029 = linkonce constant [4 x i8] c"(i0)"
@_QQcl.2869302C782C693029 = linkonce constant [9 x i8] c"(i0,x,i0)"
@_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

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #1

; Function Attrs: noreturn
define void @_QQmain() local_unnamed_addr #2 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.04088f1cf4bd9875a847ae738bf7d911, i32 5)
  %5 = call i1 @_FortranAioInputInteger(ptr %4, ptr nonnull %1, i32 4)
  %6 = call i32 @_FortranAioEndIoStatement(ptr %4)
  %7 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.04088f1cf4bd9875a847ae738bf7d911, i32 6)
  %8 = call i1 @_FortranAioInputInteger(ptr %7, ptr nonnull %2, i32 4)
  %9 = call i1 @_FortranAioInputInteger(ptr %7, ptr nonnull %3, i32 4)
  %10 = call i32 @_FortranAioEndIoStatement(ptr %7)
  %11 = load i32, ptr %2, align 4, !tbaa !3
  %12 = icmp slt i32 %11, 0
  br i1 %12, label %13, label %15

13:                                               ; preds = %0
  %14 = sub i32 0, %11
  store i32 %14, ptr %2, align 4, !tbaa !3
  store i1 true, ptr @_QFEsx, align 1
  br label %15

15:                                               ; preds = %13, %0
  %16 = phi i32 [ %14, %13 ], [ %11, %0 ]
  %17 = load i32, ptr %3, align 4, !tbaa !3
  %18 = icmp slt i32 %17, 0
  br i1 %18, label %19, label %21

19:                                               ; preds = %15
  %20 = sub i32 0, %17
  store i32 %20, ptr %3, align 4, !tbaa !3
  store i1 true, ptr @_QFEsy, align 1
  br label %21

21:                                               ; preds = %19, %15
  %22 = phi i32 [ %20, %19 ], [ %17, %15 ]
  %23 = add i32 %22, %16
  %24 = srem i32 %23, 2
  %25 = icmp eq i32 %24, 1
  %26 = load i32, ptr %1, align 4, !tbaa !3
  %27 = and i32 %26, 1
  %28 = icmp eq i32 %27, 0
  %29 = and i1 %25, %28
  br i1 %29, label %30, label %35

30:                                               ; preds = %21
  %31 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.04088f1cf4bd9875a847ae738bf7d911, i32 17)
  %32 = call i1 @_FortranAioOutputInteger32(ptr %31, i32 -1)
  %33 = call i32 @_FortranAioEndIoStatement(ptr %31)
  %34 = call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable

35:                                               ; preds = %21
  %36 = icmp eq i32 %23, %26
  br i1 %36, label %37, label %52

37:                                               ; preds = %35
  %38 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.04088f1cf4bd9875a847ae738bf7d911, i32 21)
  %39 = call i1 @_FortranAioOutputInteger32(ptr %38, i32 1)
  %40 = call i32 @_FortranAioEndIoStatement(ptr %38)
  %41 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.2869302C782C693029, i64 9, ptr null, i32 -1, ptr nonnull @_QQcl.04088f1cf4bd9875a847ae738bf7d911, i32 22)
  %.b83 = load i1, ptr @_QFEsx, align 1
  %42 = load i32, ptr %2, align 4, !tbaa !3
  %43 = sub i32 0, %42
  %44 = select i1 %.b83, i32 %43, i32 %42
  %45 = call i1 @_FortranAioOutputInteger32(ptr %41, i32 %44)
  %.b85 = load i1, ptr @_QFEsy, align 1
  %46 = load i32, ptr %3, align 4, !tbaa !3
  %47 = sub i32 0, %46
  %48 = select i1 %.b85, i32 %47, i32 %46
  %49 = call i1 @_FortranAioOutputInteger32(ptr %41, i32 %48)
  %50 = call i32 @_FortranAioEndIoStatement(ptr %41)
  %51 = call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable

52:                                               ; preds = %35
  %53 = icmp slt i32 %16, %22
  br i1 %53, label %54, label %55

54:                                               ; preds = %52
  store i32 %22, ptr %2, align 4, !tbaa !3
  store i32 %16, ptr %3, align 4, !tbaa !3
  store i1 true, ptr @_QFEix, align 1
  store i1 true, ptr @_QFEiy, align 1
  br label %55

55:                                               ; preds = %54, %52
  %56 = phi i32 [ %16, %54 ], [ %22, %52 ]
  %57 = phi i32 [ %22, %54 ], [ %16, %52 ]
  %58 = add i32 %26, -1
  %59 = add i32 %58, %23
  %60 = sdiv i32 %59, %26
  %spec.store.select = call i32 @llvm.smax.i32(i32 %60, i32 2)
  %61 = mul i32 %spec.store.select, %26
  %62 = srem i32 %61, 2
  %.not = icmp ne i32 %24, %62
  %63 = zext i1 %.not to i32
  %spec.select = add nuw i32 %spec.store.select, %63
  %64 = icmp eq i32 %spec.select, 3
  %65 = icmp slt i32 %57, %26
  %66 = and i1 %65, %64
  br i1 %66, label %67, label %85

67:                                               ; preds = %55
  %68 = call dereferenceable_or_null(8) ptr @malloc(i64 8)
  store i32 %57, ptr %68, align 4, !tbaa !3
  %.neg = sub i32 %57, %26
  %69 = call dereferenceable_or_null(16) ptr @realloc(ptr nonnull %68, i64 16)
  %70 = load i32, ptr %69, align 4, !tbaa !3
  store i32 %70, ptr @_QFEv, align 16, !tbaa !3
  store i32 %.neg, ptr getelementptr inbounds ([2 x [1000000 x i32]], ptr @_QFEv, i64 0, i64 1, i64 0), align 16, !tbaa !3
  call void @free(ptr nonnull %69)
  %71 = call dereferenceable_or_null(8) ptr @malloc(i64 8)
  %72 = add i32 %57, %26
  %73 = sub i32 %72, %56
  %74 = sdiv i32 %73, 2
  %75 = add i32 %74, %57
  store i32 %75, ptr %71, align 4, !tbaa !3
  %76 = sub i32 %26, %57
  %77 = add i32 %56, %76
  %78 = sdiv i32 %77, 2
  %79 = sub i32 %78, %76
  %80 = call dereferenceable_or_null(16) ptr @realloc(ptr nonnull %71, i64 16)
  %81 = load i32, ptr %80, align 4, !tbaa !3
  store i32 %81, ptr getelementptr inbounds ([2 x [1000000 x i32]], ptr @_QFEv, i64 0, i64 0, i64 1), align 4, !tbaa !3
  store i32 %79, ptr getelementptr inbounds ([2 x [1000000 x i32]], ptr @_QFEv, i64 0, i64 1, i64 1), align 4, !tbaa !3
  call void @free(ptr nonnull %80)
  %82 = call dereferenceable_or_null(8) ptr @malloc(i64 8)
  store i32 %57, ptr %82, align 4, !tbaa !3
  %83 = call dereferenceable_or_null(16) ptr @realloc(ptr nonnull %82, i64 16)
  %84 = load i32, ptr %83, align 4, !tbaa !3
  store i32 %84, ptr getelementptr inbounds ([2 x [1000000 x i32]], ptr @_QFEv, i64 0, i64 0, i64 2), align 8, !tbaa !3
  store i32 %56, ptr getelementptr inbounds ([2 x [1000000 x i32]], ptr @_QFEv, i64 0, i64 1, i64 2), align 8, !tbaa !3
  call void @free(ptr nonnull %83)
  br label %.loopexit

85:                                               ; preds = %55
  %86 = icmp sgt i32 %spec.select, 0
  br i1 %86, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %85
  %87 = zext i32 %spec.select to i64
  %88 = mul i32 %spec.select, %26
  %89 = sub i32 %88, %23
  %90 = sdiv i32 %89, 2
  %91 = add i32 %56, %90
  %92 = add i32 %91, %57
  br label %93

93:                                               ; preds = %.lr.ph, %106
  %indvars.iv = phi i64 [ 1, %.lr.ph ], [ %indvars.iv.next, %106 ]
  %94 = trunc i64 %indvars.iv to i32
  %95 = mul i32 %26, %94
  %.not87 = icmp sgt i32 %95, %91
  br i1 %.not87, label %98, label %96

96:                                               ; preds = %93
  %97 = call dereferenceable_or_null(8) ptr @malloc(i64 8)
  store i32 0, ptr %97, align 4, !tbaa !3
  br label %106

98:                                               ; preds = %93
  %.not88 = icmp sgt i32 %95, %92
  %99 = call dereferenceable_or_null(8) ptr @malloc(i64 8)
  br i1 %.not88, label %102, label %100

100:                                              ; preds = %98
  %101 = sub i32 %95, %91
  store i32 %101, ptr %99, align 4, !tbaa !3
  br label %106

102:                                              ; preds = %98
  store i32 %57, ptr %99, align 4, !tbaa !3
  %103 = sub i32 %spec.select, %94
  %104 = mul i32 %103, %26
  %105 = add i32 %56, %104
  br label %106

106:                                              ; preds = %96, %100, %102
  %.sink = phi ptr [ %97, %96 ], [ %99, %100 ], [ %99, %102 ]
  %.sink99 = phi i32 [ %95, %96 ], [ %91, %100 ], [ %105, %102 ]
  %107 = call dereferenceable_or_null(16) ptr @realloc(ptr nonnull %.sink, i64 16)
  %108 = add nsw i64 %indvars.iv, -1
  %109 = load i32, ptr %107, align 4, !tbaa !3
  %110 = getelementptr i32, ptr @_QFEv, i64 %108
  store i32 %109, ptr %110, align 4, !tbaa !3
  %111 = add nuw nsw i64 %indvars.iv, 999999
  %112 = getelementptr i32, ptr @_QFEv, i64 %111
  store i32 %.sink99, ptr %112, align 4, !tbaa !3
  call void @free(ptr nonnull %107)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %87
  br i1 %exitcond.not, label %.loopexit, label %93

.loopexit:                                        ; preds = %106, %85, %67
  %113 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.04088f1cf4bd9875a847ae738bf7d911, i32 52)
  %114 = call i1 @_FortranAioOutputInteger32(ptr %113, i32 %spec.select)
  %115 = call i32 @_FortranAioEndIoStatement(ptr %113)
  %116 = icmp sgt i32 %spec.select, 0
  br i1 %116, label %.lr.ph90.preheader, label %._crit_edge

.lr.ph90.preheader:                               ; preds = %.loopexit
  %117 = zext i32 %spec.select to i64
  br label %.lr.ph90

.lr.ph90:                                         ; preds = %.lr.ph90.preheader, %.lr.ph90
  %indvars.iv95 = phi i64 [ 1, %.lr.ph90.preheader ], [ %indvars.iv.next96, %.lr.ph90 ]
  %118 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.2869302C782C693029, i64 9, ptr null, i32 -1, ptr nonnull @_QQcl.04088f1cf4bd9875a847ae738bf7d911, i32 54)
  %.b84 = load i1, ptr @_QFEsx, align 1
  %119 = add nsw i64 %indvars.iv95, -1
  %.b = load i1, ptr @_QFEix, align 1
  %120 = zext i1 %.b to i64
  %121 = getelementptr [2 x [1000000 x i32]], ptr @_QFEv, i64 0, i64 %120, i64 %119
  %122 = load i32, ptr %121, align 4, !tbaa !3
  %123 = sub i32 0, %122
  %124 = select i1 %.b84, i32 %123, i32 %122
  %125 = call i1 @_FortranAioOutputInteger32(ptr %118, i32 %124)
  %.b86 = load i1, ptr @_QFEsy, align 1
  %.b82 = load i1, ptr @_QFEiy, align 1
  %not..b82 = xor i1 %.b82, true
  %126 = zext i1 %not..b82 to i64
  %127 = getelementptr [2 x [1000000 x i32]], ptr @_QFEv, i64 0, i64 %126, i64 %119
  %128 = load i32, ptr %127, align 4, !tbaa !3
  %129 = sub i32 0, %128
  %130 = select i1 %.b86, i32 %129, i32 %128
  %131 = call i1 @_FortranAioOutputInteger32(ptr %118, i32 %130)
  %132 = call i32 @_FortranAioEndIoStatement(ptr %118)
  %indvars.iv.next96 = add nuw nsw i64 %indvars.iv95, 1
  %exitcond98.not = icmp eq i64 %indvars.iv95, %117
  br i1 %exitcond98.not, label %._crit_edge, label %.lr.ph90

._crit_edge:                                      ; preds = %.lr.ph90, %.loopexit
  %133 = call {} @_FortranAStopStatement(i32 0, i1 false, i1 false)
  unreachable
}

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 @_FortranAioBeginExternalFormattedOutput(ptr, i64, ptr, i32, ptr, i32) local_unnamed_addr

declare i1 @_FortranAioOutputInteger32(ptr, i32) local_unnamed_addr

declare {} @_FortranAStopStatement(i32, i1, i1) local_unnamed_addr

; Function Attrs: mustprogress nounwind willreturn allockind("realloc") allocsize(1) memory(argmem: readwrite, inaccessiblemem: readwrite)
declare noalias noundef ptr @realloc(ptr allocptr nocapture, i64 noundef) local_unnamed_addr #3

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

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #1 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #2 = { noreturn }
attributes #3 = { mustprogress nounwind willreturn allockind("realloc") allocsize(1) memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" }
attributes #4 = { nocallback nofree nosync nounwind speculatable 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"}
