integer N
integer,allocatable,dimension(:)::A
integer premax,maxnum,cnt
read*,N
allocate(A(N))
do i=1,N
  read*,A(i)
end do
premax=0
maxnum=A(1)
cnt=1
do i=2,N
  if(A(i)>maxnum)then
    premax=maxnum
    maxnum=A(i)
    cnt=1
  else if(A(i)==maxnum)then
    cnt=2
  else if(A(i)>=premax)then
    premax=A(i)
  endif
end do
do i=1,N
  if(A(i)/=maxnum.or.cnt==2)then
    print"(i0)",maxnum
  else
    print"(i0)",premax
  endif
end do
end

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

@_QFEa.0 = internal unnamed_addr global ptr null
@_QQcl.3bc639853dbe6436eb639ac7d27a1359 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_3723/source.f\00"
@_QQcl.28693029 = linkonce constant [4 x i8] c"(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

define void @_QQmain() local_unnamed_addr {
  %1 = alloca i32, align 4
  %2 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.3bc639853dbe6436eb639ac7d27a1359, 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 = call i32 @llvm.smax.i32(i32 %5, i32 0)
  %7 = zext i32 %6 to i64
  %8 = shl nuw nsw i64 %7, 2
  %9 = call ptr @malloc(i64 %8)
  store ptr %9, ptr @_QFEa.0, align 8, !tbaa !7
  %10 = sext i32 %5 to i64
  %11 = icmp sgt i32 %5, 0
  br i1 %11, label %.lr.ph, label %._crit_edge258

.lr.ph:                                           ; preds = %0, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 1, %0 ]
  %12 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.3bc639853dbe6436eb639ac7d27a1359, i32 7)
  %.unpack238 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %13 = add nsw i64 %indvars.iv, -1
  %14 = getelementptr i32, ptr %.unpack238, i64 %13
  %15 = call i1 @_FortranAioInputInteger(ptr %12, ptr %14, i32 4)
  %16 = call i32 @_FortranAioEndIoStatement(ptr %12)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %10
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph
  %.unpack.pre = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %.pre = load i32, ptr %1, align 4, !tbaa !3
  %.pre271 = sext i32 %.pre to i64
  %17 = load i32, ptr %.unpack.pre, align 4, !tbaa !3
  %18 = icmp sgt i32 %.pre, 1
  br i1 %18, label %.lr.ph254.preheader, label %.preheader

.lr.ph254.preheader:                              ; preds = %._crit_edge
  %19 = add nsw i64 %.pre271, -1
  %xtraiter = and i64 %19, 1
  %20 = icmp eq i32 %.pre, 2
  br i1 %20, label %.preheader.loopexit.unr-lcssa, label %.lr.ph254.preheader.new

.lr.ph254.preheader.new:                          ; preds = %.lr.ph254.preheader
  %unroll_iter = and i64 %19, -2
  br label %.lr.ph254

.preheader.loopexit.unr-lcssa.loopexit:           ; preds = %49
  %21 = or i64 %indvars.iv261, 1
  br label %.preheader.loopexit.unr-lcssa

.preheader.loopexit.unr-lcssa:                    ; preds = %.preheader.loopexit.unr-lcssa.loopexit, %.lr.ph254.preheader
  %.1188.lcssa.ph = phi i32 [ undef, %.lr.ph254.preheader ], [ %.1188.1, %.preheader.loopexit.unr-lcssa.loopexit ]
  %.1186.lcssa.ph = phi i32 [ undef, %.lr.ph254.preheader ], [ %.1186.1, %.preheader.loopexit.unr-lcssa.loopexit ]
  %.1.lcssa.ph = phi i32 [ undef, %.lr.ph254.preheader ], [ %.1.1, %.preheader.loopexit.unr-lcssa.loopexit ]
  %indvars.iv261.unr = phi i64 [ 1, %.lr.ph254.preheader ], [ %21, %.preheader.loopexit.unr-lcssa.loopexit ]
  %.0252.unr = phi i32 [ 0, %.lr.ph254.preheader ], [ %.1.1, %.preheader.loopexit.unr-lcssa.loopexit ]
  %.0185251.unr = phi i32 [ %17, %.lr.ph254.preheader ], [ %.1186.1, %.preheader.loopexit.unr-lcssa.loopexit ]
  %.0187250.unr = phi i32 [ 1, %.lr.ph254.preheader ], [ %.1188.1, %.preheader.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader, label %.lr.ph254.epil

.lr.ph254.epil:                                   ; preds = %.preheader.loopexit.unr-lcssa
  %22 = getelementptr i32, ptr %.unpack.pre, i64 %indvars.iv261.unr
  %23 = load i32, ptr %22, align 4, !tbaa !3
  %24 = icmp sgt i32 %23, %.0185251.unr
  br i1 %24, label %.preheader, label %25

25:                                               ; preds = %.lr.ph254.epil
  %26 = icmp eq i32 %23, %.0185251.unr
  br i1 %26, label %.preheader, label %27

27:                                               ; preds = %25
  %spec.select.epil = call i32 @llvm.smax.i32(i32 %23, i32 %.0252.unr)
  br label %.preheader

.preheader:                                       ; preds = %.preheader.loopexit.unr-lcssa, %27, %25, %.lr.ph254.epil, %._crit_edge
  %.0187.lcssa = phi i32 [ 1, %._crit_edge ], [ %.1188.lcssa.ph, %.preheader.loopexit.unr-lcssa ], [ 1, %.lr.ph254.epil ], [ 2, %25 ], [ %.0187250.unr, %27 ]
  %.0185.lcssa = phi i32 [ %17, %._crit_edge ], [ %.1186.lcssa.ph, %.preheader.loopexit.unr-lcssa ], [ %23, %.lr.ph254.epil ], [ %.0185251.unr, %25 ], [ %.0185251.unr, %27 ]
  %.0.lcssa = phi i32 [ 0, %._crit_edge ], [ %.1.lcssa.ph, %.preheader.loopexit.unr-lcssa ], [ %.0185251.unr, %.lr.ph254.epil ], [ %.0252.unr, %25 ], [ %spec.select.epil, %27 ]
  %28 = icmp sgt i32 %.pre, 0
  br i1 %28, label %.lr.ph257, label %._crit_edge258

.lr.ph257:                                        ; preds = %.preheader
  %.0187.lcssa.fr = freeze i32 %.0187.lcssa
  %29 = icmp eq i32 %.0187.lcssa.fr, 2
  br i1 %29, label %.lr.ph257.split.us, label %.lr.ph257.split

.lr.ph257.split.us:                               ; preds = %.lr.ph257, %.lr.ph257.split.us
  %30 = phi i64 [ %34, %.lr.ph257.split.us ], [ %.pre271, %.lr.ph257 ]
  %31 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.3bc639853dbe6436eb639ac7d27a1359, i32 25)
  %32 = call i1 @_FortranAioOutputInteger32(ptr %31, i32 %.0185.lcssa)
  %33 = call i32 @_FortranAioEndIoStatement(ptr %31)
  %34 = add nsw i64 %30, -1
  %35 = icmp sgt i64 %30, 1
  br i1 %35, label %.lr.ph257.split.us, label %._crit_edge258

.lr.ph254:                                        ; preds = %49, %.lr.ph254.preheader.new
  %indvars.iv261 = phi i64 [ 2, %.lr.ph254.preheader.new ], [ %indvars.iv.next262.1, %49 ]
  %.0252 = phi i32 [ 0, %.lr.ph254.preheader.new ], [ %.1.1, %49 ]
  %.0185251 = phi i32 [ %17, %.lr.ph254.preheader.new ], [ %.1186.1, %49 ]
  %.0187250 = phi i32 [ 1, %.lr.ph254.preheader.new ], [ %.1188.1, %49 ]
  %niter = phi i64 [ 0, %.lr.ph254.preheader.new ], [ %niter.next.1, %49 ]
  %36 = add nsw i64 %indvars.iv261, -1
  %37 = getelementptr i32, ptr %.unpack.pre, i64 %36
  %38 = load i32, ptr %37, align 4, !tbaa !3
  %39 = icmp sgt i32 %38, %.0185251
  br i1 %39, label %.lr.ph254.1, label %40

40:                                               ; preds = %.lr.ph254
  %41 = icmp eq i32 %38, %.0185251
  br i1 %41, label %.lr.ph254.1, label %42

42:                                               ; preds = %40
  %spec.select = call i32 @llvm.smax.i32(i32 %38, i32 %.0252)
  br label %.lr.ph254.1

.lr.ph254.1:                                      ; preds = %42, %40, %.lr.ph254
  %.1188 = phi i32 [ 1, %.lr.ph254 ], [ 2, %40 ], [ %.0187250, %42 ]
  %.1186 = phi i32 [ %38, %.lr.ph254 ], [ %.0185251, %40 ], [ %.0185251, %42 ]
  %.1 = phi i32 [ %.0185251, %.lr.ph254 ], [ %.0252, %40 ], [ %spec.select, %42 ]
  %43 = getelementptr i32, ptr %.unpack.pre, i64 %indvars.iv261
  %44 = load i32, ptr %43, align 4, !tbaa !3
  %45 = icmp sgt i32 %44, %.1186
  br i1 %45, label %49, label %46

46:                                               ; preds = %.lr.ph254.1
  %47 = icmp eq i32 %44, %.1186
  br i1 %47, label %49, label %48

48:                                               ; preds = %46
  %spec.select.1 = call i32 @llvm.smax.i32(i32 %44, i32 %.1)
  br label %49

49:                                               ; preds = %48, %46, %.lr.ph254.1
  %.1188.1 = phi i32 [ 1, %.lr.ph254.1 ], [ 2, %46 ], [ %.1188, %48 ]
  %.1186.1 = phi i32 [ %44, %.lr.ph254.1 ], [ %.1186, %46 ], [ %.1186, %48 ]
  %.1.1 = phi i32 [ %.1186, %.lr.ph254.1 ], [ %.1, %46 ], [ %spec.select.1, %48 ]
  %indvars.iv.next262.1 = add nuw nsw i64 %indvars.iv261, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.preheader.loopexit.unr-lcssa.loopexit, label %.lr.ph254

.lr.ph257.split:                                  ; preds = %.lr.ph257, %59
  %indvars.iv265 = phi i64 [ %indvars.iv.next266, %59 ], [ 1, %.lr.ph257 ]
  %.unpack214 = load ptr, ptr @_QFEa.0, align 8, !tbaa !7
  %50 = add nsw i64 %indvars.iv265, -1
  %51 = getelementptr i32, ptr %.unpack214, i64 %50
  %52 = load i32, ptr %51, align 4, !tbaa !3
  %.not = icmp eq i32 %52, %.0185.lcssa
  br i1 %.not, label %56, label %53

53:                                               ; preds = %.lr.ph257.split
  %54 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.3bc639853dbe6436eb639ac7d27a1359, i32 25)
  %55 = call i1 @_FortranAioOutputInteger32(ptr %54, i32 %.0185.lcssa)
  br label %59

56:                                               ; preds = %.lr.ph257.split
  %57 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.28693029, i64 4, ptr null, i32 -1, ptr nonnull @_QQcl.3bc639853dbe6436eb639ac7d27a1359, i32 27)
  %58 = call i1 @_FortranAioOutputInteger32(ptr %57, i32 %.0.lcssa)
  br label %59

59:                                               ; preds = %53, %56
  %.sink = phi ptr [ %54, %53 ], [ %57, %56 ]
  %60 = call i32 @_FortranAioEndIoStatement(ptr %.sink)
  %indvars.iv.next266 = add nuw nsw i64 %indvars.iv265, 1
  %exitcond268.not = icmp eq i64 %indvars.iv265, %.pre271
  br i1 %exitcond268.not, label %._crit_edge258, label %.lr.ph257.split

._crit_edge258:                                   ; preds = %59, %.lr.ph257.split.us, %0, %.preheader
  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 @_FortranAioBeginExternalFormattedOutput(ptr, i64, ptr, 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.smax.i32(i32, i32) #1

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) }

!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}
