      PROGRAM piyo
      IMPLICIT NONE
      integer(16) :: n
      character(:),allocatable :: s
      integer(16) :: l,c,r,ans,pos1,pos2,pos3
      character(1) :: ch(0:9)
      
      ch(:) = ['0','1','2','3','4','5','6','7','8','9']
      
      read*,n
      allocate( character(n) :: s )
      read*,s
      
      ans = 0
      do l = 0,9
        pos1 = index(s(1:n),ch(l))
        if(pos1==0.or.pos1==n) cycle
        do c = 0,9
          pos2 = index(s(pos1+1:n),ch(c) )
          if(pos2==0) cycle
          pos2 = pos2 + pos1
          if(pos2==n) cycle
          do r = 0,9
            pos3 = index(s(pos2+1:n),ch(r) )
            if(pos3==0)then
              cycle
            else
              ans = ans + 1
            end if
          end do
        end do
      end do
      
      print*,ans
      
      
      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"

@_QQro.10x1xc1.781e5e245d69b566979b86e28d23f2c7 = internal unnamed_addr constant [10 x [1 x i8]] [[1 x i8] c"0", [1 x i8] c"1", [1 x i8] c"2", [1 x i8] c"3", [1 x i8] c"4", [1 x i8] c"5", [1 x i8] c"6", [1 x i8] c"7", [1 x i8] c"8", [1 x i8] c"9"]
@_QQcl.1db166c8c81c57254df0016384a89ff9 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_2902/source.f\00"
@_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 [10 x [1 x i8]], align 1
  %2 = alloca i128, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(10) %1, ptr noundef nonnull align 1 dereferenceable(10) @_QQro.10x1xc1.781e5e245d69b566979b86e28d23f2c7, i64 10, i1 false), !tbaa !3
  %3 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.1db166c8c81c57254df0016384a89ff9, i32 10)
  %4 = call i1 @_FortranAioInputInteger(ptr %3, ptr nonnull %2, i32 16)
  %5 = call i32 @_FortranAioEndIoStatement(ptr %3)
  %6 = load i128, ptr %2, align 8, !tbaa !3
  %7 = call i128 @llvm.smax.i128(i128 %6, i128 0)
  %8 = trunc i128 %7 to i64
  %9 = call ptr @malloc(i64 %8)
  %10 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.1db166c8c81c57254df0016384a89ff9, i32 12)
  %11 = call i1 @_FortranAioInputAscii(ptr %10, ptr %9, i64 %8)
  %12 = call i32 @_FortranAioEndIoStatement(ptr %10)
  %13 = getelementptr inbounds [10 x [1 x i8]], ptr %1, i64 0, i64 1
  %14 = getelementptr inbounds [10 x [1 x i8]], ptr %1, i64 0, i64 2
  %15 = getelementptr inbounds [10 x [1 x i8]], ptr %1, i64 0, i64 3
  %16 = getelementptr inbounds [10 x [1 x i8]], ptr %1, i64 0, i64 4
  %17 = getelementptr inbounds [10 x [1 x i8]], ptr %1, i64 0, i64 5
  %18 = getelementptr inbounds [10 x [1 x i8]], ptr %1, i64 0, i64 6
  %19 = getelementptr inbounds [10 x [1 x i8]], ptr %1, i64 0, i64 7
  %20 = getelementptr inbounds [10 x [1 x i8]], ptr %1, i64 0, i64 8
  %21 = getelementptr inbounds [10 x [1 x i8]], ptr %1, i64 0, i64 9
  br label %22

22:                                               ; preds = %0, %.loopexit39
  %.02848 = phi i128 [ 10, %0 ], [ %130, %.loopexit39 ]
  %.02947 = phi i64 [ 0, %0 ], [ %131, %.loopexit39 ]
  %.03146 = phi i128 [ 0, %0 ], [ %.5, %.loopexit39 ]
  %23 = load i128, ptr %2, align 8, !tbaa !3
  %24 = trunc i128 %23 to i64
  %25 = call i64 @llvm.smax.i64(i64 %24, i64 0)
  %26 = getelementptr [10 x [1 x i8]], ptr %1, i64 0, i64 %.02947
  %27 = call i64 @_FortranAIndex1(ptr %9, i64 %25, ptr %26, i64 1, i1 false)
  %28 = trunc i64 %27 to i32
  %29 = sext i32 %28 to i128
  %30 = icmp ne i32 %28, 0
  %31 = load i128, ptr %2, align 8, !tbaa !3
  %32 = icmp ne i128 %31, %29
  %.not36 = and i1 %30, %32
  br i1 %.not36, label %.preheader38, label %.loopexit39

.preheader38:                                     ; preds = %22
  %sext = shl i64 %27, 32
  %33 = ashr exact i64 %sext, 32
  %34 = getelementptr [1 x i8], ptr %9, i64 %33
  br label %35

35:                                               ; preds = %.preheader38, %.loopexit
  %.02745 = phi i128 [ 10, %.preheader38 ], [ %128, %.loopexit ]
  %.03044 = phi i64 [ 0, %.preheader38 ], [ %129, %.loopexit ]
  %.143 = phi i128 [ %.03146, %.preheader38 ], [ %.4, %.loopexit ]
  %36 = load i128, ptr %2, align 8, !tbaa !3
  %37 = trunc i128 %36 to i64
  %38 = sub i64 %37, %33
  %39 = call i64 @llvm.smax.i64(i64 %38, i64 0)
  %40 = getelementptr [10 x [1 x i8]], ptr %1, i64 0, i64 %.03044
  %41 = call i64 @_FortranAIndex1(ptr %34, i64 %39, ptr %40, i64 1, i1 false)
  %42 = trunc i64 %41 to i32
  %.not = icmp eq i32 %42, 0
  br i1 %.not, label %.loopexit, label %43

43:                                               ; preds = %35
  %44 = sext i32 %42 to i128
  %45 = add nsw i128 %44, %29
  %46 = load i128, ptr %2, align 8, !tbaa !3
  %.not37 = icmp eq i128 %45, %46
  br i1 %.not37, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %43
  %47 = trunc i128 %45 to i64
  %48 = getelementptr [1 x i8], ptr %9, i64 %47
  %49 = trunc i128 %46 to i64
  %50 = sub i64 %49, %47
  %51 = call i64 @llvm.smax.i64(i64 %50, i64 0)
  %52 = call i64 @_FortranAIndex1(ptr %48, i64 %51, ptr nonnull %1, i64 1, i1 false)
  %53 = and i64 %52, 4294967295
  %54 = icmp ne i64 %53, 0
  %55 = zext i1 %54 to i128
  %spec.select = add i128 %.143, %55
  %56 = load i128, ptr %2, align 8, !tbaa !3
  %57 = trunc i128 %56 to i64
  %58 = sub i64 %57, %47
  %59 = call i64 @llvm.smax.i64(i64 %58, i64 0)
  %60 = call i64 @_FortranAIndex1(ptr %48, i64 %59, ptr nonnull %13, i64 1, i1 false)
  %61 = and i64 %60, 4294967295
  %62 = icmp ne i64 %61, 0
  %63 = zext i1 %62 to i128
  %spec.select.1 = add i128 %spec.select, %63
  %64 = load i128, ptr %2, align 8, !tbaa !3
  %65 = trunc i128 %64 to i64
  %66 = sub i64 %65, %47
  %67 = call i64 @llvm.smax.i64(i64 %66, i64 0)
  %68 = call i64 @_FortranAIndex1(ptr %48, i64 %67, ptr nonnull %14, i64 1, i1 false)
  %69 = and i64 %68, 4294967295
  %70 = icmp ne i64 %69, 0
  %71 = zext i1 %70 to i128
  %spec.select.2 = add i128 %spec.select.1, %71
  %72 = load i128, ptr %2, align 8, !tbaa !3
  %73 = trunc i128 %72 to i64
  %74 = sub i64 %73, %47
  %75 = call i64 @llvm.smax.i64(i64 %74, i64 0)
  %76 = call i64 @_FortranAIndex1(ptr %48, i64 %75, ptr nonnull %15, i64 1, i1 false)
  %77 = and i64 %76, 4294967295
  %78 = icmp ne i64 %77, 0
  %79 = zext i1 %78 to i128
  %spec.select.3 = add i128 %spec.select.2, %79
  %80 = load i128, ptr %2, align 8, !tbaa !3
  %81 = trunc i128 %80 to i64
  %82 = sub i64 %81, %47
  %83 = call i64 @llvm.smax.i64(i64 %82, i64 0)
  %84 = call i64 @_FortranAIndex1(ptr %48, i64 %83, ptr nonnull %16, i64 1, i1 false)
  %85 = and i64 %84, 4294967295
  %86 = icmp ne i64 %85, 0
  %87 = zext i1 %86 to i128
  %spec.select.4 = add i128 %spec.select.3, %87
  %88 = load i128, ptr %2, align 8, !tbaa !3
  %89 = trunc i128 %88 to i64
  %90 = sub i64 %89, %47
  %91 = call i64 @llvm.smax.i64(i64 %90, i64 0)
  %92 = call i64 @_FortranAIndex1(ptr %48, i64 %91, ptr nonnull %17, i64 1, i1 false)
  %93 = and i64 %92, 4294967295
  %94 = icmp ne i64 %93, 0
  %95 = zext i1 %94 to i128
  %spec.select.5 = add i128 %spec.select.4, %95
  %96 = load i128, ptr %2, align 8, !tbaa !3
  %97 = trunc i128 %96 to i64
  %98 = sub i64 %97, %47
  %99 = call i64 @llvm.smax.i64(i64 %98, i64 0)
  %100 = call i64 @_FortranAIndex1(ptr %48, i64 %99, ptr nonnull %18, i64 1, i1 false)
  %101 = and i64 %100, 4294967295
  %102 = icmp ne i64 %101, 0
  %103 = zext i1 %102 to i128
  %spec.select.6 = add i128 %spec.select.5, %103
  %104 = load i128, ptr %2, align 8, !tbaa !3
  %105 = trunc i128 %104 to i64
  %106 = sub i64 %105, %47
  %107 = call i64 @llvm.smax.i64(i64 %106, i64 0)
  %108 = call i64 @_FortranAIndex1(ptr %48, i64 %107, ptr nonnull %19, i64 1, i1 false)
  %109 = and i64 %108, 4294967295
  %110 = icmp ne i64 %109, 0
  %111 = zext i1 %110 to i128
  %spec.select.7 = add i128 %spec.select.6, %111
  %112 = load i128, ptr %2, align 8, !tbaa !3
  %113 = trunc i128 %112 to i64
  %114 = sub i64 %113, %47
  %115 = call i64 @llvm.smax.i64(i64 %114, i64 0)
  %116 = call i64 @_FortranAIndex1(ptr %48, i64 %115, ptr nonnull %20, i64 1, i1 false)
  %117 = and i64 %116, 4294967295
  %118 = icmp ne i64 %117, 0
  %119 = zext i1 %118 to i128
  %spec.select.8 = add i128 %spec.select.7, %119
  %120 = load i128, ptr %2, align 8, !tbaa !3
  %121 = trunc i128 %120 to i64
  %122 = sub i64 %121, %47
  %123 = call i64 @llvm.smax.i64(i64 %122, i64 0)
  %124 = call i64 @_FortranAIndex1(ptr %48, i64 %123, ptr nonnull %21, i64 1, i1 false)
  %125 = and i64 %124, 4294967295
  %126 = icmp ne i64 %125, 0
  %127 = zext i1 %126 to i128
  %spec.select.9 = add i128 %spec.select.8, %127
  br label %.loopexit

.loopexit:                                        ; preds = %.preheader, %43, %35
  %.4 = phi i128 [ %.143, %43 ], [ %.143, %35 ], [ %spec.select.9, %.preheader ]
  %128 = add nsw i128 %.02745, -1
  %129 = add nuw nsw i64 %.03044, 1
  %.not50 = icmp eq i128 %128, 0
  br i1 %.not50, label %.loopexit39, label %35

.loopexit39:                                      ; preds = %.loopexit, %22
  %.5 = phi i128 [ %.03146, %22 ], [ %.4, %.loopexit ]
  %130 = add nsw i128 %.02848, -1
  %131 = add nuw nsw i64 %.02947, 1
  %.not49 = icmp eq i128 %130, 0
  br i1 %.not49, label %132, label %22

132:                                              ; preds = %.loopexit39
  %133 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.1db166c8c81c57254df0016384a89ff9, i32 34)
  %134 = call i1 @_FortranAioOutputInteger128(ptr %133, i128 %.5)
  %135 = call i32 @_FortranAioEndIoStatement(ptr %133)
  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 i64 @_FortranAIndex1(ptr, i64, ptr, i64, i1) local_unnamed_addr

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

declare i1 @_FortranAioOutputInteger128(ptr, i128) local_unnamed_addr

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #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 nounwind willreturn memory(argmem: readwrite) }

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