program c

integer :: n,six(100000),nine(100000),six_nine,i,j
read(*,*) n

do i = 1,n
	six(i) = 0
	do j = 0,6
		six(i) = six(i) + mod(i / (6 ** j),6)
	enddo
enddo

do i = 1,n
	nine(i) = 0
	do j = 0,5
		nine(i) = nine(i) + mod(i / (9 ** j),9)
	enddo
enddo

six_nine = min(six(n),nine(n))

do i= 1,n-1
	six_nine = min(six_nine,six(i)+nine(n-i))
enddo

write(*,*) six_nine

end program
; 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"

@_QFEnine = internal unnamed_addr global [100000 x i32] undef
@_QFEsix = internal unnamed_addr global [100000 x i32] undef
@_QQcl.8e92cc91e97dda8319f910d67d48c076 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_5910/source.f\00"
@_QQEnvironmentDefaults = local_unnamed_addr constant ptr null

define void @_QQmain() local_unnamed_addr {
  %1 = alloca i32, align 4
  %2 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.8e92cc91e97dda8319f910d67d48c076, i32 4)
  %3 = call i1 @_FortranAioInputInteger(ptr %2, ptr nonnull %1, i32 4)
  %4 = call i32 @_FortranAioEndIoStatement(ptr %2)
  %5 = load i32, ptr %1, align 4, !tbaa !3
  %6 = sext i32 %5 to i64
  %7 = icmp sgt i32 %5, 0
  br i1 %7, label %__mlir_math_ipowi_i32.exit.6.preheader, label %._crit_edge

__mlir_math_ipowi_i32.exit.6.preheader:           ; preds = %0
  %min.iters.check = icmp ult i32 %5, 4
  br i1 %min.iters.check, label %__mlir_math_ipowi_i32.exit.6.preheader95, label %vector.ph

vector.ph:                                        ; preds = %__mlir_math_ipowi_i32.exit.6.preheader
  %n.vec = and i64 %6, -4
  %ind.end = or i64 %n.vec, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %8 = getelementptr [100000 x i32], ptr @_QFEsix, i64 0, i64 %index
  %9 = srem <4 x i32> %vec.ind, <i32 6, i32 6, i32 6, i32 6>
  %10 = udiv <4 x i32> %vec.ind, <i32 6, i32 6, i32 6, i32 6>
  %11 = urem <4 x i32> %10, <i32 6, i32 6, i32 6, i32 6>
  %12 = add nsw <4 x i32> %11, %9
  %13 = udiv <4 x i32> %vec.ind, <i32 36, i32 36, i32 36, i32 36>
  %14 = urem <4 x i32> %13, <i32 6, i32 6, i32 6, i32 6>
  %15 = add nsw <4 x i32> %14, %12
  %16 = udiv <4 x i32> %vec.ind, <i32 216, i32 216, i32 216, i32 216>
  %17 = urem <4 x i32> %16, <i32 6, i32 6, i32 6, i32 6>
  %18 = add nsw <4 x i32> %17, %15
  %19 = udiv <4 x i32> %vec.ind, <i32 1296, i32 1296, i32 1296, i32 1296>
  %20 = urem <4 x i32> %19, <i32 6, i32 6, i32 6, i32 6>
  %21 = add nsw <4 x i32> %20, %18
  %22 = udiv <4 x i32> %vec.ind, <i32 7776, i32 7776, i32 7776, i32 7776>
  %23 = urem <4 x i32> %22, <i32 6, i32 6, i32 6, i32 6>
  %24 = add nsw <4 x i32> %23, %21
  %25 = udiv <4 x i32> %vec.ind, <i32 46656, i32 46656, i32 46656, i32 46656>
  %26 = urem <4 x i32> %25, <i32 6, i32 6, i32 6, i32 6>
  %27 = add nsw <4 x i32> %26, %24
  store <4 x i32> %27, ptr %8, align 16, !tbaa !3
  %index.next = add nuw i64 %index, 4
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %28 = icmp eq i64 %index.next, %n.vec
  br i1 %28, label %middle.block, label %vector.body, !llvm.loop !7

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %6
  br i1 %cmp.n, label %.preheader, label %__mlir_math_ipowi_i32.exit.6.preheader95

__mlir_math_ipowi_i32.exit.6.preheader95:         ; preds = %__mlir_math_ipowi_i32.exit.6.preheader, %middle.block
  %indvars.iv.ph = phi i64 [ 1, %__mlir_math_ipowi_i32.exit.6.preheader ], [ %ind.end, %middle.block ]
  br label %__mlir_math_ipowi_i32.exit.6

.preheader:                                       ; preds = %__mlir_math_ipowi_i32.exit.6, %middle.block
  br i1 %7, label %__mlir_math_ipowi_i32.exit26.5.preheader, label %._crit_edge

__mlir_math_ipowi_i32.exit26.5.preheader:         ; preds = %.preheader
  %min.iters.check59 = icmp ult i32 %5, 4
  br i1 %min.iters.check59, label %__mlir_math_ipowi_i32.exit26.5.preheader94, label %vector.ph60

vector.ph60:                                      ; preds = %__mlir_math_ipowi_i32.exit26.5.preheader
  %n.vec62 = and i64 %6, -4
  %ind.end63 = or i64 %n.vec62, 1
  br label %vector.body66

vector.body66:                                    ; preds = %vector.body66, %vector.ph60
  %index67 = phi i64 [ 0, %vector.ph60 ], [ %index.next71, %vector.body66 ]
  %vec.ind68 = phi <4 x i32> [ <i32 1, i32 2, i32 3, i32 4>, %vector.ph60 ], [ %vec.ind.next69, %vector.body66 ]
  %29 = getelementptr [100000 x i32], ptr @_QFEnine, i64 0, i64 %index67
  %30 = srem <4 x i32> %vec.ind68, <i32 9, i32 9, i32 9, i32 9>
  %31 = udiv <4 x i32> %vec.ind68, <i32 9, i32 9, i32 9, i32 9>
  %32 = urem <4 x i32> %31, <i32 9, i32 9, i32 9, i32 9>
  %33 = add nsw <4 x i32> %32, %30
  %34 = udiv <4 x i32> %vec.ind68, <i32 81, i32 81, i32 81, i32 81>
  %35 = urem <4 x i32> %34, <i32 9, i32 9, i32 9, i32 9>
  %36 = add nsw <4 x i32> %35, %33
  %37 = udiv <4 x i32> %vec.ind68, <i32 729, i32 729, i32 729, i32 729>
  %38 = urem <4 x i32> %37, <i32 9, i32 9, i32 9, i32 9>
  %39 = add nsw <4 x i32> %38, %36
  %40 = udiv <4 x i32> %vec.ind68, <i32 6561, i32 6561, i32 6561, i32 6561>
  %41 = urem <4 x i32> %40, <i32 9, i32 9, i32 9, i32 9>
  %42 = add nsw <4 x i32> %41, %39
  %43 = udiv <4 x i32> %vec.ind68, <i32 59049, i32 59049, i32 59049, i32 59049>
  %44 = urem <4 x i32> %43, <i32 9, i32 9, i32 9, i32 9>
  %45 = add nsw <4 x i32> %44, %42
  store <4 x i32> %45, ptr %29, align 16, !tbaa !3
  %index.next71 = add nuw i64 %index67, 4
  %vec.ind.next69 = add <4 x i32> %vec.ind68, <i32 4, i32 4, i32 4, i32 4>
  %46 = icmp eq i64 %index.next71, %n.vec62
  br i1 %46, label %middle.block57, label %vector.body66, !llvm.loop !10

middle.block57:                                   ; preds = %vector.body66
  %cmp.n65 = icmp eq i64 %n.vec62, %6
  br i1 %cmp.n65, label %._crit_edge, label %__mlir_math_ipowi_i32.exit26.5.preheader94

__mlir_math_ipowi_i32.exit26.5.preheader94:       ; preds = %__mlir_math_ipowi_i32.exit26.5.preheader, %middle.block57
  %indvars.iv49.ph = phi i64 [ 1, %__mlir_math_ipowi_i32.exit26.5.preheader ], [ %ind.end63, %middle.block57 ]
  br label %__mlir_math_ipowi_i32.exit26.5

__mlir_math_ipowi_i32.exit.6:                     ; preds = %__mlir_math_ipowi_i32.exit.6.preheader95, %__mlir_math_ipowi_i32.exit.6
  %indvars.iv = phi i64 [ %indvars.iv.next, %__mlir_math_ipowi_i32.exit.6 ], [ %indvars.iv.ph, %__mlir_math_ipowi_i32.exit.6.preheader95 ]
  %47 = add nsw i64 %indvars.iv, -1
  %48 = getelementptr [100000 x i32], ptr @_QFEsix, i64 0, i64 %47
  %49 = trunc i64 %indvars.iv to i32
  %50 = srem i32 %49, 6
  %.udiv36 = udiv i32 %49, 6
  %51 = urem i32 %.udiv36, 6
  %52 = add nsw i32 %51, %50
  %.udiv37 = udiv i32 %49, 36
  %53 = urem i32 %.udiv37, 6
  %54 = add nsw i32 %53, %52
  %.udiv38 = udiv i32 %49, 216
  %55 = urem i32 %.udiv38, 6
  %56 = add nsw i32 %55, %54
  %.udiv39 = udiv i32 %49, 1296
  %57 = urem i32 %.udiv39, 6
  %58 = add nsw i32 %57, %56
  %.udiv40 = udiv i32 %49, 7776
  %59 = urem i32 %.udiv40, 6
  %60 = add nsw i32 %59, %58
  %.udiv41 = udiv i32 %49, 46656
  %61 = urem i32 %.udiv41, 6
  %62 = add nsw i32 %61, %60
  store i32 %62, ptr %48, align 4, !tbaa !3
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %6
  br i1 %exitcond.not, label %.preheader, label %__mlir_math_ipowi_i32.exit.6, !llvm.loop !11

__mlir_math_ipowi_i32.exit26.5:                   ; preds = %__mlir_math_ipowi_i32.exit26.5.preheader94, %__mlir_math_ipowi_i32.exit26.5
  %indvars.iv49 = phi i64 [ %indvars.iv.next50, %__mlir_math_ipowi_i32.exit26.5 ], [ %indvars.iv49.ph, %__mlir_math_ipowi_i32.exit26.5.preheader94 ]
  %63 = add nsw i64 %indvars.iv49, -1
  %64 = getelementptr [100000 x i32], ptr @_QFEnine, i64 0, i64 %63
  %65 = trunc i64 %indvars.iv49 to i32
  %66 = srem i32 %65, 9
  %.udiv44 = udiv i32 %65, 9
  %67 = urem i32 %.udiv44, 9
  %68 = add nsw i32 %67, %66
  %.udiv45 = udiv i32 %65, 81
  %69 = urem i32 %.udiv45, 9
  %70 = add nsw i32 %69, %68
  %.udiv46 = udiv i32 %65, 729
  %71 = urem i32 %.udiv46, 9
  %72 = add nsw i32 %71, %70
  %.udiv47 = udiv i32 %65, 6561
  %73 = urem i32 %.udiv47, 9
  %74 = add nsw i32 %73, %72
  %.udiv48 = udiv i32 %65, 59049
  %75 = urem i32 %.udiv48, 9
  %76 = add nsw i32 %75, %74
  store i32 %76, ptr %64, align 4, !tbaa !3
  %indvars.iv.next50 = add nuw nsw i64 %indvars.iv49, 1
  %exitcond52.not = icmp eq i64 %indvars.iv49, %6
  br i1 %exitcond52.not, label %._crit_edge, label %__mlir_math_ipowi_i32.exit26.5, !llvm.loop !12

._crit_edge:                                      ; preds = %__mlir_math_ipowi_i32.exit26.5, %middle.block57, %0, %.preheader
  %77 = add nsw i64 %6, -1
  %78 = getelementptr [100000 x i32], ptr @_QFEsix, i64 0, i64 %77
  %79 = load i32, ptr %78, align 4, !tbaa !3
  %80 = getelementptr [100000 x i32], ptr @_QFEnine, i64 0, i64 %77
  %81 = load i32, ptr %80, align 4, !tbaa !3
  %82 = call i32 @llvm.smin.i32(i32 %79, i32 %81)
  %83 = add i32 %5, -1
  %84 = icmp sgt i32 %83, 0
  br i1 %84, label %.lr.ph32.preheader, label %._crit_edge33

.lr.ph32.preheader:                               ; preds = %._crit_edge
  %85 = zext i32 %83 to i64
  %min.iters.check74 = icmp ult i32 %83, 8
  br i1 %min.iters.check74, label %.lr.ph32.preheader91, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph32.preheader
  %86 = add nsw i64 %85, -1
  %87 = trunc i64 %86 to i32
  %88 = sub i32 %83, %87
  %89 = icmp sgt i32 %88, %83
  %90 = icmp ugt i64 %86, 4294967295
  %91 = or i1 %89, %90
  br i1 %91, label %.lr.ph32.preheader91, label %vector.ph75

vector.ph75:                                      ; preds = %vector.scevcheck
  %n.vec77 = and i64 %85, 4294967288
  %ind.end78 = or i64 %n.vec77, 1
  %minmax.ident.splatinsert = insertelement <4 x i32> poison, i32 %82, i64 0
  %minmax.ident.splat = shufflevector <4 x i32> %minmax.ident.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body81

vector.body81:                                    ; preds = %vector.body81, %vector.ph75
  %index82 = phi i64 [ 0, %vector.ph75 ], [ %index.next90, %vector.body81 ]
  %vec.phi = phi <4 x i32> [ %minmax.ident.splat, %vector.ph75 ], [ %103, %vector.body81 ]
  %vec.phi83 = phi <4 x i32> [ %minmax.ident.splat, %vector.ph75 ], [ %104, %vector.body81 ]
  %92 = trunc i64 %index82 to i32
  %.neg = xor i32 %92, -1
  %93 = getelementptr [100000 x i32], ptr @_QFEsix, i64 0, i64 %index82
  %wide.load = load <4 x i32>, ptr %93, align 16, !tbaa !3
  %94 = getelementptr i32, ptr %93, i64 4
  %wide.load86 = load <4 x i32>, ptr %94, align 16, !tbaa !3
  %95 = add i32 %5, %.neg
  %96 = sext i32 %95 to i64
  %97 = add nsw i64 %96, -1
  %98 = getelementptr [100000 x i32], ptr @_QFEnine, i64 0, i64 %97
  %99 = getelementptr i32, ptr %98, i64 -3
  %wide.load87 = load <4 x i32>, ptr %99, align 4, !tbaa !3
  %reverse = shufflevector <4 x i32> %wide.load87, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %100 = getelementptr i32, ptr %98, i64 -7
  %wide.load88 = load <4 x i32>, ptr %100, align 4, !tbaa !3
  %reverse89 = shufflevector <4 x i32> %wide.load88, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %101 = add <4 x i32> %reverse, %wide.load
  %102 = add <4 x i32> %reverse89, %wide.load86
  %103 = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi, <4 x i32> %101)
  %104 = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %vec.phi83, <4 x i32> %102)
  %index.next90 = add nuw i64 %index82, 8
  %105 = icmp eq i64 %index.next90, %n.vec77
  br i1 %105, label %middle.block72, label %vector.body81, !llvm.loop !13

middle.block72:                                   ; preds = %vector.body81
  %rdx.minmax.select = call <4 x i32> @llvm.smin.v4i32(<4 x i32> %103, <4 x i32> %104)
  %106 = call i32 @llvm.vector.reduce.smin.v4i32(<4 x i32> %rdx.minmax.select)
  %cmp.n80 = icmp eq i64 %n.vec77, %85
  br i1 %cmp.n80, label %._crit_edge33, label %.lr.ph32.preheader91

.lr.ph32.preheader91:                             ; preds = %vector.scevcheck, %.lr.ph32.preheader, %middle.block72
  %indvars.iv53.ph = phi i64 [ 1, %vector.scevcheck ], [ 1, %.lr.ph32.preheader ], [ %ind.end78, %middle.block72 ]
  %.030.ph = phi i32 [ %82, %vector.scevcheck ], [ %82, %.lr.ph32.preheader ], [ %106, %middle.block72 ]
  %xtraiter = and i64 %85, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.lr.ph32.prol.loopexit, label %.lr.ph32.prol

.lr.ph32.prol:                                    ; preds = %.lr.ph32.preheader91
  %107 = add nsw i64 %indvars.iv53.ph, -1
  %108 = getelementptr [100000 x i32], ptr @_QFEsix, i64 0, i64 %107
  %109 = load i32, ptr %108, align 8, !tbaa !3
  %110 = trunc i64 %indvars.iv53.ph to i32
  %111 = sub i32 %5, %110
  %112 = sext i32 %111 to i64
  %113 = add nsw i64 %112, -1
  %114 = getelementptr [100000 x i32], ptr @_QFEnine, i64 0, i64 %113
  %115 = load i32, ptr %114, align 4, !tbaa !3
  %116 = add i32 %115, %109
  %117 = call i32 @llvm.smin.i32(i32 %.030.ph, i32 %116)
  %indvars.iv.next54.prol = add nuw nsw i64 %indvars.iv53.ph, 1
  br label %.lr.ph32.prol.loopexit

.lr.ph32.prol.loopexit:                           ; preds = %.lr.ph32.prol, %.lr.ph32.preheader91
  %.lcssa.unr = phi i32 [ undef, %.lr.ph32.preheader91 ], [ %117, %.lr.ph32.prol ]
  %indvars.iv53.unr = phi i64 [ %indvars.iv53.ph, %.lr.ph32.preheader91 ], [ %indvars.iv.next54.prol, %.lr.ph32.prol ]
  %.030.unr = phi i32 [ %.030.ph, %.lr.ph32.preheader91 ], [ %117, %.lr.ph32.prol ]
  %118 = icmp eq i64 %indvars.iv53.ph, %85
  br i1 %118, label %._crit_edge33, label %.lr.ph32

.lr.ph32:                                         ; preds = %.lr.ph32.prol.loopexit, %.lr.ph32
  %indvars.iv53 = phi i64 [ %indvars.iv.next54.1, %.lr.ph32 ], [ %indvars.iv53.unr, %.lr.ph32.prol.loopexit ]
  %.030 = phi i32 [ %139, %.lr.ph32 ], [ %.030.unr, %.lr.ph32.prol.loopexit ]
  %119 = add nsw i64 %indvars.iv53, -1
  %120 = getelementptr [100000 x i32], ptr @_QFEsix, i64 0, i64 %119
  %121 = load i32, ptr %120, align 4, !tbaa !3
  %122 = trunc i64 %indvars.iv53 to i32
  %123 = sub i32 %5, %122
  %124 = sext i32 %123 to i64
  %125 = add nsw i64 %124, -1
  %126 = getelementptr [100000 x i32], ptr @_QFEnine, i64 0, i64 %125
  %127 = load i32, ptr %126, align 4, !tbaa !3
  %128 = add i32 %127, %121
  %129 = call i32 @llvm.smin.i32(i32 %.030, i32 %128)
  %indvars.iv.next54 = add nuw nsw i64 %indvars.iv53, 1
  %130 = getelementptr [100000 x i32], ptr @_QFEsix, i64 0, i64 %indvars.iv53
  %131 = load i32, ptr %130, align 4, !tbaa !3
  %132 = trunc i64 %indvars.iv.next54 to i32
  %133 = sub i32 %5, %132
  %134 = sext i32 %133 to i64
  %135 = add nsw i64 %134, -1
  %136 = getelementptr [100000 x i32], ptr @_QFEnine, i64 0, i64 %135
  %137 = load i32, ptr %136, align 4, !tbaa !3
  %138 = add i32 %137, %131
  %139 = call i32 @llvm.smin.i32(i32 %129, i32 %138)
  %indvars.iv.next54.1 = add nuw nsw i64 %indvars.iv53, 2
  %exitcond56.not.1 = icmp eq i64 %indvars.iv.next54, %85
  br i1 %exitcond56.not.1, label %._crit_edge33, label %.lr.ph32, !llvm.loop !14

._crit_edge33:                                    ; preds = %.lr.ph32.prol.loopexit, %.lr.ph32, %middle.block72, %._crit_edge
  %.0.lcssa = phi i32 [ %82, %._crit_edge ], [ %106, %middle.block72 ], [ %.lcssa.unr, %.lr.ph32.prol.loopexit ], [ %139, %.lr.ph32 ]
  %140 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.8e92cc91e97dda8319f910d67d48c076, i32 26)
  %141 = call i1 @_FortranAioOutputInteger32(ptr %140, i32 %.0.lcssa)
  %142 = call i32 @_FortranAioEndIoStatement(ptr %140)
  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 @_FortranAioOutputInteger32(ptr, i32) local_unnamed_addr

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare <4 x i32> @llvm.smin.v4i32(<4 x i32>, <4 x i32>) #0

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare i32 @llvm.vector.reduce.smin.v4i32(<4 x i32>) #1

attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { 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 = distinct !{!7, !8, !9}
!8 = !{!"llvm.loop.isvectorized", i32 1}
!9 = !{!"llvm.loop.unroll.runtime.disable"}
!10 = distinct !{!10, !8, !9}
!11 = distinct !{!11, !9, !8}
!12 = distinct !{!12, !9, !8}
!13 = distinct !{!13, !8, !9}
!14 = distinct !{!14, !8}
