; LLVM IR from tangjz/acm-icpc :: codechef/SEPT18 (PHOTOCOM)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@t = external dso_local global i32, align 4
@row = external dso_local global [2 x i32], align 4
@col = external dso_local global [2 x i32], align 4
@buf = external dso_local global [2 x [1000001 x i8]], align 16
@cnt = external dso_local global [4 x [1000001 x i64]], align 16
@ans = external dso_local global i64, align 8
@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [6 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca [2 x i32], align 4
  %4 = alloca i32, align 4
  %5 = alloca [2 x i32], align 4
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca i64, align 8
  %11 = alloca i32, align 4
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  %16 = alloca i64, align 8
  %17 = alloca i32, align 4
  %18 = alloca i64, align 8
  %19 = alloca i64, align 8
  %20 = alloca i64, align 8
  %21 = alloca [4 x i64], align 16
  %22 = alloca i32, align 4
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i32, align 4
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca [4 x i64], align 16
  %38 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %39 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str, ptr noundef @t)
  br label %40

40:                                               ; preds = %738, %0
  %41 = load i32, ptr @t, align 4, !tbaa !5
  %42 = add nsw i32 %41, -1
  store i32 %42, ptr @t, align 4, !tbaa !5
  %43 = icmp ne i32 %41, 0
  br i1 %43, label %44, label %741

44:                                               ; preds = %40
  %45 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str.1, ptr noundef @row, ptr noundef @col, ptr noundef @buf)
  %46 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str.1, ptr noundef getelementptr inbounds (i32, ptr @row, i64 1), ptr noundef getelementptr inbounds (i32, ptr @col, i64 1), ptr noundef getelementptr inbounds ([2 x [1000001 x i8]], ptr @buf, i64 0, i64 1))
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #5
  %47 = load i32, ptr @row, align 4, !tbaa !5
  %48 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @row, i64 0, i64 1), align 4, !tbaa !5
  %49 = call noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef %47, i32 noundef %48)
  store i32 %49, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  %50 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @row, i64 0, i64 1), align 4, !tbaa !5
  %51 = load i32, ptr %2, align 4, !tbaa !5
  %52 = sdiv i32 %50, %51
  store i32 %52, ptr %3, align 4, !tbaa !5
  %53 = getelementptr inbounds i32, ptr %3, i64 1
  %54 = load i32, ptr @row, align 4, !tbaa !5
  %55 = load i32, ptr %2, align 4, !tbaa !5
  %56 = sdiv i32 %54, %55
  store i32 %56, ptr %53, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #5
  %57 = load i32, ptr @col, align 4, !tbaa !5
  %58 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %59 = call noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef %57, i32 noundef %58)
  store i32 %59, ptr %4, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  %60 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %61 = load i32, ptr %4, align 4, !tbaa !5
  %62 = sdiv i32 %60, %61
  store i32 %62, ptr %5, align 4, !tbaa !5
  %63 = getelementptr inbounds i32, ptr %5, i64 1
  %64 = load i32, ptr @col, align 4, !tbaa !5
  %65 = load i32, ptr %4, align 4, !tbaa !5
  %66 = sdiv i32 %64, %65
  store i32 %66, ptr %63, align 4, !tbaa !5
  store i64 0, ptr @ans, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  store i64 0, ptr %6, align 8, !tbaa !9
  br label %67

67:                                               ; preds = %82, %44
  %68 = load i64, ptr %6, align 8, !tbaa !9
  %69 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %70 = sext i32 %69 to i64
  %71 = icmp slt i64 %68, %70
  br i1 %71, label %73, label %72

72:                                               ; preds = %67
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  br label %85

73:                                               ; preds = %67
  %74 = load i64, ptr %6, align 8, !tbaa !9
  %75 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 3), i64 0, i64 %74
  store i64 0, ptr %75, align 8, !tbaa !9
  %76 = load i64, ptr %6, align 8, !tbaa !9
  %77 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 2), i64 0, i64 %76
  store i64 0, ptr %77, align 8, !tbaa !9
  %78 = load i64, ptr %6, align 8, !tbaa !9
  %79 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 1), i64 0, i64 %78
  store i64 0, ptr %79, align 8, !tbaa !9
  %80 = load i64, ptr %6, align 8, !tbaa !9
  %81 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %80
  store i64 0, ptr %81, align 8, !tbaa !9
  br label %82

82:                                               ; preds = %73
  %83 = load i64, ptr %6, align 8, !tbaa !9
  %84 = add nsw i64 %83, 1
  store i64 %84, ptr %6, align 8, !tbaa !9
  br label %67, !llvm.loop !11

85:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  store i64 0, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  store i64 0, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  store i64 0, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #5
  %86 = getelementptr inbounds [2 x i32], ptr %3, i64 0, i64 1
  %87 = load i32, ptr %86, align 4, !tbaa !5
  %88 = sub nsw i32 %87, 1
  %89 = sext i32 %88 to i64
  store i64 %89, ptr %10, align 8, !tbaa !9
  br label %90

90:                                               ; preds = %394, %85
  %91 = load i64, ptr %8, align 8, !tbaa !9
  %92 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @row, i64 0, i64 1), align 4, !tbaa !5
  %93 = sext i32 %92 to i64
  %94 = icmp slt i64 %91, %93
  br i1 %94, label %96, label %95

95:                                               ; preds = %90
  store i32 7, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  br label %402

96:                                               ; preds = %90
  br label %97

97:                                               ; preds = %238, %96
  %98 = load i64, ptr %7, align 8, !tbaa !9
  %99 = load i32, ptr @row, align 4, !tbaa !5
  %100 = sext i32 %99 to i64
  %101 = icmp slt i64 %98, %100
  br i1 %101, label %102, label %106

102:                                              ; preds = %97
  %103 = load i64, ptr %9, align 8, !tbaa !9
  %104 = load i64, ptr %10, align 8, !tbaa !9
  %105 = icmp sle i64 %103, %104
  br label %106

106:                                              ; preds = %102, %97
  %107 = phi i1 [ false, %97 ], [ %105, %102 ]
  br i1 %107, label %108, label %246

108:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #5
  store i64 0, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #5
  store i64 0, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #5
  store i64 0, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #5
  %109 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 1
  %110 = load i32, ptr %109, align 4, !tbaa !5
  %111 = sub nsw i32 %110, 1
  %112 = sext i32 %111 to i64
  store i64 %112, ptr %15, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #5
  %113 = load i64, ptr %7, align 8, !tbaa !9
  %114 = load i32, ptr @col, align 4, !tbaa !5
  %115 = sext i32 %114 to i64
  %116 = mul nsw i64 %113, %115
  store i64 %116, ptr %16, align 8, !tbaa !9
  br label %117

117:                                              ; preds = %227, %108
  %118 = load i64, ptr %12, align 8, !tbaa !9
  %119 = load i32, ptr @col, align 4, !tbaa !5
  %120 = sext i32 %119 to i64
  %121 = icmp slt i64 %118, %120
  br i1 %121, label %123, label %122

122:                                              ; preds = %117
  store i32 13, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #5
  br label %237

123:                                              ; preds = %117
  br label %124

124:                                              ; preds = %129, %123
  %125 = load i64, ptr %14, align 8, !tbaa !9
  %126 = load i64, ptr %15, align 8, !tbaa !9
  %127 = icmp sgt i64 %125, %126
  br i1 %127, label %128, label %137

128:                                              ; preds = %124
  br label %129

129:                                              ; preds = %128
  %130 = load i64, ptr %13, align 8, !tbaa !9
  %131 = add nsw i64 %130, 1
  store i64 %131, ptr %13, align 8, !tbaa !9
  %132 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 1
  %133 = load i32, ptr %132, align 4, !tbaa !5
  %134 = sext i32 %133 to i64
  %135 = load i64, ptr %15, align 8, !tbaa !9
  %136 = add nsw i64 %135, %134
  store i64 %136, ptr %15, align 8, !tbaa !9
  br label %124, !llvm.loop !13

137:                                              ; preds = %124
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  %138 = load i64, ptr %16, align 8, !tbaa !9
  %139 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %138
  %140 = load i8, ptr %139, align 1, !tbaa !14
  %141 = sext i8 %140 to i32
  %142 = icmp eq i32 %141, 48
  %143 = zext i1 %142 to i32
  %144 = load i64, ptr %7, align 8, !tbaa !9
  %145 = icmp ne i64 %144, 0
  br i1 %145, label %146, label %159

146:                                              ; preds = %137
  %147 = load i64, ptr %12, align 8, !tbaa !9
  %148 = icmp ne i64 %147, 0
  br i1 %148, label %149, label %159

149:                                              ; preds = %146
  %150 = load i64, ptr %16, align 8, !tbaa !9
  %151 = load i32, ptr @col, align 4, !tbaa !5
  %152 = sext i32 %151 to i64
  %153 = sub nsw i64 %150, %152
  %154 = sub nsw i64 %153, 1
  %155 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %154
  %156 = load i8, ptr %155, align 1, !tbaa !14
  %157 = sext i8 %156 to i32
  %158 = icmp eq i32 %157, 48
  br label %159

159:                                              ; preds = %149, %146, %137
  %160 = phi i1 [ false, %146 ], [ false, %137 ], [ %158, %149 ]
  %161 = zext i1 %160 to i32
  %162 = add nsw i32 %143, %161
  %163 = load i64, ptr %7, align 8, !tbaa !9
  %164 = icmp ne i64 %163, 0
  br i1 %164, label %165, label %174

165:                                              ; preds = %159
  %166 = load i64, ptr %16, align 8, !tbaa !9
  %167 = load i32, ptr @col, align 4, !tbaa !5
  %168 = sext i32 %167 to i64
  %169 = sub nsw i64 %166, %168
  %170 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %169
  %171 = load i8, ptr %170, align 1, !tbaa !14
  %172 = sext i8 %171 to i32
  %173 = icmp eq i32 %172, 48
  br label %174

174:                                              ; preds = %165, %159
  %175 = phi i1 [ false, %159 ], [ %173, %165 ]
  %176 = zext i1 %175 to i32
  %177 = sub nsw i32 %162, %176
  %178 = load i64, ptr %12, align 8, !tbaa !9
  %179 = icmp ne i64 %178, 0
  br i1 %179, label %180, label %187

180:                                              ; preds = %174
  %181 = load i64, ptr %16, align 8, !tbaa !9
  %182 = sub nsw i64 %181, 1
  %183 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %182
  %184 = load i8, ptr %183, align 1, !tbaa !14
  %185 = sext i8 %184 to i32
  %186 = icmp eq i32 %185, 48
  br label %187

187:                                              ; preds = %180, %174
  %188 = phi i1 [ false, %174 ], [ %186, %180 ]
  %189 = zext i1 %188 to i32
  %190 = sub nsw i32 %177, %189
  store i32 %190, ptr %17, align 4, !tbaa !5
  %191 = load i32, ptr %17, align 4, !tbaa !5
  %192 = icmp ne i32 %191, 0
  br i1 %192, label %193, label %226

193:                                              ; preds = %187
  %194 = load i32, ptr %17, align 4, !tbaa !5
  %195 = sext i32 %194 to i64
  %196 = load i64, ptr %13, align 8, !tbaa !9
  %197 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %196
  %198 = load i64, ptr %197, align 8, !tbaa !9
  %199 = add nsw i64 %198, %195
  store i64 %199, ptr %197, align 8, !tbaa !9
  %200 = load i32, ptr %17, align 4, !tbaa !5
  %201 = sext i32 %200 to i64
  %202 = load i64, ptr %9, align 8, !tbaa !9
  %203 = mul nsw i64 %201, %202
  %204 = load i64, ptr %13, align 8, !tbaa !9
  %205 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 1), i64 0, i64 %204
  %206 = load i64, ptr %205, align 8, !tbaa !9
  %207 = add nsw i64 %206, %203
  store i64 %207, ptr %205, align 8, !tbaa !9
  %208 = load i32, ptr %17, align 4, !tbaa !5
  %209 = sext i32 %208 to i64
  %210 = load i64, ptr %14, align 8, !tbaa !9
  %211 = mul nsw i64 %209, %210
  %212 = load i64, ptr %13, align 8, !tbaa !9
  %213 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 2), i64 0, i64 %212
  %214 = load i64, ptr %213, align 8, !tbaa !9
  %215 = add nsw i64 %214, %211
  store i64 %215, ptr %213, align 8, !tbaa !9
  %216 = load i32, ptr %17, align 4, !tbaa !5
  %217 = sext i32 %216 to i64
  %218 = load i64, ptr %9, align 8, !tbaa !9
  %219 = mul nsw i64 %217, %218
  %220 = load i64, ptr %14, align 8, !tbaa !9
  %221 = mul nsw i64 %219, %220
  %222 = load i64, ptr %13, align 8, !tbaa !9
  %223 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 3), i64 0, i64 %222
  %224 = load i64, ptr %223, align 8, !tbaa !9
  %225 = add nsw i64 %224, %221
  store i64 %225, ptr %223, align 8, !tbaa !9
  br label %226

226:                                              ; preds = %193, %187
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %227

227:                                              ; preds = %226
  %228 = load i64, ptr %12, align 8, !tbaa !9
  %229 = add nsw i64 %228, 1
  store i64 %229, ptr %12, align 8, !tbaa !9
  %230 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 0
  %231 = load i32, ptr %230, align 4, !tbaa !5
  %232 = sext i32 %231 to i64
  %233 = load i64, ptr %14, align 8, !tbaa !9
  %234 = add nsw i64 %233, %232
  store i64 %234, ptr %14, align 8, !tbaa !9
  %235 = load i64, ptr %16, align 8, !tbaa !9
  %236 = add nsw i64 %235, 1
  store i64 %236, ptr %16, align 8, !tbaa !9
  br label %117, !llvm.loop !15

237:                                              ; preds = %122
  br label %238

238:                                              ; preds = %237
  %239 = load i64, ptr %7, align 8, !tbaa !9
  %240 = add nsw i64 %239, 1
  store i64 %240, ptr %7, align 8, !tbaa !9
  %241 = getelementptr inbounds [2 x i32], ptr %3, i64 0, i64 0
  %242 = load i32, ptr %241, align 4, !tbaa !5
  %243 = sext i32 %242 to i64
  %244 = load i64, ptr %9, align 8, !tbaa !9
  %245 = add nsw i64 %244, %243
  store i64 %245, ptr %9, align 8, !tbaa !9
  br label %97, !llvm.loop !16

246:                                              ; preds = %106
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #5
  store i64 0, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #5
  %247 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 1
  %248 = load i32, ptr %247, align 4, !tbaa !5
  %249 = sub nsw i32 %248, 1
  %250 = sext i32 %249 to i64
  store i64 %250, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #5
  %251 = load i64, ptr %8, align 8, !tbaa !9
  %252 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %253 = sext i32 %252 to i64
  %254 = mul nsw i64 %251, %253
  store i64 %254, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %21) #5
  call void @llvm.memset.p0.i64(ptr align 16 %21, i8 0, i64 32, i1 false)
  br label %255

255:                                              ; preds = %383, %246
  %256 = load i64, ptr %18, align 8, !tbaa !9
  %257 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %258 = sext i32 %257 to i64
  %259 = icmp slt i64 %256, %258
  br i1 %259, label %261, label %260

260:                                              ; preds = %255
  store i32 19, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %21) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #5
  br label %393

261:                                              ; preds = %255
  %262 = load i64, ptr %18, align 8, !tbaa !9
  %263 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %262
  %264 = load i64, ptr %263, align 8, !tbaa !9
  %265 = getelementptr inbounds [4 x i64], ptr %21, i64 0, i64 0
  %266 = load i64, ptr %265, align 16, !tbaa !9
  %267 = add nsw i64 %266, %264
  store i64 %267, ptr %265, align 16, !tbaa !9
  %268 = load i64, ptr %18, align 8, !tbaa !9
  %269 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 1), i64 0, i64 %268
  %270 = load i64, ptr %269, align 8, !tbaa !9
  %271 = getelementptr inbounds [4 x i64], ptr %21, i64 0, i64 1
  %272 = load i64, ptr %271, align 8, !tbaa !9
  %273 = add nsw i64 %272, %270
  store i64 %273, ptr %271, align 8, !tbaa !9
  %274 = load i64, ptr %18, align 8, !tbaa !9
  %275 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 2), i64 0, i64 %274
  %276 = load i64, ptr %275, align 8, !tbaa !9
  %277 = getelementptr inbounds [4 x i64], ptr %21, i64 0, i64 2
  %278 = load i64, ptr %277, align 16, !tbaa !9
  %279 = add nsw i64 %278, %276
  store i64 %279, ptr %277, align 16, !tbaa !9
  %280 = load i64, ptr %18, align 8, !tbaa !9
  %281 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 3), i64 0, i64 %280
  %282 = load i64, ptr %281, align 8, !tbaa !9
  %283 = getelementptr inbounds [4 x i64], ptr %21, i64 0, i64 3
  %284 = load i64, ptr %283, align 8, !tbaa !9
  %285 = add nsw i64 %284, %282
  store i64 %285, ptr %283, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #5
  %286 = load i64, ptr %20, align 8, !tbaa !9
  %287 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds ([2 x [1000001 x i8]], ptr @buf, i64 0, i64 1), i64 0, i64 %286
  %288 = load i8, ptr %287, align 1, !tbaa !14
  %289 = sext i8 %288 to i32
  %290 = icmp eq i32 %289, 48
  %291 = zext i1 %290 to i32
  %292 = load i64, ptr %8, align 8, !tbaa !9
  %293 = add nsw i64 %292, 1
  %294 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @row, i64 0, i64 1), align 4, !tbaa !5
  %295 = sext i32 %294 to i64
  %296 = icmp slt i64 %293, %295
  br i1 %296, label %297, label %313

297:                                              ; preds = %261
  %298 = load i64, ptr %18, align 8, !tbaa !9
  %299 = add nsw i64 %298, 1
  %300 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %301 = sext i32 %300 to i64
  %302 = icmp slt i64 %299, %301
  br i1 %302, label %303, label %313

303:                                              ; preds = %297
  %304 = load i64, ptr %20, align 8, !tbaa !9
  %305 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %306 = sext i32 %305 to i64
  %307 = add nsw i64 %304, %306
  %308 = add nsw i64 %307, 1
  %309 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds ([2 x [1000001 x i8]], ptr @buf, i64 0, i64 1), i64 0, i64 %308
  %310 = load i8, ptr %309, align 1, !tbaa !14
  %311 = sext i8 %310 to i32
  %312 = icmp eq i32 %311, 48
  br label %313

313:                                              ; preds = %303, %297, %261
  %314 = phi i1 [ false, %297 ], [ false, %261 ], [ %312, %303 ]
  %315 = zext i1 %314 to i32
  %316 = add nsw i32 %291, %315
  %317 = load i64, ptr %8, align 8, !tbaa !9
  %318 = add nsw i64 %317, 1
  %319 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @row, i64 0, i64 1), align 4, !tbaa !5
  %320 = sext i32 %319 to i64
  %321 = icmp slt i64 %318, %320
  br i1 %321, label %322, label %331

322:                                              ; preds = %313
  %323 = load i64, ptr %20, align 8, !tbaa !9
  %324 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %325 = sext i32 %324 to i64
  %326 = add nsw i64 %323, %325
  %327 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds ([2 x [1000001 x i8]], ptr @buf, i64 0, i64 1), i64 0, i64 %326
  %328 = load i8, ptr %327, align 1, !tbaa !14
  %329 = sext i8 %328 to i32
  %330 = icmp eq i32 %329, 48
  br label %331

331:                                              ; preds = %322, %313
  %332 = phi i1 [ false, %313 ], [ %330, %322 ]
  %333 = zext i1 %332 to i32
  %334 = sub nsw i32 %316, %333
  %335 = load i64, ptr %18, align 8, !tbaa !9
  %336 = add nsw i64 %335, 1
  %337 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %338 = sext i32 %337 to i64
  %339 = icmp slt i64 %336, %338
  br i1 %339, label %340, label %347

340:                                              ; preds = %331
  %341 = load i64, ptr %20, align 8, !tbaa !9
  %342 = add nsw i64 %341, 1
  %343 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds ([2 x [1000001 x i8]], ptr @buf, i64 0, i64 1), i64 0, i64 %342
  %344 = load i8, ptr %343, align 1, !tbaa !14
  %345 = sext i8 %344 to i32
  %346 = icmp eq i32 %345, 48
  br label %347

347:                                              ; preds = %340, %331
  %348 = phi i1 [ false, %331 ], [ %346, %340 ]
  %349 = zext i1 %348 to i32
  %350 = sub nsw i32 %334, %349
  store i32 %350, ptr %22, align 4, !tbaa !5
  %351 = load i32, ptr %22, align 4, !tbaa !5
  %352 = icmp ne i32 %351, 0
  br i1 %352, label %353, label %382

353:                                              ; preds = %347
  %354 = load i32, ptr %22, align 4, !tbaa !5
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds [4 x i64], ptr %21, i64 0, i64 0
  %357 = load i64, ptr %356, align 16, !tbaa !9
  %358 = load i64, ptr %10, align 8, !tbaa !9
  %359 = add nsw i64 %358, 1
  %360 = mul nsw i64 %357, %359
  %361 = load i64, ptr %19, align 8, !tbaa !9
  %362 = add nsw i64 %361, 1
  %363 = mul nsw i64 %360, %362
  %364 = getelementptr inbounds [4 x i64], ptr %21, i64 0, i64 1
  %365 = load i64, ptr %364, align 8, !tbaa !9
  %366 = load i64, ptr %19, align 8, !tbaa !9
  %367 = add nsw i64 %366, 1
  %368 = mul nsw i64 %365, %367
  %369 = sub nsw i64 %363, %368
  %370 = getelementptr inbounds [4 x i64], ptr %21, i64 0, i64 2
  %371 = load i64, ptr %370, align 16, !tbaa !9
  %372 = load i64, ptr %10, align 8, !tbaa !9
  %373 = add nsw i64 %372, 1
  %374 = mul nsw i64 %371, %373
  %375 = sub nsw i64 %369, %374
  %376 = getelementptr inbounds [4 x i64], ptr %21, i64 0, i64 3
  %377 = load i64, ptr %376, align 8, !tbaa !9
  %378 = add nsw i64 %375, %377
  %379 = mul nsw i64 %355, %378
  %380 = load i64, ptr @ans, align 8, !tbaa !9
  %381 = add nsw i64 %380, %379
  store i64 %381, ptr @ans, align 8, !tbaa !9
  br label %382

382:                                              ; preds = %353, %347
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #5
  br label %383

383:                                              ; preds = %382
  %384 = load i64, ptr %18, align 8, !tbaa !9
  %385 = add nsw i64 %384, 1
  store i64 %385, ptr %18, align 8, !tbaa !9
  %386 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 1
  %387 = load i32, ptr %386, align 4, !tbaa !5
  %388 = sext i32 %387 to i64
  %389 = load i64, ptr %19, align 8, !tbaa !9
  %390 = add nsw i64 %389, %388
  store i64 %390, ptr %19, align 8, !tbaa !9
  %391 = load i64, ptr %20, align 8, !tbaa !9
  %392 = add nsw i64 %391, 1
  store i64 %392, ptr %20, align 8, !tbaa !9
  br label %255, !llvm.loop !17

393:                                              ; preds = %260
  br label %394

394:                                              ; preds = %393
  %395 = load i64, ptr %8, align 8, !tbaa !9
  %396 = add nsw i64 %395, 1
  store i64 %396, ptr %8, align 8, !tbaa !9
  %397 = getelementptr inbounds [2 x i32], ptr %3, i64 0, i64 1
  %398 = load i32, ptr %397, align 4, !tbaa !5
  %399 = sext i32 %398 to i64
  %400 = load i64, ptr %10, align 8, !tbaa !9
  %401 = add nsw i64 %400, %399
  store i64 %401, ptr %10, align 8, !tbaa !9
  br label %90, !llvm.loop !18

402:                                              ; preds = %95
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #5
  store i64 0, ptr %23, align 8, !tbaa !9
  br label %403

403:                                              ; preds = %418, %402
  %404 = load i64, ptr %23, align 8, !tbaa !9
  %405 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %406 = sext i32 %405 to i64
  %407 = icmp slt i64 %404, %406
  br i1 %407, label %409, label %408

408:                                              ; preds = %403
  store i32 22, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #5
  br label %421

409:                                              ; preds = %403
  %410 = load i64, ptr %23, align 8, !tbaa !9
  %411 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 3), i64 0, i64 %410
  store i64 0, ptr %411, align 8, !tbaa !9
  %412 = load i64, ptr %23, align 8, !tbaa !9
  %413 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 2), i64 0, i64 %412
  store i64 0, ptr %413, align 8, !tbaa !9
  %414 = load i64, ptr %23, align 8, !tbaa !9
  %415 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 1), i64 0, i64 %414
  store i64 0, ptr %415, align 8, !tbaa !9
  %416 = load i64, ptr %23, align 8, !tbaa !9
  %417 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %416
  store i64 0, ptr %417, align 8, !tbaa !9
  br label %418

418:                                              ; preds = %409
  %419 = load i64, ptr %23, align 8, !tbaa !9
  %420 = add nsw i64 %419, 1
  store i64 %420, ptr %23, align 8, !tbaa !9
  br label %403, !llvm.loop !19

421:                                              ; preds = %408
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #5
  store i64 0, ptr %24, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #5
  store i64 0, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  store i64 0, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #5
  %422 = getelementptr inbounds [2 x i32], ptr %3, i64 0, i64 1
  %423 = load i32, ptr %422, align 4, !tbaa !5
  %424 = sub nsw i32 %423, 1
  %425 = sext i32 %424 to i64
  store i64 %425, ptr %27, align 8, !tbaa !9
  br label %426

426:                                              ; preds = %730, %421
  %427 = load i64, ptr %25, align 8, !tbaa !9
  %428 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @row, i64 0, i64 1), align 4, !tbaa !5
  %429 = sext i32 %428 to i64
  %430 = icmp slt i64 %427, %429
  br i1 %430, label %432, label %431

431:                                              ; preds = %426
  store i32 25, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #5
  br label %738

432:                                              ; preds = %426
  br label %433

433:                                              ; preds = %574, %432
  %434 = load i64, ptr %24, align 8, !tbaa !9
  %435 = load i32, ptr @row, align 4, !tbaa !5
  %436 = sext i32 %435 to i64
  %437 = icmp slt i64 %434, %436
  br i1 %437, label %438, label %442

438:                                              ; preds = %433
  %439 = load i64, ptr %26, align 8, !tbaa !9
  %440 = load i64, ptr %27, align 8, !tbaa !9
  %441 = icmp sle i64 %439, %440
  br label %442

442:                                              ; preds = %438, %433
  %443 = phi i1 [ false, %433 ], [ %441, %438 ]
  br i1 %443, label %444, label %582

444:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #5
  store i64 0, ptr %28, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #5
  store i64 0, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #5
  store i64 0, ptr %30, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #5
  %445 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 1
  %446 = load i32, ptr %445, align 4, !tbaa !5
  %447 = sub nsw i32 %446, 1
  %448 = sext i32 %447 to i64
  store i64 %448, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #5
  %449 = load i64, ptr %24, align 8, !tbaa !9
  %450 = load i32, ptr @col, align 4, !tbaa !5
  %451 = sext i32 %450 to i64
  %452 = mul nsw i64 %449, %451
  store i64 %452, ptr %32, align 8, !tbaa !9
  br label %453

453:                                              ; preds = %563, %444
  %454 = load i64, ptr %28, align 8, !tbaa !9
  %455 = load i32, ptr @col, align 4, !tbaa !5
  %456 = sext i32 %455 to i64
  %457 = icmp slt i64 %454, %456
  br i1 %457, label %459, label %458

458:                                              ; preds = %453
  store i32 31, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #5
  br label %573

459:                                              ; preds = %453
  br label %460

460:                                              ; preds = %465, %459
  %461 = load i64, ptr %30, align 8, !tbaa !9
  %462 = load i64, ptr %31, align 8, !tbaa !9
  %463 = icmp sgt i64 %461, %462
  br i1 %463, label %464, label %473

464:                                              ; preds = %460
  br label %465

465:                                              ; preds = %464
  %466 = load i64, ptr %29, align 8, !tbaa !9
  %467 = add nsw i64 %466, 1
  store i64 %467, ptr %29, align 8, !tbaa !9
  %468 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 1
  %469 = load i32, ptr %468, align 4, !tbaa !5
  %470 = sext i32 %469 to i64
  %471 = load i64, ptr %31, align 8, !tbaa !9
  %472 = add nsw i64 %471, %470
  store i64 %472, ptr %31, align 8, !tbaa !9
  br label %460, !llvm.loop !20

473:                                              ; preds = %460
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #5
  %474 = load i64, ptr %32, align 8, !tbaa !9
  %475 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %474
  %476 = load i8, ptr %475, align 1, !tbaa !14
  %477 = sext i8 %476 to i32
  %478 = icmp eq i32 %477, 49
  %479 = zext i1 %478 to i32
  %480 = load i64, ptr %24, align 8, !tbaa !9
  %481 = icmp ne i64 %480, 0
  br i1 %481, label %482, label %495

482:                                              ; preds = %473
  %483 = load i64, ptr %28, align 8, !tbaa !9
  %484 = icmp ne i64 %483, 0
  br i1 %484, label %485, label %495

485:                                              ; preds = %482
  %486 = load i64, ptr %32, align 8, !tbaa !9
  %487 = load i32, ptr @col, align 4, !tbaa !5
  %488 = sext i32 %487 to i64
  %489 = sub nsw i64 %486, %488
  %490 = sub nsw i64 %489, 1
  %491 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %490
  %492 = load i8, ptr %491, align 1, !tbaa !14
  %493 = sext i8 %492 to i32
  %494 = icmp eq i32 %493, 49
  br label %495

495:                                              ; preds = %485, %482, %473
  %496 = phi i1 [ false, %482 ], [ false, %473 ], [ %494, %485 ]
  %497 = zext i1 %496 to i32
  %498 = add nsw i32 %479, %497
  %499 = load i64, ptr %24, align 8, !tbaa !9
  %500 = icmp ne i64 %499, 0
  br i1 %500, label %501, label %510

501:                                              ; preds = %495
  %502 = load i64, ptr %32, align 8, !tbaa !9
  %503 = load i32, ptr @col, align 4, !tbaa !5
  %504 = sext i32 %503 to i64
  %505 = sub nsw i64 %502, %504
  %506 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %505
  %507 = load i8, ptr %506, align 1, !tbaa !14
  %508 = sext i8 %507 to i32
  %509 = icmp eq i32 %508, 49
  br label %510

510:                                              ; preds = %501, %495
  %511 = phi i1 [ false, %495 ], [ %509, %501 ]
  %512 = zext i1 %511 to i32
  %513 = sub nsw i32 %498, %512
  %514 = load i64, ptr %28, align 8, !tbaa !9
  %515 = icmp ne i64 %514, 0
  br i1 %515, label %516, label %523

516:                                              ; preds = %510
  %517 = load i64, ptr %32, align 8, !tbaa !9
  %518 = sub nsw i64 %517, 1
  %519 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %518
  %520 = load i8, ptr %519, align 1, !tbaa !14
  %521 = sext i8 %520 to i32
  %522 = icmp eq i32 %521, 49
  br label %523

523:                                              ; preds = %516, %510
  %524 = phi i1 [ false, %510 ], [ %522, %516 ]
  %525 = zext i1 %524 to i32
  %526 = sub nsw i32 %513, %525
  store i32 %526, ptr %33, align 4, !tbaa !5
  %527 = load i32, ptr %33, align 4, !tbaa !5
  %528 = icmp ne i32 %527, 0
  br i1 %528, label %529, label %562

529:                                              ; preds = %523
  %530 = load i32, ptr %33, align 4, !tbaa !5
  %531 = sext i32 %530 to i64
  %532 = load i64, ptr %29, align 8, !tbaa !9
  %533 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %532
  %534 = load i64, ptr %533, align 8, !tbaa !9
  %535 = add nsw i64 %534, %531
  store i64 %535, ptr %533, align 8, !tbaa !9
  %536 = load i32, ptr %33, align 4, !tbaa !5
  %537 = sext i32 %536 to i64
  %538 = load i64, ptr %26, align 8, !tbaa !9
  %539 = mul nsw i64 %537, %538
  %540 = load i64, ptr %29, align 8, !tbaa !9
  %541 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 1), i64 0, i64 %540
  %542 = load i64, ptr %541, align 8, !tbaa !9
  %543 = add nsw i64 %542, %539
  store i64 %543, ptr %541, align 8, !tbaa !9
  %544 = load i32, ptr %33, align 4, !tbaa !5
  %545 = sext i32 %544 to i64
  %546 = load i64, ptr %30, align 8, !tbaa !9
  %547 = mul nsw i64 %545, %546
  %548 = load i64, ptr %29, align 8, !tbaa !9
  %549 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 2), i64 0, i64 %548
  %550 = load i64, ptr %549, align 8, !tbaa !9
  %551 = add nsw i64 %550, %547
  store i64 %551, ptr %549, align 8, !tbaa !9
  %552 = load i32, ptr %33, align 4, !tbaa !5
  %553 = sext i32 %552 to i64
  %554 = load i64, ptr %26, align 8, !tbaa !9
  %555 = mul nsw i64 %553, %554
  %556 = load i64, ptr %30, align 8, !tbaa !9
  %557 = mul nsw i64 %555, %556
  %558 = load i64, ptr %29, align 8, !tbaa !9
  %559 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 3), i64 0, i64 %558
  %560 = load i64, ptr %559, align 8, !tbaa !9
  %561 = add nsw i64 %560, %557
  store i64 %561, ptr %559, align 8, !tbaa !9
  br label %562

562:                                              ; preds = %529, %523
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #5
  br label %563

563:                                              ; preds = %562
  %564 = load i64, ptr %28, align 8, !tbaa !9
  %565 = add nsw i64 %564, 1
  store i64 %565, ptr %28, align 8, !tbaa !9
  %566 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 0
  %567 = load i32, ptr %566, align 4, !tbaa !5
  %568 = sext i32 %567 to i64
  %569 = load i64, ptr %30, align 8, !tbaa !9
  %570 = add nsw i64 %569, %568
  store i64 %570, ptr %30, align 8, !tbaa !9
  %571 = load i64, ptr %32, align 8, !tbaa !9
  %572 = add nsw i64 %571, 1
  store i64 %572, ptr %32, align 8, !tbaa !9
  br label %453, !llvm.loop !21

573:                                              ; preds = %458
  br label %574

574:                                              ; preds = %573
  %575 = load i64, ptr %24, align 8, !tbaa !9
  %576 = add nsw i64 %575, 1
  store i64 %576, ptr %24, align 8, !tbaa !9
  %577 = getelementptr inbounds [2 x i32], ptr %3, i64 0, i64 0
  %578 = load i32, ptr %577, align 4, !tbaa !5
  %579 = sext i32 %578 to i64
  %580 = load i64, ptr %26, align 8, !tbaa !9
  %581 = add nsw i64 %580, %579
  store i64 %581, ptr %26, align 8, !tbaa !9
  br label %433, !llvm.loop !22

582:                                              ; preds = %442
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #5
  store i64 0, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #5
  %583 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 1
  %584 = load i32, ptr %583, align 4, !tbaa !5
  %585 = sub nsw i32 %584, 1
  %586 = sext i32 %585 to i64
  store i64 %586, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #5
  %587 = load i64, ptr %25, align 8, !tbaa !9
  %588 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %589 = sext i32 %588 to i64
  %590 = mul nsw i64 %587, %589
  store i64 %590, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %37) #5
  call void @llvm.memset.p0.i64(ptr align 16 %37, i8 0, i64 32, i1 false)
  br label %591

591:                                              ; preds = %719, %582
  %592 = load i64, ptr %34, align 8, !tbaa !9
  %593 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %594 = sext i32 %593 to i64
  %595 = icmp slt i64 %592, %594
  br i1 %595, label %597, label %596

596:                                              ; preds = %591
  store i32 37, ptr %11, align 4
  call void @llvm.lifetime.end.p0(i64 32, ptr %37) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #5
  br label %729

597:                                              ; preds = %591
  %598 = load i64, ptr %34, align 8, !tbaa !9
  %599 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %598
  %600 = load i64, ptr %599, align 8, !tbaa !9
  %601 = getelementptr inbounds [4 x i64], ptr %37, i64 0, i64 0
  %602 = load i64, ptr %601, align 16, !tbaa !9
  %603 = add nsw i64 %602, %600
  store i64 %603, ptr %601, align 16, !tbaa !9
  %604 = load i64, ptr %34, align 8, !tbaa !9
  %605 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 1), i64 0, i64 %604
  %606 = load i64, ptr %605, align 8, !tbaa !9
  %607 = getelementptr inbounds [4 x i64], ptr %37, i64 0, i64 1
  %608 = load i64, ptr %607, align 8, !tbaa !9
  %609 = add nsw i64 %608, %606
  store i64 %609, ptr %607, align 8, !tbaa !9
  %610 = load i64, ptr %34, align 8, !tbaa !9
  %611 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 2), i64 0, i64 %610
  %612 = load i64, ptr %611, align 8, !tbaa !9
  %613 = getelementptr inbounds [4 x i64], ptr %37, i64 0, i64 2
  %614 = load i64, ptr %613, align 16, !tbaa !9
  %615 = add nsw i64 %614, %612
  store i64 %615, ptr %613, align 16, !tbaa !9
  %616 = load i64, ptr %34, align 8, !tbaa !9
  %617 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds ([4 x [1000001 x i64]], ptr @cnt, i64 0, i64 3), i64 0, i64 %616
  %618 = load i64, ptr %617, align 8, !tbaa !9
  %619 = getelementptr inbounds [4 x i64], ptr %37, i64 0, i64 3
  %620 = load i64, ptr %619, align 8, !tbaa !9
  %621 = add nsw i64 %620, %618
  store i64 %621, ptr %619, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #5
  %622 = load i64, ptr %36, align 8, !tbaa !9
  %623 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds ([2 x [1000001 x i8]], ptr @buf, i64 0, i64 1), i64 0, i64 %622
  %624 = load i8, ptr %623, align 1, !tbaa !14
  %625 = sext i8 %624 to i32
  %626 = icmp eq i32 %625, 49
  %627 = zext i1 %626 to i32
  %628 = load i64, ptr %25, align 8, !tbaa !9
  %629 = add nsw i64 %628, 1
  %630 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @row, i64 0, i64 1), align 4, !tbaa !5
  %631 = sext i32 %630 to i64
  %632 = icmp slt i64 %629, %631
  br i1 %632, label %633, label %649

633:                                              ; preds = %597
  %634 = load i64, ptr %34, align 8, !tbaa !9
  %635 = add nsw i64 %634, 1
  %636 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %637 = sext i32 %636 to i64
  %638 = icmp slt i64 %635, %637
  br i1 %638, label %639, label %649

639:                                              ; preds = %633
  %640 = load i64, ptr %36, align 8, !tbaa !9
  %641 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %642 = sext i32 %641 to i64
  %643 = add nsw i64 %640, %642
  %644 = add nsw i64 %643, 1
  %645 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds ([2 x [1000001 x i8]], ptr @buf, i64 0, i64 1), i64 0, i64 %644
  %646 = load i8, ptr %645, align 1, !tbaa !14
  %647 = sext i8 %646 to i32
  %648 = icmp eq i32 %647, 49
  br label %649

649:                                              ; preds = %639, %633, %597
  %650 = phi i1 [ false, %633 ], [ false, %597 ], [ %648, %639 ]
  %651 = zext i1 %650 to i32
  %652 = add nsw i32 %627, %651
  %653 = load i64, ptr %25, align 8, !tbaa !9
  %654 = add nsw i64 %653, 1
  %655 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @row, i64 0, i64 1), align 4, !tbaa !5
  %656 = sext i32 %655 to i64
  %657 = icmp slt i64 %654, %656
  br i1 %657, label %658, label %667

658:                                              ; preds = %649
  %659 = load i64, ptr %36, align 8, !tbaa !9
  %660 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %661 = sext i32 %660 to i64
  %662 = add nsw i64 %659, %661
  %663 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds ([2 x [1000001 x i8]], ptr @buf, i64 0, i64 1), i64 0, i64 %662
  %664 = load i8, ptr %663, align 1, !tbaa !14
  %665 = sext i8 %664 to i32
  %666 = icmp eq i32 %665, 49
  br label %667

667:                                              ; preds = %658, %649
  %668 = phi i1 [ false, %649 ], [ %666, %658 ]
  %669 = zext i1 %668 to i32
  %670 = sub nsw i32 %652, %669
  %671 = load i64, ptr %34, align 8, !tbaa !9
  %672 = add nsw i64 %671, 1
  %673 = load i32, ptr getelementptr inbounds ([2 x i32], ptr @col, i64 0, i64 1), align 4, !tbaa !5
  %674 = sext i32 %673 to i64
  %675 = icmp slt i64 %672, %674
  br i1 %675, label %676, label %683

676:                                              ; preds = %667
  %677 = load i64, ptr %36, align 8, !tbaa !9
  %678 = add nsw i64 %677, 1
  %679 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds ([2 x [1000001 x i8]], ptr @buf, i64 0, i64 1), i64 0, i64 %678
  %680 = load i8, ptr %679, align 1, !tbaa !14
  %681 = sext i8 %680 to i32
  %682 = icmp eq i32 %681, 49
  br label %683

683:                                              ; preds = %676, %667
  %684 = phi i1 [ false, %667 ], [ %682, %676 ]
  %685 = zext i1 %684 to i32
  %686 = sub nsw i32 %670, %685
  store i32 %686, ptr %38, align 4, !tbaa !5
  %687 = load i32, ptr %38, align 4, !tbaa !5
  %688 = icmp ne i32 %687, 0
  br i1 %688, label %689, label %718

689:                                              ; preds = %683
  %690 = load i32, ptr %38, align 4, !tbaa !5
  %691 = sext i32 %690 to i64
  %692 = getelementptr inbounds [4 x i64], ptr %37, i64 0, i64 0
  %693 = load i64, ptr %692, align 16, !tbaa !9
  %694 = load i64, ptr %27, align 8, !tbaa !9
  %695 = add nsw i64 %694, 1
  %696 = mul nsw i64 %693, %695
  %697 = load i64, ptr %35, align 8, !tbaa !9
  %698 = add nsw i64 %697, 1
  %699 = mul nsw i64 %696, %698
  %700 = getelementptr inbounds [4 x i64], ptr %37, i64 0, i64 1
  %701 = load i64, ptr %700, align 8, !tbaa !9
  %702 = load i64, ptr %35, align 8, !tbaa !9
  %703 = add nsw i64 %702, 1
  %704 = mul nsw i64 %701, %703
  %705 = sub nsw i64 %699, %704
  %706 = getelementptr inbounds [4 x i64], ptr %37, i64 0, i64 2
  %707 = load i64, ptr %706, align 16, !tbaa !9
  %708 = load i64, ptr %27, align 8, !tbaa !9
  %709 = add nsw i64 %708, 1
  %710 = mul nsw i64 %707, %709
  %711 = sub nsw i64 %705, %710
  %712 = getelementptr inbounds [4 x i64], ptr %37, i64 0, i64 3
  %713 = load i64, ptr %712, align 8, !tbaa !9
  %714 = add nsw i64 %711, %713
  %715 = mul nsw i64 %691, %714
  %716 = load i64, ptr @ans, align 8, !tbaa !9
  %717 = add nsw i64 %716, %715
  store i64 %717, ptr @ans, align 8, !tbaa !9
  br label %718

718:                                              ; preds = %689, %683
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #5
  br label %719

719:                                              ; preds = %718
  %720 = load i64, ptr %34, align 8, !tbaa !9
  %721 = add nsw i64 %720, 1
  store i64 %721, ptr %34, align 8, !tbaa !9
  %722 = getelementptr inbounds [2 x i32], ptr %5, i64 0, i64 1
  %723 = load i32, ptr %722, align 4, !tbaa !5
  %724 = sext i32 %723 to i64
  %725 = load i64, ptr %35, align 8, !tbaa !9
  %726 = add nsw i64 %725, %724
  store i64 %726, ptr %35, align 8, !tbaa !9
  %727 = load i64, ptr %36, align 8, !tbaa !9
  %728 = add nsw i64 %727, 1
  store i64 %728, ptr %36, align 8, !tbaa !9
  br label %591, !llvm.loop !23

729:                                              ; preds = %596
  br label %730

730:                                              ; preds = %729
  %731 = load i64, ptr %25, align 8, !tbaa !9
  %732 = add nsw i64 %731, 1
  store i64 %732, ptr %25, align 8, !tbaa !9
  %733 = getelementptr inbounds [2 x i32], ptr %3, i64 0, i64 1
  %734 = load i32, ptr %733, align 4, !tbaa !5
  %735 = sext i32 %734 to i64
  %736 = load i64, ptr %27, align 8, !tbaa !9
  %737 = add nsw i64 %736, %735
  store i64 %737, ptr %27, align 8, !tbaa !9
  br label %426, !llvm.loop !24

738:                                              ; preds = %431
  %739 = load i64, ptr @ans, align 8, !tbaa !9
  %740 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, i64 noundef %739)
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #5
  br label %40, !llvm.loop !25

741:                                              ; preds = %40
  ret i32 0
}

declare i32 @__isoc99_scanf(ptr noundef, ...) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef, i32 noundef) #3

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #4

declare i32 @printf(ptr noundef, ...) #1

attributes #0 = { mustprogress norecurse uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { nounwind }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long long", !7, i64 0}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !12}
!14 = !{!7, !7, i64 0}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !12}
!17 = distinct !{!17, !12}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12}
!20 = distinct !{!20, !12}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12}
!25 = distinct !{!25, !12}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@t = external dso_local global i32, align 4
@row = external dso_local global [2 x i32], align 4
@col = external dso_local global [2 x i32], align 4
@buf = external dso_local global [2 x [1000001 x i8]], align 16
@cnt = external dso_local local_unnamed_addr global [4 x [1000001 x i64]], align 16
@ans = external dso_local local_unnamed_addr global i64, align 8
@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [6 x i8], align 1

; Function Attrs: mustprogress norecurse nounwind uwtable
define dso_local noundef i32 @main() local_unnamed_addr #0 {
  %1 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str, ptr noundef nonnull @t)
  %2 = load i32, ptr @t, align 4, !tbaa !5
  %3 = add nsw i32 %2, -1
  store i32 %3, ptr @t, align 4, !tbaa !5
  %.not325 = icmp eq i32 %2, 0
  br i1 %.not325, label %._crit_edge328, label %.lr.ph327

.lr.ph327:                                        ; preds = %0, %._crit_edge324
  %4 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.1, ptr noundef nonnull @row, ptr noundef nonnull @col, ptr noundef nonnull @buf)
  %5 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.1, ptr noundef nonnull getelementptr inbounds (i8, ptr @row, i64 4), ptr noundef nonnull getelementptr inbounds (i8, ptr @col, i64 4), ptr noundef nonnull getelementptr inbounds (i8, ptr @buf, i64 1000001))
  %6 = load i32, ptr @row, align 4, !tbaa !5
  %7 = load i32, ptr getelementptr inbounds (i8, ptr @row, i64 4), align 4, !tbaa !5
  %8 = tail call noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef %6, i32 noundef %7)
  %9 = load i32, ptr getelementptr inbounds (i8, ptr @row, i64 4), align 4, !tbaa !5
  %10 = sdiv i32 %9, %8
  %11 = load i32, ptr @row, align 4, !tbaa !5
  %12 = sdiv i32 %11, %8
  %13 = load i32, ptr @col, align 4, !tbaa !5
  %14 = load i32, ptr getelementptr inbounds (i8, ptr @col, i64 4), align 4, !tbaa !5
  %15 = tail call noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef %13, i32 noundef %14)
  %16 = load i32, ptr getelementptr inbounds (i8, ptr @col, i64 4), align 4, !tbaa !5
  %17 = sdiv i32 %16, %15
  %18 = load i32, ptr @col, align 4, !tbaa !5
  %19 = sdiv i32 %18, %15
  store i64 0, ptr @ans, align 8, !tbaa !9
  %20 = sext i32 %16 to i64
  %21 = icmp sgt i32 %16, 0
  br i1 %21, label %.lr.ph.preheader, label %._crit_edge

.lr.ph.preheader:                                 ; preds = %.lr.ph327
  %min.iters.check409 = icmp ult i32 %16, 4
  br i1 %min.iters.check409, label %.lr.ph.preheader423, label %vector.ph410

.lr.ph.preheader423:                              ; preds = %middle.block407, %.lr.ph.preheader
  %.0236.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec412, %middle.block407 ]
  br label %.lr.ph

vector.ph410:                                     ; preds = %.lr.ph.preheader
  %n.vec412 = and i64 %20, 2147483644
  br label %vector.body414

vector.body414:                                   ; preds = %vector.body414, %vector.ph410
  %index415 = phi i64 [ 0, %vector.ph410 ], [ %index.next416, %vector.body414 ]
  %22 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 24000024), i64 0, i64 %index415
  %23 = getelementptr inbounds i8, ptr %22, i64 16
  store <2 x i64> zeroinitializer, ptr %22, align 8, !tbaa !9
  store <2 x i64> zeroinitializer, ptr %23, align 8, !tbaa !9
  %24 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 16000016), i64 0, i64 %index415
  %25 = getelementptr inbounds i8, ptr %24, i64 16
  store <2 x i64> zeroinitializer, ptr %24, align 16, !tbaa !9
  store <2 x i64> zeroinitializer, ptr %25, align 16, !tbaa !9
  %26 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 8000008), i64 0, i64 %index415
  %27 = getelementptr inbounds i8, ptr %26, i64 16
  store <2 x i64> zeroinitializer, ptr %26, align 8, !tbaa !9
  store <2 x i64> zeroinitializer, ptr %27, align 8, !tbaa !9
  %28 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %index415
  %29 = getelementptr inbounds i8, ptr %28, i64 16
  store <2 x i64> zeroinitializer, ptr %28, align 16, !tbaa !9
  store <2 x i64> zeroinitializer, ptr %29, align 16, !tbaa !9
  %index.next416 = add nuw i64 %index415, 4
  %30 = icmp eq i64 %index.next416, %n.vec412
  br i1 %30, label %middle.block407, label %vector.body414, !llvm.loop !11

middle.block407:                                  ; preds = %vector.body414
  %cmp.n417 = icmp eq i64 %n.vec412, %20
  br i1 %cmp.n417, label %._crit_edge, label %.lr.ph.preheader423

._crit_edge:                                      ; preds = %.lr.ph, %middle.block407, %.lr.ph327
  %31 = add nsw i32 %12, -1
  %32 = sext i32 %31 to i64
  %33 = load i32, ptr getelementptr inbounds (i8, ptr @row, i64 4), align 4, !tbaa !5
  %34 = sext i32 %33 to i64
  %invariant.op = add nsw i64 %34, -1
  %35 = icmp sgt i32 %33, 0
  br i1 %35, label %.preheader232.lr.ph, label %.preheader234

.preheader232.lr.ph:                              ; preds = %._crit_edge
  %36 = load i32, ptr @row, align 4, !tbaa !5
  %37 = sext i32 %36 to i64
  %38 = add nsw i32 %19, -1
  %39 = sext i32 %38 to i64
  %40 = sext i32 %18 to i64
  %41 = icmp sgt i32 %18, 0
  %42 = sext i32 %19 to i64
  %43 = xor i32 %18, -1
  %44 = sext i32 %43 to i64
  %45 = sext i32 %17 to i64
  %46 = sext i32 %10 to i64
  %47 = add nsw i64 %20, 1
  %48 = sext i32 %12 to i64
  br label %.preheader232

.lr.ph:                                           ; preds = %.lr.ph.preheader423, %.lr.ph
  %.0236 = phi i64 [ %53, %.lr.ph ], [ %.0236.ph, %.lr.ph.preheader423 ]
  %49 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 24000024), i64 0, i64 %.0236
  store i64 0, ptr %49, align 8, !tbaa !9
  %50 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 16000016), i64 0, i64 %.0236
  store i64 0, ptr %50, align 8, !tbaa !9
  %51 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 8000008), i64 0, i64 %.0236
  store i64 0, ptr %51, align 8, !tbaa !9
  %52 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %.0236
  store i64 0, ptr %52, align 8, !tbaa !9
  %53 = add nuw nsw i64 %.0236, 1
  %exitcond.not = icmp eq i64 %53, %20
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !15

.preheader234:                                    ; preds = %._crit_edge265, %._crit_edge
  %ans.promoted313 = phi i64 [ 0, %._crit_edge ], [ %ans.promoted267, %._crit_edge265 ]
  br i1 %21, label %.lr.ph279.preheader, label %.preheader233

.lr.ph279.preheader:                              ; preds = %.preheader234
  %min.iters.check379 = icmp ult i32 %16, 4
  br i1 %min.iters.check379, label %.lr.ph279.preheader422, label %vector.ph380

.lr.ph279.preheader422:                           ; preds = %middle.block377, %.lr.ph279.preheader
  %.0191278.ph = phi i64 [ 0, %.lr.ph279.preheader ], [ %n.vec382, %middle.block377 ]
  br label %.lr.ph279

vector.ph380:                                     ; preds = %.lr.ph279.preheader
  %n.vec382 = and i64 %20, 2147483644
  br label %vector.body384

vector.body384:                                   ; preds = %vector.body384, %vector.ph380
  %index385 = phi i64 [ 0, %vector.ph380 ], [ %index.next386, %vector.body384 ]
  %54 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 24000024), i64 0, i64 %index385
  %55 = getelementptr inbounds i8, ptr %54, i64 16
  store <2 x i64> zeroinitializer, ptr %54, align 8, !tbaa !9
  store <2 x i64> zeroinitializer, ptr %55, align 8, !tbaa !9
  %56 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 16000016), i64 0, i64 %index385
  %57 = getelementptr inbounds i8, ptr %56, i64 16
  store <2 x i64> zeroinitializer, ptr %56, align 16, !tbaa !9
  store <2 x i64> zeroinitializer, ptr %57, align 16, !tbaa !9
  %58 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 8000008), i64 0, i64 %index385
  %59 = getelementptr inbounds i8, ptr %58, i64 16
  store <2 x i64> zeroinitializer, ptr %58, align 8, !tbaa !9
  store <2 x i64> zeroinitializer, ptr %59, align 8, !tbaa !9
  %60 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %index385
  %61 = getelementptr inbounds i8, ptr %60, i64 16
  store <2 x i64> zeroinitializer, ptr %60, align 16, !tbaa !9
  store <2 x i64> zeroinitializer, ptr %61, align 16, !tbaa !9
  %index.next386 = add nuw i64 %index385, 4
  %62 = icmp eq i64 %index.next386, %n.vec382
  br i1 %62, label %middle.block377, label %vector.body384, !llvm.loop !16

middle.block377:                                  ; preds = %vector.body384
  %cmp.n387 = icmp eq i64 %n.vec382, %20
  br i1 %cmp.n387, label %.preheader233, label %.lr.ph279.preheader422

.preheader232:                                    ; preds = %.preheader232.lr.ph, %._crit_edge265
  %.0177276 = phi i64 [ 0, %.preheader232.lr.ph ], [ %.1.lcssa, %._crit_edge265 ]
  %.0192275 = phi i64 [ 0, %.preheader232.lr.ph ], [ %149, %._crit_edge265 ]
  %.0196274 = phi i64 [ 0, %.preheader232.lr.ph ], [ %.1197.lcssa, %._crit_edge265 ]
  %.0205272 = phi i64 [ %32, %.preheader232.lr.ph ], [ %150, %._crit_edge265 ]
  %ans.promoted270271 = phi i64 [ 0, %.preheader232.lr.ph ], [ %ans.promoted267, %._crit_edge265 ]
  %63 = icmp slt i64 %.0177276, %37
  %64 = icmp sle i64 %.0196274, %.0205272
  %65 = select i1 %63, i1 %64, i1 false
  br i1 %65, label %.lr.ph251, label %._crit_edge252

.lr.ph251:                                        ; preds = %.preheader232
  br i1 %41, label %.preheader230.lr.ph.us, label %.lr.ph251.split

.preheader230.lr.ph.us:                           ; preds = %.lr.ph251, %._crit_edge248.us
  %.1250.us = phi i64 [ %136, %._crit_edge248.us ], [ %.0177276, %.lr.ph251 ]
  %.1197249.us = phi i64 [ %137, %._crit_edge248.us ], [ %.0196274, %.lr.ph251 ]
  %66 = mul nsw i64 %.1250.us, %40
  %67 = icmp ne i64 %.1250.us, 0
  br label %.preheader230.us

._crit_edge240.us:                                ; preds = %.lr.ph239.us, %middle.block390, %.preheader230.us
  %.1203.lcssa.us = phi i64 [ %.0202244.us, %.preheader230.us ], [ %135, %middle.block390 ], [ %119, %.lr.ph239.us ]
  %.1200.lcssa.us = phi i64 [ %.0199246.us, %.preheader230.us ], [ %ind.end396, %middle.block390 ], [ %120, %.lr.ph239.us ]
  %68 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %.0198247.us
  %69 = load i8, ptr %68, align 1, !tbaa !17
  %70 = icmp eq i8 %69, 48
  %71 = zext i1 %70 to i32
  %72 = icmp ne i64 %.0204243.us, 0
  %or.cond.us = and i1 %67, %72
  br i1 %or.cond.us, label %.thread.us, label %73

73:                                               ; preds = %._crit_edge240.us
  br i1 %67, label %80, label %86

.thread.us:                                       ; preds = %._crit_edge240.us
  %74 = add i64 %.0198247.us, %44
  %75 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %74
  %76 = load i8, ptr %75, align 1, !tbaa !17
  %77 = icmp eq i8 %76, 48
  %78 = zext i1 %77 to i32
  %79 = add nuw nsw i32 %78, %71
  br label %80

80:                                               ; preds = %.thread.us, %73
  %81 = phi i32 [ %79, %.thread.us ], [ %71, %73 ]
  %82 = sub nsw i64 %.0198247.us, %40
  %83 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %82
  %84 = load i8, ptr %83, align 1, !tbaa !17
  %85 = icmp eq i8 %84, 48
  br label %86

86:                                               ; preds = %80, %73
  %87 = phi i32 [ %71, %73 ], [ %81, %80 ]
  %88 = phi i1 [ false, %73 ], [ %85, %80 ]
  %.neg220.us = sext i1 %88 to i32
  %89 = add nsw i32 %87, %.neg220.us
  br i1 %72, label %90, label %95

90:                                               ; preds = %86
  %91 = add nsw i64 %.0198247.us, -1
  %92 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %91
  %93 = load i8, ptr %92, align 1, !tbaa !17
  %94 = icmp eq i8 %93, 48
  br label %95

95:                                               ; preds = %90, %86
  %96 = phi i1 [ false, %86 ], [ %94, %90 ]
  %.neg221.us = sext i1 %96 to i32
  %97 = add nsw i32 %89, %.neg221.us
  %.not222.us = icmp eq i32 %97, 0
  br i1 %.not222.us, label %115, label %98

98:                                               ; preds = %95
  %99 = sext i32 %97 to i64
  %100 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %.1203.lcssa.us
  %101 = load i64, ptr %100, align 8, !tbaa !9
  %102 = add nsw i64 %101, %99
  store i64 %102, ptr %100, align 8, !tbaa !9
  %103 = mul nsw i64 %.1197249.us, %99
  %104 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 8000008), i64 0, i64 %.1203.lcssa.us
  %105 = load i64, ptr %104, align 8, !tbaa !9
  %106 = add nsw i64 %105, %103
  store i64 %106, ptr %104, align 8, !tbaa !9
  %107 = mul nsw i64 %.0201245.us, %99
  %108 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 16000016), i64 0, i64 %.1203.lcssa.us
  %109 = load i64, ptr %108, align 8, !tbaa !9
  %110 = add nsw i64 %109, %107
  store i64 %110, ptr %108, align 8, !tbaa !9
  %111 = mul nsw i64 %103, %.0201245.us
  %112 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 24000024), i64 0, i64 %.1203.lcssa.us
  %113 = load i64, ptr %112, align 8, !tbaa !9
  %114 = add nsw i64 %113, %111
  store i64 %114, ptr %112, align 8, !tbaa !9
  br label %115

115:                                              ; preds = %98, %95
  %116 = add nuw nsw i64 %.0204243.us, 1
  %117 = add nsw i64 %.0201245.us, %45
  %118 = add nsw i64 %.0198247.us, 1
  %exitcond342.not = icmp eq i64 %116, %40
  br i1 %exitcond342.not, label %._crit_edge248.us, label %.preheader230.us, !llvm.loop !18

.lr.ph239.us:                                     ; preds = %.lr.ph239.us.preheader419, %.lr.ph239.us
  %.1200238.us = phi i64 [ %120, %.lr.ph239.us ], [ %.1200238.us.ph, %.lr.ph239.us.preheader419 ]
  %.1203237.us = phi i64 [ %119, %.lr.ph239.us ], [ %.1203237.us.ph, %.lr.ph239.us.preheader419 ]
  %119 = add nsw i64 %.1203237.us, 1
  %120 = add nsw i64 %.1200238.us, %42
  %121 = icmp sgt i64 %.0201245.us, %120
  br i1 %121, label %.lr.ph239.us, label %._crit_edge240.us, !llvm.loop !19

.preheader230.us:                                 ; preds = %.preheader230.lr.ph.us, %115
  %.0198247.us = phi i64 [ %66, %.preheader230.lr.ph.us ], [ %118, %115 ]
  %.0199246.us = phi i64 [ %39, %.preheader230.lr.ph.us ], [ %.1200.lcssa.us, %115 ]
  %.0201245.us = phi i64 [ 0, %.preheader230.lr.ph.us ], [ %117, %115 ]
  %.0202244.us = phi i64 [ 0, %.preheader230.lr.ph.us ], [ %.1203.lcssa.us, %115 ]
  %.0204243.us = phi i64 [ 0, %.preheader230.lr.ph.us ], [ %116, %115 ]
  %122 = icmp sgt i64 %.0201245.us, %.0199246.us
  br i1 %122, label %.lr.ph239.us.preheader, label %._crit_edge240.us

.lr.ph239.us.preheader:                           ; preds = %.preheader230.us
  %123 = add i64 %.0199246.us, %42
  %smax388 = tail call i64 @llvm.smax.i64(i64 %.0201245.us, i64 %123)
  %124 = icmp slt i64 %123, %.0201245.us
  %umin389.neg = sext i1 %124 to i64
  %125 = select i1 %124, i64 2, i64 1
  %126 = add i64 %smax388, %umin389.neg
  %127 = sub i64 %126, %123
  %128 = udiv i64 %127, %42
  %129 = add i64 %125, %128
  %min.iters.check392 = icmp ult i64 %129, 4
  br i1 %min.iters.check392, label %.lr.ph239.us.preheader419, label %vector.ph393

.lr.ph239.us.preheader419:                        ; preds = %middle.block390, %.lr.ph239.us.preheader
  %.1200238.us.ph = phi i64 [ %.0199246.us, %.lr.ph239.us.preheader ], [ %ind.end396, %middle.block390 ]
  %.1203237.us.ph = phi i64 [ %.0202244.us, %.lr.ph239.us.preheader ], [ %135, %middle.block390 ]
  br label %.lr.ph239.us

vector.ph393:                                     ; preds = %.lr.ph239.us.preheader
  %n.vec395 = and i64 %129, -4
  %130 = mul i64 %n.vec395, %42
  %ind.end396 = add i64 %.0199246.us, %130
  %131 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %.0202244.us, i64 0
  br label %vector.body398

vector.body398:                                   ; preds = %vector.body398, %vector.ph393
  %index399 = phi i64 [ 0, %vector.ph393 ], [ %index.next403, %vector.body398 ]
  %vec.phi400 = phi <2 x i64> [ %131, %vector.ph393 ], [ %132, %vector.body398 ]
  %vec.phi401 = phi <2 x i64> [ zeroinitializer, %vector.ph393 ], [ %133, %vector.body398 ]
  %132 = add <2 x i64> %vec.phi400, <i64 1, i64 1>
  %133 = add <2 x i64> %vec.phi401, <i64 1, i64 1>
  %index.next403 = add nuw i64 %index399, 4
  %134 = icmp eq i64 %index.next403, %n.vec395
  br i1 %134, label %middle.block390, label %vector.body398, !llvm.loop !20

middle.block390:                                  ; preds = %vector.body398
  %bin.rdx404 = add <2 x i64> %133, %132
  %135 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx404)
  %cmp.n405 = icmp eq i64 %129, %n.vec395
  br i1 %cmp.n405, label %._crit_edge240.us, label %.lr.ph239.us.preheader419

._crit_edge248.us:                                ; preds = %115
  %136 = add nsw i64 %.1250.us, 1
  %137 = add nsw i64 %.1197249.us, %46
  %138 = icmp slt i64 %136, %37
  %139 = icmp sle i64 %137, %.0205272
  %140 = select i1 %138, i1 %139, i1 false
  br i1 %140, label %.preheader230.lr.ph.us, label %._crit_edge252, !llvm.loop !21

.lr.ph251.split:                                  ; preds = %.lr.ph251, %.lr.ph251.split
  %.1250 = phi i64 [ %141, %.lr.ph251.split ], [ %.0177276, %.lr.ph251 ]
  %.1197249 = phi i64 [ %142, %.lr.ph251.split ], [ %.0196274, %.lr.ph251 ]
  %141 = add nsw i64 %.1250, 1
  %142 = add nsw i64 %.1197249, %46
  %143 = icmp slt i64 %141, %37
  %144 = icmp sle i64 %142, %.0205272
  %145 = select i1 %143, i1 %144, i1 false
  br i1 %145, label %.lr.ph251.split, label %._crit_edge252, !llvm.loop !21

._crit_edge252:                                   ; preds = %.lr.ph251.split, %._crit_edge248.us, %.preheader232
  %.1197.lcssa = phi i64 [ %.0196274, %.preheader232 ], [ %137, %._crit_edge248.us ], [ %142, %.lr.ph251.split ]
  %.1.lcssa = phi i64 [ %.0177276, %.preheader232 ], [ %136, %._crit_edge248.us ], [ %141, %.lr.ph251.split ]
  br i1 %21, label %.lr.ph264, label %._crit_edge265

.lr.ph264:                                        ; preds = %._crit_edge252
  %146 = mul nuw nsw i64 %.0192275, %20
  %147 = icmp slt i64 %.0192275, %invariant.op
  %148 = add nsw i64 %.0205272, 1
  %factor.op.mul = xor i64 %.0205272, -1
  br label %151

._crit_edge265:                                   ; preds = %206, %._crit_edge252
  %ans.promoted267 = phi i64 [ %ans.promoted270271, %._crit_edge252 ], [ %ans.promoted268, %206 ]
  %149 = add nuw nsw i64 %.0192275, 1
  %150 = add nsw i64 %.0205272, %48
  %exitcond344.not = icmp eq i64 %149, %34
  br i1 %exitcond344.not, label %.preheader234, label %.preheader232, !llvm.loop !22

151:                                              ; preds = %.lr.ph264, %206
  %ans.promoted269 = phi i64 [ %ans.promoted270271, %.lr.ph264 ], [ %ans.promoted268, %206 ]
  %.sroa.1285.2262 = phi i64 [ 0, %.lr.ph264 ], [ %164, %206 ]
  %.sroa.983.2261 = phi i64 [ 0, %.lr.ph264 ], [ %161, %206 ]
  %.sroa.681.2260 = phi i64 [ 0, %.lr.ph264 ], [ %158, %206 ]
  %.sroa.079.2259 = phi i64 [ 0, %.lr.ph264 ], [ %155, %206 ]
  %.0193258 = phi i64 [ %146, %.lr.ph264 ], [ %209, %206 ]
  %.0194257 = phi i64 [ %39, %.lr.ph264 ], [ %208, %206 ]
  %.0195256 = phi i64 [ 0, %.lr.ph264 ], [ %169, %206 ]
  %152 = phi i64 [ %ans.promoted270271, %.lr.ph264 ], [ %207, %206 ]
  %153 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %.0195256
  %154 = load i64, ptr %153, align 8, !tbaa !9
  %155 = add nsw i64 %154, %.sroa.079.2259
  %156 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 8000008), i64 0, i64 %.0195256
  %157 = load i64, ptr %156, align 8, !tbaa !9
  %158 = add nsw i64 %157, %.sroa.681.2260
  %159 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 16000016), i64 0, i64 %.0195256
  %160 = load i64, ptr %159, align 8, !tbaa !9
  %161 = add nsw i64 %160, %.sroa.983.2261
  %162 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 24000024), i64 0, i64 %.0195256
  %163 = load i64, ptr %162, align 8, !tbaa !9
  %164 = add nsw i64 %163, %.sroa.1285.2262
  %165 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds (i8, ptr @buf, i64 1000001), i64 0, i64 %.0193258
  %166 = load i8, ptr %165, align 1, !tbaa !17
  %167 = icmp eq i8 %166, 48
  %168 = zext i1 %167 to i32
  %169 = add nuw nsw i64 %.0195256, 1
  %170 = icmp slt i64 %169, %20
  %or.cond224 = select i1 %147, i1 %170, i1 false
  br i1 %or.cond224, label %171, label %176

171:                                              ; preds = %151
  %172 = add nuw i64 %47, %.0193258
  %173 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds (i8, ptr @buf, i64 1000001), i64 0, i64 %172
  %174 = load i8, ptr %173, align 1, !tbaa !17
  %175 = icmp eq i8 %174, 48
  br label %176

176:                                              ; preds = %171, %151
  %177 = phi i1 [ false, %151 ], [ %175, %171 ]
  %178 = zext i1 %177 to i32
  %179 = add nuw nsw i32 %178, %168
  br i1 %147, label %180, label %185

180:                                              ; preds = %176
  %181 = add nuw nsw i64 %.0193258, %20
  %182 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds (i8, ptr @buf, i64 1000001), i64 0, i64 %181
  %183 = load i8, ptr %182, align 1, !tbaa !17
  %184 = icmp eq i8 %183, 48
  br label %185

185:                                              ; preds = %180, %176
  %186 = phi i1 [ false, %176 ], [ %184, %180 ]
  %.neg217 = sext i1 %186 to i32
  %187 = add nsw i32 %179, %.neg217
  br i1 %170, label %188, label %193

188:                                              ; preds = %185
  %189 = add nuw nsw i64 %.0193258, 1
  %190 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds (i8, ptr @buf, i64 1000001), i64 0, i64 %189
  %191 = load i8, ptr %190, align 1, !tbaa !17
  %192 = icmp eq i8 %191, 48
  br label %193

193:                                              ; preds = %188, %185
  %194 = phi i1 [ false, %185 ], [ %192, %188 ]
  %.neg218 = sext i1 %194 to i32
  %195 = add nsw i32 %187, %.neg218
  %.not219 = icmp eq i32 %195, 0
  br i1 %.not219, label %206, label %196

196:                                              ; preds = %193
  %197 = sext i32 %195 to i64
  %198 = mul nsw i64 %155, %148
  %199 = add nsw i64 %.0194257, 1
  %200 = sub i64 %198, %158
  %201 = mul i64 %200, %199
  %.reass = mul i64 %161, %factor.op.mul
  %202 = add i64 %164, %201
  %203 = add i64 %202, %.reass
  %204 = mul nsw i64 %203, %197
  %205 = add nsw i64 %152, %204
  store i64 %205, ptr @ans, align 8, !tbaa !9
  br label %206

206:                                              ; preds = %196, %193
  %ans.promoted268 = phi i64 [ %205, %196 ], [ %ans.promoted269, %193 ]
  %207 = phi i64 [ %205, %196 ], [ %152, %193 ]
  %208 = add nsw i64 %.0194257, %42
  %209 = add nuw nsw i64 %.0193258, 1
  %exitcond343.not = icmp eq i64 %169, %20
  br i1 %exitcond343.not, label %._crit_edge265, label %151, !llvm.loop !23

.preheader233:                                    ; preds = %.lr.ph279, %middle.block377, %.preheader234
  br i1 %35, label %.preheader231.lr.ph, label %._crit_edge324

.preheader231.lr.ph:                              ; preds = %.preheader233
  %210 = load i32, ptr @row, align 4, !tbaa !5
  %211 = sext i32 %210 to i64
  %212 = add nsw i32 %19, -1
  %213 = sext i32 %212 to i64
  %214 = sext i32 %18 to i64
  %215 = icmp sgt i32 %18, 0
  %216 = sext i32 %19 to i64
  %217 = xor i32 %18, -1
  %218 = sext i32 %217 to i64
  %219 = sext i32 %17 to i64
  %220 = sext i32 %10 to i64
  %221 = add nsw i64 %20, 1
  %222 = sext i32 %12 to i64
  br label %.preheader231

.lr.ph279:                                        ; preds = %.lr.ph279.preheader422, %.lr.ph279
  %.0191278 = phi i64 [ %227, %.lr.ph279 ], [ %.0191278.ph, %.lr.ph279.preheader422 ]
  %223 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 24000024), i64 0, i64 %.0191278
  store i64 0, ptr %223, align 8, !tbaa !9
  %224 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 16000016), i64 0, i64 %.0191278
  store i64 0, ptr %224, align 8, !tbaa !9
  %225 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 8000008), i64 0, i64 %.0191278
  store i64 0, ptr %225, align 8, !tbaa !9
  %226 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %.0191278
  store i64 0, ptr %226, align 8, !tbaa !9
  %227 = add nuw nsw i64 %.0191278, 1
  %exitcond345.not = icmp eq i64 %227, %20
  br i1 %exitcond345.not, label %.preheader233, label %.lr.ph279, !llvm.loop !24

.preheader231:                                    ; preds = %.preheader231.lr.ph, %._crit_edge309
  %.0185322 = phi i64 [ %32, %.preheader231.lr.ph ], [ %319, %._crit_edge309 ]
  %.0186321 = phi i64 [ 0, %.preheader231.lr.ph ], [ %.1187.lcssa, %._crit_edge309 ]
  %.0188320 = phi i64 [ 0, %.preheader231.lr.ph ], [ %318, %._crit_edge309 ]
  %.0189319 = phi i64 [ 0, %.preheader231.lr.ph ], [ %.1190.lcssa, %._crit_edge309 ]
  %ans.promoted317318 = phi i64 [ %ans.promoted313, %.preheader231.lr.ph ], [ %ans.promoted314, %._crit_edge309 ]
  %228 = icmp slt i64 %.0189319, %211
  %229 = icmp sle i64 %.0186321, %.0185322
  %230 = select i1 %228, i1 %229, i1 false
  br i1 %230, label %.lr.ph294, label %._crit_edge295

.lr.ph294:                                        ; preds = %.preheader231
  br i1 %215, label %.preheader.lr.ph.us, label %.lr.ph294.split

.preheader.lr.ph.us:                              ; preds = %.lr.ph294, %._crit_edge291.us
  %.1187293.us = phi i64 [ %302, %._crit_edge291.us ], [ %.0186321, %.lr.ph294 ]
  %.1190292.us = phi i64 [ %301, %._crit_edge291.us ], [ %.0189319, %.lr.ph294 ]
  %231 = mul nsw i64 %.1190292.us, %214
  %232 = icmp ne i64 %.1190292.us, 0
  br label %.preheader.us

._crit_edge283.us:                                ; preds = %.lr.ph282.us, %middle.block, %.preheader.us
  %.1183.lcssa.us = phi i64 [ %.0182287.us, %.preheader.us ], [ %300, %middle.block ], [ %284, %.lr.ph282.us ]
  %.1180.lcssa.us = phi i64 [ %.0179289.us, %.preheader.us ], [ %ind.end, %middle.block ], [ %285, %.lr.ph282.us ]
  %233 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %.0178290.us
  %234 = load i8, ptr %233, align 1, !tbaa !17
  %235 = icmp eq i8 %234, 49
  %236 = zext i1 %235 to i32
  %237 = icmp ne i64 %.0184286.us, 0
  %or.cond3.us = and i1 %232, %237
  br i1 %or.cond3.us, label %.thread227.us, label %238

238:                                              ; preds = %._crit_edge283.us
  br i1 %232, label %245, label %251

.thread227.us:                                    ; preds = %._crit_edge283.us
  %239 = add i64 %.0178290.us, %218
  %240 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %239
  %241 = load i8, ptr %240, align 1, !tbaa !17
  %242 = icmp eq i8 %241, 49
  %243 = zext i1 %242 to i32
  %244 = add nuw nsw i32 %243, %236
  br label %245

245:                                              ; preds = %.thread227.us, %238
  %246 = phi i32 [ %244, %.thread227.us ], [ %236, %238 ]
  %247 = sub nsw i64 %.0178290.us, %214
  %248 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %247
  %249 = load i8, ptr %248, align 1, !tbaa !17
  %250 = icmp eq i8 %249, 49
  br label %251

251:                                              ; preds = %245, %238
  %252 = phi i32 [ %236, %238 ], [ %246, %245 ]
  %253 = phi i1 [ false, %238 ], [ %250, %245 ]
  %.neg214.us = sext i1 %253 to i32
  %254 = add nsw i32 %252, %.neg214.us
  br i1 %237, label %255, label %260

255:                                              ; preds = %251
  %256 = add nsw i64 %.0178290.us, -1
  %257 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %256
  %258 = load i8, ptr %257, align 1, !tbaa !17
  %259 = icmp eq i8 %258, 49
  br label %260

260:                                              ; preds = %255, %251
  %261 = phi i1 [ false, %251 ], [ %259, %255 ]
  %.neg215.us = sext i1 %261 to i32
  %262 = add nsw i32 %254, %.neg215.us
  %.not216.us = icmp eq i32 %262, 0
  br i1 %.not216.us, label %280, label %263

263:                                              ; preds = %260
  %264 = sext i32 %262 to i64
  %265 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %.1183.lcssa.us
  %266 = load i64, ptr %265, align 8, !tbaa !9
  %267 = add nsw i64 %266, %264
  store i64 %267, ptr %265, align 8, !tbaa !9
  %268 = mul nsw i64 %.1187293.us, %264
  %269 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 8000008), i64 0, i64 %.1183.lcssa.us
  %270 = load i64, ptr %269, align 8, !tbaa !9
  %271 = add nsw i64 %270, %268
  store i64 %271, ptr %269, align 8, !tbaa !9
  %272 = mul nsw i64 %.0181288.us, %264
  %273 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 16000016), i64 0, i64 %.1183.lcssa.us
  %274 = load i64, ptr %273, align 8, !tbaa !9
  %275 = add nsw i64 %274, %272
  store i64 %275, ptr %273, align 8, !tbaa !9
  %276 = mul nsw i64 %268, %.0181288.us
  %277 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 24000024), i64 0, i64 %.1183.lcssa.us
  %278 = load i64, ptr %277, align 8, !tbaa !9
  %279 = add nsw i64 %278, %276
  store i64 %279, ptr %277, align 8, !tbaa !9
  br label %280

280:                                              ; preds = %263, %260
  %281 = add nuw nsw i64 %.0184286.us, 1
  %282 = add nsw i64 %.0181288.us, %219
  %283 = add nsw i64 %.0178290.us, 1
  %exitcond346.not = icmp eq i64 %281, %214
  br i1 %exitcond346.not, label %._crit_edge291.us, label %.preheader.us, !llvm.loop !25

.lr.ph282.us:                                     ; preds = %.lr.ph282.us.preheader418, %.lr.ph282.us
  %.1180281.us = phi i64 [ %285, %.lr.ph282.us ], [ %.1180281.us.ph, %.lr.ph282.us.preheader418 ]
  %.1183280.us = phi i64 [ %284, %.lr.ph282.us ], [ %.1183280.us.ph, %.lr.ph282.us.preheader418 ]
  %284 = add nsw i64 %.1183280.us, 1
  %285 = add nsw i64 %.1180281.us, %216
  %286 = icmp sgt i64 %.0181288.us, %285
  br i1 %286, label %.lr.ph282.us, label %._crit_edge283.us, !llvm.loop !26

.preheader.us:                                    ; preds = %.preheader.lr.ph.us, %280
  %.0178290.us = phi i64 [ %231, %.preheader.lr.ph.us ], [ %283, %280 ]
  %.0179289.us = phi i64 [ %213, %.preheader.lr.ph.us ], [ %.1180.lcssa.us, %280 ]
  %.0181288.us = phi i64 [ 0, %.preheader.lr.ph.us ], [ %282, %280 ]
  %.0182287.us = phi i64 [ 0, %.preheader.lr.ph.us ], [ %.1183.lcssa.us, %280 ]
  %.0184286.us = phi i64 [ 0, %.preheader.lr.ph.us ], [ %281, %280 ]
  %287 = icmp sgt i64 %.0181288.us, %.0179289.us
  br i1 %287, label %.lr.ph282.us.preheader, label %._crit_edge283.us

.lr.ph282.us.preheader:                           ; preds = %.preheader.us
  %288 = add i64 %.0179289.us, %216
  %smax = tail call i64 @llvm.smax.i64(i64 %.0181288.us, i64 %288)
  %289 = icmp slt i64 %288, %.0181288.us
  %umin.neg = sext i1 %289 to i64
  %290 = select i1 %289, i64 2, i64 1
  %291 = add i64 %smax, %umin.neg
  %292 = sub i64 %291, %288
  %293 = udiv i64 %292, %216
  %294 = add i64 %290, %293
  %min.iters.check = icmp ult i64 %294, 4
  br i1 %min.iters.check, label %.lr.ph282.us.preheader418, label %vector.ph

.lr.ph282.us.preheader418:                        ; preds = %middle.block, %.lr.ph282.us.preheader
  %.1180281.us.ph = phi i64 [ %.0179289.us, %.lr.ph282.us.preheader ], [ %ind.end, %middle.block ]
  %.1183280.us.ph = phi i64 [ %.0182287.us, %.lr.ph282.us.preheader ], [ %300, %middle.block ]
  br label %.lr.ph282.us

vector.ph:                                        ; preds = %.lr.ph282.us.preheader
  %n.vec = and i64 %294, -4
  %295 = mul i64 %n.vec, %216
  %ind.end = add i64 %.0179289.us, %295
  %296 = insertelement <2 x i64> <i64 poison, i64 0>, i64 %.0182287.us, i64 0
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.phi = phi <2 x i64> [ %296, %vector.ph ], [ %297, %vector.body ]
  %vec.phi376 = phi <2 x i64> [ zeroinitializer, %vector.ph ], [ %298, %vector.body ]
  %297 = add <2 x i64> %vec.phi, <i64 1, i64 1>
  %298 = add <2 x i64> %vec.phi376, <i64 1, i64 1>
  %index.next = add nuw i64 %index, 4
  %299 = icmp eq i64 %index.next, %n.vec
  br i1 %299, label %middle.block, label %vector.body, !llvm.loop !27

middle.block:                                     ; preds = %vector.body
  %bin.rdx = add <2 x i64> %298, %297
  %300 = tail call i64 @llvm.vector.reduce.add.v2i64(<2 x i64> %bin.rdx)
  %cmp.n = icmp eq i64 %294, %n.vec
  br i1 %cmp.n, label %._crit_edge283.us, label %.lr.ph282.us.preheader418

._crit_edge291.us:                                ; preds = %280
  %301 = add nsw i64 %.1190292.us, 1
  %302 = add nsw i64 %.1187293.us, %220
  %303 = icmp slt i64 %301, %211
  %304 = icmp sle i64 %302, %.0185322
  %305 = select i1 %303, i1 %304, i1 false
  br i1 %305, label %.preheader.lr.ph.us, label %._crit_edge295, !llvm.loop !28

._crit_edge324:                                   ; preds = %._crit_edge309, %.preheader233
  %306 = phi i64 [ %ans.promoted313, %.preheader233 ], [ %ans.promoted314, %._crit_edge309 ]
  %307 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, i64 noundef %306)
  %308 = load i32, ptr @t, align 4, !tbaa !5
  %309 = add nsw i32 %308, -1
  store i32 %309, ptr @t, align 4, !tbaa !5
  %.not = icmp eq i32 %308, 0
  br i1 %.not, label %._crit_edge328, label %.lr.ph327, !llvm.loop !29

.lr.ph294.split:                                  ; preds = %.lr.ph294, %.lr.ph294.split
  %.1187293 = phi i64 [ %311, %.lr.ph294.split ], [ %.0186321, %.lr.ph294 ]
  %.1190292 = phi i64 [ %310, %.lr.ph294.split ], [ %.0189319, %.lr.ph294 ]
  %310 = add nsw i64 %.1190292, 1
  %311 = add nsw i64 %.1187293, %220
  %312 = icmp slt i64 %310, %211
  %313 = icmp sle i64 %311, %.0185322
  %314 = select i1 %312, i1 %313, i1 false
  br i1 %314, label %.lr.ph294.split, label %._crit_edge295, !llvm.loop !28

._crit_edge295:                                   ; preds = %.lr.ph294.split, %._crit_edge291.us, %.preheader231
  %.1190.lcssa = phi i64 [ %.0189319, %.preheader231 ], [ %301, %._crit_edge291.us ], [ %310, %.lr.ph294.split ]
  %.1187.lcssa = phi i64 [ %.0186321, %.preheader231 ], [ %302, %._crit_edge291.us ], [ %311, %.lr.ph294.split ]
  br i1 %21, label %.lr.ph308, label %._crit_edge309

.lr.ph308:                                        ; preds = %._crit_edge295
  %315 = mul nuw nsw i64 %.0188320, %20
  %316 = icmp slt i64 %.0188320, %invariant.op
  %317 = add nsw i64 %.0185322, 1
  %factor.op.mul310 = xor i64 %.0185322, -1
  br label %320

._crit_edge309:                                   ; preds = %375, %._crit_edge295
  %ans.promoted314 = phi i64 [ %ans.promoted317318, %._crit_edge295 ], [ %ans.promoted315, %375 ]
  %318 = add nuw nsw i64 %.0188320, 1
  %319 = add nsw i64 %.0185322, %222
  %exitcond348.not = icmp eq i64 %318, %34
  br i1 %exitcond348.not, label %._crit_edge324, label %.preheader231, !llvm.loop !30

320:                                              ; preds = %.lr.ph308, %375
  %ans.promoted316 = phi i64 [ %ans.promoted317318, %.lr.ph308 ], [ %ans.promoted315, %375 ]
  %.sroa.12.2306 = phi i64 [ 0, %.lr.ph308 ], [ %333, %375 ]
  %.sroa.9.2305 = phi i64 [ 0, %.lr.ph308 ], [ %330, %375 ]
  %.sroa.6.2304 = phi i64 [ 0, %.lr.ph308 ], [ %327, %375 ]
  %.sroa.0.2303 = phi i64 [ 0, %.lr.ph308 ], [ %324, %375 ]
  %.0174302 = phi i64 [ %315, %.lr.ph308 ], [ %378, %375 ]
  %.0175301 = phi i64 [ %213, %.lr.ph308 ], [ %377, %375 ]
  %.0176300 = phi i64 [ 0, %.lr.ph308 ], [ %338, %375 ]
  %321 = phi i64 [ %ans.promoted317318, %.lr.ph308 ], [ %376, %375 ]
  %322 = getelementptr inbounds [1000001 x i64], ptr @cnt, i64 0, i64 %.0176300
  %323 = load i64, ptr %322, align 8, !tbaa !9
  %324 = add nsw i64 %323, %.sroa.0.2303
  %325 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 8000008), i64 0, i64 %.0176300
  %326 = load i64, ptr %325, align 8, !tbaa !9
  %327 = add nsw i64 %326, %.sroa.6.2304
  %328 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 16000016), i64 0, i64 %.0176300
  %329 = load i64, ptr %328, align 8, !tbaa !9
  %330 = add nsw i64 %329, %.sroa.9.2305
  %331 = getelementptr inbounds [1000001 x i64], ptr getelementptr inbounds (i8, ptr @cnt, i64 24000024), i64 0, i64 %.0176300
  %332 = load i64, ptr %331, align 8, !tbaa !9
  %333 = add nsw i64 %332, %.sroa.12.2306
  %334 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds (i8, ptr @buf, i64 1000001), i64 0, i64 %.0174302
  %335 = load i8, ptr %334, align 1, !tbaa !17
  %336 = icmp eq i8 %335, 49
  %337 = zext i1 %336 to i32
  %338 = add nuw nsw i64 %.0176300, 1
  %339 = icmp slt i64 %338, %20
  %or.cond226 = select i1 %316, i1 %339, i1 false
  br i1 %or.cond226, label %340, label %345

340:                                              ; preds = %320
  %341 = add nuw i64 %221, %.0174302
  %342 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds (i8, ptr @buf, i64 1000001), i64 0, i64 %341
  %343 = load i8, ptr %342, align 1, !tbaa !17
  %344 = icmp eq i8 %343, 49
  br label %345

345:                                              ; preds = %340, %320
  %346 = phi i1 [ false, %320 ], [ %344, %340 ]
  %347 = zext i1 %346 to i32
  %348 = add nuw nsw i32 %347, %337
  br i1 %316, label %349, label %354

349:                                              ; preds = %345
  %350 = add nuw nsw i64 %.0174302, %20
  %351 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds (i8, ptr @buf, i64 1000001), i64 0, i64 %350
  %352 = load i8, ptr %351, align 1, !tbaa !17
  %353 = icmp eq i8 %352, 49
  br label %354

354:                                              ; preds = %349, %345
  %355 = phi i1 [ false, %345 ], [ %353, %349 ]
  %.neg = sext i1 %355 to i32
  %356 = add nsw i32 %348, %.neg
  br i1 %339, label %357, label %362

357:                                              ; preds = %354
  %358 = add nuw nsw i64 %.0174302, 1
  %359 = getelementptr inbounds [1000001 x i8], ptr getelementptr inbounds (i8, ptr @buf, i64 1000001), i64 0, i64 %358
  %360 = load i8, ptr %359, align 1, !tbaa !17
  %361 = icmp eq i8 %360, 49
  br label %362

362:                                              ; preds = %357, %354
  %363 = phi i1 [ false, %354 ], [ %361, %357 ]
  %.neg212 = sext i1 %363 to i32
  %364 = add nsw i32 %356, %.neg212
  %.not213 = icmp eq i32 %364, 0
  br i1 %.not213, label %375, label %365

365:                                              ; preds = %362
  %366 = sext i32 %364 to i64
  %367 = mul nsw i64 %324, %317
  %368 = add nsw i64 %.0175301, 1
  %369 = sub i64 %367, %327
  %370 = mul i64 %369, %368
  %.reass311 = mul i64 %330, %factor.op.mul310
  %371 = add i64 %333, %370
  %372 = add i64 %371, %.reass311
  %373 = mul nsw i64 %372, %366
  %374 = add nsw i64 %321, %373
  store i64 %374, ptr @ans, align 8, !tbaa !9
  br label %375

375:                                              ; preds = %365, %362
  %ans.promoted315 = phi i64 [ %374, %365 ], [ %ans.promoted316, %362 ]
  %376 = phi i64 [ %374, %365 ], [ %321, %362 ]
  %377 = add nsw i64 %.0175301, %216
  %378 = add nuw nsw i64 %.0174302, 1
  %exitcond347.not = icmp eq i64 %338, %20
  br i1 %exitcond347.not, label %._crit_edge309, label %320, !llvm.loop !31

._crit_edge328:                                   ; preds = %._crit_edge324, %0
  ret i32 0
}

; Function Attrs: nofree nounwind
declare noundef i32 @__isoc99_scanf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef, i32 noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #1

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.vector.reduce.add.v2i64(<2 x i64>) #3

attributes #0 = { mustprogress norecurse nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long long", !7, i64 0}
!11 = distinct !{!11, !12, !13, !14}
!12 = !{!"llvm.loop.mustprogress"}
!13 = !{!"llvm.loop.isvectorized", i32 1}
!14 = !{!"llvm.loop.unroll.runtime.disable"}
!15 = distinct !{!15, !12, !14, !13}
!16 = distinct !{!16, !12, !13, !14}
!17 = !{!7, !7, i64 0}
!18 = distinct !{!18, !12}
!19 = distinct !{!19, !12, !14, !13}
!20 = distinct !{!20, !12, !13, !14}
!21 = distinct !{!21, !12}
!22 = distinct !{!22, !12}
!23 = distinct !{!23, !12}
!24 = distinct !{!24, !12, !14, !13}
!25 = distinct !{!25, !12}
!26 = distinct !{!26, !12, !14, !13}
!27 = distinct !{!27, !12, !13, !14}
!28 = distinct !{!28, !12}
!29 = distinct !{!29, !12}
!30 = distinct !{!30, !12}
!31 = distinct !{!31, !12}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalDCEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass