; LLVM IR from tangjz/acm-icpc :: codeforces/complete (932G)

; 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
@sta = external dso_local global [25 x i32], align 16
@dif = external dso_local global [25 x i32], align 16
@cnt = external dso_local global [25 x i32], align 16
@f = external dso_local global [1000001 x i32], align 16
@g = external dso_local global [1000001 x i32], align 16
@buf = external dso_local global [1000001 x i8], align 16
@str = external dso_local global [1000001 x i8], align 16
@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@_ZZ4mainE4tsta = external hidden global [25 x i32], align 16
@_ZZ4mainE4tdif = external hidden global [25 x i32], align 16
@_ZZ4mainE4tcnt = external hidden global [25 x i32], align 16
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() #0 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca 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
  store i32 0, ptr %1, align 4
  %13 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str, ptr noundef getelementptr inbounds (i8, ptr @buf, i64 1))
  %14 = call i64 @strlen(ptr noundef getelementptr inbounds (i8, ptr @buf, i64 1)) #6
  %15 = trunc i64 %14 to i32
  store i32 %15, ptr @n, align 4, !tbaa !5
  %16 = load i32, ptr @n, align 4, !tbaa !5
  %17 = and i32 %16, 1
  %18 = icmp ne i32 %17, 0
  br i1 %18, label %19, label %21

19:                                               ; preds = %0
  %20 = call i32 @puts(ptr noundef @.str.1)
  store i32 0, ptr %1, align 4
  br label %369

21:                                               ; preds = %0
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #7
  store i32 1, ptr %2, align 4, !tbaa !5
  br label %22

22:                                               ; preds = %49, %21
  %23 = load i32, ptr %2, align 4, !tbaa !5
  %24 = load i32, ptr @n, align 4, !tbaa !5
  %25 = ashr i32 %24, 1
  %26 = icmp sle i32 %23, %25
  br i1 %26, label %28, label %27

27:                                               ; preds = %22
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #7
  br label %52

28:                                               ; preds = %22
  %29 = load i32, ptr %2, align 4, !tbaa !5
  %30 = sext i32 %29 to i64
  %31 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %30
  %32 = load i8, ptr %31, align 1, !tbaa !9
  %33 = load i32, ptr %2, align 4, !tbaa !5
  %34 = shl i32 %33, 1
  %35 = sub nsw i32 %34, 1
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %36
  store i8 %32, ptr %37, align 1, !tbaa !9
  %38 = load i32, ptr @n, align 4, !tbaa !5
  %39 = load i32, ptr %2, align 4, !tbaa !5
  %40 = sub nsw i32 %38, %39
  %41 = add nsw i32 %40, 1
  %42 = sext i32 %41 to i64
  %43 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %42
  %44 = load i8, ptr %43, align 1, !tbaa !9
  %45 = load i32, ptr %2, align 4, !tbaa !5
  %46 = shl i32 %45, 1
  %47 = sext i32 %46 to i64
  %48 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %47
  store i8 %44, ptr %48, align 1, !tbaa !9
  br label %49

49:                                               ; preds = %28
  %50 = load i32, ptr %2, align 4, !tbaa !5
  %51 = add nsw i32 %50, 1
  store i32 %51, ptr %2, align 4, !tbaa !5
  br label %22, !llvm.loop !10

52:                                               ; preds = %27
  store i32 1, ptr @f, align 16, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #7
  store i32 1, ptr %3, align 4, !tbaa !5
  br label %53

53:                                               ; preds = %360, %52
  %54 = load i32, ptr %3, align 4, !tbaa !5
  %55 = load i32, ptr @n, align 4, !tbaa !5
  %56 = icmp sle i32 %54, %55
  br i1 %56, label %58, label %57

57:                                               ; preds = %53
  store i32 5, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #7
  br label %363

58:                                               ; preds = %53
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #7
  %59 = load i32, ptr @m, align 4, !tbaa !5
  store i32 %59, ptr %5, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #7
  store i32 -1000001, ptr %6, align 4, !tbaa !5
  store i32 0, ptr @m, align 4, !tbaa !5
  %60 = load i32, ptr %5, align 4, !tbaa !5
  %61 = sext i32 %60 to i64
  %62 = mul i64 %61, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 getelementptr inbounds (i32, ptr @_ZZ4mainE4tsta, i64 1), ptr align 4 getelementptr inbounds (i32, ptr @sta, i64 1), i64 %62, i1 false)
  %63 = load i32, ptr %5, align 4, !tbaa !5
  %64 = sext i32 %63 to i64
  %65 = mul i64 %64, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 getelementptr inbounds (i32, ptr @_ZZ4mainE4tdif, i64 1), ptr align 4 getelementptr inbounds (i32, ptr @dif, i64 1), i64 %65, i1 false)
  %66 = load i32, ptr %5, align 4, !tbaa !5
  %67 = sext i32 %66 to i64
  %68 = mul i64 %67, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 getelementptr inbounds (i32, ptr @_ZZ4mainE4tcnt, i64 1), ptr align 4 getelementptr inbounds (i32, ptr @cnt, i64 1), i64 %68, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #7
  store i32 1, ptr %7, align 4, !tbaa !5
  br label %69

69:                                               ; preds = %247, %58
  %70 = load i32, ptr %7, align 4, !tbaa !5
  %71 = load i32, ptr %5, align 4, !tbaa !5
  %72 = icmp sle i32 %70, %71
  br i1 %72, label %74, label %73

73:                                               ; preds = %69
  store i32 8, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #7
  br label %250

74:                                               ; preds = %69
  %75 = load i32, ptr %7, align 4, !tbaa !5
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tsta, i64 0, i64 %76
  %78 = load i32, ptr %77, align 4, !tbaa !5
  %79 = sext i32 %78 to i64
  %80 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %79
  %81 = load i8, ptr %80, align 1, !tbaa !9
  %82 = sext i8 %81 to i32
  %83 = load i32, ptr %3, align 4, !tbaa !5
  %84 = sext i32 %83 to i64
  %85 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %84
  %86 = load i8, ptr %85, align 1, !tbaa !9
  %87 = sext i8 %86 to i32
  %88 = icmp eq i32 %82, %87
  br i1 %88, label %89, label %139

89:                                               ; preds = %74
  %90 = load i32, ptr @m, align 4, !tbaa !5
  %91 = icmp ne i32 %90, 0
  br i1 %91, label %92, label %111

92:                                               ; preds = %89
  %93 = load i32, ptr @m, align 4, !tbaa !5
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %94
  %96 = load i32, ptr %95, align 4, !tbaa !5
  %97 = load i32, ptr %7, align 4, !tbaa !5
  %98 = sext i32 %97 to i64
  %99 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tsta, i64 0, i64 %98
  %100 = load i32, ptr %99, align 4, !tbaa !5
  %101 = sub nsw i32 %100, 1
  %102 = load i32, ptr %6, align 4, !tbaa !5
  %103 = sub nsw i32 %101, %102
  %104 = icmp eq i32 %96, %103
  br i1 %104, label %105, label %111

105:                                              ; preds = %92
  %106 = load i32, ptr @m, align 4, !tbaa !5
  %107 = sext i32 %106 to i64
  %108 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %107
  %109 = load i32, ptr %108, align 4, !tbaa !5
  %110 = add nsw i32 %109, 1
  store i32 %110, ptr %108, align 4, !tbaa !5
  br label %133

111:                                              ; preds = %92, %89
  %112 = load i32, ptr %7, align 4, !tbaa !5
  %113 = sext i32 %112 to i64
  %114 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tsta, i64 0, i64 %113
  %115 = load i32, ptr %114, align 4, !tbaa !5
  %116 = sub nsw i32 %115, 1
  %117 = load i32, ptr @m, align 4, !tbaa !5
  %118 = add nsw i32 %117, 1
  store i32 %118, ptr @m, align 4, !tbaa !5
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds [25 x i32], ptr @sta, i64 0, i64 %119
  store i32 %116, ptr %120, align 4, !tbaa !5
  %121 = load i32, ptr @m, align 4, !tbaa !5
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds [25 x i32], ptr @sta, i64 0, i64 %122
  %124 = load i32, ptr %123, align 4, !tbaa !5
  %125 = load i32, ptr %6, align 4, !tbaa !5
  %126 = sub nsw i32 %124, %125
  %127 = load i32, ptr @m, align 4, !tbaa !5
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %128
  store i32 %126, ptr %129, align 4, !tbaa !5
  %130 = load i32, ptr @m, align 4, !tbaa !5
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %131
  store i32 1, ptr %132, align 4, !tbaa !5
  br label %133

133:                                              ; preds = %111, %105
  %134 = load i32, ptr %7, align 4, !tbaa !5
  %135 = sext i32 %134 to i64
  %136 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tsta, i64 0, i64 %135
  %137 = load i32, ptr %136, align 4, !tbaa !5
  %138 = sub nsw i32 %137, 1
  store i32 %138, ptr %6, align 4, !tbaa !5
  br label %139

139:                                              ; preds = %133, %74
  %140 = load i32, ptr %7, align 4, !tbaa !5
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tcnt, i64 0, i64 %141
  %143 = load i32, ptr %142, align 4, !tbaa !5
  %144 = icmp sgt i32 %143, 1
  br i1 %144, label %145, label %246

145:                                              ; preds = %139
  %146 = load i32, ptr %7, align 4, !tbaa !5
  %147 = sext i32 %146 to i64
  %148 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tsta, i64 0, i64 %147
  %149 = load i32, ptr %148, align 4, !tbaa !5
  %150 = load i32, ptr %7, align 4, !tbaa !5
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tdif, i64 0, i64 %151
  %153 = load i32, ptr %152, align 4, !tbaa !5
  %154 = add nsw i32 %149, %153
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %155
  %157 = load i8, ptr %156, align 1, !tbaa !9
  %158 = sext i8 %157 to i32
  %159 = load i32, ptr %3, align 4, !tbaa !5
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %160
  %162 = load i8, ptr %161, align 1, !tbaa !9
  %163 = sext i8 %162 to i32
  %164 = icmp eq i32 %158, %163
  br i1 %164, label %165, label %246

165:                                              ; preds = %145
  %166 = load i32, ptr @m, align 4, !tbaa !5
  %167 = icmp ne i32 %166, 0
  br i1 %167, label %168, label %197

168:                                              ; preds = %165
  %169 = load i32, ptr @m, align 4, !tbaa !5
  %170 = sext i32 %169 to i64
  %171 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %170
  %172 = load i32, ptr %171, align 4, !tbaa !5
  %173 = load i32, ptr %7, align 4, !tbaa !5
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tsta, i64 0, i64 %174
  %176 = load i32, ptr %175, align 4, !tbaa !5
  %177 = load i32, ptr %7, align 4, !tbaa !5
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tdif, i64 0, i64 %178
  %180 = load i32, ptr %179, align 4, !tbaa !5
  %181 = add nsw i32 %176, %180
  %182 = sub nsw i32 %181, 1
  %183 = load i32, ptr %6, align 4, !tbaa !5
  %184 = sub nsw i32 %182, %183
  %185 = icmp eq i32 %172, %184
  br i1 %185, label %186, label %197

186:                                              ; preds = %168
  %187 = load i32, ptr %7, align 4, !tbaa !5
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tcnt, i64 0, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !5
  %191 = sub nsw i32 %190, 1
  %192 = load i32, ptr @m, align 4, !tbaa !5
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %193
  %195 = load i32, ptr %194, align 4, !tbaa !5
  %196 = add nsw i32 %195, %191
  store i32 %196, ptr %194, align 4, !tbaa !5
  br label %229

197:                                              ; preds = %168, %165
  %198 = load i32, ptr %7, align 4, !tbaa !5
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tsta, i64 0, i64 %199
  %201 = load i32, ptr %200, align 4, !tbaa !5
  %202 = load i32, ptr %7, align 4, !tbaa !5
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tdif, i64 0, i64 %203
  %205 = load i32, ptr %204, align 4, !tbaa !5
  %206 = add nsw i32 %201, %205
  %207 = sub nsw i32 %206, 1
  %208 = load i32, ptr @m, align 4, !tbaa !5
  %209 = add nsw i32 %208, 1
  store i32 %209, ptr @m, align 4, !tbaa !5
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds [25 x i32], ptr @sta, i64 0, i64 %210
  store i32 %207, ptr %211, align 4, !tbaa !5
  %212 = load i32, ptr @m, align 4, !tbaa !5
  %213 = sext i32 %212 to i64
  %214 = getelementptr inbounds [25 x i32], ptr @sta, i64 0, i64 %213
  %215 = load i32, ptr %214, align 4, !tbaa !5
  %216 = load i32, ptr %6, align 4, !tbaa !5
  %217 = sub nsw i32 %215, %216
  %218 = load i32, ptr @m, align 4, !tbaa !5
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %219
  store i32 %217, ptr %220, align 4, !tbaa !5
  %221 = load i32, ptr %7, align 4, !tbaa !5
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tcnt, i64 0, i64 %222
  %224 = load i32, ptr %223, align 4, !tbaa !5
  %225 = sub nsw i32 %224, 1
  %226 = load i32, ptr @m, align 4, !tbaa !5
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %227
  store i32 %225, ptr %228, align 4, !tbaa !5
  br label %229

229:                                              ; preds = %197, %186
  %230 = load i32, ptr %7, align 4, !tbaa !5
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tsta, i64 0, i64 %231
  %233 = load i32, ptr %232, align 4, !tbaa !5
  %234 = load i32, ptr %7, align 4, !tbaa !5
  %235 = sext i32 %234 to i64
  %236 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tdif, i64 0, i64 %235
  %237 = load i32, ptr %236, align 4, !tbaa !5
  %238 = load i32, ptr %7, align 4, !tbaa !5
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tcnt, i64 0, i64 %239
  %241 = load i32, ptr %240, align 4, !tbaa !5
  %242 = sub nsw i32 %241, 1
  %243 = mul nsw i32 %237, %242
  %244 = add nsw i32 %233, %243
  %245 = sub nsw i32 %244, 1
  store i32 %245, ptr %6, align 4, !tbaa !5
  br label %246

246:                                              ; preds = %229, %145, %139
  br label %247

247:                                              ; preds = %246
  %248 = load i32, ptr %7, align 4, !tbaa !5
  %249 = add nsw i32 %248, 1
  store i32 %249, ptr %7, align 4, !tbaa !5
  br label %69, !llvm.loop !12

250:                                              ; preds = %73
  %251 = load i32, ptr %3, align 4, !tbaa !5
  %252 = sub nsw i32 %251, 1
  %253 = sext i32 %252 to i64
  %254 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %253
  %255 = load i8, ptr %254, align 1, !tbaa !9
  %256 = sext i8 %255 to i32
  %257 = load i32, ptr %3, align 4, !tbaa !5
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %258
  %260 = load i8, ptr %259, align 1, !tbaa !9
  %261 = sext i8 %260 to i32
  %262 = icmp eq i32 %256, %261
  br i1 %262, label %263, label %304

263:                                              ; preds = %250
  %264 = load i32, ptr @m, align 4, !tbaa !5
  %265 = icmp ne i32 %264, 0
  br i1 %265, label %266, label %282

266:                                              ; preds = %263
  %267 = load i32, ptr %3, align 4, !tbaa !5
  %268 = sub nsw i32 %267, 2
  %269 = load i32, ptr %6, align 4, !tbaa !5
  %270 = sub nsw i32 %268, %269
  %271 = load i32, ptr @m, align 4, !tbaa !5
  %272 = sext i32 %271 to i64
  %273 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %272
  %274 = load i32, ptr %273, align 4, !tbaa !5
  %275 = icmp eq i32 %270, %274
  br i1 %275, label %276, label %282

276:                                              ; preds = %266
  %277 = load i32, ptr @m, align 4, !tbaa !5
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %278
  %280 = load i32, ptr %279, align 4, !tbaa !5
  %281 = add nsw i32 %280, 1
  store i32 %281, ptr %279, align 4, !tbaa !5
  br label %301

282:                                              ; preds = %266, %263
  %283 = load i32, ptr %3, align 4, !tbaa !5
  %284 = sub nsw i32 %283, 2
  %285 = load i32, ptr @m, align 4, !tbaa !5
  %286 = add nsw i32 %285, 1
  store i32 %286, ptr @m, align 4, !tbaa !5
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds [25 x i32], ptr @sta, i64 0, i64 %287
  store i32 %284, ptr %288, align 4, !tbaa !5
  %289 = load i32, ptr @m, align 4, !tbaa !5
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds [25 x i32], ptr @sta, i64 0, i64 %290
  %292 = load i32, ptr %291, align 4, !tbaa !5
  %293 = load i32, ptr %6, align 4, !tbaa !5
  %294 = sub nsw i32 %292, %293
  %295 = load i32, ptr @m, align 4, !tbaa !5
  %296 = sext i32 %295 to i64
  %297 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %296
  store i32 %294, ptr %297, align 4, !tbaa !5
  %298 = load i32, ptr @m, align 4, !tbaa !5
  %299 = sext i32 %298 to i64
  %300 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %299
  store i32 1, ptr %300, align 4, !tbaa !5
  br label %301

301:                                              ; preds = %282, %276
  %302 = load i32, ptr %3, align 4, !tbaa !5
  %303 = sub nsw i32 %302, 2
  store i32 %303, ptr %6, align 4, !tbaa !5
  br label %304

304:                                              ; preds = %301, %250
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #7
  store i32 1, ptr %8, align 4, !tbaa !5
  br label %305

305:                                              ; preds = %356, %304
  %306 = load i32, ptr %8, align 4, !tbaa !5
  %307 = load i32, ptr @m, align 4, !tbaa !5
  %308 = icmp sle i32 %306, %307
  br i1 %308, label %310, label %309

309:                                              ; preds = %305
  store i32 11, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #7
  br label %359

310:                                              ; preds = %305
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  %311 = load i32, ptr %8, align 4, !tbaa !5
  %312 = sext i32 %311 to i64
  %313 = getelementptr inbounds [25 x i32], ptr @sta, i64 0, i64 %312
  %314 = load i32, ptr %313, align 4, !tbaa !5
  store i32 %314, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  %315 = load i32, ptr %8, align 4, !tbaa !5
  %316 = sext i32 %315 to i64
  %317 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !5
  store i32 %318, ptr %10, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  %319 = load i32, ptr %8, align 4, !tbaa !5
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %320
  %322 = load i32, ptr %321, align 4, !tbaa !5
  store i32 %322, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  %323 = load i32, ptr %9, align 4, !tbaa !5
  %324 = load i32, ptr %11, align 4, !tbaa !5
  %325 = sub nsw i32 %324, 1
  %326 = load i32, ptr %10, align 4, !tbaa !5
  %327 = mul nsw i32 %325, %326
  %328 = add nsw i32 %323, %327
  store i32 %328, ptr %12, align 4, !tbaa !5
  %329 = load i32, ptr %12, align 4, !tbaa !5
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds [1000001 x i32], ptr @f, i64 0, i64 %330
  %332 = load i32, ptr %331, align 4, !tbaa !5
  %333 = load i32, ptr %12, align 4, !tbaa !5
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds [1000001 x i32], ptr @g, i64 0, i64 %334
  store i32 %332, ptr %335, align 4, !tbaa !5
  %336 = load i32, ptr %11, align 4, !tbaa !5
  %337 = icmp sgt i32 %336, 1
  br i1 %337, label %338, label %348

338:                                              ; preds = %310
  %339 = load i32, ptr %12, align 4, !tbaa !5
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds [1000001 x i32], ptr @g, i64 0, i64 %340
  %342 = load i32, ptr %12, align 4, !tbaa !5
  %343 = load i32, ptr %10, align 4, !tbaa !5
  %344 = sub nsw i32 %342, %343
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds [1000001 x i32], ptr @g, i64 0, i64 %345
  %347 = load i32, ptr %346, align 4, !tbaa !5
  call void @_Z7mod_incRii(ptr noundef nonnull align 4 dereferenceable(4) %341, i32 noundef %347)
  br label %348

348:                                              ; preds = %338, %310
  %349 = load i32, ptr %3, align 4, !tbaa !5
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds [1000001 x i32], ptr @f, i64 0, i64 %350
  %352 = load i32, ptr %12, align 4, !tbaa !5
  %353 = sext i32 %352 to i64
  %354 = getelementptr inbounds [1000001 x i32], ptr @g, i64 0, i64 %353
  %355 = load i32, ptr %354, align 4, !tbaa !5
  call void @_Z7mod_incRii(ptr noundef nonnull align 4 dereferenceable(4) %351, i32 noundef %355)
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  br label %356

356:                                              ; preds = %348
  %357 = load i32, ptr %8, align 4, !tbaa !5
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %8, align 4, !tbaa !5
  br label %305, !llvm.loop !13

359:                                              ; preds = %309
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #7
  br label %360

360:                                              ; preds = %359
  %361 = load i32, ptr %3, align 4, !tbaa !5
  %362 = add nsw i32 %361, 1
  store i32 %362, ptr %3, align 4, !tbaa !5
  br label %53, !llvm.loop !14

363:                                              ; preds = %57
  %364 = load i32, ptr @n, align 4, !tbaa !5
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds [1000001 x i32], ptr @f, i64 0, i64 %365
  %367 = load i32, ptr %366, align 4, !tbaa !5
  %368 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, i32 noundef %367)
  store i32 0, ptr %1, align 4
  br label %369

369:                                              ; preds = %363, %19
  %370 = load i32, ptr %1, align 4
  ret i32 %370
}

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

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #2

declare i32 @puts(ptr noundef) #1

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #4

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z7mod_incRii(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) #5

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

attributes #0 = { mustprogress norecurse uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #5 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nounwind willreturn memory(read) }
attributes #7 = { 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 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = distinct !{!12, !11}
!13 = distinct !{!13, !11}
!14 = distinct !{!14, !11}


; 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 local_unnamed_addr global i32, align 4
@m = external dso_local local_unnamed_addr global i32, align 4
@sta = external dso_local local_unnamed_addr global [25 x i32], align 16
@dif = external dso_local local_unnamed_addr global [25 x i32], align 16
@cnt = external dso_local local_unnamed_addr global [25 x i32], align 16
@f = external dso_local global [1000001 x i32], align 16
@g = external dso_local global [1000001 x i32], align 16
@buf = external dso_local global [1000001 x i8], align 16
@str = external dso_local local_unnamed_addr global [1000001 x i8], align 16
@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@_ZZ4mainE4tsta = external hidden local_unnamed_addr global [25 x i32], align 16
@_ZZ4mainE4tdif = external hidden local_unnamed_addr global [25 x i32], align 16
@_ZZ4mainE4tcnt = external hidden local_unnamed_addr global [25 x i32], align 16
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress norecurse nounwind uwtable
define dso_local noundef i32 @main() local_unnamed_addr #0 {
  %1 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str, ptr noundef nonnull getelementptr inbounds (i8, ptr @buf, i64 1))
  %2 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (i8, ptr @buf, i64 1)) #5
  %3 = trunc i64 %2 to i32
  store i32 %3, ptr @n, align 4, !tbaa !5
  %4 = and i32 %3, 1
  %.not = icmp eq i32 %4, 0
  br i1 %.not, label %.preheader, label %36

.preheader:                                       ; preds = %0
  %5 = ashr exact i32 %3, 1
  %.not6976 = icmp slt i32 %5, 1
  br i1 %.not6976, label %._crit_edge, label %.lr.ph

.lr.ph:                                           ; preds = %.preheader
  %6 = or i64 %2, 1
  %7 = add nuw nsw i32 %5, 1
  %wide.trip.count = zext nneg i32 %7 to i64
  %8 = zext nneg i32 %5 to i64
  %min.iters.check = icmp ult i32 %5, 16
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

scalar.ph.preheader:                              ; preds = %middle.block, %vector.scevcheck, %.lr.ph
  %indvars.iv.ph = phi i64 [ 1, %vector.scevcheck ], [ 1, %.lr.ph ], [ %ind.end, %middle.block ]
  %9 = zext nneg i32 %5 to i64
  %10 = and i32 %3, 2
  %lcmp.mod.not = icmp eq i32 %10, 0
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %11 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %indvars.iv.ph
  %12 = load i8, ptr %11, align 1, !tbaa !9
  %13 = shl nuw nsw i64 %indvars.iv.ph, 1
  %14 = add nsw i64 %13, -1
  %15 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %14
  store i8 %12, ptr %15, align 1, !tbaa !9
  %16 = sub i64 %6, %indvars.iv.ph
  %sext.prol = shl i64 %16, 32
  %17 = ashr exact i64 %sext.prol, 32
  %18 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %17
  %19 = load i8, ptr %18, align 2, !tbaa !9
  %20 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %13
  store i8 %19, ptr %20, align 2, !tbaa !9
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %scalar.ph.preheader ], [ %indvars.iv.next.prol, %scalar.ph.prol ]
  %21 = icmp eq i64 %indvars.iv.ph, %9
  br i1 %21, label %._crit_edge, label %scalar.ph

vector.scevcheck:                                 ; preds = %.lr.ph
  %22 = add nsw i64 %wide.trip.count, -2
  %23 = trunc i64 %6 to i32
  %24 = trunc i64 %22 to i32
  %25 = xor i32 %24, -1
  %26 = add i32 %25, %23
  %27 = icmp sge i32 %26, %23
  %28 = icmp ugt i64 %22, 4294967295
  %29 = or i1 %27, %28
  br i1 %29, label %scalar.ph.preheader, label %vector.ph

vector.ph:                                        ; preds = %vector.scevcheck
  %n.vec = and i64 %8, 2147483640
  %ind.end = or disjoint i64 %n.vec, 1
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %offset.idx = or disjoint i64 %index, 1
  %30 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %offset.idx
  %wide.load = load <8 x i8>, ptr %30, align 1, !tbaa !9
  %31 = shl nuw i64 %offset.idx, 1
  %32 = sub i64 %6, %offset.idx
  %33 = shl i64 %32, 32
  %34 = ashr exact i64 %33, 32
  %gep = getelementptr [1000001 x i8], ptr getelementptr (i8, ptr @buf, i64 -7), i64 0, i64 %34
  %wide.load127 = load <8 x i8>, ptr %gep, align 1, !tbaa !9
  %reverse = shufflevector <8 x i8> %wide.load127, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
  %gep132 = getelementptr [1000001 x i8], ptr getelementptr (i8, ptr @str, i64 -1), i64 0, i64 %31
  %interleaved.vec = shufflevector <8 x i8> %wide.load, <8 x i8> %reverse, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
  store <16 x i8> %interleaved.vec, ptr %gep132, align 1, !tbaa !9
  %index.next = add nuw i64 %index, 8
  %35 = icmp eq i64 %index.next, %n.vec
  br i1 %35, label %middle.block, label %vector.body, !llvm.loop !10

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %8
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

36:                                               ; preds = %0
  %37 = tail call i32 @puts(ptr noundef nonnull dereferenceable(1) @.str.1)
  br label %195

._crit_edge:                                      ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block, %.preheader
  store i32 1, ptr @f, align 16, !tbaa !5
  %.not7089 = icmp slt i32 %3, 1
  br i1 %.not7089, label %._crit_edge.._crit_edge93_crit_edge, label %.lr.ph92.preheader

._crit_edge.._crit_edge93_crit_edge:              ; preds = %._crit_edge
  %sext115 = shl i64 %2, 32
  %.pre113 = ashr exact i64 %sext115, 32
  br label %._crit_edge93

.lr.ph92.preheader:                               ; preds = %._crit_edge
  %.pre = load i32, ptr @m, align 4, !tbaa !5
  br label %.lr.ph92

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %scalar.ph ], [ %indvars.iv.unr, %scalar.ph.prol.loopexit ]
  %38 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %indvars.iv
  %39 = load i8, ptr %38, align 1, !tbaa !9
  %40 = shl nuw i64 %indvars.iv, 1
  %41 = add nsw i64 %40, -1
  %42 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %41
  store i8 %39, ptr %42, align 1, !tbaa !9
  %43 = sub i64 %6, %indvars.iv
  %sext = shl i64 %43, 32
  %44 = ashr exact i64 %sext, 32
  %45 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %44
  %46 = load i8, ptr %45, align 1, !tbaa !9
  %47 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %40
  store i8 %46, ptr %47, align 2, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %48 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %indvars.iv.next
  %49 = load i8, ptr %48, align 1, !tbaa !9
  %50 = shl nuw i64 %indvars.iv.next, 1
  %51 = add nsw i64 %50, -1
  %52 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %51
  store i8 %49, ptr %52, align 1, !tbaa !9
  %53 = sub i64 %6, %indvars.iv.next
  %sext.1 = shl i64 %53, 32
  %54 = ashr exact i64 %sext.1, 32
  %55 = getelementptr inbounds [1000001 x i8], ptr @buf, i64 0, i64 %54
  %56 = load i8, ptr %55, align 1, !tbaa !9
  %57 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %50
  store i8 %56, ptr %57, align 2, !tbaa !9
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next.1, %wide.trip.count
  br i1 %exitcond.not.1, label %._crit_edge, label %scalar.ph, !llvm.loop !14

._crit_edge93:                                    ; preds = %._crit_edge88, %._crit_edge.._crit_edge93_crit_edge
  %.pre-phi114 = phi i64 [ %.pre113, %._crit_edge.._crit_edge93_crit_edge ], [ %170, %._crit_edge88 ]
  %58 = getelementptr inbounds [1000001 x i32], ptr @f, i64 0, i64 %.pre-phi114
  %59 = load i32, ptr %58, align 4, !tbaa !5
  %60 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, i32 noundef %59)
  br label %195

.lr.ph92:                                         ; preds = %.lr.ph92.preheader, %._crit_edge88
  %61 = phi i32 [ %3, %.lr.ph92.preheader ], [ %168, %._crit_edge88 ]
  %62 = phi i32 [ %.pre, %.lr.ph92.preheader ], [ %169, %._crit_edge88 ]
  %indvars.iv105 = phi i64 [ 1, %.lr.ph92.preheader ], [ %indvars.iv.next106, %._crit_edge88 ]
  %indvars107 = trunc i64 %indvars.iv105 to i32
  store i32 0, ptr @m, align 4, !tbaa !5
  %63 = sext i32 %62 to i64
  %64 = shl nsw i64 %63, 2
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 getelementptr inbounds (i8, ptr @_ZZ4mainE4tsta, i64 4), ptr nonnull align 4 getelementptr inbounds (i8, ptr @sta, i64 4), i64 %64, i1 false)
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 getelementptr inbounds (i8, ptr @_ZZ4mainE4tdif, i64 4), ptr nonnull align 4 getelementptr inbounds (i8, ptr @dif, i64 4), i64 %64, i1 false)
  tail call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 getelementptr inbounds (i8, ptr @_ZZ4mainE4tcnt, i64 4), ptr nonnull align 4 getelementptr inbounds (i8, ptr @cnt, i64 4), i64 %64, i1 false)
  %.not7178 = icmp slt i32 %62, 1
  %.phi.trans.insert = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %indvars.iv105
  %.pre108 = load i8, ptr %.phi.trans.insert, align 1, !tbaa !9
  br i1 %.not7178, label %._crit_edge83.thread, label %.lr.ph82

.lr.ph82:                                         ; preds = %.lr.ph92
  %65 = add nuw i32 %62, 1
  %wide.trip.count100 = zext i32 %65 to i64
  br label %74

._crit_edge83:                                    ; preds = %142
  %66 = add nsw i64 %indvars.iv105, -1
  %67 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %66
  %68 = load i8, ptr %67, align 1, !tbaa !9
  %69 = icmp eq i8 %68, %.pre108
  br i1 %69, label %144, label %165

._crit_edge83.thread:                             ; preds = %.lr.ph92
  %70 = add nsw i64 %indvars.iv105, -1
  %71 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %70
  %72 = load i8, ptr %71, align 1, !tbaa !9
  %73 = icmp eq i8 %72, %.pre108
  br i1 %73, label %.thread, label %._crit_edge88

74:                                               ; preds = %.lr.ph82, %142
  %indvars.iv97 = phi i64 [ 1, %.lr.ph82 ], [ %indvars.iv.next98, %142 ]
  %.06479 = phi i32 [ -1000001, %.lr.ph82 ], [ %.2, %142 ]
  %75 = phi i32 [ 0, %.lr.ph82 ], [ %143, %142 ]
  %76 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tsta, i64 0, i64 %indvars.iv97
  %77 = load i32, ptr %76, align 4, !tbaa !5
  %78 = sext i32 %77 to i64
  %79 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %78
  %80 = load i8, ptr %79, align 1, !tbaa !9
  %81 = icmp eq i8 %80, %.pre108
  br i1 %81, label %82, label %102

82:                                               ; preds = %74
  %.not74 = icmp eq i32 %75, 0
  br i1 %.not74, label %94, label %83

83:                                               ; preds = %82
  %84 = sext i32 %75 to i64
  %85 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %84
  %86 = load i32, ptr %85, align 4, !tbaa !5
  %87 = xor i32 %.06479, -1
  %88 = add i32 %77, %87
  %89 = icmp eq i32 %86, %88
  br i1 %89, label %90, label %94

90:                                               ; preds = %83
  %91 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %84
  %92 = load i32, ptr %91, align 4, !tbaa !5
  %93 = add nsw i32 %92, 1
  store i32 %93, ptr %91, align 4, !tbaa !5
  %.pre111 = add nsw i32 %77, -1
  br label %102

94:                                               ; preds = %83, %82
  %95 = add nsw i32 %77, -1
  %96 = add nsw i32 %75, 1
  store i32 %96, ptr @m, align 4, !tbaa !5
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds [25 x i32], ptr @sta, i64 0, i64 %97
  store i32 %95, ptr %98, align 4, !tbaa !5
  %99 = sub nsw i32 %95, %.06479
  %100 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %97
  store i32 %99, ptr %100, align 4, !tbaa !5
  %101 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %97
  store i32 1, ptr %101, align 4, !tbaa !5
  br label %102

102:                                              ; preds = %90, %94, %74
  %103 = phi i32 [ %75, %74 ], [ %96, %94 ], [ %75, %90 ]
  %.1 = phi i32 [ %.06479, %74 ], [ %95, %94 ], [ %.pre111, %90 ]
  %104 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tcnt, i64 0, i64 %indvars.iv97
  %105 = load i32, ptr %104, align 4, !tbaa !5
  %106 = icmp sgt i32 %105, 1
  br i1 %106, label %107, label %142

107:                                              ; preds = %102
  %108 = getelementptr inbounds [25 x i32], ptr @_ZZ4mainE4tdif, i64 0, i64 %indvars.iv97
  %109 = load i32, ptr %108, align 4, !tbaa !5
  %110 = add nsw i32 %109, %77
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds [1000001 x i8], ptr @str, i64 0, i64 %111
  %113 = load i8, ptr %112, align 1, !tbaa !9
  %114 = icmp eq i8 %113, %.pre108
  br i1 %114, label %115, label %142

115:                                              ; preds = %107
  %.not75 = icmp eq i32 %103, 0
  br i1 %.not75, label %128, label %116

116:                                              ; preds = %115
  %117 = sext i32 %103 to i64
  %118 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %117
  %119 = load i32, ptr %118, align 4, !tbaa !5
  %120 = xor i32 %.1, -1
  %121 = add i32 %110, %120
  %122 = icmp eq i32 %119, %121
  br i1 %122, label %123, label %128

123:                                              ; preds = %116
  %124 = add nsw i32 %105, -1
  %125 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %117
  %126 = load i32, ptr %125, align 4, !tbaa !5
  %127 = add nsw i32 %124, %126
  store i32 %127, ptr %125, align 4, !tbaa !5
  br label %137

128:                                              ; preds = %116, %115
  %129 = add nsw i32 %110, -1
  %130 = add nsw i32 %103, 1
  store i32 %130, ptr @m, align 4, !tbaa !5
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds [25 x i32], ptr @sta, i64 0, i64 %131
  store i32 %129, ptr %132, align 4, !tbaa !5
  %133 = sub nsw i32 %129, %.1
  %134 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %131
  store i32 %133, ptr %134, align 4, !tbaa !5
  %135 = add nsw i32 %105, -1
  %136 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %131
  store i32 %135, ptr %136, align 4, !tbaa !5
  br label %137

137:                                              ; preds = %128, %123
  %.pre-phi112 = phi i32 [ %135, %128 ], [ %124, %123 ]
  %138 = phi i32 [ %130, %128 ], [ %103, %123 ]
  %139 = mul nsw i32 %109, %.pre-phi112
  %140 = add i32 %77, -1
  %141 = add i32 %140, %139
  br label %142

142:                                              ; preds = %102, %107, %137
  %143 = phi i32 [ %138, %137 ], [ %103, %107 ], [ %103, %102 ]
  %.2 = phi i32 [ %141, %137 ], [ %.1, %107 ], [ %.1, %102 ]
  %indvars.iv.next98 = add nuw nsw i64 %indvars.iv97, 1
  %exitcond101.not = icmp eq i64 %indvars.iv.next98, %wide.trip.count100
  br i1 %exitcond101.not, label %._crit_edge83, label %74, !llvm.loop !15

144:                                              ; preds = %._crit_edge83
  %.not72 = icmp eq i32 %143, 0
  br i1 %.not72, label %.thread, label %145

145:                                              ; preds = %144
  %146 = add nsw i32 %indvars107, -2
  %147 = sub i32 %146, %.2
  %148 = sext i32 %143 to i64
  %149 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %148
  %150 = load i32, ptr %149, align 4, !tbaa !5
  %151 = icmp eq i32 %147, %150
  br i1 %151, label %152, label %.thread

152:                                              ; preds = %145
  %153 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %148
  %154 = load i32, ptr %153, align 4, !tbaa !5
  %155 = add nsw i32 %154, 1
  store i32 %155, ptr %153, align 4, !tbaa !5
  br label %165

.thread:                                          ; preds = %._crit_edge83.thread, %145, %144
  %156 = phi i32 [ %143, %145 ], [ 0, %144 ], [ 0, %._crit_edge83.thread ]
  %.064.lcssa117120 = phi i32 [ %.2, %145 ], [ %.2, %144 ], [ -1000001, %._crit_edge83.thread ]
  %157 = add nsw i32 %156, 1
  store i32 %157, ptr @m, align 4, !tbaa !5
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds [25 x i32], ptr @sta, i64 0, i64 %158
  %160 = trunc i64 %indvars.iv105 to i32
  %161 = add i32 %160, -2
  store i32 %161, ptr %159, align 4, !tbaa !5
  %162 = sub nsw i32 %161, %.064.lcssa117120
  %163 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %158
  store i32 %162, ptr %163, align 4, !tbaa !5
  %164 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %158
  store i32 1, ptr %164, align 4, !tbaa !5
  br label %165

165:                                              ; preds = %152, %.thread, %._crit_edge83
  %166 = phi i32 [ %143, %152 ], [ %157, %.thread ], [ %143, %._crit_edge83 ]
  %.not7384 = icmp slt i32 %166, 1
  br i1 %.not7384, label %._crit_edge88, label %.lr.ph87

.lr.ph87:                                         ; preds = %165
  %167 = getelementptr inbounds [1000001 x i32], ptr @f, i64 0, i64 %indvars.iv105
  br label %171

._crit_edge88.loopexit:                           ; preds = %191
  %.pre110 = load i32, ptr @n, align 4, !tbaa !5
  br label %._crit_edge88

._crit_edge88:                                    ; preds = %._crit_edge83.thread, %._crit_edge88.loopexit, %165
  %168 = phi i32 [ %.pre110, %._crit_edge88.loopexit ], [ %61, %165 ], [ %61, %._crit_edge83.thread ]
  %169 = phi i32 [ %193, %._crit_edge88.loopexit ], [ %166, %165 ], [ 0, %._crit_edge83.thread ]
  %indvars.iv.next106 = add nuw nsw i64 %indvars.iv105, 1
  %170 = sext i32 %168 to i64
  %.not70.not = icmp slt i64 %indvars.iv105, %170
  br i1 %.not70.not, label %.lr.ph92, label %._crit_edge93, !llvm.loop !16

171:                                              ; preds = %.lr.ph87, %191
  %indvars.iv102 = phi i64 [ 1, %.lr.ph87 ], [ %indvars.iv.next103, %191 ]
  %172 = getelementptr inbounds [25 x i32], ptr @sta, i64 0, i64 %indvars.iv102
  %173 = load i32, ptr %172, align 4, !tbaa !5
  %174 = getelementptr inbounds [25 x i32], ptr @dif, i64 0, i64 %indvars.iv102
  %175 = load i32, ptr %174, align 4, !tbaa !5
  %176 = getelementptr inbounds [25 x i32], ptr @cnt, i64 0, i64 %indvars.iv102
  %177 = load i32, ptr %176, align 4, !tbaa !5
  %178 = add nsw i32 %177, -1
  %179 = mul nsw i32 %178, %175
  %180 = add nsw i32 %179, %173
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds [1000001 x i32], ptr @f, i64 0, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !5
  %184 = getelementptr inbounds [1000001 x i32], ptr @g, i64 0, i64 %181
  store i32 %183, ptr %184, align 4, !tbaa !5
  %185 = icmp sgt i32 %177, 1
  br i1 %185, label %186, label %191

186:                                              ; preds = %171
  %187 = sub nsw i32 %180, %175
  %188 = sext i32 %187 to i64
  %189 = getelementptr inbounds [1000001 x i32], ptr @g, i64 0, i64 %188
  %190 = load i32, ptr %189, align 4, !tbaa !5
  tail call void @_Z7mod_incRii(ptr noundef nonnull align 4 dereferenceable(4) %184, i32 noundef %190)
  %.pre109 = load i32, ptr %184, align 4, !tbaa !5
  br label %191

191:                                              ; preds = %186, %171
  %192 = phi i32 [ %.pre109, %186 ], [ %183, %171 ]
  tail call void @_Z7mod_incRii(ptr noundef nonnull align 4 dereferenceable(4) %167, i32 noundef %192)
  %indvars.iv.next103 = add nuw nsw i64 %indvars.iv102, 1
  %193 = load i32, ptr @m, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  %.not73.not = icmp slt i64 %indvars.iv102, %194
  br i1 %.not73.not, label %171, label %._crit_edge88.loopexit, !llvm.loop !17

195:                                              ; preds = %._crit_edge93, %36
  ret i32 0
}

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #2

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #3

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_Z7mod_incRii(ptr noundef nonnull align 4 dereferenceable(4), i32 noundef) local_unnamed_addr #4

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

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

!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 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11, !12, !13}
!11 = !{!"llvm.loop.mustprogress"}
!12 = !{!"llvm.loop.isvectorized", i32 1}
!13 = !{!"llvm.loop.unroll.runtime.disable"}
!14 = distinct !{!14, !11, !12}
!15 = distinct !{!15, !11}
!16 = distinct !{!16, !11}
!17 = distinct !{!17, !11}


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