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

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

@n = external dso_local global i32, align 4
@m = external dso_local global i32, align 4
@q = external dso_local global i32, align 4
@mat = external dso_local global [1001 x [1001 x i32]], align 16
@pos = external dso_local global [1001 x [1001 x i32]], align 16
@ord = external dso_local global [1000001 x i32], align 16
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@_ZZ4mainE3vis = external hidden global [1001 x [1001 x i8]], align 16
@_ZL2dx = external hidden constant [4 x i32], align 16
@_ZL2dy = external hidden constant [4 x i32], align 16
@_ZZ4mainE3vis_0 = external hidden global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_1 = external hidden global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_2 = external hidden global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_3 = external hidden global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_4 = external hidden global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_5 = external hidden global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_6 = external hidden global [1001 x [1001 x i8]], align 16
@.str.2 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [3 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z5solveb(i1 noundef zeroext) #0

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt7reverseIPiEvT_S1_(ptr noundef, ptr noundef) #2

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() #3 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca i32, align 4
  %38 = alloca i32, align 4
  %39 = alloca i32, align 4
  %40 = alloca i32, align 4
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  %52 = alloca i32, align 4
  %53 = alloca i32, align 4
  %54 = alloca i32, align 4
  %55 = alloca i32, align 4
  %56 = alloca i32, align 4
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca i32, align 4
  %60 = alloca i32, align 4
  %61 = alloca i32, align 4
  %62 = alloca i32, align 4
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca i32, align 4
  %67 = alloca i32, align 4
  %68 = alloca i32, align 4
  %69 = alloca i32, align 4
  %70 = alloca i32, align 4
  %71 = alloca i32, align 4
  %72 = alloca i32, align 4
  %73 = alloca i32, align 4
  %74 = alloca i32, align 4
  %75 = alloca i32, align 4
  %76 = alloca i32, align 4
  %77 = alloca i32, align 4
  %78 = alloca i32, align 4
  %79 = alloca i32, align 4
  %80 = alloca i32, align 4
  %81 = alloca i8, align 1
  %82 = alloca i8, align 1
  %83 = alloca i32, align 4
  %84 = alloca i32, align 4
  %85 = alloca i32, align 4
  %86 = alloca i32, align 4
  %87 = alloca i32, align 4
  %88 = alloca i32, align 4
  %89 = alloca i32, align 4
  %90 = alloca i32, align 4
  %91 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %92 = call i64 @time(ptr noundef null) #6
  %93 = trunc i64 %92 to i32
  call void @srand(i32 noundef %93) #6
  %94 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str, ptr noundef @n, ptr noundef @m, ptr noundef @q)
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #6
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %95

95:                                               ; preds = %119, %0
  %96 = load i32, ptr %2, align 4, !tbaa !5
  %97 = load i32, ptr @n, align 4, !tbaa !5
  %98 = icmp slt i32 %96, %97
  br i1 %98, label %100, label %99

99:                                               ; preds = %95
  store i32 2, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #6
  br label %122

100:                                              ; preds = %95
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  store i32 0, ptr %4, align 4, !tbaa !5
  br label %101

101:                                              ; preds = %115, %100
  %102 = load i32, ptr %4, align 4, !tbaa !5
  %103 = load i32, ptr @m, align 4, !tbaa !5
  %104 = icmp slt i32 %102, %103
  br i1 %104, label %106, label %105

105:                                              ; preds = %101
  store i32 5, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #6
  br label %118

106:                                              ; preds = %101
  %107 = load i32, ptr %2, align 4, !tbaa !5
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds [1001 x [1001 x i32]], ptr @mat, i64 0, i64 %108
  %110 = getelementptr inbounds [1001 x i32], ptr %109, i64 0, i64 0
  %111 = load i32, ptr %4, align 4, !tbaa !5
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds i32, ptr %110, i64 %112
  %114 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str.1, ptr noundef %113)
  br label %115

115:                                              ; preds = %106
  %116 = load i32, ptr %4, align 4, !tbaa !5
  %117 = add nsw i32 %116, 1
  store i32 %117, ptr %4, align 4, !tbaa !5
  br label %101, !llvm.loop !9

118:                                              ; preds = %105
  br label %119

119:                                              ; preds = %118
  %120 = load i32, ptr %2, align 4, !tbaa !5
  %121 = add nsw i32 %120, 1
  store i32 %121, ptr %2, align 4, !tbaa !5
  br label %95, !llvm.loop !11

122:                                              ; preds = %99
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #6
  store i32 0, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #6
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %123

123:                                              ; preds = %174, %122
  %124 = load i32, ptr %6, align 4, !tbaa !5
  %125 = load i32, ptr @n, align 4, !tbaa !5
  %126 = icmp slt i32 %124, %125
  br i1 %126, label %128, label %127

127:                                              ; preds = %123
  store i32 8, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  br label %177

128:                                              ; preds = %123
  %129 = load i32, ptr %6, align 4, !tbaa !5
  %130 = and i32 %129, 1
  %131 = icmp ne i32 %130, 0
  br i1 %131, label %132, label %153

132:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  %133 = load i32, ptr @m, align 4, !tbaa !5
  %134 = sub nsw i32 %133, 1
  store i32 %134, ptr %7, align 4, !tbaa !5
  br label %135

135:                                              ; preds = %149, %132
  %136 = load i32, ptr %7, align 4, !tbaa !5
  %137 = icmp sge i32 %136, 0
  br i1 %137, label %139, label %138

138:                                              ; preds = %135
  store i32 11, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  br label %152

139:                                              ; preds = %135
  %140 = load i32, ptr %6, align 4, !tbaa !5
  %141 = load i32, ptr @m, align 4, !tbaa !5
  %142 = mul nsw i32 %140, %141
  %143 = load i32, ptr %7, align 4, !tbaa !5
  %144 = add nsw i32 %142, %143
  %145 = load i32, ptr %5, align 4, !tbaa !5
  %146 = add nsw i32 %145, 1
  store i32 %146, ptr %5, align 4, !tbaa !5
  %147 = sext i32 %145 to i64
  %148 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %147
  store i32 %144, ptr %148, align 4, !tbaa !5
  br label %149

149:                                              ; preds = %139
  %150 = load i32, ptr %7, align 4, !tbaa !5
  %151 = add nsw i32 %150, -1
  store i32 %151, ptr %7, align 4, !tbaa !5
  br label %135, !llvm.loop !12

152:                                              ; preds = %138
  br label %173

153:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #6
  store i32 0, ptr %8, align 4, !tbaa !5
  br label %154

154:                                              ; preds = %169, %153
  %155 = load i32, ptr %8, align 4, !tbaa !5
  %156 = load i32, ptr @m, align 4, !tbaa !5
  %157 = icmp slt i32 %155, %156
  br i1 %157, label %159, label %158

158:                                              ; preds = %154
  store i32 14, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #6
  br label %172

159:                                              ; preds = %154
  %160 = load i32, ptr %6, align 4, !tbaa !5
  %161 = load i32, ptr @m, align 4, !tbaa !5
  %162 = mul nsw i32 %160, %161
  %163 = load i32, ptr %8, align 4, !tbaa !5
  %164 = add nsw i32 %162, %163
  %165 = load i32, ptr %5, align 4, !tbaa !5
  %166 = add nsw i32 %165, 1
  store i32 %166, ptr %5, align 4, !tbaa !5
  %167 = sext i32 %165 to i64
  %168 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %167
  store i32 %164, ptr %168, align 4, !tbaa !5
  br label %169

169:                                              ; preds = %159
  %170 = load i32, ptr %8, align 4, !tbaa !5
  %171 = add nsw i32 %170, 1
  store i32 %171, ptr %8, align 4, !tbaa !5
  br label %154, !llvm.loop !13

172:                                              ; preds = %158
  br label %173

173:                                              ; preds = %172, %152
  br label %174

174:                                              ; preds = %173
  %175 = load i32, ptr %6, align 4, !tbaa !5
  %176 = add nsw i32 %175, 1
  store i32 %176, ptr %6, align 4, !tbaa !5
  br label %123, !llvm.loop !14

177:                                              ; preds = %127
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  store i32 0, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  store i32 0, ptr %10, align 4, !tbaa !5
  br label %178

178:                                              ; preds = %229, %177
  %179 = load i32, ptr %10, align 4, !tbaa !5
  %180 = load i32, ptr @n, align 4, !tbaa !5
  %181 = icmp slt i32 %179, %180
  br i1 %181, label %183, label %182

182:                                              ; preds = %178
  store i32 17, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  br label %232

183:                                              ; preds = %178
  %184 = load i32, ptr %10, align 4, !tbaa !5
  %185 = and i32 %184, 1
  %186 = icmp ne i32 %185, 0
  br i1 %186, label %187, label %207

187:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %188

188:                                              ; preds = %203, %187
  %189 = load i32, ptr %11, align 4, !tbaa !5
  %190 = load i32, ptr @m, align 4, !tbaa !5
  %191 = icmp slt i32 %189, %190
  br i1 %191, label %193, label %192

192:                                              ; preds = %188
  store i32 20, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  br label %206

193:                                              ; preds = %188
  %194 = load i32, ptr %10, align 4, !tbaa !5
  %195 = load i32, ptr @m, align 4, !tbaa !5
  %196 = mul nsw i32 %194, %195
  %197 = load i32, ptr %11, align 4, !tbaa !5
  %198 = add nsw i32 %196, %197
  %199 = load i32, ptr %9, align 4, !tbaa !5
  %200 = add nsw i32 %199, 1
  store i32 %200, ptr %9, align 4, !tbaa !5
  %201 = sext i32 %199 to i64
  %202 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %201
  store i32 %198, ptr %202, align 4, !tbaa !5
  br label %203

203:                                              ; preds = %193
  %204 = load i32, ptr %11, align 4, !tbaa !5
  %205 = add nsw i32 %204, 1
  store i32 %205, ptr %11, align 4, !tbaa !5
  br label %188, !llvm.loop !15

206:                                              ; preds = %192
  br label %228

207:                                              ; preds = %183
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  %208 = load i32, ptr @m, align 4, !tbaa !5
  %209 = sub nsw i32 %208, 1
  store i32 %209, ptr %12, align 4, !tbaa !5
  br label %210

210:                                              ; preds = %224, %207
  %211 = load i32, ptr %12, align 4, !tbaa !5
  %212 = icmp sge i32 %211, 0
  br i1 %212, label %214, label %213

213:                                              ; preds = %210
  store i32 23, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  br label %227

214:                                              ; preds = %210
  %215 = load i32, ptr %10, align 4, !tbaa !5
  %216 = load i32, ptr @m, align 4, !tbaa !5
  %217 = mul nsw i32 %215, %216
  %218 = load i32, ptr %12, align 4, !tbaa !5
  %219 = add nsw i32 %217, %218
  %220 = load i32, ptr %9, align 4, !tbaa !5
  %221 = add nsw i32 %220, 1
  store i32 %221, ptr %9, align 4, !tbaa !5
  %222 = sext i32 %220 to i64
  %223 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %222
  store i32 %219, ptr %223, align 4, !tbaa !5
  br label %224

224:                                              ; preds = %214
  %225 = load i32, ptr %12, align 4, !tbaa !5
  %226 = add nsw i32 %225, -1
  store i32 %226, ptr %12, align 4, !tbaa !5
  br label %210, !llvm.loop !16

227:                                              ; preds = %213
  br label %228

228:                                              ; preds = %227, %206
  br label %229

229:                                              ; preds = %228
  %230 = load i32, ptr %10, align 4, !tbaa !5
  %231 = add nsw i32 %230, 1
  store i32 %231, ptr %10, align 4, !tbaa !5
  br label %178, !llvm.loop !17

232:                                              ; preds = %182
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #6
  store i32 0, ptr %13, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store i32 0, ptr %14, align 4, !tbaa !5
  br label %233

233:                                              ; preds = %284, %232
  %234 = load i32, ptr %14, align 4, !tbaa !5
  %235 = load i32, ptr @m, align 4, !tbaa !5
  %236 = icmp slt i32 %234, %235
  br i1 %236, label %238, label %237

237:                                              ; preds = %233
  store i32 26, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %287

238:                                              ; preds = %233
  %239 = load i32, ptr %14, align 4, !tbaa !5
  %240 = and i32 %239, 1
  %241 = icmp ne i32 %240, 0
  br i1 %241, label %242, label %263

242:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #6
  %243 = load i32, ptr @n, align 4, !tbaa !5
  %244 = sub nsw i32 %243, 1
  store i32 %244, ptr %15, align 4, !tbaa !5
  br label %245

245:                                              ; preds = %259, %242
  %246 = load i32, ptr %15, align 4, !tbaa !5
  %247 = icmp sge i32 %246, 0
  br i1 %247, label %249, label %248

248:                                              ; preds = %245
  store i32 29, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %262

249:                                              ; preds = %245
  %250 = load i32, ptr %15, align 4, !tbaa !5
  %251 = load i32, ptr @m, align 4, !tbaa !5
  %252 = mul nsw i32 %250, %251
  %253 = load i32, ptr %14, align 4, !tbaa !5
  %254 = add nsw i32 %252, %253
  %255 = load i32, ptr %13, align 4, !tbaa !5
  %256 = add nsw i32 %255, 1
  store i32 %256, ptr %13, align 4, !tbaa !5
  %257 = sext i32 %255 to i64
  %258 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %257
  store i32 %254, ptr %258, align 4, !tbaa !5
  br label %259

259:                                              ; preds = %249
  %260 = load i32, ptr %15, align 4, !tbaa !5
  %261 = add nsw i32 %260, -1
  store i32 %261, ptr %15, align 4, !tbaa !5
  br label %245, !llvm.loop !18

262:                                              ; preds = %248
  br label %283

263:                                              ; preds = %238
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #6
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %264

264:                                              ; preds = %279, %263
  %265 = load i32, ptr %16, align 4, !tbaa !5
  %266 = load i32, ptr @n, align 4, !tbaa !5
  %267 = icmp slt i32 %265, %266
  br i1 %267, label %269, label %268

268:                                              ; preds = %264
  store i32 32, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %282

269:                                              ; preds = %264
  %270 = load i32, ptr %16, align 4, !tbaa !5
  %271 = load i32, ptr @m, align 4, !tbaa !5
  %272 = mul nsw i32 %270, %271
  %273 = load i32, ptr %14, align 4, !tbaa !5
  %274 = add nsw i32 %272, %273
  %275 = load i32, ptr %13, align 4, !tbaa !5
  %276 = add nsw i32 %275, 1
  store i32 %276, ptr %13, align 4, !tbaa !5
  %277 = sext i32 %275 to i64
  %278 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %277
  store i32 %274, ptr %278, align 4, !tbaa !5
  br label %279

279:                                              ; preds = %269
  %280 = load i32, ptr %16, align 4, !tbaa !5
  %281 = add nsw i32 %280, 1
  store i32 %281, ptr %16, align 4, !tbaa !5
  br label %264, !llvm.loop !19

282:                                              ; preds = %268
  br label %283

283:                                              ; preds = %282, %262
  br label %284

284:                                              ; preds = %283
  %285 = load i32, ptr %14, align 4, !tbaa !5
  %286 = add nsw i32 %285, 1
  store i32 %286, ptr %14, align 4, !tbaa !5
  br label %233, !llvm.loop !20

287:                                              ; preds = %237
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 0, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #6
  store i32 0, ptr %18, align 4, !tbaa !5
  br label %288

288:                                              ; preds = %339, %287
  %289 = load i32, ptr %18, align 4, !tbaa !5
  %290 = load i32, ptr @m, align 4, !tbaa !5
  %291 = icmp slt i32 %289, %290
  br i1 %291, label %293, label %292

292:                                              ; preds = %288
  store i32 35, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  br label %342

293:                                              ; preds = %288
  %294 = load i32, ptr %18, align 4, !tbaa !5
  %295 = and i32 %294, 1
  %296 = icmp ne i32 %295, 0
  br i1 %296, label %297, label %317

297:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %298

298:                                              ; preds = %313, %297
  %299 = load i32, ptr %19, align 4, !tbaa !5
  %300 = load i32, ptr @n, align 4, !tbaa !5
  %301 = icmp slt i32 %299, %300
  br i1 %301, label %303, label %302

302:                                              ; preds = %298
  store i32 38, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %316

303:                                              ; preds = %298
  %304 = load i32, ptr %19, align 4, !tbaa !5
  %305 = load i32, ptr @m, align 4, !tbaa !5
  %306 = mul nsw i32 %304, %305
  %307 = load i32, ptr %18, align 4, !tbaa !5
  %308 = add nsw i32 %306, %307
  %309 = load i32, ptr %17, align 4, !tbaa !5
  %310 = add nsw i32 %309, 1
  store i32 %310, ptr %17, align 4, !tbaa !5
  %311 = sext i32 %309 to i64
  %312 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %311
  store i32 %308, ptr %312, align 4, !tbaa !5
  br label %313

313:                                              ; preds = %303
  %314 = load i32, ptr %19, align 4, !tbaa !5
  %315 = add nsw i32 %314, 1
  store i32 %315, ptr %19, align 4, !tbaa !5
  br label %298, !llvm.loop !21

316:                                              ; preds = %302
  br label %338

317:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  %318 = load i32, ptr @n, align 4, !tbaa !5
  %319 = sub nsw i32 %318, 1
  store i32 %319, ptr %20, align 4, !tbaa !5
  br label %320

320:                                              ; preds = %334, %317
  %321 = load i32, ptr %20, align 4, !tbaa !5
  %322 = icmp sge i32 %321, 0
  br i1 %322, label %324, label %323

323:                                              ; preds = %320
  store i32 41, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %337

324:                                              ; preds = %320
  %325 = load i32, ptr %20, align 4, !tbaa !5
  %326 = load i32, ptr @m, align 4, !tbaa !5
  %327 = mul nsw i32 %325, %326
  %328 = load i32, ptr %18, align 4, !tbaa !5
  %329 = add nsw i32 %327, %328
  %330 = load i32, ptr %17, align 4, !tbaa !5
  %331 = add nsw i32 %330, 1
  store i32 %331, ptr %17, align 4, !tbaa !5
  %332 = sext i32 %330 to i64
  %333 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %332
  store i32 %329, ptr %333, align 4, !tbaa !5
  br label %334

334:                                              ; preds = %324
  %335 = load i32, ptr %20, align 4, !tbaa !5
  %336 = add nsw i32 %335, -1
  store i32 %336, ptr %20, align 4, !tbaa !5
  br label %320, !llvm.loop !22

337:                                              ; preds = %323
  br label %338

338:                                              ; preds = %337, %316
  br label %339

339:                                              ; preds = %338
  %340 = load i32, ptr %18, align 4, !tbaa !5
  %341 = add nsw i32 %340, 1
  store i32 %341, ptr %18, align 4, !tbaa !5
  br label %288, !llvm.loop !23

342:                                              ; preds = %292
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #6
  store i32 0, ptr %21, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #6
  store i32 0, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #6
  store i32 0, ptr %23, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  store i32 0, ptr %24, align 4, !tbaa !5
  br label %343

343:                                              ; preds = %422, %342
  %344 = load i32, ptr %22, align 4, !tbaa !5
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis, i64 0, i64 %345
  %347 = load i32, ptr %23, align 4, !tbaa !5
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds [1001 x i8], ptr %346, i64 0, i64 %348
  %350 = load i8, ptr %349, align 1, !tbaa !24, !range !26, !noundef !27
  %351 = trunc i8 %350 to i1
  %352 = xor i1 %351, true
  br i1 %352, label %353, label %423

353:                                              ; preds = %343
  %354 = load i32, ptr %22, align 4, !tbaa !5
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis, i64 0, i64 %355
  %357 = load i32, ptr %23, align 4, !tbaa !5
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds [1001 x i8], ptr %356, i64 0, i64 %358
  store i8 1, ptr %359, align 1, !tbaa !24
  %360 = load i32, ptr %22, align 4, !tbaa !5
  %361 = load i32, ptr @m, align 4, !tbaa !5
  %362 = mul nsw i32 %360, %361
  %363 = load i32, ptr %23, align 4, !tbaa !5
  %364 = add nsw i32 %362, %363
  %365 = load i32, ptr %21, align 4, !tbaa !5
  %366 = add nsw i32 %365, 1
  store i32 %366, ptr %21, align 4, !tbaa !5
  %367 = sext i32 %365 to i64
  %368 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %367
  store i32 %364, ptr %368, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #6
  %369 = load i32, ptr %22, align 4, !tbaa !5
  %370 = load i32, ptr %24, align 4, !tbaa !5
  %371 = sext i32 %370 to i64
  %372 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %371
  %373 = load i32, ptr %372, align 4, !tbaa !5
  %374 = add nsw i32 %369, %373
  store i32 %374, ptr %25, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #6
  %375 = load i32, ptr %23, align 4, !tbaa !5
  %376 = load i32, ptr %24, align 4, !tbaa !5
  %377 = sext i32 %376 to i64
  %378 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %377
  %379 = load i32, ptr %378, align 4, !tbaa !5
  %380 = add nsw i32 %375, %379
  store i32 %380, ptr %26, align 4, !tbaa !5
  %381 = load i32, ptr %25, align 4, !tbaa !5
  %382 = icmp sge i32 %381, 0
  br i1 %382, label %383, label %406

383:                                              ; preds = %353
  %384 = load i32, ptr %25, align 4, !tbaa !5
  %385 = load i32, ptr @n, align 4, !tbaa !5
  %386 = icmp slt i32 %384, %385
  br i1 %386, label %387, label %406

387:                                              ; preds = %383
  %388 = load i32, ptr %26, align 4, !tbaa !5
  %389 = icmp sge i32 %388, 0
  br i1 %389, label %390, label %406

390:                                              ; preds = %387
  %391 = load i32, ptr %26, align 4, !tbaa !5
  %392 = load i32, ptr @m, align 4, !tbaa !5
  %393 = icmp slt i32 %391, %392
  br i1 %393, label %394, label %406

394:                                              ; preds = %390
  %395 = load i32, ptr %25, align 4, !tbaa !5
  %396 = sext i32 %395 to i64
  %397 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis, i64 0, i64 %396
  %398 = load i32, ptr %26, align 4, !tbaa !5
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds [1001 x i8], ptr %397, i64 0, i64 %399
  %401 = load i8, ptr %400, align 1, !tbaa !24, !range !26, !noundef !27
  %402 = trunc i8 %401 to i1
  br i1 %402, label %406, label %403

403:                                              ; preds = %394
  %404 = load i32, ptr %25, align 4, !tbaa !5
  store i32 %404, ptr %22, align 4, !tbaa !5
  %405 = load i32, ptr %26, align 4, !tbaa !5
  store i32 %405, ptr %23, align 4, !tbaa !5
  br label %422

406:                                              ; preds = %394, %390, %387, %383, %353
  %407 = load i32, ptr %24, align 4, !tbaa !5
  %408 = add nsw i32 %407, 1
  %409 = and i32 %408, 3
  store i32 %409, ptr %24, align 4, !tbaa !5
  %410 = load i32, ptr %24, align 4, !tbaa !5
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %411
  %413 = load i32, ptr %412, align 4, !tbaa !5
  %414 = load i32, ptr %22, align 4, !tbaa !5
  %415 = add nsw i32 %414, %413
  store i32 %415, ptr %22, align 4, !tbaa !5
  %416 = load i32, ptr %24, align 4, !tbaa !5
  %417 = sext i32 %416 to i64
  %418 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %417
  %419 = load i32, ptr %418, align 4, !tbaa !5
  %420 = load i32, ptr %23, align 4, !tbaa !5
  %421 = add nsw i32 %420, %419
  store i32 %421, ptr %23, align 4, !tbaa !5
  br label %422

422:                                              ; preds = %406, %403
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #6
  br label %343, !llvm.loop !28

423:                                              ; preds = %343
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #6
  store i32 0, ptr %27, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #6
  store i32 0, ptr %28, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #6
  %424 = load i32, ptr @m, align 4, !tbaa !5
  %425 = sub nsw i32 %424, 1
  store i32 %425, ptr %29, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #6
  store i32 1, ptr %30, align 4, !tbaa !5
  br label %426

426:                                              ; preds = %505, %423
  %427 = load i32, ptr %28, align 4, !tbaa !5
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_0, i64 0, i64 %428
  %430 = load i32, ptr %29, align 4, !tbaa !5
  %431 = sext i32 %430 to i64
  %432 = getelementptr inbounds [1001 x i8], ptr %429, i64 0, i64 %431
  %433 = load i8, ptr %432, align 1, !tbaa !24, !range !26, !noundef !27
  %434 = trunc i8 %433 to i1
  %435 = xor i1 %434, true
  br i1 %435, label %436, label %506

436:                                              ; preds = %426
  %437 = load i32, ptr %28, align 4, !tbaa !5
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_0, i64 0, i64 %438
  %440 = load i32, ptr %29, align 4, !tbaa !5
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds [1001 x i8], ptr %439, i64 0, i64 %441
  store i8 1, ptr %442, align 1, !tbaa !24
  %443 = load i32, ptr %28, align 4, !tbaa !5
  %444 = load i32, ptr @m, align 4, !tbaa !5
  %445 = mul nsw i32 %443, %444
  %446 = load i32, ptr %29, align 4, !tbaa !5
  %447 = add nsw i32 %445, %446
  %448 = load i32, ptr %27, align 4, !tbaa !5
  %449 = add nsw i32 %448, 1
  store i32 %449, ptr %27, align 4, !tbaa !5
  %450 = sext i32 %448 to i64
  %451 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %450
  store i32 %447, ptr %451, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #6
  %452 = load i32, ptr %28, align 4, !tbaa !5
  %453 = load i32, ptr %30, align 4, !tbaa !5
  %454 = sext i32 %453 to i64
  %455 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %454
  %456 = load i32, ptr %455, align 4, !tbaa !5
  %457 = add nsw i32 %452, %456
  store i32 %457, ptr %31, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  %458 = load i32, ptr %29, align 4, !tbaa !5
  %459 = load i32, ptr %30, align 4, !tbaa !5
  %460 = sext i32 %459 to i64
  %461 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %460
  %462 = load i32, ptr %461, align 4, !tbaa !5
  %463 = add nsw i32 %458, %462
  store i32 %463, ptr %32, align 4, !tbaa !5
  %464 = load i32, ptr %31, align 4, !tbaa !5
  %465 = icmp sge i32 %464, 0
  br i1 %465, label %466, label %489

466:                                              ; preds = %436
  %467 = load i32, ptr %31, align 4, !tbaa !5
  %468 = load i32, ptr @n, align 4, !tbaa !5
  %469 = icmp slt i32 %467, %468
  br i1 %469, label %470, label %489

470:                                              ; preds = %466
  %471 = load i32, ptr %32, align 4, !tbaa !5
  %472 = icmp sge i32 %471, 0
  br i1 %472, label %473, label %489

473:                                              ; preds = %470
  %474 = load i32, ptr %32, align 4, !tbaa !5
  %475 = load i32, ptr @m, align 4, !tbaa !5
  %476 = icmp slt i32 %474, %475
  br i1 %476, label %477, label %489

477:                                              ; preds = %473
  %478 = load i32, ptr %31, align 4, !tbaa !5
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_0, i64 0, i64 %479
  %481 = load i32, ptr %32, align 4, !tbaa !5
  %482 = sext i32 %481 to i64
  %483 = getelementptr inbounds [1001 x i8], ptr %480, i64 0, i64 %482
  %484 = load i8, ptr %483, align 1, !tbaa !24, !range !26, !noundef !27
  %485 = trunc i8 %484 to i1
  br i1 %485, label %489, label %486

486:                                              ; preds = %477
  %487 = load i32, ptr %31, align 4, !tbaa !5
  store i32 %487, ptr %28, align 4, !tbaa !5
  %488 = load i32, ptr %32, align 4, !tbaa !5
  store i32 %488, ptr %29, align 4, !tbaa !5
  br label %505

489:                                              ; preds = %477, %473, %470, %466, %436
  %490 = load i32, ptr %30, align 4, !tbaa !5
  %491 = add nsw i32 %490, 1
  %492 = and i32 %491, 3
  store i32 %492, ptr %30, align 4, !tbaa !5
  %493 = load i32, ptr %30, align 4, !tbaa !5
  %494 = sext i32 %493 to i64
  %495 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %494
  %496 = load i32, ptr %495, align 4, !tbaa !5
  %497 = load i32, ptr %28, align 4, !tbaa !5
  %498 = add nsw i32 %497, %496
  store i32 %498, ptr %28, align 4, !tbaa !5
  %499 = load i32, ptr %30, align 4, !tbaa !5
  %500 = sext i32 %499 to i64
  %501 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %500
  %502 = load i32, ptr %501, align 4, !tbaa !5
  %503 = load i32, ptr %29, align 4, !tbaa !5
  %504 = add nsw i32 %503, %502
  store i32 %504, ptr %29, align 4, !tbaa !5
  br label %505

505:                                              ; preds = %489, %486
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #6
  br label %426, !llvm.loop !29

506:                                              ; preds = %426
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #6
  store i32 0, ptr %33, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #6
  %507 = load i32, ptr @n, align 4, !tbaa !5
  %508 = sub nsw i32 %507, 1
  store i32 %508, ptr %34, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #6
  %509 = load i32, ptr @m, align 4, !tbaa !5
  %510 = sub nsw i32 %509, 1
  store i32 %510, ptr %35, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #6
  store i32 2, ptr %36, align 4, !tbaa !5
  br label %511

511:                                              ; preds = %590, %506
  %512 = load i32, ptr %34, align 4, !tbaa !5
  %513 = sext i32 %512 to i64
  %514 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_1, i64 0, i64 %513
  %515 = load i32, ptr %35, align 4, !tbaa !5
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds [1001 x i8], ptr %514, i64 0, i64 %516
  %518 = load i8, ptr %517, align 1, !tbaa !24, !range !26, !noundef !27
  %519 = trunc i8 %518 to i1
  %520 = xor i1 %519, true
  br i1 %520, label %521, label %591

521:                                              ; preds = %511
  %522 = load i32, ptr %34, align 4, !tbaa !5
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_1, i64 0, i64 %523
  %525 = load i32, ptr %35, align 4, !tbaa !5
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds [1001 x i8], ptr %524, i64 0, i64 %526
  store i8 1, ptr %527, align 1, !tbaa !24
  %528 = load i32, ptr %34, align 4, !tbaa !5
  %529 = load i32, ptr @m, align 4, !tbaa !5
  %530 = mul nsw i32 %528, %529
  %531 = load i32, ptr %35, align 4, !tbaa !5
  %532 = add nsw i32 %530, %531
  %533 = load i32, ptr %33, align 4, !tbaa !5
  %534 = add nsw i32 %533, 1
  store i32 %534, ptr %33, align 4, !tbaa !5
  %535 = sext i32 %533 to i64
  %536 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %535
  store i32 %532, ptr %536, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #6
  %537 = load i32, ptr %34, align 4, !tbaa !5
  %538 = load i32, ptr %36, align 4, !tbaa !5
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %539
  %541 = load i32, ptr %540, align 4, !tbaa !5
  %542 = add nsw i32 %537, %541
  store i32 %542, ptr %37, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #6
  %543 = load i32, ptr %35, align 4, !tbaa !5
  %544 = load i32, ptr %36, align 4, !tbaa !5
  %545 = sext i32 %544 to i64
  %546 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %545
  %547 = load i32, ptr %546, align 4, !tbaa !5
  %548 = add nsw i32 %543, %547
  store i32 %548, ptr %38, align 4, !tbaa !5
  %549 = load i32, ptr %37, align 4, !tbaa !5
  %550 = icmp sge i32 %549, 0
  br i1 %550, label %551, label %574

551:                                              ; preds = %521
  %552 = load i32, ptr %37, align 4, !tbaa !5
  %553 = load i32, ptr @n, align 4, !tbaa !5
  %554 = icmp slt i32 %552, %553
  br i1 %554, label %555, label %574

555:                                              ; preds = %551
  %556 = load i32, ptr %38, align 4, !tbaa !5
  %557 = icmp sge i32 %556, 0
  br i1 %557, label %558, label %574

558:                                              ; preds = %555
  %559 = load i32, ptr %38, align 4, !tbaa !5
  %560 = load i32, ptr @m, align 4, !tbaa !5
  %561 = icmp slt i32 %559, %560
  br i1 %561, label %562, label %574

562:                                              ; preds = %558
  %563 = load i32, ptr %37, align 4, !tbaa !5
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_1, i64 0, i64 %564
  %566 = load i32, ptr %38, align 4, !tbaa !5
  %567 = sext i32 %566 to i64
  %568 = getelementptr inbounds [1001 x i8], ptr %565, i64 0, i64 %567
  %569 = load i8, ptr %568, align 1, !tbaa !24, !range !26, !noundef !27
  %570 = trunc i8 %569 to i1
  br i1 %570, label %574, label %571

571:                                              ; preds = %562
  %572 = load i32, ptr %37, align 4, !tbaa !5
  store i32 %572, ptr %34, align 4, !tbaa !5
  %573 = load i32, ptr %38, align 4, !tbaa !5
  store i32 %573, ptr %35, align 4, !tbaa !5
  br label %590

574:                                              ; preds = %562, %558, %555, %551, %521
  %575 = load i32, ptr %36, align 4, !tbaa !5
  %576 = add nsw i32 %575, 1
  %577 = and i32 %576, 3
  store i32 %577, ptr %36, align 4, !tbaa !5
  %578 = load i32, ptr %36, align 4, !tbaa !5
  %579 = sext i32 %578 to i64
  %580 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %579
  %581 = load i32, ptr %580, align 4, !tbaa !5
  %582 = load i32, ptr %34, align 4, !tbaa !5
  %583 = add nsw i32 %582, %581
  store i32 %583, ptr %34, align 4, !tbaa !5
  %584 = load i32, ptr %36, align 4, !tbaa !5
  %585 = sext i32 %584 to i64
  %586 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %585
  %587 = load i32, ptr %586, align 4, !tbaa !5
  %588 = load i32, ptr %35, align 4, !tbaa !5
  %589 = add nsw i32 %588, %587
  store i32 %589, ptr %35, align 4, !tbaa !5
  br label %590

590:                                              ; preds = %574, %571
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #6
  br label %511, !llvm.loop !30

591:                                              ; preds = %511
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #6
  store i32 0, ptr %39, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #6
  %592 = load i32, ptr @n, align 4, !tbaa !5
  %593 = sub nsw i32 %592, 1
  store i32 %593, ptr %40, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #6
  store i32 0, ptr %41, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #6
  store i32 3, ptr %42, align 4, !tbaa !5
  br label %594

594:                                              ; preds = %673, %591
  %595 = load i32, ptr %40, align 4, !tbaa !5
  %596 = sext i32 %595 to i64
  %597 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_2, i64 0, i64 %596
  %598 = load i32, ptr %41, align 4, !tbaa !5
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds [1001 x i8], ptr %597, i64 0, i64 %599
  %601 = load i8, ptr %600, align 1, !tbaa !24, !range !26, !noundef !27
  %602 = trunc i8 %601 to i1
  %603 = xor i1 %602, true
  br i1 %603, label %604, label %674

604:                                              ; preds = %594
  %605 = load i32, ptr %40, align 4, !tbaa !5
  %606 = sext i32 %605 to i64
  %607 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_2, i64 0, i64 %606
  %608 = load i32, ptr %41, align 4, !tbaa !5
  %609 = sext i32 %608 to i64
  %610 = getelementptr inbounds [1001 x i8], ptr %607, i64 0, i64 %609
  store i8 1, ptr %610, align 1, !tbaa !24
  %611 = load i32, ptr %40, align 4, !tbaa !5
  %612 = load i32, ptr @m, align 4, !tbaa !5
  %613 = mul nsw i32 %611, %612
  %614 = load i32, ptr %41, align 4, !tbaa !5
  %615 = add nsw i32 %613, %614
  %616 = load i32, ptr %39, align 4, !tbaa !5
  %617 = add nsw i32 %616, 1
  store i32 %617, ptr %39, align 4, !tbaa !5
  %618 = sext i32 %616 to i64
  %619 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %618
  store i32 %615, ptr %619, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  %620 = load i32, ptr %40, align 4, !tbaa !5
  %621 = load i32, ptr %42, align 4, !tbaa !5
  %622 = sext i32 %621 to i64
  %623 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %622
  %624 = load i32, ptr %623, align 4, !tbaa !5
  %625 = add nsw i32 %620, %624
  store i32 %625, ptr %43, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #6
  %626 = load i32, ptr %41, align 4, !tbaa !5
  %627 = load i32, ptr %42, align 4, !tbaa !5
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %628
  %630 = load i32, ptr %629, align 4, !tbaa !5
  %631 = add nsw i32 %626, %630
  store i32 %631, ptr %44, align 4, !tbaa !5
  %632 = load i32, ptr %43, align 4, !tbaa !5
  %633 = icmp sge i32 %632, 0
  br i1 %633, label %634, label %657

634:                                              ; preds = %604
  %635 = load i32, ptr %43, align 4, !tbaa !5
  %636 = load i32, ptr @n, align 4, !tbaa !5
  %637 = icmp slt i32 %635, %636
  br i1 %637, label %638, label %657

638:                                              ; preds = %634
  %639 = load i32, ptr %44, align 4, !tbaa !5
  %640 = icmp sge i32 %639, 0
  br i1 %640, label %641, label %657

641:                                              ; preds = %638
  %642 = load i32, ptr %44, align 4, !tbaa !5
  %643 = load i32, ptr @m, align 4, !tbaa !5
  %644 = icmp slt i32 %642, %643
  br i1 %644, label %645, label %657

645:                                              ; preds = %641
  %646 = load i32, ptr %43, align 4, !tbaa !5
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_2, i64 0, i64 %647
  %649 = load i32, ptr %44, align 4, !tbaa !5
  %650 = sext i32 %649 to i64
  %651 = getelementptr inbounds [1001 x i8], ptr %648, i64 0, i64 %650
  %652 = load i8, ptr %651, align 1, !tbaa !24, !range !26, !noundef !27
  %653 = trunc i8 %652 to i1
  br i1 %653, label %657, label %654

654:                                              ; preds = %645
  %655 = load i32, ptr %43, align 4, !tbaa !5
  store i32 %655, ptr %40, align 4, !tbaa !5
  %656 = load i32, ptr %44, align 4, !tbaa !5
  store i32 %656, ptr %41, align 4, !tbaa !5
  br label %673

657:                                              ; preds = %645, %641, %638, %634, %604
  %658 = load i32, ptr %42, align 4, !tbaa !5
  %659 = add nsw i32 %658, 1
  %660 = and i32 %659, 3
  store i32 %660, ptr %42, align 4, !tbaa !5
  %661 = load i32, ptr %42, align 4, !tbaa !5
  %662 = sext i32 %661 to i64
  %663 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %662
  %664 = load i32, ptr %663, align 4, !tbaa !5
  %665 = load i32, ptr %40, align 4, !tbaa !5
  %666 = add nsw i32 %665, %664
  store i32 %666, ptr %40, align 4, !tbaa !5
  %667 = load i32, ptr %42, align 4, !tbaa !5
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %668
  %670 = load i32, ptr %669, align 4, !tbaa !5
  %671 = load i32, ptr %41, align 4, !tbaa !5
  %672 = add nsw i32 %671, %670
  store i32 %672, ptr %41, align 4, !tbaa !5
  br label %673

673:                                              ; preds = %657, %654
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  br label %594, !llvm.loop !31

674:                                              ; preds = %594
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #6
  store i32 0, ptr %45, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #6
  store i32 0, ptr %46, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #6
  store i32 0, ptr %47, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #6
  store i32 1, ptr %48, align 4, !tbaa !5
  br label %675

675:                                              ; preds = %754, %674
  %676 = load i32, ptr %46, align 4, !tbaa !5
  %677 = sext i32 %676 to i64
  %678 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_3, i64 0, i64 %677
  %679 = load i32, ptr %47, align 4, !tbaa !5
  %680 = sext i32 %679 to i64
  %681 = getelementptr inbounds [1001 x i8], ptr %678, i64 0, i64 %680
  %682 = load i8, ptr %681, align 1, !tbaa !24, !range !26, !noundef !27
  %683 = trunc i8 %682 to i1
  %684 = xor i1 %683, true
  br i1 %684, label %685, label %755

685:                                              ; preds = %675
  %686 = load i32, ptr %46, align 4, !tbaa !5
  %687 = sext i32 %686 to i64
  %688 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_3, i64 0, i64 %687
  %689 = load i32, ptr %47, align 4, !tbaa !5
  %690 = sext i32 %689 to i64
  %691 = getelementptr inbounds [1001 x i8], ptr %688, i64 0, i64 %690
  store i8 1, ptr %691, align 1, !tbaa !24
  %692 = load i32, ptr %46, align 4, !tbaa !5
  %693 = load i32, ptr @m, align 4, !tbaa !5
  %694 = mul nsw i32 %692, %693
  %695 = load i32, ptr %47, align 4, !tbaa !5
  %696 = add nsw i32 %694, %695
  %697 = load i32, ptr %45, align 4, !tbaa !5
  %698 = add nsw i32 %697, 1
  store i32 %698, ptr %45, align 4, !tbaa !5
  %699 = sext i32 %697 to i64
  %700 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %699
  store i32 %696, ptr %700, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #6
  %701 = load i32, ptr %46, align 4, !tbaa !5
  %702 = load i32, ptr %48, align 4, !tbaa !5
  %703 = sext i32 %702 to i64
  %704 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %703
  %705 = load i32, ptr %704, align 4, !tbaa !5
  %706 = add nsw i32 %701, %705
  store i32 %706, ptr %49, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #6
  %707 = load i32, ptr %47, align 4, !tbaa !5
  %708 = load i32, ptr %48, align 4, !tbaa !5
  %709 = sext i32 %708 to i64
  %710 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %709
  %711 = load i32, ptr %710, align 4, !tbaa !5
  %712 = add nsw i32 %707, %711
  store i32 %712, ptr %50, align 4, !tbaa !5
  %713 = load i32, ptr %49, align 4, !tbaa !5
  %714 = icmp sge i32 %713, 0
  br i1 %714, label %715, label %738

715:                                              ; preds = %685
  %716 = load i32, ptr %49, align 4, !tbaa !5
  %717 = load i32, ptr @n, align 4, !tbaa !5
  %718 = icmp slt i32 %716, %717
  br i1 %718, label %719, label %738

719:                                              ; preds = %715
  %720 = load i32, ptr %50, align 4, !tbaa !5
  %721 = icmp sge i32 %720, 0
  br i1 %721, label %722, label %738

722:                                              ; preds = %719
  %723 = load i32, ptr %50, align 4, !tbaa !5
  %724 = load i32, ptr @m, align 4, !tbaa !5
  %725 = icmp slt i32 %723, %724
  br i1 %725, label %726, label %738

726:                                              ; preds = %722
  %727 = load i32, ptr %49, align 4, !tbaa !5
  %728 = sext i32 %727 to i64
  %729 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_3, i64 0, i64 %728
  %730 = load i32, ptr %50, align 4, !tbaa !5
  %731 = sext i32 %730 to i64
  %732 = getelementptr inbounds [1001 x i8], ptr %729, i64 0, i64 %731
  %733 = load i8, ptr %732, align 1, !tbaa !24, !range !26, !noundef !27
  %734 = trunc i8 %733 to i1
  br i1 %734, label %738, label %735

735:                                              ; preds = %726
  %736 = load i32, ptr %49, align 4, !tbaa !5
  store i32 %736, ptr %46, align 4, !tbaa !5
  %737 = load i32, ptr %50, align 4, !tbaa !5
  store i32 %737, ptr %47, align 4, !tbaa !5
  br label %754

738:                                              ; preds = %726, %722, %719, %715, %685
  %739 = load i32, ptr %48, align 4, !tbaa !5
  %740 = add nsw i32 %739, 3
  %741 = and i32 %740, 3
  store i32 %741, ptr %48, align 4, !tbaa !5
  %742 = load i32, ptr %48, align 4, !tbaa !5
  %743 = sext i32 %742 to i64
  %744 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %743
  %745 = load i32, ptr %744, align 4, !tbaa !5
  %746 = load i32, ptr %46, align 4, !tbaa !5
  %747 = add nsw i32 %746, %745
  store i32 %747, ptr %46, align 4, !tbaa !5
  %748 = load i32, ptr %48, align 4, !tbaa !5
  %749 = sext i32 %748 to i64
  %750 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %749
  %751 = load i32, ptr %750, align 4, !tbaa !5
  %752 = load i32, ptr %47, align 4, !tbaa !5
  %753 = add nsw i32 %752, %751
  store i32 %753, ptr %47, align 4, !tbaa !5
  br label %754

754:                                              ; preds = %738, %735
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #6
  br label %675, !llvm.loop !32

755:                                              ; preds = %675
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %51) #6
  store i32 0, ptr %51, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %52) #6
  %756 = load i32, ptr @n, align 4, !tbaa !5
  %757 = sub nsw i32 %756, 1
  store i32 %757, ptr %52, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %53) #6
  store i32 0, ptr %53, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %54) #6
  store i32 0, ptr %54, align 4, !tbaa !5
  br label %758

758:                                              ; preds = %837, %755
  %759 = load i32, ptr %52, align 4, !tbaa !5
  %760 = sext i32 %759 to i64
  %761 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_4, i64 0, i64 %760
  %762 = load i32, ptr %53, align 4, !tbaa !5
  %763 = sext i32 %762 to i64
  %764 = getelementptr inbounds [1001 x i8], ptr %761, i64 0, i64 %763
  %765 = load i8, ptr %764, align 1, !tbaa !24, !range !26, !noundef !27
  %766 = trunc i8 %765 to i1
  %767 = xor i1 %766, true
  br i1 %767, label %768, label %838

768:                                              ; preds = %758
  %769 = load i32, ptr %52, align 4, !tbaa !5
  %770 = sext i32 %769 to i64
  %771 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_4, i64 0, i64 %770
  %772 = load i32, ptr %53, align 4, !tbaa !5
  %773 = sext i32 %772 to i64
  %774 = getelementptr inbounds [1001 x i8], ptr %771, i64 0, i64 %773
  store i8 1, ptr %774, align 1, !tbaa !24
  %775 = load i32, ptr %52, align 4, !tbaa !5
  %776 = load i32, ptr @m, align 4, !tbaa !5
  %777 = mul nsw i32 %775, %776
  %778 = load i32, ptr %53, align 4, !tbaa !5
  %779 = add nsw i32 %777, %778
  %780 = load i32, ptr %51, align 4, !tbaa !5
  %781 = add nsw i32 %780, 1
  store i32 %781, ptr %51, align 4, !tbaa !5
  %782 = sext i32 %780 to i64
  %783 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %782
  store i32 %779, ptr %783, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %55) #6
  %784 = load i32, ptr %52, align 4, !tbaa !5
  %785 = load i32, ptr %54, align 4, !tbaa !5
  %786 = sext i32 %785 to i64
  %787 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %786
  %788 = load i32, ptr %787, align 4, !tbaa !5
  %789 = add nsw i32 %784, %788
  store i32 %789, ptr %55, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %56) #6
  %790 = load i32, ptr %53, align 4, !tbaa !5
  %791 = load i32, ptr %54, align 4, !tbaa !5
  %792 = sext i32 %791 to i64
  %793 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %792
  %794 = load i32, ptr %793, align 4, !tbaa !5
  %795 = add nsw i32 %790, %794
  store i32 %795, ptr %56, align 4, !tbaa !5
  %796 = load i32, ptr %55, align 4, !tbaa !5
  %797 = icmp sge i32 %796, 0
  br i1 %797, label %798, label %821

798:                                              ; preds = %768
  %799 = load i32, ptr %55, align 4, !tbaa !5
  %800 = load i32, ptr @n, align 4, !tbaa !5
  %801 = icmp slt i32 %799, %800
  br i1 %801, label %802, label %821

802:                                              ; preds = %798
  %803 = load i32, ptr %56, align 4, !tbaa !5
  %804 = icmp sge i32 %803, 0
  br i1 %804, label %805, label %821

805:                                              ; preds = %802
  %806 = load i32, ptr %56, align 4, !tbaa !5
  %807 = load i32, ptr @m, align 4, !tbaa !5
  %808 = icmp slt i32 %806, %807
  br i1 %808, label %809, label %821

809:                                              ; preds = %805
  %810 = load i32, ptr %55, align 4, !tbaa !5
  %811 = sext i32 %810 to i64
  %812 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_4, i64 0, i64 %811
  %813 = load i32, ptr %56, align 4, !tbaa !5
  %814 = sext i32 %813 to i64
  %815 = getelementptr inbounds [1001 x i8], ptr %812, i64 0, i64 %814
  %816 = load i8, ptr %815, align 1, !tbaa !24, !range !26, !noundef !27
  %817 = trunc i8 %816 to i1
  br i1 %817, label %821, label %818

818:                                              ; preds = %809
  %819 = load i32, ptr %55, align 4, !tbaa !5
  store i32 %819, ptr %52, align 4, !tbaa !5
  %820 = load i32, ptr %56, align 4, !tbaa !5
  store i32 %820, ptr %53, align 4, !tbaa !5
  br label %837

821:                                              ; preds = %809, %805, %802, %798, %768
  %822 = load i32, ptr %54, align 4, !tbaa !5
  %823 = add nsw i32 %822, 3
  %824 = and i32 %823, 3
  store i32 %824, ptr %54, align 4, !tbaa !5
  %825 = load i32, ptr %54, align 4, !tbaa !5
  %826 = sext i32 %825 to i64
  %827 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %826
  %828 = load i32, ptr %827, align 4, !tbaa !5
  %829 = load i32, ptr %52, align 4, !tbaa !5
  %830 = add nsw i32 %829, %828
  store i32 %830, ptr %52, align 4, !tbaa !5
  %831 = load i32, ptr %54, align 4, !tbaa !5
  %832 = sext i32 %831 to i64
  %833 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %832
  %834 = load i32, ptr %833, align 4, !tbaa !5
  %835 = load i32, ptr %53, align 4, !tbaa !5
  %836 = add nsw i32 %835, %834
  store i32 %836, ptr %53, align 4, !tbaa !5
  br label %837

837:                                              ; preds = %821, %818
  call void @llvm.lifetime.end.p0(i64 4, ptr %56) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %55) #6
  br label %758, !llvm.loop !33

838:                                              ; preds = %758
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %54) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %53) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %52) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %51) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #6
  store i32 0, ptr %57, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #6
  %839 = load i32, ptr @n, align 4, !tbaa !5
  %840 = sub nsw i32 %839, 1
  store i32 %840, ptr %58, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %59) #6
  %841 = load i32, ptr @m, align 4, !tbaa !5
  %842 = sub nsw i32 %841, 1
  store i32 %842, ptr %59, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %60) #6
  store i32 3, ptr %60, align 4, !tbaa !5
  br label %843

843:                                              ; preds = %922, %838
  %844 = load i32, ptr %58, align 4, !tbaa !5
  %845 = sext i32 %844 to i64
  %846 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_5, i64 0, i64 %845
  %847 = load i32, ptr %59, align 4, !tbaa !5
  %848 = sext i32 %847 to i64
  %849 = getelementptr inbounds [1001 x i8], ptr %846, i64 0, i64 %848
  %850 = load i8, ptr %849, align 1, !tbaa !24, !range !26, !noundef !27
  %851 = trunc i8 %850 to i1
  %852 = xor i1 %851, true
  br i1 %852, label %853, label %923

853:                                              ; preds = %843
  %854 = load i32, ptr %58, align 4, !tbaa !5
  %855 = sext i32 %854 to i64
  %856 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_5, i64 0, i64 %855
  %857 = load i32, ptr %59, align 4, !tbaa !5
  %858 = sext i32 %857 to i64
  %859 = getelementptr inbounds [1001 x i8], ptr %856, i64 0, i64 %858
  store i8 1, ptr %859, align 1, !tbaa !24
  %860 = load i32, ptr %58, align 4, !tbaa !5
  %861 = load i32, ptr @m, align 4, !tbaa !5
  %862 = mul nsw i32 %860, %861
  %863 = load i32, ptr %59, align 4, !tbaa !5
  %864 = add nsw i32 %862, %863
  %865 = load i32, ptr %57, align 4, !tbaa !5
  %866 = add nsw i32 %865, 1
  store i32 %866, ptr %57, align 4, !tbaa !5
  %867 = sext i32 %865 to i64
  %868 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %867
  store i32 %864, ptr %868, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %61) #6
  %869 = load i32, ptr %58, align 4, !tbaa !5
  %870 = load i32, ptr %60, align 4, !tbaa !5
  %871 = sext i32 %870 to i64
  %872 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %871
  %873 = load i32, ptr %872, align 4, !tbaa !5
  %874 = add nsw i32 %869, %873
  store i32 %874, ptr %61, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %62) #6
  %875 = load i32, ptr %59, align 4, !tbaa !5
  %876 = load i32, ptr %60, align 4, !tbaa !5
  %877 = sext i32 %876 to i64
  %878 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %877
  %879 = load i32, ptr %878, align 4, !tbaa !5
  %880 = add nsw i32 %875, %879
  store i32 %880, ptr %62, align 4, !tbaa !5
  %881 = load i32, ptr %61, align 4, !tbaa !5
  %882 = icmp sge i32 %881, 0
  br i1 %882, label %883, label %906

883:                                              ; preds = %853
  %884 = load i32, ptr %61, align 4, !tbaa !5
  %885 = load i32, ptr @n, align 4, !tbaa !5
  %886 = icmp slt i32 %884, %885
  br i1 %886, label %887, label %906

887:                                              ; preds = %883
  %888 = load i32, ptr %62, align 4, !tbaa !5
  %889 = icmp sge i32 %888, 0
  br i1 %889, label %890, label %906

890:                                              ; preds = %887
  %891 = load i32, ptr %62, align 4, !tbaa !5
  %892 = load i32, ptr @m, align 4, !tbaa !5
  %893 = icmp slt i32 %891, %892
  br i1 %893, label %894, label %906

894:                                              ; preds = %890
  %895 = load i32, ptr %61, align 4, !tbaa !5
  %896 = sext i32 %895 to i64
  %897 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_5, i64 0, i64 %896
  %898 = load i32, ptr %62, align 4, !tbaa !5
  %899 = sext i32 %898 to i64
  %900 = getelementptr inbounds [1001 x i8], ptr %897, i64 0, i64 %899
  %901 = load i8, ptr %900, align 1, !tbaa !24, !range !26, !noundef !27
  %902 = trunc i8 %901 to i1
  br i1 %902, label %906, label %903

903:                                              ; preds = %894
  %904 = load i32, ptr %61, align 4, !tbaa !5
  store i32 %904, ptr %58, align 4, !tbaa !5
  %905 = load i32, ptr %62, align 4, !tbaa !5
  store i32 %905, ptr %59, align 4, !tbaa !5
  br label %922

906:                                              ; preds = %894, %890, %887, %883, %853
  %907 = load i32, ptr %60, align 4, !tbaa !5
  %908 = add nsw i32 %907, 3
  %909 = and i32 %908, 3
  store i32 %909, ptr %60, align 4, !tbaa !5
  %910 = load i32, ptr %60, align 4, !tbaa !5
  %911 = sext i32 %910 to i64
  %912 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %911
  %913 = load i32, ptr %912, align 4, !tbaa !5
  %914 = load i32, ptr %58, align 4, !tbaa !5
  %915 = add nsw i32 %914, %913
  store i32 %915, ptr %58, align 4, !tbaa !5
  %916 = load i32, ptr %60, align 4, !tbaa !5
  %917 = sext i32 %916 to i64
  %918 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %917
  %919 = load i32, ptr %918, align 4, !tbaa !5
  %920 = load i32, ptr %59, align 4, !tbaa !5
  %921 = add nsw i32 %920, %919
  store i32 %921, ptr %59, align 4, !tbaa !5
  br label %922

922:                                              ; preds = %906, %903
  call void @llvm.lifetime.end.p0(i64 4, ptr %62) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %61) #6
  br label %843, !llvm.loop !34

923:                                              ; preds = %843
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %60) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %59) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %63) #6
  store i32 0, ptr %63, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #6
  store i32 0, ptr %64, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #6
  %924 = load i32, ptr @m, align 4, !tbaa !5
  %925 = sub nsw i32 %924, 1
  store i32 %925, ptr %65, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %66) #6
  store i32 2, ptr %66, align 4, !tbaa !5
  br label %926

926:                                              ; preds = %1005, %923
  %927 = load i32, ptr %64, align 4, !tbaa !5
  %928 = sext i32 %927 to i64
  %929 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_6, i64 0, i64 %928
  %930 = load i32, ptr %65, align 4, !tbaa !5
  %931 = sext i32 %930 to i64
  %932 = getelementptr inbounds [1001 x i8], ptr %929, i64 0, i64 %931
  %933 = load i8, ptr %932, align 1, !tbaa !24, !range !26, !noundef !27
  %934 = trunc i8 %933 to i1
  %935 = xor i1 %934, true
  br i1 %935, label %936, label %1006

936:                                              ; preds = %926
  %937 = load i32, ptr %64, align 4, !tbaa !5
  %938 = sext i32 %937 to i64
  %939 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_6, i64 0, i64 %938
  %940 = load i32, ptr %65, align 4, !tbaa !5
  %941 = sext i32 %940 to i64
  %942 = getelementptr inbounds [1001 x i8], ptr %939, i64 0, i64 %941
  store i8 1, ptr %942, align 1, !tbaa !24
  %943 = load i32, ptr %64, align 4, !tbaa !5
  %944 = load i32, ptr @m, align 4, !tbaa !5
  %945 = mul nsw i32 %943, %944
  %946 = load i32, ptr %65, align 4, !tbaa !5
  %947 = add nsw i32 %945, %946
  %948 = load i32, ptr %63, align 4, !tbaa !5
  %949 = add nsw i32 %948, 1
  store i32 %949, ptr %63, align 4, !tbaa !5
  %950 = sext i32 %948 to i64
  %951 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %950
  store i32 %947, ptr %951, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #6
  %952 = load i32, ptr %64, align 4, !tbaa !5
  %953 = load i32, ptr %66, align 4, !tbaa !5
  %954 = sext i32 %953 to i64
  %955 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %954
  %956 = load i32, ptr %955, align 4, !tbaa !5
  %957 = add nsw i32 %952, %956
  store i32 %957, ptr %67, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %68) #6
  %958 = load i32, ptr %65, align 4, !tbaa !5
  %959 = load i32, ptr %66, align 4, !tbaa !5
  %960 = sext i32 %959 to i64
  %961 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %960
  %962 = load i32, ptr %961, align 4, !tbaa !5
  %963 = add nsw i32 %958, %962
  store i32 %963, ptr %68, align 4, !tbaa !5
  %964 = load i32, ptr %67, align 4, !tbaa !5
  %965 = icmp sge i32 %964, 0
  br i1 %965, label %966, label %989

966:                                              ; preds = %936
  %967 = load i32, ptr %67, align 4, !tbaa !5
  %968 = load i32, ptr @n, align 4, !tbaa !5
  %969 = icmp slt i32 %967, %968
  br i1 %969, label %970, label %989

970:                                              ; preds = %966
  %971 = load i32, ptr %68, align 4, !tbaa !5
  %972 = icmp sge i32 %971, 0
  br i1 %972, label %973, label %989

973:                                              ; preds = %970
  %974 = load i32, ptr %68, align 4, !tbaa !5
  %975 = load i32, ptr @m, align 4, !tbaa !5
  %976 = icmp slt i32 %974, %975
  br i1 %976, label %977, label %989

977:                                              ; preds = %973
  %978 = load i32, ptr %67, align 4, !tbaa !5
  %979 = sext i32 %978 to i64
  %980 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_6, i64 0, i64 %979
  %981 = load i32, ptr %68, align 4, !tbaa !5
  %982 = sext i32 %981 to i64
  %983 = getelementptr inbounds [1001 x i8], ptr %980, i64 0, i64 %982
  %984 = load i8, ptr %983, align 1, !tbaa !24, !range !26, !noundef !27
  %985 = trunc i8 %984 to i1
  br i1 %985, label %989, label %986

986:                                              ; preds = %977
  %987 = load i32, ptr %67, align 4, !tbaa !5
  store i32 %987, ptr %64, align 4, !tbaa !5
  %988 = load i32, ptr %68, align 4, !tbaa !5
  store i32 %988, ptr %65, align 4, !tbaa !5
  br label %1005

989:                                              ; preds = %977, %973, %970, %966, %936
  %990 = load i32, ptr %66, align 4, !tbaa !5
  %991 = add nsw i32 %990, 3
  %992 = and i32 %991, 3
  store i32 %992, ptr %66, align 4, !tbaa !5
  %993 = load i32, ptr %66, align 4, !tbaa !5
  %994 = sext i32 %993 to i64
  %995 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %994
  %996 = load i32, ptr %995, align 4, !tbaa !5
  %997 = load i32, ptr %64, align 4, !tbaa !5
  %998 = add nsw i32 %997, %996
  store i32 %998, ptr %64, align 4, !tbaa !5
  %999 = load i32, ptr %66, align 4, !tbaa !5
  %1000 = sext i32 %999 to i64
  %1001 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %1000
  %1002 = load i32, ptr %1001, align 4, !tbaa !5
  %1003 = load i32, ptr %65, align 4, !tbaa !5
  %1004 = add nsw i32 %1003, %1002
  store i32 %1004, ptr %65, align 4, !tbaa !5
  br label %1005

1005:                                             ; preds = %989, %986
  call void @llvm.lifetime.end.p0(i64 4, ptr %68) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #6
  br label %926, !llvm.loop !35

1006:                                             ; preds = %926
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %66) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %63) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %69) #6
  store i32 0, ptr %69, align 4, !tbaa !5
  br label %1007

1007:                                             ; preds = %1289, %1006
  %1008 = load i32, ptr %69, align 4, !tbaa !5
  %1009 = icmp slt i32 %1008, 600
  br i1 %1009, label %1011, label %1010

1010:                                             ; preds = %1007
  store i32 60, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %69) #6
  br label %1292

1011:                                             ; preds = %1007
  call void @llvm.lifetime.start.p0(i64 4, ptr %70) #6
  store i32 0, ptr %70, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %71) #6
  store i32 0, ptr %71, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %72) #6
  %1012 = load i32, ptr @n, align 4, !tbaa !5
  %1013 = sub nsw i32 %1012, 1
  store i32 %1013, ptr %72, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %73) #6
  store i32 0, ptr %73, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %74) #6
  %1014 = load i32, ptr @m, align 4, !tbaa !5
  %1015 = sub nsw i32 %1014, 1
  store i32 %1015, ptr %74, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %75) #6
  %1016 = call i32 @rand() #6
  %1017 = and i32 %1016, 3
  store i32 %1017, ptr %75, align 4, !tbaa !5
  br label %1018

1018:                                             ; preds = %1203, %1011
  %1019 = load i32, ptr %70, align 4, !tbaa !5
  %1020 = load i32, ptr @n, align 4, !tbaa !5
  %1021 = load i32, ptr @m, align 4, !tbaa !5
  %1022 = mul nsw i32 %1020, %1021
  %1023 = icmp slt i32 %1019, %1022
  br i1 %1023, label %1024, label %1211

1024:                                             ; preds = %1018
  call void @llvm.lifetime.start.p0(i64 4, ptr %76) #6
  %1025 = load i32, ptr %75, align 4, !tbaa !5
  %1026 = and i32 %1025, 2
  %1027 = icmp ne i32 %1026, 0
  br i1 %1027, label %1028, label %1030

1028:                                             ; preds = %1024
  %1029 = load i32, ptr %72, align 4, !tbaa !5
  br label %1032

1030:                                             ; preds = %1024
  %1031 = load i32, ptr %71, align 4, !tbaa !5
  br label %1032

1032:                                             ; preds = %1030, %1028
  %1033 = phi i32 [ %1029, %1028 ], [ %1031, %1030 ]
  store i32 %1033, ptr %76, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %77) #6
  %1034 = load i32, ptr %75, align 4, !tbaa !5
  %1035 = add nsw i32 %1034, 1
  %1036 = and i32 %1035, 2
  %1037 = icmp ne i32 %1036, 0
  br i1 %1037, label %1038, label %1040

1038:                                             ; preds = %1032
  %1039 = load i32, ptr %74, align 4, !tbaa !5
  br label %1042

1040:                                             ; preds = %1032
  %1041 = load i32, ptr %73, align 4, !tbaa !5
  br label %1042

1042:                                             ; preds = %1040, %1038
  %1043 = phi i32 [ %1039, %1038 ], [ %1041, %1040 ]
  store i32 %1043, ptr %77, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %78) #6
  %1044 = load i32, ptr %76, align 4, !tbaa !5
  %1045 = load i32, ptr %75, align 4, !tbaa !5
  %1046 = add nsw i32 %1045, 1
  %1047 = and i32 %1046, 3
  %1048 = sext i32 %1047 to i64
  %1049 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %1048
  %1050 = load i32, ptr %1049, align 4, !tbaa !5
  %1051 = add nsw i32 %1044, %1050
  store i32 %1051, ptr %78, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %79) #6
  %1052 = load i32, ptr %77, align 4, !tbaa !5
  %1053 = load i32, ptr %75, align 4, !tbaa !5
  %1054 = add nsw i32 %1053, 1
  %1055 = and i32 %1054, 3
  %1056 = sext i32 %1055 to i64
  %1057 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %1056
  %1058 = load i32, ptr %1057, align 4, !tbaa !5
  %1059 = add nsw i32 %1052, %1058
  store i32 %1059, ptr %79, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %80) #6
  call void @llvm.lifetime.start.p0(i64 1, ptr %81) #6
  %1060 = load i32, ptr %78, align 4, !tbaa !5
  %1061 = load i32, ptr %71, align 4, !tbaa !5
  %1062 = icmp sge i32 %1060, %1061
  br i1 %1062, label %1063, label %1075

1063:                                             ; preds = %1042
  %1064 = load i32, ptr %78, align 4, !tbaa !5
  %1065 = load i32, ptr %72, align 4, !tbaa !5
  %1066 = icmp sle i32 %1064, %1065
  br i1 %1066, label %1067, label %1075

1067:                                             ; preds = %1063
  %1068 = load i32, ptr %79, align 4, !tbaa !5
  %1069 = load i32, ptr %73, align 4, !tbaa !5
  %1070 = icmp sge i32 %1068, %1069
  br i1 %1070, label %1071, label %1075

1071:                                             ; preds = %1067
  %1072 = load i32, ptr %79, align 4, !tbaa !5
  %1073 = load i32, ptr %74, align 4, !tbaa !5
  %1074 = icmp sle i32 %1072, %1073
  br label %1075

1075:                                             ; preds = %1071, %1067, %1063, %1042
  %1076 = phi i1 [ false, %1067 ], [ false, %1063 ], [ false, %1042 ], [ %1074, %1071 ]
  %1077 = zext i1 %1076 to i8
  store i8 %1077, ptr %81, align 1, !tbaa !24
  %1078 = load i32, ptr %76, align 4, !tbaa !5
  %1079 = load i32, ptr %75, align 4, !tbaa !5
  %1080 = sext i32 %1079 to i64
  %1081 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %1080
  %1082 = load i32, ptr %1081, align 4, !tbaa !5
  %1083 = add nsw i32 %1078, %1082
  store i32 %1083, ptr %78, align 4, !tbaa !5
  %1084 = load i32, ptr %77, align 4, !tbaa !5
  %1085 = load i32, ptr %75, align 4, !tbaa !5
  %1086 = sext i32 %1085 to i64
  %1087 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %1086
  %1088 = load i32, ptr %1087, align 4, !tbaa !5
  %1089 = add nsw i32 %1084, %1088
  store i32 %1089, ptr %79, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %82) #6
  %1090 = load i32, ptr %78, align 4, !tbaa !5
  %1091 = load i32, ptr %71, align 4, !tbaa !5
  %1092 = icmp sge i32 %1090, %1091
  br i1 %1092, label %1093, label %1105

1093:                                             ; preds = %1075
  %1094 = load i32, ptr %78, align 4, !tbaa !5
  %1095 = load i32, ptr %72, align 4, !tbaa !5
  %1096 = icmp sle i32 %1094, %1095
  br i1 %1096, label %1097, label %1105

1097:                                             ; preds = %1093
  %1098 = load i32, ptr %79, align 4, !tbaa !5
  %1099 = load i32, ptr %73, align 4, !tbaa !5
  %1100 = icmp sge i32 %1098, %1099
  br i1 %1100, label %1101, label %1105

1101:                                             ; preds = %1097
  %1102 = load i32, ptr %79, align 4, !tbaa !5
  %1103 = load i32, ptr %74, align 4, !tbaa !5
  %1104 = icmp sle i32 %1102, %1103
  br label %1105

1105:                                             ; preds = %1101, %1097, %1093, %1075
  %1106 = phi i1 [ false, %1097 ], [ false, %1093 ], [ false, %1075 ], [ %1104, %1101 ]
  %1107 = zext i1 %1106 to i8
  store i8 %1107, ptr %82, align 1, !tbaa !24
  %1108 = load i8, ptr %82, align 1, !tbaa !24, !range !26, !noundef !27
  %1109 = trunc i8 %1108 to i1
  br i1 %1109, label %1110, label %1116

1110:                                             ; preds = %1105
  %1111 = load i8, ptr %81, align 1, !tbaa !24, !range !26, !noundef !27
  %1112 = trunc i8 %1111 to i1
  br i1 %1112, label %1113, label %1116

1113:                                             ; preds = %1110
  %1114 = call i32 @rand() #6
  %1115 = and i32 %1114, 1
  store i32 %1115, ptr %80, align 4, !tbaa !5
  br label %1120

1116:                                             ; preds = %1110, %1105
  %1117 = load i8, ptr %81, align 1, !tbaa !24, !range !26, !noundef !27
  %1118 = trunc i8 %1117 to i1
  %1119 = zext i1 %1118 to i32
  store i32 %1119, ptr %80, align 4, !tbaa !5
  br label %1120

1120:                                             ; preds = %1116, %1113
  %1121 = load i32, ptr %76, align 4, !tbaa !5
  store i32 %1121, ptr %78, align 4, !tbaa !5
  %1122 = load i32, ptr %77, align 4, !tbaa !5
  store i32 %1122, ptr %79, align 4, !tbaa !5
  br label %1123

1123:                                             ; preds = %1141, %1120
  %1124 = load i32, ptr %78, align 4, !tbaa !5
  %1125 = load i32, ptr %71, align 4, !tbaa !5
  %1126 = icmp sge i32 %1124, %1125
  br i1 %1126, label %1127, label %1139

1127:                                             ; preds = %1123
  %1128 = load i32, ptr %78, align 4, !tbaa !5
  %1129 = load i32, ptr %72, align 4, !tbaa !5
  %1130 = icmp sle i32 %1128, %1129
  br i1 %1130, label %1131, label %1139

1131:                                             ; preds = %1127
  %1132 = load i32, ptr %79, align 4, !tbaa !5
  %1133 = load i32, ptr %73, align 4, !tbaa !5
  %1134 = icmp sge i32 %1132, %1133
  br i1 %1134, label %1135, label %1139

1135:                                             ; preds = %1131
  %1136 = load i32, ptr %79, align 4, !tbaa !5
  %1137 = load i32, ptr %74, align 4, !tbaa !5
  %1138 = icmp sle i32 %1136, %1137
  br label %1139

1139:                                             ; preds = %1135, %1131, %1127, %1123
  %1140 = phi i1 [ false, %1131 ], [ false, %1127 ], [ false, %1123 ], [ %1138, %1135 ]
  br i1 %1140, label %1141, label %1169

1141:                                             ; preds = %1139
  %1142 = load i32, ptr %78, align 4, !tbaa !5
  %1143 = load i32, ptr @m, align 4, !tbaa !5
  %1144 = mul nsw i32 %1142, %1143
  %1145 = load i32, ptr %79, align 4, !tbaa !5
  %1146 = add nsw i32 %1144, %1145
  %1147 = load i32, ptr %70, align 4, !tbaa !5
  %1148 = add nsw i32 %1147, 1
  store i32 %1148, ptr %70, align 4, !tbaa !5
  %1149 = sext i32 %1147 to i64
  %1150 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %1149
  store i32 %1146, ptr %1150, align 4, !tbaa !5
  %1151 = load i32, ptr %75, align 4, !tbaa !5
  %1152 = load i32, ptr %80, align 4, !tbaa !5
  %1153 = add nsw i32 %1151, %1152
  %1154 = and i32 %1153, 3
  %1155 = sext i32 %1154 to i64
  %1156 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %1155
  %1157 = load i32, ptr %1156, align 4, !tbaa !5
  %1158 = load i32, ptr %78, align 4, !tbaa !5
  %1159 = add nsw i32 %1158, %1157
  store i32 %1159, ptr %78, align 4, !tbaa !5
  %1160 = load i32, ptr %75, align 4, !tbaa !5
  %1161 = load i32, ptr %80, align 4, !tbaa !5
  %1162 = add nsw i32 %1160, %1161
  %1163 = and i32 %1162, 3
  %1164 = sext i32 %1163 to i64
  %1165 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %1164
  %1166 = load i32, ptr %1165, align 4, !tbaa !5
  %1167 = load i32, ptr %79, align 4, !tbaa !5
  %1168 = add nsw i32 %1167, %1166
  store i32 %1168, ptr %79, align 4, !tbaa !5
  br label %1123, !llvm.loop !36

1169:                                             ; preds = %1139
  %1170 = load i32, ptr %76, align 4, !tbaa !5
  %1171 = load i32, ptr %78, align 4, !tbaa !5
  %1172 = icmp eq i32 %1170, %1171
  br i1 %1172, label %1173, label %1186

1173:                                             ; preds = %1169
  %1174 = load i32, ptr %76, align 4, !tbaa !5
  %1175 = load i32, ptr %71, align 4, !tbaa !5
  %1176 = icmp eq i32 %1174, %1175
  %1177 = zext i1 %1176 to i32
  %1178 = load i32, ptr %71, align 4, !tbaa !5
  %1179 = add nsw i32 %1178, %1177
  store i32 %1179, ptr %71, align 4, !tbaa !5
  %1180 = load i32, ptr %76, align 4, !tbaa !5
  %1181 = load i32, ptr %72, align 4, !tbaa !5
  %1182 = icmp eq i32 %1180, %1181
  %1183 = zext i1 %1182 to i32
  %1184 = load i32, ptr %72, align 4, !tbaa !5
  %1185 = sub nsw i32 %1184, %1183
  store i32 %1185, ptr %72, align 4, !tbaa !5
  br label %1186

1186:                                             ; preds = %1173, %1169
  %1187 = load i32, ptr %77, align 4, !tbaa !5
  %1188 = load i32, ptr %79, align 4, !tbaa !5
  %1189 = icmp eq i32 %1187, %1188
  br i1 %1189, label %1190, label %1203

1190:                                             ; preds = %1186
  %1191 = load i32, ptr %77, align 4, !tbaa !5
  %1192 = load i32, ptr %73, align 4, !tbaa !5
  %1193 = icmp eq i32 %1191, %1192
  %1194 = zext i1 %1193 to i32
  %1195 = load i32, ptr %73, align 4, !tbaa !5
  %1196 = add nsw i32 %1195, %1194
  store i32 %1196, ptr %73, align 4, !tbaa !5
  %1197 = load i32, ptr %77, align 4, !tbaa !5
  %1198 = load i32, ptr %74, align 4, !tbaa !5
  %1199 = icmp eq i32 %1197, %1198
  %1200 = zext i1 %1199 to i32
  %1201 = load i32, ptr %74, align 4, !tbaa !5
  %1202 = sub nsw i32 %1201, %1200
  store i32 %1202, ptr %74, align 4, !tbaa !5
  br label %1203

1203:                                             ; preds = %1190, %1186
  %1204 = load i32, ptr %75, align 4, !tbaa !5
  %1205 = load i32, ptr %80, align 4, !tbaa !5
  %1206 = icmp ne i32 %1205, 0
  %1207 = zext i1 %1206 to i64
  %1208 = select i1 %1206, i32 3, i32 1
  %1209 = add nsw i32 %1204, %1208
  %1210 = and i32 %1209, 3
  store i32 %1210, ptr %75, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 1, ptr %82) #6
  call void @llvm.lifetime.end.p0(i64 1, ptr %81) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %80) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %79) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %78) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %77) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %76) #6
  br label %1018, !llvm.loop !37

1211:                                             ; preds = %1018
  %1212 = call i32 @rand() #6
  %1213 = and i32 %1212, 1
  %1214 = icmp ne i32 %1213, 0
  br i1 %1214, label %1215, label %1288

1215:                                             ; preds = %1211
  call void @llvm.lifetime.start.p0(i64 4, ptr %83) #6
  %1216 = load i32, ptr @ord, align 16, !tbaa !5
  %1217 = load i32, ptr @m, align 4, !tbaa !5
  %1218 = sdiv i32 %1216, %1217
  store i32 %1218, ptr %83, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %84) #6
  %1219 = load i32, ptr @ord, align 16, !tbaa !5
  %1220 = load i32, ptr @m, align 4, !tbaa !5
  %1221 = srem i32 %1219, %1220
  store i32 %1221, ptr %84, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %85) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %86) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %87) #6
  store i32 0, ptr %87, align 4, !tbaa !5
  br label %1222

1222:                                             ; preds = %1262, %1215
  %1223 = load i32, ptr %87, align 4, !tbaa !5
  %1224 = icmp slt i32 %1223, 4
  br i1 %1224, label %1226, label %1225

1225:                                             ; preds = %1222
  store i32 67, ptr %3, align 4
  br label %1265

1226:                                             ; preds = %1222
  %1227 = load i32, ptr %83, align 4, !tbaa !5
  %1228 = load i32, ptr %87, align 4, !tbaa !5
  %1229 = sext i32 %1228 to i64
  %1230 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %1229
  %1231 = load i32, ptr %1230, align 4, !tbaa !5
  %1232 = add nsw i32 %1227, %1231
  store i32 %1232, ptr %85, align 4, !tbaa !5
  %1233 = load i32, ptr %84, align 4, !tbaa !5
  %1234 = load i32, ptr %87, align 4, !tbaa !5
  %1235 = sext i32 %1234 to i64
  %1236 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %1235
  %1237 = load i32, ptr %1236, align 4, !tbaa !5
  %1238 = add nsw i32 %1233, %1237
  store i32 %1238, ptr %86, align 4, !tbaa !5
  %1239 = load i32, ptr %85, align 4, !tbaa !5
  %1240 = icmp sge i32 %1239, 0
  br i1 %1240, label %1241, label %1261

1241:                                             ; preds = %1226
  %1242 = load i32, ptr %85, align 4, !tbaa !5
  %1243 = load i32, ptr @n, align 4, !tbaa !5
  %1244 = icmp slt i32 %1242, %1243
  br i1 %1244, label %1245, label %1261

1245:                                             ; preds = %1241
  %1246 = load i32, ptr %86, align 4, !tbaa !5
  %1247 = icmp sge i32 %1246, 0
  br i1 %1247, label %1248, label %1261

1248:                                             ; preds = %1245
  %1249 = load i32, ptr %86, align 4, !tbaa !5
  %1250 = load i32, ptr @m, align 4, !tbaa !5
  %1251 = icmp slt i32 %1249, %1250
  br i1 %1251, label %1252, label %1261

1252:                                             ; preds = %1248
  %1253 = load i32, ptr %85, align 4, !tbaa !5
  %1254 = load i32, ptr @m, align 4, !tbaa !5
  %1255 = mul nsw i32 %1253, %1254
  %1256 = load i32, ptr %86, align 4, !tbaa !5
  %1257 = add nsw i32 %1255, %1256
  %1258 = load i32, ptr getelementptr inbounds ([1000001 x i32], ptr @ord, i64 0, i64 1), align 4, !tbaa !5
  %1259 = icmp ne i32 %1257, %1258
  br i1 %1259, label %1260, label %1261

1260:                                             ; preds = %1252
  store i32 67, ptr %3, align 4
  br label %1265

1261:                                             ; preds = %1252, %1248, %1245, %1241, %1226
  br label %1262

1262:                                             ; preds = %1261
  %1263 = load i32, ptr %87, align 4, !tbaa !5
  %1264 = add nsw i32 %1263, 1
  store i32 %1264, ptr %87, align 4, !tbaa !5
  br label %1222, !llvm.loop !38

1265:                                             ; preds = %1260, %1225
  call void @llvm.lifetime.end.p0(i64 4, ptr %87) #6
  br label %1266

1266:                                             ; preds = %1265
  call void @llvm.lifetime.start.p0(i64 4, ptr %88) #6
  store i32 0, ptr %88, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %89) #6
  %1267 = load i32, ptr %85, align 4, !tbaa !5
  %1268 = load i32, ptr @m, align 4, !tbaa !5
  %1269 = mul nsw i32 %1267, %1268
  %1270 = load i32, ptr %86, align 4, !tbaa !5
  %1271 = add nsw i32 %1269, %1270
  store i32 %1271, ptr %89, align 4, !tbaa !5
  br label %1272

1272:                                             ; preds = %1281, %1266
  %1273 = load i32, ptr %88, align 4, !tbaa !5
  %1274 = sext i32 %1273 to i64
  %1275 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %1274
  %1276 = load i32, ptr %1275, align 4, !tbaa !5
  %1277 = load i32, ptr %89, align 4, !tbaa !5
  %1278 = icmp ne i32 %1276, %1277
  br i1 %1278, label %1280, label %1279

1279:                                             ; preds = %1272
  store i32 70, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %89) #6
  br label %1284

1280:                                             ; preds = %1272
  br label %1281

1281:                                             ; preds = %1280
  %1282 = load i32, ptr %88, align 4, !tbaa !5
  %1283 = add nsw i32 %1282, 1
  store i32 %1283, ptr %88, align 4, !tbaa !5
  br label %1272, !llvm.loop !39

1284:                                             ; preds = %1279
  %1285 = load i32, ptr %88, align 4, !tbaa !5
  %1286 = sext i32 %1285 to i64
  %1287 = getelementptr inbounds i32, ptr @ord, i64 %1286
  call void @_ZSt7reverseIPiEvT_S1_(ptr noundef @ord, ptr noundef %1287)
  call void @llvm.lifetime.end.p0(i64 4, ptr %88) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %86) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %85) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %84) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %83) #6
  br label %1288

1288:                                             ; preds = %1284, %1211
  call void @_Z5solveb(i1 noundef zeroext false)
  call void @llvm.lifetime.end.p0(i64 4, ptr %75) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %74) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %73) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %72) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %71) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %70) #6
  br label %1289

1289:                                             ; preds = %1288
  %1290 = load i32, ptr %69, align 4, !tbaa !5
  %1291 = add nsw i32 %1290, 1
  store i32 %1291, ptr %69, align 4, !tbaa !5
  br label %1007, !llvm.loop !40

1292:                                             ; preds = %1010
  call void @llvm.lifetime.start.p0(i64 4, ptr %90) #6
  store i32 0, ptr %90, align 4, !tbaa !5
  br label %1293

1293:                                             ; preds = %1326, %1292
  %1294 = load i32, ptr %90, align 4, !tbaa !5
  %1295 = load i32, ptr @n, align 4, !tbaa !5
  %1296 = icmp slt i32 %1294, %1295
  br i1 %1296, label %1298, label %1297

1297:                                             ; preds = %1293
  store i32 73, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %90) #6
  br label %1329

1298:                                             ; preds = %1293
  call void @llvm.lifetime.start.p0(i64 4, ptr %91) #6
  store i32 0, ptr %91, align 4, !tbaa !5
  br label %1299

1299:                                             ; preds = %1322, %1298
  %1300 = load i32, ptr %91, align 4, !tbaa !5
  %1301 = load i32, ptr @m, align 4, !tbaa !5
  %1302 = icmp slt i32 %1300, %1301
  br i1 %1302, label %1304, label %1303

1303:                                             ; preds = %1299
  store i32 76, ptr %3, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %91) #6
  br label %1325

1304:                                             ; preds = %1299
  %1305 = load i32, ptr %90, align 4, !tbaa !5
  %1306 = sext i32 %1305 to i64
  %1307 = getelementptr inbounds [1001 x [1001 x i32]], ptr @pos, i64 0, i64 %1306
  %1308 = load i32, ptr %91, align 4, !tbaa !5
  %1309 = sext i32 %1308 to i64
  %1310 = getelementptr inbounds [1001 x i32], ptr %1307, i64 0, i64 %1309
  %1311 = load i32, ptr %1310, align 4, !tbaa !5
  %1312 = add nsw i32 %1311, 1
  %1313 = load i32, ptr %91, align 4, !tbaa !5
  %1314 = add nsw i32 %1313, 1
  %1315 = load i32, ptr @m, align 4, !tbaa !5
  %1316 = icmp eq i32 %1314, %1315
  %1317 = zext i1 %1316 to i64
  %1318 = getelementptr inbounds [3 x i8], ptr @.str.3, i64 0, i64 %1317
  %1319 = load i8, ptr %1318, align 1, !tbaa !41
  %1320 = sext i8 %1319 to i32
  %1321 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, i32 noundef %1312, i32 noundef %1320)
  br label %1322

1322:                                             ; preds = %1304
  %1323 = load i32, ptr %91, align 4, !tbaa !5
  %1324 = add nsw i32 %1323, 1
  store i32 %1324, ptr %91, align 4, !tbaa !5
  br label %1299, !llvm.loop !42

1325:                                             ; preds = %1303
  br label %1326

1326:                                             ; preds = %1325
  %1327 = load i32, ptr %90, align 4, !tbaa !5
  %1328 = add nsw i32 %1327, 1
  store i32 %1328, ptr %90, align 4, !tbaa !5
  br label %1293, !llvm.loop !43

1329:                                             ; preds = %1297
  ret i32 0
}

; Function Attrs: nounwind
declare void @srand(i32 noundef) #4

; Function Attrs: nounwind
declare i64 @time(ptr noundef) #4

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

; Function Attrs: nounwind
declare i32 @rand() #4

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

attributes #0 = { mustprogress 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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { inlinehint mustprogress 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 = { 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 #4 = { 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 #5 = { "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 #6 = { 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 = distinct !{!9, !10}
!10 = !{!"llvm.loop.mustprogress"}
!11 = distinct !{!11, !10}
!12 = distinct !{!12, !10}
!13 = distinct !{!13, !10}
!14 = distinct !{!14, !10}
!15 = distinct !{!15, !10}
!16 = distinct !{!16, !10}
!17 = distinct !{!17, !10}
!18 = distinct !{!18, !10}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10}
!22 = distinct !{!22, !10}
!23 = distinct !{!23, !10}
!24 = !{!25, !25, i64 0}
!25 = !{!"bool", !7, i64 0}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = distinct !{!28, !10}
!29 = distinct !{!29, !10}
!30 = distinct !{!30, !10}
!31 = distinct !{!31, !10}
!32 = distinct !{!32, !10}
!33 = distinct !{!33, !10}
!34 = distinct !{!34, !10}
!35 = distinct !{!35, !10}
!36 = distinct !{!36, !10}
!37 = distinct !{!37, !10}
!38 = distinct !{!38, !10}
!39 = distinct !{!39, !10}
!40 = distinct !{!40, !10}
!41 = !{!7, !7, i64 0}
!42 = distinct !{!42, !10}
!43 = distinct !{!43, !10}


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

@n = external dso_local global i32, align 4
@m = external dso_local global i32, align 4
@q = external dso_local global i32, align 4
@mat = external dso_local global [1001 x [1001 x i32]], align 16
@pos = external dso_local local_unnamed_addr global [1001 x [1001 x i32]], align 16
@ord = external dso_local global [1000001 x i32], align 16
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@_ZZ4mainE3vis = external hidden local_unnamed_addr global [1001 x [1001 x i8]], align 16
@_ZL2dx = external hidden local_unnamed_addr constant [4 x i32], align 16
@_ZL2dy = external hidden local_unnamed_addr constant [4 x i32], align 16
@_ZZ4mainE3vis_0 = external hidden local_unnamed_addr global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_1 = external hidden local_unnamed_addr global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_2 = external hidden local_unnamed_addr global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_3 = external hidden local_unnamed_addr global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_4 = external hidden local_unnamed_addr global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_5 = external hidden local_unnamed_addr global [1001 x [1001 x i8]], align 16
@_ZZ4mainE3vis_6 = external hidden local_unnamed_addr global [1001 x [1001 x i8]], align 16
@.str.2 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [3 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z5solveb(i1 noundef zeroext) local_unnamed_addr #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt7reverseIPiEvT_S1_(ptr noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() local_unnamed_addr #2 {
  %1 = tail call i64 @time(ptr noundef null) #5
  %2 = trunc i64 %1 to i32
  tail call void @srand(i32 noundef %2) #5
  %3 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str, ptr noundef nonnull @n, ptr noundef nonnull @m, ptr noundef nonnull @q)
  %4 = load i32, ptr @n, align 4, !tbaa !5
  %5 = icmp sgt i32 %4, 0
  br i1 %5, label %.preheader566.lr.ph, label %._crit_edge583

.preheader566.lr.ph:                              ; preds = %0
  %6 = load i32, ptr @m, align 4
  %7 = icmp sgt i32 %6, 0
  br i1 %7, label %.preheader566, label %.lr.ph582

.preheader566:                                    ; preds = %.preheader566.lr.ph, %._crit_edge
  %8 = phi i32 [ %17, %._crit_edge ], [ %4, %.preheader566.lr.ph ]
  %9 = phi i32 [ %18, %._crit_edge ], [ %6, %.preheader566.lr.ph ]
  %indvars.iv744 = phi i64 [ %indvars.iv.next745, %._crit_edge ], [ 0, %.preheader566.lr.ph ]
  %10 = icmp sgt i32 %9, 0
  br i1 %10, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %.preheader566
  %11 = getelementptr inbounds [1001 x [1001 x i32]], ptr @mat, i64 0, i64 %indvars.iv744
  br label %21

.preheader565:                                    ; preds = %._crit_edge
  %12 = icmp sgt i32 %17, 0
  br i1 %12, label %.lr.ph582thread-pre-split, label %._crit_edge583

.lr.ph582thread-pre-split:                        ; preds = %.preheader565
  %.pr = load i32, ptr @m, align 4
  br label %.lr.ph582

.lr.ph582:                                        ; preds = %.preheader566.lr.ph, %.lr.ph582thread-pre-split
  %13 = phi i32 [ %.pr, %.lr.ph582thread-pre-split ], [ %6, %.preheader566.lr.ph ]
  %.lcssa567822 = phi i32 [ %17, %.lr.ph582thread-pre-split ], [ %4, %.preheader566.lr.ph ]
  %14 = icmp sgt i32 %13, 0
  %15 = zext i32 %13 to i64
  %16 = zext i32 %13 to i64
  %min.iters.check856 = icmp ult i32 %13, 8
  %n.vec859 = and i64 %16, 2147483640
  %.cast = trunc nuw nsw i64 %n.vec859 to i32
  %ind.end862 = sub nsw i32 %13, %.cast
  %.splatinsert = insertelement <4 x i32> poison, i32 %13, i64 0
  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  %induction = add nsw <4 x i32> %.splat, <i32 0, i32 -1, i32 -2, i32 -3>
  %cmp.n874 = icmp eq i64 %n.vec859, %16
  %min.iters.check = icmp ult i32 %13, 8
  %n.vec = and i64 %15, 2147483640
  %ind.end851 = trunc nuw nsw i64 %n.vec to i32
  %cmp.n = icmp eq i64 %n.vec, %15
  br label %33

._crit_edge.loopexit:                             ; preds = %21
  %.pre = load i32, ptr @n, align 4, !tbaa !5
  br label %._crit_edge

._crit_edge:                                      ; preds = %._crit_edge.loopexit, %.preheader566
  %17 = phi i32 [ %.pre, %._crit_edge.loopexit ], [ %8, %.preheader566 ]
  %18 = phi i32 [ %24, %._crit_edge.loopexit ], [ %9, %.preheader566 ]
  %indvars.iv.next745 = add nuw nsw i64 %indvars.iv744, 1
  %19 = sext i32 %17 to i64
  %20 = icmp slt i64 %indvars.iv.next745, %19
  br i1 %20, label %.preheader566, label %.preheader565, !llvm.loop !9

21:                                               ; preds = %.lr.ph, %21
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %21 ]
  %22 = getelementptr inbounds i32, ptr %11, i64 %indvars.iv
  %23 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.1, ptr noundef nonnull %22)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %24 = load i32, ptr @m, align 4, !tbaa !5
  %25 = sext i32 %24 to i64
  %26 = icmp slt i64 %indvars.iv.next, %25
  br i1 %26, label %21, label %._crit_edge.loopexit, !llvm.loop !12

._crit_edge583:                                   ; preds = %.loopexit563, %0, %.preheader565
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %27 = load i32, ptr @n, align 4, !tbaa !5
  %28 = icmp sgt i32 %27, 0
  br i1 %28, label %.lr.ph597, label %._crit_edge598

.lr.ph597:                                        ; preds = %._crit_edge583
  %29 = load i32, ptr @m, align 4
  %30 = icmp sgt i32 %29, 0
  %31 = zext i32 %29 to i64
  %32 = zext i32 %29 to i64
  %min.iters.check902 = icmp ult i32 %29, 8
  %n.vec905 = and i64 %32, 2147483640
  %ind.end909 = trunc nuw nsw i64 %n.vec905 to i32
  %cmp.n921 = icmp eq i64 %n.vec905, %32
  %min.iters.check877 = icmp ult i32 %29, 8
  %n.vec880 = and i64 %31, 2147483640
  %.cast883 = trunc nuw nsw i64 %n.vec880 to i32
  %ind.end884 = sub nsw i32 %29, %.cast883
  %.splatinsert888 = insertelement <4 x i32> poison, i32 %29, i64 0
  %.splat889 = shufflevector <4 x i32> %.splatinsert888, <4 x i32> poison, <4 x i32> zeroinitializer
  %induction890 = add nsw <4 x i32> %.splat889, <i32 0, i32 -1, i32 -2, i32 -3>
  %cmp.n899 = icmp eq i64 %n.vec880, %31
  br label %67

33:                                               ; preds = %.lr.ph582, %.loopexit563
  %.0375581 = phi i32 [ 0, %.lr.ph582 ], [ %.3378, %.loopexit563 ]
  %.0379579 = phi i32 [ 0, %.lr.ph582 ], [ %60, %.loopexit563 ]
  %34 = and i32 %.0379579, 1
  %.not521 = icmp eq i32 %34, 0
  br i1 %.not521, label %.preheader562, label %42

.preheader562:                                    ; preds = %33
  br i1 %14, label %.lr.ph577, label %.loopexit563

.lr.ph577:                                        ; preds = %.preheader562
  %35 = mul nuw nsw i32 %13, %.0379579
  %36 = sext i32 %.0375581 to i64
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.ph

scalar.ph.preheader:                              ; preds = %middle.block, %.lr.ph577
  %indvars.iv750.ph = phi i64 [ %36, %.lr.ph577 ], [ %ind.end, %middle.block ]
  %.0384575.ph = phi i32 [ 0, %.lr.ph577 ], [ %ind.end851, %middle.block ]
  br label %scalar.ph

vector.ph:                                        ; preds = %.lr.ph577
  %ind.end = add nsw i64 %n.vec, %36
  %broadcast.splatinsert = insertelement <4 x i32> poison, i32 %35, i64 0
  %broadcast.splat = shufflevector <4 x i32> %broadcast.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %step.add = add <4 x i32> %vec.ind, <i32 4, i32 4, i32 4, i32 4>
  %offset.idx = add i64 %index, %36
  %37 = add nuw nsw <4 x i32> %broadcast.splat, %vec.ind
  %38 = add nuw nsw <4 x i32> %broadcast.splat, %step.add
  %39 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %offset.idx
  %40 = getelementptr inbounds i8, ptr %39, i64 16
  store <4 x i32> %37, ptr %39, align 4, !tbaa !5
  store <4 x i32> %38, ptr %40, align 4, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %vec.ind.next = add <4 x i32> %vec.ind, <i32 8, i32 8, i32 8, i32 8>
  %41 = icmp eq i64 %index.next, %n.vec
  br i1 %41, label %middle.block, label %vector.body, !llvm.loop !13

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %.loopexit563.loopexit, label %scalar.ph.preheader

42:                                               ; preds = %33
  br i1 %14, label %.lr.ph573, label %.loopexit563

.lr.ph573:                                        ; preds = %42
  %43 = mul nuw nsw i32 %13, %.0379579
  %44 = sext i32 %.0375581 to i64
  br i1 %min.iters.check856, label %scalar.ph855.preheader, label %vector.ph857

vector.ph857:                                     ; preds = %.lr.ph573
  %ind.end860 = add nsw i64 %n.vec859, %44
  %broadcast.splatinsert871 = insertelement <4 x i32> poison, i32 %43, i64 0
  %broadcast.splat872 = shufflevector <4 x i32> %broadcast.splatinsert871, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body864

vector.body864:                                   ; preds = %vector.body864, %vector.ph857
  %index865 = phi i64 [ 0, %vector.ph857 ], [ %index.next873, %vector.body864 ]
  %vec.ind866 = phi <4 x i32> [ %induction, %vector.ph857 ], [ %vec.ind.next869, %vector.body864 ]
  %offset.idx870 = add i64 %index865, %44
  %45 = add nsw <4 x i32> %vec.ind866, <i32 -1, i32 -1, i32 -1, i32 -1>
  %46 = add <4 x i32> %vec.ind866, <i32 -5, i32 -5, i32 -5, i32 -5>
  %47 = add nsw <4 x i32> %45, %broadcast.splat872
  %48 = add nsw <4 x i32> %46, %broadcast.splat872
  %49 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %offset.idx870
  %50 = getelementptr inbounds i8, ptr %49, i64 16
  store <4 x i32> %47, ptr %49, align 4, !tbaa !5
  store <4 x i32> %48, ptr %50, align 4, !tbaa !5
  %index.next873 = add nuw i64 %index865, 8
  %vec.ind.next869 = add <4 x i32> %vec.ind866, <i32 -8, i32 -8, i32 -8, i32 -8>
  %51 = icmp eq i64 %index.next873, %n.vec859
  br i1 %51, label %middle.block854, label %vector.body864, !llvm.loop !16

middle.block854:                                  ; preds = %vector.body864
  br i1 %cmp.n874, label %.loopexit563.loopexit727, label %scalar.ph855.preheader

scalar.ph855.preheader:                           ; preds = %middle.block854, %.lr.ph573
  %indvars.iv747.ph = phi i64 [ %44, %.lr.ph573 ], [ %ind.end860, %middle.block854 ]
  %.0383.in570.ph = phi i32 [ %13, %.lr.ph573 ], [ %ind.end862, %middle.block854 ]
  br label %scalar.ph855

scalar.ph855:                                     ; preds = %scalar.ph855.preheader, %scalar.ph855
  %indvars.iv747 = phi i64 [ %indvars.iv.next748, %scalar.ph855 ], [ %indvars.iv747.ph, %scalar.ph855.preheader ]
  %.0383.in570 = phi i32 [ %.0383, %scalar.ph855 ], [ %.0383.in570.ph, %scalar.ph855.preheader ]
  %.0383 = add nsw i32 %.0383.in570, -1
  %52 = add nsw i32 %.0383, %43
  %indvars.iv.next748 = add nsw i64 %indvars.iv747, 1
  %53 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv747
  store i32 %52, ptr %53, align 4, !tbaa !5
  %54 = icmp ugt i32 %.0383.in570, 1
  br i1 %54, label %scalar.ph855, label %.loopexit563.loopexit727, !llvm.loop !17

scalar.ph:                                        ; preds = %scalar.ph.preheader, %scalar.ph
  %indvars.iv750 = phi i64 [ %indvars.iv.next751, %scalar.ph ], [ %indvars.iv750.ph, %scalar.ph.preheader ]
  %.0384575 = phi i32 [ %57, %scalar.ph ], [ %.0384575.ph, %scalar.ph.preheader ]
  %55 = add nuw nsw i32 %35, %.0384575
  %indvars.iv.next751 = add nsw i64 %indvars.iv750, 1
  %56 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv750
  store i32 %55, ptr %56, align 4, !tbaa !5
  %57 = add nuw nsw i32 %.0384575, 1
  %exitcond.not = icmp eq i32 %57, %13
  br i1 %exitcond.not, label %.loopexit563.loopexit, label %scalar.ph, !llvm.loop !18

.loopexit563.loopexit:                            ; preds = %scalar.ph, %middle.block
  %indvars.iv.next751.lcssa = phi i64 [ %ind.end, %middle.block ], [ %indvars.iv.next751, %scalar.ph ]
  %58 = trunc nsw i64 %indvars.iv.next751.lcssa to i32
  br label %.loopexit563

.loopexit563.loopexit727:                         ; preds = %scalar.ph855, %middle.block854
  %indvars.iv.next748.lcssa = phi i64 [ %ind.end860, %middle.block854 ], [ %indvars.iv.next748, %scalar.ph855 ]
  %59 = trunc nsw i64 %indvars.iv.next748.lcssa to i32
  br label %.loopexit563

.loopexit563:                                     ; preds = %.loopexit563.loopexit727, %.loopexit563.loopexit, %42, %.preheader562
  %.3378 = phi i32 [ %.0375581, %.preheader562 ], [ %.0375581, %42 ], [ %58, %.loopexit563.loopexit ], [ %59, %.loopexit563.loopexit727 ]
  %60 = add nuw nsw i32 %.0379579, 1
  %exitcond753.not = icmp eq i32 %60, %.lcssa567822
  br i1 %exitcond753.not, label %._crit_edge583, label %33, !llvm.loop !19

._crit_edge598:                                   ; preds = %.loopexit559, %._crit_edge583
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %61 = load i32, ptr @m, align 4, !tbaa !5
  %62 = icmp sgt i32 %61, 0
  br i1 %62, label %.lr.ph612, label %._crit_edge613

.lr.ph612:                                        ; preds = %._crit_edge598
  %63 = load i32, ptr @n, align 4
  %64 = icmp sgt i32 %63, 0
  %65 = zext i32 %63 to i64
  %66 = zext i32 %63 to i64
  %min.iters.check948 = icmp ult i32 %63, 8
  %n.vec951 = and i64 %66, 2147483640
  %.cast954 = trunc nuw nsw i64 %n.vec951 to i32
  %ind.end955 = sub nsw i32 %63, %.cast954
  %.splatinsert959 = insertelement <4 x i32> poison, i32 %63, i64 0
  %.splat960 = shufflevector <4 x i32> %.splatinsert959, <4 x i32> poison, <4 x i32> zeroinitializer
  %induction961 = add nsw <4 x i32> %.splat960, <i32 0, i32 -1, i32 -2, i32 -3>
  %broadcast.splatinsert967 = insertelement <4 x i32> poison, i32 %61, i64 0
  %broadcast.splat968 = shufflevector <4 x i32> %broadcast.splatinsert967, <4 x i32> poison, <4 x i32> zeroinitializer
  %cmp.n972 = icmp eq i64 %n.vec951, %66
  %min.iters.check924 = icmp ult i32 %63, 8
  %n.vec927 = and i64 %65, 2147483640
  %ind.end931 = trunc nuw nsw i64 %n.vec927 to i32
  %broadcast.splatinsert940 = insertelement <4 x i32> poison, i32 %61, i64 0
  %broadcast.splat941 = shufflevector <4 x i32> %broadcast.splatinsert940, <4 x i32> poison, <4 x i32> zeroinitializer
  %cmp.n945 = icmp eq i64 %n.vec927, %65
  br label %101

67:                                               ; preds = %.lr.ph597, %.loopexit559
  %.0397595 = phi i32 [ 0, %.lr.ph597 ], [ %.3400, %.loopexit559 ]
  %.0401593 = phi i32 [ 0, %.lr.ph597 ], [ %94, %.loopexit559 ]
  %68 = and i32 %.0401593, 1
  %.not520 = icmp eq i32 %68, 0
  br i1 %.not520, label %79, label %.preheader560

.preheader560:                                    ; preds = %67
  br i1 %30, label %.lr.ph586, label %.loopexit559

.lr.ph586:                                        ; preds = %.preheader560
  %69 = mul nuw nsw i32 %29, %.0401593
  %70 = sext i32 %.0397595 to i64
  br i1 %min.iters.check902, label %scalar.ph901.preheader, label %vector.ph903

vector.ph903:                                     ; preds = %.lr.ph586
  %ind.end906 = add nsw i64 %n.vec905, %70
  %broadcast.splatinsert918 = insertelement <4 x i32> poison, i32 %69, i64 0
  %broadcast.splat919 = shufflevector <4 x i32> %broadcast.splatinsert918, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body911

vector.body911:                                   ; preds = %vector.body911, %vector.ph903
  %index912 = phi i64 [ 0, %vector.ph903 ], [ %index.next920, %vector.body911 ]
  %vec.ind913 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph903 ], [ %vec.ind.next916, %vector.body911 ]
  %step.add914 = add <4 x i32> %vec.ind913, <i32 4, i32 4, i32 4, i32 4>
  %offset.idx917 = add i64 %index912, %70
  %71 = add nuw nsw <4 x i32> %broadcast.splat919, %vec.ind913
  %72 = add nuw nsw <4 x i32> %broadcast.splat919, %step.add914
  %73 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %offset.idx917
  %74 = getelementptr inbounds i8, ptr %73, i64 16
  store <4 x i32> %71, ptr %73, align 4, !tbaa !5
  store <4 x i32> %72, ptr %74, align 4, !tbaa !5
  %index.next920 = add nuw i64 %index912, 8
  %vec.ind.next916 = add <4 x i32> %vec.ind913, <i32 8, i32 8, i32 8, i32 8>
  %75 = icmp eq i64 %index.next920, %n.vec905
  br i1 %75, label %middle.block900, label %vector.body911, !llvm.loop !20

middle.block900:                                  ; preds = %vector.body911
  br i1 %cmp.n921, label %.loopexit559.loopexit726, label %scalar.ph901.preheader

scalar.ph901.preheader:                           ; preds = %middle.block900, %.lr.ph586
  %indvars.iv754.ph = phi i64 [ %70, %.lr.ph586 ], [ %ind.end906, %middle.block900 ]
  %.0409584.ph = phi i32 [ 0, %.lr.ph586 ], [ %ind.end909, %middle.block900 ]
  br label %scalar.ph901

scalar.ph901:                                     ; preds = %scalar.ph901.preheader, %scalar.ph901
  %indvars.iv754 = phi i64 [ %indvars.iv.next755, %scalar.ph901 ], [ %indvars.iv754.ph, %scalar.ph901.preheader ]
  %.0409584 = phi i32 [ %78, %scalar.ph901 ], [ %.0409584.ph, %scalar.ph901.preheader ]
  %76 = add nuw nsw i32 %69, %.0409584
  %indvars.iv.next755 = add nsw i64 %indvars.iv754, 1
  %77 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv754
  store i32 %76, ptr %77, align 4, !tbaa !5
  %78 = add nuw nsw i32 %.0409584, 1
  %exitcond757.not = icmp eq i32 %78, %29
  br i1 %exitcond757.not, label %.loopexit559.loopexit726, label %scalar.ph901, !llvm.loop !21

79:                                               ; preds = %67
  br i1 %30, label %.lr.ph591, label %.loopexit559

.lr.ph591:                                        ; preds = %79
  %80 = mul nuw nsw i32 %29, %.0401593
  %81 = sext i32 %.0397595 to i64
  br i1 %min.iters.check877, label %scalar.ph876.preheader, label %vector.ph878

vector.ph878:                                     ; preds = %.lr.ph591
  %ind.end881 = add nsw i64 %n.vec880, %81
  %broadcast.splatinsert896 = insertelement <4 x i32> poison, i32 %80, i64 0
  %broadcast.splat897 = shufflevector <4 x i32> %broadcast.splatinsert896, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body886

vector.body886:                                   ; preds = %vector.body886, %vector.ph878
  %index887 = phi i64 [ 0, %vector.ph878 ], [ %index.next898, %vector.body886 ]
  %vec.ind891 = phi <4 x i32> [ %induction890, %vector.ph878 ], [ %vec.ind.next894, %vector.body886 ]
  %offset.idx895 = add i64 %index887, %81
  %82 = add nsw <4 x i32> %vec.ind891, <i32 -1, i32 -1, i32 -1, i32 -1>
  %83 = add <4 x i32> %vec.ind891, <i32 -5, i32 -5, i32 -5, i32 -5>
  %84 = add nsw <4 x i32> %82, %broadcast.splat897
  %85 = add nsw <4 x i32> %83, %broadcast.splat897
  %86 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %offset.idx895
  %87 = getelementptr inbounds i8, ptr %86, i64 16
  store <4 x i32> %84, ptr %86, align 4, !tbaa !5
  store <4 x i32> %85, ptr %87, align 4, !tbaa !5
  %index.next898 = add nuw i64 %index887, 8
  %vec.ind.next894 = add <4 x i32> %vec.ind891, <i32 -8, i32 -8, i32 -8, i32 -8>
  %88 = icmp eq i64 %index.next898, %n.vec880
  br i1 %88, label %middle.block875, label %vector.body886, !llvm.loop !22

middle.block875:                                  ; preds = %vector.body886
  br i1 %cmp.n899, label %.loopexit559.loopexit, label %scalar.ph876.preheader

scalar.ph876.preheader:                           ; preds = %middle.block875, %.lr.ph591
  %indvars.iv758.ph = phi i64 [ %81, %.lr.ph591 ], [ %ind.end881, %middle.block875 ]
  %.0410.in588.ph = phi i32 [ %29, %.lr.ph591 ], [ %ind.end884, %middle.block875 ]
  br label %scalar.ph876

scalar.ph876:                                     ; preds = %scalar.ph876.preheader, %scalar.ph876
  %indvars.iv758 = phi i64 [ %indvars.iv.next759, %scalar.ph876 ], [ %indvars.iv758.ph, %scalar.ph876.preheader ]
  %.0410.in588 = phi i32 [ %.0410, %scalar.ph876 ], [ %.0410.in588.ph, %scalar.ph876.preheader ]
  %.0410 = add nsw i32 %.0410.in588, -1
  %89 = add nsw i32 %.0410, %80
  %indvars.iv.next759 = add nsw i64 %indvars.iv758, 1
  %90 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv758
  store i32 %89, ptr %90, align 4, !tbaa !5
  %91 = icmp ugt i32 %.0410.in588, 1
  br i1 %91, label %scalar.ph876, label %.loopexit559.loopexit, !llvm.loop !23

.loopexit559.loopexit:                            ; preds = %scalar.ph876, %middle.block875
  %indvars.iv.next759.lcssa = phi i64 [ %ind.end881, %middle.block875 ], [ %indvars.iv.next759, %scalar.ph876 ]
  %92 = trunc nsw i64 %indvars.iv.next759.lcssa to i32
  br label %.loopexit559

.loopexit559.loopexit726:                         ; preds = %scalar.ph901, %middle.block900
  %indvars.iv.next755.lcssa = phi i64 [ %ind.end906, %middle.block900 ], [ %indvars.iv.next755, %scalar.ph901 ]
  %93 = trunc nsw i64 %indvars.iv.next755.lcssa to i32
  br label %.loopexit559

.loopexit559:                                     ; preds = %.loopexit559.loopexit726, %.loopexit559.loopexit, %.preheader560, %79
  %.3400 = phi i32 [ %.0397595, %79 ], [ %.0397595, %.preheader560 ], [ %92, %.loopexit559.loopexit ], [ %93, %.loopexit559.loopexit726 ]
  %94 = add nuw nsw i32 %.0401593, 1
  %exitcond761.not = icmp eq i32 %94, %27
  br i1 %exitcond761.not, label %._crit_edge598, label %67, !llvm.loop !24

._crit_edge613:                                   ; preds = %.loopexit557, %._crit_edge598
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %95 = load i32, ptr @m, align 4, !tbaa !5
  %96 = icmp sgt i32 %95, 0
  br i1 %96, label %.lr.ph627, label %._crit_edge628

.lr.ph627:                                        ; preds = %._crit_edge613
  %97 = load i32, ptr @n, align 4
  %98 = icmp sgt i32 %97, 0
  %99 = zext i32 %97 to i64
  %100 = zext i32 %97 to i64
  %min.iters.check1002 = icmp ult i32 %97, 8
  %n.vec1005 = and i64 %100, 2147483640
  %ind.end1009 = trunc nuw nsw i64 %n.vec1005 to i32
  %broadcast.splatinsert1018 = insertelement <4 x i32> poison, i32 %95, i64 0
  %broadcast.splat1019 = shufflevector <4 x i32> %broadcast.splatinsert1018, <4 x i32> poison, <4 x i32> zeroinitializer
  %cmp.n1023 = icmp eq i64 %n.vec1005, %100
  %min.iters.check975 = icmp ult i32 %97, 8
  %n.vec978 = and i64 %99, 2147483640
  %.cast981 = trunc nuw nsw i64 %n.vec978 to i32
  %ind.end982 = sub nsw i32 %97, %.cast981
  %.splatinsert986 = insertelement <4 x i32> poison, i32 %97, i64 0
  %.splat987 = shufflevector <4 x i32> %.splatinsert986, <4 x i32> poison, <4 x i32> zeroinitializer
  %induction988 = add nsw <4 x i32> %.splat987, <i32 0, i32 -1, i32 -2, i32 -3>
  %broadcast.splatinsert994 = insertelement <4 x i32> poison, i32 %95, i64 0
  %broadcast.splat995 = shufflevector <4 x i32> %broadcast.splatinsert994, <4 x i32> poison, <4 x i32> zeroinitializer
  %cmp.n999 = icmp eq i64 %n.vec978, %99
  br label %137

101:                                              ; preds = %.lr.ph612, %.loopexit557
  %.0418610 = phi i32 [ 0, %.lr.ph612 ], [ %.3421, %.loopexit557 ]
  %.0422608 = phi i32 [ 0, %.lr.ph612 ], [ %132, %.loopexit557 ]
  %102 = and i32 %.0422608, 1
  %.not519 = icmp eq i32 %102, 0
  br i1 %.not519, label %.preheader556, label %111

.preheader556:                                    ; preds = %101
  br i1 %64, label %.lr.ph606.preheader, label %.loopexit557

.lr.ph606.preheader:                              ; preds = %.preheader556
  %103 = sext i32 %.0418610 to i64
  br i1 %min.iters.check924, label %.lr.ph606.preheader1035, label %vector.ph925

.lr.ph606.preheader1035:                          ; preds = %middle.block922, %.lr.ph606.preheader
  %indvars.iv765.ph = phi i64 [ %103, %.lr.ph606.preheader ], [ %ind.end928, %middle.block922 ]
  %.0431604.ph = phi i32 [ 0, %.lr.ph606.preheader ], [ %ind.end931, %middle.block922 ]
  br label %.lr.ph606

vector.ph925:                                     ; preds = %.lr.ph606.preheader
  %ind.end928 = add nsw i64 %n.vec927, %103
  %broadcast.splatinsert942 = insertelement <4 x i32> poison, i32 %.0422608, i64 0
  %broadcast.splat943 = shufflevector <4 x i32> %broadcast.splatinsert942, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body933

vector.body933:                                   ; preds = %vector.body933, %vector.ph925
  %index934 = phi i64 [ 0, %vector.ph925 ], [ %index.next944, %vector.body933 ]
  %vec.ind935 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph925 ], [ %vec.ind.next938, %vector.body933 ]
  %step.add936 = add <4 x i32> %vec.ind935, <i32 4, i32 4, i32 4, i32 4>
  %offset.idx939 = add i64 %index934, %103
  %104 = mul nuw nsw <4 x i32> %vec.ind935, %broadcast.splat941
  %105 = mul nuw nsw <4 x i32> %step.add936, %broadcast.splat941
  %106 = add nuw nsw <4 x i32> %104, %broadcast.splat943
  %107 = add nuw nsw <4 x i32> %105, %broadcast.splat943
  %108 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %offset.idx939
  %109 = getelementptr inbounds i8, ptr %108, i64 16
  store <4 x i32> %106, ptr %108, align 4, !tbaa !5
  store <4 x i32> %107, ptr %109, align 4, !tbaa !5
  %index.next944 = add nuw i64 %index934, 8
  %vec.ind.next938 = add <4 x i32> %vec.ind935, <i32 8, i32 8, i32 8, i32 8>
  %110 = icmp eq i64 %index.next944, %n.vec927
  br i1 %110, label %middle.block922, label %vector.body933, !llvm.loop !25

middle.block922:                                  ; preds = %vector.body933
  br i1 %cmp.n945, label %.loopexit557.loopexit, label %.lr.ph606.preheader1035

111:                                              ; preds = %101
  br i1 %64, label %.lr.ph602.preheader, label %.loopexit557

.lr.ph602.preheader:                              ; preds = %111
  %112 = sext i32 %.0418610 to i64
  br i1 %min.iters.check948, label %.lr.ph602.preheader1036, label %vector.ph949

vector.ph949:                                     ; preds = %.lr.ph602.preheader
  %ind.end952 = add nsw i64 %n.vec951, %112
  %broadcast.splatinsert969 = insertelement <4 x i32> poison, i32 %.0422608, i64 0
  %broadcast.splat970 = shufflevector <4 x i32> %broadcast.splatinsert969, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body957

vector.body957:                                   ; preds = %vector.body957, %vector.ph949
  %index958 = phi i64 [ 0, %vector.ph949 ], [ %index.next971, %vector.body957 ]
  %vec.ind962 = phi <4 x i32> [ %induction961, %vector.ph949 ], [ %vec.ind.next965, %vector.body957 ]
  %offset.idx966 = add i64 %index958, %112
  %113 = add nsw <4 x i32> %vec.ind962, <i32 -1, i32 -1, i32 -1, i32 -1>
  %114 = add <4 x i32> %vec.ind962, <i32 -5, i32 -5, i32 -5, i32 -5>
  %115 = mul nsw <4 x i32> %113, %broadcast.splat968
  %116 = mul nsw <4 x i32> %114, %broadcast.splat968
  %117 = add nsw <4 x i32> %115, %broadcast.splat970
  %118 = add nsw <4 x i32> %116, %broadcast.splat970
  %119 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %offset.idx966
  %120 = getelementptr inbounds i8, ptr %119, i64 16
  store <4 x i32> %117, ptr %119, align 4, !tbaa !5
  store <4 x i32> %118, ptr %120, align 4, !tbaa !5
  %index.next971 = add nuw i64 %index958, 8
  %vec.ind.next965 = add <4 x i32> %vec.ind962, <i32 -8, i32 -8, i32 -8, i32 -8>
  %121 = icmp eq i64 %index.next971, %n.vec951
  br i1 %121, label %middle.block946, label %vector.body957, !llvm.loop !26

middle.block946:                                  ; preds = %vector.body957
  br i1 %cmp.n972, label %.loopexit557.loopexit725, label %.lr.ph602.preheader1036

.lr.ph602.preheader1036:                          ; preds = %middle.block946, %.lr.ph602.preheader
  %indvars.iv762.ph = phi i64 [ %112, %.lr.ph602.preheader ], [ %ind.end952, %middle.block946 ]
  %.0430.in599.ph = phi i32 [ %63, %.lr.ph602.preheader ], [ %ind.end955, %middle.block946 ]
  br label %.lr.ph602

.lr.ph602:                                        ; preds = %.lr.ph602.preheader1036, %.lr.ph602
  %indvars.iv762 = phi i64 [ %indvars.iv.next763, %.lr.ph602 ], [ %indvars.iv762.ph, %.lr.ph602.preheader1036 ]
  %.0430.in599 = phi i32 [ %.0430, %.lr.ph602 ], [ %.0430.in599.ph, %.lr.ph602.preheader1036 ]
  %.0430 = add nsw i32 %.0430.in599, -1
  %122 = mul nsw i32 %.0430, %61
  %123 = add nsw i32 %122, %.0422608
  %indvars.iv.next763 = add nsw i64 %indvars.iv762, 1
  %124 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv762
  store i32 %123, ptr %124, align 4, !tbaa !5
  %125 = icmp ugt i32 %.0430.in599, 1
  br i1 %125, label %.lr.ph602, label %.loopexit557.loopexit725, !llvm.loop !27

.lr.ph606:                                        ; preds = %.lr.ph606.preheader1035, %.lr.ph606
  %indvars.iv765 = phi i64 [ %indvars.iv.next766, %.lr.ph606 ], [ %indvars.iv765.ph, %.lr.ph606.preheader1035 ]
  %.0431604 = phi i32 [ %129, %.lr.ph606 ], [ %.0431604.ph, %.lr.ph606.preheader1035 ]
  %126 = mul nuw nsw i32 %.0431604, %61
  %127 = add nuw nsw i32 %126, %.0422608
  %indvars.iv.next766 = add nsw i64 %indvars.iv765, 1
  %128 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv765
  store i32 %127, ptr %128, align 4, !tbaa !5
  %129 = add nuw nsw i32 %.0431604, 1
  %exitcond768.not = icmp eq i32 %129, %63
  br i1 %exitcond768.not, label %.loopexit557.loopexit, label %.lr.ph606, !llvm.loop !28

.loopexit557.loopexit:                            ; preds = %.lr.ph606, %middle.block922
  %indvars.iv.next766.lcssa = phi i64 [ %ind.end928, %middle.block922 ], [ %indvars.iv.next766, %.lr.ph606 ]
  %130 = trunc nsw i64 %indvars.iv.next766.lcssa to i32
  br label %.loopexit557

.loopexit557.loopexit725:                         ; preds = %.lr.ph602, %middle.block946
  %indvars.iv.next763.lcssa = phi i64 [ %ind.end952, %middle.block946 ], [ %indvars.iv.next763, %.lr.ph602 ]
  %131 = trunc nsw i64 %indvars.iv.next763.lcssa to i32
  br label %.loopexit557

.loopexit557:                                     ; preds = %.loopexit557.loopexit725, %.loopexit557.loopexit, %111, %.preheader556
  %.3421 = phi i32 [ %.0418610, %.preheader556 ], [ %.0418610, %111 ], [ %130, %.loopexit557.loopexit ], [ %131, %.loopexit557.loopexit725 ]
  %132 = add nuw nsw i32 %.0422608, 1
  %exitcond769.not = icmp eq i32 %132, %61
  br i1 %exitcond769.not, label %._crit_edge613, label %101, !llvm.loop !29

._crit_edge628:                                   ; preds = %.loopexit, %._crit_edge613
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %133 = load i8, ptr @_ZZ4mainE3vis, align 16, !tbaa !30, !range !32, !noundef !33
  %134 = trunc nuw i8 %133 to i1
  br i1 %134, label %._crit_edge635, label %.lr.ph634

.lr.ph634:                                        ; preds = %._crit_edge628
  %135 = load i32, ptr @m, align 4
  %136 = load i32, ptr @n, align 4
  br label %169

137:                                              ; preds = %.lr.ph627, %.loopexit
  %.0439625 = phi i32 [ 0, %.lr.ph627 ], [ %.3442, %.loopexit ]
  %.0443623 = phi i32 [ 0, %.lr.ph627 ], [ %168, %.loopexit ]
  %138 = and i32 %.0443623, 1
  %.not518 = icmp eq i32 %138, 0
  br i1 %.not518, label %151, label %.preheader554

.preheader554:                                    ; preds = %137
  br i1 %98, label %.lr.ph616.preheader, label %.loopexit

.lr.ph616.preheader:                              ; preds = %.preheader554
  %139 = sext i32 %.0439625 to i64
  br i1 %min.iters.check1002, label %.lr.ph616.preheader1032, label %vector.ph1003

vector.ph1003:                                    ; preds = %.lr.ph616.preheader
  %ind.end1006 = add nsw i64 %n.vec1005, %139
  %broadcast.splatinsert1020 = insertelement <4 x i32> poison, i32 %.0443623, i64 0
  %broadcast.splat1021 = shufflevector <4 x i32> %broadcast.splatinsert1020, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body1011

vector.body1011:                                  ; preds = %vector.body1011, %vector.ph1003
  %index1012 = phi i64 [ 0, %vector.ph1003 ], [ %index.next1022, %vector.body1011 ]
  %vec.ind1013 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %vector.ph1003 ], [ %vec.ind.next1016, %vector.body1011 ]
  %step.add1014 = add <4 x i32> %vec.ind1013, <i32 4, i32 4, i32 4, i32 4>
  %offset.idx1017 = add i64 %index1012, %139
  %140 = mul nuw nsw <4 x i32> %vec.ind1013, %broadcast.splat1019
  %141 = mul nuw nsw <4 x i32> %step.add1014, %broadcast.splat1019
  %142 = add nuw nsw <4 x i32> %140, %broadcast.splat1021
  %143 = add nuw nsw <4 x i32> %141, %broadcast.splat1021
  %144 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %offset.idx1017
  %145 = getelementptr inbounds i8, ptr %144, i64 16
  store <4 x i32> %142, ptr %144, align 4, !tbaa !5
  store <4 x i32> %143, ptr %145, align 4, !tbaa !5
  %index.next1022 = add nuw i64 %index1012, 8
  %vec.ind.next1016 = add <4 x i32> %vec.ind1013, <i32 8, i32 8, i32 8, i32 8>
  %146 = icmp eq i64 %index.next1022, %n.vec1005
  br i1 %146, label %middle.block1000, label %vector.body1011, !llvm.loop !34

middle.block1000:                                 ; preds = %vector.body1011
  br i1 %cmp.n1023, label %.loopexit.loopexit724, label %.lr.ph616.preheader1032

.lr.ph616.preheader1032:                          ; preds = %middle.block1000, %.lr.ph616.preheader
  %indvars.iv770.ph = phi i64 [ %139, %.lr.ph616.preheader ], [ %ind.end1006, %middle.block1000 ]
  %.0451614.ph = phi i32 [ 0, %.lr.ph616.preheader ], [ %ind.end1009, %middle.block1000 ]
  br label %.lr.ph616

.lr.ph616:                                        ; preds = %.lr.ph616.preheader1032, %.lr.ph616
  %indvars.iv770 = phi i64 [ %indvars.iv.next771, %.lr.ph616 ], [ %indvars.iv770.ph, %.lr.ph616.preheader1032 ]
  %.0451614 = phi i32 [ %150, %.lr.ph616 ], [ %.0451614.ph, %.lr.ph616.preheader1032 ]
  %147 = mul nuw nsw i32 %.0451614, %95
  %148 = add nuw nsw i32 %147, %.0443623
  %indvars.iv.next771 = add nsw i64 %indvars.iv770, 1
  %149 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv770
  store i32 %148, ptr %149, align 4, !tbaa !5
  %150 = add nuw nsw i32 %.0451614, 1
  %exitcond773.not = icmp eq i32 %150, %97
  br i1 %exitcond773.not, label %.loopexit.loopexit724, label %.lr.ph616, !llvm.loop !35

151:                                              ; preds = %137
  br i1 %98, label %.lr.ph621.preheader, label %.loopexit

.lr.ph621.preheader:                              ; preds = %151
  %152 = sext i32 %.0439625 to i64
  br i1 %min.iters.check975, label %.lr.ph621.preheader1031, label %vector.ph976

vector.ph976:                                     ; preds = %.lr.ph621.preheader
  %ind.end979 = add nsw i64 %n.vec978, %152
  %broadcast.splatinsert996 = insertelement <4 x i32> poison, i32 %.0443623, i64 0
  %broadcast.splat997 = shufflevector <4 x i32> %broadcast.splatinsert996, <4 x i32> poison, <4 x i32> zeroinitializer
  br label %vector.body984

vector.body984:                                   ; preds = %vector.body984, %vector.ph976
  %index985 = phi i64 [ 0, %vector.ph976 ], [ %index.next998, %vector.body984 ]
  %vec.ind989 = phi <4 x i32> [ %induction988, %vector.ph976 ], [ %vec.ind.next992, %vector.body984 ]
  %offset.idx993 = add i64 %index985, %152
  %153 = add nsw <4 x i32> %vec.ind989, <i32 -1, i32 -1, i32 -1, i32 -1>
  %154 = add <4 x i32> %vec.ind989, <i32 -5, i32 -5, i32 -5, i32 -5>
  %155 = mul nsw <4 x i32> %153, %broadcast.splat995
  %156 = mul nsw <4 x i32> %154, %broadcast.splat995
  %157 = add nsw <4 x i32> %155, %broadcast.splat997
  %158 = add nsw <4 x i32> %156, %broadcast.splat997
  %159 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %offset.idx993
  %160 = getelementptr inbounds i8, ptr %159, i64 16
  store <4 x i32> %157, ptr %159, align 4, !tbaa !5
  store <4 x i32> %158, ptr %160, align 4, !tbaa !5
  %index.next998 = add nuw i64 %index985, 8
  %vec.ind.next992 = add <4 x i32> %vec.ind989, <i32 -8, i32 -8, i32 -8, i32 -8>
  %161 = icmp eq i64 %index.next998, %n.vec978
  br i1 %161, label %middle.block973, label %vector.body984, !llvm.loop !36

middle.block973:                                  ; preds = %vector.body984
  br i1 %cmp.n999, label %.loopexit.loopexit, label %.lr.ph621.preheader1031

.lr.ph621.preheader1031:                          ; preds = %middle.block973, %.lr.ph621.preheader
  %indvars.iv774.ph = phi i64 [ %152, %.lr.ph621.preheader ], [ %ind.end979, %middle.block973 ]
  %.0452.in618.ph = phi i32 [ %97, %.lr.ph621.preheader ], [ %ind.end982, %middle.block973 ]
  br label %.lr.ph621

.lr.ph621:                                        ; preds = %.lr.ph621.preheader1031, %.lr.ph621
  %indvars.iv774 = phi i64 [ %indvars.iv.next775, %.lr.ph621 ], [ %indvars.iv774.ph, %.lr.ph621.preheader1031 ]
  %.0452.in618 = phi i32 [ %.0452, %.lr.ph621 ], [ %.0452.in618.ph, %.lr.ph621.preheader1031 ]
  %.0452 = add nsw i32 %.0452.in618, -1
  %162 = mul nsw i32 %.0452, %95
  %163 = add nsw i32 %162, %.0443623
  %indvars.iv.next775 = add nsw i64 %indvars.iv774, 1
  %164 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv774
  store i32 %163, ptr %164, align 4, !tbaa !5
  %165 = icmp ugt i32 %.0452.in618, 1
  br i1 %165, label %.lr.ph621, label %.loopexit.loopexit, !llvm.loop !37

.loopexit.loopexit:                               ; preds = %.lr.ph621, %middle.block973
  %indvars.iv.next775.lcssa = phi i64 [ %ind.end979, %middle.block973 ], [ %indvars.iv.next775, %.lr.ph621 ]
  %166 = trunc nsw i64 %indvars.iv.next775.lcssa to i32
  br label %.loopexit

.loopexit.loopexit724:                            ; preds = %.lr.ph616, %middle.block1000
  %indvars.iv.next771.lcssa = phi i64 [ %ind.end1006, %middle.block1000 ], [ %indvars.iv.next771, %.lr.ph616 ]
  %167 = trunc nsw i64 %indvars.iv.next771.lcssa to i32
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit724, %.loopexit.loopexit, %.preheader554, %151
  %.3442 = phi i32 [ %.0439625, %151 ], [ %.0439625, %.preheader554 ], [ %166, %.loopexit.loopexit ], [ %167, %.loopexit.loopexit724 ]
  %168 = add nuw nsw i32 %.0443623, 1
  %exitcond777.not = icmp eq i32 %168, %95
  br i1 %exitcond777.not, label %._crit_edge628, label %137, !llvm.loop !38

169:                                              ; preds = %.lr.ph634, %202
  %indvars.iv778 = phi i64 [ 0, %.lr.ph634 ], [ %indvars.iv.next779, %202 ]
  %170 = phi ptr [ @_ZZ4mainE3vis, %.lr.ph634 ], [ %205, %202 ]
  %.0461631 = phi i32 [ 0, %.lr.ph634 ], [ %.1462, %202 ]
  %.0470630 = phi i32 [ 0, %.lr.ph634 ], [ %.1471, %202 ]
  %.0472629 = phi i32 [ 0, %.lr.ph634 ], [ %.1473, %202 ]
  store i8 1, ptr %170, align 1, !tbaa !30
  %171 = mul nsw i32 %135, %.0461631
  %172 = add nsw i32 %171, %.0470630
  %indvars.iv.next779 = add nuw nsw i64 %indvars.iv778, 1
  %173 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv778
  store i32 %172, ptr %173, align 4, !tbaa !5
  %174 = sext i32 %.0472629 to i64
  %175 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %174
  %176 = load i32, ptr %175, align 4, !tbaa !5
  %177 = add nsw i32 %176, %.0461631
  %178 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %174
  %179 = load i32, ptr %178, align 4, !tbaa !5
  %180 = add nsw i32 %179, %.0470630
  %181 = icmp sgt i32 %177, -1
  br i1 %181, label %182, label %192

182:                                              ; preds = %169
  %183 = icmp slt i32 %177, %136
  %184 = icmp sgt i32 %180, -1
  %or.cond = select i1 %183, i1 %184, i1 false
  %185 = icmp slt i32 %180, %135
  %or.cond523 = select i1 %or.cond, i1 %185, i1 false
  br i1 %or.cond523, label %186, label %192

186:                                              ; preds = %182
  %187 = zext nneg i32 %177 to i64
  %188 = zext nneg i32 %180 to i64
  %189 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis, i64 0, i64 %187, i64 %188
  %190 = load i8, ptr %189, align 1, !tbaa !30, !range !32, !noundef !33
  %191 = trunc nuw i8 %190 to i1
  br i1 %191, label %192, label %202

192:                                              ; preds = %186, %182, %169
  %193 = add nsw i32 %.0472629, 1
  %194 = and i32 %193, 3
  %195 = zext nneg i32 %194 to i64
  %196 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %195
  %197 = load i32, ptr %196, align 4, !tbaa !5
  %198 = add nsw i32 %197, %.0461631
  %199 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %195
  %200 = load i32, ptr %199, align 4, !tbaa !5
  %201 = add nsw i32 %200, %.0470630
  br label %202

202:                                              ; preds = %186, %192
  %.1473 = phi i32 [ %194, %192 ], [ %.0472629, %186 ]
  %.1471 = phi i32 [ %201, %192 ], [ %180, %186 ]
  %.1462 = phi i32 [ %198, %192 ], [ %177, %186 ]
  %203 = sext i32 %.1462 to i64
  %204 = sext i32 %.1471 to i64
  %205 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis, i64 0, i64 %203, i64 %204
  %206 = load i8, ptr %205, align 1, !tbaa !30, !range !32, !noundef !33
  %207 = trunc nuw i8 %206 to i1
  br i1 %207, label %._crit_edge635, label %169, !llvm.loop !39

._crit_edge635:                                   ; preds = %202, %._crit_edge628
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %208 = load i32, ptr @m, align 4
  %209 = add nsw i32 %208, -1
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_0, i64 0, i64 0, i64 %210
  %212 = load i8, ptr %211, align 1, !tbaa !30, !range !32, !noundef !33
  %213 = trunc nuw i8 %212 to i1
  br i1 %213, label %._crit_edge642, label %.lr.ph641

.lr.ph641:                                        ; preds = %._crit_edge635
  %214 = load i32, ptr @n, align 4
  br label %215

215:                                              ; preds = %.lr.ph641, %249
  %indvars.iv781 = phi i64 [ 0, %.lr.ph641 ], [ %indvars.iv.next782, %249 ]
  %216 = phi ptr [ %211, %.lr.ph641 ], [ %252, %249 ]
  %.0463639 = phi i32 [ 1, %.lr.ph641 ], [ %.1464, %249 ]
  %.0465638 = phi i32 [ %209, %.lr.ph641 ], [ %.1466, %249 ]
  %.0467637 = phi i32 [ 0, %.lr.ph641 ], [ %.1468, %249 ]
  store i8 1, ptr %216, align 1, !tbaa !30
  %217 = mul nsw i32 %.0467637, %208
  %218 = add nsw i32 %217, %.0465638
  %indvars.iv.next782 = add nuw nsw i64 %indvars.iv781, 1
  %219 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv781
  store i32 %218, ptr %219, align 4, !tbaa !5
  %220 = sext i32 %.0463639 to i64
  %221 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %220
  %222 = load i32, ptr %221, align 4, !tbaa !5
  %223 = add nsw i32 %222, %.0467637
  %224 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %220
  %225 = load i32, ptr %224, align 4, !tbaa !5
  %226 = add nsw i32 %225, %.0465638
  %227 = icmp sgt i32 %223, -1
  br i1 %227, label %228, label %239

228:                                              ; preds = %215
  %229 = icmp slt i32 %223, %214
  %230 = icmp sgt i32 %226, -1
  %231 = icmp slt i32 %226, %208
  %232 = and i1 %230, %231
  %or.cond525 = select i1 %229, i1 %232, i1 false
  br i1 %or.cond525, label %233, label %239

233:                                              ; preds = %228
  %234 = zext nneg i32 %223 to i64
  %235 = zext nneg i32 %226 to i64
  %236 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_0, i64 0, i64 %234, i64 %235
  %237 = load i8, ptr %236, align 1, !tbaa !30, !range !32, !noundef !33
  %238 = trunc nuw i8 %237 to i1
  br i1 %238, label %239, label %249

239:                                              ; preds = %233, %228, %215
  %240 = add nsw i32 %.0463639, 1
  %241 = and i32 %240, 3
  %242 = zext nneg i32 %241 to i64
  %243 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %242
  %244 = load i32, ptr %243, align 4, !tbaa !5
  %245 = add nsw i32 %244, %.0467637
  %246 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %242
  %247 = load i32, ptr %246, align 4, !tbaa !5
  %248 = add nsw i32 %247, %.0465638
  br label %249

249:                                              ; preds = %233, %239
  %.1468 = phi i32 [ %245, %239 ], [ %223, %233 ]
  %.1466 = phi i32 [ %248, %239 ], [ %226, %233 ]
  %.1464 = phi i32 [ %241, %239 ], [ %.0463639, %233 ]
  %250 = sext i32 %.1468 to i64
  %251 = sext i32 %.1466 to i64
  %252 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_0, i64 0, i64 %250, i64 %251
  %253 = load i8, ptr %252, align 1, !tbaa !30, !range !32, !noundef !33
  %254 = trunc nuw i8 %253 to i1
  br i1 %254, label %._crit_edge642, label %215, !llvm.loop !40

._crit_edge642:                                   ; preds = %249, %._crit_edge635
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %255 = load i32, ptr @n, align 4, !tbaa !5
  %256 = add nsw i32 %255, -1
  %257 = load i32, ptr @m, align 4
  %258 = add nsw i32 %257, -1
  %259 = sext i32 %256 to i64
  %260 = sext i32 %258 to i64
  %261 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_1, i64 0, i64 %259, i64 %260
  %262 = load i8, ptr %261, align 1, !tbaa !30, !range !32, !noundef !33
  %263 = trunc nuw i8 %262 to i1
  br i1 %263, label %._crit_edge649, label %.lr.ph648

.lr.ph648:                                        ; preds = %._crit_edge642, %297
  %indvars.iv784 = phi i64 [ %indvars.iv.next785, %297 ], [ 0, %._crit_edge642 ]
  %264 = phi ptr [ %300, %297 ], [ %261, %._crit_edge642 ]
  %.0453646 = phi i32 [ %.1454, %297 ], [ 2, %._crit_edge642 ]
  %.0455645 = phi i32 [ %.1456, %297 ], [ %258, %._crit_edge642 ]
  %.0457644 = phi i32 [ %.1458, %297 ], [ %256, %._crit_edge642 ]
  store i8 1, ptr %264, align 1, !tbaa !30
  %265 = mul nsw i32 %.0457644, %257
  %266 = add nsw i32 %265, %.0455645
  %indvars.iv.next785 = add nuw nsw i64 %indvars.iv784, 1
  %267 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv784
  store i32 %266, ptr %267, align 4, !tbaa !5
  %268 = zext nneg i32 %.0453646 to i64
  %269 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %268
  %270 = load i32, ptr %269, align 4, !tbaa !5
  %271 = add nsw i32 %270, %.0457644
  %272 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %268
  %273 = load i32, ptr %272, align 4, !tbaa !5
  %274 = add nsw i32 %273, %.0455645
  %275 = icmp sgt i32 %271, -1
  br i1 %275, label %276, label %287

276:                                              ; preds = %.lr.ph648
  %277 = icmp slt i32 %271, %255
  %278 = icmp sgt i32 %274, -1
  %279 = icmp slt i32 %274, %257
  %280 = and i1 %278, %279
  %or.cond527 = select i1 %277, i1 %280, i1 false
  br i1 %or.cond527, label %281, label %287

281:                                              ; preds = %276
  %282 = zext nneg i32 %271 to i64
  %283 = zext nneg i32 %274 to i64
  %284 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_1, i64 0, i64 %282, i64 %283
  %285 = load i8, ptr %284, align 1, !tbaa !30, !range !32, !noundef !33
  %286 = trunc nuw i8 %285 to i1
  br i1 %286, label %287, label %297

287:                                              ; preds = %281, %276, %.lr.ph648
  %288 = add nuw nsw i32 %.0453646, 1
  %289 = and i32 %288, 3
  %290 = zext nneg i32 %289 to i64
  %291 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %290
  %292 = load i32, ptr %291, align 4, !tbaa !5
  %293 = add nsw i32 %292, %.0457644
  %294 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %290
  %295 = load i32, ptr %294, align 4, !tbaa !5
  %296 = add nsw i32 %295, %.0455645
  br label %297

297:                                              ; preds = %281, %287
  %.1458 = phi i32 [ %293, %287 ], [ %271, %281 ]
  %.1456 = phi i32 [ %296, %287 ], [ %274, %281 ]
  %.1454 = phi i32 [ %289, %287 ], [ %.0453646, %281 ]
  %298 = sext i32 %.1458 to i64
  %299 = sext i32 %.1456 to i64
  %300 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_1, i64 0, i64 %298, i64 %299
  %301 = load i8, ptr %300, align 1, !tbaa !30, !range !32, !noundef !33
  %302 = trunc nuw i8 %301 to i1
  br i1 %302, label %._crit_edge649, label %.lr.ph648, !llvm.loop !41

._crit_edge649:                                   ; preds = %297, %._crit_edge642
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %303 = load i32, ptr @n, align 4, !tbaa !5
  %304 = add nsw i32 %303, -1
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_2, i64 0, i64 %305, i64 0
  %307 = load i8, ptr %306, align 1, !tbaa !30, !range !32, !noundef !33
  %308 = trunc nuw i8 %307 to i1
  br i1 %308, label %._crit_edge656, label %.lr.ph655

.lr.ph655:                                        ; preds = %._crit_edge649
  %309 = load i32, ptr @m, align 4
  br label %310

310:                                              ; preds = %.lr.ph655, %343
  %indvars.iv787 = phi i64 [ 0, %.lr.ph655 ], [ %indvars.iv.next788, %343 ]
  %311 = phi ptr [ %306, %.lr.ph655 ], [ %346, %343 ]
  %.0444653 = phi i32 [ 3, %.lr.ph655 ], [ %.1445, %343 ]
  %.0446652 = phi i32 [ 0, %.lr.ph655 ], [ %.1447, %343 ]
  %.0448651 = phi i32 [ %304, %.lr.ph655 ], [ %.1449, %343 ]
  store i8 1, ptr %311, align 1, !tbaa !30
  %312 = mul nsw i32 %309, %.0448651
  %313 = add nsw i32 %312, %.0446652
  %indvars.iv.next788 = add nuw nsw i64 %indvars.iv787, 1
  %314 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv787
  store i32 %313, ptr %314, align 4, !tbaa !5
  %315 = zext nneg i32 %.0444653 to i64
  %316 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %315
  %317 = load i32, ptr %316, align 4, !tbaa !5
  %318 = add nsw i32 %317, %.0448651
  %319 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %315
  %320 = load i32, ptr %319, align 4, !tbaa !5
  %321 = add nsw i32 %320, %.0446652
  %322 = icmp sgt i32 %318, -1
  br i1 %322, label %323, label %333

323:                                              ; preds = %310
  %324 = icmp slt i32 %318, %303
  %325 = icmp sgt i32 %321, -1
  %or.cond7 = select i1 %324, i1 %325, i1 false
  %326 = icmp slt i32 %321, %309
  %or.cond529 = select i1 %or.cond7, i1 %326, i1 false
  br i1 %or.cond529, label %327, label %333

327:                                              ; preds = %323
  %328 = zext nneg i32 %318 to i64
  %329 = zext nneg i32 %321 to i64
  %330 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_2, i64 0, i64 %328, i64 %329
  %331 = load i8, ptr %330, align 1, !tbaa !30, !range !32, !noundef !33
  %332 = trunc nuw i8 %331 to i1
  br i1 %332, label %333, label %343

333:                                              ; preds = %327, %323, %310
  %334 = add nuw nsw i32 %.0444653, 1
  %335 = and i32 %334, 3
  %336 = zext nneg i32 %335 to i64
  %337 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %336
  %338 = load i32, ptr %337, align 4, !tbaa !5
  %339 = add nsw i32 %338, %.0448651
  %340 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %336
  %341 = load i32, ptr %340, align 4, !tbaa !5
  %342 = add nsw i32 %341, %.0446652
  br label %343

343:                                              ; preds = %327, %333
  %.1449 = phi i32 [ %339, %333 ], [ %318, %327 ]
  %.1447 = phi i32 [ %342, %333 ], [ %321, %327 ]
  %.1445 = phi i32 [ %335, %333 ], [ %.0444653, %327 ]
  %344 = sext i32 %.1449 to i64
  %345 = sext i32 %.1447 to i64
  %346 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_2, i64 0, i64 %344, i64 %345
  %347 = load i8, ptr %346, align 1, !tbaa !30, !range !32, !noundef !33
  %348 = trunc nuw i8 %347 to i1
  br i1 %348, label %._crit_edge656, label %310, !llvm.loop !42

._crit_edge656:                                   ; preds = %343, %._crit_edge649
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %349 = load i8, ptr @_ZZ4mainE3vis_3, align 16, !tbaa !30, !range !32, !noundef !33
  %350 = trunc nuw i8 %349 to i1
  br i1 %350, label %._crit_edge663, label %.lr.ph662

.lr.ph662:                                        ; preds = %._crit_edge656
  %351 = load i32, ptr @m, align 4
  %352 = load i32, ptr @n, align 4
  br label %353

353:                                              ; preds = %.lr.ph662, %386
  %indvars.iv790 = phi i64 [ 0, %.lr.ph662 ], [ %indvars.iv.next791, %386 ]
  %354 = phi ptr [ @_ZZ4mainE3vis_3, %.lr.ph662 ], [ %389, %386 ]
  %.0432660 = phi i32 [ 1, %.lr.ph662 ], [ %.1433, %386 ]
  %.0434659 = phi i32 [ 0, %.lr.ph662 ], [ %.1435, %386 ]
  %.0436658 = phi i32 [ 0, %.lr.ph662 ], [ %.1437, %386 ]
  store i8 1, ptr %354, align 1, !tbaa !30
  %355 = mul nsw i32 %351, %.0436658
  %356 = add nsw i32 %355, %.0434659
  %indvars.iv.next791 = add nuw nsw i64 %indvars.iv790, 1
  %357 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv790
  store i32 %356, ptr %357, align 4, !tbaa !5
  %358 = zext nneg i32 %.0432660 to i64
  %359 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %358
  %360 = load i32, ptr %359, align 4, !tbaa !5
  %361 = add nsw i32 %360, %.0436658
  %362 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %358
  %363 = load i32, ptr %362, align 4, !tbaa !5
  %364 = add nsw i32 %363, %.0434659
  %365 = icmp sgt i32 %361, -1
  br i1 %365, label %366, label %376

366:                                              ; preds = %353
  %367 = icmp slt i32 %361, %352
  %368 = icmp sgt i32 %364, -1
  %or.cond9 = select i1 %367, i1 %368, i1 false
  %369 = icmp slt i32 %364, %351
  %or.cond531 = select i1 %or.cond9, i1 %369, i1 false
  br i1 %or.cond531, label %370, label %376

370:                                              ; preds = %366
  %371 = zext nneg i32 %361 to i64
  %372 = zext nneg i32 %364 to i64
  %373 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_3, i64 0, i64 %371, i64 %372
  %374 = load i8, ptr %373, align 1, !tbaa !30, !range !32, !noundef !33
  %375 = trunc nuw i8 %374 to i1
  br i1 %375, label %376, label %386

376:                                              ; preds = %370, %366, %353
  %377 = add nuw nsw i32 %.0432660, 3
  %378 = and i32 %377, 3
  %379 = zext nneg i32 %378 to i64
  %380 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %379
  %381 = load i32, ptr %380, align 4, !tbaa !5
  %382 = add nsw i32 %381, %.0436658
  %383 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %379
  %384 = load i32, ptr %383, align 4, !tbaa !5
  %385 = add nsw i32 %384, %.0434659
  br label %386

386:                                              ; preds = %370, %376
  %.1437 = phi i32 [ %382, %376 ], [ %361, %370 ]
  %.1435 = phi i32 [ %385, %376 ], [ %364, %370 ]
  %.1433 = phi i32 [ %378, %376 ], [ %.0432660, %370 ]
  %387 = sext i32 %.1437 to i64
  %388 = sext i32 %.1435 to i64
  %389 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_3, i64 0, i64 %387, i64 %388
  %390 = load i8, ptr %389, align 1, !tbaa !30, !range !32, !noundef !33
  %391 = trunc nuw i8 %390 to i1
  br i1 %391, label %._crit_edge663, label %353, !llvm.loop !43

._crit_edge663:                                   ; preds = %386, %._crit_edge656
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %392 = load i32, ptr @n, align 4, !tbaa !5
  %393 = add nsw i32 %392, -1
  %394 = sext i32 %393 to i64
  %395 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_4, i64 0, i64 %394, i64 0
  %396 = load i8, ptr %395, align 1, !tbaa !30, !range !32, !noundef !33
  %397 = trunc nuw i8 %396 to i1
  br i1 %397, label %._crit_edge670, label %.lr.ph669

.lr.ph669:                                        ; preds = %._crit_edge663
  %398 = load i32, ptr @m, align 4
  br label %399

399:                                              ; preds = %.lr.ph669, %432
  %indvars.iv793 = phi i64 [ 0, %.lr.ph669 ], [ %indvars.iv.next794, %432 ]
  %400 = phi ptr [ %395, %.lr.ph669 ], [ %435, %432 ]
  %.0423667 = phi i32 [ 0, %.lr.ph669 ], [ %.1424, %432 ]
  %.0425666 = phi i32 [ 0, %.lr.ph669 ], [ %.1426, %432 ]
  %.0427665 = phi i32 [ %393, %.lr.ph669 ], [ %.1428, %432 ]
  store i8 1, ptr %400, align 1, !tbaa !30
  %401 = mul nsw i32 %398, %.0427665
  %402 = add nsw i32 %401, %.0425666
  %indvars.iv.next794 = add nuw nsw i64 %indvars.iv793, 1
  %403 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv793
  store i32 %402, ptr %403, align 4, !tbaa !5
  %404 = zext nneg i32 %.0423667 to i64
  %405 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %404
  %406 = load i32, ptr %405, align 4, !tbaa !5
  %407 = add nsw i32 %406, %.0427665
  %408 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %404
  %409 = load i32, ptr %408, align 4, !tbaa !5
  %410 = add nsw i32 %409, %.0425666
  %411 = icmp sgt i32 %407, -1
  br i1 %411, label %412, label %422

412:                                              ; preds = %399
  %413 = icmp slt i32 %407, %392
  %414 = icmp sgt i32 %410, -1
  %or.cond11 = select i1 %413, i1 %414, i1 false
  %415 = icmp slt i32 %410, %398
  %or.cond533 = select i1 %or.cond11, i1 %415, i1 false
  br i1 %or.cond533, label %416, label %422

416:                                              ; preds = %412
  %417 = zext nneg i32 %407 to i64
  %418 = zext nneg i32 %410 to i64
  %419 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_4, i64 0, i64 %417, i64 %418
  %420 = load i8, ptr %419, align 1, !tbaa !30, !range !32, !noundef !33
  %421 = trunc nuw i8 %420 to i1
  br i1 %421, label %422, label %432

422:                                              ; preds = %416, %412, %399
  %423 = add nuw nsw i32 %.0423667, 3
  %424 = and i32 %423, 3
  %425 = zext nneg i32 %424 to i64
  %426 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %425
  %427 = load i32, ptr %426, align 4, !tbaa !5
  %428 = add nsw i32 %427, %.0427665
  %429 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %425
  %430 = load i32, ptr %429, align 4, !tbaa !5
  %431 = add nsw i32 %430, %.0425666
  br label %432

432:                                              ; preds = %416, %422
  %.1428 = phi i32 [ %428, %422 ], [ %407, %416 ]
  %.1426 = phi i32 [ %431, %422 ], [ %410, %416 ]
  %.1424 = phi i32 [ %424, %422 ], [ %.0423667, %416 ]
  %433 = sext i32 %.1428 to i64
  %434 = sext i32 %.1426 to i64
  %435 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_4, i64 0, i64 %433, i64 %434
  %436 = load i8, ptr %435, align 1, !tbaa !30, !range !32, !noundef !33
  %437 = trunc nuw i8 %436 to i1
  br i1 %437, label %._crit_edge670, label %399, !llvm.loop !44

._crit_edge670:                                   ; preds = %432, %._crit_edge663
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %438 = load i32, ptr @n, align 4, !tbaa !5
  %439 = add nsw i32 %438, -1
  %440 = load i32, ptr @m, align 4
  %441 = add nsw i32 %440, -1
  %442 = sext i32 %439 to i64
  %443 = sext i32 %441 to i64
  %444 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_5, i64 0, i64 %442, i64 %443
  %445 = load i8, ptr %444, align 1, !tbaa !30, !range !32, !noundef !33
  %446 = trunc nuw i8 %445 to i1
  br i1 %446, label %._crit_edge677, label %.lr.ph676

.lr.ph676:                                        ; preds = %._crit_edge670, %480
  %indvars.iv796 = phi i64 [ %indvars.iv.next797, %480 ], [ 0, %._crit_edge670 ]
  %447 = phi ptr [ %483, %480 ], [ %444, %._crit_edge670 ]
  %.0411674 = phi i32 [ %.1412, %480 ], [ 3, %._crit_edge670 ]
  %.0413673 = phi i32 [ %.1414, %480 ], [ %441, %._crit_edge670 ]
  %.0415672 = phi i32 [ %.1416, %480 ], [ %439, %._crit_edge670 ]
  store i8 1, ptr %447, align 1, !tbaa !30
  %448 = mul nsw i32 %.0415672, %440
  %449 = add nsw i32 %448, %.0413673
  %indvars.iv.next797 = add nuw nsw i64 %indvars.iv796, 1
  %450 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv796
  store i32 %449, ptr %450, align 4, !tbaa !5
  %451 = zext nneg i32 %.0411674 to i64
  %452 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %451
  %453 = load i32, ptr %452, align 4, !tbaa !5
  %454 = add nsw i32 %453, %.0415672
  %455 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %451
  %456 = load i32, ptr %455, align 4, !tbaa !5
  %457 = add nsw i32 %456, %.0413673
  %458 = icmp sgt i32 %454, -1
  br i1 %458, label %459, label %470

459:                                              ; preds = %.lr.ph676
  %460 = icmp slt i32 %454, %438
  %461 = icmp sgt i32 %457, -1
  %462 = icmp slt i32 %457, %440
  %463 = and i1 %461, %462
  %or.cond535 = select i1 %460, i1 %463, i1 false
  br i1 %or.cond535, label %464, label %470

464:                                              ; preds = %459
  %465 = zext nneg i32 %454 to i64
  %466 = zext nneg i32 %457 to i64
  %467 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_5, i64 0, i64 %465, i64 %466
  %468 = load i8, ptr %467, align 1, !tbaa !30, !range !32, !noundef !33
  %469 = trunc nuw i8 %468 to i1
  br i1 %469, label %470, label %480

470:                                              ; preds = %464, %459, %.lr.ph676
  %471 = add nuw nsw i32 %.0411674, 3
  %472 = and i32 %471, 3
  %473 = zext nneg i32 %472 to i64
  %474 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %473
  %475 = load i32, ptr %474, align 4, !tbaa !5
  %476 = add nsw i32 %475, %.0415672
  %477 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %473
  %478 = load i32, ptr %477, align 4, !tbaa !5
  %479 = add nsw i32 %478, %.0413673
  br label %480

480:                                              ; preds = %464, %470
  %.1416 = phi i32 [ %476, %470 ], [ %454, %464 ]
  %.1414 = phi i32 [ %479, %470 ], [ %457, %464 ]
  %.1412 = phi i32 [ %472, %470 ], [ %.0411674, %464 ]
  %481 = sext i32 %.1416 to i64
  %482 = sext i32 %.1414 to i64
  %483 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_5, i64 0, i64 %481, i64 %482
  %484 = load i8, ptr %483, align 1, !tbaa !30, !range !32, !noundef !33
  %485 = trunc nuw i8 %484 to i1
  br i1 %485, label %._crit_edge677, label %.lr.ph676, !llvm.loop !45

._crit_edge677:                                   ; preds = %480, %._crit_edge670
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %486 = load i32, ptr @m, align 4
  %487 = add nsw i32 %486, -1
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_6, i64 0, i64 0, i64 %488
  %490 = load i8, ptr %489, align 1, !tbaa !30, !range !32, !noundef !33
  %491 = trunc nuw i8 %490 to i1
  br i1 %491, label %._crit_edge684, label %.lr.ph683

.lr.ph683:                                        ; preds = %._crit_edge677
  %492 = load i32, ptr @n, align 4
  br label %493

493:                                              ; preds = %.lr.ph683, %527
  %indvars.iv799 = phi i64 [ 0, %.lr.ph683 ], [ %indvars.iv.next800, %527 ]
  %494 = phi ptr [ %489, %.lr.ph683 ], [ %530, %527 ]
  %.0402681 = phi i32 [ 2, %.lr.ph683 ], [ %.1403, %527 ]
  %.0404680 = phi i32 [ %487, %.lr.ph683 ], [ %.1405, %527 ]
  %.0406679 = phi i32 [ 0, %.lr.ph683 ], [ %.1407, %527 ]
  store i8 1, ptr %494, align 1, !tbaa !30
  %495 = mul nsw i32 %.0406679, %486
  %496 = add nsw i32 %495, %.0404680
  %indvars.iv.next800 = add nuw nsw i64 %indvars.iv799, 1
  %497 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv799
  store i32 %496, ptr %497, align 4, !tbaa !5
  %498 = sext i32 %.0402681 to i64
  %499 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %498
  %500 = load i32, ptr %499, align 4, !tbaa !5
  %501 = add nsw i32 %500, %.0406679
  %502 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %498
  %503 = load i32, ptr %502, align 4, !tbaa !5
  %504 = add nsw i32 %503, %.0404680
  %505 = icmp sgt i32 %501, -1
  br i1 %505, label %506, label %517

506:                                              ; preds = %493
  %507 = icmp slt i32 %501, %492
  %508 = icmp sgt i32 %504, -1
  %509 = icmp slt i32 %504, %486
  %510 = and i1 %508, %509
  %or.cond537 = select i1 %507, i1 %510, i1 false
  br i1 %or.cond537, label %511, label %517

511:                                              ; preds = %506
  %512 = zext nneg i32 %501 to i64
  %513 = zext nneg i32 %504 to i64
  %514 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_6, i64 0, i64 %512, i64 %513
  %515 = load i8, ptr %514, align 1, !tbaa !30, !range !32, !noundef !33
  %516 = trunc nuw i8 %515 to i1
  br i1 %516, label %517, label %527

517:                                              ; preds = %511, %506, %493
  %518 = add nsw i32 %.0402681, 3
  %519 = and i32 %518, 3
  %520 = zext nneg i32 %519 to i64
  %521 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %520
  %522 = load i32, ptr %521, align 4, !tbaa !5
  %523 = add nsw i32 %522, %.0406679
  %524 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %520
  %525 = load i32, ptr %524, align 4, !tbaa !5
  %526 = add nsw i32 %525, %.0404680
  br label %527

527:                                              ; preds = %511, %517
  %.1407 = phi i32 [ %523, %517 ], [ %501, %511 ]
  %.1405 = phi i32 [ %526, %517 ], [ %504, %511 ]
  %.1403 = phi i32 [ %519, %517 ], [ %.0402681, %511 ]
  %528 = sext i32 %.1407 to i64
  %529 = sext i32 %.1405 to i64
  %530 = getelementptr inbounds [1001 x [1001 x i8]], ptr @_ZZ4mainE3vis_6, i64 0, i64 %528, i64 %529
  %531 = load i8, ptr %530, align 1, !tbaa !30, !range !32, !noundef !33
  %532 = trunc nuw i8 %531 to i1
  br i1 %532, label %._crit_edge684, label %493, !llvm.loop !46

._crit_edge684:                                   ; preds = %527, %._crit_edge677
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %533 = load i32, ptr @_ZL2dx, align 16
  %534 = load i32, ptr @_ZL2dy, align 16
  %535 = load i32, ptr getelementptr inbounds (i8, ptr @_ZL2dx, i64 4), align 4
  %536 = load i32, ptr getelementptr inbounds (i8, ptr @_ZL2dy, i64 4), align 4
  %537 = load i32, ptr getelementptr inbounds (i8, ptr @_ZL2dx, i64 8), align 8
  %538 = load i32, ptr getelementptr inbounds (i8, ptr @_ZL2dy, i64 8), align 8
  %539 = load i32, ptr getelementptr inbounds (i8, ptr @_ZL2dx, i64 12), align 4
  %540 = load i32, ptr getelementptr inbounds (i8, ptr @_ZL2dy, i64 12), align 4
  br label %543

.preheader553:                                    ; preds = %672
  %541 = load i32, ptr @n, align 4, !tbaa !5
  %542 = icmp sgt i32 %541, 0
  br i1 %542, label %.preheader.preheader, label %._crit_edge719

.preheader.preheader:                             ; preds = %.preheader553
  %.pre815 = load i32, ptr @m, align 4, !tbaa !5
  br label %.preheader

543:                                              ; preds = %._crit_edge684, %672
  %.0396712 = phi i32 [ 0, %._crit_edge684 ], [ %673, %672 ]
  %544 = load i32, ptr @n, align 4, !tbaa !5
  %545 = load i32, ptr @m, align 4, !tbaa !5
  %546 = tail call i32 @rand() #5
  %547 = load i32, ptr @n, align 4, !tbaa !5
  %548 = load i32, ptr @m, align 4, !tbaa !5
  %549 = mul nsw i32 %548, %547
  %550 = icmp sgt i32 %549, 0
  br i1 %550, label %.lr.ph709.preheader, label %._crit_edge710

.lr.ph709.preheader:                              ; preds = %543
  %551 = add nsw i32 %545, -1
  %552 = add nsw i32 %544, -1
  br label %.lr.ph709

.lr.ph709:                                        ; preds = %.lr.ph709.preheader, %610
  %.0385.in706 = phi i32 [ %612, %610 ], [ %546, %.lr.ph709.preheader ]
  %.0386705 = phi i32 [ %.1387, %610 ], [ %551, %.lr.ph709.preheader ]
  %.0388704 = phi i32 [ %.1389, %610 ], [ 0, %.lr.ph709.preheader ]
  %.0390703 = phi i32 [ %.1391, %610 ], [ %552, %.lr.ph709.preheader ]
  %.0392702 = phi i32 [ %.1393, %610 ], [ 0, %.lr.ph709.preheader ]
  %.0394701 = phi i32 [ %.1395.lcssa828, %610 ], [ 0, %.lr.ph709.preheader ]
  %.0385707 = and i32 %.0385.in706, 3
  %553 = and i32 %.0385.in706, 2
  %.not504 = icmp eq i32 %553, 0
  %554 = select i1 %.not504, i32 %.0392702, i32 %.0390703
  %555 = add nuw nsw i32 %.0385707, 1
  %556 = and i32 %555, 2
  %.not505 = icmp eq i32 %556, 0
  %557 = select i1 %.not505, i32 %.0388704, i32 %.0386705
  %558 = and i32 %555, 3
  %559 = zext nneg i32 %558 to i64
  %560 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %559
  %561 = load i32, ptr %560, align 4, !tbaa !5
  %562 = add nsw i32 %561, %554
  %563 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %559
  %564 = load i32, ptr %563, align 4, !tbaa !5
  %565 = add nsw i32 %564, %557
  %.not506 = icmp sge i32 %562, %.0392702
  %.not507 = icmp sle i32 %562, %.0390703
  %or.cond538.not550 = select i1 %.not506, i1 %.not507, i1 false
  %.not508 = icmp sge i32 %565, %.0388704
  %or.cond539.not = select i1 %or.cond538.not550, i1 %.not508, i1 false
  %566 = icmp sle i32 %565, %.0386705
  %spec.select = select i1 %or.cond539.not, i1 %566, i1 false
  %567 = zext nneg i32 %.0385707 to i64
  %568 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %567
  %569 = load i32, ptr %568, align 4, !tbaa !5
  %570 = add nsw i32 %569, %554
  %571 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %567
  %572 = load i32, ptr %571, align 4, !tbaa !5
  %573 = add nsw i32 %572, %557
  %.not509 = icmp sge i32 %570, %.0392702
  %.not510 = icmp sle i32 %570, %.0390703
  %or.cond540.not723 = select i1 %.not509, i1 %.not510, i1 false
  %.not511 = icmp sge i32 %573, %.0388704
  %or.cond541.not722 = select i1 %or.cond540.not723, i1 %.not511, i1 false
  %.not551 = icmp sle i32 %573, %.0386705
  %574 = select i1 %or.cond541.not722, i1 %.not551, i1 false
  %or.cond552 = select i1 %574, i1 %spec.select, i1 false
  br i1 %or.cond552, label %575, label %.critedge543

575:                                              ; preds = %.lr.ph709
  %576 = tail call i32 @rand() #5
  %577 = and i32 %576, 1
  br label %579

.critedge543:                                     ; preds = %.lr.ph709
  %578 = zext i1 %spec.select to i32
  br label %579

579:                                              ; preds = %.critedge543, %575
  %.0380 = phi i32 [ %577, %575 ], [ %578, %.critedge543 ]
  %.not512685 = icmp slt i32 %554, %.0392702
  %.not513686 = icmp sgt i32 %554, %.0390703
  %or.cond546687 = select i1 %.not512685, i1 true, i1 %.not513686
  %.not514688 = icmp slt i32 %557, %.0388704
  %or.cond547689 = select i1 %or.cond546687, i1 true, i1 %.not514688
  %.not515690 = icmp sgt i32 %557, %.0386705
  %or.cond548691 = select i1 %or.cond547689, i1 true, i1 %.not515690
  br i1 %or.cond548691, label %.critedge.thread, label %.lr.ph696

.lr.ph696:                                        ; preds = %579
  %580 = load i32, ptr @m, align 4, !tbaa !5
  %581 = add i32 %.0380, %.0385.in706
  %582 = and i32 %581, 3
  %583 = zext nneg i32 %582 to i64
  %584 = getelementptr inbounds [4 x i32], ptr @_ZL2dx, i64 0, i64 %583
  %585 = load i32, ptr %584, align 4, !tbaa !5
  %586 = getelementptr inbounds [4 x i32], ptr @_ZL2dy, i64 0, i64 %583
  %587 = load i32, ptr %586, align 4, !tbaa !5
  %588 = sext i32 %.0394701 to i64
  br label %589

589:                                              ; preds = %.lr.ph696, %589
  %indvars.iv802 = phi i64 [ %588, %.lr.ph696 ], [ %indvars.iv.next803, %589 ]
  %.0381694 = phi i32 [ %557, %.lr.ph696 ], [ %594, %589 ]
  %.0382693 = phi i32 [ %554, %.lr.ph696 ], [ %593, %589 ]
  %590 = mul nsw i32 %580, %.0382693
  %591 = add nsw i32 %590, %.0381694
  %indvars.iv.next803 = add nsw i64 %indvars.iv802, 1
  %592 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv802
  store i32 %591, ptr %592, align 4, !tbaa !5
  %593 = add nsw i32 %585, %.0382693
  %594 = add nsw i32 %587, %.0381694
  %.not512 = icmp slt i32 %593, %.0392702
  %.not513 = icmp sgt i32 %593, %.0390703
  %or.cond546 = select i1 %.not512, i1 true, i1 %.not513
  %.not514 = icmp slt i32 %594, %.0388704
  %or.cond547 = select i1 %or.cond546, i1 true, i1 %.not514
  %.not515 = icmp sgt i32 %594, %.0386705
  %or.cond548 = select i1 %or.cond547, i1 true, i1 %.not515
  br i1 %or.cond548, label %.critedge, label %589, !llvm.loop !47

.critedge:                                        ; preds = %589
  %595 = trunc nsw i64 %indvars.iv.next803 to i32
  %596 = icmp eq i32 %554, %593
  br i1 %596, label %.critedge.thread, label %602

.critedge.thread:                                 ; preds = %579, %.critedge
  %.0381.lcssa831 = phi i32 [ %594, %.critedge ], [ %557, %579 ]
  %.1395.lcssa829 = phi i32 [ %595, %.critedge ], [ %.0394701, %579 ]
  %597 = icmp eq i32 %554, %.0392702
  %598 = zext i1 %597 to i32
  %599 = add nsw i32 %.0392702, %598
  %600 = icmp eq i32 %554, %.0390703
  %.neg = sext i1 %600 to i32
  %601 = add i32 %.0390703, %.neg
  br label %602

602:                                              ; preds = %.critedge.thread, %.critedge
  %.0381.lcssa830 = phi i32 [ %.0381.lcssa831, %.critedge.thread ], [ %594, %.critedge ]
  %.1395.lcssa828 = phi i32 [ %.1395.lcssa829, %.critedge.thread ], [ %595, %.critedge ]
  %.1393 = phi i32 [ %599, %.critedge.thread ], [ %.0392702, %.critedge ]
  %.1391 = phi i32 [ %601, %.critedge.thread ], [ %.0390703, %.critedge ]
  %603 = icmp eq i32 %557, %.0381.lcssa830
  br i1 %603, label %604, label %610

604:                                              ; preds = %602
  %605 = icmp eq i32 %557, %.0388704
  %606 = zext i1 %605 to i32
  %607 = add nsw i32 %.0388704, %606
  %608 = icmp eq i32 %557, %.0386705
  %.neg516 = sext i1 %608 to i32
  %609 = add i32 %.0386705, %.neg516
  br label %610

610:                                              ; preds = %604, %602
  %.1389 = phi i32 [ %607, %604 ], [ %.0388704, %602 ]
  %.1387 = phi i32 [ %609, %604 ], [ %.0386705, %602 ]
  %.not517 = icmp eq i32 %.0380, 0
  %611 = select i1 %.not517, i32 1, i32 3
  %612 = add nuw nsw i32 %611, %.0385707
  %613 = load i32, ptr @n, align 4, !tbaa !5
  %614 = load i32, ptr @m, align 4, !tbaa !5
  %615 = mul nsw i32 %614, %613
  %616 = icmp slt i32 %.1395.lcssa828, %615
  br i1 %616, label %.lr.ph709, label %._crit_edge710, !llvm.loop !48

._crit_edge710:                                   ; preds = %610, %543
  %617 = tail call i32 @rand() #5
  %618 = and i32 %617, 1
  %.not = icmp eq i32 %618, 0
  br i1 %.not, label %672, label %.peel.begin

.peel.begin:                                      ; preds = %._crit_edge710
  %619 = load i32, ptr @ord, align 16, !tbaa !5
  %620 = load i32, ptr @m, align 4, !tbaa !5
  %621 = sdiv i32 %619, %620
  %622 = srem i32 %619, %620
  %623 = load i32, ptr @n, align 4
  %624 = load i32, ptr getelementptr inbounds (i8, ptr @ord, i64 4), align 4
  %625 = add nsw i32 %533, %621
  %626 = add nsw i32 %534, %622
  %627 = icmp sgt i32 %625, -1
  br i1 %627, label %628, label %.peel.next

628:                                              ; preds = %.peel.begin
  %629 = icmp slt i32 %625, %623
  %630 = icmp sgt i32 %626, -1
  %631 = icmp slt i32 %626, %620
  %632 = and i1 %630, %631
  %or.cond549.peel = select i1 %629, i1 %632, i1 false
  br i1 %or.cond549.peel, label %633, label %.peel.next

633:                                              ; preds = %628
  %634 = mul nsw i32 %625, %620
  %635 = add nsw i32 %634, %626
  %.not502.peel = icmp eq i32 %635, %624
  br i1 %.not502.peel, label %.peel.next, label %split

.peel.next:                                       ; preds = %.peel.begin, %628, %633
  %636 = add nsw i32 %535, %621
  %637 = add nsw i32 %536, %622
  %638 = icmp sgt i32 %636, -1
  br i1 %638, label %639, label %.peel.next1045

639:                                              ; preds = %.peel.next
  %640 = icmp slt i32 %636, %623
  %641 = icmp sgt i32 %637, -1
  %642 = icmp slt i32 %637, %620
  %643 = and i1 %641, %642
  %or.cond549.peel1046 = select i1 %640, i1 %643, i1 false
  br i1 %or.cond549.peel1046, label %644, label %.peel.next1045

644:                                              ; preds = %639
  %645 = mul nsw i32 %636, %620
  %646 = add nsw i32 %645, %637
  %.not502.peel1048 = icmp eq i32 %646, %624
  br i1 %.not502.peel1048, label %.peel.next1045, label %split

.peel.next1045:                                   ; preds = %.peel.next, %639, %644
  %647 = add nsw i32 %537, %621
  %648 = add nsw i32 %538, %622
  %649 = icmp sgt i32 %647, -1
  br i1 %649, label %650, label %.peel.newph

650:                                              ; preds = %.peel.next1045
  %651 = icmp slt i32 %647, %623
  %652 = icmp sgt i32 %648, -1
  %653 = icmp slt i32 %648, %620
  %654 = and i1 %652, %653
  %or.cond549.peel1053 = select i1 %651, i1 %654, i1 false
  br i1 %or.cond549.peel1053, label %655, label %.peel.newph

655:                                              ; preds = %650
  %656 = mul nsw i32 %647, %620
  %657 = add nsw i32 %656, %648
  %.not502.peel1055 = icmp eq i32 %657, %624
  br i1 %.not502.peel1055, label %.peel.newph, label %split

.peel.newph:                                      ; preds = %655, %650, %.peel.next1045
  %658 = add nsw i32 %539, %621
  %659 = add nsw i32 %540, %622
  %660 = icmp sgt i32 %658, -1
  %661 = icmp slt i32 %658, %623
  %662 = icmp sgt i32 %659, -1
  %663 = icmp slt i32 %659, %620
  %664 = and i1 %662, %663
  %or.cond549 = select i1 %661, i1 %664, i1 false
  %.not1076 = xor i1 %660, true
  %or.cond549.not = xor i1 %or.cond549, true
  %brmerge = select i1 %.not1076, i1 true, i1 %or.cond549.not
  br i1 %brmerge, label %._crit_edge817, label %split.loopexit.loopexit

._crit_edge817:                                   ; preds = %.peel.newph
  %.pre818 = mul nsw i32 %658, %620
  %.pre819 = add nsw i32 %.pre818, %659
  br label %split

split.loopexit.loopexit:                          ; preds = %.peel.newph
  %665 = mul nsw i32 %658, %620
  %666 = add nsw i32 %665, %659
  br label %split

split:                                            ; preds = %633, %644, %655, %split.loopexit.loopexit, %._crit_edge817
  %.pre-phi820 = phi i32 [ %.pre819, %._crit_edge817 ], [ %635, %633 ], [ %646, %644 ], [ %657, %655 ], [ %666, %split.loopexit.loopexit ]
  br label %667

667:                                              ; preds = %667, %split
  %indvars.iv805 = phi i64 [ %indvars.iv.next806, %667 ], [ 0, %split ]
  %668 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv805
  %669 = load i32, ptr %668, align 4, !tbaa !5
  %.not503 = icmp eq i32 %669, %.pre-phi820
  %indvars.iv.next806 = add nuw nsw i64 %indvars.iv805, 1
  br i1 %.not503, label %670, label %667, !llvm.loop !49

670:                                              ; preds = %667
  %671 = getelementptr inbounds [1000001 x i32], ptr @ord, i64 0, i64 %indvars.iv805
  tail call void @_ZSt7reverseIPiEvT_S1_(ptr noundef nonnull @ord, ptr noundef nonnull %671)
  br label %672

672:                                              ; preds = %670, %._crit_edge710
  tail call void @_Z5solveb(i1 noundef zeroext false)
  %673 = add nuw nsw i32 %.0396712, 1
  %exitcond808.not = icmp eq i32 %673, 600
  br i1 %exitcond808.not, label %.preheader553, label %543, !llvm.loop !50

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge717
  %674 = phi i32 [ %541, %.preheader.preheader ], [ %677, %._crit_edge717 ]
  %675 = phi i32 [ %.pre815, %.preheader.preheader ], [ %678, %._crit_edge717 ]
  %indvars.iv812 = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next813, %._crit_edge717 ]
  %676 = icmp sgt i32 %675, 0
  br i1 %676, label %.lr.ph716, label %._crit_edge717

._crit_edge719:                                   ; preds = %._crit_edge717, %.preheader553
  ret i32 0

._crit_edge717.loopexit:                          ; preds = %.lr.ph716
  %.pre816 = load i32, ptr @n, align 4, !tbaa !5
  br label %._crit_edge717

._crit_edge717:                                   ; preds = %._crit_edge717.loopexit, %.preheader
  %677 = phi i32 [ %.pre816, %._crit_edge717.loopexit ], [ %674, %.preheader ]
  %678 = phi i32 [ %692, %._crit_edge717.loopexit ], [ %675, %.preheader ]
  %indvars.iv.next813 = add nuw nsw i64 %indvars.iv812, 1
  %679 = sext i32 %677 to i64
  %680 = icmp slt i64 %indvars.iv.next813, %679
  br i1 %680, label %.preheader, label %._crit_edge719, !llvm.loop !51

.lr.ph716:                                        ; preds = %.preheader, %.lr.ph716
  %indvars.iv809 = phi i64 [ %indvars.iv.next810, %.lr.ph716 ], [ 0, %.preheader ]
  %681 = phi i32 [ %692, %.lr.ph716 ], [ %675, %.preheader ]
  %682 = getelementptr inbounds [1001 x [1001 x i32]], ptr @pos, i64 0, i64 %indvars.iv812, i64 %indvars.iv809
  %683 = load i32, ptr %682, align 4, !tbaa !5
  %684 = add nsw i32 %683, 1
  %indvars.iv.next810 = add nuw nsw i64 %indvars.iv809, 1
  %685 = zext i32 %681 to i64
  %686 = icmp eq i64 %indvars.iv.next810, %685
  %687 = zext i1 %686 to i64
  %688 = getelementptr inbounds [3 x i8], ptr @.str.3, i64 0, i64 %687
  %689 = load i8, ptr %688, align 1, !tbaa !52
  %690 = sext i8 %689 to i32
  %691 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, i32 noundef %684, i32 noundef %690)
  %692 = load i32, ptr @m, align 4, !tbaa !5
  %693 = sext i32 %692 to i64
  %694 = icmp slt i64 %indvars.iv.next810, %693
  br i1 %694, label %.lr.ph716, label %._crit_edge717.loopexit, !llvm.loop !53
}

; Function Attrs: nounwind
declare void @srand(i32 noundef) local_unnamed_addr #3

; Function Attrs: nounwind
declare i64 @time(ptr noundef) local_unnamed_addr #3

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

; Function Attrs: nounwind
declare i32 @rand() local_unnamed_addr #3

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

attributes #0 = { mustprogress 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 = { inlinehint mustprogress 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 #2 = { 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 #3 = { 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 #4 = { 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 #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 = distinct !{!9, !10, !11}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!"llvm.loop.unswitch.partial.disable"}
!12 = distinct !{!12, !10}
!13 = distinct !{!13, !10, !14, !15}
!14 = !{!"llvm.loop.isvectorized", i32 1}
!15 = !{!"llvm.loop.unroll.runtime.disable"}
!16 = distinct !{!16, !10, !14, !15}
!17 = distinct !{!17, !10, !15, !14}
!18 = distinct !{!18, !10, !15, !14}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10, !14, !15}
!21 = distinct !{!21, !10, !15, !14}
!22 = distinct !{!22, !10, !14, !15}
!23 = distinct !{!23, !10, !15, !14}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !10, !14, !15}
!26 = distinct !{!26, !10, !14, !15}
!27 = distinct !{!27, !10, !15, !14}
!28 = distinct !{!28, !10, !15, !14}
!29 = distinct !{!29, !10}
!30 = !{!31, !31, i64 0}
!31 = !{!"bool", !7, i64 0}
!32 = !{i8 0, i8 2}
!33 = !{}
!34 = distinct !{!34, !10, !14, !15}
!35 = distinct !{!35, !10, !15, !14}
!36 = distinct !{!36, !10, !14, !15}
!37 = distinct !{!37, !10, !15, !14}
!38 = distinct !{!38, !10}
!39 = distinct !{!39, !10}
!40 = distinct !{!40, !10}
!41 = distinct !{!41, !10}
!42 = distinct !{!42, !10}
!43 = distinct !{!43, !10}
!44 = distinct !{!44, !10}
!45 = distinct !{!45, !10}
!46 = distinct !{!46, !10}
!47 = distinct !{!47, !10}
!48 = distinct !{!48, !10}
!49 = distinct !{!49, !10}
!50 = distinct !{!50, !10}
!51 = distinct !{!51, !10}
!52 = !{!7, !7, i64 0}
!53 = distinct !{!53, !10}


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