program abc
	implicit none
	integer :: n,m,l,k,a,b,z
	integer :: si(5)=0,ci(5)=0,x(3)=0   
	read(*,*) n,m
	a = min(10**(n-1),1000*(n-1))
	b = (10**n) - 1
	z = -1
	do k = 1, m
		read(*,*) si(k),ci(k)
	enddo
	do l = a, b
		if(n == 1) then
			x(1) = l
		else if(n == 2) then
			x(2) = mod(l,10)
			x(1) = (l - x(2)) / 10
		else
			x(3) = mod(l,10)
			x(2) = (mod(l,100) - x(3)) / 10
			x(1) = (l - (x(2) * 10 + x(3))) / 100
		endif
		do k = 1, m
			if(x(si(k)) /= ci(k)) goto 999
		enddo		
		z = l
		goto 888
		
999	continue 
	enddo
 
888	continue
	
	if(z == -1) then
		write(*,*) '-1'
	else
		write(*,*) z
	endif
    
end program abc
; 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"

@_QFEci = internal global [5 x i32] zeroinitializer
@_QFEsi = internal global [5 x i32] zeroinitializer
@_QFEx = internal unnamed_addr global [3 x i32] zeroinitializer
@_QQcl.fad8373c8bbbedb893fb4f8d1f41162f = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_2278/source.f\00"
@_QQcl.2D31 = linkonce constant [2 x i8] c"-1"
@_QQEnvironmentDefaults = local_unnamed_addr constant ptr null

define void @_QQmain() local_unnamed_addr {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = tail call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.fad8373c8bbbedb893fb4f8d1f41162f, i32 5)
  %4 = call i1 @_FortranAioInputInteger(ptr %3, ptr nonnull %2, i32 4)
  %5 = call i1 @_FortranAioInputInteger(ptr %3, ptr nonnull %1, i32 4)
  %6 = call i32 @_FortranAioEndIoStatement(ptr %3)
  %7 = load i32, ptr %2, align 4, !tbaa !3
  %8 = add i32 %7, -1
  %9 = icmp eq i32 %8, 0
  br i1 %9, label %.thread, label %10

10:                                               ; preds = %0
  %11 = icmp slt i32 %8, 1
  br i1 %11, label %__mlir_math_ipowi_i32.exit, label %.preheader.i

.preheader.i:                                     ; preds = %10
  %12 = and i32 %8, 1
  %.not3.i = icmp eq i32 %12, 0
  %13 = select i1 %.not3.i, i32 1, i32 10
  %14 = icmp eq i32 %8, 1
  br i1 %14, label %.thread, label %.lr.ph.i

.lr.ph.i:                                         ; preds = %.preheader.i, %.lr.ph.i
  %spec.select4.i = phi i32 [ %spec.select.i, %.lr.ph.i ], [ %13, %.preheader.i ]
  %15 = phi i32 [ %17, %.lr.ph.i ], [ %8, %.preheader.i ]
  %16 = phi i32 [ %18, %.lr.ph.i ], [ 10, %.preheader.i ]
  %17 = lshr i32 %15, 1
  %18 = mul i32 %16, %16
  %19 = and i32 %15, 2
  %.not.i = icmp eq i32 %19, 0
  %20 = select i1 %.not.i, i32 1, i32 %18
  %spec.select.i = mul i32 %20, %spec.select4.i
  %21 = icmp ult i32 %15, 4
  br i1 %21, label %__mlir_math_ipowi_i32.exit, label %.lr.ph.i

.thread:                                          ; preds = %.preheader.i, %0
  %common.ret.op.i.ph = phi i32 [ %13, %.preheader.i ], [ 1, %0 ]
  %22 = mul nuw nsw i32 %8, 1000
  %23 = call i32 @llvm.smin.i32(i32 %common.ret.op.i.ph, i32 %22)
  br label %.preheader.i29

__mlir_math_ipowi_i32.exit:                       ; preds = %.lr.ph.i, %10
  %common.ret.op.i = phi i32 [ 0, %10 ], [ %spec.select.i, %.lr.ph.i ]
  %24 = mul i32 %8, 1000
  %25 = call i32 @llvm.smin.i32(i32 %common.ret.op.i, i32 %24)
  %26 = icmp eq i32 %7, 0
  br i1 %26, label %__mlir_math_ipowi_i32.exit34, label %27

27:                                               ; preds = %__mlir_math_ipowi_i32.exit
  %28 = icmp slt i32 %7, 1
  br i1 %28, label %__mlir_math_ipowi_i32.exit34, label %.preheader.i29

.preheader.i29:                                   ; preds = %.thread, %27
  %29 = phi i32 [ %23, %.thread ], [ %25, %27 ]
  %30 = and i32 %7, 1
  %.not3.i28 = icmp eq i32 %30, 0
  %31 = select i1 %.not3.i28, i32 1, i32 10
  %32 = icmp eq i32 %7, 1
  br i1 %32, label %__mlir_math_ipowi_i32.exit34, label %.lr.ph.i33

.lr.ph.i33:                                       ; preds = %.preheader.i29, %.lr.ph.i33
  %spec.select4.i30 = phi i32 [ %spec.select.i32, %.lr.ph.i33 ], [ %31, %.preheader.i29 ]
  %33 = phi i32 [ %35, %.lr.ph.i33 ], [ %7, %.preheader.i29 ]
  %34 = phi i32 [ %36, %.lr.ph.i33 ], [ 10, %.preheader.i29 ]
  %35 = lshr i32 %33, 1
  %36 = mul i32 %34, %34
  %37 = and i32 %33, 2
  %.not.i31 = icmp eq i32 %37, 0
  %38 = select i1 %.not.i31, i32 1, i32 %36
  %spec.select.i32 = mul i32 %38, %spec.select4.i30
  %39 = icmp ult i32 %33, 4
  br i1 %39, label %__mlir_math_ipowi_i32.exit34, label %.lr.ph.i33

__mlir_math_ipowi_i32.exit34:                     ; preds = %.lr.ph.i33, %27, %__mlir_math_ipowi_i32.exit, %.preheader.i29
  %40 = phi i32 [ %25, %__mlir_math_ipowi_i32.exit ], [ %29, %.preheader.i29 ], [ %25, %27 ], [ %29, %.lr.ph.i33 ]
  %common.ret.op.i27 = phi i32 [ 1, %__mlir_math_ipowi_i32.exit ], [ %31, %.preheader.i29 ], [ 0, %27 ], [ %spec.select.i32, %.lr.ph.i33 ]
  %41 = load i32, ptr %1, align 4, !tbaa !3
  %42 = icmp sgt i32 %41, 0
  br i1 %42, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %__mlir_math_ipowi_i32.exit34
  %43 = zext i32 %41 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %44 = call ptr @_FortranAioBeginExternalListInput(i32 -1, ptr nonnull @_QQcl.fad8373c8bbbedb893fb4f8d1f41162f, i32 10)
  %45 = add nsw i64 %indvars.iv, -1
  %46 = getelementptr [5 x i32], ptr @_QFEsi, i64 0, i64 %45
  %47 = call i1 @_FortranAioInputInteger(ptr %44, ptr %46, i32 4)
  %48 = getelementptr [5 x i32], ptr @_QFEci, i64 0, i64 %45
  %49 = call i1 @_FortranAioInputInteger(ptr %44, ptr %48, i32 4)
  %50 = call i32 @_FortranAioEndIoStatement(ptr %44)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %43
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %__mlir_math_ipowi_i32.exit34
  %51 = sub i32 %common.ret.op.i27, %40
  %52 = icmp sgt i32 %51, 0
  br i1 %52, label %.lr.ph51, label %.thread36

.lr.ph51:                                         ; preds = %._crit_edge
  %53 = load i32, ptr %2, align 4, !tbaa !3
  %54 = load i32, ptr %1, align 4, !tbaa !3
  %55 = icmp sgt i32 %54, 0
  br i1 %55, label %.lr.ph51.split.us, label %.lr.ph51.split

.lr.ph51.split.us:                                ; preds = %.lr.ph51, %77
  %.02149.us = phi i32 [ %79, %77 ], [ %40, %.lr.ph51 ]
  %.02448.us = phi i32 [ %78, %77 ], [ %51, %.lr.ph51 ]
  switch i32 %53, label %59 [
    i32 1, label %.lr.ph44.us
    i32 2, label %56
  ]

56:                                               ; preds = %.lr.ph51.split.us
  %57 = srem i32 %.02149.us, 10
  store i32 %57, ptr getelementptr inbounds ([3 x i32], ptr @_QFEx, i64 0, i64 1), align 4, !tbaa !3
  %58 = sdiv i32 %.02149.us, 10
  br label %.lr.ph44.us

59:                                               ; preds = %.lr.ph51.split.us
  %60 = srem i32 %.02149.us, 10
  store i32 %60, ptr getelementptr inbounds ([3 x i32], ptr @_QFEx, i64 0, i64 2), align 4, !tbaa !3
  %61 = srem i32 %.02149.us, 100
  %62 = sub nsw i32 %61, %60
  %.lhs.trunc.us = trunc i32 %62 to i8
  %63 = sdiv i8 %.lhs.trunc.us, 10
  %.sext.us = sext i8 %63 to i32
  store i32 %.sext.us, ptr getelementptr inbounds ([3 x i32], ptr @_QFEx, i64 0, i64 1), align 4, !tbaa !3
  %.neg38.us = mul nsw i32 %.sext.us, -10
  %.neg39.us = sub i32 %.02149.us, %60
  %64 = add i32 %.neg39.us, %.neg38.us
  %65 = sdiv i32 %64, 100
  br label %.lr.ph44.us

.lr.ph44.us:                                      ; preds = %.lr.ph51.split.us, %59, %56
  %.sink = phi i32 [ %65, %59 ], [ %58, %56 ], [ %.02149.us, %.lr.ph51.split.us ]
  store i32 %.sink, ptr @_QFEx, align 4, !tbaa !3
  br label %66

66:                                               ; preds = %.lr.ph44.us, %81
  %.02242.us = phi i32 [ 1, %.lr.ph44.us ], [ %82, %81 ]
  %67 = sext i32 %.02242.us to i64
  %68 = add nsw i64 %67, -1
  %69 = getelementptr [5 x i32], ptr @_QFEsi, i64 0, i64 %68
  %70 = load i32, ptr %69, align 4, !tbaa !3
  %71 = sext i32 %70 to i64
  %72 = add nsw i64 %71, -1
  %73 = getelementptr [3 x i32], ptr @_QFEx, i64 0, i64 %72
  %74 = load i32, ptr %73, align 4, !tbaa !3
  %75 = getelementptr [5 x i32], ptr @_QFEci, i64 0, i64 %68
  %76 = load i32, ptr %75, align 4, !tbaa !3
  %.not.us = icmp eq i32 %74, %76
  br i1 %.not.us, label %81, label %77

77:                                               ; preds = %66
  %78 = add nsw i32 %.02448.us, -1
  %79 = add i32 %.02149.us, 1
  %80 = icmp sgt i32 %.02448.us, 1
  br i1 %80, label %.lr.ph51.split.us, label %.thread36

81:                                               ; preds = %66
  %82 = add nuw i32 %.02242.us, 1
  %exitcond54.not = icmp eq i32 %.02242.us, %54
  br i1 %exitcond54.not, label %._crit_edge45, label %66

.lr.ph51.split:                                   ; preds = %.lr.ph51
  switch i32 %53, label %86 [
    i32 1, label %._crit_edge45.sink.split
    i32 2, label %83
  ]

83:                                               ; preds = %.lr.ph51.split
  %84 = srem i32 %40, 10
  store i32 %84, ptr getelementptr inbounds ([3 x i32], ptr @_QFEx, i64 0, i64 1), align 4, !tbaa !3
  %85 = sdiv i32 %40, 10
  br label %._crit_edge45.sink.split

86:                                               ; preds = %.lr.ph51.split
  %87 = srem i32 %40, 10
  store i32 %87, ptr getelementptr inbounds ([3 x i32], ptr @_QFEx, i64 0, i64 2), align 4, !tbaa !3
  %88 = srem i32 %40, 100
  %89 = sub nsw i32 %88, %87
  %.lhs.trunc = trunc i32 %89 to i8
  %90 = sdiv i8 %.lhs.trunc, 10
  %.sext = sext i8 %90 to i32
  store i32 %.sext, ptr getelementptr inbounds ([3 x i32], ptr @_QFEx, i64 0, i64 1), align 4, !tbaa !3
  %.neg38 = mul nsw i32 %.sext, -10
  %.neg39 = sub i32 %40, %87
  %91 = add i32 %.neg39, %.neg38
  %92 = sdiv i32 %91, 100
  br label %._crit_edge45.sink.split

._crit_edge45.sink.split:                         ; preds = %.lr.ph51.split, %86, %83
  %.sink56 = phi i32 [ %85, %83 ], [ %92, %86 ], [ %40, %.lr.ph51.split ]
  store i32 %.sink56, ptr @_QFEx, align 4, !tbaa !3
  br label %._crit_edge45

._crit_edge45:                                    ; preds = %81, %._crit_edge45.sink.split
  %.021.lcssa40 = phi i32 [ %40, %._crit_edge45.sink.split ], [ %.02149.us, %81 ]
  %93 = icmp eq i32 %.021.lcssa40, -1
  br i1 %93, label %.thread36, label %96

.thread36:                                        ; preds = %77, %._crit_edge, %._crit_edge45
  %94 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.fad8373c8bbbedb893fb4f8d1f41162f, i32 35)
  %95 = call i1 @_FortranAioOutputAscii(ptr %94, ptr nonnull @_QQcl.2D31, i64 2)
  br label %99

96:                                               ; preds = %._crit_edge45
  %97 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.fad8373c8bbbedb893fb4f8d1f41162f, i32 37)
  %98 = call i1 @_FortranAioOutputInteger32(ptr %97, i32 %.021.lcssa40)
  br label %99

99:                                               ; preds = %.thread36, %96
  %.sink57 = phi ptr [ %94, %.thread36 ], [ %97, %96 ]
  %100 = call i32 @_FortranAioEndIoStatement(ptr %.sink57)
  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 @_FortranAioOutputAscii(ptr, ptr, i64) 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

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