program main
  implicit none
  integer ::le,i,j,a=0,b=0,am,bm
  character(300000)::n
  read(*,*)j
  read(*,*)n
  le=len_trim(n)
  do i=1,le
    if(n(i:i)=='.')a=a+1
    if(n(i:i)=='#')b=b+1
  enddo
  am=a
  bm=b
  do j=1,le
    if(n(j:j)=='.')then
      a=a-1
      if(am>a)am=a
    else
      a=a+1
    endif
  enddo
  do j=le,1,-1
      if(n(j:j)=='#')then
      b=b-1
      if(bm>b)bm=b
    else
      b=b+1
    endif

  enddo
  write(*,*)min(am,bm)
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"

@_QFEa = internal unnamed_addr global i32 0
@_QFEb = internal unnamed_addr global i32 0
@_QFEn = internal global [300000 x i8] undef
@_QQcl.612fdb2aa655c1bb8eef678d43fe1c64 = linkonce constant [73 x i8] c"/home/ubuntu/Downloads/TheStack_IR/Collated/Fortran/Source_4434/source.f\00"
@_QQcl.2E = linkonce constant [1 x i8] c"."
@_QQcl.23 = linkonce constant [1 x i8] c"#"
@_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.612fdb2aa655c1bb8eef678d43fe1c64, i32 5)
  %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.612fdb2aa655c1bb8eef678d43fe1c64, i32 6)
  %6 = call i1 @_FortranAioInputAscii(ptr %5, ptr nonnull @_QFEn, i64 300000)
  %7 = call i32 @_FortranAioEndIoStatement(ptr %5)
  br label %8

8:                                                ; preds = %0, %8
  %9 = phi i64 [ 299999, %0 ], [ %13, %8 ]
  %10 = getelementptr [300000 x [1 x i8]], ptr @_QFEn, i64 0, i64 %9
  %11 = load i8, ptr %10, align 1, !tbaa !3
  %12 = icmp eq i8 %11, 32
  %13 = add nsw i64 %9, -1
  %14 = icmp ne i64 %9, 0
  %15 = and i1 %12, %14
  br i1 %15, label %8, label %16

16:                                               ; preds = %8
  %17 = trunc i64 %9 to i32
  %18 = add i32 %17, 1
  %19 = select i1 %12, i32 0, i32 %18
  %20 = sext i32 %19 to i64
  %21 = icmp sgt i32 %19, 0
  br i1 %21, label %.lr.ph, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %16
  %22 = load i32, ptr @_QFEa, align 4, !tbaa !3
  %23 = load i32, ptr @_QFEb, align 4, !tbaa !3
  br label %._crit_edge30

.lr.ph:                                           ; preds = %16, %37
  %indvars.iv = phi i64 [ %indvars.iv.next, %37 ], [ 1, %16 ]
  %24 = add nsw i64 %indvars.iv, -1
  %25 = getelementptr [300000 x [1 x i8]], ptr @_QFEn, i64 0, i64 %24
  %26 = call i32 @_FortranACharacterCompareScalar1(ptr %25, ptr nonnull @_QQcl.2E, i64 1, i64 1)
  %27 = icmp eq i32 %26, 0
  br i1 %27, label %28, label %31

28:                                               ; preds = %.lr.ph
  %29 = load i32, ptr @_QFEa, align 4, !tbaa !3
  %30 = add i32 %29, 1
  store i32 %30, ptr @_QFEa, align 4, !tbaa !3
  br label %31

31:                                               ; preds = %28, %.lr.ph
  %32 = call i32 @_FortranACharacterCompareScalar1(ptr %25, ptr nonnull @_QQcl.23, i64 1, i64 1)
  %33 = icmp eq i32 %32, 0
  br i1 %33, label %34, label %37

34:                                               ; preds = %31
  %35 = load i32, ptr @_QFEb, align 4, !tbaa !3
  %36 = add i32 %35, 1
  store i32 %36, ptr @_QFEb, align 4, !tbaa !3
  br label %37

37:                                               ; preds = %34, %31
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv, %20
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %37
  %38 = load i32, ptr @_QFEa, align 4, !tbaa !3
  %39 = load i32, ptr @_QFEb, align 4, !tbaa !3
  br i1 %21, label %.lr.ph24, label %._crit_edge30

.lr.ph24:                                         ; preds = %._crit_edge, %52
  %40 = phi i64 [ %55, %52 ], [ %20, %._crit_edge ]
  %41 = phi i32 [ %54, %52 ], [ 1, %._crit_edge ]
  %.022 = phi i32 [ %.1, %52 ], [ %38, %._crit_edge ]
  store i32 %41, ptr %1, align 4, !tbaa !3
  %42 = sext i32 %41 to i64
  %43 = add nsw i64 %42, -1
  %44 = getelementptr [300000 x [1 x i8]], ptr @_QFEn, i64 0, i64 %43
  %45 = call i32 @_FortranACharacterCompareScalar1(ptr %44, ptr nonnull @_QQcl.2E, i64 1, i64 1)
  %46 = icmp eq i32 %45, 0
  %47 = load i32, ptr @_QFEa, align 4, !tbaa !3
  br i1 %46, label %48, label %50

48:                                               ; preds = %.lr.ph24
  %49 = add i32 %47, -1
  %spec.select = call i32 @llvm.smin.i32(i32 %.022, i32 %49)
  br label %52

50:                                               ; preds = %.lr.ph24
  %51 = add i32 %47, 1
  br label %52

52:                                               ; preds = %48, %50
  %.sink = phi i32 [ %49, %48 ], [ %51, %50 ]
  %.1 = phi i32 [ %spec.select, %48 ], [ %.022, %50 ]
  store i32 %.sink, ptr @_QFEa, align 4
  %53 = load i32, ptr %1, align 4, !tbaa !3
  %54 = add i32 %53, 1
  %55 = add nsw i64 %40, -1
  %56 = icmp sgt i64 %40, 1
  br i1 %56, label %.lr.ph24, label %._crit_edge25

._crit_edge25:                                    ; preds = %52
  br i1 %21, label %.lr.ph29, label %._crit_edge30

.lr.ph29:                                         ; preds = %._crit_edge25, %69
  %57 = phi i64 [ %72, %69 ], [ %20, %._crit_edge25 ]
  %58 = phi i32 [ %71, %69 ], [ %18, %._crit_edge25 ]
  %.01027 = phi i32 [ %.111, %69 ], [ %39, %._crit_edge25 ]
  store i32 %58, ptr %1, align 4, !tbaa !3
  %59 = sext i32 %58 to i64
  %60 = add nsw i64 %59, -1
  %61 = getelementptr [300000 x [1 x i8]], ptr @_QFEn, i64 0, i64 %60
  %62 = call i32 @_FortranACharacterCompareScalar1(ptr %61, ptr nonnull @_QQcl.23, i64 1, i64 1)
  %63 = icmp eq i32 %62, 0
  %64 = load i32, ptr @_QFEb, align 4, !tbaa !3
  br i1 %63, label %65, label %67

65:                                               ; preds = %.lr.ph29
  %66 = add i32 %64, -1
  %spec.select18 = call i32 @llvm.smin.i32(i32 %.01027, i32 %66)
  br label %69

67:                                               ; preds = %.lr.ph29
  %68 = add i32 %64, 1
  br label %69

69:                                               ; preds = %65, %67
  %.sink38 = phi i32 [ %66, %65 ], [ %68, %67 ]
  %.111 = phi i32 [ %spec.select18, %65 ], [ %.01027, %67 ]
  store i32 %.sink38, ptr @_QFEb, align 4
  %70 = load i32, ptr %1, align 4, !tbaa !3
  %71 = add i32 %70, -1
  %72 = add nsw i64 %57, -1
  %73 = icmp sgt i64 %57, 1
  br i1 %73, label %.lr.ph29, label %._crit_edge30

._crit_edge30:                                    ; preds = %69, %._crit_edge, %._crit_edge.thread, %._crit_edge25
  %.0.lcssa41 = phi i32 [ %.1, %._crit_edge25 ], [ %22, %._crit_edge.thread ], [ %38, %._crit_edge ], [ %.1, %69 ]
  %.010.lcssa = phi i32 [ %39, %._crit_edge25 ], [ %23, %._crit_edge.thread ], [ %39, %._crit_edge ], [ %.111, %69 ]
  %.lcssa = phi i32 [ %19, %._crit_edge25 ], [ %19, %._crit_edge.thread ], [ %19, %._crit_edge ], [ %71, %69 ]
  store i32 %.lcssa, ptr %1, align 4, !tbaa !3
  %74 = call ptr @_FortranAioBeginExternalListOutput(i32 -1, ptr nonnull @_QQcl.612fdb2aa655c1bb8eef678d43fe1c64, i32 31)
  %75 = call i32 @llvm.smin.i32(i32 %.0.lcssa41, i32 %.010.lcssa)
  %76 = call i1 @_FortranAioOutputInteger32(ptr %74, i32 %75)
  %77 = call i32 @_FortranAioEndIoStatement(ptr %74)
  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 i32 @_FortranACharacterCompareScalar1(ptr, ptr, i64, i64) 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

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