; LLVM IR from tangjz/acm-icpc :: 51nod (1587)

; 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.Trie = type { [11 x i32], i32, i8 }

@e = external dso_local global [25001 x %struct.Trie], align 16
@d = external dso_local global i32, align 4
@num = external dso_local global [53 x i32], align 16
@tot = external dso_local global i32, align 4
@que = external dso_local global [25001 x i32], align 16
@L = external dso_local global i32, align 4
@R = external dso_local global i32, align 4
@f = external dso_local global [53 x [25001 x i32]], align 16
@ans = external dso_local global i32, align 4
@str = external dso_local global [1001 x i8], align 16
@buf = external dso_local global [53 x i8], align 16
@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z5solvev() #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 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 i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca i32, align 4
  store i32 0, ptr %1, align 4
  %21 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str, ptr noundef @str, ptr noundef @buf)
  %22 = call i64 @strlen(ptr noundef @buf) #5
  %23 = trunc i64 %22 to i32
  store i32 %23, ptr @d, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %2) #6
  store i32 0, ptr %2, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #6
  %24 = call i64 @strlen(ptr noundef @str) #5
  %25 = trunc i64 %24 to i32
  store i32 %25, ptr %3, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #6
  %26 = load i32, ptr @d, align 4, !tbaa !5
  %27 = ashr i32 %26, 1
  store i32 %27, ptr %4, align 4, !tbaa !5
  br label %28

28:                                               ; preds = %100, %0
  %29 = load i32, ptr %2, align 4, !tbaa !5
  %30 = load i32, ptr %3, align 4, !tbaa !5
  %31 = load i32, ptr %4, align 4, !tbaa !5
  %32 = sub nsw i32 %30, %31
  %33 = icmp sle i32 %29, %32
  br i1 %33, label %35, label %34

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

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

36:                                               ; preds = %92, %35
  %37 = load i32, ptr %7, align 4, !tbaa !5
  %38 = load i32, ptr %4, align 4, !tbaa !5
  %39 = icmp slt i32 %37, %38
  br i1 %39, label %41, label %40

40:                                               ; preds = %36
  store i32 5, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  br label %95

41:                                               ; preds = %36
  %42 = load i32, ptr %6, align 4, !tbaa !5
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %43
  %45 = getelementptr inbounds %struct.Trie, ptr %44, i32 0, i32 0
  %46 = load i32, ptr %2, align 4, !tbaa !5
  %47 = load i32, ptr %7, align 4, !tbaa !5
  %48 = add nsw i32 %46, %47
  %49 = sext i32 %48 to i64
  %50 = getelementptr inbounds [1001 x i8], ptr @str, i64 0, i64 %49
  %51 = load i8, ptr %50, align 1, !tbaa !9
  %52 = sext i8 %51 to i32
  %53 = sub nsw i32 %52, 48
  %54 = sext i32 %53 to i64
  %55 = getelementptr inbounds [11 x i32], ptr %45, i64 0, i64 %54
  %56 = load i32, ptr %55, align 4, !tbaa !5
  %57 = icmp ne i32 %56, 0
  br i1 %57, label %75, label %58

58:                                               ; preds = %41
  %59 = load i32, ptr @tot, align 4, !tbaa !5
  %60 = add nsw i32 %59, 1
  store i32 %60, ptr @tot, align 4, !tbaa !5
  %61 = load i32, ptr %6, align 4, !tbaa !5
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %62
  %64 = getelementptr inbounds %struct.Trie, ptr %63, i32 0, i32 0
  %65 = load i32, ptr %2, align 4, !tbaa !5
  %66 = load i32, ptr %7, align 4, !tbaa !5
  %67 = add nsw i32 %65, %66
  %68 = sext i32 %67 to i64
  %69 = getelementptr inbounds [1001 x i8], ptr @str, i64 0, i64 %68
  %70 = load i8, ptr %69, align 1, !tbaa !9
  %71 = sext i8 %70 to i32
  %72 = sub nsw i32 %71, 48
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds [11 x i32], ptr %64, i64 0, i64 %73
  store i32 %60, ptr %74, align 4, !tbaa !5
  store i32 %60, ptr %6, align 4, !tbaa !5
  br label %91

75:                                               ; preds = %41
  %76 = load i32, ptr %6, align 4, !tbaa !5
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %77
  %79 = getelementptr inbounds %struct.Trie, ptr %78, i32 0, i32 0
  %80 = load i32, ptr %2, align 4, !tbaa !5
  %81 = load i32, ptr %7, align 4, !tbaa !5
  %82 = add nsw i32 %80, %81
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds [1001 x i8], ptr @str, i64 0, i64 %83
  %85 = load i8, ptr %84, align 1, !tbaa !9
  %86 = sext i8 %85 to i32
  %87 = sub nsw i32 %86, 48
  %88 = sext i32 %87 to i64
  %89 = getelementptr inbounds [11 x i32], ptr %79, i64 0, i64 %88
  %90 = load i32, ptr %89, align 4, !tbaa !5
  store i32 %90, ptr %6, align 4, !tbaa !5
  br label %91

91:                                               ; preds = %75, %58
  br label %92

92:                                               ; preds = %91
  %93 = load i32, ptr %7, align 4, !tbaa !5
  %94 = add nsw i32 %93, 1
  store i32 %94, ptr %7, align 4, !tbaa !5
  br label %36, !llvm.loop !10

95:                                               ; preds = %40
  %96 = load i32, ptr %6, align 4, !tbaa !5
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %97
  %99 = getelementptr inbounds %struct.Trie, ptr %98, i32 0, i32 2
  store i8 1, ptr %99, align 4, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #6
  br label %100

100:                                              ; preds = %95
  %101 = load i32, ptr %2, align 4, !tbaa !5
  %102 = add nsw i32 %101, 1
  store i32 %102, ptr %2, align 4, !tbaa !5
  br label %28, !llvm.loop !15

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

104:                                              ; preds = %124, %103
  %105 = load i32, ptr %8, align 4, !tbaa !5
  %106 = icmp slt i32 %105, 10
  br i1 %106, label %108, label %107

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

108:                                              ; preds = %104
  %109 = load i32, ptr %8, align 4, !tbaa !5
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds [11 x i32], ptr @e, i64 0, i64 %110
  %112 = load i32, ptr %111, align 4, !tbaa !5
  %113 = icmp ne i32 %112, 0
  br i1 %113, label %114, label %123

114:                                              ; preds = %108
  %115 = load i32, ptr %8, align 4, !tbaa !5
  %116 = sext i32 %115 to i64
  %117 = getelementptr inbounds [11 x i32], ptr @e, i64 0, i64 %116
  %118 = load i32, ptr %117, align 4, !tbaa !5
  %119 = load i32, ptr @R, align 4, !tbaa !5
  %120 = add nsw i32 %119, 1
  store i32 %120, ptr @R, align 4, !tbaa !5
  %121 = sext i32 %119 to i64
  %122 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %121
  store i32 %118, ptr %122, align 4, !tbaa !5
  br label %123

123:                                              ; preds = %114, %108
  br label %124

124:                                              ; preds = %123
  %125 = load i32, ptr %8, align 4, !tbaa !5
  %126 = add nsw i32 %125, 1
  store i32 %126, ptr %8, align 4, !tbaa !5
  br label %104, !llvm.loop !16

127:                                              ; preds = %107
  br label %128

128:                                              ; preds = %228, %127
  %129 = load i32, ptr @L, align 4, !tbaa !5
  %130 = load i32, ptr @R, align 4, !tbaa !5
  %131 = icmp slt i32 %129, %130
  br i1 %131, label %132, label %229

132:                                              ; preds = %128
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  store i32 0, ptr %9, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #6
  %133 = load i32, ptr @L, align 4, !tbaa !5
  %134 = add nsw i32 %133, 1
  store i32 %134, ptr @L, align 4, !tbaa !5
  %135 = sext i32 %133 to i64
  %136 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %135
  %137 = load i32, ptr %136, align 4, !tbaa !5
  store i32 %137, ptr %10, align 4, !tbaa !5
  br label %138

138:                                              ; preds = %225, %132
  %139 = load i32, ptr %9, align 4, !tbaa !5
  %140 = icmp slt i32 %139, 10
  br i1 %140, label %142, label %141

141:                                              ; preds = %138
  store i32 13, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  br label %228

142:                                              ; preds = %138
  %143 = load i32, ptr %10, align 4, !tbaa !5
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %144
  %146 = getelementptr inbounds %struct.Trie, ptr %145, i32 0, i32 0
  %147 = load i32, ptr %9, align 4, !tbaa !5
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds [11 x i32], ptr %146, i64 0, i64 %148
  %150 = load i32, ptr %149, align 4, !tbaa !5
  %151 = icmp ne i32 %150, 0
  br i1 %151, label %153, label %152

152:                                              ; preds = %142
  br label %225

153:                                              ; preds = %142
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  %154 = load i32, ptr %10, align 4, !tbaa !5
  %155 = sext i32 %154 to i64
  %156 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %155
  %157 = getelementptr inbounds %struct.Trie, ptr %156, i32 0, i32 0
  %158 = load i32, ptr %9, align 4, !tbaa !5
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds [11 x i32], ptr %157, i64 0, i64 %159
  %161 = load i32, ptr %160, align 4, !tbaa !5
  store i32 %161, ptr %11, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #6
  %162 = load i32, ptr %10, align 4, !tbaa !5
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %163
  %165 = getelementptr inbounds %struct.Trie, ptr %164, i32 0, i32 1
  %166 = load i32, ptr %165, align 4, !tbaa !17
  store i32 %166, ptr %12, align 4, !tbaa !5
  %167 = load i32, ptr %11, align 4, !tbaa !5
  %168 = load i32, ptr @R, align 4, !tbaa !5
  %169 = add nsw i32 %168, 1
  store i32 %169, ptr @R, align 4, !tbaa !5
  %170 = sext i32 %168 to i64
  %171 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %170
  store i32 %167, ptr %171, align 4, !tbaa !5
  br label %172

172:                                              ; preds = %189, %153
  %173 = load i32, ptr %12, align 4, !tbaa !5
  %174 = icmp ne i32 %173, 0
  br i1 %174, label %175, label %186

175:                                              ; preds = %172
  %176 = load i32, ptr %12, align 4, !tbaa !5
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %177
  %179 = getelementptr inbounds %struct.Trie, ptr %178, i32 0, i32 0
  %180 = load i32, ptr %9, align 4, !tbaa !5
  %181 = sext i32 %180 to i64
  %182 = getelementptr inbounds [11 x i32], ptr %179, i64 0, i64 %181
  %183 = load i32, ptr %182, align 4, !tbaa !5
  %184 = icmp ne i32 %183, 0
  %185 = xor i1 %184, true
  br label %186

186:                                              ; preds = %175, %172
  %187 = phi i1 [ false, %172 ], [ %185, %175 ]
  br i1 %187, label %188, label %195

188:                                              ; preds = %186
  br label %189

189:                                              ; preds = %188
  %190 = load i32, ptr %12, align 4, !tbaa !5
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %191
  %193 = getelementptr inbounds %struct.Trie, ptr %192, i32 0, i32 1
  %194 = load i32, ptr %193, align 4, !tbaa !17
  store i32 %194, ptr %12, align 4, !tbaa !5
  br label %172, !llvm.loop !18

195:                                              ; preds = %186
  %196 = load i32, ptr %12, align 4, !tbaa !5
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %197
  %199 = getelementptr inbounds %struct.Trie, ptr %198, i32 0, i32 0
  %200 = load i32, ptr %9, align 4, !tbaa !5
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds [11 x i32], ptr %199, i64 0, i64 %201
  %203 = load i32, ptr %202, align 4, !tbaa !5
  store i32 %203, ptr %12, align 4, !tbaa !5
  %204 = load i32, ptr %11, align 4, !tbaa !5
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %205
  %207 = getelementptr inbounds %struct.Trie, ptr %206, i32 0, i32 1
  store i32 %203, ptr %207, align 4, !tbaa !17
  %208 = load i32, ptr %12, align 4, !tbaa !5
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %209
  %211 = getelementptr inbounds %struct.Trie, ptr %210, i32 0, i32 2
  %212 = load i8, ptr %211, align 4, !tbaa !12, !range !19, !noundef !20
  %213 = trunc i8 %212 to i1
  %214 = zext i1 %213 to i32
  %215 = load i32, ptr %11, align 4, !tbaa !5
  %216 = sext i32 %215 to i64
  %217 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %216
  %218 = getelementptr inbounds %struct.Trie, ptr %217, i32 0, i32 2
  %219 = load i8, ptr %218, align 4, !tbaa !12, !range !19, !noundef !20
  %220 = trunc i8 %219 to i1
  %221 = zext i1 %220 to i32
  %222 = or i32 %221, %214
  %223 = icmp ne i32 %222, 0
  %224 = zext i1 %223 to i8
  store i8 %224, ptr %218, align 4, !tbaa !12
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  br label %225

225:                                              ; preds = %195, %152
  %226 = load i32, ptr %9, align 4, !tbaa !5
  %227 = add nsw i32 %226, 1
  store i32 %227, ptr %9, align 4, !tbaa !5
  br label %138, !llvm.loop !21

228:                                              ; preds = %141
  br label %128, !llvm.loop !22

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

230:                                              ; preds = %247, %229
  %231 = load i32, ptr %13, align 4, !tbaa !5
  %232 = load i32, ptr @tot, align 4, !tbaa !5
  %233 = icmp sle i32 %231, %232
  br i1 %233, label %235, label %234

234:                                              ; preds = %230
  store i32 19, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #6
  br label %250

235:                                              ; preds = %230
  %236 = load i32, ptr %13, align 4, !tbaa !5
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %237
  %239 = getelementptr inbounds %struct.Trie, ptr %238, i32 0, i32 2
  %240 = load i8, ptr %239, align 4, !tbaa !12, !range !19, !noundef !20
  %241 = trunc i8 %240 to i1
  %242 = xor i1 %241, true
  %243 = zext i1 %242 to i32
  %244 = load i32, ptr %13, align 4, !tbaa !5
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds [25001 x i32], ptr @f, i64 0, i64 %245
  store i32 %243, ptr %246, align 4, !tbaa !5
  br label %247

247:                                              ; preds = %235
  %248 = load i32, ptr %13, align 4, !tbaa !5
  %249 = add nsw i32 %248, 1
  store i32 %249, ptr %13, align 4, !tbaa !5
  br label %230, !llvm.loop !23

250:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store i32 1, ptr %14, align 4, !tbaa !5
  br label %251

251:                                              ; preds = %344, %250
  %252 = load i32, ptr %14, align 4, !tbaa !5
  %253 = load i32, ptr @d, align 4, !tbaa !5
  %254 = icmp sle i32 %252, %253
  br i1 %254, label %256, label %255

255:                                              ; preds = %251
  store i32 22, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  br label %347

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

257:                                              ; preds = %340, %256
  %258 = load i32, ptr %15, align 4, !tbaa !5
  %259 = load i32, ptr @tot, align 4, !tbaa !5
  %260 = icmp sle i32 %258, %259
  br i1 %260, label %262, label %261

261:                                              ; preds = %257
  store i32 25, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #6
  br label %343

262:                                              ; preds = %257
  %263 = load i32, ptr %15, align 4, !tbaa !5
  %264 = sext i32 %263 to i64
  %265 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %264
  %266 = getelementptr inbounds %struct.Trie, ptr %265, i32 0, i32 2
  %267 = load i8, ptr %266, align 4, !tbaa !12, !range !19, !noundef !20
  %268 = trunc i8 %267 to i1
  br i1 %268, label %339, label %269

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

270:                                              ; preds = %335, %269
  %271 = load i32, ptr %16, align 4, !tbaa !5
  %272 = icmp slt i32 %271, 10
  br i1 %272, label %274, label %273

273:                                              ; preds = %270
  store i32 28, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #6
  br label %338

274:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  %275 = load i32, ptr %15, align 4, !tbaa !5
  store i32 %275, ptr %17, align 4, !tbaa !5
  br label %276

276:                                              ; preds = %293, %274
  %277 = load i32, ptr %17, align 4, !tbaa !5
  %278 = icmp ne i32 %277, 0
  br i1 %278, label %279, label %290

279:                                              ; preds = %276
  %280 = load i32, ptr %17, align 4, !tbaa !5
  %281 = sext i32 %280 to i64
  %282 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %281
  %283 = getelementptr inbounds %struct.Trie, ptr %282, i32 0, i32 0
  %284 = load i32, ptr %16, align 4, !tbaa !5
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds [11 x i32], ptr %283, i64 0, i64 %285
  %287 = load i32, ptr %286, align 4, !tbaa !5
  %288 = icmp ne i32 %287, 0
  %289 = xor i1 %288, true
  br label %290

290:                                              ; preds = %279, %276
  %291 = phi i1 [ false, %276 ], [ %289, %279 ]
  br i1 %291, label %292, label %299

292:                                              ; preds = %290
  br label %293

293:                                              ; preds = %292
  %294 = load i32, ptr %17, align 4, !tbaa !5
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %295
  %297 = getelementptr inbounds %struct.Trie, ptr %296, i32 0, i32 1
  %298 = load i32, ptr %297, align 4, !tbaa !17
  store i32 %298, ptr %17, align 4, !tbaa !5
  br label %276, !llvm.loop !24

299:                                              ; preds = %290
  %300 = load i32, ptr %17, align 4, !tbaa !5
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %301
  %303 = getelementptr inbounds %struct.Trie, ptr %302, i32 0, i32 0
  %304 = load i32, ptr %16, align 4, !tbaa !5
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds [11 x i32], ptr %303, i64 0, i64 %305
  %307 = load i32, ptr %306, align 4, !tbaa !5
  store i32 %307, ptr %17, align 4, !tbaa !5
  %308 = load i32, ptr %14, align 4, !tbaa !5
  %309 = sub nsw i32 %308, 1
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %310
  %312 = load i32, ptr %17, align 4, !tbaa !5
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds [25001 x i32], ptr %311, i64 0, i64 %313
  %315 = load i32, ptr %314, align 4, !tbaa !5
  %316 = load i32, ptr %14, align 4, !tbaa !5
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %317
  %319 = load i32, ptr %15, align 4, !tbaa !5
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds [25001 x i32], ptr %318, i64 0, i64 %320
  %322 = load i32, ptr %321, align 4, !tbaa !5
  %323 = add nsw i32 %322, %315
  store i32 %323, ptr %321, align 4, !tbaa !5
  %324 = icmp sge i32 %323, 1000000007
  br i1 %324, label %325, label %334

325:                                              ; preds = %299
  %326 = load i32, ptr %14, align 4, !tbaa !5
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %327
  %329 = load i32, ptr %15, align 4, !tbaa !5
  %330 = sext i32 %329 to i64
  %331 = getelementptr inbounds [25001 x i32], ptr %328, i64 0, i64 %330
  %332 = load i32, ptr %331, align 4, !tbaa !5
  %333 = sub nsw i32 %332, 1000000007
  store i32 %333, ptr %331, align 4, !tbaa !5
  br label %334

334:                                              ; preds = %325, %299
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %335

335:                                              ; preds = %334
  %336 = load i32, ptr %16, align 4, !tbaa !5
  %337 = add nsw i32 %336, 1
  store i32 %337, ptr %16, align 4, !tbaa !5
  br label %270, !llvm.loop !25

338:                                              ; preds = %273
  br label %339

339:                                              ; preds = %338, %262
  br label %340

340:                                              ; preds = %339
  %341 = load i32, ptr %15, align 4, !tbaa !5
  %342 = add nsw i32 %341, 1
  store i32 %342, ptr %15, align 4, !tbaa !5
  br label %257, !llvm.loop !26

343:                                              ; preds = %261
  br label %344

344:                                              ; preds = %343
  %345 = load i32, ptr %14, align 4, !tbaa !5
  %346 = add nsw i32 %345, 1
  store i32 %346, ptr %14, align 4, !tbaa !5
  br label %251, !llvm.loop !27

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

348:                                              ; preds = %366, %347
  %349 = load i32, ptr %18, align 4, !tbaa !5
  %350 = load i32, ptr @d, align 4, !tbaa !5
  %351 = icmp slt i32 %349, %350
  br i1 %351, label %353, label %352

352:                                              ; preds = %348
  store i32 34, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #6
  br label %369

353:                                              ; preds = %348
  %354 = load i32, ptr @d, align 4, !tbaa !5
  %355 = sub nsw i32 %354, 1
  %356 = load i32, ptr %18, align 4, !tbaa !5
  %357 = sub nsw i32 %355, %356
  %358 = sext i32 %357 to i64
  %359 = getelementptr inbounds [53 x i8], ptr @buf, i64 0, i64 %358
  %360 = load i8, ptr %359, align 1, !tbaa !9
  %361 = sext i8 %360 to i32
  %362 = sub nsw i32 %361, 48
  %363 = load i32, ptr %18, align 4, !tbaa !5
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %364
  store i32 %362, ptr %365, align 4, !tbaa !5
  br label %366

366:                                              ; preds = %353
  %367 = load i32, ptr %18, align 4, !tbaa !5
  %368 = add nsw i32 %367, 1
  store i32 %368, ptr %18, align 4, !tbaa !5
  br label %348, !llvm.loop !28

369:                                              ; preds = %352
  %370 = call noundef i32 @_Z5solvev()
  %371 = sub nsw i32 1000000007, %370
  store i32 %371, ptr @ans, align 4, !tbaa !5
  %372 = call i32 (ptr, ...) @__isoc99_scanf(ptr noundef @.str.1, ptr noundef @buf)
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #6
  store i32 0, ptr %19, align 4, !tbaa !5
  br label %373

373:                                              ; preds = %391, %369
  %374 = load i32, ptr %19, align 4, !tbaa !5
  %375 = load i32, ptr @d, align 4, !tbaa !5
  %376 = icmp slt i32 %374, %375
  br i1 %376, label %378, label %377

377:                                              ; preds = %373
  store i32 37, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #6
  br label %394

378:                                              ; preds = %373
  %379 = load i32, ptr @d, align 4, !tbaa !5
  %380 = sub nsw i32 %379, 1
  %381 = load i32, ptr %19, align 4, !tbaa !5
  %382 = sub nsw i32 %380, %381
  %383 = sext i32 %382 to i64
  %384 = getelementptr inbounds [53 x i8], ptr @buf, i64 0, i64 %383
  %385 = load i8, ptr %384, align 1, !tbaa !9
  %386 = sext i8 %385 to i32
  %387 = sub nsw i32 %386, 48
  %388 = load i32, ptr %19, align 4, !tbaa !5
  %389 = sext i32 %388 to i64
  %390 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %389
  store i32 %387, ptr %390, align 4, !tbaa !5
  br label %391

391:                                              ; preds = %378
  %392 = load i32, ptr %19, align 4, !tbaa !5
  %393 = add nsw i32 %392, 1
  store i32 %393, ptr %19, align 4, !tbaa !5
  br label %373, !llvm.loop !29

394:                                              ; preds = %377
  %395 = load i32, ptr @num, align 16, !tbaa !5
  %396 = add nsw i32 %395, 1
  store i32 %396, ptr @num, align 16, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #6
  store i32 0, ptr %20, align 4, !tbaa !5
  br label %397

397:                                              ; preds = %422, %394
  %398 = load i32, ptr %20, align 4, !tbaa !5
  %399 = load i32, ptr @d, align 4, !tbaa !5
  %400 = icmp slt i32 %398, %399
  br i1 %400, label %401, label %407

401:                                              ; preds = %397
  %402 = load i32, ptr %20, align 4, !tbaa !5
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %403
  %405 = load i32, ptr %404, align 4, !tbaa !5
  %406 = icmp sge i32 %405, 10
  br label %407

407:                                              ; preds = %401, %397
  %408 = phi i1 [ false, %397 ], [ %406, %401 ]
  br i1 %408, label %410, label %409

409:                                              ; preds = %407
  store i32 40, ptr %5, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #6
  br label %425

410:                                              ; preds = %407
  %411 = load i32, ptr %20, align 4, !tbaa !5
  %412 = sext i32 %411 to i64
  %413 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %412
  %414 = load i32, ptr %413, align 4, !tbaa !5
  %415 = sub nsw i32 %414, 10
  store i32 %415, ptr %413, align 4, !tbaa !5
  %416 = load i32, ptr %20, align 4, !tbaa !5
  %417 = add nsw i32 %416, 1
  %418 = sext i32 %417 to i64
  %419 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %418
  %420 = load i32, ptr %419, align 4, !tbaa !5
  %421 = add nsw i32 %420, 1
  store i32 %421, ptr %419, align 4, !tbaa !5
  br label %422

422:                                              ; preds = %410
  %423 = load i32, ptr %20, align 4, !tbaa !5
  %424 = add nsw i32 %423, 1
  store i32 %424, ptr %20, align 4, !tbaa !5
  br label %397, !llvm.loop !30

425:                                              ; preds = %409
  %426 = load i32, ptr @d, align 4, !tbaa !5
  %427 = sext i32 %426 to i64
  %428 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %427
  %429 = load i32, ptr %428, align 4, !tbaa !5
  %430 = icmp ne i32 %429, 0
  br i1 %430, label %431, label %434

431:                                              ; preds = %425
  %432 = load i32, ptr @d, align 4, !tbaa !5
  %433 = add nsw i32 %432, 1
  store i32 %433, ptr @d, align 4, !tbaa !5
  br label %434

434:                                              ; preds = %431, %425
  %435 = call noundef i32 @_Z5solvev()
  %436 = load i32, ptr @ans, align 4, !tbaa !5
  %437 = add nsw i32 %436, %435
  store i32 %437, ptr @ans, align 4, !tbaa !5
  %438 = icmp sge i32 %437, 1000000007
  br i1 %438, label %439, label %442

439:                                              ; preds = %434
  %440 = load i32, ptr @ans, align 4, !tbaa !5
  %441 = sub nsw i32 %440, 1000000007
  store i32 %441, ptr @ans, align 4, !tbaa !5
  br label %442

442:                                              ; preds = %439, %434
  %443 = load i32, ptr @ans, align 4, !tbaa !5
  %444 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, i32 noundef %443)
  ret i32 0
}

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

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

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

attributes #0 = { 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 #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 = { 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 #5 = { nounwind willreturn memory(read) }
attributes #6 = { nounwind }

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

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

%struct.Trie = type { [11 x i32], i32, i8 }

@e = external dso_local local_unnamed_addr global [25001 x %struct.Trie], align 16
@d = external dso_local local_unnamed_addr global i32, align 4
@num = external dso_local local_unnamed_addr global [53 x i32], align 16
@tot = external dso_local local_unnamed_addr global i32, align 4
@que = external dso_local local_unnamed_addr global [25001 x i32], align 16
@L = external dso_local local_unnamed_addr global i32, align 4
@R = external dso_local local_unnamed_addr global i32, align 4
@f = external dso_local local_unnamed_addr global [53 x [25001 x i32]], align 16
@ans = external dso_local local_unnamed_addr global i32, align 4
@str = external dso_local global [1001 x i8], align 16
@buf = external dso_local global [53 x i8], align 16
@.str = external hidden unnamed_addr constant [5 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_Z5solvev() local_unnamed_addr #0

; Function Attrs: mustprogress norecurse nounwind uwtable
define dso_local noundef i32 @main() local_unnamed_addr #1 {
  %1 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str, ptr noundef nonnull @str, ptr noundef nonnull @buf)
  %2 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) @buf) #4
  %3 = trunc i64 %2 to i32
  store i32 %3, ptr @d, align 4, !tbaa !5
  %4 = tail call i64 @strlen(ptr noundef nonnull dereferenceable(1) @str) #4
  %5 = trunc i64 %4 to i32
  %6 = ashr i32 %3, 1
  %.not131 = icmp sgt i32 %6, %5
  br i1 %.not131, label %.preheader121, label %.preheader122.lr.ph

.preheader122.lr.ph:                              ; preds = %0
  %7 = icmp sgt i32 %6, 0
  br i1 %7, label %.preheader122.us.preheader, label %.preheader122.lr.ph.split

.preheader122.us.preheader:                       ; preds = %.preheader122.lr.ph
  %tot.promoted126 = load i32, ptr @tot, align 4, !tbaa !5
  %8 = add i32 %5, 1
  %9 = sub i32 %8, %6
  %wide.trip.count186 = zext i32 %9 to i64
  %wide.trip.count = zext nneg i32 %6 to i64
  br label %.preheader122.us

.preheader122.us:                                 ; preds = %.preheader122.us.preheader, %._crit_edge.us
  %indvars.iv183 = phi i64 [ 0, %.preheader122.us.preheader ], [ %indvars.iv.next184, %._crit_edge.us ]
  %tot.promoted130132.us = phi i32 [ %tot.promoted126, %.preheader122.us.preheader ], [ %tot.promoted128.us, %._crit_edge.us ]
  br label %10

10:                                               ; preds = %.preheader122.us, %23
  %indvars.iv = phi i64 [ 0, %.preheader122.us ], [ %indvars.iv.next, %23 ]
  %tot.promoted129.us = phi i32 [ %tot.promoted130132.us, %.preheader122.us ], [ %tot.promoted128.us, %23 ]
  %.091124.us = phi i32 [ 0, %.preheader122.us ], [ %.1.us, %23 ]
  %11 = phi i32 [ %tot.promoted130132.us, %.preheader122.us ], [ %24, %23 ]
  %12 = sext i32 %.091124.us to i64
  %13 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %12
  %14 = add nuw nsw i64 %indvars.iv, %indvars.iv183
  %15 = getelementptr inbounds [1001 x i8], ptr @str, i64 0, i64 %14
  %16 = load i8, ptr %15, align 1, !tbaa !9
  %17 = sext i8 %16 to i64
  %18 = add nsw i64 %17, -48
  %19 = getelementptr inbounds [11 x i32], ptr %13, i64 0, i64 %18
  %20 = load i32, ptr %19, align 4, !tbaa !5
  %.not112.us = icmp eq i32 %20, 0
  br i1 %.not112.us, label %21, label %23

21:                                               ; preds = %10
  %22 = add nsw i32 %11, 1
  store i32 %22, ptr @tot, align 4, !tbaa !5
  store i32 %22, ptr %19, align 4, !tbaa !5
  br label %23

23:                                               ; preds = %21, %10
  %tot.promoted128.us = phi i32 [ %22, %21 ], [ %tot.promoted129.us, %10 ]
  %24 = phi i32 [ %22, %21 ], [ %11, %10 ]
  %.1.us = phi i32 [ %22, %21 ], [ %20, %10 ]
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.us, label %10, !llvm.loop !10

._crit_edge.us:                                   ; preds = %23
  %25 = sext i32 %.1.us to i64
  %26 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %25, i32 2
  store i8 1, ptr %26, align 4, !tbaa !12
  %indvars.iv.next184 = add nuw nsw i64 %indvars.iv183, 1
  %exitcond187.not = icmp eq i64 %indvars.iv.next184, %wide.trip.count186
  br i1 %exitcond187.not, label %.preheader121, label %.preheader122.us, !llvm.loop !15

.preheader122.lr.ph.split:                        ; preds = %.preheader122.lr.ph
  store i8 1, ptr getelementptr inbounds (i8, ptr @e, i64 48), align 16, !tbaa !12
  br label %.preheader121

.preheader121:                                    ; preds = %._crit_edge.us, %.preheader122.lr.ph.split, %0
  %R.promoted = load i32, ptr @R, align 4, !tbaa !5
  %27 = load i32, ptr @e, align 16, !tbaa !5
  %.not111 = icmp eq i32 %27, 0
  br i1 %.not111, label %33, label %29

.lr.ph146.preheader:                              ; preds = %.preheader120
  %28 = sext i32 %L.promoted to i64
  br label %.lr.ph146

29:                                               ; preds = %.preheader121
  %30 = add nsw i32 %R.promoted, 1
  store i32 %30, ptr @R, align 4, !tbaa !5
  %31 = sext i32 %R.promoted to i64
  %32 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %31
  store i32 %27, ptr %32, align 4, !tbaa !5
  br label %33

33:                                               ; preds = %.preheader121, %29
  %34 = phi i32 [ %R.promoted, %.preheader121 ], [ %30, %29 ]
  %35 = load i32, ptr getelementptr inbounds (i8, ptr @e, i64 4), align 4, !tbaa !5
  %.not111.1 = icmp eq i32 %35, 0
  br i1 %.not111.1, label %40, label %36

36:                                               ; preds = %33
  %37 = add nsw i32 %34, 1
  store i32 %37, ptr @R, align 4, !tbaa !5
  %38 = sext i32 %34 to i64
  %39 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %38
  store i32 %35, ptr %39, align 4, !tbaa !5
  br label %40

40:                                               ; preds = %36, %33
  %41 = phi i32 [ %34, %33 ], [ %37, %36 ]
  %42 = load i32, ptr getelementptr inbounds (i8, ptr @e, i64 8), align 8, !tbaa !5
  %.not111.2 = icmp eq i32 %42, 0
  br i1 %.not111.2, label %47, label %43

43:                                               ; preds = %40
  %44 = add nsw i32 %41, 1
  store i32 %44, ptr @R, align 4, !tbaa !5
  %45 = sext i32 %41 to i64
  %46 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %45
  store i32 %42, ptr %46, align 4, !tbaa !5
  br label %47

47:                                               ; preds = %43, %40
  %48 = phi i32 [ %41, %40 ], [ %44, %43 ]
  %49 = load i32, ptr getelementptr inbounds (i8, ptr @e, i64 12), align 4, !tbaa !5
  %.not111.3 = icmp eq i32 %49, 0
  br i1 %.not111.3, label %54, label %50

50:                                               ; preds = %47
  %51 = add nsw i32 %48, 1
  store i32 %51, ptr @R, align 4, !tbaa !5
  %52 = sext i32 %48 to i64
  %53 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %52
  store i32 %49, ptr %53, align 4, !tbaa !5
  br label %54

54:                                               ; preds = %50, %47
  %55 = phi i32 [ %48, %47 ], [ %51, %50 ]
  %56 = load i32, ptr getelementptr inbounds (i8, ptr @e, i64 16), align 16, !tbaa !5
  %.not111.4 = icmp eq i32 %56, 0
  br i1 %.not111.4, label %61, label %57

57:                                               ; preds = %54
  %58 = add nsw i32 %55, 1
  store i32 %58, ptr @R, align 4, !tbaa !5
  %59 = sext i32 %55 to i64
  %60 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %59
  store i32 %56, ptr %60, align 4, !tbaa !5
  br label %61

61:                                               ; preds = %57, %54
  %62 = phi i32 [ %55, %54 ], [ %58, %57 ]
  %63 = load i32, ptr getelementptr inbounds (i8, ptr @e, i64 20), align 4, !tbaa !5
  %.not111.5 = icmp eq i32 %63, 0
  br i1 %.not111.5, label %68, label %64

64:                                               ; preds = %61
  %65 = add nsw i32 %62, 1
  store i32 %65, ptr @R, align 4, !tbaa !5
  %66 = sext i32 %62 to i64
  %67 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %66
  store i32 %63, ptr %67, align 4, !tbaa !5
  br label %68

68:                                               ; preds = %64, %61
  %69 = phi i32 [ %62, %61 ], [ %65, %64 ]
  %70 = load i32, ptr getelementptr inbounds (i8, ptr @e, i64 24), align 8, !tbaa !5
  %.not111.6 = icmp eq i32 %70, 0
  br i1 %.not111.6, label %75, label %71

71:                                               ; preds = %68
  %72 = add nsw i32 %69, 1
  store i32 %72, ptr @R, align 4, !tbaa !5
  %73 = sext i32 %69 to i64
  %74 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %73
  store i32 %70, ptr %74, align 4, !tbaa !5
  br label %75

75:                                               ; preds = %71, %68
  %76 = phi i32 [ %69, %68 ], [ %72, %71 ]
  %77 = load i32, ptr getelementptr inbounds (i8, ptr @e, i64 28), align 4, !tbaa !5
  %.not111.7 = icmp eq i32 %77, 0
  br i1 %.not111.7, label %82, label %78

78:                                               ; preds = %75
  %79 = add nsw i32 %76, 1
  store i32 %79, ptr @R, align 4, !tbaa !5
  %80 = sext i32 %76 to i64
  %81 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %80
  store i32 %77, ptr %81, align 4, !tbaa !5
  br label %82

82:                                               ; preds = %78, %75
  %83 = phi i32 [ %76, %75 ], [ %79, %78 ]
  %84 = load i32, ptr getelementptr inbounds (i8, ptr @e, i64 32), align 16, !tbaa !5
  %.not111.8 = icmp eq i32 %84, 0
  br i1 %.not111.8, label %89, label %85

85:                                               ; preds = %82
  %86 = add nsw i32 %83, 1
  store i32 %86, ptr @R, align 4, !tbaa !5
  %87 = sext i32 %83 to i64
  %88 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %87
  store i32 %84, ptr %88, align 4, !tbaa !5
  br label %89

89:                                               ; preds = %85, %82
  %90 = phi i32 [ %83, %82 ], [ %86, %85 ]
  %91 = load i32, ptr getelementptr inbounds (i8, ptr @e, i64 36), align 4, !tbaa !5
  %.not111.9 = icmp eq i32 %91, 0
  br i1 %.not111.9, label %.preheader120, label %92

92:                                               ; preds = %89
  %93 = add nsw i32 %90, 1
  store i32 %93, ptr @R, align 4, !tbaa !5
  %94 = sext i32 %90 to i64
  %95 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %94
  store i32 %91, ptr %95, align 4, !tbaa !5
  br label %.preheader120

.preheader120:                                    ; preds = %92, %89
  %R.promoted141 = phi i32 [ %93, %92 ], [ %90, %89 ]
  %L.promoted = load i32, ptr @L, align 4, !tbaa !5
  %96 = icmp slt i32 %L.promoted, %R.promoted141
  br i1 %96, label %.lr.ph146.preheader, label %.preheader118

.loopexit119:                                     ; preds = %174
  %indvars.iv.next197 = add nsw i64 %indvars.iv196, 1
  %97 = sext i32 %R.promoted139142 to i64
  %98 = icmp slt i64 %indvars.iv.next197, %97
  br i1 %98, label %.lr.ph146, label %..preheader118_crit_edge, !llvm.loop !16

..preheader118_crit_edge:                         ; preds = %.loopexit119
  %99 = trunc nsw i64 %indvars.iv.next197 to i32
  store i32 %99, ptr @L, align 4, !tbaa !5
  br label %.preheader118

.preheader118:                                    ; preds = %..preheader118_crit_edge, %.preheader120
  %100 = load i32, ptr @tot, align 4, !tbaa !5
  %.not101148 = icmp slt i32 %100, 0
  br i1 %.not101148, label %.preheader117.thread, label %.lr.ph150.preheader

.lr.ph150.preheader:                              ; preds = %.preheader118
  %101 = add nuw i32 %100, 1
  %wide.trip.count202 = zext i32 %101 to i64
  %min.iters.check = icmp ult i32 %100, 7
  br i1 %min.iters.check, label %.lr.ph150.preheader286, label %vector.ph

.lr.ph150.preheader286:                           ; preds = %middle.block, %.lr.ph150.preheader
  %indvars.iv199.ph = phi i64 [ 0, %.lr.ph150.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph150

vector.ph:                                        ; preds = %.lr.ph150.preheader
  %n.vec = and i64 %wide.trip.count202, 4294967288
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %102 = or disjoint i64 %index, 1
  %103 = or disjoint i64 %index, 2
  %104 = or disjoint i64 %index, 3
  %105 = or disjoint i64 %index, 4
  %106 = or disjoint i64 %index, 5
  %107 = or disjoint i64 %index, 6
  %108 = or disjoint i64 %index, 7
  %109 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %index, i32 2
  %110 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %102, i32 2
  %111 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %103, i32 2
  %112 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %104, i32 2
  %113 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %105, i32 2
  %114 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %106, i32 2
  %115 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %107, i32 2
  %116 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %108, i32 2
  %117 = load i8, ptr %109, align 16, !tbaa !12, !range !17, !noundef !18
  %118 = load i8, ptr %110, align 4, !tbaa !12, !range !17, !noundef !18
  %119 = load i8, ptr %111, align 8, !tbaa !12, !range !17, !noundef !18
  %120 = load i8, ptr %112, align 4, !tbaa !12, !range !17, !noundef !18
  %121 = insertelement <4 x i8> poison, i8 %117, i64 0
  %122 = insertelement <4 x i8> %121, i8 %118, i64 1
  %123 = insertelement <4 x i8> %122, i8 %119, i64 2
  %124 = insertelement <4 x i8> %123, i8 %120, i64 3
  %125 = load i8, ptr %113, align 16, !tbaa !12, !range !17, !noundef !18
  %126 = load i8, ptr %114, align 4, !tbaa !12, !range !17, !noundef !18
  %127 = load i8, ptr %115, align 8, !tbaa !12, !range !17, !noundef !18
  %128 = load i8, ptr %116, align 4, !tbaa !12, !range !17, !noundef !18
  %129 = insertelement <4 x i8> poison, i8 %125, i64 0
  %130 = insertelement <4 x i8> %129, i8 %126, i64 1
  %131 = insertelement <4 x i8> %130, i8 %127, i64 2
  %132 = insertelement <4 x i8> %131, i8 %128, i64 3
  %133 = xor <4 x i8> %124, <i8 1, i8 1, i8 1, i8 1>
  %134 = xor <4 x i8> %132, <i8 1, i8 1, i8 1, i8 1>
  %135 = zext nneg <4 x i8> %133 to <4 x i32>
  %136 = zext nneg <4 x i8> %134 to <4 x i32>
  %137 = getelementptr inbounds [25001 x i32], ptr @f, i64 0, i64 %index
  %138 = getelementptr inbounds i8, ptr %137, i64 16
  store <4 x i32> %135, ptr %137, align 16, !tbaa !5
  store <4 x i32> %136, ptr %138, align 16, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %139 = icmp eq i64 %index.next, %n.vec
  br i1 %139, label %middle.block, label %vector.body, !llvm.loop !19

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count202
  br i1 %cmp.n, label %.preheader117, label %.lr.ph150.preheader286

.lr.ph146:                                        ; preds = %.lr.ph146.preheader, %.loopexit119
  %indvars.iv196 = phi i64 [ %28, %.lr.ph146.preheader ], [ %indvars.iv.next197, %.loopexit119 ]
  %R.promoted139144145 = phi i32 [ %R.promoted141, %.lr.ph146.preheader ], [ %R.promoted139142, %.loopexit119 ]
  %140 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %indvars.iv196
  %141 = load i32, ptr %140, align 4, !tbaa !5
  %142 = sext i32 %141 to i64
  %143 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %142
  %144 = getelementptr inbounds i8, ptr %143, i64 44
  br label %145

145:                                              ; preds = %.lr.ph146, %174
  %indvars.iv192 = phi i64 [ 0, %.lr.ph146 ], [ %indvars.iv.next193, %174 ]
  %R.promoted139143 = phi i32 [ %R.promoted139144145, %.lr.ph146 ], [ %R.promoted139142, %174 ]
  %146 = phi i32 [ %R.promoted139144145, %.lr.ph146 ], [ %175, %174 ]
  %147 = getelementptr inbounds [11 x i32], ptr %143, i64 0, i64 %indvars.iv192
  %148 = load i32, ptr %147, align 4, !tbaa !5
  %.not108 = icmp eq i32 %148, 0
  br i1 %.not108, label %174, label %149

149:                                              ; preds = %145
  %150 = load i32, ptr %144, align 4, !tbaa !22
  %151 = add nsw i32 %146, 1
  store i32 %151, ptr @R, align 4, !tbaa !5
  %152 = sext i32 %146 to i64
  %153 = getelementptr inbounds [25001 x i32], ptr @que, i64 0, i64 %152
  store i32 %148, ptr %153, align 4, !tbaa !5
  %.not109135 = icmp eq i32 %150, 0
  br i1 %.not109135, label %.critedge, label %.lr.ph

.lr.ph:                                           ; preds = %149, %158
  %.086136 = phi i32 [ %160, %158 ], [ %150, %149 ]
  %154 = sext i32 %.086136 to i64
  %155 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %154
  %156 = getelementptr inbounds [11 x i32], ptr %155, i64 0, i64 %indvars.iv192
  %157 = load i32, ptr %156, align 4, !tbaa !5
  %.not110 = icmp eq i32 %157, 0
  br i1 %.not110, label %158, label %.critedge

158:                                              ; preds = %.lr.ph
  %159 = getelementptr inbounds i8, ptr %155, i64 44
  %160 = load i32, ptr %159, align 4, !tbaa !22
  %.not109 = icmp eq i32 %160, 0
  br i1 %.not109, label %.critedge, label %.lr.ph, !llvm.loop !23

.critedge:                                        ; preds = %.lr.ph, %158, %149
  %.086.lcssa = phi i32 [ 0, %149 ], [ 0, %158 ], [ %.086136, %.lr.ph ]
  %161 = sext i32 %.086.lcssa to i64
  %162 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %161
  %163 = getelementptr inbounds [11 x i32], ptr %162, i64 0, i64 %indvars.iv192
  %164 = load i32, ptr %163, align 4, !tbaa !5
  %165 = sext i32 %148 to i64
  %166 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %165
  %167 = getelementptr inbounds i8, ptr %166, i64 44
  store i32 %164, ptr %167, align 4, !tbaa !22
  %168 = sext i32 %164 to i64
  %169 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %168, i32 2
  %170 = load i8, ptr %169, align 4, !tbaa !12, !range !17, !noundef !18
  %171 = getelementptr inbounds i8, ptr %166, i64 48
  %172 = load i8, ptr %171, align 4, !tbaa !12, !range !17, !noundef !18
  %173 = or i8 %172, %170
  store i8 %173, ptr %171, align 4, !tbaa !12
  br label %174

174:                                              ; preds = %145, %.critedge
  %R.promoted139142 = phi i32 [ %R.promoted139143, %145 ], [ %151, %.critedge ]
  %175 = phi i32 [ %146, %145 ], [ %151, %.critedge ]
  %indvars.iv.next193 = add nuw nsw i64 %indvars.iv192, 1
  %exitcond195.not = icmp eq i64 %indvars.iv.next193, 10
  br i1 %exitcond195.not, label %.loopexit119, label %145, !llvm.loop !24

.preheader117:                                    ; preds = %.lr.ph150, %middle.block
  %.not102165 = icmp slt i32 %3, 1
  br i1 %.not102165, label %._crit_edge169, label %.preheader116.lr.ph

.preheader117.thread:                             ; preds = %.preheader118
  %.not102165247 = icmp slt i32 %3, 1
  br i1 %.not102165247, label %._crit_edge169, label %.lr.ph168.preheader

.preheader116.lr.ph:                              ; preds = %.preheader117
  br i1 %.not101148, label %.lr.ph168.preheader, label %.preheader116.preheader

.preheader116.preheader:                          ; preds = %.preheader116.lr.ph
  %176 = add nuw i32 %100, 1
  %177 = add nuw nsw i64 %2, 1
  %wide.trip.count220 = and i64 %177, 4294967295
  %wide.trip.count215 = zext i32 %176 to i64
  %.pre = load i32, ptr @e, align 16
  %178 = sext i32 %.pre to i64
  %179 = sext i32 %35 to i64
  %180 = sext i32 %42 to i64
  %181 = sext i32 %49 to i64
  %182 = sext i32 %56 to i64
  %183 = sext i32 %63 to i64
  %184 = sext i32 %70 to i64
  %185 = sext i32 %77 to i64
  %186 = sext i32 %84 to i64
  br label %.preheader116

.lr.ph150:                                        ; preds = %.lr.ph150.preheader286, %.lr.ph150
  %indvars.iv199 = phi i64 [ %indvars.iv.next200, %.lr.ph150 ], [ %indvars.iv199.ph, %.lr.ph150.preheader286 ]
  %187 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %indvars.iv199, i32 2
  %188 = load i8, ptr %187, align 4, !tbaa !12, !range !17, !noundef !18
  %189 = xor i8 %188, 1
  %190 = zext nneg i8 %189 to i32
  %191 = getelementptr inbounds [25001 x i32], ptr @f, i64 0, i64 %indvars.iv199
  store i32 %190, ptr %191, align 4, !tbaa !5
  %indvars.iv.next200 = add nuw nsw i64 %indvars.iv199, 1
  %exitcond203.not = icmp eq i64 %indvars.iv.next200, %wide.trip.count202
  br i1 %exitcond203.not, label %.preheader117, label %.lr.ph150, !llvm.loop !25

.preheader116:                                    ; preds = %.preheader116.preheader, %._crit_edge
  %indvars.iv217 = phi i64 [ 1, %.preheader116.preheader ], [ %indvars.iv.next218, %._crit_edge ]
  %192 = add nsw i64 %indvars.iv217, -1
  %193 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %178
  %194 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %179
  %195 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %180
  %196 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %181
  %197 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %182
  %198 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %183
  %199 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %184
  %200 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %185
  %201 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %186
  br label %215

.lr.ph168.preheader:                              ; preds = %._crit_edge, %.preheader117.thread, %.preheader116.lr.ph
  %202 = and i64 %2, 2147483647
  %wide.trip.count225 = and i64 %2, 2147483647
  %min.iters.check258 = icmp ult i64 %wide.trip.count225, 8
  br i1 %min.iters.check258, label %.lr.ph168.preheader285, label %vector.ph259

.lr.ph168.preheader285:                           ; preds = %middle.block256, %.lr.ph168.preheader
  %indvars.iv222.ph = phi i64 [ 0, %.lr.ph168.preheader ], [ %n.vec261, %middle.block256 ]
  br label %.lr.ph168

vector.ph259:                                     ; preds = %.lr.ph168.preheader
  %n.mod.vf260 = and i64 %2, 7
  %n.vec261 = sub nsw i64 %wide.trip.count225, %n.mod.vf260
  br label %vector.body263

vector.body263:                                   ; preds = %vector.body263, %vector.ph259
  %index264 = phi i64 [ 0, %vector.ph259 ], [ %index.next267, %vector.body263 ]
  %203 = xor i64 %index264, -1
  %204 = add nsw i64 %202, %203
  %205 = getelementptr inbounds [53 x i8], ptr @buf, i64 0, i64 %204
  %206 = getelementptr inbounds i8, ptr %205, i64 -3
  %207 = getelementptr inbounds i8, ptr %205, i64 -7
  %wide.load = load <4 x i8>, ptr %206, align 1, !tbaa !9
  %reverse = shufflevector <4 x i8> %wide.load, <4 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %wide.load265 = load <4 x i8>, ptr %207, align 1, !tbaa !9
  %reverse266 = shufflevector <4 x i8> %wide.load265, <4 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %208 = sext <4 x i8> %reverse to <4 x i32>
  %209 = sext <4 x i8> %reverse266 to <4 x i32>
  %210 = add nsw <4 x i32> %208, <i32 -48, i32 -48, i32 -48, i32 -48>
  %211 = add nsw <4 x i32> %209, <i32 -48, i32 -48, i32 -48, i32 -48>
  %212 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %index264
  %213 = getelementptr inbounds i8, ptr %212, i64 16
  store <4 x i32> %210, ptr %212, align 16, !tbaa !5
  store <4 x i32> %211, ptr %213, align 16, !tbaa !5
  %index.next267 = add nuw i64 %index264, 8
  %214 = icmp eq i64 %index.next267, %n.vec261
  br i1 %214, label %middle.block256, label %vector.body263, !llvm.loop !26

middle.block256:                                  ; preds = %vector.body263
  %cmp.n268 = icmp eq i64 %n.mod.vf260, 0
  br i1 %cmp.n268, label %._crit_edge169, label %.lr.ph168.preheader285

._crit_edge:                                      ; preds = %.loopexit
  %indvars.iv.next218 = add nuw nsw i64 %indvars.iv217, 1
  %exitcond221.not = icmp eq i64 %indvars.iv.next218, %wide.trip.count220
  br i1 %exitcond221.not, label %.lr.ph168.preheader, label %.preheader116, !llvm.loop !27

215:                                              ; preds = %.preheader116, %.loopexit
  %indvars.iv212 = phi i64 [ 0, %.preheader116 ], [ %indvars.iv.next213, %.loopexit ]
  %216 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %indvars.iv212, i32 2
  %217 = load i8, ptr %216, align 4, !tbaa !12, !range !17, !noundef !18
  %218 = trunc nuw i8 %217 to i1
  br i1 %218, label %.loopexit, label %.preheader115

.preheader115:                                    ; preds = %215
  %.not105152 = icmp eq i64 %indvars.iv212, 0
  %219 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %indvars.iv217, i64 %indvars.iv212
  %.promoted = load i32, ptr %219, align 4, !tbaa !5
  br i1 %.not105152, label %.preheader115.split.us, label %.preheader114.preheader

.preheader114.preheader:                          ; preds = %.preheader115
  %220 = trunc nuw nsw i64 %indvars.iv212 to i32
  br label %257

.preheader115.split.us:                           ; preds = %.preheader115
  %221 = load i32, ptr %193, align 4, !tbaa !5
  %222 = add nsw i32 %.promoted, %221
  %223 = icmp sgt i32 %222, 1000000006
  %224 = add nsw i32 %222, -1000000007
  %spec.select.us = select i1 %223, i32 %224, i32 %222
  store i32 %spec.select.us, ptr %219, align 4, !tbaa !5
  %225 = load i32, ptr %194, align 4, !tbaa !5
  %226 = add nsw i32 %spec.select.us, %225
  %227 = icmp sgt i32 %226, 1000000006
  %228 = add nsw i32 %226, -1000000007
  %spec.select.us.1 = select i1 %227, i32 %228, i32 %226
  store i32 %spec.select.us.1, ptr %219, align 4, !tbaa !5
  %229 = load i32, ptr %195, align 4, !tbaa !5
  %230 = add nsw i32 %spec.select.us.1, %229
  %231 = icmp sgt i32 %230, 1000000006
  %232 = add nsw i32 %230, -1000000007
  %spec.select.us.2 = select i1 %231, i32 %232, i32 %230
  store i32 %spec.select.us.2, ptr %219, align 4, !tbaa !5
  %233 = load i32, ptr %196, align 4, !tbaa !5
  %234 = add nsw i32 %spec.select.us.2, %233
  %235 = icmp sgt i32 %234, 1000000006
  %236 = add nsw i32 %234, -1000000007
  %spec.select.us.3 = select i1 %235, i32 %236, i32 %234
  store i32 %spec.select.us.3, ptr %219, align 4, !tbaa !5
  %237 = load i32, ptr %197, align 4, !tbaa !5
  %238 = add nsw i32 %spec.select.us.3, %237
  %239 = icmp sgt i32 %238, 1000000006
  %240 = add nsw i32 %238, -1000000007
  %spec.select.us.4 = select i1 %239, i32 %240, i32 %238
  store i32 %spec.select.us.4, ptr %219, align 4, !tbaa !5
  %241 = load i32, ptr %198, align 4, !tbaa !5
  %242 = add nsw i32 %spec.select.us.4, %241
  %243 = icmp sgt i32 %242, 1000000006
  %244 = add nsw i32 %242, -1000000007
  %spec.select.us.5 = select i1 %243, i32 %244, i32 %242
  store i32 %spec.select.us.5, ptr %219, align 4, !tbaa !5
  %245 = load i32, ptr %199, align 4, !tbaa !5
  %246 = add nsw i32 %spec.select.us.5, %245
  %247 = icmp sgt i32 %246, 1000000006
  %248 = add nsw i32 %246, -1000000007
  %spec.select.us.6 = select i1 %247, i32 %248, i32 %246
  store i32 %spec.select.us.6, ptr %219, align 4, !tbaa !5
  %249 = load i32, ptr %200, align 4, !tbaa !5
  %250 = add nsw i32 %spec.select.us.6, %249
  %251 = icmp sgt i32 %250, 1000000006
  %252 = add nsw i32 %250, -1000000007
  %spec.select.us.7 = select i1 %251, i32 %252, i32 %250
  store i32 %spec.select.us.7, ptr %219, align 4, !tbaa !5
  %253 = load i32, ptr %201, align 4, !tbaa !5
  %254 = add nsw i32 %spec.select.us.7, %253
  %255 = icmp sgt i32 %254, 1000000006
  %256 = add nsw i32 %254, -1000000007
  %spec.select.us.8 = select i1 %255, i32 %256, i32 %254
  store i32 %spec.select.us.8, ptr %219, align 4, !tbaa !5
  br label %.loopexit.sink.split

257:                                              ; preds = %.preheader114.preheader, %261
  %.081153 = phi i32 [ %220, %.preheader114.preheader ], [ %263, %261 ]
  %258 = sext i32 %.081153 to i64
  %259 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %258
  %260 = load i32, ptr %259, align 4, !tbaa !5
  %.not106 = icmp eq i32 %260, 0
  br i1 %.not106, label %261, label %.critedge2

261:                                              ; preds = %257
  %262 = getelementptr inbounds i8, ptr %259, i64 44
  %263 = load i32, ptr %262, align 4, !tbaa !22
  %.not105 = icmp eq i32 %263, 0
  br i1 %.not105, label %.critedge2, label %257, !llvm.loop !28

.critedge2:                                       ; preds = %257, %261
  %264 = phi i32 [ %.pre, %261 ], [ %260, %257 ]
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %265
  %267 = load i32, ptr %266, align 4, !tbaa !5
  %268 = add nsw i32 %.promoted, %267
  %269 = icmp sgt i32 %268, 1000000006
  %270 = add nsw i32 %268, -1000000007
  %spec.select = select i1 %269, i32 %270, i32 %268
  store i32 %spec.select, ptr %219, align 4, !tbaa !5
  br label %271

271:                                              ; preds = %276, %.critedge2
  %.081153.1 = phi i32 [ %220, %.critedge2 ], [ %278, %276 ]
  %272 = sext i32 %.081153.1 to i64
  %273 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %272
  %274 = getelementptr inbounds i8, ptr %273, i64 4
  %275 = load i32, ptr %274, align 4, !tbaa !5
  %.not106.1 = icmp eq i32 %275, 0
  br i1 %.not106.1, label %276, label %.critedge2.1

276:                                              ; preds = %271
  %277 = getelementptr inbounds i8, ptr %273, i64 44
  %278 = load i32, ptr %277, align 4, !tbaa !22
  %.not105.1 = icmp eq i32 %278, 0
  br i1 %.not105.1, label %.critedge2.1, label %271, !llvm.loop !28

.critedge2.1:                                     ; preds = %271, %276
  %279 = phi i32 [ %35, %276 ], [ %275, %271 ]
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %280
  %282 = load i32, ptr %281, align 4, !tbaa !5
  %283 = add nsw i32 %spec.select, %282
  %284 = icmp sgt i32 %283, 1000000006
  %285 = add nsw i32 %283, -1000000007
  %spec.select.1 = select i1 %284, i32 %285, i32 %283
  store i32 %spec.select.1, ptr %219, align 4, !tbaa !5
  br label %286

286:                                              ; preds = %291, %.critedge2.1
  %.081153.2 = phi i32 [ %220, %.critedge2.1 ], [ %293, %291 ]
  %287 = sext i32 %.081153.2 to i64
  %288 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %287
  %289 = getelementptr inbounds i8, ptr %288, i64 8
  %290 = load i32, ptr %289, align 4, !tbaa !5
  %.not106.2 = icmp eq i32 %290, 0
  br i1 %.not106.2, label %291, label %.critedge2.2

291:                                              ; preds = %286
  %292 = getelementptr inbounds i8, ptr %288, i64 44
  %293 = load i32, ptr %292, align 4, !tbaa !22
  %.not105.2 = icmp eq i32 %293, 0
  br i1 %.not105.2, label %.critedge2.2, label %286, !llvm.loop !28

.critedge2.2:                                     ; preds = %286, %291
  %294 = phi i32 [ %42, %291 ], [ %290, %286 ]
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %295
  %297 = load i32, ptr %296, align 4, !tbaa !5
  %298 = add nsw i32 %spec.select.1, %297
  %299 = icmp sgt i32 %298, 1000000006
  %300 = add nsw i32 %298, -1000000007
  %spec.select.2 = select i1 %299, i32 %300, i32 %298
  store i32 %spec.select.2, ptr %219, align 4, !tbaa !5
  br label %301

301:                                              ; preds = %306, %.critedge2.2
  %.081153.3 = phi i32 [ %220, %.critedge2.2 ], [ %308, %306 ]
  %302 = sext i32 %.081153.3 to i64
  %303 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %302
  %304 = getelementptr inbounds i8, ptr %303, i64 12
  %305 = load i32, ptr %304, align 4, !tbaa !5
  %.not106.3 = icmp eq i32 %305, 0
  br i1 %.not106.3, label %306, label %.critedge2.3

306:                                              ; preds = %301
  %307 = getelementptr inbounds i8, ptr %303, i64 44
  %308 = load i32, ptr %307, align 4, !tbaa !22
  %.not105.3 = icmp eq i32 %308, 0
  br i1 %.not105.3, label %.critedge2.3, label %301, !llvm.loop !28

.critedge2.3:                                     ; preds = %301, %306
  %309 = phi i32 [ %49, %306 ], [ %305, %301 ]
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %310
  %312 = load i32, ptr %311, align 4, !tbaa !5
  %313 = add nsw i32 %spec.select.2, %312
  %314 = icmp sgt i32 %313, 1000000006
  %315 = add nsw i32 %313, -1000000007
  %spec.select.3 = select i1 %314, i32 %315, i32 %313
  store i32 %spec.select.3, ptr %219, align 4, !tbaa !5
  br label %316

316:                                              ; preds = %321, %.critedge2.3
  %.081153.4 = phi i32 [ %220, %.critedge2.3 ], [ %323, %321 ]
  %317 = sext i32 %.081153.4 to i64
  %318 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %317
  %319 = getelementptr inbounds i8, ptr %318, i64 16
  %320 = load i32, ptr %319, align 4, !tbaa !5
  %.not106.4 = icmp eq i32 %320, 0
  br i1 %.not106.4, label %321, label %.critedge2.4

321:                                              ; preds = %316
  %322 = getelementptr inbounds i8, ptr %318, i64 44
  %323 = load i32, ptr %322, align 4, !tbaa !22
  %.not105.4 = icmp eq i32 %323, 0
  br i1 %.not105.4, label %.critedge2.4, label %316, !llvm.loop !28

.critedge2.4:                                     ; preds = %316, %321
  %324 = phi i32 [ %56, %321 ], [ %320, %316 ]
  %325 = sext i32 %324 to i64
  %326 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %325
  %327 = load i32, ptr %326, align 4, !tbaa !5
  %328 = add nsw i32 %spec.select.3, %327
  %329 = icmp sgt i32 %328, 1000000006
  %330 = add nsw i32 %328, -1000000007
  %spec.select.4 = select i1 %329, i32 %330, i32 %328
  store i32 %spec.select.4, ptr %219, align 4, !tbaa !5
  br label %331

331:                                              ; preds = %336, %.critedge2.4
  %.081153.5 = phi i32 [ %220, %.critedge2.4 ], [ %338, %336 ]
  %332 = sext i32 %.081153.5 to i64
  %333 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %332
  %334 = getelementptr inbounds i8, ptr %333, i64 20
  %335 = load i32, ptr %334, align 4, !tbaa !5
  %.not106.5 = icmp eq i32 %335, 0
  br i1 %.not106.5, label %336, label %.critedge2.5

336:                                              ; preds = %331
  %337 = getelementptr inbounds i8, ptr %333, i64 44
  %338 = load i32, ptr %337, align 4, !tbaa !22
  %.not105.5 = icmp eq i32 %338, 0
  br i1 %.not105.5, label %.critedge2.5, label %331, !llvm.loop !28

.critedge2.5:                                     ; preds = %331, %336
  %339 = phi i32 [ %63, %336 ], [ %335, %331 ]
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %340
  %342 = load i32, ptr %341, align 4, !tbaa !5
  %343 = add nsw i32 %spec.select.4, %342
  %344 = icmp sgt i32 %343, 1000000006
  %345 = add nsw i32 %343, -1000000007
  %spec.select.5 = select i1 %344, i32 %345, i32 %343
  store i32 %spec.select.5, ptr %219, align 4, !tbaa !5
  br label %346

346:                                              ; preds = %351, %.critedge2.5
  %.081153.6 = phi i32 [ %220, %.critedge2.5 ], [ %353, %351 ]
  %347 = sext i32 %.081153.6 to i64
  %348 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %347
  %349 = getelementptr inbounds i8, ptr %348, i64 24
  %350 = load i32, ptr %349, align 4, !tbaa !5
  %.not106.6 = icmp eq i32 %350, 0
  br i1 %.not106.6, label %351, label %.critedge2.6

351:                                              ; preds = %346
  %352 = getelementptr inbounds i8, ptr %348, i64 44
  %353 = load i32, ptr %352, align 4, !tbaa !22
  %.not105.6 = icmp eq i32 %353, 0
  br i1 %.not105.6, label %.critedge2.6, label %346, !llvm.loop !28

.critedge2.6:                                     ; preds = %346, %351
  %354 = phi i32 [ %70, %351 ], [ %350, %346 ]
  %355 = sext i32 %354 to i64
  %356 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %355
  %357 = load i32, ptr %356, align 4, !tbaa !5
  %358 = add nsw i32 %spec.select.5, %357
  %359 = icmp sgt i32 %358, 1000000006
  %360 = add nsw i32 %358, -1000000007
  %spec.select.6 = select i1 %359, i32 %360, i32 %358
  store i32 %spec.select.6, ptr %219, align 4, !tbaa !5
  br label %361

361:                                              ; preds = %366, %.critedge2.6
  %.081153.7 = phi i32 [ %220, %.critedge2.6 ], [ %368, %366 ]
  %362 = sext i32 %.081153.7 to i64
  %363 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %362
  %364 = getelementptr inbounds i8, ptr %363, i64 28
  %365 = load i32, ptr %364, align 4, !tbaa !5
  %.not106.7 = icmp eq i32 %365, 0
  br i1 %.not106.7, label %366, label %.critedge2.7

366:                                              ; preds = %361
  %367 = getelementptr inbounds i8, ptr %363, i64 44
  %368 = load i32, ptr %367, align 4, !tbaa !22
  %.not105.7 = icmp eq i32 %368, 0
  br i1 %.not105.7, label %.critedge2.7, label %361, !llvm.loop !28

.critedge2.7:                                     ; preds = %361, %366
  %369 = phi i32 [ %77, %366 ], [ %365, %361 ]
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %370
  %372 = load i32, ptr %371, align 4, !tbaa !5
  %373 = add nsw i32 %spec.select.6, %372
  %374 = icmp sgt i32 %373, 1000000006
  %375 = add nsw i32 %373, -1000000007
  %spec.select.7 = select i1 %374, i32 %375, i32 %373
  store i32 %spec.select.7, ptr %219, align 4, !tbaa !5
  br label %376

376:                                              ; preds = %381, %.critedge2.7
  %.081153.8 = phi i32 [ %220, %.critedge2.7 ], [ %383, %381 ]
  %377 = sext i32 %.081153.8 to i64
  %378 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %377
  %379 = getelementptr inbounds i8, ptr %378, i64 32
  %380 = load i32, ptr %379, align 4, !tbaa !5
  %.not106.8 = icmp eq i32 %380, 0
  br i1 %.not106.8, label %381, label %.critedge2.8

381:                                              ; preds = %376
  %382 = getelementptr inbounds i8, ptr %378, i64 44
  %383 = load i32, ptr %382, align 4, !tbaa !22
  %.not105.8 = icmp eq i32 %383, 0
  br i1 %.not105.8, label %.critedge2.8, label %376, !llvm.loop !28

.critedge2.8:                                     ; preds = %376, %381
  %384 = phi i32 [ %84, %381 ], [ %380, %376 ]
  %385 = sext i32 %384 to i64
  %386 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %385
  %387 = load i32, ptr %386, align 4, !tbaa !5
  %388 = add nsw i32 %spec.select.7, %387
  %389 = icmp sgt i32 %388, 1000000006
  %390 = add nsw i32 %388, -1000000007
  %spec.select.8 = select i1 %389, i32 %390, i32 %388
  store i32 %spec.select.8, ptr %219, align 4, !tbaa !5
  br label %391

391:                                              ; preds = %396, %.critedge2.8
  %.081153.9 = phi i32 [ %220, %.critedge2.8 ], [ %398, %396 ]
  %392 = sext i32 %.081153.9 to i64
  %393 = getelementptr inbounds [25001 x %struct.Trie], ptr @e, i64 0, i64 %392
  %394 = getelementptr inbounds i8, ptr %393, i64 36
  %395 = load i32, ptr %394, align 4, !tbaa !5
  %.not106.9 = icmp eq i32 %395, 0
  br i1 %.not106.9, label %396, label %.loopexit.sink.split

396:                                              ; preds = %391
  %397 = getelementptr inbounds i8, ptr %393, i64 44
  %398 = load i32, ptr %397, align 4, !tbaa !22
  %.not105.9 = icmp eq i32 %398, 0
  br i1 %.not105.9, label %.loopexit.sink.split, label %391, !llvm.loop !28

.loopexit.sink.split:                             ; preds = %396, %391, %.preheader115.split.us
  %.pn.in = phi i32 [ %91, %.preheader115.split.us ], [ %395, %391 ], [ %91, %396 ]
  %spec.select.8.sink = phi i32 [ %spec.select.us.8, %.preheader115.split.us ], [ %spec.select.8, %391 ], [ %spec.select.8, %396 ]
  %.pn = sext i32 %.pn.in to i64
  %.sink255 = getelementptr inbounds [53 x [25001 x i32]], ptr @f, i64 0, i64 %192, i64 %.pn
  %399 = load i32, ptr %.sink255, align 4, !tbaa !5
  %400 = add nsw i32 %spec.select.8.sink, %399
  %401 = icmp sgt i32 %400, 1000000006
  %402 = add nsw i32 %400, -1000000007
  %spec.select.9 = select i1 %401, i32 %402, i32 %400
  store i32 %spec.select.9, ptr %219, align 4, !tbaa !5
  br label %.loopexit

.loopexit:                                        ; preds = %.loopexit.sink.split, %215
  %indvars.iv.next213 = add nuw nsw i64 %indvars.iv212, 1
  %exitcond216.not = icmp eq i64 %indvars.iv.next213, %wide.trip.count215
  br i1 %exitcond216.not, label %._crit_edge, label %215, !llvm.loop !29

._crit_edge169:                                   ; preds = %.lr.ph168, %middle.block256, %.preheader117, %.preheader117.thread
  %403 = tail call noundef i32 @_Z5solvev()
  %404 = sub nsw i32 1000000007, %403
  store i32 %404, ptr @ans, align 4, !tbaa !5
  %405 = tail call i32 (ptr, ...) @__isoc99_scanf(ptr noundef nonnull @.str.1, ptr noundef nonnull @buf)
  %406 = load i32, ptr @d, align 4, !tbaa !5
  %407 = icmp sgt i32 %406, 0
  br i1 %407, label %.lr.ph172.preheader, label %._crit_edge173.thread

._crit_edge173.thread:                            ; preds = %._crit_edge169
  %408 = load i32, ptr @num, align 16, !tbaa !5
  %409 = add nsw i32 %408, 1
  store i32 %409, ptr @num, align 16, !tbaa !5
  br label %.critedge4

.lr.ph172.preheader:                              ; preds = %._crit_edge169
  %410 = zext nneg i32 %406 to i64
  %wide.trip.count230 = zext nneg i32 %406 to i64
  %min.iters.check271 = icmp ult i32 %406, 8
  br i1 %min.iters.check271, label %.lr.ph172.preheader284, label %vector.ph272

.lr.ph172.preheader284:                           ; preds = %middle.block269, %.lr.ph172.preheader
  %indvars.iv227.ph = phi i64 [ 0, %.lr.ph172.preheader ], [ %n.vec274, %middle.block269 ]
  br label %.lr.ph172

vector.ph272:                                     ; preds = %.lr.ph172.preheader
  %n.vec274 = and i64 %wide.trip.count230, 2147483640
  br label %vector.body276

vector.body276:                                   ; preds = %vector.body276, %vector.ph272
  %index277 = phi i64 [ 0, %vector.ph272 ], [ %index.next282, %vector.body276 ]
  %411 = xor i64 %index277, -1
  %412 = add nsw i64 %410, %411
  %413 = getelementptr inbounds [53 x i8], ptr @buf, i64 0, i64 %412
  %414 = getelementptr inbounds i8, ptr %413, i64 -3
  %415 = getelementptr inbounds i8, ptr %413, i64 -7
  %wide.load278 = load <4 x i8>, ptr %414, align 1, !tbaa !9
  %reverse279 = shufflevector <4 x i8> %wide.load278, <4 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %wide.load280 = load <4 x i8>, ptr %415, align 1, !tbaa !9
  %reverse281 = shufflevector <4 x i8> %wide.load280, <4 x i8> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
  %416 = sext <4 x i8> %reverse279 to <4 x i32>
  %417 = sext <4 x i8> %reverse281 to <4 x i32>
  %418 = add nsw <4 x i32> %416, <i32 -48, i32 -48, i32 -48, i32 -48>
  %419 = add nsw <4 x i32> %417, <i32 -48, i32 -48, i32 -48, i32 -48>
  %420 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %index277
  %421 = getelementptr inbounds i8, ptr %420, i64 16
  store <4 x i32> %418, ptr %420, align 16, !tbaa !5
  store <4 x i32> %419, ptr %421, align 16, !tbaa !5
  %index.next282 = add nuw i64 %index277, 8
  %422 = icmp eq i64 %index.next282, %n.vec274
  br i1 %422, label %middle.block269, label %vector.body276, !llvm.loop !30

middle.block269:                                  ; preds = %vector.body276
  %cmp.n283 = icmp eq i64 %n.vec274, %wide.trip.count230
  br i1 %cmp.n283, label %._crit_edge173, label %.lr.ph172.preheader284

.lr.ph168:                                        ; preds = %.lr.ph168.preheader285, %.lr.ph168
  %indvars.iv222 = phi i64 [ %indvars.iv.next223, %.lr.ph168 ], [ %indvars.iv222.ph, %.lr.ph168.preheader285 ]
  %423 = xor i64 %indvars.iv222, -1
  %424 = add nsw i64 %202, %423
  %425 = getelementptr inbounds [53 x i8], ptr @buf, i64 0, i64 %424
  %426 = load i8, ptr %425, align 1, !tbaa !9
  %427 = sext i8 %426 to i32
  %428 = add nsw i32 %427, -48
  %429 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %indvars.iv222
  store i32 %428, ptr %429, align 4, !tbaa !5
  %indvars.iv.next223 = add nuw nsw i64 %indvars.iv222, 1
  %exitcond226.not = icmp eq i64 %indvars.iv.next223, %wide.trip.count225
  br i1 %exitcond226.not, label %._crit_edge169, label %.lr.ph168, !llvm.loop !31

._crit_edge173:                                   ; preds = %.lr.ph172, %middle.block269
  %430 = load i32, ptr @num, align 16, !tbaa !5
  %431 = add nsw i32 %430, 1
  store i32 %431, ptr @num, align 16, !tbaa !5
  br i1 %407, label %.lr.ph177.preheader, label %.critedge4

.lr.ph177.preheader:                              ; preds = %._crit_edge173
  %wide.trip.count235 = zext nneg i32 %406 to i64
  br label %.lr.ph177

.lr.ph172:                                        ; preds = %.lr.ph172.preheader284, %.lr.ph172
  %indvars.iv227 = phi i64 [ %indvars.iv.next228, %.lr.ph172 ], [ %indvars.iv227.ph, %.lr.ph172.preheader284 ]
  %432 = xor i64 %indvars.iv227, -1
  %433 = add nsw i64 %410, %432
  %434 = getelementptr inbounds [53 x i8], ptr @buf, i64 0, i64 %433
  %435 = load i8, ptr %434, align 1, !tbaa !9
  %436 = sext i8 %435 to i32
  %437 = add nsw i32 %436, -48
  %438 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %indvars.iv227
  store i32 %437, ptr %438, align 4, !tbaa !5
  %indvars.iv.next228 = add nuw nsw i64 %indvars.iv227, 1
  %exitcond231.not = icmp eq i64 %indvars.iv.next228, %wide.trip.count230
  br i1 %exitcond231.not, label %._crit_edge173, label %.lr.ph172, !llvm.loop !32

.lr.ph177:                                        ; preds = %.lr.ph177.preheader, %444
  %439 = phi i32 [ %431, %.lr.ph177.preheader ], [ %449, %444 ]
  %indvars.iv232 = phi i64 [ 0, %.lr.ph177.preheader ], [ %indvars.iv.next233, %444 ]
  %440 = icmp sgt i32 %439, 9
  br i1 %440, label %444, label %.critedge4

.critedge4:                                       ; preds = %.lr.ph177, %444, %._crit_edge173.thread, %._crit_edge173
  %441 = sext i32 %406 to i64
  %442 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %441
  %443 = load i32, ptr %442, align 4, !tbaa !5
  %.not103 = icmp eq i32 %443, 0
  br i1 %.not103, label %452, label %450

444:                                              ; preds = %.lr.ph177
  %445 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %indvars.iv232
  %446 = add nsw i32 %439, -10
  store i32 %446, ptr %445, align 4, !tbaa !5
  %indvars.iv.next233 = add nuw nsw i64 %indvars.iv232, 1
  %447 = getelementptr inbounds [53 x i32], ptr @num, i64 0, i64 %indvars.iv.next233
  %448 = load i32, ptr %447, align 4, !tbaa !5
  %449 = add nsw i32 %448, 1
  store i32 %449, ptr %447, align 4, !tbaa !5
  %exitcond236.not = icmp eq i64 %indvars.iv.next233, %wide.trip.count235
  br i1 %exitcond236.not, label %.critedge4, label %.lr.ph177, !llvm.loop !33

450:                                              ; preds = %.critedge4
  %451 = add nsw i32 %406, 1
  store i32 %451, ptr @d, align 4, !tbaa !5
  br label %452

452:                                              ; preds = %450, %.critedge4
  %453 = tail call noundef i32 @_Z5solvev()
  %454 = load i32, ptr @ans, align 4, !tbaa !5
  %455 = add nsw i32 %454, %453
  %456 = icmp sgt i32 %455, 1000000006
  %457 = add nsw i32 %455, -1000000007
  %spec.select113 = select i1 %456, i32 %457, i32 %455
  store i32 %spec.select113, ptr @ans, align 4, !tbaa !5
  %458 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, i32 noundef %spec.select113)
  ret i32 0
}

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

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

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

attributes #0 = { 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 #1 = { 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 #2 = { 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 #3 = { 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 #4 = { 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}
!11 = !{!"llvm.loop.mustprogress"}
!12 = !{!13, !14, i64 48}
!13 = !{!"_ZTS4Trie", !7, i64 0, !6, i64 44, !14, i64 48}
!14 = !{!"bool", !7, i64 0}
!15 = distinct !{!15, !11}
!16 = distinct !{!16, !11}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = distinct !{!19, !11, !20, !21}
!20 = !{!"llvm.loop.isvectorized", i32 1}
!21 = !{!"llvm.loop.unroll.runtime.disable"}
!22 = !{!13, !6, i64 44}
!23 = distinct !{!23, !11}
!24 = distinct !{!24, !11}
!25 = distinct !{!25, !11, !21, !20}
!26 = distinct !{!26, !11, !20, !21}
!27 = distinct !{!27, !11}
!28 = distinct !{!28, !11}
!29 = distinct !{!29, !11}
!30 = distinct !{!30, !11, !20, !21}
!31 = distinct !{!31, !11, !21, !20}
!32 = distinct !{!32, !11, !21, !20}
!33 = distinct !{!33, !11}


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