; LLVM IR from tangjz/acm-icpc :: self_training/2016-07-11 (A)

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

%struct.Node = type { i32, i32, i32, i32, i32, i32, i32 }

@n = external dso_local global i32, align 4
@px = external dso_local global i32, align 4
@py = external dso_local global i32, align 4
@pz = external dso_local global i32, align 4
@a = external dso_local global [101 x %struct.Node], align 16
@.str = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [27 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z3cmpRK4NodeS1_(ptr noundef nonnull align 4 dereferenceable(28), ptr noundef nonnull align 4 dereferenceable(28)) #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z5exgcdiiRiS_(i32 noundef, i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) #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: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z3CRTRiS_ii(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef, i32 noundef) #0

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() #2 {
  %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 %struct.Node, align 4
  %19 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %20 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str, ptr noundef @n, ptr noundef @px, ptr noundef @py, ptr noundef @pz)
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #8
  store i32 0, ptr %2, align 4, !tbaa !5
  br label %21

21:                                               ; preds = %56, %0
  %22 = load i32, ptr %2, align 4, !tbaa !5
  %23 = load i32, ptr @n, align 4, !tbaa !5
  %24 = icmp slt i32 %22, %23
  br i1 %24, label %26, label %25

25:                                               ; preds = %21
  call void @llvm.lifetime.end.p0(i64 4, ptr %2) #8
  br label %59

26:                                               ; preds = %21
  %27 = load i32, ptr %2, align 4, !tbaa !5
  %28 = sext i32 %27 to i64
  %29 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %28
  %30 = getelementptr inbounds %struct.Node, ptr %29, i32 0, i32 0
  %31 = load i32, ptr %2, align 4, !tbaa !5
  %32 = sext i32 %31 to i64
  %33 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %32
  %34 = getelementptr inbounds %struct.Node, ptr %33, i32 0, i32 1
  %35 = load i32, ptr %2, align 4, !tbaa !5
  %36 = sext i32 %35 to i64
  %37 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %36
  %38 = getelementptr inbounds %struct.Node, ptr %37, i32 0, i32 2
  %39 = load i32, ptr %2, align 4, !tbaa !5
  %40 = sext i32 %39 to i64
  %41 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %40
  %42 = getelementptr inbounds %struct.Node, ptr %41, i32 0, i32 3
  %43 = load i32, ptr %2, align 4, !tbaa !5
  %44 = sext i32 %43 to i64
  %45 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %44
  %46 = getelementptr inbounds %struct.Node, ptr %45, i32 0, i32 4
  %47 = load i32, ptr %2, align 4, !tbaa !5
  %48 = sext i32 %47 to i64
  %49 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %48
  %50 = getelementptr inbounds %struct.Node, ptr %49, i32 0, i32 5
  %51 = load i32, ptr %2, align 4, !tbaa !5
  %52 = sext i32 %51 to i64
  %53 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %52
  %54 = getelementptr inbounds %struct.Node, ptr %53, i32 0, i32 6
  %55 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str.1, ptr noundef %30, ptr noundef %34, ptr noundef %38, ptr noundef %42, ptr noundef %46, ptr noundef %50, ptr noundef %54)
  br label %56

56:                                               ; preds = %26
  %57 = load i32, ptr %2, align 4, !tbaa !5
  %58 = add nsw i32 %57, 1
  store i32 %58, ptr %2, align 4, !tbaa !5
  br label %21, !llvm.loop !9

59:                                               ; preds = %25
  br label %60

60:                                               ; preds = %638, %59
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #8
  store i32 1061109567, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #8
  store i32 0, ptr %4, align 4, !tbaa !5
  br label %61

61:                                               ; preds = %376, %60
  %62 = load i32, ptr %4, align 4, !tbaa !5
  %63 = load i32, ptr @n, align 4, !tbaa !5
  %64 = icmp slt i32 %62, %63
  br i1 %64, label %66, label %65

65:                                               ; preds = %61
  store i32 7, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #8
  br label %379

66:                                               ; preds = %61
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  %67 = load i32, ptr %4, align 4, !tbaa !5
  %68 = add nsw i32 %67, 1
  store i32 %68, ptr %6, align 4, !tbaa !5
  br label %69

69:                                               ; preds = %372, %66
  %70 = load i32, ptr %6, align 4, !tbaa !5
  %71 = load i32, ptr @n, align 4, !tbaa !5
  %72 = icmp slt i32 %70, %71
  br i1 %72, label %74, label %73

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

74:                                               ; preds = %69
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #8
  store i32 0, ptr %7, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  store i32 1, ptr %8, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #8
  %75 = load i32, ptr %4, align 4, !tbaa !5
  %76 = sext i32 %75 to i64
  %77 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %76
  %78 = getelementptr inbounds %struct.Node, ptr %77, i32 0, i32 4
  %79 = load i32, ptr %78, align 4, !tbaa !11
  %80 = load i32, ptr %6, align 4, !tbaa !5
  %81 = sext i32 %80 to i64
  %82 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %81
  %83 = getelementptr inbounds %struct.Node, ptr %82, i32 0, i32 4
  %84 = load i32, ptr %83, align 4, !tbaa !11
  %85 = sub nsw i32 %79, %84
  %86 = load i32, ptr @px, align 4, !tbaa !5
  %87 = srem i32 %85, %86
  store i32 %87, ptr %9, align 4, !tbaa !5
  %88 = icmp slt i32 %87, 0
  br i1 %88, label %89, label %93

89:                                               ; preds = %74
  %90 = load i32, ptr @px, align 4, !tbaa !5
  %91 = load i32, ptr %9, align 4, !tbaa !5
  %92 = add nsw i32 %91, %90
  store i32 %92, ptr %9, align 4, !tbaa !5
  br label %93

93:                                               ; preds = %89, %74
  %94 = load i32, ptr %9, align 4, !tbaa !5
  %95 = icmp ne i32 %94, 0
  br i1 %95, label %96, label %153

96:                                               ; preds = %93
  %97 = load i32, ptr %6, align 4, !tbaa !5
  %98 = sext i32 %97 to i64
  %99 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %98
  %100 = getelementptr inbounds %struct.Node, ptr %99, i32 0, i32 1
  %101 = load i32, ptr %100, align 4, !tbaa !13
  %102 = load i32, ptr %4, align 4, !tbaa !5
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %103
  %105 = getelementptr inbounds %struct.Node, ptr %104, i32 0, i32 1
  %106 = load i32, ptr %105, align 4, !tbaa !13
  %107 = sub nsw i32 %101, %106
  %108 = call i32 @llvm.abs.i32(i32 %107, i1 true)
  %109 = load i32, ptr @px, align 4, !tbaa !5
  %110 = call noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef %108, i32 noundef %109)
  %111 = load i32, ptr %9, align 4, !tbaa !5
  %112 = load i32, ptr @px, align 4, !tbaa !5
  %113 = call noundef i32 @_Z5exgcdiiRiS_(i32 noundef %111, i32 noundef %112, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11)
  store i32 %113, ptr %12, align 4, !tbaa !5
  %114 = srem i32 %110, %113
  %115 = icmp ne i32 %114, 0
  br i1 %115, label %116, label %117

116:                                              ; preds = %96
  store i32 12, ptr %5, align 4
  br label %369

117:                                              ; preds = %96
  %118 = load i32, ptr %10, align 4, !tbaa !5
  %119 = sext i32 %118 to i64
  %120 = load i32, ptr %6, align 4, !tbaa !5
  %121 = sext i32 %120 to i64
  %122 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %121
  %123 = getelementptr inbounds %struct.Node, ptr %122, i32 0, i32 1
  %124 = load i32, ptr %123, align 4, !tbaa !13
  %125 = load i32, ptr %4, align 4, !tbaa !5
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %126
  %128 = getelementptr inbounds %struct.Node, ptr %127, i32 0, i32 1
  %129 = load i32, ptr %128, align 4, !tbaa !13
  %130 = sub nsw i32 %124, %129
  %131 = sext i32 %130 to i64
  %132 = mul nsw i64 %119, %131
  %133 = load i32, ptr @px, align 4, !tbaa !5
  %134 = sext i32 %133 to i64
  %135 = srem i64 %132, %134
  %136 = load i32, ptr %12, align 4, !tbaa !5
  %137 = sext i32 %136 to i64
  %138 = sdiv i64 %135, %137
  %139 = trunc i64 %138 to i32
  store i32 %139, ptr %9, align 4, !tbaa !5
  %140 = icmp slt i32 %139, 0
  br i1 %140, label %141, label %145

141:                                              ; preds = %117
  %142 = load i32, ptr @px, align 4, !tbaa !5
  %143 = load i32, ptr %9, align 4, !tbaa !5
  %144 = add nsw i32 %143, %142
  store i32 %144, ptr %9, align 4, !tbaa !5
  br label %145

145:                                              ; preds = %141, %117
  %146 = load i32, ptr %9, align 4, !tbaa !5
  %147 = load i32, ptr @px, align 4, !tbaa !5
  %148 = load i32, ptr %12, align 4, !tbaa !5
  %149 = sdiv i32 %147, %148
  %150 = call noundef zeroext i1 @_Z3CRTRiS_ii(ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %8, i32 noundef %146, i32 noundef %149)
  br i1 %150, label %152, label %151

151:                                              ; preds = %145
  store i32 12, ptr %5, align 4
  br label %369

152:                                              ; preds = %145
  br label %170

153:                                              ; preds = %93
  %154 = load i32, ptr %6, align 4, !tbaa !5
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %155
  %157 = getelementptr inbounds %struct.Node, ptr %156, i32 0, i32 1
  %158 = load i32, ptr %157, align 4, !tbaa !13
  %159 = load i32, ptr %4, align 4, !tbaa !5
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %160
  %162 = getelementptr inbounds %struct.Node, ptr %161, i32 0, i32 1
  %163 = load i32, ptr %162, align 4, !tbaa !13
  %164 = sub nsw i32 %158, %163
  %165 = load i32, ptr @px, align 4, !tbaa !5
  %166 = srem i32 %164, %165
  %167 = icmp ne i32 %166, 0
  br i1 %167, label %168, label %169

168:                                              ; preds = %153
  store i32 12, ptr %5, align 4
  br label %369

169:                                              ; preds = %153
  br label %170

170:                                              ; preds = %169, %152
  %171 = load i32, ptr %4, align 4, !tbaa !5
  %172 = sext i32 %171 to i64
  %173 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %172
  %174 = getelementptr inbounds %struct.Node, ptr %173, i32 0, i32 5
  %175 = load i32, ptr %174, align 4, !tbaa !14
  %176 = load i32, ptr %6, align 4, !tbaa !5
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %177
  %179 = getelementptr inbounds %struct.Node, ptr %178, i32 0, i32 5
  %180 = load i32, ptr %179, align 4, !tbaa !14
  %181 = sub nsw i32 %175, %180
  %182 = load i32, ptr @py, align 4, !tbaa !5
  %183 = srem i32 %181, %182
  store i32 %183, ptr %9, align 4, !tbaa !5
  %184 = icmp slt i32 %183, 0
  br i1 %184, label %185, label %189

185:                                              ; preds = %170
  %186 = load i32, ptr @py, align 4, !tbaa !5
  %187 = load i32, ptr %9, align 4, !tbaa !5
  %188 = add nsw i32 %187, %186
  store i32 %188, ptr %9, align 4, !tbaa !5
  br label %189

189:                                              ; preds = %185, %170
  %190 = load i32, ptr %9, align 4, !tbaa !5
  %191 = icmp ne i32 %190, 0
  br i1 %191, label %192, label %249

192:                                              ; preds = %189
  %193 = load i32, ptr %6, align 4, !tbaa !5
  %194 = sext i32 %193 to i64
  %195 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %194
  %196 = getelementptr inbounds %struct.Node, ptr %195, i32 0, i32 2
  %197 = load i32, ptr %196, align 4, !tbaa !15
  %198 = load i32, ptr %4, align 4, !tbaa !5
  %199 = sext i32 %198 to i64
  %200 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %199
  %201 = getelementptr inbounds %struct.Node, ptr %200, i32 0, i32 2
  %202 = load i32, ptr %201, align 4, !tbaa !15
  %203 = sub nsw i32 %197, %202
  %204 = call i32 @llvm.abs.i32(i32 %203, i1 true)
  %205 = load i32, ptr @py, align 4, !tbaa !5
  %206 = call noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef %204, i32 noundef %205)
  %207 = load i32, ptr %9, align 4, !tbaa !5
  %208 = load i32, ptr @py, align 4, !tbaa !5
  %209 = call noundef i32 @_Z5exgcdiiRiS_(i32 noundef %207, i32 noundef %208, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11)
  store i32 %209, ptr %12, align 4, !tbaa !5
  %210 = srem i32 %206, %209
  %211 = icmp ne i32 %210, 0
  br i1 %211, label %212, label %213

212:                                              ; preds = %192
  store i32 12, ptr %5, align 4
  br label %369

213:                                              ; preds = %192
  %214 = load i32, ptr %10, align 4, !tbaa !5
  %215 = sext i32 %214 to i64
  %216 = load i32, ptr %6, align 4, !tbaa !5
  %217 = sext i32 %216 to i64
  %218 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %217
  %219 = getelementptr inbounds %struct.Node, ptr %218, i32 0, i32 2
  %220 = load i32, ptr %219, align 4, !tbaa !15
  %221 = load i32, ptr %4, align 4, !tbaa !5
  %222 = sext i32 %221 to i64
  %223 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %222
  %224 = getelementptr inbounds %struct.Node, ptr %223, i32 0, i32 2
  %225 = load i32, ptr %224, align 4, !tbaa !15
  %226 = sub nsw i32 %220, %225
  %227 = sext i32 %226 to i64
  %228 = mul nsw i64 %215, %227
  %229 = load i32, ptr @py, align 4, !tbaa !5
  %230 = sext i32 %229 to i64
  %231 = srem i64 %228, %230
  %232 = load i32, ptr %12, align 4, !tbaa !5
  %233 = sext i32 %232 to i64
  %234 = sdiv i64 %231, %233
  %235 = trunc i64 %234 to i32
  store i32 %235, ptr %9, align 4, !tbaa !5
  %236 = icmp slt i32 %235, 0
  br i1 %236, label %237, label %241

237:                                              ; preds = %213
  %238 = load i32, ptr @py, align 4, !tbaa !5
  %239 = load i32, ptr %9, align 4, !tbaa !5
  %240 = add nsw i32 %239, %238
  store i32 %240, ptr %9, align 4, !tbaa !5
  br label %241

241:                                              ; preds = %237, %213
  %242 = load i32, ptr %9, align 4, !tbaa !5
  %243 = load i32, ptr @py, align 4, !tbaa !5
  %244 = load i32, ptr %12, align 4, !tbaa !5
  %245 = sdiv i32 %243, %244
  %246 = call noundef zeroext i1 @_Z3CRTRiS_ii(ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %8, i32 noundef %242, i32 noundef %245)
  br i1 %246, label %248, label %247

247:                                              ; preds = %241
  store i32 12, ptr %5, align 4
  br label %369

248:                                              ; preds = %241
  br label %266

249:                                              ; preds = %189
  %250 = load i32, ptr %6, align 4, !tbaa !5
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %251
  %253 = getelementptr inbounds %struct.Node, ptr %252, i32 0, i32 2
  %254 = load i32, ptr %253, align 4, !tbaa !15
  %255 = load i32, ptr %4, align 4, !tbaa !5
  %256 = sext i32 %255 to i64
  %257 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %256
  %258 = getelementptr inbounds %struct.Node, ptr %257, i32 0, i32 2
  %259 = load i32, ptr %258, align 4, !tbaa !15
  %260 = sub nsw i32 %254, %259
  %261 = load i32, ptr @py, align 4, !tbaa !5
  %262 = srem i32 %260, %261
  %263 = icmp ne i32 %262, 0
  br i1 %263, label %264, label %265

264:                                              ; preds = %249
  store i32 12, ptr %5, align 4
  br label %369

265:                                              ; preds = %249
  br label %266

266:                                              ; preds = %265, %248
  %267 = load i32, ptr %4, align 4, !tbaa !5
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %268
  %270 = getelementptr inbounds %struct.Node, ptr %269, i32 0, i32 6
  %271 = load i32, ptr %270, align 4, !tbaa !16
  %272 = load i32, ptr %6, align 4, !tbaa !5
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %273
  %275 = getelementptr inbounds %struct.Node, ptr %274, i32 0, i32 6
  %276 = load i32, ptr %275, align 4, !tbaa !16
  %277 = sub nsw i32 %271, %276
  %278 = load i32, ptr @pz, align 4, !tbaa !5
  %279 = srem i32 %277, %278
  store i32 %279, ptr %9, align 4, !tbaa !5
  %280 = icmp slt i32 %279, 0
  br i1 %280, label %281, label %285

281:                                              ; preds = %266
  %282 = load i32, ptr @pz, align 4, !tbaa !5
  %283 = load i32, ptr %9, align 4, !tbaa !5
  %284 = add nsw i32 %283, %282
  store i32 %284, ptr %9, align 4, !tbaa !5
  br label %285

285:                                              ; preds = %281, %266
  %286 = load i32, ptr %9, align 4, !tbaa !5
  %287 = icmp ne i32 %286, 0
  br i1 %287, label %288, label %345

288:                                              ; preds = %285
  %289 = load i32, ptr %6, align 4, !tbaa !5
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %290
  %292 = getelementptr inbounds %struct.Node, ptr %291, i32 0, i32 3
  %293 = load i32, ptr %292, align 4, !tbaa !17
  %294 = load i32, ptr %4, align 4, !tbaa !5
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %295
  %297 = getelementptr inbounds %struct.Node, ptr %296, i32 0, i32 3
  %298 = load i32, ptr %297, align 4, !tbaa !17
  %299 = sub nsw i32 %293, %298
  %300 = call i32 @llvm.abs.i32(i32 %299, i1 true)
  %301 = load i32, ptr @pz, align 4, !tbaa !5
  %302 = call noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef %300, i32 noundef %301)
  %303 = load i32, ptr %9, align 4, !tbaa !5
  %304 = load i32, ptr @pz, align 4, !tbaa !5
  %305 = call noundef i32 @_Z5exgcdiiRiS_(i32 noundef %303, i32 noundef %304, ptr noundef nonnull align 4 dereferenceable(4) %10, ptr noundef nonnull align 4 dereferenceable(4) %11)
  store i32 %305, ptr %12, align 4, !tbaa !5
  %306 = srem i32 %302, %305
  %307 = icmp ne i32 %306, 0
  br i1 %307, label %308, label %309

308:                                              ; preds = %288
  store i32 12, ptr %5, align 4
  br label %369

309:                                              ; preds = %288
  %310 = load i32, ptr %10, align 4, !tbaa !5
  %311 = sext i32 %310 to i64
  %312 = load i32, ptr %6, align 4, !tbaa !5
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %313
  %315 = getelementptr inbounds %struct.Node, ptr %314, i32 0, i32 3
  %316 = load i32, ptr %315, align 4, !tbaa !17
  %317 = load i32, ptr %4, align 4, !tbaa !5
  %318 = sext i32 %317 to i64
  %319 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %318
  %320 = getelementptr inbounds %struct.Node, ptr %319, i32 0, i32 3
  %321 = load i32, ptr %320, align 4, !tbaa !17
  %322 = sub nsw i32 %316, %321
  %323 = sext i32 %322 to i64
  %324 = mul nsw i64 %311, %323
  %325 = load i32, ptr @pz, align 4, !tbaa !5
  %326 = sext i32 %325 to i64
  %327 = srem i64 %324, %326
  %328 = load i32, ptr %12, align 4, !tbaa !5
  %329 = sext i32 %328 to i64
  %330 = sdiv i64 %327, %329
  %331 = trunc i64 %330 to i32
  store i32 %331, ptr %9, align 4, !tbaa !5
  %332 = icmp slt i32 %331, 0
  br i1 %332, label %333, label %337

333:                                              ; preds = %309
  %334 = load i32, ptr @pz, align 4, !tbaa !5
  %335 = load i32, ptr %9, align 4, !tbaa !5
  %336 = add nsw i32 %335, %334
  store i32 %336, ptr %9, align 4, !tbaa !5
  br label %337

337:                                              ; preds = %333, %309
  %338 = load i32, ptr %9, align 4, !tbaa !5
  %339 = load i32, ptr @pz, align 4, !tbaa !5
  %340 = load i32, ptr %12, align 4, !tbaa !5
  %341 = sdiv i32 %339, %340
  %342 = call noundef zeroext i1 @_Z3CRTRiS_ii(ptr noundef nonnull align 4 dereferenceable(4) %7, ptr noundef nonnull align 4 dereferenceable(4) %8, i32 noundef %338, i32 noundef %341)
  br i1 %342, label %344, label %343

343:                                              ; preds = %337
  store i32 12, ptr %5, align 4
  br label %369

344:                                              ; preds = %337
  br label %362

345:                                              ; preds = %285
  %346 = load i32, ptr %6, align 4, !tbaa !5
  %347 = sext i32 %346 to i64
  %348 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %347
  %349 = getelementptr inbounds %struct.Node, ptr %348, i32 0, i32 3
  %350 = load i32, ptr %349, align 4, !tbaa !17
  %351 = load i32, ptr %4, align 4, !tbaa !5
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %352
  %354 = getelementptr inbounds %struct.Node, ptr %353, i32 0, i32 3
  %355 = load i32, ptr %354, align 4, !tbaa !17
  %356 = sub nsw i32 %350, %355
  %357 = load i32, ptr @pz, align 4, !tbaa !5
  %358 = srem i32 %356, %357
  %359 = icmp ne i32 %358, 0
  br i1 %359, label %360, label %361

360:                                              ; preds = %345
  store i32 12, ptr %5, align 4
  br label %369

361:                                              ; preds = %345
  br label %362

362:                                              ; preds = %361, %344
  %363 = load i32, ptr %3, align 4, !tbaa !5
  %364 = load i32, ptr %7, align 4, !tbaa !5
  %365 = icmp sgt i32 %363, %364
  br i1 %365, label %366, label %368

366:                                              ; preds = %362
  %367 = load i32, ptr %7, align 4, !tbaa !5
  store i32 %367, ptr %3, align 4, !tbaa !5
  br label %368

368:                                              ; preds = %366, %362
  store i32 0, ptr %5, align 4
  br label %369

369:                                              ; preds = %368, %360, %343, %308, %264, %247, %212, %168, %151, %116
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #8
  %370 = load i32, ptr %5, align 4
  switch i32 %370, label %692 [
    i32 0, label %371
    i32 12, label %372
  ]

371:                                              ; preds = %369
  br label %372

372:                                              ; preds = %371, %369
  %373 = load i32, ptr %6, align 4, !tbaa !5
  %374 = add nsw i32 %373, 1
  store i32 %374, ptr %6, align 4, !tbaa !5
  br label %69, !llvm.loop !18

375:                                              ; preds = %73
  br label %376

376:                                              ; preds = %375
  %377 = load i32, ptr %4, align 4, !tbaa !5
  %378 = add nsw i32 %377, 1
  store i32 %378, ptr %4, align 4, !tbaa !5
  br label %61, !llvm.loop !19

379:                                              ; preds = %65
  %380 = load i32, ptr %3, align 4, !tbaa !5
  %381 = icmp eq i32 %380, 1061109567
  br i1 %381, label %382, label %383

382:                                              ; preds = %379
  store i32 6, ptr %5, align 4
  br label %636

383:                                              ; preds = %379
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  store i32 0, ptr %13, align 4, !tbaa !5
  br label %384

384:                                              ; preds = %492, %383
  %385 = load i32, ptr %13, align 4, !tbaa !5
  %386 = load i32, ptr @n, align 4, !tbaa !5
  %387 = icmp slt i32 %385, %386
  br i1 %387, label %389, label %388

388:                                              ; preds = %384
  store i32 13, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %495

389:                                              ; preds = %384
  %390 = load i32, ptr %13, align 4, !tbaa !5
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %391
  %393 = getelementptr inbounds %struct.Node, ptr %392, i32 0, i32 1
  %394 = load i32, ptr %393, align 4, !tbaa !13
  %395 = sext i32 %394 to i64
  %396 = load i32, ptr %3, align 4, !tbaa !5
  %397 = sext i32 %396 to i64
  %398 = load i32, ptr %13, align 4, !tbaa !5
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %399
  %401 = getelementptr inbounds %struct.Node, ptr %400, i32 0, i32 4
  %402 = load i32, ptr %401, align 4, !tbaa !11
  %403 = sext i32 %402 to i64
  %404 = mul nsw i64 %397, %403
  %405 = add nsw i64 %395, %404
  %406 = load i32, ptr @px, align 4, !tbaa !5
  %407 = sext i32 %406 to i64
  %408 = srem i64 %405, %407
  %409 = trunc i64 %408 to i32
  %410 = load i32, ptr %13, align 4, !tbaa !5
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %411
  %413 = getelementptr inbounds %struct.Node, ptr %412, i32 0, i32 1
  store i32 %409, ptr %413, align 4, !tbaa !13
  %414 = icmp slt i32 %409, 0
  br i1 %414, label %415, label %423

415:                                              ; preds = %389
  %416 = load i32, ptr @px, align 4, !tbaa !5
  %417 = load i32, ptr %13, align 4, !tbaa !5
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %418
  %420 = getelementptr inbounds %struct.Node, ptr %419, i32 0, i32 1
  %421 = load i32, ptr %420, align 4, !tbaa !13
  %422 = add nsw i32 %421, %416
  store i32 %422, ptr %420, align 4, !tbaa !13
  br label %423

423:                                              ; preds = %415, %389
  %424 = load i32, ptr %13, align 4, !tbaa !5
  %425 = sext i32 %424 to i64
  %426 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %425
  %427 = getelementptr inbounds %struct.Node, ptr %426, i32 0, i32 2
  %428 = load i32, ptr %427, align 4, !tbaa !15
  %429 = sext i32 %428 to i64
  %430 = load i32, ptr %3, align 4, !tbaa !5
  %431 = sext i32 %430 to i64
  %432 = load i32, ptr %13, align 4, !tbaa !5
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %433
  %435 = getelementptr inbounds %struct.Node, ptr %434, i32 0, i32 5
  %436 = load i32, ptr %435, align 4, !tbaa !14
  %437 = sext i32 %436 to i64
  %438 = mul nsw i64 %431, %437
  %439 = add nsw i64 %429, %438
  %440 = load i32, ptr @py, align 4, !tbaa !5
  %441 = sext i32 %440 to i64
  %442 = srem i64 %439, %441
  %443 = trunc i64 %442 to i32
  %444 = load i32, ptr %13, align 4, !tbaa !5
  %445 = sext i32 %444 to i64
  %446 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %445
  %447 = getelementptr inbounds %struct.Node, ptr %446, i32 0, i32 2
  store i32 %443, ptr %447, align 4, !tbaa !15
  %448 = icmp slt i32 %443, 0
  br i1 %448, label %449, label %457

449:                                              ; preds = %423
  %450 = load i32, ptr @py, align 4, !tbaa !5
  %451 = load i32, ptr %13, align 4, !tbaa !5
  %452 = sext i32 %451 to i64
  %453 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %452
  %454 = getelementptr inbounds %struct.Node, ptr %453, i32 0, i32 2
  %455 = load i32, ptr %454, align 4, !tbaa !15
  %456 = add nsw i32 %455, %450
  store i32 %456, ptr %454, align 4, !tbaa !15
  br label %457

457:                                              ; preds = %449, %423
  %458 = load i32, ptr %13, align 4, !tbaa !5
  %459 = sext i32 %458 to i64
  %460 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %459
  %461 = getelementptr inbounds %struct.Node, ptr %460, i32 0, i32 3
  %462 = load i32, ptr %461, align 4, !tbaa !17
  %463 = sext i32 %462 to i64
  %464 = load i32, ptr %3, align 4, !tbaa !5
  %465 = sext i32 %464 to i64
  %466 = load i32, ptr %13, align 4, !tbaa !5
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %467
  %469 = getelementptr inbounds %struct.Node, ptr %468, i32 0, i32 6
  %470 = load i32, ptr %469, align 4, !tbaa !16
  %471 = sext i32 %470 to i64
  %472 = mul nsw i64 %465, %471
  %473 = add nsw i64 %463, %472
  %474 = load i32, ptr @pz, align 4, !tbaa !5
  %475 = sext i32 %474 to i64
  %476 = srem i64 %473, %475
  %477 = trunc i64 %476 to i32
  %478 = load i32, ptr %13, align 4, !tbaa !5
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %479
  %481 = getelementptr inbounds %struct.Node, ptr %480, i32 0, i32 3
  store i32 %477, ptr %481, align 4, !tbaa !17
  %482 = icmp slt i32 %477, 0
  br i1 %482, label %483, label %491

483:                                              ; preds = %457
  %484 = load i32, ptr @pz, align 4, !tbaa !5
  %485 = load i32, ptr %13, align 4, !tbaa !5
  %486 = sext i32 %485 to i64
  %487 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %486
  %488 = getelementptr inbounds %struct.Node, ptr %487, i32 0, i32 3
  %489 = load i32, ptr %488, align 4, !tbaa !17
  %490 = add nsw i32 %489, %484
  store i32 %490, ptr %488, align 4, !tbaa !17
  br label %491

491:                                              ; preds = %483, %457
  br label %492

492:                                              ; preds = %491
  %493 = load i32, ptr %13, align 4, !tbaa !5
  %494 = add nsw i32 %493, 1
  store i32 %494, ptr %13, align 4, !tbaa !5
  br label %384, !llvm.loop !20

495:                                              ; preds = %388
  %496 = load i32, ptr @n, align 4, !tbaa !5
  %497 = sext i32 %496 to i64
  %498 = getelementptr inbounds %struct.Node, ptr @a, i64 %497
  call void @_ZSt4sortIP4NodeEvT_S2_(ptr noundef @a, ptr noundef %498)
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #8
  store i32 0, ptr %14, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #8
  store i32 0, ptr %15, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #8
  store i32 0, ptr %16, align 4, !tbaa !5
  br label %499

499:                                              ; preds = %617, %495
  %500 = load i32, ptr %15, align 4, !tbaa !5
  %501 = load i32, ptr @n, align 4, !tbaa !5
  %502 = icmp slt i32 %500, %501
  br i1 %502, label %504, label %503

503:                                              ; preds = %499
  store i32 16, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #8
  br label %634

504:                                              ; preds = %499
  br label %505

505:                                              ; preds = %548, %504
  %506 = load i32, ptr %16, align 4, !tbaa !5
  %507 = load i32, ptr @n, align 4, !tbaa !5
  %508 = icmp slt i32 %506, %507
  br i1 %508, label %509, label %545

509:                                              ; preds = %505
  %510 = load i32, ptr %15, align 4, !tbaa !5
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %511
  %513 = getelementptr inbounds %struct.Node, ptr %512, i32 0, i32 1
  %514 = load i32, ptr %513, align 4, !tbaa !13
  %515 = load i32, ptr %16, align 4, !tbaa !5
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %516
  %518 = getelementptr inbounds %struct.Node, ptr %517, i32 0, i32 1
  %519 = load i32, ptr %518, align 4, !tbaa !13
  %520 = icmp eq i32 %514, %519
  br i1 %520, label %521, label %545

521:                                              ; preds = %509
  %522 = load i32, ptr %15, align 4, !tbaa !5
  %523 = sext i32 %522 to i64
  %524 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %523
  %525 = getelementptr inbounds %struct.Node, ptr %524, i32 0, i32 2
  %526 = load i32, ptr %525, align 4, !tbaa !15
  %527 = load i32, ptr %16, align 4, !tbaa !5
  %528 = sext i32 %527 to i64
  %529 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %528
  %530 = getelementptr inbounds %struct.Node, ptr %529, i32 0, i32 2
  %531 = load i32, ptr %530, align 4, !tbaa !15
  %532 = icmp eq i32 %526, %531
  br i1 %532, label %533, label %545

533:                                              ; preds = %521
  %534 = load i32, ptr %15, align 4, !tbaa !5
  %535 = sext i32 %534 to i64
  %536 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %535
  %537 = getelementptr inbounds %struct.Node, ptr %536, i32 0, i32 3
  %538 = load i32, ptr %537, align 4, !tbaa !17
  %539 = load i32, ptr %16, align 4, !tbaa !5
  %540 = sext i32 %539 to i64
  %541 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %540
  %542 = getelementptr inbounds %struct.Node, ptr %541, i32 0, i32 3
  %543 = load i32, ptr %542, align 4, !tbaa !17
  %544 = icmp eq i32 %538, %543
  br label %545

545:                                              ; preds = %533, %521, %509, %505
  %546 = phi i1 [ false, %521 ], [ false, %509 ], [ false, %505 ], [ %544, %533 ]
  br i1 %546, label %547, label %551

547:                                              ; preds = %545
  br label %548

548:                                              ; preds = %547
  %549 = load i32, ptr %16, align 4, !tbaa !5
  %550 = add nsw i32 %549, 1
  store i32 %550, ptr %16, align 4, !tbaa !5
  br label %505, !llvm.loop !21

551:                                              ; preds = %545
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #8
  %552 = load i32, ptr %16, align 4, !tbaa !5
  %553 = load i32, ptr %15, align 4, !tbaa !5
  %554 = sub nsw i32 %552, %553
  store i32 %554, ptr %17, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 28, ptr %18) #8
  %555 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 0
  store i32 0, ptr %555, align 4, !tbaa !22
  %556 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 1
  %557 = load i32, ptr %15, align 4, !tbaa !5
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %558
  %560 = getelementptr inbounds %struct.Node, ptr %559, i32 0, i32 1
  %561 = load i32, ptr %560, align 4, !tbaa !13
  store i32 %561, ptr %556, align 4, !tbaa !13
  %562 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 2
  %563 = load i32, ptr %15, align 4, !tbaa !5
  %564 = sext i32 %563 to i64
  %565 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %564
  %566 = getelementptr inbounds %struct.Node, ptr %565, i32 0, i32 2
  %567 = load i32, ptr %566, align 4, !tbaa !15
  store i32 %567, ptr %562, align 4, !tbaa !15
  %568 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 3
  %569 = load i32, ptr %15, align 4, !tbaa !5
  %570 = sext i32 %569 to i64
  %571 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %570
  %572 = getelementptr inbounds %struct.Node, ptr %571, i32 0, i32 3
  %573 = load i32, ptr %572, align 4, !tbaa !17
  store i32 %573, ptr %568, align 4, !tbaa !17
  %574 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 4
  store i32 0, ptr %574, align 4, !tbaa !11
  %575 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 5
  store i32 0, ptr %575, align 4, !tbaa !14
  %576 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 6
  store i32 0, ptr %576, align 4, !tbaa !16
  br label %577

577:                                              ; preds = %614, %551
  %578 = load i32, ptr %15, align 4, !tbaa !5
  %579 = load i32, ptr %16, align 4, !tbaa !5
  %580 = icmp slt i32 %578, %579
  br i1 %580, label %581, label %617

581:                                              ; preds = %577
  %582 = load i32, ptr %15, align 4, !tbaa !5
  %583 = sext i32 %582 to i64
  %584 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %583
  %585 = getelementptr inbounds %struct.Node, ptr %584, i32 0, i32 0
  %586 = load i32, ptr %585, align 4, !tbaa !22
  %587 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 0
  %588 = load i32, ptr %587, align 4, !tbaa !22
  %589 = add nsw i32 %588, %586
  store i32 %589, ptr %587, align 4, !tbaa !22
  %590 = load i32, ptr %15, align 4, !tbaa !5
  %591 = sext i32 %590 to i64
  %592 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %591
  %593 = getelementptr inbounds %struct.Node, ptr %592, i32 0, i32 4
  %594 = load i32, ptr %593, align 4, !tbaa !11
  %595 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 4
  %596 = load i32, ptr %595, align 4, !tbaa !11
  %597 = add nsw i32 %596, %594
  store i32 %597, ptr %595, align 4, !tbaa !11
  %598 = load i32, ptr %15, align 4, !tbaa !5
  %599 = sext i32 %598 to i64
  %600 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %599
  %601 = getelementptr inbounds %struct.Node, ptr %600, i32 0, i32 5
  %602 = load i32, ptr %601, align 4, !tbaa !14
  %603 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 5
  %604 = load i32, ptr %603, align 4, !tbaa !14
  %605 = add nsw i32 %604, %602
  store i32 %605, ptr %603, align 4, !tbaa !14
  %606 = load i32, ptr %15, align 4, !tbaa !5
  %607 = sext i32 %606 to i64
  %608 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %607
  %609 = getelementptr inbounds %struct.Node, ptr %608, i32 0, i32 6
  %610 = load i32, ptr %609, align 4, !tbaa !16
  %611 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 6
  %612 = load i32, ptr %611, align 4, !tbaa !16
  %613 = add nsw i32 %612, %610
  store i32 %613, ptr %611, align 4, !tbaa !16
  br label %614

614:                                              ; preds = %581
  %615 = load i32, ptr %15, align 4, !tbaa !5
  %616 = add nsw i32 %615, 1
  store i32 %616, ptr %15, align 4, !tbaa !5
  br label %577, !llvm.loop !23

617:                                              ; preds = %577
  %618 = load i32, ptr %17, align 4, !tbaa !5
  %619 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 4
  %620 = load i32, ptr %619, align 4, !tbaa !11
  %621 = sdiv i32 %620, %618
  store i32 %621, ptr %619, align 4, !tbaa !11
  %622 = load i32, ptr %17, align 4, !tbaa !5
  %623 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 5
  %624 = load i32, ptr %623, align 4, !tbaa !14
  %625 = sdiv i32 %624, %622
  store i32 %625, ptr %623, align 4, !tbaa !14
  %626 = load i32, ptr %17, align 4, !tbaa !5
  %627 = getelementptr inbounds %struct.Node, ptr %18, i32 0, i32 6
  %628 = load i32, ptr %627, align 4, !tbaa !16
  %629 = sdiv i32 %628, %626
  store i32 %629, ptr %627, align 4, !tbaa !16
  %630 = load i32, ptr %14, align 4, !tbaa !5
  %631 = add nsw i32 %630, 1
  store i32 %631, ptr %14, align 4, !tbaa !5
  %632 = sext i32 %630 to i64
  %633 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %632
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %633, ptr align 4 %18, i64 28, i1 false), !tbaa.struct !24
  call void @llvm.lifetime.end.p0(i64 28, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #8
  br label %499, !llvm.loop !25

634:                                              ; preds = %503
  %635 = load i32, ptr %14, align 4, !tbaa !5
  store i32 %635, ptr @n, align 4, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #8
  store i32 0, ptr %5, align 4
  br label %636

636:                                              ; preds = %634, %382
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #8
  %637 = load i32, ptr %5, align 4
  switch i32 %637, label %692 [
    i32 0, label %638
    i32 6, label %639
  ]

638:                                              ; preds = %636
  br label %60, !llvm.loop !26

639:                                              ; preds = %636
  %640 = load i32, ptr @n, align 4, !tbaa !5
  %641 = sext i32 %640 to i64
  %642 = getelementptr inbounds %struct.Node, ptr @a, i64 %641
  call void @_ZSt4sortIP4NodePFbRKS0_S3_EEvT_S6_T0_(ptr noundef @a, ptr noundef %642, ptr noundef @_Z3cmpRK4NodeS1_)
  %643 = load i32, ptr @n, align 4, !tbaa !5
  %644 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, i32 noundef %643)
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #8
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %645

645:                                              ; preds = %688, %639
  %646 = load i32, ptr %19, align 4, !tbaa !5
  %647 = load i32, ptr @n, align 4, !tbaa !5
  %648 = icmp slt i32 %646, %647
  br i1 %648, label %650, label %649

649:                                              ; preds = %645
  store i32 24, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #8
  br label %691

650:                                              ; preds = %645
  %651 = load i32, ptr %19, align 4, !tbaa !5
  %652 = load i32, ptr %19, align 4, !tbaa !5
  %653 = sext i32 %652 to i64
  %654 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %653
  %655 = getelementptr inbounds %struct.Node, ptr %654, i32 0, i32 0
  %656 = load i32, ptr %655, align 4, !tbaa !22
  %657 = load i32, ptr %19, align 4, !tbaa !5
  %658 = sext i32 %657 to i64
  %659 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %658
  %660 = getelementptr inbounds %struct.Node, ptr %659, i32 0, i32 1
  %661 = load i32, ptr %660, align 4, !tbaa !13
  %662 = load i32, ptr %19, align 4, !tbaa !5
  %663 = sext i32 %662 to i64
  %664 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %663
  %665 = getelementptr inbounds %struct.Node, ptr %664, i32 0, i32 2
  %666 = load i32, ptr %665, align 4, !tbaa !15
  %667 = load i32, ptr %19, align 4, !tbaa !5
  %668 = sext i32 %667 to i64
  %669 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %668
  %670 = getelementptr inbounds %struct.Node, ptr %669, i32 0, i32 3
  %671 = load i32, ptr %670, align 4, !tbaa !17
  %672 = load i32, ptr %19, align 4, !tbaa !5
  %673 = sext i32 %672 to i64
  %674 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %673
  %675 = getelementptr inbounds %struct.Node, ptr %674, i32 0, i32 4
  %676 = load i32, ptr %675, align 4, !tbaa !11
  %677 = load i32, ptr %19, align 4, !tbaa !5
  %678 = sext i32 %677 to i64
  %679 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %678
  %680 = getelementptr inbounds %struct.Node, ptr %679, i32 0, i32 5
  %681 = load i32, ptr %680, align 4, !tbaa !14
  %682 = load i32, ptr %19, align 4, !tbaa !5
  %683 = sext i32 %682 to i64
  %684 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %683
  %685 = getelementptr inbounds %struct.Node, ptr %684, i32 0, i32 6
  %686 = load i32, ptr %685, align 4, !tbaa !16
  %687 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef %651, i32 noundef %656, i32 noundef %661, i32 noundef %666, i32 noundef %671, i32 noundef %676, i32 noundef %681, i32 noundef %686)
  br label %688

688:                                              ; preds = %650
  %689 = load i32, ptr %19, align 4, !tbaa !5
  %690 = add nsw i32 %689, 1
  store i32 %690, ptr %19, align 4, !tbaa !5
  br label %645, !llvm.loop !27

691:                                              ; preds = %649
  ret i32 0

692:                                              ; preds = %636, %369
  unreachable
}

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #5

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

; 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) #7

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

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

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 = { 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 = { "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 = { 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { 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 = !{!12, !6, i64 16}
!12 = !{!"_ZTS4Node", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24}
!13 = !{!12, !6, i64 4}
!14 = !{!12, !6, i64 20}
!15 = !{!12, !6, i64 8}
!16 = !{!12, !6, i64 24}
!17 = !{!12, !6, i64 12}
!18 = distinct !{!18, !10}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10}
!22 = !{!12, !6, i64 0}
!23 = distinct !{!23, !10}
!24 = !{i64 0, i64 4, !5, i64 4, i64 4, !5, i64 8, i64 4, !5, i64 12, i64 4, !5, i64 16, i64 4, !5, i64 20, i64 4, !5, i64 24, i64 4, !5}
!25 = distinct !{!25, !10}
!26 = distinct !{!26, !10}
!27 = distinct !{!27, !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"

%struct.Node = type { i32, i32, i32, i32, i32, i32, i32 }

@n = external dso_local global i32, align 4
@px = external dso_local global i32, align 4
@py = external dso_local global i32, align 4
@pz = external dso_local global i32, align 4
@a = external dso_local global [101 x %struct.Node], align 16
@.str = external hidden unnamed_addr constant [9 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [27 x i8], align 1

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z3cmpRK4NodeS1_(ptr noundef nonnull align 4 dereferenceable(28), ptr noundef nonnull align 4 dereferenceable(28)) #0

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_Z5exgcdiiRiS_(i32 noundef, i32 noundef, ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #0

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_Z3CRTRiS_ii(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 4 dereferenceable(4), i32 noundef, i32 noundef) local_unnamed_addr #0

; Function Attrs: mustprogress norecurse uwtable
define dso_local noundef i32 @main() local_unnamed_addr #2 {
  %1 = alloca i32, align 4
  %2 = alloca i32, align 4
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str, ptr noundef nonnull @n, ptr noundef nonnull @px, ptr noundef nonnull @py, ptr noundef nonnull @pz)
  %6 = load i32, ptr @n, align 4, !tbaa !5
  %7 = icmp sgt i32 %6, 0
  br i1 %7, label %.lr.ph, label %.preheader176

.preheader176:                                    ; preds = %.lr.ph, %0
  %8 = phi i32 [ %6, %0 ], [ %18, %.lr.ph ]
  %9 = icmp sgt i32 %8, 0
  br i1 %9, label %.lr.ph183, label %._crit_edge.thread

.lr.ph:                                           ; preds = %0, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 0, %0 ]
  %10 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %indvars.iv
  %11 = getelementptr inbounds i8, ptr %10, i64 4
  %12 = getelementptr inbounds i8, ptr %10, i64 8
  %13 = getelementptr inbounds i8, ptr %10, i64 12
  %14 = getelementptr inbounds i8, ptr %10, i64 16
  %15 = getelementptr inbounds i8, ptr %10, i64 20
  %16 = getelementptr inbounds i8, ptr %10, i64 24
  %17 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.1, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef nonnull %14, ptr noundef nonnull %15, ptr noundef nonnull %16)
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %18 = load i32, ptr @n, align 4, !tbaa !5
  %19 = sext i32 %18 to i64
  %20 = icmp slt i64 %indvars.iv.next, %19
  br i1 %20, label %.lr.ph, label %.preheader176, !llvm.loop !9

.loopexit.loopexit:                               ; preds = %156
  %.pre253 = sext i32 %157 to i64
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.loopexit, %.lr.ph183
  %.pre-phi = phi i64 [ %.pre253, %.loopexit.loopexit ], [ %33, %.lr.ph183 ]
  %21 = phi i32 [ %157, %.loopexit.loopexit ], [ %32, %.lr.ph183 ]
  %.1.lcssa = phi i32 [ %.3, %.loopexit.loopexit ], [ %.0119182, %.lr.ph183 ]
  %22 = icmp slt i64 %indvars.iv.next233, %.pre-phi
  %indvars.iv.next228 = add nuw nsw i64 %indvars.iv227, 1
  br i1 %22, label %.lr.ph183.backedge, label %._crit_edge

.lr.ph183.backedge:                               ; preds = %.loopexit, %._crit_edge213
  %.be = phi i32 [ %21, %.loopexit ], [ %.0126.lcssa, %._crit_edge213 ]
  %indvars.iv232.be = phi i64 [ %indvars.iv.next233, %.loopexit ], [ 0, %._crit_edge213 ]
  %indvars.iv227.be = phi i64 [ %indvars.iv.next228, %.loopexit ], [ 1, %._crit_edge213 ]
  %.0119182.be = phi i32 [ %.1.lcssa, %.loopexit ], [ 1061109567, %._crit_edge213 ]
  br label %.lr.ph183, !llvm.loop !11

._crit_edge:                                      ; preds = %.loopexit
  %23 = icmp eq i32 %.1.lcssa, 1061109567
  br i1 %23, label %._crit_edge.thread, label %.preheader175

.preheader175:                                    ; preds = %._crit_edge
  %24 = icmp sgt i32 %21, 0
  br i1 %24, label %.lr.ph187, label %._crit_edge188

.lr.ph187:                                        ; preds = %.preheader175
  %25 = sext i32 %.1.lcssa to i64
  %26 = load i32, ptr @px, align 4, !tbaa !5
  %27 = sext i32 %26 to i64
  %28 = load i32, ptr @py, align 4, !tbaa !5
  %29 = sext i32 %28 to i64
  %30 = load i32, ptr @pz, align 4, !tbaa !5
  %31 = sext i32 %30 to i64
  %wide.trip.count = zext nneg i32 %21 to i64
  br label %165

.lr.ph183:                                        ; preds = %.preheader176, %.lr.ph183.backedge
  %32 = phi i32 [ %.be, %.lr.ph183.backedge ], [ %8, %.preheader176 ]
  %indvars.iv232 = phi i64 [ %indvars.iv232.be, %.lr.ph183.backedge ], [ 0, %.preheader176 ]
  %indvars.iv227 = phi i64 [ %indvars.iv227.be, %.lr.ph183.backedge ], [ 1, %.preheader176 ]
  %.0119182 = phi i32 [ %.0119182.be, %.lr.ph183.backedge ], [ 1061109567, %.preheader176 ]
  %indvars.iv.next233 = add nuw nsw i64 %indvars.iv232, 1
  %33 = sext i32 %32 to i64
  %34 = icmp slt i64 %indvars.iv.next233, %33
  br i1 %34, label %.lr.ph180, label %.loopexit

.lr.ph180:                                        ; preds = %.lr.ph183
  %35 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %indvars.iv232
  %36 = getelementptr inbounds i8, ptr %35, i64 16
  %37 = getelementptr inbounds i8, ptr %35, i64 4
  %38 = getelementptr inbounds i8, ptr %35, i64 20
  %39 = getelementptr inbounds i8, ptr %35, i64 8
  %40 = getelementptr inbounds i8, ptr %35, i64 24
  %41 = getelementptr inbounds i8, ptr %35, i64 12
  br label %42

42:                                               ; preds = %.lr.ph180, %156
  %indvars.iv229 = phi i64 [ %indvars.iv227, %.lr.ph180 ], [ %indvars.iv.next230, %156 ]
  %.1179 = phi i32 [ %.0119182, %.lr.ph180 ], [ %.3, %156 ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %1) #8
  store i32 0, ptr %1, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %2) #8
  store i32 1, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %3) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #8
  %43 = load i32, ptr %36, align 4, !tbaa !12
  %44 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %indvars.iv229
  %45 = getelementptr inbounds i8, ptr %44, i64 16
  %46 = load i32, ptr %45, align 4, !tbaa !12
  %47 = sub nsw i32 %43, %46
  %48 = load i32, ptr @px, align 4, !tbaa !5
  %49 = srem i32 %47, %48
  %50 = icmp slt i32 %49, 0
  %51 = select i1 %50, i32 %48, i32 0
  %spec.select = add nsw i32 %51, %49
  %.not = icmp eq i32 %spec.select, 0
  %52 = getelementptr inbounds i8, ptr %44, i64 4
  %53 = load i32, ptr %52, align 4, !tbaa !14
  %54 = load i32, ptr %37, align 4, !tbaa !14
  %55 = sub nsw i32 %53, %54
  br i1 %.not, label %78, label %56

56:                                               ; preds = %42
  %57 = call i32 @llvm.abs.i32(i32 %55, i1 true)
  %58 = call noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef %57, i32 noundef %48)
  %59 = load i32, ptr @px, align 4, !tbaa !5
  %60 = call noundef i32 @_Z5exgcdiiRiS_(i32 noundef %spec.select, i32 noundef %59, ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %4)
  %61 = srem i32 %58, %60
  %.not151 = icmp eq i32 %61, 0
  br i1 %.not151, label %62, label %156

62:                                               ; preds = %56
  %63 = load i32, ptr %3, align 4, !tbaa !5
  %64 = sext i32 %63 to i64
  %65 = load i32, ptr %52, align 4, !tbaa !14
  %66 = load i32, ptr %37, align 4, !tbaa !14
  %67 = sub nsw i32 %65, %66
  %68 = sext i32 %67 to i64
  %69 = mul nsw i64 %68, %64
  %70 = load i32, ptr @px, align 4, !tbaa !5
  %71 = sext i32 %70 to i64
  %72 = srem i64 %69, %71
  %.lhs.trunc169 = trunc nsw i64 %72 to i32
  %73 = sdiv i32 %.lhs.trunc169, %60
  %74 = icmp slt i32 %73, 0
  %75 = select i1 %74, i32 %70, i32 0
  %spec.select158 = add nsw i32 %75, %73
  %76 = sdiv i32 %70, %60
  %77 = call noundef zeroext i1 @_Z3CRTRiS_ii(ptr noundef nonnull align 4 dereferenceable(4) %1, ptr noundef nonnull align 4 dereferenceable(4) %2, i32 noundef %spec.select158, i32 noundef %76)
  br i1 %77, label %80, label %156

78:                                               ; preds = %42
  %79 = srem i32 %55, %48
  %.not150 = icmp eq i32 %79, 0
  br i1 %.not150, label %80, label %156

80:                                               ; preds = %78, %62
  %81 = load i32, ptr %38, align 4, !tbaa !15
  %82 = getelementptr inbounds i8, ptr %44, i64 20
  %83 = load i32, ptr %82, align 4, !tbaa !15
  %84 = sub nsw i32 %81, %83
  %85 = load i32, ptr @py, align 4, !tbaa !5
  %86 = srem i32 %84, %85
  %87 = icmp slt i32 %86, 0
  %88 = select i1 %87, i32 %85, i32 0
  %spec.select159 = add nsw i32 %88, %86
  %.not152 = icmp eq i32 %spec.select159, 0
  %89 = getelementptr inbounds i8, ptr %44, i64 8
  %90 = load i32, ptr %89, align 4, !tbaa !16
  %91 = load i32, ptr %39, align 4, !tbaa !16
  %92 = sub nsw i32 %90, %91
  br i1 %.not152, label %115, label %93

93:                                               ; preds = %80
  %94 = call i32 @llvm.abs.i32(i32 %92, i1 true)
  %95 = call noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef %94, i32 noundef %85)
  %96 = load i32, ptr @py, align 4, !tbaa !5
  %97 = call noundef i32 @_Z5exgcdiiRiS_(i32 noundef %spec.select159, i32 noundef %96, ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %4)
  %98 = srem i32 %95, %97
  %.not154 = icmp eq i32 %98, 0
  br i1 %.not154, label %99, label %156

99:                                               ; preds = %93
  %100 = load i32, ptr %3, align 4, !tbaa !5
  %101 = sext i32 %100 to i64
  %102 = load i32, ptr %89, align 4, !tbaa !16
  %103 = load i32, ptr %39, align 4, !tbaa !16
  %104 = sub nsw i32 %102, %103
  %105 = sext i32 %104 to i64
  %106 = mul nsw i64 %105, %101
  %107 = load i32, ptr @py, align 4, !tbaa !5
  %108 = sext i32 %107 to i64
  %109 = srem i64 %106, %108
  %.lhs.trunc166 = trunc nsw i64 %109 to i32
  %110 = sdiv i32 %.lhs.trunc166, %97
  %111 = icmp slt i32 %110, 0
  %112 = select i1 %111, i32 %107, i32 0
  %spec.select160 = add nsw i32 %112, %110
  %113 = sdiv i32 %107, %97
  %114 = call noundef zeroext i1 @_Z3CRTRiS_ii(ptr noundef nonnull align 4 dereferenceable(4) %1, ptr noundef nonnull align 4 dereferenceable(4) %2, i32 noundef %spec.select160, i32 noundef %113)
  br i1 %114, label %117, label %156

115:                                              ; preds = %80
  %116 = srem i32 %92, %85
  %.not153 = icmp eq i32 %116, 0
  br i1 %.not153, label %117, label %156

117:                                              ; preds = %115, %99
  %118 = load i32, ptr %40, align 4, !tbaa !17
  %119 = getelementptr inbounds i8, ptr %44, i64 24
  %120 = load i32, ptr %119, align 4, !tbaa !17
  %121 = sub nsw i32 %118, %120
  %122 = load i32, ptr @pz, align 4, !tbaa !5
  %123 = srem i32 %121, %122
  %124 = icmp slt i32 %123, 0
  %125 = select i1 %124, i32 %122, i32 0
  %spec.select161 = add nsw i32 %125, %123
  %.not155 = icmp eq i32 %spec.select161, 0
  %126 = getelementptr inbounds i8, ptr %44, i64 12
  %127 = load i32, ptr %126, align 4, !tbaa !18
  %128 = load i32, ptr %41, align 4, !tbaa !18
  %129 = sub nsw i32 %127, %128
  br i1 %.not155, label %152, label %130

130:                                              ; preds = %117
  %131 = call i32 @llvm.abs.i32(i32 %129, i1 true)
  %132 = call noundef i32 @_ZSt5__gcdIiET_S0_S0_(i32 noundef %131, i32 noundef %122)
  %133 = load i32, ptr @pz, align 4, !tbaa !5
  %134 = call noundef i32 @_Z5exgcdiiRiS_(i32 noundef %spec.select161, i32 noundef %133, ptr noundef nonnull align 4 dereferenceable(4) %3, ptr noundef nonnull align 4 dereferenceable(4) %4)
  %135 = srem i32 %132, %134
  %.not157 = icmp eq i32 %135, 0
  br i1 %.not157, label %136, label %156

136:                                              ; preds = %130
  %137 = load i32, ptr %3, align 4, !tbaa !5
  %138 = sext i32 %137 to i64
  %139 = load i32, ptr %126, align 4, !tbaa !18
  %140 = load i32, ptr %41, align 4, !tbaa !18
  %141 = sub nsw i32 %139, %140
  %142 = sext i32 %141 to i64
  %143 = mul nsw i64 %142, %138
  %144 = load i32, ptr @pz, align 4, !tbaa !5
  %145 = sext i32 %144 to i64
  %146 = srem i64 %143, %145
  %.lhs.trunc = trunc nsw i64 %146 to i32
  %147 = sdiv i32 %.lhs.trunc, %134
  %148 = icmp slt i32 %147, 0
  %149 = select i1 %148, i32 %144, i32 0
  %spec.select162 = add nsw i32 %149, %147
  %150 = sdiv i32 %144, %134
  %151 = call noundef zeroext i1 @_Z3CRTRiS_ii(ptr noundef nonnull align 4 dereferenceable(4) %1, ptr noundef nonnull align 4 dereferenceable(4) %2, i32 noundef %spec.select162, i32 noundef %150)
  br i1 %151, label %154, label %156

152:                                              ; preds = %117
  %153 = srem i32 %129, %122
  %.not156 = icmp eq i32 %153, 0
  br i1 %.not156, label %154, label %156

154:                                              ; preds = %152, %136
  %155 = load i32, ptr %1, align 4, !tbaa !5
  %spec.select163 = call i32 @llvm.smin.i32(i32 %.1179, i32 %155)
  br label %156

156:                                              ; preds = %152, %136, %130, %115, %99, %93, %78, %62, %56, %154
  %.3 = phi i32 [ %spec.select163, %154 ], [ %.1179, %56 ], [ %.1179, %62 ], [ %.1179, %78 ], [ %.1179, %93 ], [ %.1179, %99 ], [ %.1179, %115 ], [ %.1179, %130 ], [ %.1179, %136 ], [ %.1179, %152 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %3) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %2) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %1) #8
  %indvars.iv.next230 = add nuw nsw i64 %indvars.iv229, 1
  %157 = load i32, ptr @n, align 4, !tbaa !5
  %158 = trunc nuw i64 %indvars.iv.next230 to i32
  %159 = icmp sgt i32 %157, %158
  br i1 %159, label %42, label %.loopexit.loopexit, !llvm.loop !19

._crit_edge188:                                   ; preds = %165, %.preheader175
  %160 = sext i32 %21 to i64
  %161 = getelementptr inbounds %struct.Node, ptr @a, i64 %160
  call void @_ZSt4sortIP4NodeEvT_S2_(ptr noundef nonnull @a, ptr noundef nonnull %161)
  %162 = load i32, ptr @n, align 4, !tbaa !5
  %163 = icmp sgt i32 %162, 0
  br i1 %163, label %.preheader.preheader, label %._crit_edge213

.preheader.preheader:                             ; preds = %._crit_edge188
  %164 = zext nneg i32 %162 to i64
  br label %.preheader

165:                                              ; preds = %.lr.ph187, %165
  %indvars.iv235 = phi i64 [ 0, %.lr.ph187 ], [ %indvars.iv.next236, %165 ]
  %166 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %indvars.iv235
  %167 = getelementptr inbounds i8, ptr %166, i64 4
  %168 = load i32, ptr %167, align 4, !tbaa !14
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds i8, ptr %166, i64 16
  %171 = load i32, ptr %170, align 4, !tbaa !12
  %172 = sext i32 %171 to i64
  %173 = mul nsw i64 %172, %25
  %174 = add nsw i64 %173, %169
  %175 = srem i64 %174, %27
  %176 = trunc nsw i64 %175 to i32
  %177 = icmp slt i64 %175, 0
  %178 = select i1 %177, i32 %26, i32 0
  %spec.select174 = add nsw i32 %178, %176
  store i32 %spec.select174, ptr %167, align 4, !tbaa !14
  %179 = getelementptr inbounds i8, ptr %166, i64 8
  %180 = load i32, ptr %179, align 4, !tbaa !16
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds i8, ptr %166, i64 20
  %183 = load i32, ptr %182, align 4, !tbaa !15
  %184 = sext i32 %183 to i64
  %185 = mul nsw i64 %184, %25
  %186 = add nsw i64 %185, %181
  %187 = srem i64 %186, %29
  %188 = trunc nsw i64 %187 to i32
  %189 = icmp slt i64 %187, 0
  %190 = select i1 %189, i32 %28, i32 0
  %storemerge172 = add nsw i32 %190, %188
  store i32 %storemerge172, ptr %179, align 4, !tbaa !16
  %191 = getelementptr inbounds i8, ptr %166, i64 12
  %192 = load i32, ptr %191, align 4, !tbaa !18
  %193 = sext i32 %192 to i64
  %194 = getelementptr inbounds i8, ptr %166, i64 24
  %195 = load i32, ptr %194, align 4, !tbaa !17
  %196 = sext i32 %195 to i64
  %197 = mul nsw i64 %196, %25
  %198 = add nsw i64 %197, %193
  %199 = srem i64 %198, %31
  %200 = trunc nsw i64 %199 to i32
  %201 = icmp slt i64 %199, 0
  %202 = select i1 %201, i32 %30, i32 0
  %storemerge173 = add nsw i32 %202, %200
  store i32 %storemerge173, ptr %191, align 4, !tbaa !18
  %indvars.iv.next236 = add nuw nsw i64 %indvars.iv235, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next236, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge188, label %165, !llvm.loop !20

.preheader:                                       ; preds = %.preheader.preheader, %._crit_edge204
  %indvars.iv247 = phi i64 [ 0, %.preheader.preheader ], [ %indvars.iv.next248, %._crit_edge204 ]
  %.0122212 = phi i32 [ 0, %.preheader.preheader ], [ %.1123.lcssa, %._crit_edge204 ]
  %.0124211 = phi i32 [ 0, %.preheader.preheader ], [ %.1125.lcssa, %._crit_edge204 ]
  %203 = sext i32 %.0124211 to i64
  %204 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %203
  %205 = getelementptr inbounds i8, ptr %204, i64 8
  %206 = getelementptr inbounds i8, ptr %204, i64 12
  %207 = icmp slt i32 %.0122212, %162
  %208 = getelementptr inbounds i8, ptr %204, i64 4
  %209 = load i32, ptr %208, align 4, !tbaa !14
  br i1 %207, label %.lr.ph190, label %.critedge

.lr.ph190:                                        ; preds = %.preheader
  %210 = sext i32 %.0122212 to i64
  br label %211

211:                                              ; preds = %.lr.ph190, %226
  %indvars.iv238 = phi i64 [ %210, %.lr.ph190 ], [ %indvars.iv.next239, %226 ]
  %212 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %indvars.iv238
  %213 = getelementptr inbounds i8, ptr %212, i64 4
  %214 = load i32, ptr %213, align 4, !tbaa !14
  %215 = icmp eq i32 %209, %214
  br i1 %215, label %216, label %.critedge.loopexit.split.loop.exit261

216:                                              ; preds = %211
  %217 = load i32, ptr %205, align 4, !tbaa !16
  %218 = getelementptr inbounds i8, ptr %212, i64 8
  %219 = load i32, ptr %218, align 4, !tbaa !16
  %220 = icmp eq i32 %217, %219
  br i1 %220, label %221, label %.critedge.loopexit.split.loop.exit

221:                                              ; preds = %216
  %222 = load i32, ptr %206, align 4, !tbaa !18
  %223 = getelementptr inbounds i8, ptr %212, i64 12
  %224 = load i32, ptr %223, align 4, !tbaa !18
  %225 = icmp eq i32 %222, %224
  br i1 %225, label %226, label %.critedge.loopexit.split.loop.exit265

226:                                              ; preds = %221
  %indvars.iv.next239 = add nsw i64 %indvars.iv238, 1
  %exitcond241.not = icmp eq i64 %indvars.iv.next239, %164
  br i1 %exitcond241.not, label %.critedge, label %211, !llvm.loop !21

.critedge.loopexit.split.loop.exit:               ; preds = %216
  %227 = trunc nsw i64 %indvars.iv238 to i32
  br label %.critedge

.critedge.loopexit.split.loop.exit261:            ; preds = %211
  %228 = trunc nsw i64 %indvars.iv238 to i32
  br label %.critedge

.critedge.loopexit.split.loop.exit265:            ; preds = %221
  %229 = trunc nsw i64 %indvars.iv238 to i32
  br label %.critedge

.critedge:                                        ; preds = %226, %.critedge.loopexit.split.loop.exit, %.critedge.loopexit.split.loop.exit261, %.critedge.loopexit.split.loop.exit265, %.preheader
  %.1123.lcssa = phi i32 [ %.0122212, %.preheader ], [ %227, %.critedge.loopexit.split.loop.exit ], [ %228, %.critedge.loopexit.split.loop.exit261 ], [ %229, %.critedge.loopexit.split.loop.exit265 ], [ %162, %226 ]
  %230 = sub nsw i32 %.1123.lcssa, %.0124211
  %231 = load <2 x i32>, ptr %205, align 4, !tbaa !5
  %232 = icmp slt i32 %.0124211, %.1123.lcssa
  br i1 %232, label %.lr.ph203.preheader, label %._crit_edge204

.lr.ph203.preheader:                              ; preds = %.critedge
  %wide.trip.count245 = sext i32 %.1123.lcssa to i64
  %233 = sub nsw i64 %wide.trip.count245, %203
  %xtraiter = and i64 %233, 1
  %234 = add nsw i64 %wide.trip.count245, -1
  %235 = icmp eq i64 %234, %203
  br i1 %235, label %._crit_edge204.loopexit.unr-lcssa, label %.lr.ph203.preheader.new

.lr.ph203.preheader.new:                          ; preds = %.lr.ph203.preheader
  %unroll_iter = and i64 %233, -2
  br label %.lr.ph203

.lr.ph203:                                        ; preds = %.lr.ph203, %.lr.ph203.preheader.new
  %indvars.iv242 = phi i64 [ %203, %.lr.ph203.preheader.new ], [ %indvars.iv.next243.1, %.lr.ph203 ]
  %.sroa.0.0202 = phi i32 [ 0, %.lr.ph203.preheader.new ], [ %250, %.lr.ph203 ]
  %.sroa.9.0201 = phi i32 [ 0, %.lr.ph203.preheader.new ], [ %253, %.lr.ph203 ]
  %.sroa.14.0200 = phi i32 [ 0, %.lr.ph203.preheader.new ], [ %256, %.lr.ph203 ]
  %.sroa.19.0199 = phi i32 [ 0, %.lr.ph203.preheader.new ], [ %259, %.lr.ph203 ]
  %niter = phi i64 [ 0, %.lr.ph203.preheader.new ], [ %niter.next.1, %.lr.ph203 ]
  %236 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %indvars.iv242
  %237 = load i32, ptr %236, align 4, !tbaa !22
  %238 = add nsw i32 %237, %.sroa.0.0202
  %239 = getelementptr inbounds i8, ptr %236, i64 16
  %240 = load i32, ptr %239, align 4, !tbaa !12
  %241 = add nsw i32 %240, %.sroa.9.0201
  %242 = getelementptr inbounds i8, ptr %236, i64 20
  %243 = load i32, ptr %242, align 4, !tbaa !15
  %244 = add nsw i32 %243, %.sroa.14.0200
  %245 = getelementptr inbounds i8, ptr %236, i64 24
  %246 = load i32, ptr %245, align 4, !tbaa !17
  %247 = add nsw i32 %246, %.sroa.19.0199
  %indvars.iv.next243 = add nsw i64 %indvars.iv242, 1
  %248 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %indvars.iv.next243
  %249 = load i32, ptr %248, align 4, !tbaa !22
  %250 = add nsw i32 %249, %238
  %251 = getelementptr inbounds i8, ptr %248, i64 16
  %252 = load i32, ptr %251, align 4, !tbaa !12
  %253 = add nsw i32 %252, %241
  %254 = getelementptr inbounds i8, ptr %248, i64 20
  %255 = load i32, ptr %254, align 4, !tbaa !15
  %256 = add nsw i32 %255, %244
  %257 = getelementptr inbounds i8, ptr %248, i64 24
  %258 = load i32, ptr %257, align 4, !tbaa !17
  %259 = add nsw i32 %258, %247
  %indvars.iv.next243.1 = add nsw i64 %indvars.iv242, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge204.loopexit.unr-lcssa, label %.lr.ph203, !llvm.loop !23

._crit_edge204.loopexit.unr-lcssa:                ; preds = %.lr.ph203, %.lr.ph203.preheader
  %.lcssa285.ph = phi i32 [ poison, %.lr.ph203.preheader ], [ %250, %.lr.ph203 ]
  %.lcssa284.ph = phi i32 [ poison, %.lr.ph203.preheader ], [ %253, %.lr.ph203 ]
  %.lcssa283.ph = phi i32 [ poison, %.lr.ph203.preheader ], [ %256, %.lr.ph203 ]
  %.lcssa282.ph = phi i32 [ poison, %.lr.ph203.preheader ], [ %259, %.lr.ph203 ]
  %indvars.iv242.unr = phi i64 [ %203, %.lr.ph203.preheader ], [ %indvars.iv.next243.1, %.lr.ph203 ]
  %.sroa.0.0202.unr = phi i32 [ 0, %.lr.ph203.preheader ], [ %250, %.lr.ph203 ]
  %.sroa.9.0201.unr = phi i32 [ 0, %.lr.ph203.preheader ], [ %253, %.lr.ph203 ]
  %.sroa.14.0200.unr = phi i32 [ 0, %.lr.ph203.preheader ], [ %256, %.lr.ph203 ]
  %.sroa.19.0199.unr = phi i32 [ 0, %.lr.ph203.preheader ], [ %259, %.lr.ph203 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %._crit_edge204, label %.lr.ph203.epil

.lr.ph203.epil:                                   ; preds = %._crit_edge204.loopexit.unr-lcssa
  %260 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %indvars.iv242.unr
  %261 = load i32, ptr %260, align 4, !tbaa !22
  %262 = add nsw i32 %261, %.sroa.0.0202.unr
  %263 = getelementptr inbounds i8, ptr %260, i64 16
  %264 = load i32, ptr %263, align 4, !tbaa !12
  %265 = add nsw i32 %264, %.sroa.9.0201.unr
  %266 = getelementptr inbounds i8, ptr %260, i64 20
  %267 = load i32, ptr %266, align 4, !tbaa !15
  %268 = add nsw i32 %267, %.sroa.14.0200.unr
  %269 = getelementptr inbounds i8, ptr %260, i64 24
  %270 = load i32, ptr %269, align 4, !tbaa !17
  %271 = add nsw i32 %270, %.sroa.19.0199.unr
  br label %._crit_edge204

._crit_edge204:                                   ; preds = %.lr.ph203.epil, %._crit_edge204.loopexit.unr-lcssa, %.critedge
  %.1125.lcssa = phi i32 [ %.0124211, %.critedge ], [ %.1123.lcssa, %._crit_edge204.loopexit.unr-lcssa ], [ %.1123.lcssa, %.lr.ph203.epil ]
  %.sroa.19.0.lcssa = phi i32 [ 0, %.critedge ], [ %.lcssa282.ph, %._crit_edge204.loopexit.unr-lcssa ], [ %271, %.lr.ph203.epil ]
  %.sroa.14.0.lcssa = phi i32 [ 0, %.critedge ], [ %.lcssa283.ph, %._crit_edge204.loopexit.unr-lcssa ], [ %268, %.lr.ph203.epil ]
  %.sroa.9.0.lcssa = phi i32 [ 0, %.critedge ], [ %.lcssa284.ph, %._crit_edge204.loopexit.unr-lcssa ], [ %265, %.lr.ph203.epil ]
  %.sroa.0.0.lcssa = phi i32 [ 0, %.critedge ], [ %.lcssa285.ph, %._crit_edge204.loopexit.unr-lcssa ], [ %262, %.lr.ph203.epil ]
  %272 = sdiv i32 %.sroa.9.0.lcssa, %230
  %273 = sdiv i32 %.sroa.14.0.lcssa, %230
  %274 = sdiv i32 %.sroa.19.0.lcssa, %230
  %indvars.iv.next248 = add nuw nsw i64 %indvars.iv247, 1
  %275 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %indvars.iv247
  store i32 %.sroa.0.0.lcssa, ptr %275, align 4, !tbaa !5
  %.sroa.6.0..sroa_idx = getelementptr inbounds i8, ptr %275, i64 4
  store i32 %209, ptr %.sroa.6.0..sroa_idx, align 4, !tbaa !5
  %.sroa.7.0..sroa_idx = getelementptr inbounds i8, ptr %275, i64 8
  store <2 x i32> %231, ptr %.sroa.7.0..sroa_idx, align 4, !tbaa !5
  %.sroa.9.0..sroa_idx = getelementptr inbounds i8, ptr %275, i64 16
  store i32 %272, ptr %.sroa.9.0..sroa_idx, align 4, !tbaa !5
  %.sroa.14.0..sroa_idx = getelementptr inbounds i8, ptr %275, i64 20
  store i32 %273, ptr %.sroa.14.0..sroa_idx, align 4, !tbaa !5
  %.sroa.19.0..sroa_idx = getelementptr inbounds i8, ptr %275, i64 24
  store i32 %274, ptr %.sroa.19.0..sroa_idx, align 4, !tbaa !5
  %276 = icmp slt i32 %.1125.lcssa, %162
  br i1 %276, label %.preheader, label %._crit_edge213.loopexit, !llvm.loop !24

._crit_edge213.loopexit:                          ; preds = %._crit_edge204
  %277 = trunc nuw i64 %indvars.iv.next248 to i32
  br label %._crit_edge213

._crit_edge213:                                   ; preds = %._crit_edge213.loopexit, %._crit_edge188
  %.0126.lcssa = phi i32 [ 0, %._crit_edge188 ], [ %277, %._crit_edge213.loopexit ]
  store i32 %.0126.lcssa, ptr @n, align 4, !tbaa !5
  %278 = icmp sgt i32 %.0126.lcssa, 0
  br i1 %278, label %.lr.ph183.backedge, label %._crit_edge.thread

._crit_edge.thread:                               ; preds = %._crit_edge, %._crit_edge213, %.preheader176
  %279 = phi i32 [ %8, %.preheader176 ], [ %21, %._crit_edge ], [ %.0126.lcssa, %._crit_edge213 ]
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds %struct.Node, ptr @a, i64 %280
  call void @_ZSt4sortIP4NodePFbRKS0_S3_EEvT_S6_T0_(ptr noundef nonnull @a, ptr noundef nonnull %281, ptr noundef nonnull @_Z3cmpRK4NodeS1_)
  %282 = load i32, ptr @n, align 4, !tbaa !5
  %283 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, i32 noundef %282)
  %284 = load i32, ptr @n, align 4, !tbaa !5
  %285 = icmp sgt i32 %284, 0
  br i1 %285, label %.lr.ph217, label %._crit_edge218

._crit_edge218:                                   ; preds = %.lr.ph217, %._crit_edge.thread
  ret i32 0

.lr.ph217:                                        ; preds = %._crit_edge.thread, %.lr.ph217
  %indvars.iv250 = phi i64 [ %indvars.iv.next251, %.lr.ph217 ], [ 0, %._crit_edge.thread ]
  %286 = getelementptr inbounds [101 x %struct.Node], ptr @a, i64 0, i64 %indvars.iv250
  %287 = load i32, ptr %286, align 4, !tbaa !22
  %288 = getelementptr inbounds i8, ptr %286, i64 4
  %289 = load i32, ptr %288, align 4, !tbaa !14
  %290 = getelementptr inbounds i8, ptr %286, i64 8
  %291 = load i32, ptr %290, align 4, !tbaa !16
  %292 = getelementptr inbounds i8, ptr %286, i64 12
  %293 = load i32, ptr %292, align 4, !tbaa !18
  %294 = getelementptr inbounds i8, ptr %286, i64 16
  %295 = load i32, ptr %294, align 4, !tbaa !12
  %296 = getelementptr inbounds i8, ptr %286, i64 20
  %297 = load i32, ptr %296, align 4, !tbaa !15
  %298 = getelementptr inbounds i8, ptr %286, i64 24
  %299 = load i32, ptr %298, align 4, !tbaa !17
  %300 = trunc nuw nsw i64 %indvars.iv250 to i32
  %301 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef %300, i32 noundef %287, i32 noundef %289, i32 noundef %291, i32 noundef %293, i32 noundef %295, i32 noundef %297, i32 noundef %299)
  %indvars.iv.next251 = add nuw nsw i64 %indvars.iv250, 1
  %302 = load i32, ptr @n, align 4, !tbaa !5
  %303 = sext i32 %302 to i64
  %304 = icmp slt i64 %indvars.iv.next251, %303
  br i1 %304, label %.lr.ph217, label %._crit_edge218, !llvm.loop !25
}

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

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

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.abs.i32(i32, i1 immarg) #5

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

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

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #7

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 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
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 = { 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 #4 = { 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 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { 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 #7 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #8 = { 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 = !{!13, !6, i64 16}
!13 = !{!"_ZTS4Node", !6, i64 0, !6, i64 4, !6, i64 8, !6, i64 12, !6, i64 16, !6, i64 20, !6, i64 24}
!14 = !{!13, !6, i64 4}
!15 = !{!13, !6, i64 20}
!16 = !{!13, !6, i64 8}
!17 = !{!13, !6, i64 24}
!18 = !{!13, !6, i64 12}
!19 = distinct !{!19, !10}
!20 = distinct !{!20, !10}
!21 = distinct !{!21, !10}
!22 = !{!13, !6, i64 0}
!23 = distinct !{!23, !10}
!24 = distinct !{!24, !10}
!25 = distinct !{!25, !10}


; Effective O3 passes: BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass