program main

  implicit none
  integer :: i,j,n
  character(100) :: s, t
  character(200) :: st


  read(*,*) n
  read(*,*) s, t


  j = -1
  do i = 1, n
    j = j + 1
    st(j:j) = s(i:i)
    j = j + 1
    st(j:j) = t(i:i)
  end do

  write(6,"(1p,A)") st(0:2*n-1)

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

@_QFEs = internal global [100 x i8] undef
@_QFEst = internal global [200 x i8] undef
@_QFEt = internal global [100 x i8] undef
@_QQcl.efb07b8c87b2bb09a2a9743501504027 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_2797/source.f\00"
@_QQcl.2831702C4129 = linkonce constant [6 x i8] c"(1p,A)"
@_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.efb07b8c87b2bb09a2a9743501504027, i32 9)
  %3 = call i1 @_FortranAioInputInteger(ptr %2, ptr nonnull %1, i32 4)
  %4 = call i32 @_FortranAioEndIoStatement(ptr %2)
  %5 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.efb07b8c87b2bb09a2a9743501504027, i32 10)
  %6 = call i1 @_FortranAioInputAscii(ptr %5, ptr nonnull @_QFEs, i64 100)
  %7 = call i1 @_FortranAioInputAscii(ptr %5, ptr nonnull @_QFEt, i64 100)
  %8 = call i32 @_FortranAioEndIoStatement(ptr %5)
  %9 = load i32, ptr %1, align 4, !tbaa !3
  %10 = icmp sgt i32 %9, 0
  br i1 %10, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %0
  %11 = zext i32 %9 to i64
  %min.iters.check = icmp ult i32 %9, 16
  br i1 %min.iters.check, label %.lr.ph.preheader24, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.lr.ph.preheader
  %12 = add nsw i64 %11, -1
  %13 = icmp ugt i64 %12, 1073741823
  %mul.result13 = shl nsw i64 %12, 1
  %14 = getelementptr i8, ptr getelementptr ([200 x i8], ptr @_QFEst, i64 -1, i64 199), i64 %mul.result13
  %15 = icmp ult ptr %14, getelementptr ([200 x i8], ptr @_QFEst, i64 -1, i64 199)
  %mul.result16 = shl nsw i64 %12, 1
  %16 = getelementptr i8, ptr @_QFEst, i64 %mul.result16
  %17 = icmp ult ptr %16, @_QFEst
  %18 = or i1 %13, %15
  %19 = or i1 %18, %17
  br i1 %19, label %.lr.ph.preheader24, label %vector.ph

vector.ph:                                        ; preds = %vector.scevcheck
  %n.vec = and i64 %11, 4294967288
  %ind.end = or i64 %n.vec, 1
  %.cast = trunc i64 %n.vec to i32
  %20 = shl i32 %.cast, 1
  %ind.end18 = add i32 %20, -1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %.cast20 = trunc i64 %index to i32
  %21 = shl i32 %.cast20, 1
  %22 = getelementptr [100 x [1 x i8]], ptr @_QFEs, i64 0, i64 %index
  %wide.load = load <8 x i8>, ptr %22, align 8
  %23 = getelementptr [100 x [1 x i8]], ptr @_QFEt, i64 0, i64 %index
  %24 = sext i32 %21 to i64
  %25 = getelementptr [200 x [1 x i8]], ptr @_QFEst, i64 0, i64 %24
  %wide.load22 = load <8 x i8>, ptr %23, align 8
  %26 = getelementptr i8, ptr %25, i64 -1
  %interleaved.vec = shufflevector <8 x i8> %wide.load, <8 x i8> %wide.load22, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
  store <16 x i8> %interleaved.vec, ptr %26, align 1
  %index.next = add nuw i64 %index, 8
  %27 = icmp eq i64 %index.next, %n.vec
  br i1 %27, label %middle.block, label %vector.body, !llvm.loop !7

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %11
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader24

.lr.ph.preheader24:                               ; preds = %vector.scevcheck, %.lr.ph.preheader, %middle.block
  %indvars.iv.ph = phi i64 [ 1, %vector.scevcheck ], [ 1, %.lr.ph.preheader ], [ %ind.end, %middle.block ]
  %.010.ph = phi i32 [ -1, %vector.scevcheck ], [ -1, %.lr.ph.preheader ], [ %ind.end18, %middle.block ]
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader24, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader24 ]
  %.010 = phi i32 [ %35, %.lr.ph ], [ %.010.ph, %.lr.ph.preheader24 ]
  %28 = add i32 %.010, 1
  %29 = add nsw i64 %indvars.iv, -1
  %30 = getelementptr [100 x [1 x i8]], ptr @_QFEs, i64 0, i64 %29
  %31 = sext i32 %28 to i64
  %32 = add nsw i64 %31, -1
  %33 = getelementptr [200 x [1 x i8]], ptr @_QFEst, i64 0, i64 %32
  %34 = load i8, ptr %30, align 1
  store i8 %34, ptr %33, align 1
  %35 = add i32 %.010, 2
  %36 = getelementptr [100 x [1 x i8]], ptr @_QFEt, i64 0, i64 %29
  %37 = sext i32 %35 to i64
  %38 = add nsw i64 %37, -1
  %39 = getelementptr [200 x [1 x i8]], ptr @_QFEst, i64 0, i64 %38
  %40 = load i8, ptr %36, align 1
  store i8 %40, ptr %39, align 1
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %11
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !10

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %0
  %41 = call ptr @_FortranAioBeginExternalFormattedOutput(ptr nonnull @_QQcl.2831702C4129, i64 6, ptr null, i32 6, ptr nonnull @_QQcl.efb07b8c87b2bb09a2a9743501504027, i32 21)
  %42 = load i32, ptr %1, align 4, !tbaa !3
  %43 = shl i32 %42, 1
  %44 = add i32 %43, -1
  %45 = call i32 @llvm.smax.i32(i32 %44, i32 -1)
  %46 = sext i32 %45 to i64
  %47 = add nsw i64 %46, 1
  %48 = call i1 @_FortranAioOutputAscii(ptr %41, ptr getelementptr ([200 x i8], ptr @_QFEst, i64 -1, i64 199), i64 %47)
  %49 = call i32 @_FortranAioEndIoStatement(ptr %41)
  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 i1 @_FortranAioInputAscii(ptr, ptr, i64) local_unnamed_addr

declare ptr @_FortranAioBeginExternalFormattedOutput(ptr, i64, ptr, 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 i32 @llvm.smax.i32(i32, i32) #0

attributes #0 = { 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 = distinct !{!7, !8, !9}
!8 = !{!"llvm.loop.isvectorized", i32 1}
!9 = !{!"llvm.loop.unroll.runtime.disable"}
!10 = distinct !{!10, !8}
