From 5886f4f545591dafbbd9d6117a46d7399ce13bfa Mon Sep 17 00:00:00 2001 From: Gabe Goodhart Date: Wed, 5 Nov 2025 10:58:16 -0700 Subject: [PATCH 01/69] examples(gguf): GGUF example outputs (#17025) * feat(llama-gguf): Print out the tensor type in llama-gguf r Branch: Mamba2Perf Signed-off-by: Gabe Goodhart * feat(off-topic): print the number of elements in tensors with llama-gguf Branch: Mamba2SSD Signed-off-by: Gabe Goodhart * style: valign Branch: GGUFToolOutputs Signed-off-by: Gabe Goodhart * Update examples/gguf/gguf.cpp --------- Signed-off-by: Gabe Goodhart Co-authored-by: Georgi Gerganov --- examples/gguf/gguf.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/gguf/gguf.cpp b/examples/gguf/gguf.cpp index f31989c8c5..499cfacc92 100644 --- a/examples/gguf/gguf.cpp +++ b/examples/gguf/gguf.cpp @@ -184,8 +184,13 @@ static bool gguf_ex_read_1(const std::string & fname, bool check_data) { const char * name = gguf_get_tensor_name (ctx, i); const size_t size = gguf_get_tensor_size (ctx, i); const size_t offset = gguf_get_tensor_offset(ctx, i); + const auto type = gguf_get_tensor_type (ctx, i); - printf("%s: tensor[%d]: name = %s, size = %zu, offset = %zu\n", __func__, i, name, size, offset); + const char * type_name = ggml_type_name(type); + const size_t type_size = ggml_type_size(type); + const size_t n_elements = size / type_size; + + printf("%s: tensor[%d]: name = %s, size = %zu, offset = %zu, type = %s, n_elts = %zu\n", __func__, i, name, size, offset, type_name, n_elements); } } From a44d77126c911d105f7f800c17da21b2a5b112d1 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Wed, 5 Nov 2025 12:51:03 -0600 Subject: [PATCH 02/69] vulkan: Fix GGML_VULKAN_CHECK_RESULTS to better handle fusion (#16919) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 644 +++++++++++++-------------- 1 file changed, 318 insertions(+), 326 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 7fc46bc46b..ab94bc3d78 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -14104,20 +14104,11 @@ size_t comp_size; size_t comp_nb[GGML_MAX_DIMS]; size_t check_counter = 0; static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph * cgraph, int tensor_idx) { - ggml_tensor * tensor = cgraph->nodes[tensor_idx]; + ggml_tensor * tensor = cgraph->nodes[tensor_idx + ctx->num_additional_fused_ops]; if (tensor->op == GGML_OP_TRANSPOSE || tensor->op == GGML_OP_SET_ROWS) { return; } - bool fused_rms_norm_mul = false; - int rms_norm_idx = -1; - if (ctx->num_additional_fused_ops == 1 && - tensor->op == GGML_OP_RMS_NORM && - cgraph->nodes[tensor_idx + 1]->op == GGML_OP_MUL) { - fused_rms_norm_mul = true; - tensor = cgraph->nodes[tensor_idx + 1]; - } - check_counter++; if (!(vk_output_tensor > 0 && vk_output_tensor == check_counter) && check_counter <= vk_skip_checks) { return; @@ -14125,9 +14116,6 @@ static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph * VK_LOG_DEBUG("ggml_vk_check_results_0(" << tensor->name << ")"); - ggml_tensor * src0 = tensor->src[0]; - ggml_tensor * src1 = tensor->src[1]; - struct ggml_init_params iparams = { /*.mem_size =*/ 2ul*1024ul*1024ul*1024ul, /*.mem_buffer =*/ NULL, @@ -14137,328 +14125,339 @@ static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph * struct ggml_context * ggml_ctx = ggml_init(iparams); std::array src_clone = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr}; - std::array src_size = {}; - std::array src_buffer = {}; const char * srci_name[GGML_MAX_SRC] = {"src0", "src1", "src2", "src3", "src4", "src5", "src6", "src7", "src8", "src9"}; + std::map cloned_tensors; + std::vector cloned_mallocs; + struct ggml_tensor * tensor_clone = nullptr; - for (int i = 0; i < GGML_MAX_SRC; i++) { - ggml_tensor * srci = tensor->src[i]; - if (fused_rms_norm_mul) { - rms_norm_idx = tensor->src[0]->op == GGML_OP_RMS_NORM ? 0 : 1; - ggml_tensor *rms_norm = tensor->src[rms_norm_idx]; - switch (i) { - case 0: srci = rms_norm->src[0]; break; - case 1: srci = tensor->src[1 - rms_norm_idx]; break; - default: continue; + for (int f = 0; f < ctx->num_additional_fused_ops + 1; ++f) { + tensor = cgraph->nodes[tensor_idx + f]; + for (int i = 0; i < GGML_MAX_SRC; i++) { + ggml_tensor * srci = tensor->src[i]; + if (srci == nullptr) { + continue; } - } - if (srci == nullptr) { - continue; - } - ggml_tensor * srci_clone = ggml_dup_tensor(ggml_ctx, srci); - size_t srci_size = ggml_nbytes(srci); + // If a src tensor has been cloned, use that one + auto it = cloned_tensors.find(srci); + if (it != cloned_tensors.end()) { + src_clone[i] = it->second; + continue; + } + ggml_tensor * srci_clone = ggml_dup_tensor(ggml_ctx, srci); + size_t srci_size = ggml_nbytes(srci); - src_clone[i] = srci_clone; - src_size[i] = ggml_nbytes(srci); - src_buffer[i] = malloc(srci_size); + src_clone[i] = srci_clone; + void *src_buffer = malloc(srci_size); + cloned_mallocs.push_back(src_buffer); - srci_clone->data = src_buffer[i]; - if (ggml_backend_buffer_is_host(srci->buffer)) { - memcpy(srci_clone->data, srci->data, srci_size); - memcpy(srci_clone->nb, srci->nb, sizeof(size_t) * GGML_MAX_DIMS); - } else if (ggml_backend_buffer_is_vk(srci->buffer)) { - ggml_backend_vk_buffer_context * buf_ctx = (ggml_backend_vk_buffer_context *)srci->buffer->context; - vk_buffer& buffer_gpu = buf_ctx->dev_buffer; - uint64_t offset = vk_tensor_offset(srci) + srci->view_offs; - if (!ggml_is_contiguous(srci) && ggml_vk_dim01_contiguous(srci)) { - for (int i3 = 0; i3 < srci->ne[3]; i3++) { - for (int i2 = 0; i2 < srci->ne[2]; i2++) { - const int idx = i3*srci->ne[2] + i2; - ggml_vk_buffer_read(buffer_gpu, offset + idx * srci->nb[2], ((char *)srci_clone->data + idx * srci_clone->nb[2]), srci->ne[1] * srci->nb[1]); - } - } - - srci_clone->nb[0] = srci->nb[0]; - srci_clone->nb[1] = srci->nb[1]; - for (int i = 2; i < GGML_MAX_DIMS; i++) { - srci_clone->nb[i] = srci_clone->nb[i - 1]*srci_clone->ne[i - 1]; - } - } else { - if (offset + srci_size >= buffer_gpu->size) { - srci_size = buffer_gpu->size - offset; - } - ggml_vk_buffer_read(buffer_gpu, offset, srci_clone->data, srci_size); + srci_clone->data = src_buffer; + if (ggml_backend_buffer_is_host(srci->buffer)) { + memcpy(srci_clone->data, srci->data, srci_size); memcpy(srci_clone->nb, srci->nb, sizeof(size_t) * GGML_MAX_DIMS); + } else if (ggml_backend_buffer_is_vk(srci->buffer)) { + ggml_backend_vk_buffer_context * buf_ctx = (ggml_backend_vk_buffer_context *)srci->buffer->context; + vk_buffer& buffer_gpu = buf_ctx->dev_buffer; + uint64_t offset = vk_tensor_offset(srci) + srci->view_offs; + if (!ggml_is_contiguous(srci) && ggml_vk_dim01_contiguous(srci)) { + for (int i3 = 0; i3 < srci->ne[3]; i3++) { + for (int i2 = 0; i2 < srci->ne[2]; i2++) { + const int idx = i3*srci->ne[2] + i2; + ggml_vk_buffer_read(buffer_gpu, offset + idx * srci->nb[2], ((char *)srci_clone->data + idx * srci_clone->nb[2]), srci->ne[1] * srci->nb[1]); + } + } + + srci_clone->nb[0] = srci->nb[0]; + srci_clone->nb[1] = srci->nb[1]; + for (int i = 2; i < GGML_MAX_DIMS; i++) { + srci_clone->nb[i] = srci_clone->nb[i - 1]*srci_clone->ne[i - 1]; + } + } else { + if (offset + srci_size >= buffer_gpu->size) { + srci_size = buffer_gpu->size - offset; + } + ggml_vk_buffer_read(buffer_gpu, offset, srci_clone->data, srci_size); + memcpy(srci_clone->nb, srci->nb, sizeof(size_t) * GGML_MAX_DIMS); + } + } else { + GGML_ABORT("fatal error"); + } + + if (vk_output_tensor > 0 && vk_output_tensor == check_counter) { + ggml_vk_print_tensor(srci, srci_name[i]); } - } else { - GGML_ABORT("fatal error"); } - if (vk_output_tensor > 0 && vk_output_tensor == check_counter) { - ggml_vk_print_tensor(srci, srci_name[i]); - } - } - - if (tensor->op == GGML_OP_FLASH_ATTN_EXT) { - const float * params = (const float *)tensor->op_params; - tensor_clone = ggml_flash_attn_ext(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], src_clone[3], params[0], params[1], params[2]); - if (src_clone[4]) { - ggml_flash_attn_ext_add_sinks(tensor_clone, src_clone[4]); - } - } else if (tensor->op == GGML_OP_MUL_MAT) { - tensor_clone = ggml_mul_mat(ggml_ctx, src_clone[0], src_clone[1]); - } else if (tensor->op == GGML_OP_MUL_MAT_ID) { - tensor_clone = ggml_mul_mat_id(ggml_ctx, src_clone[0], src_clone[1], src_clone[2]); - } else if (tensor->op == GGML_OP_SUB) { - tensor_clone = ggml_sub(ggml_ctx, src_clone[0], src_clone[1]); - } else if (tensor->op == GGML_OP_MUL) { - if (fused_rms_norm_mul) { - tensor_clone = ggml_rms_norm(ggml_ctx, src_clone[0], *(float *)tensor->src[rms_norm_idx]->op_params); - tensor_clone = ggml_mul(ggml_ctx, tensor_clone, src_clone[1 - rms_norm_idx]); - } else { - tensor_clone = ggml_mul(ggml_ctx, src_clone[0], src_clone[1]); - } - } else if (tensor->op == GGML_OP_DIV) { - tensor_clone = ggml_div(ggml_ctx, src_clone[0], src_clone[1]); - } else if (tensor->op == GGML_OP_CONCAT) { - tensor_clone = ggml_concat(ggml_ctx, src_clone[0], src_clone[1], *(int *)tensor->op_params); - } else if (tensor->op == GGML_OP_UPSCALE) { - tensor_clone = ggml_interpolate(ggml_ctx, src_clone[0], tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3], (ggml_scale_mode) tensor->op_params[0]); - } else if (tensor->op == GGML_OP_SCALE) { - const float * params = (const float *)tensor->op_params; - tensor_clone = ggml_scale_bias(ggml_ctx, src_clone[0], params[0], params[1]); - } else if (tensor->op == GGML_OP_SQR) { - tensor_clone = ggml_sqr(ggml_ctx, src_clone[0]); - } else if (tensor->op == GGML_OP_SQRT) { - tensor_clone = ggml_sqrt(ggml_ctx, src_clone[0]); - } else if (tensor->op == GGML_OP_SIN) { - tensor_clone = ggml_sin(ggml_ctx, src_clone[0]); - } else if (tensor->op == GGML_OP_COS) { - tensor_clone = ggml_cos(ggml_ctx, src_clone[0]); - } else if (tensor->op == GGML_OP_CLAMP) { - const float * params = (const float *)tensor->op_params; - tensor_clone = ggml_clamp(ggml_ctx, src_clone[0], params[0], params[1]); - } else if (tensor->op == GGML_OP_PAD) { - tensor_clone = ggml_pad_ext(ggml_ctx, src_clone[0], tensor->op_params[0], tensor->op_params[1], tensor->op_params[2], tensor->op_params[3], - tensor->op_params[4], tensor->op_params[5], tensor->op_params[6], tensor->op_params[7]); - } else if (tensor->op == GGML_OP_REPEAT) { - tensor_clone = ggml_repeat(ggml_ctx, src_clone[0], tensor); - } else if (tensor->op == GGML_OP_REPEAT_BACK) { - tensor_clone = ggml_repeat_back(ggml_ctx, src_clone[0], tensor); - } else if (tensor->op == GGML_OP_ADD) { - tensor_clone = ggml_add(ggml_ctx, src_clone[0], src_clone[1]); - } else if (tensor->op == GGML_OP_ACC) { - tensor_clone = ggml_acc(ggml_ctx, src_clone[0], src_clone[1], tensor->op_params[0], tensor->op_params[1], tensor->op_params[2], tensor->op_params[3]); - } else if (tensor->op == GGML_OP_NORM) { - tensor_clone = ggml_norm(ggml_ctx, src_clone[0], *(float *)tensor->op_params); - } else if (tensor->op == GGML_OP_GROUP_NORM) { - const float * float_params = (const float *)tensor->op_params; - tensor_clone = ggml_group_norm(ggml_ctx, src_clone[0], tensor->op_params[0], float_params[1]); - } else if (tensor->op == GGML_OP_RMS_NORM) { - tensor_clone = ggml_rms_norm(ggml_ctx, src_clone[0], *(float *)tensor->op_params); - } else if (tensor->op == GGML_OP_RMS_NORM_BACK) { - const float eps = ((float *) tensor->op_params)[0]; - tensor_clone = ggml_rms_norm_back(ggml_ctx, src_clone[0], src_clone[1], eps); - } else if (tensor->op == GGML_OP_SILU_BACK) { - tensor_clone = ggml_silu_back(ggml_ctx, src_clone[0], src_clone[1]); - } else if (tensor->op == GGML_OP_L2_NORM) { - const float eps = ((float *) tensor->op_params)[0]; - tensor_clone = ggml_l2_norm(ggml_ctx, src_clone[0], eps); - } else if (tensor->op == GGML_OP_SOFT_MAX) { - if (src1 != nullptr) { + if (tensor->op == GGML_OP_FLASH_ATTN_EXT) { const float * params = (const float *)tensor->op_params; - tensor_clone = ggml_soft_max_ext(ggml_ctx, src_clone[0], src_clone[1], params[0], params[1]); - } else { - tensor_clone = ggml_soft_max(ggml_ctx, src_clone[0]); - } - } else if (tensor->op == GGML_OP_SOFT_MAX_BACK) { - tensor_clone = ggml_soft_max_ext_back(ggml_ctx, src_clone[0], src_clone[1], ((float *)tensor->op_params)[0], ((float *)tensor->op_params)[1]); - } else if (tensor->op == GGML_OP_DIAG_MASK_INF) { - tensor_clone = ggml_diag_mask_inf(ggml_ctx, src_clone[0], tensor->op_params[0]); - } else if (tensor->op == GGML_OP_ROPE || tensor->op == GGML_OP_ROPE_BACK) { - const int n_dims = ((int32_t *) tensor->op_params)[1]; - const int mode = ((int32_t *) tensor->op_params)[2]; - //const int n_ctx_ggml = ((int32_t *) tensor->op_params)[3]; - const int n_ctx_orig_ggml = ((int32_t *) tensor->op_params)[4]; - const float freq_base = ((float *) tensor->op_params)[5]; - const float freq_scale = ((float *) tensor->op_params)[6]; - const float ext_factor = ((float *) tensor->op_params)[7]; - const float attn_factor = ((float *) tensor->op_params)[8]; - const float beta_fast = ((float *) tensor->op_params)[9]; - const float beta_slow = ((float *) tensor->op_params)[10]; - if (mode & GGML_ROPE_TYPE_MROPE) { - int32_t *sections = ((int32_t *) tensor->op_params) + 11; - if (tensor->op == GGML_OP_ROPE) { - tensor_clone = ggml_rope_multi(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], n_dims, sections, mode, n_ctx_orig_ggml, freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow); - } else { - tensor_clone = ggml_rope_multi_back(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], n_dims, sections, mode, n_ctx_orig_ggml, freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow); + tensor_clone = ggml_flash_attn_ext(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], src_clone[3], params[0], params[1], params[2]); + if (src_clone[4]) { + ggml_flash_attn_ext_add_sinks(tensor_clone, src_clone[4]); } - } else { - if (tensor->op == GGML_OP_ROPE) { - tensor_clone = ggml_rope_ext(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], n_dims, mode, n_ctx_orig_ggml, freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow); + } else if (tensor->op == GGML_OP_MUL_MAT) { + tensor_clone = ggml_mul_mat(ggml_ctx, src_clone[0], src_clone[1]); + } else if (tensor->op == GGML_OP_MUL_MAT_ID) { + tensor_clone = ggml_mul_mat_id(ggml_ctx, src_clone[0], src_clone[1], src_clone[2]); + } else if (tensor->op == GGML_OP_SUB) { + tensor_clone = ggml_sub(ggml_ctx, src_clone[0], src_clone[1]); + } else if (tensor->op == GGML_OP_MUL) { + tensor_clone = ggml_mul(ggml_ctx, src_clone[0], src_clone[1]); + } else if (tensor->op == GGML_OP_DIV) { + tensor_clone = ggml_div(ggml_ctx, src_clone[0], src_clone[1]); + } else if (tensor->op == GGML_OP_CONCAT) { + tensor_clone = ggml_concat(ggml_ctx, src_clone[0], src_clone[1], *(int *)tensor->op_params); + } else if (tensor->op == GGML_OP_UPSCALE) { + tensor_clone = ggml_interpolate(ggml_ctx, src_clone[0], tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3], (ggml_scale_mode) tensor->op_params[0]); + } else if (tensor->op == GGML_OP_SCALE) { + const float * params = (const float *)tensor->op_params; + tensor_clone = ggml_scale_bias(ggml_ctx, src_clone[0], params[0], params[1]); + } else if (tensor->op == GGML_OP_SQR) { + tensor_clone = ggml_sqr(ggml_ctx, src_clone[0]); + } else if (tensor->op == GGML_OP_SQRT) { + tensor_clone = ggml_sqrt(ggml_ctx, src_clone[0]); + } else if (tensor->op == GGML_OP_SIN) { + tensor_clone = ggml_sin(ggml_ctx, src_clone[0]); + } else if (tensor->op == GGML_OP_COS) { + tensor_clone = ggml_cos(ggml_ctx, src_clone[0]); + } else if (tensor->op == GGML_OP_CLAMP) { + const float * params = (const float *)tensor->op_params; + tensor_clone = ggml_clamp(ggml_ctx, src_clone[0], params[0], params[1]); + } else if (tensor->op == GGML_OP_PAD) { + tensor_clone = ggml_pad_ext(ggml_ctx, src_clone[0], tensor->op_params[0], tensor->op_params[1], tensor->op_params[2], tensor->op_params[3], + tensor->op_params[4], tensor->op_params[5], tensor->op_params[6], tensor->op_params[7]); + } else if (tensor->op == GGML_OP_REPEAT) { + tensor_clone = ggml_repeat(ggml_ctx, src_clone[0], tensor); + } else if (tensor->op == GGML_OP_REPEAT_BACK) { + tensor_clone = ggml_repeat_back(ggml_ctx, src_clone[0], tensor); + } else if (tensor->op == GGML_OP_ADD) { + tensor_clone = ggml_add(ggml_ctx, src_clone[0], src_clone[1]); + } else if (tensor->op == GGML_OP_ACC) { + tensor_clone = ggml_acc(ggml_ctx, src_clone[0], src_clone[1], tensor->op_params[0], tensor->op_params[1], tensor->op_params[2], tensor->op_params[3]); + } else if (tensor->op == GGML_OP_NORM) { + tensor_clone = ggml_norm(ggml_ctx, src_clone[0], *(float *)tensor->op_params); + } else if (tensor->op == GGML_OP_GROUP_NORM) { + const float * float_params = (const float *)tensor->op_params; + tensor_clone = ggml_group_norm(ggml_ctx, src_clone[0], tensor->op_params[0], float_params[1]); + } else if (tensor->op == GGML_OP_RMS_NORM) { + tensor_clone = ggml_rms_norm(ggml_ctx, src_clone[0], *(float *)tensor->op_params); + } else if (tensor->op == GGML_OP_RMS_NORM_BACK) { + const float eps = ((float *) tensor->op_params)[0]; + tensor_clone = ggml_rms_norm_back(ggml_ctx, src_clone[0], src_clone[1], eps); + } else if (tensor->op == GGML_OP_SILU_BACK) { + tensor_clone = ggml_silu_back(ggml_ctx, src_clone[0], src_clone[1]); + } else if (tensor->op == GGML_OP_L2_NORM) { + const float eps = ((float *) tensor->op_params)[0]; + tensor_clone = ggml_l2_norm(ggml_ctx, src_clone[0], eps); + } else if (tensor->op == GGML_OP_SOFT_MAX) { + if (tensor->src[1] != nullptr) { + const float * params = (const float *)tensor->op_params; + tensor_clone = ggml_soft_max_ext(ggml_ctx, src_clone[0], src_clone[1], params[0], params[1]); } else { - tensor_clone = ggml_rope_ext_back(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], n_dims, mode, n_ctx_orig_ggml, freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow); + tensor_clone = ggml_soft_max(ggml_ctx, src_clone[0]); } + } else if (tensor->op == GGML_OP_SOFT_MAX_BACK) { + tensor_clone = ggml_soft_max_ext_back(ggml_ctx, src_clone[0], src_clone[1], ((float *)tensor->op_params)[0], ((float *)tensor->op_params)[1]); + } else if (tensor->op == GGML_OP_DIAG_MASK_INF) { + tensor_clone = ggml_diag_mask_inf(ggml_ctx, src_clone[0], tensor->op_params[0]); + } else if (tensor->op == GGML_OP_ROPE || tensor->op == GGML_OP_ROPE_BACK) { + const int n_dims = ((int32_t *) tensor->op_params)[1]; + const int mode = ((int32_t *) tensor->op_params)[2]; + //const int n_ctx_ggml = ((int32_t *) tensor->op_params)[3]; + const int n_ctx_orig_ggml = ((int32_t *) tensor->op_params)[4]; + const float freq_base = ((float *) tensor->op_params)[5]; + const float freq_scale = ((float *) tensor->op_params)[6]; + const float ext_factor = ((float *) tensor->op_params)[7]; + const float attn_factor = ((float *) tensor->op_params)[8]; + const float beta_fast = ((float *) tensor->op_params)[9]; + const float beta_slow = ((float *) tensor->op_params)[10]; + if (mode & GGML_ROPE_TYPE_MROPE) { + int32_t *sections = ((int32_t *) tensor->op_params) + 11; + if (tensor->op == GGML_OP_ROPE) { + tensor_clone = ggml_rope_multi(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], n_dims, sections, mode, n_ctx_orig_ggml, freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow); + } else { + tensor_clone = ggml_rope_multi_back(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], n_dims, sections, mode, n_ctx_orig_ggml, freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow); + } + } else { + if (tensor->op == GGML_OP_ROPE) { + tensor_clone = ggml_rope_ext(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], n_dims, mode, n_ctx_orig_ggml, freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow); + } else { + tensor_clone = ggml_rope_ext_back(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], n_dims, mode, n_ctx_orig_ggml, freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow); + } + } + } else if (tensor->op == GGML_OP_UNARY) { + switch (ggml_get_unary_op(tensor)) { + case GGML_UNARY_OP_EXP: + tensor_clone = ggml_exp(ggml_ctx, src_clone[0]); + break; + case GGML_UNARY_OP_SILU: + tensor_clone = ggml_silu(ggml_ctx, src_clone[0]); + break; + case GGML_UNARY_OP_GELU: + tensor_clone = ggml_gelu(ggml_ctx, src_clone[0]); + break; + case GGML_UNARY_OP_GELU_ERF: + tensor_clone = ggml_gelu_erf(ggml_ctx, src_clone[0]); + break; + case GGML_UNARY_OP_GELU_QUICK: + tensor_clone = ggml_gelu_quick(ggml_ctx, src_clone[0]); + break; + case GGML_UNARY_OP_RELU: + tensor_clone = ggml_relu(ggml_ctx, src_clone[0]); + break; + case GGML_UNARY_OP_TANH: + tensor_clone = ggml_tanh(ggml_ctx, src_clone[0]); + break; + case GGML_UNARY_OP_SIGMOID: + tensor_clone = ggml_sigmoid(ggml_ctx, src_clone[0]); + break; + case GGML_UNARY_OP_HARDSIGMOID: + tensor_clone = ggml_hardsigmoid(ggml_ctx, src_clone[0]); + break; + case GGML_UNARY_OP_HARDSWISH: + tensor_clone = ggml_hardswish(ggml_ctx, src_clone[0]); + break; + default: + std::cerr << "Missing vk_check_results OP: " << ggml_op_name(tensor->op) << std::endl; + GGML_ABORT("fatal error"); + } + } else if (tensor->op == GGML_OP_GLU) { + if (src_clone[1] == nullptr) { + tensor_clone = ggml_glu(ggml_ctx, src_clone[0], (ggml_glu_op) tensor->op_params[0], tensor->op_params[1]); + } else { + tensor_clone = ggml_glu_split(ggml_ctx, src_clone[0], src_clone[1], (ggml_glu_op) tensor->op_params[0]); + } + ggml_set_op_params_i32(tensor_clone, 2, ggml_get_op_params_i32(tensor, 2)); + ggml_set_op_params_i32(tensor_clone, 3, ggml_get_op_params_i32(tensor, 3)); + } else if (tensor->op == GGML_OP_CPY || tensor->op == GGML_OP_DUP) { + if (tensor->src[1] == nullptr) { + tensor_clone = ggml_dup(ggml_ctx, src_clone[0]); + tensor_clone->type = tensor->type; + } else { + tensor_clone = ggml_cpy(ggml_ctx, src_clone[0], src_clone[1]); + } + } else if (tensor->op == GGML_OP_CONT) { + tensor_clone = ggml_cont_4d(ggml_ctx, src_clone[0], tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]); + } else if (tensor->op == GGML_OP_RESHAPE) { + tensor_clone = ggml_reshape_4d(ggml_ctx, src_clone[0], tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]); + } else if (tensor->op == GGML_OP_VIEW) { + tensor_clone = ggml_view_4d(ggml_ctx, src_clone[0], tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3], tensor->nb[1], tensor->nb[2], tensor->nb[3], ((int32_t *) tensor->op_params)[0]); + } else if (tensor->op == GGML_OP_PERMUTE) { + int32_t * params = (int32_t *)tensor->op_params; + tensor_clone = ggml_permute(ggml_ctx, src_clone[0], params[0], params[1], params[2], params[3]); + } else if (tensor->op == GGML_OP_TRANSPOSE) { + tensor_clone = ggml_transpose(ggml_ctx, src_clone[0]); + } else if (tensor->op == GGML_OP_GET_ROWS) { + tensor_clone = ggml_get_rows(ggml_ctx, src_clone[0], src_clone[1]); + } else if (tensor->op == GGML_OP_ARGSORT) { + tensor_clone = ggml_argsort(ggml_ctx, src_clone[0], (ggml_sort_order) *(int *)tensor->op_params); + } else if (tensor->op == GGML_OP_SUM) { + tensor_clone = ggml_sum(ggml_ctx, src_clone[0]); + } else if (tensor->op == GGML_OP_SUM_ROWS) { + tensor_clone = ggml_sum_rows(ggml_ctx, src_clone[0]); + } else if (tensor->op == GGML_OP_MEAN) { + tensor_clone = ggml_mean(ggml_ctx, src_clone[0]); + } else if (tensor->op == GGML_OP_ARGMAX) { + tensor_clone = ggml_argmax(ggml_ctx, src_clone[0]); + } else if (tensor->op == GGML_OP_COUNT_EQUAL) { + tensor_clone = ggml_count_equal(ggml_ctx, src_clone[0], src_clone[1]); + } else if (tensor->op == GGML_OP_IM2COL) { + const int32_t s0 = tensor->op_params[0]; + const int32_t s1 = tensor->op_params[1]; + const int32_t p0 = tensor->op_params[2]; + const int32_t p1 = tensor->op_params[3]; + const int32_t d0 = tensor->op_params[4]; + const int32_t d1 = tensor->op_params[5]; + + const bool is_2D = tensor->op_params[6] == 1; + tensor_clone = ggml_im2col(ggml_ctx, src_clone[0], src_clone[1], s0, s1, p0, p1, d0, d1, is_2D, tensor->type); + } else if (tensor->op == GGML_OP_IM2COL_3D) { + const int32_t s0 = tensor->op_params[0]; + const int32_t s1 = tensor->op_params[1]; + const int32_t s2 = tensor->op_params[2]; + const int32_t p0 = tensor->op_params[3]; + const int32_t p1 = tensor->op_params[4]; + const int32_t p2 = tensor->op_params[5]; + const int32_t d0 = tensor->op_params[6]; + const int32_t d1 = tensor->op_params[7]; + const int32_t d2 = tensor->op_params[8]; + const int32_t IC = tensor->op_params[9]; + + tensor_clone = ggml_im2col_3d(ggml_ctx, src_clone[0], src_clone[1], IC, s0, s1, s2, p0, p1, p2, d0, d1, d2, tensor->type); + } else if (tensor->op == GGML_OP_TIMESTEP_EMBEDDING) { + const int32_t dim = tensor->op_params[0]; + const int32_t max_period = tensor->op_params[1]; + tensor_clone = ggml_timestep_embedding(ggml_ctx, src_clone[0], dim, max_period); + } else if (tensor->op == GGML_OP_CONV_TRANSPOSE_1D){ + const int32_t s0 = tensor->op_params[0]; + const int32_t p0 = tensor->op_params[1]; + const int32_t d0 = tensor->op_params[2]; + tensor_clone = ggml_conv_transpose_1d(ggml_ctx, src_clone[0], src_clone[1], s0, p0, d0); + } else if (tensor->op == GGML_OP_POOL_2D) { + enum ggml_op_pool op = static_cast(tensor->op_params[0]); + const int32_t k0 = tensor->op_params[1]; + const int32_t k1 = tensor->op_params[2]; + const int32_t s0 = tensor->op_params[3]; + const int32_t s1 = tensor->op_params[4]; + const int32_t p0 = tensor->op_params[5]; + const int32_t p1 = tensor->op_params[6]; + + tensor_clone = ggml_pool_2d(ggml_ctx, src_clone[0], op, k0, k1, s0, s1, p0, p1); + } else if (tensor->op == GGML_OP_CONV_2D) { + const int32_t s0 = tensor->op_params[0]; + const int32_t s1 = tensor->op_params[1]; + const int32_t p0 = tensor->op_params[2]; + const int32_t p1 = tensor->op_params[3]; + const int32_t d0 = tensor->op_params[4]; + const int32_t d1 = tensor->op_params[5]; + tensor_clone = ggml_conv_2d(ggml_ctx, src_clone[0], src_clone[1], s0, s1, p0, p1, d0, d1); + } else if (tensor->op == GGML_OP_CONV_2D_DW) { + const int32_t s0 = tensor->op_params[0]; + const int32_t s1 = tensor->op_params[1]; + const int32_t p0 = tensor->op_params[2]; + const int32_t p1 = tensor->op_params[3]; + const int32_t d0 = tensor->op_params[4]; + const int32_t d1 = tensor->op_params[5]; + tensor_clone = ggml_conv_2d_dw_direct(ggml_ctx, src_clone[0], src_clone[1], s0, s1, p0, p1, d0, d1); + } else if (tensor->op == GGML_OP_CONV_TRANSPOSE_2D) { + const int32_t s = tensor->op_params[0]; + tensor_clone = ggml_conv_transpose_2d_p0(ggml_ctx, src_clone[0], src_clone[1], s); + } else if (tensor->op == GGML_OP_LEAKY_RELU) { + const float * op_params = (const float *)tensor->op_params; + tensor_clone = ggml_leaky_relu(ggml_ctx, src_clone[0], op_params[0], false); + } else if (tensor->op == GGML_OP_RWKV_WKV6) { + tensor_clone = ggml_rwkv_wkv6(ggml_ctx, src_clone[0], src_clone[1], + src_clone[2], src_clone[3], src_clone[4], src_clone[5]); + } else if (tensor->op == GGML_OP_RWKV_WKV7) { + tensor_clone = ggml_rwkv_wkv7(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], src_clone[3], + src_clone[4], src_clone[5], src_clone[6]); + } else if (tensor->op == GGML_OP_OPT_STEP_ADAMW) { + src_clone[0]->flags = tensor->src[0]->flags; + tensor_clone = ggml_opt_step_adamw(ggml_ctx, src_clone[0], src_clone[1], + src_clone[2], src_clone[3], src_clone[4]); + } else if (tensor->op == GGML_OP_OPT_STEP_SGD) { + src_clone[0]->flags = tensor->src[0]->flags; + tensor_clone = ggml_opt_step_sgd(ggml_ctx, src_clone[0], src_clone[1], + src_clone[2]); + } else if (tensor->op == GGML_OP_ADD_ID) { + tensor_clone = ggml_add_id(ggml_ctx, src_clone[0], src_clone[1], src_clone[2]); + } else if (tensor->op == GGML_OP_SSM_SCAN) { + tensor_clone = ggml_ssm_scan(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], + src_clone[3], src_clone[4], src_clone[5], src_clone[6]); + } else if (tensor->op == GGML_OP_SSM_CONV) { + tensor_clone = ggml_ssm_conv(ggml_ctx, src_clone[0], src_clone[1]); + } else if (tensor->op == GGML_OP_ROLL) { + const int32_t s0 = tensor->op_params[0]; + const int32_t s1 = tensor->op_params[1]; + const int32_t s2 = tensor->op_params[2]; + const int32_t s3 = tensor->op_params[3]; + tensor_clone = ggml_roll(ggml_ctx, src_clone[0], s0, s1, s2, s3); } - } else if (tensor->op == GGML_OP_UNARY) { - switch (ggml_get_unary_op(tensor)) { - case GGML_UNARY_OP_EXP: - tensor_clone = ggml_exp(ggml_ctx, src_clone[0]); - break; - case GGML_UNARY_OP_SILU: - tensor_clone = ggml_silu(ggml_ctx, src_clone[0]); - break; - case GGML_UNARY_OP_GELU: - tensor_clone = ggml_gelu(ggml_ctx, src_clone[0]); - break; - case GGML_UNARY_OP_GELU_ERF: - tensor_clone = ggml_gelu_erf(ggml_ctx, src_clone[0]); - break; - case GGML_UNARY_OP_GELU_QUICK: - tensor_clone = ggml_gelu_quick(ggml_ctx, src_clone[0]); - break; - case GGML_UNARY_OP_RELU: - tensor_clone = ggml_relu(ggml_ctx, src_clone[0]); - break; - case GGML_UNARY_OP_TANH: - tensor_clone = ggml_tanh(ggml_ctx, src_clone[0]); - break; - case GGML_UNARY_OP_SIGMOID: - tensor_clone = ggml_sigmoid(ggml_ctx, src_clone[0]); - break; - case GGML_UNARY_OP_HARDSIGMOID: - tensor_clone = ggml_hardsigmoid(ggml_ctx, src_clone[0]); - break; - case GGML_UNARY_OP_HARDSWISH: - tensor_clone = ggml_hardswish(ggml_ctx, src_clone[0]); - break; - default: + else { std::cerr << "Missing vk_check_results OP: " << ggml_op_name(tensor->op) << std::endl; GGML_ABORT("fatal error"); } - } else if (tensor->op == GGML_OP_GLU) { - if (src_clone[1] == nullptr) { - tensor_clone = ggml_glu(ggml_ctx, src_clone[0], (ggml_glu_op) tensor->op_params[0], tensor->op_params[1]); - } else { - tensor_clone = ggml_glu_split(ggml_ctx, src_clone[0], src_clone[1], (ggml_glu_op) tensor->op_params[0]); - } - ggml_set_op_params_i32(tensor_clone, 2, ggml_get_op_params_i32(tensor, 2)); - ggml_set_op_params_i32(tensor_clone, 3, ggml_get_op_params_i32(tensor, 3)); - } else if (tensor->op == GGML_OP_CPY || tensor->op == GGML_OP_DUP) { - if (src1 == nullptr) { - tensor_clone = ggml_dup(ggml_ctx, src_clone[0]); - tensor_clone->type = tensor->type; - } else { - tensor_clone = ggml_cpy(ggml_ctx, src_clone[0], src_clone[1]); - } - } else if (tensor->op == GGML_OP_CONT) { - tensor_clone = ggml_cont_4d(ggml_ctx, src_clone[0], tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]); - } else if (tensor->op == GGML_OP_RESHAPE) { - tensor_clone = ggml_reshape_4d(ggml_ctx, src_clone[0], tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3]); - } else if (tensor->op == GGML_OP_VIEW) { - tensor_clone = ggml_view_4d(ggml_ctx, src_clone[0], tensor->ne[0], tensor->ne[1], tensor->ne[2], tensor->ne[3], tensor->nb[1], tensor->nb[2], tensor->nb[3], ((int32_t *) tensor->op_params)[0]); - } else if (tensor->op == GGML_OP_PERMUTE) { - int32_t * params = (int32_t *)tensor->op_params; - tensor_clone = ggml_permute(ggml_ctx, src_clone[0], params[0], params[1], params[2], params[3]); - } else if (tensor->op == GGML_OP_TRANSPOSE) { - tensor_clone = ggml_transpose(ggml_ctx, src_clone[0]); - } else if (tensor->op == GGML_OP_GET_ROWS) { - tensor_clone = ggml_get_rows(ggml_ctx, src_clone[0], src_clone[1]); - } else if (tensor->op == GGML_OP_ARGSORT) { - tensor_clone = ggml_argsort(ggml_ctx, src_clone[0], (ggml_sort_order) *(int *)tensor->op_params); - } else if (tensor->op == GGML_OP_SUM) { - tensor_clone = ggml_sum(ggml_ctx, src_clone[0]); - } else if (tensor->op == GGML_OP_SUM_ROWS) { - tensor_clone = ggml_sum_rows(ggml_ctx, src_clone[0]); - } else if (tensor->op == GGML_OP_MEAN) { - tensor_clone = ggml_mean(ggml_ctx, src_clone[0]); - } else if (tensor->op == GGML_OP_ARGMAX) { - tensor_clone = ggml_argmax(ggml_ctx, src_clone[0]); - } else if (tensor->op == GGML_OP_COUNT_EQUAL) { - tensor_clone = ggml_count_equal(ggml_ctx, src_clone[0], src_clone[1]); - } else if (tensor->op == GGML_OP_IM2COL) { - const int32_t s0 = tensor->op_params[0]; - const int32_t s1 = tensor->op_params[1]; - const int32_t p0 = tensor->op_params[2]; - const int32_t p1 = tensor->op_params[3]; - const int32_t d0 = tensor->op_params[4]; - const int32_t d1 = tensor->op_params[5]; - - const bool is_2D = tensor->op_params[6] == 1; - tensor_clone = ggml_im2col(ggml_ctx, src_clone[0], src_clone[1], s0, s1, p0, p1, d0, d1, is_2D, tensor->type); - } else if (tensor->op == GGML_OP_IM2COL_3D) { - const int32_t s0 = tensor->op_params[0]; - const int32_t s1 = tensor->op_params[1]; - const int32_t s2 = tensor->op_params[2]; - const int32_t p0 = tensor->op_params[3]; - const int32_t p1 = tensor->op_params[4]; - const int32_t p2 = tensor->op_params[5]; - const int32_t d0 = tensor->op_params[6]; - const int32_t d1 = tensor->op_params[7]; - const int32_t d2 = tensor->op_params[8]; - const int32_t IC = tensor->op_params[9]; - - tensor_clone = ggml_im2col_3d(ggml_ctx, src_clone[0], src_clone[1], IC, s0, s1, s2, p0, p1, p2, d0, d1, d2, tensor->type); - } else if (tensor->op == GGML_OP_TIMESTEP_EMBEDDING) { - const int32_t dim = tensor->op_params[0]; - const int32_t max_period = tensor->op_params[1]; - tensor_clone = ggml_timestep_embedding(ggml_ctx, src_clone[0], dim, max_period); - } else if (tensor->op == GGML_OP_CONV_TRANSPOSE_1D){ - const int32_t s0 = tensor->op_params[0]; - const int32_t p0 = tensor->op_params[1]; - const int32_t d0 = tensor->op_params[2]; - tensor_clone = ggml_conv_transpose_1d(ggml_ctx, src_clone[0], src_clone[1], s0, p0, d0); - } else if (tensor->op == GGML_OP_POOL_2D) { - enum ggml_op_pool op = static_cast(tensor->op_params[0]); - const int32_t k0 = tensor->op_params[1]; - const int32_t k1 = tensor->op_params[2]; - const int32_t s0 = tensor->op_params[3]; - const int32_t s1 = tensor->op_params[4]; - const int32_t p0 = tensor->op_params[5]; - const int32_t p1 = tensor->op_params[6]; - - tensor_clone = ggml_pool_2d(ggml_ctx, src_clone[0], op, k0, k1, s0, s1, p0, p1); - } else if (tensor->op == GGML_OP_CONV_2D) { - const int32_t s0 = tensor->op_params[0]; - const int32_t s1 = tensor->op_params[1]; - const int32_t p0 = tensor->op_params[2]; - const int32_t p1 = tensor->op_params[3]; - const int32_t d0 = tensor->op_params[4]; - const int32_t d1 = tensor->op_params[5]; - tensor_clone = ggml_conv_2d(ggml_ctx, src_clone[0], src_clone[1], s0, s1, p0, p1, d0, d1); - } else if (tensor->op == GGML_OP_CONV_TRANSPOSE_2D) { - const int32_t s = tensor->op_params[0]; - tensor_clone = ggml_conv_transpose_2d_p0(ggml_ctx, src_clone[0], src_clone[1], s); - } else if (tensor->op == GGML_OP_LEAKY_RELU) { - const float * op_params = (const float *)tensor->op_params; - tensor_clone = ggml_leaky_relu(ggml_ctx, src_clone[0], op_params[0], false); - } else if (tensor->op == GGML_OP_RWKV_WKV6) { - tensor_clone = ggml_rwkv_wkv6(ggml_ctx, src_clone[0], src_clone[1], - src_clone[2], src_clone[3], src_clone[4], src_clone[5]); - } else if (tensor->op == GGML_OP_RWKV_WKV7) { - tensor_clone = ggml_rwkv_wkv7(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], src_clone[3], - src_clone[4], src_clone[5], src_clone[6]); - } else if (tensor->op == GGML_OP_OPT_STEP_ADAMW) { - src_clone[0]->flags = src0->flags; - tensor_clone = ggml_opt_step_adamw(ggml_ctx, src_clone[0], src_clone[1], - src_clone[2], src_clone[3], src_clone[4]); - } else if (tensor->op == GGML_OP_OPT_STEP_SGD) { - src_clone[0]->flags = src0->flags; - tensor_clone = ggml_opt_step_sgd(ggml_ctx, src_clone[0], src_clone[1], - src_clone[2]); - } else if (tensor->op == GGML_OP_ADD_ID) { - tensor_clone = ggml_add_id(ggml_ctx, src_clone[0], src_clone[1], src_clone[2]); - } else if (tensor->op == GGML_OP_SSM_SCAN) { - tensor_clone = ggml_ssm_scan(ggml_ctx, src_clone[0], src_clone[1], src_clone[2], - src_clone[3], src_clone[4], src_clone[5], src_clone[6]); - } else if (tensor->op == GGML_OP_SSM_CONV) { - tensor_clone = ggml_ssm_conv(ggml_ctx, src_clone[0], src_clone[1]); - } - else { - std::cerr << "Missing vk_check_results OP: " << ggml_op_name(tensor->op) << std::endl; - GGML_ABORT("fatal error"); + cloned_tensors[tensor] = tensor_clone; } ggml_cgraph * cgraph_cpu = ggml_new_graph(ggml_ctx); @@ -14476,10 +14475,8 @@ static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph * memcpy(comp_result, tensor_clone->data, comp_size); memcpy(comp_nb, tensor_clone->nb, sizeof(size_t) * GGML_MAX_DIMS); - for (int i = 0; i < GGML_MAX_SRC; i++) { - if (src_buffer[i] != nullptr) { - free(src_buffer[i]); - } + for (auto m : cloned_mallocs) { + free(m); } ggml_free(ggml_ctx); @@ -14488,15 +14485,10 @@ static void ggml_vk_check_results_0(ggml_backend_vk_context * ctx, ggml_cgraph * } static void ggml_vk_check_results_1(ggml_backend_vk_context * ctx, ggml_cgraph * cgraph, int tensor_idx) { - ggml_tensor * tensor = cgraph->nodes[tensor_idx]; + ggml_tensor * tensor = cgraph->nodes[tensor_idx + ctx->num_additional_fused_ops]; if (tensor->op == GGML_OP_TRANSPOSE || tensor->op == GGML_OP_SET_ROWS) { return; } - if (ctx->num_additional_fused_ops == 1 && - tensor->op == GGML_OP_RMS_NORM && - cgraph->nodes[tensor_idx + 1]->op == GGML_OP_MUL) { - tensor = cgraph->nodes[tensor_idx + 1]; - } if (!(vk_output_tensor > 0 && vk_output_tensor == check_counter) && check_counter <= vk_skip_checks) { return; From 230d1169e5bfe04a013b2e20f4662ee56c2454b0 Mon Sep 17 00:00:00 2001 From: bssrdf Date: Wed, 5 Nov 2025 15:55:04 -0500 Subject: [PATCH 03/69] improve CUDA cpy memory bandwidth when copying transposed tensor (#16841) * WIP * added a cpy kernel specific to transposed tensor which uses smem to avoid uncoalesced access; test cases also added shwoing improved memory bandwidth * added BF16 support * more strict check to make sure src0 is a transpose * reformulated to handle more complicated transpose cases * bring back 2D transpose for higher performance * allow build on windows * tranpose copy more shapes * minor tweak * final clean up * restore some test cases * keep only the kernel for true tranposed case; updated with review suggestions * make CI happy * remove headers not needed * reduced bank conflicts for fp16 and bf16 * add missing const* * now bank conflicts free * use padding instead of swizzling --------- Co-authored-by: bssrdf --- ggml/src/ggml-cuda/cpy.cu | 103 ++++++++++++++++++++++++++++++++++--- tests/test-backend-ops.cpp | 33 ++++++++++-- 2 files changed, 126 insertions(+), 10 deletions(-) diff --git a/ggml/src/ggml-cuda/cpy.cu b/ggml/src/ggml-cuda/cpy.cu index c5821acbde..1dba60eb14 100644 --- a/ggml/src/ggml-cuda/cpy.cu +++ b/ggml/src/ggml-cuda/cpy.cu @@ -7,6 +7,10 @@ typedef void (*cpy_kernel_t)(const char * cx, char * cdst); +const int CUDA_CPY_TILE_DIM_2D = 32; // 2D tile dimension for transposed blocks +const int CUDA_CPY_BLOCK_NM = 8; // block size of 3rd dimension if available +const int CUDA_CPY_BLOCK_ROWS = 8; // block dimension for marching through rows + template static __global__ void cpy_flt(const char * cx, char * cdst, const int ne, const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, @@ -35,6 +39,55 @@ static __global__ void cpy_flt(const char * cx, char * cdst, const int ne, cpy_1(cx + x_offset, cdst + dst_offset); } +template +static __global__ void cpy_flt_transpose(const char * cx, char * cdst, const int ne, + const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, + const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, + const int nb12, const int nb13) { + + const T* src = reinterpret_cast(cx); + T* dst = reinterpret_cast(cdst); + + const int64_t nmat = ne / (ne00 * ne01); + const int64_t n = ne00 * ne01; + + const int x = blockIdx.x * CUDA_CPY_TILE_DIM_2D + threadIdx.x; + const int y = blockIdx.y * CUDA_CPY_TILE_DIM_2D + threadIdx.y; + const int tx = blockIdx.y * CUDA_CPY_TILE_DIM_2D + threadIdx.x; // transpose block offset + const int ty = blockIdx.x * CUDA_CPY_TILE_DIM_2D + threadIdx.y; + + __shared__ float tile[CUDA_CPY_TILE_DIM_2D][CUDA_CPY_TILE_DIM_2D+1]; + +#pragma unroll + for (int i = 0; i < CUDA_CPY_BLOCK_NM; ++i) { + + const unsigned int imat = blockIdx.z * CUDA_CPY_BLOCK_NM + i; + if (imat >= nmat) + break; + +#pragma unroll + for (int j = 0; j < CUDA_CPY_TILE_DIM_2D; j += CUDA_CPY_BLOCK_ROWS) { + if(x < ne01 && y + j < ne00){ + const int row = threadIdx.y+j; + const int col = threadIdx.x * sizeof(float)/sizeof(T); + T *tile2 = reinterpret_cast(tile[row]); + tile2[col] = src[imat*n + (y+j)*ne01 + x]; + } + } + + __syncthreads(); + +#pragma unroll + for (int j = 0; j < CUDA_CPY_TILE_DIM_2D; j += CUDA_CPY_BLOCK_ROWS) { + if (ty + j < ne01 && tx < ne00) { + const int col = (threadIdx.y+j)*sizeof(float)/sizeof(T); + const T *tile2 = reinterpret_cast(tile[threadIdx.x]); + dst[imat*n + (ty+j)*ne00 + tx] = tile2[col]; + } + } + } +} + static __device__ void cpy_blck_q8_0_f32(const char * cxi, char * cdsti) { float * cdstf = (float *)(cdsti); @@ -136,15 +189,38 @@ cudaStream_t stream) { (cx, cdst, ne); } -template +template static void ggml_cpy_flt_cuda( const char * cx, char * cdst, const int ne, const int ne00, const int ne01, const int ne02, const int nb00, const int nb01, const int nb02, const int nb03, const int ne10, const int ne11, const int ne12, const int nb10, const int nb11, const int nb12, const int nb13, cudaStream_t stream) { - const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE; - cpy_flt><<>> - (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); + if (transposed) { + GGML_ASSERT(ne == ne00*ne01*ne02); // ne[3] is 1 assumed + int ne00n, ne01n, ne02n; + if (nb00 < nb02) { + ne00n = ne00; + ne01n = ne01; + ne02n = ne02; + } else if (nb00 > nb02) { + ne00n = ne00; + ne01n = ne01*ne02; + ne02n = 1; + } else { + GGML_ASSERT(false); + } + + dim3 dimGrid( (ne01n + CUDA_CPY_TILE_DIM_2D - 1) / CUDA_CPY_TILE_DIM_2D, + (ne00n + CUDA_CPY_TILE_DIM_2D - 1) / CUDA_CPY_TILE_DIM_2D, + (ne/(ne01n*ne00n) + CUDA_CPY_BLOCK_NM - 1) / CUDA_CPY_BLOCK_NM); + dim3 dimBlock(CUDA_CPY_TILE_DIM_2D, CUDA_CPY_BLOCK_ROWS, 1); + cpy_flt_transpose<<>> + (cx, cdst, ne, ne00n, ne01n, ne02n, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); + } else { + const int num_blocks = (ne + CUDA_CPY_BLOCK_SIZE - 1) / CUDA_CPY_BLOCK_SIZE; + cpy_flt><<>> + (cx, cdst, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13); + } } static void ggml_cpy_f32_q8_0_cuda( @@ -310,6 +386,7 @@ void ggml_cuda_cpy(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, gg char * src1_ddc = (char *) src1->data; const bool contiguous_srcs = ggml_is_contiguous(src0) && ggml_is_contiguous(src1); + const bool can_be_transposed = nb01 == (int64_t)ggml_element_size(src0) && src0->ne[3] == 1; if (src0->type == src1->type && contiguous_srcs) { GGML_ASSERT(ggml_nbytes(src0) == ggml_nbytes(src1)); @@ -322,7 +399,11 @@ void ggml_cuda_cpy(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, gg CUDA_CHECK(cudaMemcpyAsync(src1_ddc, src0_ddc, ggml_nbytes(src0), cudaMemcpyDeviceToDevice, main_stream)); } } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_F32) { - ggml_cpy_flt_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); + if (can_be_transposed) { + ggml_cpy_flt_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); + } else { + ggml_cpy_flt_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); + } } else if (src0->type == GGML_TYPE_F32 && src1->type == GGML_TYPE_BF16) { if (contiguous_srcs) { ggml_cpy_flt_contiguous_cuda (src0_ddc, src1_ddc, ne, main_stream); @@ -361,7 +442,11 @@ void ggml_cuda_cpy(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, gg } else if (src0->type == GGML_TYPE_Q5_1 && src1->type == GGML_TYPE_F32) { ggml_cpy_q5_1_f32_cuda(src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_F16) { - ggml_cpy_flt_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); + if (can_be_transposed) { + ggml_cpy_flt_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); + } else { + ggml_cpy_flt_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); + } } else if (src0->type == GGML_TYPE_F16 && src1->type == GGML_TYPE_BF16) { if (contiguous_srcs) { ggml_cpy_flt_contiguous_cuda (src0_ddc, src1_ddc, ne, main_stream); @@ -375,7 +460,11 @@ void ggml_cuda_cpy(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, gg ggml_cpy_flt_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); } } else if (src0->type == GGML_TYPE_BF16 && src1->type == GGML_TYPE_BF16) { - ggml_cpy_flt_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); + if (can_be_transposed) { + ggml_cpy_flt_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); + } else { + ggml_cpy_flt_cuda (src0_ddc, src1_ddc, ne, ne00, ne01, ne02, nb00, nb01, nb02, nb03, ne10, ne11, ne12, nb10, nb11, nb12, nb13, main_stream); + } } else if (src0->type == GGML_TYPE_BF16 && src1->type == GGML_TYPE_F16) { if (contiguous_srcs) { ggml_cpy_flt_contiguous_cuda (src0_ddc, src1_ddc, ne, main_stream); diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 967a53c63d..f575420279 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -2576,9 +2576,10 @@ struct test_cpy : public test_case { const std::array permute_dst; bool _src_use_permute; bool _dst_use_permute; + bool _src_transpose; std::string vars() override { - return VARS_TO_STR5(type_src, type_dst, ne, permute_src, permute_dst); + return VARS_TO_STR6(type_src, type_dst, ne, permute_src, permute_dst, _src_transpose); } double max_nmse_err() override { @@ -2616,10 +2617,12 @@ struct test_cpy : public test_case { test_cpy(ggml_type type_src = GGML_TYPE_F32, ggml_type type_dst = GGML_TYPE_F32, std::array ne = {10, 10, 10, 1}, std::array permute_src = {0, 0, 0, 0}, - std::array permute_dst = {0, 0, 0, 0}) + std::array permute_dst = {0, 0, 0, 0}, + bool transpose_src = false) : type_src(type_src), type_dst(type_dst), ne(ne), permute_src(permute_src), permute_dst(permute_dst), _src_use_permute(permute_src[0] + permute_src[1] + permute_src[2] + permute_src[3] > 0), - _dst_use_permute(permute_dst[0] + permute_dst[1] + permute_dst[2] + permute_dst[3] > 0) {} + _dst_use_permute(permute_dst[0] + permute_dst[1] + permute_dst[2] + permute_dst[3] > 0), + _src_transpose(transpose_src){} ggml_tensor * build_graph(ggml_context * ctx) override { ggml_tensor * src = ggml_new_tensor(ctx, type_src, 4, ne.data()); @@ -2631,6 +2634,11 @@ struct test_cpy : public test_case { ggml_set_name(src, "src_permuted"); } + if (_src_transpose) { + src = ggml_transpose(ctx, src); + ggml_set_name(src, "src_transposed"); + } + ggml_tensor * dst = ggml_new_tensor(ctx, type_dst, 4, src->ne); ggml_set_name(dst, "dst"); @@ -6641,6 +6649,13 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_cpy(GGML_TYPE_F32, GGML_TYPE_I32, {256, 2, 3, 4}, {1, 0, 2, 3})); test_cases.emplace_back(new test_cpy(GGML_TYPE_I32, GGML_TYPE_F32, {256, 2, 3, 4})); test_cases.emplace_back(new test_cpy(GGML_TYPE_I32, GGML_TYPE_F32, {256, 2, 3, 4}, {1, 0, 2, 3})); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F16, GGML_TYPE_F16, {256, 4, 3, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F32, GGML_TYPE_F32, {256, 4, 3, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F32, GGML_TYPE_F32, {256, 4, 3, 3}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + test_cases.emplace_back(new test_cpy(GGML_TYPE_BF16, GGML_TYPE_BF16, {256, 4, 3, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F16, GGML_TYPE_F16, {256, 4, 1, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F32, GGML_TYPE_F32, {256, 4, 1, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + test_cases.emplace_back(new test_cpy(GGML_TYPE_BF16, GGML_TYPE_BF16, {256, 4, 1, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); test_cases.emplace_back(new test_cont()); test_cases.emplace_back(new test_cont(GGML_TYPE_F32, {2, 1, 1 ,1})); @@ -7385,6 +7400,18 @@ static std::vector> make_test_cases_perf() { test_cases.emplace_back(new test_cpy(GGML_TYPE_F32, GGML_TYPE_Q4_0, {8192, 512, 2, 1})); test_cases.emplace_back(new test_cpy(GGML_TYPE_Q4_0, GGML_TYPE_F32, {8192, 512, 2, 1})); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F32, GGML_TYPE_F32, {768*1024, 256, 1, 1}, {1, 0, 2, 3}, {0, 0, 0, 0})); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F16, GGML_TYPE_F16, {768*1024, 256, 1, 1}, {1, 0, 2, 3}, {0, 0, 0, 0})); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F16, GGML_TYPE_F16, {768, 1024, 256, 1}, {1, 0, 2, 3}, {0, 0, 0, 0})); + test_cases.emplace_back(new test_cpy(GGML_TYPE_BF16, GGML_TYPE_BF16, {768, 1024, 256, 1}, {1, 0, 2, 3}, {0, 0, 0, 0})); + + test_cases.emplace_back(new test_cpy(GGML_TYPE_F32, GGML_TYPE_F32, {768*1024, 256, 1, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F32, GGML_TYPE_F32, {768, 1024, 256, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F16, GGML_TYPE_F16, {768*1024, 256, 1, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F16, GGML_TYPE_F16, {768, 1024, 256, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + test_cases.emplace_back(new test_cpy(GGML_TYPE_BF16, GGML_TYPE_BF16, {768, 1024, 256, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + + test_cases.emplace_back(new test_soft_max(GGML_TYPE_F32, {4096, 4096, 5, 1}, false, false, GGML_TYPE_F32, {1, 1}, 1.0f, 0.0f)); test_cases.emplace_back(new test_soft_max(GGML_TYPE_F32, {12888, 256, 5, 1}, false, false, GGML_TYPE_F32, {1, 1}, 1.0f, 0.0f)); test_cases.emplace_back(new test_soft_max(GGML_TYPE_F32, {77, 4096, 5, 1}, false, false, GGML_TYPE_F32, {1, 1}, 1.0f, 0.0f)); From 6db3d1ffe6d34e8becfe95cf2f109198a7154db3 Mon Sep 17 00:00:00 2001 From: l3utterfly Date: Thu, 6 Nov 2025 13:46:38 +0800 Subject: [PATCH 04/69] ggml-hexagon: graceful fallback for older socs where rpcmem_alloc2 and FASTRPC_GET_URI is unsupported (#16987) * support older socs where FASTRPC_GET_URI is unsupported * added graceful fallback when FASTRPC_GET_URI call fails * use weak symbols instead of loading libcdsprpc.so dynamically * Add weak pragma for rpcmem_alloc2 * Remove weak declaration for rpcmem_alloc2 in ggml-hexagon.cpp Removed weak declaration for rpcmem_alloc2. * Enforce ndev to 1 for archs below v75 Force ndev to 1 for SoCs architectures lower than v75. --- ggml/src/ggml-hexagon/ggml-hexagon.cpp | 28 ++++++++++++++++++++------ ggml/src/ggml-hexagon/htp-utils.h | 1 + 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/ggml/src/ggml-hexagon/ggml-hexagon.cpp b/ggml/src/ggml-hexagon/ggml-hexagon.cpp index 945652263d..7064b7486f 100644 --- a/ggml/src/ggml-hexagon/ggml-hexagon.cpp +++ b/ggml/src/ggml-hexagon/ggml-hexagon.cpp @@ -367,7 +367,13 @@ struct ggml_backend_hexagon_buffer_context { ggml_backend_hexagon_buffer_context(ggml_hexagon_session * sess, size_t size, bool repack) { size += 4 * 1024; // extra page for padding - this->base = (uint8_t *) rpcmem_alloc2(RPCMEM_HEAP_ID_SYSTEM, RPCMEM_DEFAULT_FLAGS | RPCMEM_HEAP_NOREG, size); + if (rpcmem_alloc2) { + this->base = (uint8_t *) rpcmem_alloc2(RPCMEM_HEAP_ID_SYSTEM, RPCMEM_DEFAULT_FLAGS | RPCMEM_HEAP_NOREG, size); + } else { + GGML_LOG_INFO("ggml-hex: %s rpcmem_alloc2 not found, falling back to rpcmem_alloc\n", sess->name.c_str()); + this->base = (uint8_t *) rpcmem_alloc(RPCMEM_HEAP_ID_SYSTEM, RPCMEM_DEFAULT_FLAGS | RPCMEM_HEAP_NOREG, size); + } + if (!this->base) { GGML_LOG_ERROR("ggml-hex: %s failed to allocate buffer : size %zu\n", sess->name.c_str(), size); throw std::runtime_error("ggml-hex: rpcmem_alloc failed (see log for details)"); @@ -1679,12 +1685,13 @@ void ggml_hexagon_session::allocate(int dev_id) noexcept(false) { } // Get session URI - char htp_uri[256]; - sprintf(htp_uri, "file:///libggml-htp-v%u.so?htp_iface_skel_handle_invoke&_modver=1.0", opt_arch); char session_uri[256]; { - struct remote_rpc_get_uri u; + char htp_uri[256]; + snprintf(htp_uri, sizeof(htp_uri), "file:///libggml-htp-v%u.so?htp_iface_skel_handle_invoke&_modver=1.0", opt_arch); + + struct remote_rpc_get_uri u = {}; u.session_id = this->session_id; u.domain_name = const_cast(CDSP_DOMAIN_NAME); u.domain_name_len = strlen(CDSP_DOMAIN_NAME); @@ -1695,8 +1702,12 @@ void ggml_hexagon_session::allocate(int dev_id) noexcept(false) { int err = remote_session_control(FASTRPC_GET_URI, (void *) &u, sizeof(u)); if (err != AEE_SUCCESS) { - GGML_LOG_ERROR("ggml-hex: failed to get URI for session %d : error 0x%x\n", dev_id, err); - throw std::runtime_error("ggml-hex: remote_session_control(get-uri) failed (see log for details)"); + // fallback to single session uris + int htp_URI_domain_len = strlen(htp_uri) + MAX_DOMAIN_NAMELEN; + + snprintf(session_uri, htp_URI_domain_len, "%s%s", htp_uri, my_domain->uri); + + GGML_LOG_WARN("ggml-hex: failed to get URI for session %d : error 0x%x. Falling back to single session URI: %s\n", dev_id, err, session_uri); } } @@ -3668,6 +3679,11 @@ ggml_hexagon_registry::ggml_hexagon_registry(ggml_backend_reg_t reg) { } } + if(opt_arch < 75) { + opt_ndev = 1; + GGML_LOG_WARN("ggml-hex: forcing ndev to 1 for SoCs archs lower than v75.\n"); + } + GGML_LOG_INFO("ggml-hex: Hexagon Arch version v%d\n", opt_arch); // Create devices / sessions diff --git a/ggml/src/ggml-hexagon/htp-utils.h b/ggml/src/ggml-hexagon/htp-utils.h index 66f9fd373e..1a48f5dcbd 100644 --- a/ggml/src/ggml-hexagon/htp-utils.h +++ b/ggml/src/ggml-hexagon/htp-utils.h @@ -64,6 +64,7 @@ extern "C" { # pragma weak remote_handle64_control # pragma weak fastrpc_mmap # pragma weak fastrpc_munmap +# pragma weak rpcmem_alloc2 #endif #if !defined(_WINDOWS) From 22c8c3c6ad8d6239c366ce3a84ace8b0ac59ef88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Thu, 6 Nov 2025 08:14:35 +0100 Subject: [PATCH 05/69] docs: explain CUDA 11 compilation [no ci] (#16824) --- docs/build.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/docs/build.md b/docs/build.md index b410c710e3..7d244ff013 100644 --- a/docs/build.md +++ b/docs/build.md @@ -178,6 +178,48 @@ GeForce RTX 3070 8.6 cmake -B build -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES="86;89" ``` +### Overriding the CUDA Version + +If you have multiple CUDA installations on your system and want to compile llama.cpp for a specific one, e.g. for CUDA 11.7 installed under `/opt/cuda-11.7`: + +```bash +cmake -B build -DGGML_CUDA=ON -DCMAKE_CUDA_COMPILER=/opt/cuda-11.7/bin/nvcc -DCMAKE_INSTALL_RPATH="/opt/cuda-11.7/lib64;\$ORIGIN" -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON +``` + +#### Fixing Compatibility Issues with Old CUDA and New glibc + +If you try to use an old CUDA version (e.g. v11.7) with a new glibc version you can get errors like this: + +``` +/usr/include/bits/mathcalls.h(83): error: exception specification is + incompatible with that of previous function "cospi" + + + /opt/cuda-11.7/bin/../targets/x86_64-linux/include/crt/math_functions.h(5545): + here +``` + +It seems the least bad solution is to patch the CUDA installation to declare the correct signatures. +Replace the following lines in `/path/to/your/cuda/installation/targets/x86_64-linux/include/crt/math_functions.h`: + +```C++ +// original lines +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double cospi(double x); +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float cospif(float x); +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double sinpi(double x); +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float sinpif(float x); +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double rsqrt(double x); +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float rsqrtf(float x); + +// edited lines +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double cospi(double x) noexcept (true); +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float cospif(float x) noexcept (true); +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double sinpi(double x) noexcept (true); +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float sinpif(float x) noexcept (true); +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ double rsqrt(double x) noexcept (true); +extern __DEVICE_FUNCTIONS_DECL__ __device_builtin__ float rsqrtf(float x) noexcept (true); +``` + ### Runtime CUDA environmental variables You may set the [cuda environmental variables](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#env-vars) at runtime. From 9d7c518d642db8657e2a53a9793c5f039ed8ea5a Mon Sep 17 00:00:00 2001 From: YehuditE Date: Thu, 6 Nov 2025 12:02:33 +0200 Subject: [PATCH 06/69] sycl: add CONCAT operator support (#16047) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * sycl: add CONCAT operator support * cleanup: remove stray lines added by mistake * fix: code format issues in concat.cpp and tests/test-backend-ops.cpp * chore: fix editorconfig violations * cleanup: drop unnecessary i16 type support * docs: update sycl-csv and regenerate ops.md * update docs/ops.md * fix: adapt to upstream master changes after rebase * fix: remove empty files * fix: drop whitespace --------- Co-authored-by: Sigbjørn Skjæret --- docs/ops.md | 2 +- docs/ops/SYCL.csv | 32 +++++------ ggml/src/ggml-sycl/concat.cpp | 99 ++++++++++++++++++-------------- ggml/src/ggml-sycl/ggml-sycl.cpp | 6 +- 4 files changed, 73 insertions(+), 66 deletions(-) diff --git a/docs/ops.md b/docs/ops.md index b8fcf04635..775b938bd1 100644 --- a/docs/ops.md +++ b/docs/ops.md @@ -24,7 +24,7 @@ Legend: | ARGSORT | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | CEIL | ❌ | ❌ | ✅ | 🟡 | ❌ | ❌ | ✅ | ❌ | ❌ | | CLAMP | ❌ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | 🟡 | ❌ | -| CONCAT | ❌ | ✅ | ✅ | 🟡 | ✅ | 🟡 | 🟡 | ✅ | ❌ | +| CONCAT | ❌ | ✅ | ✅ | 🟡 | ✅ | 🟡 | ✅ | ✅ | ❌ | | CONT | ❌ | 🟡 | ✅ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | ❌ | | CONV_2D | ❌ | ❌ | ✅ | 🟡 | ❌ | ✅ | ❌ | ✅ | ❌ | | CONV_2D_DW | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | diff --git a/docs/ops/SYCL.csv b/docs/ops/SYCL.csv index 101e80f64c..d7e71990a8 100644 --- a/docs/ops/SYCL.csv +++ b/docs/ops/SYCL.csv @@ -9307,37 +9307,37 @@ "SYCL0","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=24,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=0,v=0,inplace=1","support","1","yes","SYCL" "SYCL0","ROPE","type=f16,ne_a=[128,32,2,1],n_dims=128,mode=24,n_ctx=512,fs=1.424500,ef=0.746500,af=1.424500,ff=1,v=0,inplace=1","support","1","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=0","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=0","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=0","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=0","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=0","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=0","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=0","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=0","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=0","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=0","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=0","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=0","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=1","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=1","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=1","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=1","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=1","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=1","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=1","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=1","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=1","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=1","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=1","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=1","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=2","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=2","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=2","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=2","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=2","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=2","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=2","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=2","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=2","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=2","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=2","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=2","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=3","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=3","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=0,v=3","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=3","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=3","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=1,v=3","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=3","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=3","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=2,v=3","support","0","yes","SYCL" "SYCL0","CONCAT","type=f32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=3","support","1","yes","SYCL" -"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=3","support","0","no","SYCL" +"SYCL0","CONCAT","type=i32,ne_a=[11,12,13,14],ne_b_d=7,dim=3,v=3","support","0","yes","SYCL" "SYCL0","ARGSORT","type=f32,ne=[8,1,1,1],order=0","support","1","yes","SYCL" "SYCL0","ARGSORT","type=f32,ne=[16,10,10,10],order=0","support","1","yes","SYCL" "SYCL0","ARGSORT","type=f32,ne=[60,10,10,10],order=0","support","1","yes","SYCL" diff --git a/ggml/src/ggml-sycl/concat.cpp b/ggml/src/ggml-sycl/concat.cpp index c768365048..d16215bc91 100644 --- a/ggml/src/ggml-sycl/concat.cpp +++ b/ggml/src/ggml-sycl/concat.cpp @@ -11,9 +11,13 @@ // #include "concat.hpp" -#include "common.hpp" -static void concat_f32_dim0(const float *x, const float *y, float *dst, +static inline size_t elem_size(ggml_type t) { + return ggml_type_size(t) / ggml_blck_size(t); +} + +template +static void concat_T_dim0(const T *x, const T *y, T *dst, const int ne0, const int ne00, const sycl::nd_item<3> &item_ct1) { int nidx = item_ct1.get_local_id(2) + @@ -36,7 +40,8 @@ static void concat_f32_dim0(const float *x, const float *y, float *dst, } } -static void concat_f32_dim1(const float *x, const float *y, float *dst, +template +static void concat_T_dim1(const T *x, const T *y, T *dst, const int ne0, const int ne01, const sycl::nd_item<3> &item_ct1) { int nidx = item_ct1.get_local_id(2) + @@ -59,7 +64,8 @@ static void concat_f32_dim1(const float *x, const float *y, float *dst, } } -static void concat_f32_dim2(const float *x, const float *y, float *dst, +template +static void concat_T_dim2(const T *x, const T *y, T *dst, const int ne0, const int ne02, const sycl::nd_item<3> &item_ct1) { int nidx = item_ct1.get_local_id(2) + @@ -82,45 +88,35 @@ static void concat_f32_dim2(const float *x, const float *y, float *dst, } } -static void concat_f32_sycl(const float *x, const float *y, float *dst, +template +static void concat_T_sycl(const T *x, const T *y, T *dst, int ne00, int ne01, int ne02, int ne0, int ne1, int ne2, int dim, queue_ptr stream) { int num_blocks = (ne0 + SYCL_CONCAT_BLOCK_SIZE - 1) / SYCL_CONCAT_BLOCK_SIZE; sycl::range<3> gridDim(ne2, ne1, num_blocks); switch (dim) { case 0: - stream->parallel_for( - sycl::nd_range<3>(gridDim * - sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - concat_f32_dim0(x, y, dst, ne0, ne00, item_ct1); - }); - break; + stream->parallel_for(sycl::nd_range<3>(gridDim * sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE), + sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE)), + [=](sycl::nd_item<3> item_ct1) { concat_T_dim0(x, y, dst, ne0, ne00, item_ct1); }); + break; case 1: - stream->parallel_for( - sycl::nd_range<3>(gridDim * - sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - concat_f32_dim1(x, y, dst, ne0, ne01, item_ct1); - }); - break; + stream->parallel_for(sycl::nd_range<3>(gridDim * sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE), + sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE)), + [=](sycl::nd_item<3> item_ct1) { concat_T_dim1(x, y, dst, ne0, ne01, item_ct1); }); + break; // dim >=2 will be dispatched to the default path default: - stream->parallel_for( - sycl::nd_range<3>(gridDim * - sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE), - sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE)), - [=](sycl::nd_item<3> item_ct1) { - concat_f32_dim2(x, y, dst, ne0, ne02, item_ct1); - }); - break; + stream->parallel_for(sycl::nd_range<3>(gridDim * sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE), + sycl::range<3>(1, 1, SYCL_CONCAT_BLOCK_SIZE)), + [=](sycl::nd_item<3> item_ct1) { concat_T_dim2(x, y, dst, ne0, ne02, item_ct1); }); + break; } } // non-contiguous kernel (slow) -static void concat_f32_sycl_non_cont( +template +static void concat_T_sycl_non_cont( queue_ptr stream, const char *src0, const char *src1, char *dst, int64_t ne00, int64_t ne01, int64_t ne02, int64_t ne03, uint64_t nb00, uint64_t nb01, uint64_t nb02, uint64_t nb03, int64_t /*ne10*/, @@ -137,24 +133,25 @@ static void concat_f32_sycl_non_cont( int64_t o[4] = { 0, 0, 0, 0 }; o[dim] = dim == 0 ? ne00 : (dim == 1 ? ne01 : (dim == 2 ? ne02 : ne03)); - const float * x; + const T * x; for (int i0 = item_ct1.get_local_id(2); i0 < ne0; i0 += item_ct1.get_local_range(2)) { if (i0 < ne00 && i1 < ne01 && i2 < ne02 && i3 < ne03) { - x = (const float *) (src0 + (i3) *nb03 + (i2) *nb02 + (i1) *nb01 + (i0) *nb00); + x = (const T *) (src0 + (i3) *nb03 + (i2) *nb02 + (i1) *nb01 + (i0) *nb00); } else { - x = (const float *) (src1 + (i3 - o[3]) * nb13 + (i2 - o[2]) * nb12 + (i1 - o[1]) * nb11 + + x = (const T *) (src1 + (i3 - o[3]) * nb13 + (i2 - o[2]) * nb12 + (i1 - o[1]) * nb11 + (i0 - o[0]) * nb10); } - float *y = (float *)(dst + i3 * nb3 + i2 * nb2 + i1 * nb1 + i0 * nb0); + T *y = (T *)(dst + i3 * nb3 + i2 * nb2 + i1 * nb1 + i0 * nb0); *y = *x; } }); } -void ggml_sycl_op_concat(ggml_backend_sycl_context & ctx, ggml_tensor *dst) { +template +void concat_impl_sycl(ggml_backend_sycl_context & ctx, ggml_tensor *dst) { scope_op_debug_print scope_dbg_print(__func__, dst, /*num_src=*/2); const ggml_tensor * src0 = dst->src[0]; const ggml_tensor * src1 = dst->src[1]; @@ -163,15 +160,14 @@ void ggml_sycl_op_concat(ggml_backend_sycl_context & ctx, ggml_tensor *dst) { const int32_t dim = ((int32_t *) dst->op_params)[0]; if (ggml_is_contiguous(src0) && ggml_is_contiguous(src1)) { - const float * src0_d = (const float *) src0->data; - const float * src1_d = (const float *) src1->data; - - float * dst_d = (float *) dst->data; - + const T * src0_d = (const T *) src0->data; + const T * src1_d = (const T *) src1->data; + T * dst_d = (T *) dst->data; + size_t type_size = elem_size(dst->type); if (dim != 3) { for (int i3 = 0; i3 < dst->ne[3]; i3++) { - concat_f32_sycl(src0_d + i3 * (src0->nb[3] / 4), src1_d + i3 * (src1->nb[3] / 4), - dst_d + i3 * (dst->nb[3] / 4), src0->ne[0], src0->ne[1], src0->ne[2], dst->ne[0], + concat_T_sycl(src0_d + i3 * (src0->nb[3] / type_size), src1_d + i3 * (src1->nb[3] / type_size), + dst_d + i3 * (dst->nb[3] / type_size), src0->ne[0], src0->ne[1], src0->ne[2], dst->ne[0], dst->ne[1], dst->ne[2], dim, stream); } } else { @@ -179,13 +175,28 @@ void ggml_sycl_op_concat(ggml_backend_sycl_context & ctx, ggml_tensor *dst) { const size_t size1 = ggml_nbytes(src1); SYCL_CHECK(CHECK_TRY_ERROR(stream->memcpy(dst_d, src0_d, size0).wait())); - SYCL_CHECK(CHECK_TRY_ERROR(stream->memcpy(dst_d + size0 / 4, src1_d, size1).wait())); + SYCL_CHECK(CHECK_TRY_ERROR(stream->memcpy(dst_d + size0 / type_size, src1_d, size1).wait())); } } else { - concat_f32_sycl_non_cont(stream, (const char *) src0->data, (const char *) src1->data, (char *) dst->data, + concat_T_sycl_non_cont(stream, (const char *) src0->data, (const char *) src1->data, (char *) dst->data, src0->ne[0], src0->ne[1], src0->ne[2], src0->ne[3], src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3], src1->ne[0], src1->ne[1], src1->ne[2], src1->ne[3], src1->nb[0], src1->nb[1], src1->nb[2], src1->nb[3], dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3], dst->nb[0], dst->nb[1], dst->nb[2], dst->nb[3], dim); } } + +void ggml_sycl_op_concat(ggml_backend_sycl_context & ctx, ggml_tensor *dst) { + + switch (dst->type) { + case GGML_TYPE_F32: + concat_impl_sycl(ctx, dst); + break; + case GGML_TYPE_I32: + concat_impl_sycl(ctx, dst); + break; + default: + GGML_ASSERT(false && "ggml_sycl_op_concat: unsupported type"); + break; + } +} diff --git a/ggml/src/ggml-sycl/ggml-sycl.cpp b/ggml/src/ggml-sycl/ggml-sycl.cpp index c97c589943..f3b3e36574 100644 --- a/ggml/src/ggml-sycl/ggml-sycl.cpp +++ b/ggml/src/ggml-sycl/ggml-sycl.cpp @@ -4534,16 +4534,12 @@ static bool ggml_backend_sycl_device_supports_op(ggml_backend_dev_t dev, const g } return false; } - case GGML_OP_CONCAT: - { - ggml_type src0_type = op->src[0]->type; - return src0_type != GGML_TYPE_I32 && src0_type != GGML_TYPE_I16; - } case GGML_OP_REPEAT_BACK: { ggml_type src0_type = op->src[0]->type; return src0_type == GGML_TYPE_F32; } + case GGML_OP_CONCAT: case GGML_OP_DUP: case GGML_OP_ARGMAX: case GGML_OP_NONE: From 4882f0ff786088871b3ab3abd9e525a4213ee218 Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Thu, 6 Nov 2025 11:02:54 +0100 Subject: [PATCH 07/69] clip: implement minicpm-v sinusoidal embd using GGML (#17036) * clip: implement minicpm-v sinusoidal embd using GGML * fix repeat op --- tools/mtmd/clip.cpp | 174 ++++++++++++++++---------------------------- 1 file changed, 62 insertions(+), 112 deletions(-) diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp index 16781fb195..d1423b67f9 100644 --- a/tools/mtmd/clip.cpp +++ b/tools/mtmd/clip.cpp @@ -1083,16 +1083,24 @@ struct clip_graph { } ggml_cgraph * build_minicpmv() { - const int batch_size = 1; - GGML_ASSERT(model.class_embedding == nullptr); - const int n_pos = n_patches; + const int n_pos = n_patches; + const int n_embd_proj = clip_n_mmproj_embd(ctx); // position embeddings for the projector (not for ViT) - int n_output_dim = clip_n_mmproj_embd(ctx); - ggml_tensor * pos_embed = ggml_new_tensor_3d(ctx0, GGML_TYPE_F32, n_output_dim, n_pos, batch_size); - ggml_set_name(pos_embed, "pos_embed"); - ggml_set_input(pos_embed); + // see: https://huggingface.co/openbmb/MiniCPM-o-2_6/blob/main/resampler.py#L70 + // base frequency omega + ggml_tensor * omega = ggml_new_tensor_1d(ctx0, GGML_TYPE_F32, n_embd_proj / 4); + ggml_set_name(omega, "omega"); + ggml_set_input(omega); + + // 2D input positions (using float for sinusoidal embeddings) + ggml_tensor * pos_h = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, 1, n_pos); + ggml_set_name(pos_h, "pos_h"); + ggml_set_input(pos_h); + ggml_tensor * pos_w = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, 1, n_pos); + ggml_set_name(pos_w, "pos_w"); + ggml_set_input(pos_w); // for selecting learned pos embd, used by ViT struct ggml_tensor * positions = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, n_pos); @@ -1103,7 +1111,7 @@ struct clip_graph { ggml_tensor * inp = build_inp(); ggml_tensor * embeddings = build_vit( - inp, n_patches, + inp, n_pos, NORM_TYPE_NORMAL, hparams.ffn_op, learned_pos_embd, @@ -1115,17 +1123,39 @@ struct clip_graph { ggml_tensor * v = ggml_mul_mat(ctx0, model.mm_model_kv_proj, embeddings); // norm - q = build_norm(q, model.mm_model_ln_q_w, model.mm_model_ln_q_b, NORM_TYPE_NORMAL, eps, -1); + q = build_norm(q, model.mm_model_ln_q_w, model.mm_model_ln_q_b, NORM_TYPE_NORMAL, eps, -1); v = build_norm(v, model.mm_model_ln_kv_w, model.mm_model_ln_kv_b, NORM_TYPE_NORMAL, eps, -1); + // calculate sinusoidal pos embd + ggml_tensor * pos_embed = nullptr; + { + // outer product + ggml_tensor * omega_b = ggml_repeat_4d(ctx0, omega, omega->ne[0], n_pos, 1, 1); // n_pos rows + ggml_tensor * theta_x = ggml_mul(ctx0, omega_b, pos_w); + ggml_tensor * theta_y = ggml_mul(ctx0, omega_b, pos_h); + // sin and cos + ggml_tensor * pos_embd_x = ggml_concat( + ctx0, + ggml_sin(ctx0, theta_x), + ggml_cos(ctx0, theta_x), + 0 // concat on first dim + ); + ggml_tensor * pos_embd_y = ggml_concat( + ctx0, + ggml_sin(ctx0, theta_y), + ggml_cos(ctx0, theta_y), + 0 // concat on first dim + ); + pos_embed = ggml_concat(ctx0, pos_embd_x, pos_embd_y, 0); + } + // k = v + pos_embed ggml_tensor * k = ggml_add(ctx0, v, pos_embed); // attention { - int n_embd = clip_n_mmproj_embd(ctx); const int d_head = 128; - int n_head = n_embd/d_head; + int n_head = n_embd_proj/d_head; // Use actual config value if available, otherwise fall back to hardcoded values int num_query = ctx->model.hparams.minicpmv_query_num; ggml_tensor * Q = ggml_add(ctx0, @@ -4564,92 +4594,6 @@ int clip_n_output_tokens(const struct clip_ctx * ctx, struct clip_image_f32 * im return n_patches; } -static std::vector>> get_1d_sincos_pos_embed_from_grid_new(int embed_dim, const std::vector> & pos) { - assert(embed_dim % 2 == 0); - int H = pos.size(); - int W = pos[0].size(); - - std::vector omega(embed_dim / 2); - for (int i = 0; i < embed_dim / 2; ++i) { - omega[i] = 1.0 / pow(10000.0, static_cast(i) / (embed_dim / 2)); - } - - std::vector>> emb(H, std::vector>(W, std::vector(embed_dim))); - for (int h = 0; h < H; ++h) { - for (int w = 0; w < W; ++w) { - for (int d = 0; d < embed_dim / 2; ++d) { - float out_value = pos[h][w] * omega[d]; - emb[h][w][d] = sin(out_value); - emb[h][w][d + embed_dim / 2] = cos(out_value); - } - } - } - - return emb; -} - -static std::vector>> get_2d_sincos_pos_embed_from_grid(int embed_dim, const std::vector>> & grid) { - assert(embed_dim % 2 == 0); - std::vector>> emb_h = get_1d_sincos_pos_embed_from_grid_new(embed_dim / 2, grid[0]); // (H, W, D/2) - std::vector>> emb_w = get_1d_sincos_pos_embed_from_grid_new(embed_dim / 2, grid[1]); // (H, W, D/2) - - int H = emb_h.size(); - int W = emb_h[0].size(); - std::vector>> emb(H, std::vector>(W, std::vector(embed_dim))); - - for (int h = 0; h < H; ++h) { - for (int w = 0; w < W; ++w) { - for (int d = 0; d < embed_dim / 2; ++d) { - emb[h][w][d] = emb_h[h][w][d]; - emb[h][w][d + embed_dim / 2] = emb_w[h][w][d]; - } - } - } - return emb; -} - -static std::vector> get_2d_sincos_pos_embed(int embed_dim, const std::pair image_size) { - int grid_h_size = image_size.first; - int grid_w_size = image_size.second; - - std::vector grid_h(grid_h_size); - std::vector grid_w(grid_w_size); - - for (int i = 0; i < grid_h_size; ++i) { - grid_h[i] = static_cast(i); - } - for (int i = 0; i < grid_w_size; ++i) { - grid_w[i] = static_cast(i); - } - - std::vector> grid(grid_h_size, std::vector(grid_w_size)); - for (int h = 0; h < grid_h_size; ++h) { - for (int w = 0; w < grid_w_size; ++w) { - grid[h][w] = grid_w[w]; - } - } - std::vector>> grid_2d = {grid, grid}; - for (int h = 0; h < grid_h_size; ++h) { - for (int w = 0; w < grid_w_size; ++w) { - grid_2d[0][h][w] = grid_h[h]; - grid_2d[1][h][w] = grid_w[w]; - } - } - - std::vector>> pos_embed_3d = get_2d_sincos_pos_embed_from_grid(embed_dim, grid_2d); - - int H = image_size.first; - int W = image_size.second; - std::vector> pos_embed_2d(H * W, std::vector(embed_dim)); - for (int h = 0; h < H; ++h) { - for (int w = 0; w < W; ++w) { - pos_embed_2d[w * H + h] = pos_embed_3d[h][w]; - } - } - - return pos_embed_2d; -} - bool clip_image_encode(struct clip_ctx * ctx, const int n_threads, clip_image_f32 * img, float * vec) { clip_image_f32_batch imgs; clip_image_f32_ptr img_copy(clip_image_f32_init()); @@ -4788,22 +4732,28 @@ bool clip_image_batch_encode(clip_ctx * ctx, const int n_threads, const clip_ima } set_input_i32("positions", positions); - // inspired from resampler of Qwen-VL: - // -> https://huggingface.co/Qwen/Qwen-VL/tree/main - // -> https://huggingface.co/Qwen/Qwen-VL/blob/0547ed36a86561e2e42fecec8fd0c4f6953e33c4/visual.py#L23 - int embed_dim = clip_n_mmproj_embd(ctx); - - // TODO @ngxson : this is very inefficient, can we do this using ggml_sin and ggml_cos? - auto pos_embed_t = get_2d_sincos_pos_embed(embed_dim, std::make_pair(pos_w, pos_h)); - - std::vector pos_embed(embed_dim * pos_w * pos_h); - for(int i = 0; i < pos_w * pos_h; ++i){ - for(int j = 0; j < embed_dim; ++j){ - pos_embed[i * embed_dim + j] = pos_embed_t[i][j]; - } + // inputs for resampler projector + // set the 2D positions (using float for sinusoidal embedding) + int n_patches_per_col = image_size_width / patch_size; + std::vector pos_data(n_pos); + // dimension H + for (int i = 0; i < n_pos; i++) { + pos_data[i] = static_cast(i / n_patches_per_col); } - - set_input_f32("pos_embed", pos_embed); + set_input_f32("pos_h", pos_data); + // dimension W + for (int i = 0; i < n_pos; i++) { + pos_data[i] = static_cast(i % n_patches_per_col); + } + set_input_f32("pos_w", pos_data); + // base frequency omega + const float base_freq = 10000.0f; + const int n_embd_proj = clip_n_mmproj_embd(ctx); + std::vector omega(n_embd_proj / 4); + for (int i = 0; i < n_embd_proj / 4; ++i) { + omega[i] = 1.0f / std::pow(base_freq, static_cast(i) / (n_embd_proj / 4)); + } + set_input_f32("omega", omega); } break; case PROJECTOR_TYPE_QWEN2VL: case PROJECTOR_TYPE_QWEN3VL: From b7f9010d24766792d8887c227a883ed3b315d2be Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 6 Nov 2025 12:09:29 +0200 Subject: [PATCH 08/69] server : disable checkpoints with mtmd (#17045) --- tools/server/server.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/server/server.cpp b/tools/server/server.cpp index f5089bef24..0e1a9afc86 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -3832,7 +3832,9 @@ struct server_context { // the largest pos_min required for a checkpoint to be useful const auto pos_min_thold = std::max(0, n_past - n_swa); - if (n_past > 0 && n_past < slot.prompt.n_tokens()) { + // note: disallow with mtmd contexts for now + // https://github.com/ggml-org/llama.cpp/issues/17043 + if (!mctx && n_past > 0 && n_past < slot.prompt.n_tokens()) { const auto pos_min = llama_memory_seq_pos_min(llama_get_memory(ctx), slot.id); if (pos_min == -1) { SLT_ERR(slot, "n_past = %d, slot.prompt.tokens.size() = %d, seq_id = %d, pos_min = %d\n", n_past, (int) slot.prompt.tokens.size(), slot.id, pos_min); From 5b180c3d60f3df61cd9955bc5c69e64537958f92 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Thu, 6 Nov 2025 14:45:10 +0200 Subject: [PATCH 09/69] metal : initial Metal4 tensor API support (#16634) * metal : rework mat-mat multiplication * metal : initial Metal4 support * cont * metal : detect tensor support * cont : better ifdefs * metal : support tensors in mul_mm_id * metal : add env for disabling tensor API * tests : restore * metal : remove unused constants * metal : fix check for bfloat tensor support * cont : handle API incompatibilities * cont : handle even more incompatibilities * metal : use tensor API only on M5 and later --- ggml/src/ggml-metal/ggml-metal-context.m | 5 +- ggml/src/ggml-metal/ggml-metal-device.h | 5 +- ggml/src/ggml-metal/ggml-metal-device.m | 211 ++++++++- ggml/src/ggml-metal/ggml-metal.metal | 543 +++++++++++++++++------ 4 files changed, 617 insertions(+), 147 deletions(-) diff --git a/ggml/src/ggml-metal/ggml-metal-context.m b/ggml/src/ggml-metal/ggml-metal-context.m index 052efb7ace..b8d35b78ad 100644 --- a/ggml/src/ggml-metal/ggml-metal-context.m +++ b/ggml/src/ggml-metal/ggml-metal-context.m @@ -35,7 +35,6 @@ struct ggml_metal { // additional, inference-time compiled pipelines ggml_metal_pipelines_t pipelines_ext; - bool use_bfloat; bool use_fusion; bool use_concurrency; bool use_graph_optimize; @@ -121,11 +120,10 @@ ggml_metal_t ggml_metal_init(ggml_metal_device_t dev) { } } - const struct ggml_metal_device_props * props_dev = ggml_metal_device_get_props(dev); + //const struct ggml_metal_device_props * props_dev = ggml_metal_device_get_props(dev); res->d_queue = dispatch_queue_create("ggml-metal", DISPATCH_QUEUE_CONCURRENT); - res->use_bfloat = props_dev->has_bfloat; res->use_fusion = getenv("GGML_METAL_FUSION_DISABLE") == nil; res->use_concurrency = getenv("GGML_METAL_CONCURRENCY_DISABLE") == nil; @@ -147,7 +145,6 @@ ggml_metal_t ggml_metal_init(ggml_metal_device_t dev) { memset(res->fuse_cnt, 0, sizeof(res->fuse_cnt)); - GGML_LOG_INFO("%s: use bfloat = %s\n", __func__, res->use_bfloat ? "true" : "false"); GGML_LOG_INFO("%s: use fusion = %s\n", __func__, res->use_fusion ? "true" : "false"); GGML_LOG_INFO("%s: use concurrency = %s\n", __func__, res->use_concurrency ? "true" : "false"); GGML_LOG_INFO("%s: use graph optimize = %s\n", __func__, res->use_graph_optimize ? "true" : "false"); diff --git a/ggml/src/ggml-metal/ggml-metal-device.h b/ggml/src/ggml-metal/ggml-metal-device.h index 4d58297481..cb27dca989 100644 --- a/ggml/src/ggml-metal/ggml-metal-device.h +++ b/ggml/src/ggml-metal/ggml-metal-device.h @@ -95,7 +95,9 @@ void ggml_metal_encoder_end_encoding(ggml_metal_encoder_t encoder); typedef struct ggml_metal_library * ggml_metal_library_t; -ggml_metal_library_t ggml_metal_library_init(ggml_metal_device_t dev); +ggml_metal_library_t ggml_metal_library_init (ggml_metal_device_t dev); +ggml_metal_library_t ggml_metal_library_init_from_source(ggml_metal_device_t dev, const char * source, bool verbose); + void ggml_metal_library_free(ggml_metal_library_t lib); ggml_metal_pipeline_t ggml_metal_library_get_pipeline (ggml_metal_library_t lib, const char * name); @@ -193,6 +195,7 @@ struct ggml_metal_device_props { bool has_simdgroup_mm; bool has_unified_memory; bool has_bfloat; + bool has_tensor; bool use_residency_sets; bool use_shared_buffers; diff --git a/ggml/src/ggml-metal/ggml-metal-device.m b/ggml/src/ggml-metal/ggml-metal-device.m index 0cadd19a30..606cfd0a5e 100644 --- a/ggml/src/ggml-metal/ggml-metal-device.m +++ b/ggml/src/ggml-metal/ggml-metal-device.m @@ -21,8 +21,9 @@ #define GGML_METAL_HAS_RESIDENCY_SETS 1 #endif -// overload of MTLGPUFamilyMetal3 (not available in some environments) +// overload of MTLGPUFamilyMetalX (not available in some environments) static const NSInteger MTLGPUFamilyMetal3_GGML = 5001; +static const NSInteger MTLGPUFamilyMetal4_GGML = 5002; // virtual address for GPU memory allocations static atomic_uintptr_t g_addr_device = 0x000000400ULL; @@ -261,6 +262,10 @@ ggml_metal_library_t ggml_metal_library_init(ggml_metal_device_t dev) { [prep setObject:@"1" forKey:@"GGML_METAL_HAS_BF16"]; } + if (ggml_metal_device_get_props(dev)->has_tensor) { + [prep setObject:@"1" forKey:@"GGML_METAL_HAS_TENSOR"]; + } + #if GGML_METAL_EMBED_LIBRARY [prep setObject:@"1" forKey:@"GGML_METAL_EMBED_LIBRARY"]; #endif @@ -298,6 +303,72 @@ ggml_metal_library_t ggml_metal_library_init(ggml_metal_device_t dev) { return res; } +ggml_metal_library_t ggml_metal_library_init_from_source(ggml_metal_device_t dev, const char * source, bool verbose) { + if (source == NULL) { + GGML_LOG_ERROR("%s: source is NULL\n", __func__); + return NULL; + } + + id device = ggml_metal_device_get_obj(dev); + id library = nil; + NSError * error = nil; + + const int64_t t_start = ggml_time_us(); + + NSString * src = [[NSString alloc] initWithBytes:source + length:strlen(source) + encoding:NSUTF8StringEncoding]; + if (!src) { + GGML_LOG_ERROR("%s: failed to create NSString from source\n", __func__); + return NULL; + } + + @autoreleasepool { + NSMutableDictionary * prep = [NSMutableDictionary dictionary]; + + MTLCompileOptions * options = [MTLCompileOptions new]; + options.preprocessorMacros = prep; + + library = [device newLibraryWithSource:src options:options error:&error]; + if (error) { + if (verbose) { + GGML_LOG_ERROR("%s: error compiling source: %s\n", __func__, [[error description] UTF8String]); + } else { + GGML_LOG_ERROR("%s: error compiling source\n", __func__); + } + library = nil; + } + + [options release]; + } + + [src release]; + + if (!library) { + if (verbose) { + GGML_LOG_ERROR("%s: failed to create Metal library from source\n", __func__); + } + + return NULL; + } + + if (verbose) { + GGML_LOG_INFO("%s: compiled in %.3f sec\n", __func__, (ggml_time_us() - t_start) / 1e6); + } + + ggml_metal_library_t res = calloc(1, sizeof(struct ggml_metal_library)); + if (!res) { + GGML_LOG_ERROR("%s: calloc failed\n", __func__); + return NULL; + } + + res->obj = library; + res->device = device; + res->pipelines = ggml_metal_pipelines_init(); + + return res; +} + void ggml_metal_library_free(ggml_metal_library_t lib) { if (!lib) { return; @@ -345,9 +416,9 @@ ggml_metal_pipeline_t ggml_metal_library_compile_pipeline(ggml_metal_library_t l if (!mtl_function) { ggml_critical_section_end(); - GGML_LOG_ERROR("%s: error: failed to compile pipeline: base = '%s', name = '%s'\n", __func__, base, name); + GGML_LOG_ERROR("%s: failed to compile pipeline: base = '%s', name = '%s'\n", __func__, base, name); if (error) { - GGML_LOG_ERROR("%s: error: %s\n", __func__, [[error description] UTF8String]); + GGML_LOG_ERROR("%s: %s\n", __func__, [[error description] UTF8String]); } return nil; @@ -355,13 +426,21 @@ ggml_metal_pipeline_t ggml_metal_library_compile_pipeline(ggml_metal_library_t l res->obj = [lib->device newComputePipelineStateWithFunction:mtl_function error:&error]; - ggml_metal_pipelines_add(lib->pipelines, name, res); - [mtl_function release]; GGML_LOG_DEBUG("%s: loaded %-40s %16p | th_max = %4d | th_width = %4d\n", __func__, name, (void *) res->obj, (int) res->obj.maxTotalThreadsPerThreadgroup, (int) res->obj.threadExecutionWidth); + + if (res->obj.maxTotalThreadsPerThreadgroup == 0 || res->obj.threadExecutionWidth == 0) { + ggml_critical_section_end(); + + GGML_LOG_ERROR("%s: incompatible pipeline %s\n", __func__, name); + + return nil; + } + + ggml_metal_pipelines_add(lib->pipelines, name, res); } ggml_critical_section_end(); @@ -469,6 +548,126 @@ ggml_metal_device_t ggml_metal_device_init(void) { dev->props.has_bfloat = [dev->mtl_device supportsFamily:MTLGPUFamilyMetal3_GGML]; dev->props.has_bfloat |= [dev->mtl_device supportsFamily:MTLGPUFamilyApple6]; + if (getenv("GGML_METAL_BF16_DISABLE") != NULL) { + dev->props.has_bfloat = false; + } + + dev->props.has_tensor = [dev->mtl_device supportsFamily:MTLGPUFamilyMetal4_GGML]; + if (getenv("GGML_METAL_TENSOR_DISABLE") != NULL) { + dev->props.has_tensor = false; + } + + // note: disable the tensor API by default for old chips because with the current implementation it is not useful + // - M2 Ultra: ~5% slower + // - M4, M4 Max: no significant difference + // + // TODO: try to update the tensor API kernels to at least match the simdgroup performance + if (getenv("GGML_METAL_TENSOR_ENABLE") == NULL && + ![[dev->mtl_device name] containsString:@"M5"] && + ![[dev->mtl_device name] containsString:@"M6"]) { + GGML_LOG_WARN("%s: tensor API disabled for pre-M5 device\n", __func__); + dev->props.has_tensor = false; + } + + // double-check that the tensor API compiles + if (dev->props.has_tensor) { + const char * src_tensor_f16 = "\n" + "#include \n" + "#include \n" + "#include \n" + " \n" + "using namespace metal; \n" + "using namespace mpp::tensor_ops; \n" + " \n" + "kernel void dummy_kernel( \n" + " tensor> A [[buffer(0)]], \n" + " tensor> B [[buffer(1)]], \n" + " device float * C [[buffer(2)]], \n" + " uint2 tgid [[threadgroup_position_in_grid]]) \n" + "{ \n" + " auto tA = A.slice(0, (int)tgid.y); \n" + " auto tB = B.slice((int)tgid.x, 0); \n" + " \n" + " matmul2d< \n" + " matmul2d_descriptor(8, 8, dynamic_extent), \n" + " execution_simdgroups<4>> mm; \n" + " \n" + " auto cT = mm.get_destination_cooperative_tensor(); \n" + " \n" + " auto sA = tA.slice(0, 0); \n" + " auto sB = tB.slice(0, 0); \n" + " mm.run(sB, sA, cT); \n" + " \n" + " auto tC = tensor, tensor_inline>(C, dextents(4, 4)); \n" + " \n" + " cT.store(tC); \n" + "}"; + + GGML_LOG_INFO("%s: testing tensor API for f16 support\n", __func__); + ggml_metal_library_t lib = ggml_metal_library_init_from_source(dev, src_tensor_f16, false); + if (lib == NULL) { + GGML_LOG_WARN("%s: - the tensor API is not supported in this environment - disabling\n", __func__); + dev->props.has_tensor = false; + } else { + ggml_metal_pipeline_t ppl = ggml_metal_library_compile_pipeline(lib, "dummy_kernel", "dummy_kernel", nil); + if (!ppl) { + GGML_LOG_WARN("%s: - the tensor API is not supported in this environment - disabling\n", __func__); + dev->props.has_tensor = false; + } + + ggml_metal_library_free(lib); + } + } + + // try to compile a dummy kernel to determine if the tensor API is supported for bfloat + if (dev->props.has_tensor && dev->props.has_bfloat) { + const char * src_tensor_bf16 = "\n" + "#include \n" + "#include \n" + "#include \n" + " \n" + "using namespace metal; \n" + "using namespace mpp::tensor_ops; \n" + " \n" + "kernel void dummy_kernel( \n" + " tensor> A [[buffer(0)]], \n" + " tensor> B [[buffer(1)]], \n" + " device float * C [[buffer(2)]], \n" + " uint2 tgid [[threadgroup_position_in_grid]]) \n" + "{ \n" + " auto tA = A.slice(0, (int)tgid.y); \n" + " auto tB = B.slice((int)tgid.x, 0); \n" + " \n" + " matmul2d< \n" + " matmul2d_descriptor(8, 8, dynamic_extent), \n" + " execution_simdgroups<4>> mm; \n" + " \n" + " auto cT = mm.get_destination_cooperative_tensor(); \n" + " \n" + " auto sA = tA.slice(0, 0); \n" + " auto sB = tB.slice(0, 0); \n" + " mm.run(sB, sA, cT); \n" + " \n" + " auto tC = tensor, tensor_inline>(C, dextents(4, 4)); \n" + " \n" + " cT.store(tC); \n" + "}"; + + GGML_LOG_INFO("%s: testing tensor API for bfloat support\n", __func__); + ggml_metal_library_t lib = ggml_metal_library_init_from_source(dev, src_tensor_bf16, false); + if (lib == NULL) { + GGML_LOG_WARN("%s: - the tensor API does not support bfloat - disabling bfloat support\n", __func__); + dev->props.has_bfloat = false; + } else { + ggml_metal_pipeline_t ppl = ggml_metal_library_compile_pipeline(lib, "dummy_kernel", "dummy_kernel", nil); + if (!ppl) { + GGML_LOG_WARN("%s: - the tensor API does not support bfloat - disabling bfloat support\n", __func__); + dev->props.has_bfloat = false; + } + + ggml_metal_library_free(lib); + } + } dev->props.use_residency_sets = true; #if defined(GGML_METAL_HAS_RESIDENCY_SETS) @@ -476,7 +675,6 @@ ggml_metal_device_t ggml_metal_device_init(void) { #endif dev->props.use_shared_buffers = dev->props.has_unified_memory; - if (getenv("GGML_METAL_SHARED_BUFFERS_DISABLE") != NULL) { dev->props.use_shared_buffers = false; } @@ -529,6 +727,7 @@ ggml_metal_device_t ggml_metal_device_init(void) { GGML_LOG_INFO("%s: simdgroup matrix mul. = %s\n", __func__, dev->props.has_simdgroup_mm ? "true" : "false"); GGML_LOG_INFO("%s: has unified memory = %s\n", __func__, dev->props.has_unified_memory ? "true" : "false"); GGML_LOG_INFO("%s: has bfloat = %s\n", __func__, dev->props.has_bfloat ? "true" : "false"); + GGML_LOG_INFO("%s: has tensor = %s\n", __func__, dev->props.has_tensor ? "true" : "false"); GGML_LOG_INFO("%s: use residency sets = %s\n", __func__, dev->props.use_residency_sets ? "true" : "false"); GGML_LOG_INFO("%s: use shared buffers = %s\n", __func__, dev->props.use_shared_buffers ? "true" : "false"); diff --git a/ggml/src/ggml-metal/ggml-metal.metal b/ggml/src/ggml-metal/ggml-metal.metal index 424c400f24..cea535ade7 100644 --- a/ggml/src/ggml-metal/ggml-metal.metal +++ b/ggml/src/ggml-metal/ggml-metal.metal @@ -9,6 +9,12 @@ __embed_ggml-common.h__ #include +#ifdef GGML_METAL_HAS_TENSOR +#include + +#include +#endif + using namespace metal; #define MAX(x, y) ((x) > (y) ? (x) : (y)) @@ -1742,7 +1748,7 @@ kernel void kernel_op_sum_f32( float sumf = 0; - for (int64_t i0 = tpitg.x; i0 < args.np; i0 += ntg.x) { + for (uint64_t i0 = tpitg.x; i0 < args.np; i0 += ntg.x) { sumf += src0[i0]; } @@ -5467,6 +5473,7 @@ template [[host_name("kernel_flash_attn_ext_q8_0_dk576_dv512")]] kernel flash_at #undef FA_TYPES #undef FA_TYPES_BF +#undef FA_TYPES_F32 constant bool FC_flash_attn_ext_vec_has_mask [[function_constant(FC_FLASH_ATTN_EXT_VEC + 0)]]; constant bool FC_flash_attn_ext_vec_has_sinks [[function_constant(FC_FLASH_ATTN_EXT_VEC + 1)]]; @@ -6088,6 +6095,7 @@ template [[host_name("kernel_flash_attn_ext_vec_q5_1_dk576_dv512")]] kernel flas template [[host_name("kernel_flash_attn_ext_vec_q8_0_dk576_dv512")]] kernel flash_attn_ext_vec_t kernel_flash_attn_ext_vec; #undef FA_TYPES +#undef FA_TYPES_F32 constant int32_t FC_flash_attn_ext_vec_reduce_DV [[function_constant(FC_FLASH_ATTN_EXT_VEC_REDUCE + 0)]]; constant int32_t FC_flash_attn_ext_vec_reduce_NWG [[function_constant(FC_FLASH_ATTN_EXT_VEC_REDUCE + 1)]]; @@ -8141,17 +8149,6 @@ kernel void kernel_set_rows_f( constant bool FC_mul_mm_bc_inp [[function_constant(FC_MUL_MM + 0)]]; constant bool FC_mul_mm_bc_out [[function_constant(FC_MUL_MM + 1)]]; -#define BLOCK_SIZE_M 64 // 8 simdgroup matrices from matrix A -#define BLOCK_SIZE_N 32 // 4 simdgroup matrices from matrix B -#define BLOCK_SIZE_K 32 -#define THREAD_MAT_M 4 // each thread take 4 simdgroup matrices from matrix A -#define THREAD_MAT_N 2 // each thread take 2 simdgroup matrices from matrix B -#define THREAD_PER_BLOCK 128 -#define THREAD_PER_ROW 2 // 2 thread for each row in matrix A to load numbers -#define THREAD_PER_COL 4 // 4 thread for each row in matrix B to load numbers -#define SG_MAT_SIZE 64 // simdgroup matrix is of shape 8x8 -#define SG_MAT_ROW 8 - // each block_q contains 16*nl weights template kernel void kernel_mul_mm( @@ -8167,18 +8164,48 @@ kernel void kernel_mul_mm( threadgroup S0 * sa = (threadgroup S0 *)(shmem); threadgroup S1 * sb = (threadgroup S1 *)(shmem + 4096); - const int r0 = tgpig.y; - const int r1 = tgpig.x; + threadgroup float * sc = (threadgroup float *)(shmem); + + constexpr int NR0 = 64; + constexpr int NR1 = 32; + + constexpr int NK = 32; + constexpr int NL0 = NK/16; + constexpr int NL1 = NK/8; + const int im = tgpig.z; + const int r0 = tgpig.y*NR0; + const int r1 = tgpig.x*NR1; // if this block is of 64x32 shape or smaller - const short n_rows = (args.ne0 - r0*BLOCK_SIZE_M < BLOCK_SIZE_M) ? (args.ne0 - r0*BLOCK_SIZE_M) : BLOCK_SIZE_M; - const short n_cols = (args.ne1 - r1*BLOCK_SIZE_N < BLOCK_SIZE_N) ? (args.ne1 - r1*BLOCK_SIZE_N) : BLOCK_SIZE_N; + const short nr0 = (args.ne0 - r0 < NR0) ? (args.ne0 - r0) : NR0; + const short nr1 = (args.ne1 - r1 < NR1) ? (args.ne1 - r1) : NR1; // a thread shouldn't load data outside of the matrix - const short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1; - const short thread_col = ((short)tiitg/THREAD_PER_COL) < n_cols ? ((short)tiitg/THREAD_PER_COL) : n_cols - 1; + const short lr0 = ((short)tiitg/NL0) < nr0 ? ((short)tiitg/NL0) : nr0 - 1; // 0 .. 63 + const short lr1 = ((short)tiitg/NL1) < nr1 ? ((short)tiitg/NL1) : nr1 - 1; // 0 .. 31 + const short il0 = (tiitg % NL0); + + short il = il0; + + const int i12 = im%args.ne12; + const int i13 = im/args.ne12; + + const uint64_t offset0 = (i12/args.r2)*args.nb02 + (i13/args.r3)*args.nb03; + const short offset1 = il0/nl; + + device const block_q * x = (device const block_q *)(src0 + args.nb01*(r0 + lr0) + offset0) + offset1; + + const short iy = 8*(tiitg % NL1); + + device const T1 * y = (device const T1 *)(src1 + + args.nb13*i13 + + args.nb12*i12 + + args.nb11*(r1 + lr1) + + args.nb10*iy); + +#ifndef GGML_METAL_HAS_TENSOR S0_8x8 ma[4]; S1_8x8 mb[2]; @@ -8187,36 +8214,36 @@ kernel void kernel_mul_mm( for (short i = 0; i < 8; i++){ mc[i] = make_filled_simdgroup_matrix(0.f); } +#else + auto tA = tensor, tensor_inline>(sa, dextents(NK, NR0)); + auto tB = tensor, tensor_inline>(sb, dextents(NR1, NK )); - short il = (tiitg % THREAD_PER_ROW); + mpp::tensor_ops::matmul2d< + mpp::tensor_ops::matmul2d_descriptor(NR1, NR0, NK, false, true, false, mpp::tensor_ops::matmul2d_descriptor::mode::multiply_accumulate), + execution_simdgroups<4>> mm; - const int i12 = im%args.ne12; - const int i13 = im/args.ne12; + auto cT = mm.get_destination_cooperative_tensor(); +#endif - const uint64_t offset0 = (i12/args.r2)*args.nb02 + (i13/args.r3)*args.nb03; - const short offset1 = il/nl; - - device const block_q * x = (device const block_q *)(src0 - + args.nb01*(r0*BLOCK_SIZE_M + thread_row) + offset0) + offset1; - - const short iy = (BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL)); - - device const T1 * y = (device const T1 *)(src1 - + args.nb13*i13 - + args.nb12*i12 - + args.nb11*(r1*BLOCK_SIZE_N + thread_col) - + args.nb10*iy); - - for (int loop_k = 0; loop_k < args.ne00; loop_k += BLOCK_SIZE_K) { + for (int loop_k = 0; loop_k < args.ne00; loop_k += NK) { +#ifndef GGML_METAL_HAS_TENSOR // load data and store to threadgroup memory if (is_same::value && FC_mul_mm_bc_inp) { threadgroup_barrier(mem_flags::mem_threadgroup); // no need for dequantization for (short i = 0; i < 16; i++) { - *(sa + SG_MAT_SIZE * ((tiitg/THREAD_PER_ROW/8) \ - + (tiitg%THREAD_PER_ROW)*16 + (i/8)*8) \ - + (tiitg/THREAD_PER_ROW)%8 + (i&7)*8) = loop_k + 16*il + i < args.ne00 ? ((device T0 *) x)[i] : 0; + const short sx = 2*il0 + i/8; + const short sy = (tiitg/NL0)/8; + + //const short lx = i%8; + //const short ly = (tiitg/NL0)%8; + const short lx = (tiitg/NL0)%8; + const short ly = i%8; + + const short ib = 8*sx + sy; + + *(sa + 64*ib + 8*ly + lx) = loop_k + 16*il + i < args.ne00 ? *((device T0 *) x + i) : 0; } } else { S0_4x4 temp_a; @@ -8225,91 +8252,203 @@ kernel void kernel_mul_mm( threadgroup_barrier(mem_flags::mem_threadgroup); FOR_UNROLL (short i = 0; i < 16; i++) { - *(sa + SG_MAT_SIZE * ((tiitg/THREAD_PER_ROW/8) \ - + (tiitg%THREAD_PER_ROW)*16 + (i/8)*8) \ - + (tiitg/THREAD_PER_ROW)%8 + (i&7)*8) = temp_a[i/4][i%4]; + const short sx = 2*il0 + i/8; + const short sy = (tiitg/NL0)/8; + + //const short lx = i%8; + //const short ly = (tiitg/NL0)%8; + const short lx = (tiitg/NL0)%8; + const short ly = i%8; + + const short ib = 8*sx + sy; + + // NOTE: this is massively slower.. WTF? + //sa[64*ib + 8*ly + lx] = temp_a[i/4][i%4]; + + *(sa + 64*ib + 8*ly + lx) = temp_a[i/4][i%4]; } } if (FC_mul_mm_bc_inp) { for (short i = 0; i < 8; ++i) { - sb[32*8*(tiitg%THREAD_PER_COL) + 8*(tiitg/THREAD_PER_COL) + i] = loop_k + iy + i < args.ne00 ? (S1) ((device T1 *) y)[i] : 0; + const short sx = (tiitg%NL1); + const short sy = (tiitg/NL1)/8; + + const short lx = i; + const short ly = (tiitg/NL1)%8; + //const short lx = (tiitg/NL1)%8; + //const short ly = i; + + const short ib = 4*sx + sy; + + *(sb + 64*ib + 8*ly + lx) = loop_k + iy + i < args.ne00 ? (S1) *((device T1 *) y + i) : 0; } } else { - *(threadgroup S1_2x4 *)(sb + 32*8*(tiitg%THREAD_PER_COL) + 8*(tiitg/THREAD_PER_COL)) = (S1_2x4)(*((device T1_2x4 *) y)); + const short sx = (tiitg%NL1); + const short sy = (tiitg/NL1)/8; + + const short dx = sx; + const short dy = sy; + + const short ly = (tiitg/NL1)%8; + + const short ib = 4*sx + sy; + + *(threadgroup S1_2x4 *)(sb + 64*ib + 8*ly) = (S1_2x4)(*((device T1_2x4 *) y)); } +#else + // load data and store to threadgroup memory + if (is_same::value && FC_mul_mm_bc_inp) { + threadgroup_barrier(mem_flags::mem_threadgroup); + + // no need for dequantization + for (short i = 0; i < 16; i++) { + const short sx = 2*il0 + i/8; + const short sy = (tiitg/NL0)/8; + + const short lx = i%8; + const short ly = (tiitg/NL0)%8; + //const short lx = (tiitg/NL0)%8; + //const short ly = i%8; + + *(sa + NK*(8*sy + ly) + 8*sx + lx) = loop_k + 16*il + i < args.ne00 ? *((device T0 *) x + i) : 0; + } + } else { + S0_4x4 temp_a; + dequantize_func(x, il, temp_a); + + threadgroup_barrier(mem_flags::mem_threadgroup); + + FOR_UNROLL (short i = 0; i < 16; i++) { + const short sx = 2*il0 + i/8; + const short sy = (tiitg/NL0)/8; + + const short lx = i%8; + const short ly = (tiitg/NL0)%8; + //const short lx = (tiitg/NL0)%8; + //const short ly = i%8; + + *(sa + NK*(8*sy + ly) + 8*sx + lx) = temp_a[i/4][i%4]; + } + } + + if (FC_mul_mm_bc_inp) { + for (short i = 0; i < 8; ++i) { + const short sx = (tiitg%NL1); + const short sy = (tiitg/NL1)/8; + + const short lx = i; + const short ly = (tiitg/NL1)%8; + //const short lx = (tiitg/NL1)%8; + //const short ly = i; + + *(sb + NK*(8*sy + ly) + 8*sx + lx) = loop_k + iy + i < args.ne00 ? (S1) *((device T1 *) y + i) : 0; + } + } else { + const short sx = (tiitg%NL1); + const short sy = (tiitg/NL1)/8; + + //const short lx = i; + const short ly = (tiitg/NL1)%8; + //const short lx = (tiitg/NL1)%8; + //const short ly = i; + + *(threadgroup S1_2x4 *)(sb + NK*(8*sy + ly) + 8*sx) = (S1_2x4)(*((device T1_2x4 *) y)); + } +#endif il = (il + 2 < nl) ? il + 2 : il % 2; x = (il < 2) ? x + (2 + nl - 1)/nl : x; - y += BLOCK_SIZE_K; + + y += NK; threadgroup_barrier(mem_flags::mem_threadgroup); +#ifndef GGML_METAL_HAS_TENSOR // load matrices from threadgroup memory and conduct outer products - threadgroup const S0 * lsma = (sa + THREAD_MAT_M*SG_MAT_SIZE*(sgitg%2)); - threadgroup const S1 * lsmb = (sb + THREAD_MAT_N*SG_MAT_SIZE*(sgitg/2)); + threadgroup const S0 * lsma = (sa + 4*64*(sgitg%2)); + threadgroup const S1 * lsmb = (sb + 2*64*(sgitg/2)); - #pragma unroll(4) - for (short ik = 0; ik < BLOCK_SIZE_K/8; ik++) { + FOR_UNROLL (short ik = 0; ik < NK/8; ik++) { simdgroup_barrier(mem_flags::mem_none); - #pragma unroll(4) - for (short i = 0; i < 4; i++) { - simdgroup_load(ma[i], lsma + SG_MAT_SIZE * i); - } - - #pragma unroll(2) - for (short i = 0; i < 2; i++) { - simdgroup_load(mb[i], lsmb + SG_MAT_SIZE * i); + FOR_UNROLL (short i = 0; i < 4; i++) { + simdgroup_load(ma[i], lsma + 64*i, 8, 0, false); } simdgroup_barrier(mem_flags::mem_none); - #pragma unroll(8) - for (short i = 0; i < 8; i++){ + FOR_UNROLL (short i = 0; i < 2; i++) { + simdgroup_load(mb[i], lsmb + 64*i, 8, 0, false); + } + + simdgroup_barrier(mem_flags::mem_none); + + FOR_UNROLL (short i = 0; i < 8; i++){ simdgroup_multiply_accumulate(mc[i], mb[i/4], ma[i%4], mc[i]); } - lsma += (BLOCK_SIZE_M/SG_MAT_ROW)*SG_MAT_SIZE; - lsmb += (BLOCK_SIZE_N/SG_MAT_ROW)*SG_MAT_SIZE; + lsma += 8*64; + lsmb += 4*64; } +#else + auto sA = tA.slice(0, 0); + auto sB = tB.slice(0, 0); + + mm.run(sB, sA, cT); +#endif } - if (!FC_mul_mm_bc_out || ((r0 + 1) * BLOCK_SIZE_M <= args.ne0 && (r1 + 1) * BLOCK_SIZE_N <= args.ne1)) { + if (!FC_mul_mm_bc_out || (r0 + NR0 <= args.ne0 && r1 + NR1 <= args.ne1)) { // if no bounds checks on the output are needed, we can directly write to device memory +#ifdef GGML_METAL_HAS_TENSOR device float * C = (device float *) dst + - (BLOCK_SIZE_M * r0 + 32*(sgitg & 1)) + \ - (BLOCK_SIZE_N * r1 + 16*(sgitg >> 1)) * args.ne0 + im*args.ne1*args.ne0; + r0 + \ + r1 * args.ne0 + im*args.ne1*args.ne0; + + auto tC = tensor, tensor_inline>(C, dextents(args.ne0, NR1)); + cT.store(tC); +#else + device float * C = (device float *) dst + + (r0 + 32*(sgitg & 1)) + \ + (r1 + 16*(sgitg >> 1)) * args.ne0 + im*args.ne1*args.ne0; for (short i = 0; i < 8; i++) { - simdgroup_store(mc[i], C + 8 * (i%4) + 8 * args.ne0 * (i/4), args.ne0); + simdgroup_store(mc[i], C + 8*(i%4) + 8*args.ne0*(i/4), args.ne0, 0, false); } +#endif } else { // block is smaller than 64x32, we should avoid writing data outside of the matrix threadgroup_barrier(mem_flags::mem_threadgroup); - threadgroup float * temp_str = ((threadgroup float *) shmem) \ - + 32*(sgitg&1) + (16*(sgitg >> 1))*BLOCK_SIZE_M; + + threadgroup float * temp_str = ((threadgroup float *) shmem) + 32*(sgitg&1) + (16*(sgitg >> 1))*NR0; + +#ifdef GGML_METAL_HAS_TENSOR + auto tC = tensor, tensor_inline>(sc, dextents(NR0, NR1)); + cT.store(tC); +#else for (short i = 0; i < 8; i++) { - simdgroup_store(mc[i], temp_str + 8*(i%4) + 8*BLOCK_SIZE_M*(i/4), BLOCK_SIZE_M); + simdgroup_store(mc[i], temp_str + 8*(i%4) + 8*NR0*(i/4), NR0, 0, false); } +#endif threadgroup_barrier(mem_flags::mem_threadgroup); if (sgitg == 0) { - for (int j = tiitg; j < n_cols; j += BLOCK_SIZE_N) { - device float * D = (device float *) dst + (r0*BLOCK_SIZE_M) + (r1*BLOCK_SIZE_N + j)*args.ne0 + im*args.ne1*args.ne0; + for (int j = tiitg; j < nr1; j += NR1) { + device float * D = (device float *) dst + r0 + (r1 + j)*args.ne0 + im*args.ne1*args.ne0; device float4 * D4 = (device float4 *) D; - threadgroup float * C = temp_str + (j*BLOCK_SIZE_M); + threadgroup float * C = temp_str + (j*NR0); threadgroup float4 * C4 = (threadgroup float4 *) C; int i = 0; - for (; i < n_rows/4; i++) { + for (; i < nr0/4; i++) { *(D4 + i) = *(C4 + i); } i *= 4; - for (; i < n_rows; i++) { + for (; i < nr0; i++) { *(D + i) = *(C + i); } } @@ -8394,31 +8533,63 @@ kernel void kernel_mul_mm_id( ushort tiitg[[thread_index_in_threadgroup]], ushort tiisg[[thread_index_in_simdgroup]], ushort sgitg[[simdgroup_index_in_threadgroup]]) { - threadgroup S0 * sa = (threadgroup S0 *)(shmem); threadgroup S1 * sb = (threadgroup S1 *)(shmem + 4096); - const int r0 = tgpig.y; - const int r1 = tgpig.x; + threadgroup float * sc = (threadgroup float *)(shmem); + + constexpr int NR0 = 64; + constexpr int NR1 = 32; + + constexpr int NK = 32; + constexpr int NL0 = NK/16; + constexpr int NL1 = NK/8; + const int im = tgpig.z; // expert + const int r0 = tgpig.y*NR0; + const int r1 = tgpig.x*NR1; device const uint32_t * tpe_u32 = (device const uint32_t *) (htpe); device const int32_t * ids_i32 = (device const int32_t *) (hids); const int32_t neh1 = tpe_u32[im]; - if (r1*BLOCK_SIZE_N >= neh1) { + if (r1 >= neh1) { return; } // if this block is of 64x32 shape or smaller - const short n_rows = (args.ne0 - r0*BLOCK_SIZE_M < BLOCK_SIZE_M) ? (args.ne0 - r0*BLOCK_SIZE_M) : BLOCK_SIZE_M; - const short n_cols = ( neh1 - r1*BLOCK_SIZE_N < BLOCK_SIZE_N) ? ( neh1 - r1*BLOCK_SIZE_N) : BLOCK_SIZE_N; + const short nr0 = (args.ne0 - r0 < NR0) ? (args.ne0 - r0) : NR0; + const short nr1 = ( neh1 - r1 < NR1) ? ( neh1 - r1) : NR1; // a thread shouldn't load data outside of the matrix - const short thread_row = ((short)tiitg/THREAD_PER_ROW) < n_rows ? ((short)tiitg/THREAD_PER_ROW) : n_rows - 1; - const short thread_col = ((short)tiitg/THREAD_PER_COL) < n_cols ? ((short)tiitg/THREAD_PER_COL) : n_cols - 1; + const short lr0 = ((short)tiitg/NL0) < nr0 ? ((short)tiitg/NL0) : nr0 - 1; // 0 .. 63 + const short lr1 = ((short)tiitg/NL1) < nr1 ? ((short)tiitg/NL1) : nr1 - 1; // 0 .. 31 + const short il0 = (tiitg % NL0); + + short il = il0; + + const int id = ids_i32[im*args.ne21 + r1 + lr1]; + + const short i11 = (id % args.ne20) % args.ne11; + const short i12 = (id / args.ne20); + const short i13 = 0; + + const uint64_t offset0 = im*args.nb02 + i13*args.nb03; + const short offset1 = il0/nl; + + device const block_q * x = (device const block_q *)(src0 + args.nb01*(r0 + lr0) + offset0) + offset1; + + const short iy = 8*(tiitg % NL1); + + device const T1 * y = (device const T1 *)(src1 + + args.nb13*i13 + + args.nb12*i12 + + args.nb11*i11 + + args.nb10*iy); + +#ifndef GGML_METAL_HAS_TENSOR S0_8x8 ma[4]; S1_8x8 mb[2]; @@ -8427,39 +8598,36 @@ kernel void kernel_mul_mm_id( for (short i = 0; i < 8; i++){ mc[i] = make_filled_simdgroup_matrix(0.f); } +#else + auto tA = tensor, tensor_inline>(sa, dextents(NK, NR0)); + auto tB = tensor, tensor_inline>(sb, dextents(NR1, NK )); - short il = (tiitg % THREAD_PER_ROW); + mpp::tensor_ops::matmul2d< + mpp::tensor_ops::matmul2d_descriptor(NR1, NR0, NK, false, true, false, mpp::tensor_ops::matmul2d_descriptor::mode::multiply_accumulate), + execution_simdgroups<4>> mm; - const int id = ids_i32[im*args.ne21 + r1*BLOCK_SIZE_N + thread_col]; + auto cT = mm.get_destination_cooperative_tensor(); +#endif - const short i11 = (id % args.ne20) % args.ne11; - const short i12 = (id / args.ne20); - const short i13 = 0; - - const uint64_t offset0 = im*args.nb02 + i13*args.nb03; - const short offset1 = il/nl; - - device const block_q * x = (device const block_q *)(src0 - + args.nb01*(r0*BLOCK_SIZE_M + thread_row) + offset0) + offset1; - - const short iy = (BLOCK_SIZE_K / THREAD_PER_COL * (tiitg % THREAD_PER_COL)); - - device const T1 * y = (device const T1 *)(src1 - + args.nb13*i13 - + args.nb12*i12 - + args.nb11*i11 - + args.nb10*iy); - - for (int loop_k = 0; loop_k < args.ne00; loop_k += BLOCK_SIZE_K) { + for (int loop_k = 0; loop_k < args.ne00; loop_k += NK) { +#ifndef GGML_METAL_HAS_TENSOR // load data and store to threadgroup memory if (is_same::value && FC_mul_mm_bc_inp) { threadgroup_barrier(mem_flags::mem_threadgroup); // no need for dequantization for (short i = 0; i < 16; i++) { - *(sa + SG_MAT_SIZE * ((tiitg/THREAD_PER_ROW/8) \ - + (tiitg%THREAD_PER_ROW)*16 + (i/8)*8) \ - + (tiitg/THREAD_PER_ROW)%8 + (i&7)*8) = loop_k + 16*il + i < args.ne00 ? ((device T0 *) x)[i] : 0; + const short sx = 2*il0 + i/8; + const short sy = (tiitg/NL0)/8; + + //const short lx = i%8; + //const short ly = (tiitg/NL0)%8; + const short lx = (tiitg/NL0)%8; + const short ly = i%8; + + const short ib = 8*sx + sy; + + *(sa + 64*ib + 8*ly + lx) = loop_k + 16*il + i < args.ne00 ? *((device T0 *) x + i) : 0; } } else { S0_4x4 temp_a; @@ -8468,85 +8636,188 @@ kernel void kernel_mul_mm_id( threadgroup_barrier(mem_flags::mem_threadgroup); FOR_UNROLL (short i = 0; i < 16; i++) { - *(sa + SG_MAT_SIZE * ((tiitg/THREAD_PER_ROW/8) \ - + (tiitg%THREAD_PER_ROW)*16 + (i/8)*8) \ - + (tiitg/THREAD_PER_ROW)%8 + (i&7)*8) = temp_a[i/4][i%4]; + const short sx = 2*il0 + i/8; + const short sy = (tiitg/NL0)/8; + + //const short lx = i%8; + //const short ly = (tiitg/NL0)%8; + const short lx = (tiitg/NL0)%8; + const short ly = i%8; + + const short ib = 8*sx + sy; + + // NOTE: this is massively slower.. WTF? + //sa[64*ib + 8*ly + lx] = temp_a[i/4][i%4]; + + *(sa + 64*ib + 8*ly + lx) = temp_a[i/4][i%4]; } } if (FC_mul_mm_bc_inp) { for (short i = 0; i < 8; ++i) { - sb[32*8*(tiitg%THREAD_PER_COL) + 8*(tiitg/THREAD_PER_COL) + i] = loop_k + iy + i < args.ne00 ? (S1) ((device T1 *) y)[i] : 0; + const short sx = (tiitg%NL1); + const short sy = (tiitg/NL1)/8; + + const short lx = i; + const short ly = (tiitg/NL1)%8; + //const short lx = (tiitg/NL1)%8; + //const short ly = i; + + const short ib = 4*sx + sy; + + *(sb + 64*ib + 8*ly + lx) = loop_k + iy + i < args.ne00 ? (S1) *((device T1 *) y + i) : 0; } } else { - *(threadgroup S1_2x4 *)(sb + 32*8*(tiitg%THREAD_PER_COL) + 8*(tiitg/THREAD_PER_COL)) = (S1_2x4)(*((device T1_2x4 *) y)); + const short sx = (tiitg%NL1); + const short sy = (tiitg/NL1)/8; + + const short dx = sx; + const short dy = sy; + + const short ly = (tiitg/NL1)%8; + + const short ib = 4*sx + sy; + + *(threadgroup S1_2x4 *)(sb + 64*ib + 8*ly) = (S1_2x4)(*((device T1_2x4 *) y)); } +#else + // load data and store to threadgroup memory + if (is_same::value && FC_mul_mm_bc_inp) { + threadgroup_barrier(mem_flags::mem_threadgroup); + + // no need for dequantization + for (short i = 0; i < 16; i++) { + const short sx = 2*il0 + i/8; + const short sy = (tiitg/NL0)/8; + + const short lx = i%8; + const short ly = (tiitg/NL0)%8; + //const short lx = (tiitg/NL0)%8; + //const short ly = i%8; + + *(sa + NK*(8*sy + ly) + 8*sx + lx) = loop_k + 16*il + i < args.ne00 ? *((device T0 *) x + i) : 0; + } + } else { + S0_4x4 temp_a; + dequantize_func(x, il, temp_a); + + threadgroup_barrier(mem_flags::mem_threadgroup); + + FOR_UNROLL (short i = 0; i < 16; i++) { + const short sx = 2*il0 + i/8; + const short sy = (tiitg/NL0)/8; + + const short lx = i%8; + const short ly = (tiitg/NL0)%8; + //const short lx = (tiitg/NL0)%8; + //const short ly = i%8; + + *(sa + NK*(8*sy + ly) + 8*sx + lx) = temp_a[i/4][i%4]; + } + } + + if (FC_mul_mm_bc_inp) { + for (short i = 0; i < 8; ++i) { + const short sx = (tiitg%NL1); + const short sy = (tiitg/NL1)/8; + + const short lx = i; + const short ly = (tiitg/NL1)%8; + //const short lx = (tiitg/NL1)%8; + //const short ly = i; + + *(sb + NK*(8*sy + ly) + 8*sx + lx) = loop_k + iy + i < args.ne00 ? (S1) *((device T1 *) y + i) : 0; + } + } else { + const short sx = (tiitg%NL1); + const short sy = (tiitg/NL1)/8; + + //const short lx = i; + const short ly = (tiitg/NL1)%8; + //const short lx = (tiitg/NL1)%8; + //const short ly = i; + + *(threadgroup S1_2x4 *)(sb + NK*(8*sy + ly) + 8*sx) = (S1_2x4)(*((device T1_2x4 *) y)); + } +#endif il = (il + 2 < nl) ? il + 2 : il % 2; x = (il < 2) ? x + (2 + nl - 1)/nl : x; - y += BLOCK_SIZE_K; + + y += NK; threadgroup_barrier(mem_flags::mem_threadgroup); +#ifndef GGML_METAL_HAS_TENSOR // load matrices from threadgroup memory and conduct outer products - threadgroup const S0 * lsma = (sa + THREAD_MAT_M*SG_MAT_SIZE*(sgitg%2)); - threadgroup const S1 * lsmb = (sb + THREAD_MAT_N*SG_MAT_SIZE*(sgitg/2)); + threadgroup const S0 * lsma = (sa + 4*64*(sgitg%2)); + threadgroup const S1 * lsmb = (sb + 2*64*(sgitg/2)); - #pragma unroll(4) - for (short ik = 0; ik < BLOCK_SIZE_K/8; ik++) { - #pragma unroll(4) - for (short i = 0; i < 4; i++) { - simdgroup_load(ma[i], lsma + SG_MAT_SIZE * i); + FOR_UNROLL (short ik = 0; ik < NK/8; ik++) { + simdgroup_barrier(mem_flags::mem_none); + + FOR_UNROLL (short i = 0; i < 4; i++) { + simdgroup_load(ma[i], lsma + 64*i, 8, 0, false); } simdgroup_barrier(mem_flags::mem_none); - #pragma unroll(2) - for (short i = 0; i < 2; i++) { - simdgroup_load(mb[i], lsmb + SG_MAT_SIZE * i); + FOR_UNROLL (short i = 0; i < 2; i++) { + simdgroup_load(mb[i], lsmb + 64*i, 8, 0, false); } - #pragma unroll(8) - for (short i = 0; i < 8; i++){ + simdgroup_barrier(mem_flags::mem_none); + + FOR_UNROLL (short i = 0; i < 8; i++){ simdgroup_multiply_accumulate(mc[i], mb[i/4], ma[i%4], mc[i]); } - lsma += (BLOCK_SIZE_M/SG_MAT_ROW)*SG_MAT_SIZE; - lsmb += (BLOCK_SIZE_N/SG_MAT_ROW)*SG_MAT_SIZE; + lsma += 8*64; + lsmb += 4*64; } +#else + auto sA = tA.slice(0, 0); + auto sB = tB.slice(0, 0); + + mm.run(sB, sA, cT); +#endif } + // block is smaller than 64x32, we should avoid writing data outside of the matrix threadgroup_barrier(mem_flags::mem_threadgroup); - threadgroup float * temp_str = ((threadgroup float *) shmem) \ - + 32*(sgitg&1) + (16*(sgitg >> 1))*BLOCK_SIZE_M; +#ifdef GGML_METAL_HAS_TENSOR + auto tC = tensor, tensor_inline>(sc, dextents(NR0, NR1)); + cT.store(tC); +#else + threadgroup float * temp_str = ((threadgroup float *) shmem) + 32*(sgitg&1) + (16*(sgitg >> 1))*NR0; - #pragma unroll(8) for (short i = 0; i < 8; i++) { - simdgroup_store(mc[i], temp_str + 8*(i%4) + 8*BLOCK_SIZE_M*(i/4), BLOCK_SIZE_M); + simdgroup_store(mc[i], temp_str + 8*(i%4) + 8*NR0*(i/4), NR0, 0, false); } +#endif threadgroup_barrier(mem_flags::mem_threadgroup); - for (short j = sgitg; j < n_cols; j += 4) { - const int id = ids_i32[im*args.ne21 + r1*BLOCK_SIZE_N + j]; + for (short j = sgitg; j < nr1; j += 4) { + const int id = ids_i32[im*args.ne21 + r1 + j]; const short ide = id % args.ne20; const short idt = id / args.ne20; - device float * D = (device float *) dst + (r0*BLOCK_SIZE_M) + ide*args.ne0 + idt*args.ne1*args.ne0; + device float * D = (device float *) dst + r0 + ide*args.ne0 + idt*args.ne1*args.ne0; device float4 * D4 = (device float4 *) D; - threadgroup float * C = (threadgroup float *) shmem + (j*BLOCK_SIZE_M); + threadgroup float * C = (threadgroup float *) shmem + j*NR0; threadgroup float4 * C4 = (threadgroup float4 *) C; int i = tiisg; - for (; i < n_rows/4; i += 32) { + for (; i < nr0/4; i += 32) { *(D4 + i) = *(C4 + i); } - i = (4*(n_rows/4)) + tiisg; - for (; i < n_rows; i += 32) { + i = (4*(nr0/4)) + tiisg; + for (; i < nr0; i += 32) { *(D + i) = *(C + i); } } From aa374175c30184aeb1813ec71fc68780dd073906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Thu, 6 Nov 2025 14:05:47 +0100 Subject: [PATCH 10/69] CUDA: fix crash on uneven context without FA (#16988) --- ggml/src/ggml-cuda/ggml-cuda.cu | 12 ++++----- ggml/src/ggml-cuda/mmf.cu | 12 ++++++--- ggml/src/ggml-cuda/mmf.cuh | 2 +- ggml/src/ggml-cuda/mmvf.cu | 8 +++++- ggml/src/ggml-cuda/mmvf.cuh | 2 +- src/llama-context.cpp | 2 ++ tests/test-backend-ops.cpp | 44 ++++++++++++++------------------- 7 files changed, 44 insertions(+), 38 deletions(-) diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 415a7e962d..049aece1b5 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -2113,7 +2113,7 @@ static bool ggml_cuda_should_fuse_mul_mat_vec_f(const ggml_tensor * tensor) { src1->type == GGML_TYPE_F32 && dst->type == GGML_TYPE_F32; const int cc = ggml_cuda_info().devices[ggml_cuda_get_device()].cc; - use_mul_mat_vec_f = use_mul_mat_vec_f && ggml_cuda_should_use_mmvf(src0->type, cc, src0->ne, is_mul_mat_id ? src1->ne[2] : src1->ne[1]); + use_mul_mat_vec_f = use_mul_mat_vec_f && ggml_cuda_should_use_mmvf(src0->type, cc, src0->ne, src0->nb, is_mul_mat_id ? src1->ne[2] : src1->ne[1]); const bool split = ggml_backend_buft_is_cuda_split(src0->buffer->buft) || ggml_backend_buft_is_cuda_split(src1->buffer->buft); @@ -2207,16 +2207,16 @@ static void ggml_cuda_mul_mat(ggml_backend_cuda_context & ctx, const ggml_tensor const int cc = ggml_cuda_info().devices[id].cc; const int warp_size = ggml_cuda_info().devices[id].warp_size; use_mul_mat_q = use_mul_mat_q && ggml_cuda_should_use_mmq(src0->type, cc, src1->ne[1]); - use_mul_mat_f = use_mul_mat_f && ggml_cuda_should_use_mmf(src0->type, cc, warp_size, src0->ne, src1->ne[1], /*mul_mat_id=*/false); - use_mul_mat_vec_f = use_mul_mat_vec_f && ggml_cuda_should_use_mmvf(src0->type, cc, src0->ne, src1->ne[1]); + use_mul_mat_f = use_mul_mat_f && ggml_cuda_should_use_mmf(src0->type, cc, warp_size, src0->ne, src0->nb, src1->ne[1], /*mul_mat_id=*/false); + use_mul_mat_vec_f = use_mul_mat_vec_f && ggml_cuda_should_use_mmvf(src0->type, cc, src0->ne, src0->nb, src1->ne[1]); any_gpus_with_slow_fp16 = any_gpus_with_slow_fp16 || !fast_fp16_hardware_available(cc); } } else { const int cc = ggml_cuda_info().devices[ctx.device].cc; const int warp_size = ggml_cuda_info().devices[ctx.device].warp_size; use_mul_mat_q = use_mul_mat_q && ggml_cuda_should_use_mmq(src0->type, cc, src1->ne[1]); - use_mul_mat_f = use_mul_mat_f && ggml_cuda_should_use_mmf(src0->type, cc, warp_size, src0->ne, src1->ne[1], /*mul_mat_id=*/false); - use_mul_mat_vec_f = use_mul_mat_vec_f && ggml_cuda_should_use_mmvf(src0->type, cc, src0->ne, src1->ne[1]); + use_mul_mat_f = use_mul_mat_f && ggml_cuda_should_use_mmf(src0->type, cc, warp_size, src0->ne, src0->nb, src1->ne[1], /*mul_mat_id=*/false); + use_mul_mat_vec_f = use_mul_mat_vec_f && ggml_cuda_should_use_mmvf(src0->type, cc, src0->ne, src0->nb, src1->ne[1]); any_gpus_with_slow_fp16 = any_gpus_with_slow_fp16 || !fast_fp16_hardware_available(cc); } @@ -2287,7 +2287,7 @@ static void ggml_cuda_mul_mat_id(ggml_backend_cuda_context & ctx, ggml_tensor * return; } - if (ggml_cuda_should_use_mmf(src0->type, cc, WARP_SIZE, src0->ne, src1->ne[2], /*mul_mat_id=*/true)) { + if (ggml_cuda_should_use_mmf(src0->type, cc, WARP_SIZE, src0->ne, src0->nb, src1->ne[2], /*mul_mat_id=*/true)) { ggml_cuda_mul_mat_f(ctx, src0, src1, ids, dst); return; } diff --git a/ggml/src/ggml-cuda/mmf.cu b/ggml/src/ggml-cuda/mmf.cu index 2b0a61395b..69a60aceb8 100644 --- a/ggml/src/ggml-cuda/mmf.cu +++ b/ggml/src/ggml-cuda/mmf.cu @@ -119,15 +119,21 @@ void ggml_cuda_mul_mat_f(ggml_backend_cuda_context & ctx, const ggml_tensor * sr } } -bool ggml_cuda_should_use_mmf(enum ggml_type type, int cc, int warp_size, const int64_t * src0_ne, const int src1_ncols, bool mul_mat_id) { - +bool ggml_cuda_should_use_mmf(enum ggml_type type, int cc, int warp_size, const int64_t * src0_ne, + const size_t * src0_nb, const int src1_ncols, bool mul_mat_id) { if (ggml_is_quantized(type)) { return false; } - if (src0_ne[0] % (warp_size * (4/ggml_type_size(type))) != 0) { + const size_t ts = ggml_type_size(type); + if (src0_ne[0] % (warp_size * (4/ts)) != 0) { return false; } + for (size_t i = 0; i < GGML_MAX_DIMS; ++i) { + if (src0_nb[i] % (2*ts) != 0) { + return false; + } + } if (src0_ne[1] % MMF_ROWS_PER_BLOCK != 0) { return false; } diff --git a/ggml/src/ggml-cuda/mmf.cuh b/ggml/src/ggml-cuda/mmf.cuh index f7e46e2f63..45724e0911 100644 --- a/ggml/src/ggml-cuda/mmf.cuh +++ b/ggml/src/ggml-cuda/mmf.cuh @@ -17,7 +17,7 @@ struct mmf_ids_data { void ggml_cuda_mul_mat_f(ggml_backend_cuda_context & ctx, const ggml_tensor * src0, const ggml_tensor * src1, const ggml_tensor * ids, ggml_tensor * dst); -bool ggml_cuda_should_use_mmf(enum ggml_type type, int cc, int warp_size, const int64_t * scr0_ne, const int src1_ncols, bool mul_mat_id); +bool ggml_cuda_should_use_mmf(enum ggml_type type, int cc, int warp_size, const int64_t * scr0_ne, const size_t * src0_nb, const int src1_ncols, bool mul_mat_id); template __launch_bounds__(ggml_cuda_get_physical_warp_size()*nwarps, 1) diff --git a/ggml/src/ggml-cuda/mmvf.cu b/ggml/src/ggml-cuda/mmvf.cu index 4e31783436..526d90d7ae 100644 --- a/ggml/src/ggml-cuda/mmvf.cu +++ b/ggml/src/ggml-cuda/mmvf.cu @@ -716,10 +716,16 @@ void ggml_cuda_op_mul_mat_vec_f( GGML_UNUSED_VARS(ctx, src1, dst, src1_ddq_i, src1_ncols, src1_padded_row_size); } -bool ggml_cuda_should_use_mmvf(enum ggml_type type, int cc, const int64_t * src0_ne, int64_t ne11) { +bool ggml_cuda_should_use_mmvf(enum ggml_type type, int cc, const int64_t * src0_ne, const size_t * src0_nb, int64_t ne11) { if (src0_ne[0] % 2 != 0) { return false; } + const size_t ts = ggml_type_size(type); + for (size_t i = 0; i < GGML_MAX_DIMS; ++i) { + if (src0_nb[i] % (2*ts) != 0) { + return false; + } + } switch (type) { case GGML_TYPE_F32: if (GGML_CUDA_CC_IS_NVIDIA(cc)) { diff --git a/ggml/src/ggml-cuda/mmvf.cuh b/ggml/src/ggml-cuda/mmvf.cuh index a205aa8e4c..a09fbdc720 100644 --- a/ggml/src/ggml-cuda/mmvf.cuh +++ b/ggml/src/ggml-cuda/mmvf.cuh @@ -9,4 +9,4 @@ void ggml_cuda_op_mul_mat_vec_f( const char * src1_ddq_i, float * dst_dd_i, const int64_t row_low, const int64_t row_high, const int64_t src1_ncols, const int64_t src1_padded_row_size, cudaStream_t stream); -bool ggml_cuda_should_use_mmvf(enum ggml_type type, int cc, const int64_t * src0_ne, int64_t ne11); +bool ggml_cuda_should_use_mmvf(enum ggml_type type, int cc, const int64_t * src0_ne, const size_t * src0_nb, int64_t ne11); diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 2b39366271..866514038e 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -21,6 +21,8 @@ llama_context::llama_context( llama_context_params params) : model(model), balloc(std::make_unique(model.hparams.n_pos_per_embd())) { + // TODO warning when creating llama_context with awkward ctx size that is not a power of 2, + // may need to be backend-dependent LLAMA_LOG_INFO("%s: constructing llama_context\n", __func__); t_start_us = model.t_start_us; diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index f575420279..bffd60f386 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -3385,11 +3385,11 @@ struct test_mul_mat : public test_case { const std::array bs; // dims 3 and 4 const std::array nr; // repeat in dims 3 and 4 const std::array per; // permutation of dimensions - const bool v; // whether a and b are non-contiguous views + const int64_t k_v; // size of k in memory, resulting in a non-contiguous view for k_v > k, no view for k_v == 0 const uint32_t o; // number of outputs std::string vars() override { - return VARS_TO_STR10(type_a, type_b, m, n, k, bs, nr, per, v, o); + return VARS_TO_STR10(type_a, type_b, m, n, k, bs, nr, per, k_v, o); } double max_nmse_err() override { @@ -3410,8 +3410,8 @@ struct test_mul_mat : public test_case { std::array bs = {10, 10}, std::array nr = {2, 2}, std::array per = {0, 1, 2, 3}, - bool v = false, uint32_t o = 1) - : type_a(type_a), type_b(type_b), m(m), n(n), k(k), bs(bs), nr(nr), per(per), v(v), o(o) {} + int64_t k_v = 0, uint32_t o = 1) + : type_a(type_a), type_b(type_b), m(m), n(n), k(k), bs(bs), nr(nr), per(per), k_v(k_v), o(o) {} ggml_tensor * build_graph(ggml_context * ctx) override { // C^T = A * B^T: (k, m) * (k, n) => (m, n) @@ -3421,7 +3421,7 @@ struct test_mul_mat : public test_case { const int npermuted = (per[0] != 0) + (per[1] != 1) + (per[2] != 2) + (per[3] != 3); if (npermuted > 0) { GGML_ASSERT(npermuted == 2); - GGML_ASSERT(!v); // not handled + GGML_ASSERT(k_v == 0); // not handled GGML_ASSERT(!ggml_is_quantized(type_a) || per[0] == 0); GGML_ASSERT(!ggml_is_quantized(type_b) || per[0] == 0); @@ -3445,29 +3445,21 @@ struct test_mul_mat : public test_case { ggml_set_name(a, "a_permuted"); ggml_set_name(b, "b_permuted"); } else { - if (v) { - a = ggml_new_tensor_4d(ctx, type_a, k*2, m, bs[0], bs[1]); - b = ggml_new_tensor_4d(ctx, type_b, k*2, n, bs[0]*nr[0], bs[1]*nr[1]); + const int64_t k_physical = k_v == 0 ? k : k_v; + a = ggml_new_tensor_4d(ctx, type_a, k_physical, m, bs[0], bs[1]); + b = ggml_new_tensor_4d(ctx, type_b, k_physical, n, bs[0]*nr[0], bs[1]*nr[1]); - if (!ggml_is_quantized(type_a)) { - if (bs[1] == 1 && nr[1] == 1) { - ggml_set_param(a); - } - ggml_set_param(b); + if (!ggml_is_quantized(type_a)) { + if (bs[1] == 1 && nr[1] == 1) { + ggml_set_param(a); } + ggml_set_param(b); + } + if (k_v != 0) { + GGML_ASSERT(k_v > k); a = ggml_view_4d(ctx, a, k, m, bs[0], bs[1], a->nb[1], a->nb[2], a->nb[3], 0); b = ggml_view_4d(ctx, b, k, n, bs[0]*nr[0], bs[1]*nr[1], b->nb[1], b->nb[2], b->nb[3], 0); - } else { - a = ggml_new_tensor_4d(ctx, type_a, k, m, bs[0], bs[1]); - b = ggml_new_tensor_4d(ctx, type_b, k, n, bs[0]*nr[0], bs[1]*nr[1]); - - if (!ggml_is_quantized(type_a)) { - if (bs[1] == 1 && nr[1] == 1) { - ggml_set_param(a); - } - ggml_set_param(b); - } } ggml_set_name(a, "a"); ggml_set_name(b, "b"); @@ -6901,7 +6893,7 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32, 128, 45, 64, { 8, 1}, {4, 1})); test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32, 1056, 1, 193, {1, 1}, {4, 1}, {0, 2, 1, 3})); test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32, 1056, 1, 67, {1, 1}, {4, 1}, {0, 2, 1, 3})); - test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F32, GGML_TYPE_F32, 16, 32, 32, { 1, 1}, {1, 1}, {0, 1, 2, 3}, true, 3)); + test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F32, GGML_TYPE_F32, 16, 32, 32, { 1, 1}, {1, 1}, {0, 1, 2, 3}, 64, 3)); test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F32, GGML_TYPE_F32, 64, 77, 77, {12,1}, {1,1})); #if 0 @@ -6927,7 +6919,7 @@ static std::vector> make_test_cases_eval() { for (uint32_t k = 0; k < 2; ++k) { for (ggml_type type: {GGML_TYPE_F16, GGML_TYPE_BF16, GGML_TYPE_F32}) { test_cases.emplace_back(new test_mul_mat(type, GGML_TYPE_F32, 1056 + m, 1, 128 + k, {bs, bs2}, {nr, 1}, {0, 2, 1, 3})); - test_cases.emplace_back(new test_mul_mat(type, GGML_TYPE_F32, 128 + m, 1, 1056 + k, {bs, bs2}, {nr, 1}, {0, 1, 2, 3}, true)); + test_cases.emplace_back(new test_mul_mat(type, GGML_TYPE_F32, 128 + m, 1, 1056 + k, {bs, bs2}, {nr, 1}, {0, 1, 2, 3}, 2*1056 + k)); } } } @@ -7432,7 +7424,7 @@ static std::vector> make_test_cases_perf() { test_cases.emplace_back(new test_pad_reflect_1d(GGML_TYPE_F32, {3000, 384, 4, 1})); test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32, 16416, 1, 128, {8, 1}, {4, 1}, {0, 2, 1, 3})); - test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32, 128, 1, 16416, {8, 1}, {4, 1}, {0, 1, 2, 3}, true)); + test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F16, GGML_TYPE_F32, 128, 1, 16416, {8, 1}, {4, 1}, {0, 1, 2, 3}, 2*16416)); for (int bs : {1, 2, 3, 4, 5, 8, 512}) { for (ggml_type type_a : all_types) { From 7f09a680af6e0ef612de81018e1d19c19b8651e8 Mon Sep 17 00:00:00 2001 From: xctan Date: Fri, 7 Nov 2025 00:12:45 +0800 Subject: [PATCH 11/69] ggml-cpu : optimize RVV q2_k and q3_k kernels (#16887) --- ggml/src/ggml-cpu/arch/riscv/quants.c | 163 ++++++++++++++++++-------- 1 file changed, 111 insertions(+), 52 deletions(-) diff --git a/ggml/src/ggml-cpu/arch/riscv/quants.c b/ggml/src/ggml-cpu/arch/riscv/quants.c index ee41a3502e..ae0ebb3cad 100644 --- a/ggml/src/ggml-cpu/arch/riscv/quants.c +++ b/ggml/src/ggml-cpu/arch/riscv/quants.c @@ -580,16 +580,19 @@ void ggml_vec_dot_q2_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi const float dmin = -y[i].d * GGML_CPU_FP16_TO_FP32(x[i].dmin); uint8_t *patmp = atmp; int vsums; - int tmp; + int tmp, t1, t2, t3, t4, t5, t6, t7; __asm__ __volatile__( "vsetivli zero, 16, e8, m1\n\t" "vmv.v.x v8, zero\n\t" + "lb zero, 15(%[sc])\n\t" "vle8.v v1, (%[sc])\n\t" + "vle8.v v2, (%[bsums])\n\t" + "addi %[tmp], %[bsums], 16\n\t" "vand.vi v0, v1, 0xF\n\t" "vsrl.vi v1, v1, 4\n\t" + "vle8.v v3, (%[tmp])\n\t" "vse8.v v0, (%[scale])\n\t" "vsetivli zero, 16, e16, m2\n\t" - "vle16.v v2, (%[bsums])\n\t" "vzext.vf2 v0, v1\n\t" "vwmul.vv v4, v0, v2\n\t" "vsetivli zero, 16, e32, m4\n\t" @@ -608,46 +611,89 @@ void ggml_vec_dot_q2_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi for (int j = 0; j < QK_K/128; ++j) { __asm__ __volatile__( - "vsetvli zero, %[vl32], e8, m2\n\t" + "lb zero, 31(%[q2])\n\t" + "addi %[tmp], %[q2], 16\n\t" + "addi %[t1], %[q8], 16\n\t" + "vsetivli zero, 16, e8, m1\n\t" "vle8.v v0, (%[q2])\n\t" + "vle8.v v1, (%[tmp])\n\t" "vsrl.vi v2, v0, 2\n\t" + "vsrl.vi v3, v1, 2\n\t" "vsrl.vi v4, v0, 4\n\t" - "vsrl.vi v6, v0, 6\n\t" - "vand.vi v0, v0, 0x3\n\t" - "vand.vi v2, v2, 0x3\n\t" - "vand.vi v4, v4, 0x3\n\t" - "vsetvli zero, %[vl128], e8, m8\n\t" + "addi %[tmp], %[q8], 32\n\t" "vle8.v v8, (%[q8])\n\t" - "vsetvli zero, %[vl64], e8, m4\n\t" + "vle8.v v9, (%[t1])\n\t" + "addi %[t1], %[t1], 32\n\t" + "vsrl.vi v5, v1, 4\n\t" + "vsrl.vi v6, v0, 6\n\t" + "vsrl.vi v7, v1, 6\n\t" + "vle8.v v10, (%[tmp])\n\t" + "vle8.v v11, (%[t1])\n\t" + "addi %[tmp], %[tmp], 32\n\t" + "addi %[t1], %[t1], 32\n\t" + "vand.vi v0, v0, 0x3\n\t" + "vand.vi v1, v1, 0x3\n\t" + "vand.vi v2, v2, 0x3\n\t" + "vle8.v v12, (%[tmp])\n\t" + "vle8.v v13, (%[t1])\n\t" + "addi %[tmp], %[tmp], 32\n\t" + "addi %[t1], %[t1], 32\n\t" + "vand.vi v3, v3, 0x3\n\t" + "vand.vi v4, v4, 0x3\n\t" + "vand.vi v5, v5, 0x3\n\t" + "vle8.v v14, (%[tmp])\n\t" + "vle8.v v15, (%[t1])\n\t" "vwmul.vv v16, v0, v8\n\t" + "vwmul.vv v18, v1, v9\n\t" + "vwmul.vv v20, v2, v10\n\t" + "vwmul.vv v22, v3, v11\n\t" "vwmul.vv v24, v4, v12\n\t" - "vsetivli zero, 16, e16, m2\n\t" + "vwmul.vv v26, v5, v13\n\t" + "vwmul.vv v28, v6, v14\n\t" + "vwmul.vv v30, v7, v15\n\t" + "vsetivli zero, 8, e16, m1\n\t" "vmv.v.x v0, zero\n\t" - "vwredsum.vs v10, v16, v0\n\t" + "lbu %[tmp], 0(%[scale])\n\t" + "vwredsum.vs v8, v16, v0\n\t" "vwredsum.vs v9, v18, v0\n\t" - "vwredsum.vs v8, v20, v0\n\t" - "vwredsum.vs v7, v22, v0\n\t" - "vwredsum.vs v11, v24, v0\n\t" - "vwredsum.vs v12, v26, v0\n\t" - "vwredsum.vs v13, v28, v0\n\t" - "vwredsum.vs v14, v30, v0\n\t" + "lbu %[t1], 1(%[scale])\n\t" + "vwredsum.vs v10, v20, v0\n\t" + "vwredsum.vs v11, v22, v0\n\t" + "lbu %[t2], 2(%[scale])\n\t" + "vwredsum.vs v12, v24, v0\n\t" + "vwredsum.vs v13, v26, v0\n\t" + "lbu %[t3], 3(%[scale])\n\t" + "vwredsum.vs v14, v28, v0\n\t" + "vwredsum.vs v15, v30, v0\n\t" + "lbu %[t4], 4(%[scale])\n\t" + "vwredsum.vs v8, v17, v8\n\t" + "vwredsum.vs v9, v19, v9\n\t" + "lbu %[t5], 5(%[scale])\n\t" + "vwredsum.vs v10, v21, v10\n\t" + "vwredsum.vs v11, v23, v11\n\t" + "lbu %[t6], 6(%[scale])\n\t" + "vwredsum.vs v12, v25, v12\n\t" + "vwredsum.vs v13, v27, v13\n\t" + "lbu %[t7], 7(%[scale])\n\t" + "vwredsum.vs v14, v29, v14\n\t" + "vwredsum.vs v15, v31, v15\n\t" "vsetivli zero, 4, e32, m1\n\t" - "vslideup.vi v10, v9, 1\n\t" - "vslideup.vi v8, v7, 1\n\t" - "vslideup.vi v11, v12, 1\n\t" - "vslideup.vi v13, v14, 1\n\t" - "vslideup.vi v10, v8, 2\n\t" - "vslideup.vi v11, v13, 2\n\t" - "vsetivli zero, 8, e32, m2\n\t" - "vle8.v v15, (%[scale])\n\t" - "vzext.vf4 v12, v15\n\t" - "vmul.vv v10, v10, v12\n\t" - "vredsum.vs v0, v10, v0\n\t" + "vmul.vx v0, v8, %[tmp]\n\t" + "vmul.vx v1, v9, %[t1]\n\t" + "vmacc.vx v0, %[t2], v10\n\t" + "vmacc.vx v1, %[t3], v11\n\t" + "vmacc.vx v0, %[t4], v12\n\t" + "vmacc.vx v1, %[t5], v13\n\t" + "vmacc.vx v0, %[t6], v14\n\t" + "vmacc.vx v1, %[t7], v15\n\t" "vmv.x.s %[tmp], v0\n\t" - "add %[isum], %[isum], %[tmp]" - : [tmp] "=&r" (tmp), [isum] "+&r" (isum) + "vmv.x.s %[t1], v1\n\t" + "add %[isum], %[isum], %[tmp]\n\t" + "add %[isum], %[isum], %[t1]" + : [tmp] "=&r" (tmp), [t1] "=&r" (t1), [t2] "=&r" (t2), [t3] "=&r" (t3) + , [t4] "=&r" (t4), [t5] "=&r" (t5), [t6] "=&r" (t6), [t7] "=&r" (t7) + , [isum] "+&r" (isum) : [q2] "r" (q2), [scale] "r" (patmp), [q8] "r" (q8) - , [vl32] "r" (32), [vl64] "r" (64), [vl128] "r" (128) : "memory" , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" @@ -929,7 +975,7 @@ void ggml_vec_dot_q3_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi const int8_t * restrict q8 = y[i].qs; int8_t * scale = (int8_t *)utmp; - int tmp; + int tmp, t1, t2, t3, t4, t5, t6, t7; __asm__ __volatile__( "vsetivli zero, 12, e8, m1\n\t" "vle8.v v0, (%[s6b])\n\t" @@ -967,19 +1013,23 @@ void ggml_vec_dot_q3_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi int isum = 0; for (int j = 0; j < QK_K; j += 128) { __asm__ __volatile__( + "lb zero, 31(%[q3])\n\t" "vsetvli zero, %[vl32], e8, m2, ta, mu\n\t" "vle8.v v8, (%[q3])\n\t" "vsrl.vi v10, v8, 2\n\t" "vsrl.vi v12, v8, 4\n\t" "vsrl.vi v14, v8, 6\n\t" + "lb zero, 64(%[q8])\n\t" "vand.vi v8, v8, 3\n\t" "vand.vi v10, v10, 3\n\t" "vand.vi v12, v12, 3\n\t" "vle8.v v2, (%[qh])\n\t" + "lb zero, 127(%[q8])\n\t" "vand.vx v4, v2, %[m]\n\t" "slli %[m], %[m], 1\n\t" "vmseq.vx v0, v4, zero\n\t" "vadd.vi v8, v8, -4, v0.t\n\t" + "lb zero, 0(%[q8])\n\t" "vand.vx v4, v2, %[m]\n\t" "slli %[m], %[m], 1\n\t" "vmseq.vx v0, v4, zero\n\t" @@ -994,34 +1044,43 @@ void ggml_vec_dot_q3_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi "vadd.vi v14, v14, -4, v0.t\n\t" "vsetvli zero, %[vl128], e8, m8\n\t" "vle8.v v0, (%[q8])\n\t" + "lb %[tmp], 0(%[scale])\n\t" + "lb %[t1], 1(%[scale])\n\t" + "lb %[t2], 2(%[scale])\n\t" + "lb %[t3], 3(%[scale])\n\t" "vsetvli zero, %[vl64], e8, m4\n\t" "vwmul.vv v16, v0, v8\n\t" "vwmul.vv v24, v4, v12\n\t" "vsetivli zero, 16, e16, m2\n\t" "vmv.v.x v0, zero\n\t" - "vwredsum.vs v10, v16, v0\n\t" + "vwredsum.vs v8, v16, v0\n\t" + "lb %[t4], 4(%[scale])\n\t" + "lb %[t5], 5(%[scale])\n\t" "vwredsum.vs v9, v18, v0\n\t" - "vwredsum.vs v8, v20, v0\n\t" - "vwredsum.vs v7, v22, v0\n\t" - "vwredsum.vs v11, v24, v0\n\t" - "vwredsum.vs v12, v26, v0\n\t" - "vwredsum.vs v13, v28, v0\n\t" - "vwredsum.vs v14, v30, v0\n\t" + "vwredsum.vs v10, v20, v0\n\t" + "vwredsum.vs v11, v22, v0\n\t" + "vwredsum.vs v12, v24, v0\n\t" + "lb %[t6], 6(%[scale])\n\t" + "lb %[t7], 7(%[scale])\n\t" + "vwredsum.vs v13, v26, v0\n\t" + "vwredsum.vs v14, v28, v0\n\t" + "vwredsum.vs v15, v30, v0\n\t" "vsetivli zero, 4, e32, m1\n\t" - "vslideup.vi v10, v9, 1\n\t" - "vslideup.vi v8, v7, 1\n\t" - "vslideup.vi v11, v12, 1\n\t" - "vslideup.vi v13, v14, 1\n\t" - "vslideup.vi v10, v8, 2\n\t" - "vslideup.vi v11, v13, 2\n\t" - "vsetivli zero, 8, e32, m2\n\t" - "vle8.v v15, (%[scale])\n\t" - "vsext.vf4 v12, v15\n\t" - "vmul.vv v10, v10, v12\n\t" - "vredsum.vs v0, v10, v0\n\t" + "vmul.vx v0, v8, %[tmp]\n\t" + "vmul.vx v1, v9, %[t1]\n\t" + "vmacc.vx v0, %[t2], v10\n\t" + "vmacc.vx v1, %[t3], v11\n\t" + "vmacc.vx v0, %[t4], v12\n\t" + "vmacc.vx v1, %[t5], v13\n\t" + "vmacc.vx v0, %[t6], v14\n\t" + "vmacc.vx v1, %[t7], v15\n\t" "vmv.x.s %[tmp], v0\n\t" - "add %[isum], %[isum], %[tmp]" - : [tmp] "=&r" (tmp), [m] "+&r" (m), [isum] "+&r" (isum) + "vmv.x.s %[t1], v1\n\t" + "add %[isum], %[isum], %[tmp]\n\t" + "add %[isum], %[isum], %[t1]" + : [tmp] "=&r" (tmp), [t1] "=&r" (t1), [t2] "=&r" (t2), [t3] "=&r" (t3) + , [t4] "=&r" (t4), [t5] "=&r" (t5), [t6] "=&r" (t6), [t7] "=&r" (t7) + , [m] "+&r" (m), [isum] "+&r" (isum) : [vl128] "r" (128), [vl64] "r" (64), [vl32] "r" (32) , [q3] "r" (q3), [qh] "r" (qh), [scale] "r" (scale), [q8] "r" (q8) : "memory" From 5c9a18e674be444e847d8e07a6b851764708fb12 Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Fri, 7 Nov 2025 11:23:34 +0100 Subject: [PATCH 12/69] common: move download functions to download.(cpp|h) (#17059) * common: move download functions to download.(cpp|h) * rm unused includes * minor cleanup --------- Co-authored-by: Georgi Gerganov --- common/CMakeLists.txt | 2 + common/arg.cpp | 1004 +--------------------------------------- common/arg.h | 4 +- common/download.cpp | 1014 +++++++++++++++++++++++++++++++++++++++++ common/download.h | 41 ++ 5 files changed, 1066 insertions(+), 999 deletions(-) create mode 100644 common/download.cpp create mode 100644 common/download.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index fe290bf8fd..7086d08e5e 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -56,6 +56,8 @@ add_library(${TARGET} STATIC common.h console.cpp console.h + download.cpp + download.h http.h json-partial.cpp json-partial.h diff --git a/common/arg.cpp b/common/arg.cpp index 4316917d74..5597de121c 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -2,10 +2,10 @@ #include "chat.h" #include "common.h" -#include "gguf.h" // for reading GGUF splits #include "json-schema-to-grammar.h" #include "log.h" #include "sampling.h" +#include "download.h" // fix problem with std::min and std::max #if defined(_WIN32) @@ -22,23 +22,14 @@ #include #include #include -#include #include -#include #include #include #include #include -#include +#include // for hardware_concurrency #include -#if defined(LLAMA_USE_CURL) -#include -#include -#else -#include "http.h" -#endif - #ifdef __linux__ #include #elif defined(_WIN32) @@ -52,16 +43,9 @@ #endif #define LLAMA_MAX_URL_LENGTH 2084 // Maximum URL Length in Chrome: 2083 -// isatty -#if defined(_WIN32) -#include -#else -#include -#endif - using json = nlohmann::ordered_json; -std::initializer_list mmproj_examples = { +static std::initializer_list mmproj_examples = { LLAMA_EXAMPLE_MTMD, LLAMA_EXAMPLE_SERVER, }; @@ -76,50 +60,13 @@ static std::string read_file(const std::string & fname) { return content; } -static void write_file(const std::string & fname, const std::string & content) { - const std::string fname_tmp = fname + ".tmp"; - std::ofstream file(fname_tmp); - if (!file) { - throw std::runtime_error(string_format("error: failed to open file '%s'\n", fname.c_str())); - } - - try { - file << content; - file.close(); - - // Makes write atomic - if (rename(fname_tmp.c_str(), fname.c_str()) != 0) { - LOG_ERR("%s: unable to rename file: %s to %s\n", __func__, fname_tmp.c_str(), fname.c_str()); - // If rename fails, try to delete the temporary file - if (remove(fname_tmp.c_str()) != 0) { - LOG_ERR("%s: unable to delete temporary file: %s\n", __func__, fname_tmp.c_str()); - } - } - } catch (...) { - // If anything fails, try to delete the temporary file - if (remove(fname_tmp.c_str()) != 0) { - LOG_ERR("%s: unable to delete temporary file: %s\n", __func__, fname_tmp.c_str()); - } - - throw std::runtime_error(string_format("error: failed to write file '%s'\n", fname.c_str())); - } -} - -static bool is_output_a_tty() { -#if defined(_WIN32) - return _isatty(_fileno(stdout)); -#else - return isatty(1); -#endif -} - common_arg & common_arg::set_examples(std::initializer_list examples) { - this->examples = std::move(examples); + this->examples = examples; return *this; } common_arg & common_arg::set_excludes(std::initializer_list excludes) { - this->excludes = std::move(excludes); + this->excludes = excludes; return *this; } @@ -142,7 +89,7 @@ bool common_arg::is_exclude(enum llama_example ex) { return excludes.find(ex) != excludes.end(); } -bool common_arg::get_value_from_env(std::string & output) { +bool common_arg::get_value_from_env(std::string & output) const { if (env == nullptr) return false; char * value = std::getenv(env); if (value) { @@ -152,7 +99,7 @@ bool common_arg::get_value_from_env(std::string & output) { return false; } -bool common_arg::has_value_from_env() { +bool common_arg::has_value_from_env() const { return env != nullptr && std::getenv(env); } @@ -220,943 +167,6 @@ std::string common_arg::to_string() { return ss.str(); } -// -// downloader -// - -struct common_hf_file_res { - std::string repo; // repo name with ":tag" removed - std::string ggufFile; - std::string mmprojFile; -}; - -static void write_etag(const std::string & path, const std::string & etag) { - const std::string etag_path = path + ".etag"; - write_file(etag_path, etag); - LOG_DBG("%s: file etag saved: %s\n", __func__, etag_path.c_str()); -} - -static std::string read_etag(const std::string & path) { - std::string none; - const std::string etag_path = path + ".etag"; - - if (std::filesystem::exists(etag_path)) { - std::ifstream etag_in(etag_path); - if (!etag_in) { - LOG_ERR("%s: could not open .etag file for reading: %s\n", __func__, etag_path.c_str()); - return none; - } - std::string etag; - std::getline(etag_in, etag); - return etag; - } - - // no etag file, but maybe there is an old .json - // remove this code later - const std::string metadata_path = path + ".json"; - - if (std::filesystem::exists(metadata_path)) { - std::ifstream metadata_in(metadata_path); - try { - nlohmann::json metadata_json; - metadata_in >> metadata_json; - LOG_DBG("%s: previous metadata file found %s: %s\n", __func__, metadata_path.c_str(), - metadata_json.dump().c_str()); - if (metadata_json.contains("etag") && metadata_json.at("etag").is_string()) { - std::string etag = metadata_json.at("etag"); - write_etag(path, etag); - if (!std::filesystem::remove(metadata_path)) { - LOG_WRN("%s: failed to delete old .json metadata file: %s\n", __func__, metadata_path.c_str()); - } - return etag; - } - } catch (const nlohmann::json::exception & e) { - LOG_ERR("%s: error reading metadata file %s: %s\n", __func__, metadata_path.c_str(), e.what()); - } - } - return none; -} - -#ifdef LLAMA_USE_CURL - -// -// CURL utils -// - -using curl_ptr = std::unique_ptr; - -// cannot use unique_ptr for curl_slist, because we cannot update without destroying the old one -struct curl_slist_ptr { - struct curl_slist * ptr = nullptr; - ~curl_slist_ptr() { - if (ptr) { - curl_slist_free_all(ptr); - } - } -}; - -static CURLcode common_curl_perf(CURL * curl) { - CURLcode res = curl_easy_perform(curl); - if (res != CURLE_OK) { - LOG_ERR("%s: curl_easy_perform() failed\n", __func__); - } - - return res; -} - -// Send a HEAD request to retrieve the etag and last-modified headers -struct common_load_model_from_url_headers { - std::string etag; - std::string last_modified; - std::string accept_ranges; -}; - -struct FILE_deleter { - void operator()(FILE * f) const { fclose(f); } -}; - -static size_t common_header_callback(char * buffer, size_t, size_t n_items, void * userdata) { - common_load_model_from_url_headers * headers = (common_load_model_from_url_headers *) userdata; - static std::regex header_regex("([^:]+): (.*)\r\n"); - static std::regex etag_regex("ETag", std::regex_constants::icase); - static std::regex last_modified_regex("Last-Modified", std::regex_constants::icase); - static std::regex accept_ranges_regex("Accept-Ranges", std::regex_constants::icase); - std::string header(buffer, n_items); - std::smatch match; - if (std::regex_match(header, match, header_regex)) { - const std::string & key = match[1]; - const std::string & value = match[2]; - if (std::regex_match(key, match, etag_regex)) { - headers->etag = value; - } else if (std::regex_match(key, match, last_modified_regex)) { - headers->last_modified = value; - } else if (std::regex_match(key, match, accept_ranges_regex)) { - headers->accept_ranges = value; - } - } - - return n_items; -} - -static size_t common_write_callback(void * data, size_t size, size_t nmemb, void * fd) { - return std::fwrite(data, size, nmemb, static_cast(fd)); -} - -// helper function to hide password in URL -static std::string llama_download_hide_password_in_url(const std::string & url) { - // Use regex to match and replace the user[:password]@ pattern in URLs - // Pattern: scheme://[user[:password]@]host[...] - static const std::regex url_regex(R"(^(?:[A-Za-z][A-Za-z0-9+.-]://)(?:[^/@]+@)?.$)"); - std::smatch match; - - if (std::regex_match(url, match, url_regex)) { - // match[1] = scheme (e.g., "https://") - // match[2] = user[:password]@ part - // match[3] = rest of URL (host and path) - return match[1].str() + "********@" + match[3].str(); - } - - return url; // No credentials found or malformed URL -} - -static void common_curl_easy_setopt_head(CURL * curl, const std::string & url) { - // Set the URL, allow to follow http redirection - curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); - -# if defined(_WIN32) - // CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of - // operating system. Currently implemented under MS-Windows. - curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA); -# endif - - curl_easy_setopt(curl, CURLOPT_NOBODY, 1L); // will trigger the HEAD verb - curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L); // hide head request progress - curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, common_header_callback); -} - -static void common_curl_easy_setopt_get(CURL * curl) { - curl_easy_setopt(curl, CURLOPT_NOBODY, 0L); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, common_write_callback); - - // display download progress - curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L); -} - -static bool common_pull_file(CURL * curl, const std::string & path_temporary) { - if (std::filesystem::exists(path_temporary)) { - const std::string partial_size = std::to_string(std::filesystem::file_size(path_temporary)); - LOG_INF("%s: server supports range requests, resuming download from byte %s\n", __func__, partial_size.c_str()); - const std::string range_str = partial_size + "-"; - curl_easy_setopt(curl, CURLOPT_RANGE, range_str.c_str()); - } - - // Always open file in append mode could be resuming - std::unique_ptr outfile(fopen(path_temporary.c_str(), "ab")); - if (!outfile) { - LOG_ERR("%s: error opening local file for writing: %s\n", __func__, path_temporary.c_str()); - return false; - } - - common_curl_easy_setopt_get(curl); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile.get()); - - return common_curl_perf(curl) == CURLE_OK; -} - -static bool common_download_head(CURL * curl, - curl_slist_ptr & http_headers, - const std::string & url, - const std::string & bearer_token) { - if (!curl) { - LOG_ERR("%s: error initializing libcurl\n", __func__); - return false; - } - - http_headers.ptr = curl_slist_append(http_headers.ptr, "User-Agent: llama-cpp"); - // Check if hf-token or bearer-token was specified - if (!bearer_token.empty()) { - std::string auth_header = "Authorization: Bearer " + bearer_token; - http_headers.ptr = curl_slist_append(http_headers.ptr, auth_header.c_str()); - } - - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, http_headers.ptr); - common_curl_easy_setopt_head(curl, url); - return common_curl_perf(curl) == CURLE_OK; -} - -// download one single file from remote URL to local path -static bool common_download_file_single_online(const std::string & url, - const std::string & path, - const std::string & bearer_token) { - static const int max_attempts = 3; - static const int retry_delay_seconds = 2; - for (int i = 0; i < max_attempts; ++i) { - std::string etag; - - // Check if the file already exists locally - const auto file_exists = std::filesystem::exists(path); - if (file_exists) { - etag = read_etag(path); - } else { - LOG_INF("%s: no previous model file found %s\n", __func__, path.c_str()); - } - - bool head_request_ok = false; - bool should_download = !file_exists; // by default, we should download if the file does not exist - - // Initialize libcurl - curl_ptr curl(curl_easy_init(), &curl_easy_cleanup); - common_load_model_from_url_headers headers; - curl_easy_setopt(curl.get(), CURLOPT_HEADERDATA, &headers); - curl_slist_ptr http_headers; - const bool was_perform_successful = common_download_head(curl.get(), http_headers, url, bearer_token); - if (!was_perform_successful) { - head_request_ok = false; - } - - long http_code = 0; - curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &http_code); - if (http_code == 200) { - head_request_ok = true; - } else { - LOG_WRN("%s: HEAD invalid http status code received: %ld\n", __func__, http_code); - head_request_ok = false; - } - - // if head_request_ok is false, we don't have the etag or last-modified headers - // we leave should_download as-is, which is true if the file does not exist - bool should_download_from_scratch = false; - if (head_request_ok) { - // check if ETag or Last-Modified headers are different - // if it is, we need to download the file again - if (!etag.empty() && etag != headers.etag) { - LOG_WRN("%s: ETag header is different (%s != %s): triggering a new download\n", __func__, etag.c_str(), - headers.etag.c_str()); - should_download = true; - should_download_from_scratch = true; - } - } - - const bool accept_ranges_supported = !headers.accept_ranges.empty() && headers.accept_ranges != "none"; - if (should_download) { - if (file_exists && - !accept_ranges_supported) { // Resumable downloads not supported, delete and start again. - LOG_WRN("%s: deleting previous downloaded file: %s\n", __func__, path.c_str()); - if (remove(path.c_str()) != 0) { - LOG_ERR("%s: unable to delete file: %s\n", __func__, path.c_str()); - return false; - } - } - - const std::string path_temporary = path + ".downloadInProgress"; - if (should_download_from_scratch) { - if (std::filesystem::exists(path_temporary)) { - if (remove(path_temporary.c_str()) != 0) { - LOG_ERR("%s: unable to delete file: %s\n", __func__, path_temporary.c_str()); - return false; - } - } - - if (std::filesystem::exists(path)) { - if (remove(path.c_str()) != 0) { - LOG_ERR("%s: unable to delete file: %s\n", __func__, path.c_str()); - return false; - } - } - } - if (head_request_ok) { - write_etag(path, headers.etag); - } - - // start the download - LOG_INF("%s: trying to download model from %s to %s (server_etag:%s, server_last_modified:%s)...\n", - __func__, llama_download_hide_password_in_url(url).c_str(), path_temporary.c_str(), - headers.etag.c_str(), headers.last_modified.c_str()); - const bool was_pull_successful = common_pull_file(curl.get(), path_temporary); - if (!was_pull_successful) { - if (i + 1 < max_attempts) { - const int exponential_backoff_delay = std::pow(retry_delay_seconds, i) * 1000; - LOG_WRN("%s: retrying after %d milliseconds...\n", __func__, exponential_backoff_delay); - std::this_thread::sleep_for(std::chrono::milliseconds(exponential_backoff_delay)); - } else { - LOG_ERR("%s: curl_easy_perform() failed after %d attempts\n", __func__, max_attempts); - } - - continue; - } - - long http_code = 0; - curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &http_code); - if (http_code < 200 || http_code >= 400) { - LOG_ERR("%s: invalid http status code received: %ld\n", __func__, http_code); - return false; - } - - if (rename(path_temporary.c_str(), path.c_str()) != 0) { - LOG_ERR("%s: unable to rename file: %s to %s\n", __func__, path_temporary.c_str(), path.c_str()); - return false; - } - } else { - LOG_INF("%s: using cached file: %s\n", __func__, path.c_str()); - } - - break; - } - - return true; -} - -std::pair> common_remote_get_content(const std::string & url, const common_remote_params & params) { - curl_ptr curl(curl_easy_init(), &curl_easy_cleanup); - curl_slist_ptr http_headers; - std::vector res_buffer; - - curl_easy_setopt(curl.get(), CURLOPT_URL, url.c_str()); - curl_easy_setopt(curl.get(), CURLOPT_NOPROGRESS, 1L); - curl_easy_setopt(curl.get(), CURLOPT_FOLLOWLOCATION, 1L); - curl_easy_setopt(curl.get(), CURLOPT_VERBOSE, 1L); - typedef size_t(*CURLOPT_WRITEFUNCTION_PTR)(void * ptr, size_t size, size_t nmemb, void * data); - auto write_callback = [](void * ptr, size_t size, size_t nmemb, void * data) -> size_t { - auto data_vec = static_cast *>(data); - data_vec->insert(data_vec->end(), (char *)ptr, (char *)ptr + size * nmemb); - return size * nmemb; - }; - curl_easy_setopt(curl.get(), CURLOPT_WRITEFUNCTION, static_cast(write_callback)); - curl_easy_setopt(curl.get(), CURLOPT_WRITEDATA, &res_buffer); -#if defined(_WIN32) - curl_easy_setopt(curl.get(), CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA); -#endif - if (params.timeout > 0) { - curl_easy_setopt(curl.get(), CURLOPT_TIMEOUT, params.timeout); - } - if (params.max_size > 0) { - curl_easy_setopt(curl.get(), CURLOPT_MAXFILESIZE, params.max_size); - } - http_headers.ptr = curl_slist_append(http_headers.ptr, "User-Agent: llama-cpp"); - for (const auto & header : params.headers) { - http_headers.ptr = curl_slist_append(http_headers.ptr, header.c_str()); - } - curl_easy_setopt(curl.get(), CURLOPT_HTTPHEADER, http_headers.ptr); - - CURLcode res = curl_easy_perform(curl.get()); - - if (res != CURLE_OK) { - std::string error_msg = curl_easy_strerror(res); - throw std::runtime_error("error: cannot make GET request: " + error_msg); - } - - long res_code; - curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &res_code); - - return { res_code, std::move(res_buffer) }; -} - -#else - -static void print_progress(size_t current, size_t total) { - if (!is_output_a_tty()) { - return; - } - - if (!total) { - return; - } - - size_t width = 50; - size_t pct = (100 * current) / total; - size_t pos = (width * current) / total; - - std::cout << "[" - << std::string(pos, '=') - << (pos < width ? ">" : "") - << std::string(width - pos, ' ') - << "] " << std::setw(3) << pct << "% (" - << current / (1024 * 1024) << " MB / " - << total / (1024 * 1024) << " MB)\r"; - std::cout.flush(); -} - -static bool common_pull_file(httplib::Client & cli, - const std::string & resolve_path, - const std::string & path_tmp, - bool supports_ranges, - size_t existing_size, - size_t & total_size) { - std::ofstream ofs(path_tmp, std::ios::binary | std::ios::app); - if (!ofs.is_open()) { - LOG_ERR("%s: error opening local file for writing: %s\n", __func__, path_tmp.c_str()); - return false; - } - - httplib::Headers headers; - if (supports_ranges && existing_size > 0) { - headers.emplace("Range", "bytes=" + std::to_string(existing_size) + "-"); - } - - std::atomic downloaded{existing_size}; - - auto res = cli.Get(resolve_path, headers, - [&](const httplib::Response &response) { - if (existing_size > 0 && response.status != 206) { - LOG_WRN("%s: server did not respond with 206 Partial Content for a resume request. Status: %d\n", __func__, response.status); - return false; - } - if (existing_size == 0 && response.status != 200) { - LOG_WRN("%s: download received non-successful status code: %d\n", __func__, response.status); - return false; - } - if (total_size == 0 && response.has_header("Content-Length")) { - try { - size_t content_length = std::stoull(response.get_header_value("Content-Length")); - total_size = existing_size + content_length; - } catch (const std::exception &e) { - LOG_WRN("%s: invalid Content-Length header: %s\n", __func__, e.what()); - } - } - return true; - }, - [&](const char *data, size_t len) { - ofs.write(data, len); - if (!ofs) { - LOG_ERR("%s: error writing to file: %s\n", __func__, path_tmp.c_str()); - return false; - } - downloaded += len; - print_progress(downloaded, total_size); - return true; - }, - nullptr - ); - - std::cout << "\n"; - - if (!res) { - LOG_ERR("%s: error during download. Status: %d\n", __func__, res ? res->status : -1); - return false; - } - - return true; -} - -// download one single file from remote URL to local path -static bool common_download_file_single_online(const std::string & url, - const std::string & path, - const std::string & bearer_token) { - static const int max_attempts = 3; - static const int retry_delay_seconds = 2; - - auto [cli, parts] = common_http_client(url); - - httplib::Headers default_headers = {{"User-Agent", "llama-cpp"}}; - if (!bearer_token.empty()) { - default_headers.insert({"Authorization", "Bearer " + bearer_token}); - } - cli.set_default_headers(default_headers); - - const bool file_exists = std::filesystem::exists(path); - - std::string last_etag; - if (file_exists) { - last_etag = read_etag(path); - } else { - LOG_INF("%s: no previous model file found %s\n", __func__, path.c_str()); - } - - for (int i = 0; i < max_attempts; ++i) { - auto head = cli.Head(parts.path); - bool head_ok = head && head->status >= 200 && head->status < 300; - if (!head_ok) { - LOG_WRN("%s: HEAD invalid http status code received: %d\n", __func__, head ? head->status : -1); - if (file_exists) { - LOG_INF("%s: Using cached file (HEAD failed): %s\n", __func__, path.c_str()); - return true; - } - } - - std::string etag; - if (head_ok && head->has_header("ETag")) { - etag = head->get_header_value("ETag"); - } - - size_t total_size = 0; - if (head_ok && head->has_header("Content-Length")) { - try { - total_size = std::stoull(head->get_header_value("Content-Length")); - } catch (const std::exception& e) { - LOG_WRN("%s: Invalid Content-Length in HEAD response: %s\n", __func__, e.what()); - } - } - - bool supports_ranges = false; - if (head_ok && head->has_header("Accept-Ranges")) { - supports_ranges = head->get_header_value("Accept-Ranges") != "none"; - } - - bool should_download_from_scratch = false; - if (!last_etag.empty() && !etag.empty() && last_etag != etag) { - LOG_WRN("%s: ETag header is different (%s != %s): triggering a new download\n", __func__, - last_etag.c_str(), etag.c_str()); - should_download_from_scratch = true; - } - - if (file_exists) { - if (!should_download_from_scratch) { - LOG_INF("%s: using cached file: %s\n", __func__, path.c_str()); - return true; - } - LOG_WRN("%s: deleting previous downloaded file: %s\n", __func__, path.c_str()); - if (remove(path.c_str()) != 0) { - LOG_ERR("%s: unable to delete file: %s\n", __func__, path.c_str()); - return false; - } - } - - const std::string path_temporary = path + ".downloadInProgress"; - size_t existing_size = 0; - - if (std::filesystem::exists(path_temporary)) { - if (supports_ranges && !should_download_from_scratch) { - existing_size = std::filesystem::file_size(path_temporary); - } else if (remove(path_temporary.c_str()) != 0) { - LOG_ERR("%s: unable to delete file: %s\n", __func__, path_temporary.c_str()); - return false; - } - } - - // start the download - LOG_INF("%s: trying to download model from %s to %s (etag:%s)...\n", - __func__, common_http_show_masked_url(parts).c_str(), path_temporary.c_str(), etag.c_str()); - const bool was_pull_successful = common_pull_file(cli, parts.path, path_temporary, supports_ranges, existing_size, total_size); - if (!was_pull_successful) { - if (i + 1 < max_attempts) { - const int exponential_backoff_delay = std::pow(retry_delay_seconds, i) * 1000; - LOG_WRN("%s: retrying after %d milliseconds...\n", __func__, exponential_backoff_delay); - std::this_thread::sleep_for(std::chrono::milliseconds(exponential_backoff_delay)); - } else { - LOG_ERR("%s: download failed after %d attempts\n", __func__, max_attempts); - } - continue; - } - - if (std::rename(path_temporary.c_str(), path.c_str()) != 0) { - LOG_ERR("%s: unable to rename file: %s to %s\n", __func__, path_temporary.c_str(), path.c_str()); - return false; - } - if (!etag.empty()) { - write_etag(path, etag); - } - break; - } - - return true; -} - -std::pair> common_remote_get_content(const std::string & url, - const common_remote_params & params) { - auto [cli, parts] = common_http_client(url); - - httplib::Headers headers = {{"User-Agent", "llama-cpp"}}; - for (const auto & header : params.headers) { - size_t pos = header.find(':'); - if (pos != std::string::npos) { - headers.emplace(header.substr(0, pos), header.substr(pos + 1)); - } else { - headers.emplace(header, ""); - } - } - - if (params.timeout > 0) { - cli.set_read_timeout(params.timeout, 0); - cli.set_write_timeout(params.timeout, 0); - } - - std::vector buf; - auto res = cli.Get(parts.path, headers, - [&](const char *data, size_t len) { - buf.insert(buf.end(), data, data + len); - return params.max_size == 0 || - buf.size() <= static_cast(params.max_size); - }, - nullptr - ); - - if (!res) { - throw std::runtime_error("error: cannot make GET request"); - } - - return { res->status, std::move(buf) }; -} - -#endif // LLAMA_USE_CURL - -static bool common_download_file_single(const std::string & url, - const std::string & path, - const std::string & bearer_token, - bool offline) { - if (!offline) { - return common_download_file_single_online(url, path, bearer_token); - } - - if (!std::filesystem::exists(path)) { - LOG_ERR("%s: required file is not available in cache (offline mode): %s\n", __func__, path.c_str()); - return false; - } - - LOG_INF("%s: using cached file (offline mode): %s\n", __func__, path.c_str()); - return true; -} - -// download multiple files from remote URLs to local paths -// the input is a vector of pairs -static bool common_download_file_multiple(const std::vector> & urls, const std::string & bearer_token, bool offline) { - // Prepare download in parallel - std::vector> futures_download; - for (auto const & item : urls) { - futures_download.push_back(std::async(std::launch::async, [bearer_token, offline](const std::pair & it) -> bool { - return common_download_file_single(it.first, it.second, bearer_token, offline); - }, item)); - } - - // Wait for all downloads to complete - for (auto & f : futures_download) { - if (!f.get()) { - return false; - } - } - - return true; -} - -static bool common_download_model( - const common_params_model & model, - const std::string & bearer_token, - bool offline) { - // Basic validation of the model.url - if (model.url.empty()) { - LOG_ERR("%s: invalid model url\n", __func__); - return false; - } - - if (!common_download_file_single(model.url, model.path, bearer_token, offline)) { - return false; - } - - // check for additional GGUFs split to download - int n_split = 0; - { - struct gguf_init_params gguf_params = { - /*.no_alloc = */ true, - /*.ctx = */ NULL, - }; - auto * ctx_gguf = gguf_init_from_file(model.path.c_str(), gguf_params); - if (!ctx_gguf) { - LOG_ERR("\n%s: failed to load input GGUF from %s\n", __func__, model.path.c_str()); - return false; - } - - auto key_n_split = gguf_find_key(ctx_gguf, LLM_KV_SPLIT_COUNT); - if (key_n_split >= 0) { - n_split = gguf_get_val_u16(ctx_gguf, key_n_split); - } - - gguf_free(ctx_gguf); - } - - if (n_split > 1) { - char split_prefix[PATH_MAX] = {0}; - char split_url_prefix[LLAMA_MAX_URL_LENGTH] = {0}; - - // Verify the first split file format - // and extract split URL and PATH prefixes - { - if (!llama_split_prefix(split_prefix, sizeof(split_prefix), model.path.c_str(), 0, n_split)) { - LOG_ERR("\n%s: unexpected model file name: %s n_split=%d\n", __func__, model.path.c_str(), n_split); - return false; - } - - if (!llama_split_prefix(split_url_prefix, sizeof(split_url_prefix), model.url.c_str(), 0, n_split)) { - LOG_ERR("\n%s: unexpected model url: %s n_split=%d\n", __func__, model.url.c_str(), n_split); - return false; - } - } - - std::vector> urls; - for (int idx = 1; idx < n_split; idx++) { - char split_path[PATH_MAX] = {0}; - llama_split_path(split_path, sizeof(split_path), split_prefix, idx, n_split); - - char split_url[LLAMA_MAX_URL_LENGTH] = {0}; - llama_split_path(split_url, sizeof(split_url), split_url_prefix, idx, n_split); - - if (std::string(split_path) == model.path) { - continue; // skip the already downloaded file - } - - urls.push_back({split_url, split_path}); - } - - // Download in parallel - common_download_file_multiple(urls, bearer_token, offline); - } - - return true; -} - -/** - * Allow getting the HF file from the HF repo with tag (like ollama), for example: - * - bartowski/Llama-3.2-3B-Instruct-GGUF:q4 - * - bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M - * - bartowski/Llama-3.2-3B-Instruct-GGUF:q5_k_s - * Tag is optional, default to "latest" (meaning it checks for Q4_K_M first, then Q4, then if not found, return the first GGUF file in repo) - * - * Return pair of (with "repo" already having tag removed) - * - * Note: we use the Ollama-compatible HF API, but not using the blobId. Instead, we use the special "ggufFile" field which returns the value for "hf_file". This is done to be backward-compatible with existing cache files. - */ -static struct common_hf_file_res common_get_hf_file(const std::string & hf_repo_with_tag, const std::string & bearer_token, bool offline) { - auto parts = string_split(hf_repo_with_tag, ':'); - std::string tag = parts.size() > 1 ? parts.back() : "latest"; - std::string hf_repo = parts[0]; - if (string_split(hf_repo, '/').size() != 2) { - throw std::invalid_argument("error: invalid HF repo format, expected /[:quant]\n"); - } - - std::string url = get_model_endpoint() + "v2/" + hf_repo + "/manifests/" + tag; - - // headers - std::vector headers; - headers.push_back("Accept: application/json"); - if (!bearer_token.empty()) { - headers.push_back("Authorization: Bearer " + bearer_token); - } - // Important: the User-Agent must be "llama-cpp" to get the "ggufFile" field in the response - // User-Agent header is already set in common_remote_get_content, no need to set it here - - // we use "=" to avoid clashing with other component, while still being allowed on windows - std::string cached_response_fname = "manifest=" + hf_repo + "=" + tag + ".json"; - string_replace_all(cached_response_fname, "/", "_"); - std::string cached_response_path = fs_get_cache_file(cached_response_fname); - - // make the request - common_remote_params params; - params.headers = headers; - long res_code = 0; - std::string res_str; - bool use_cache = false; - if (!offline) { - try { - auto res = common_remote_get_content(url, params); - res_code = res.first; - res_str = std::string(res.second.data(), res.second.size()); - } catch (const std::exception & e) { - LOG_WRN("error: failed to get manifest at %s: %s\n", url.c_str(), e.what()); - } - } - if (res_code == 0) { - if (std::filesystem::exists(cached_response_path)) { - LOG_WRN("trying to read manifest from cache: %s\n", cached_response_path.c_str()); - res_str = read_file(cached_response_path); - res_code = 200; - use_cache = true; - } else { - throw std::runtime_error( - offline ? "error: failed to get manifest (offline mode)" - : "error: failed to get manifest (check your internet connection)"); - } - } - std::string ggufFile; - std::string mmprojFile; - - if (res_code == 200 || res_code == 304) { - try { - auto j = json::parse(res_str); - - if (j.contains("ggufFile") && j["ggufFile"].contains("rfilename")) { - ggufFile = j["ggufFile"]["rfilename"].get(); - } - if (j.contains("mmprojFile") && j["mmprojFile"].contains("rfilename")) { - mmprojFile = j["mmprojFile"]["rfilename"].get(); - } - } catch (const std::exception & e) { - throw std::runtime_error(std::string("error parsing manifest JSON: ") + e.what()); - } - if (!use_cache) { - // if not using cached response, update the cache file - write_file(cached_response_path, res_str); - } - } else if (res_code == 401) { - throw std::runtime_error("error: model is private or does not exist; if you are accessing a gated model, please provide a valid HF token"); - } else { - throw std::runtime_error(string_format("error from HF API, response code: %ld, data: %s", res_code, res_str.c_str())); - } - - // check response - if (ggufFile.empty()) { - throw std::runtime_error("error: model does not have ggufFile"); - } - - return { hf_repo, ggufFile, mmprojFile }; -} - -// -// Docker registry functions -// - -static std::string common_docker_get_token(const std::string & repo) { - std::string url = "https://auth.docker.io/token?service=registry.docker.io&scope=repository:" + repo + ":pull"; - - common_remote_params params; - auto res = common_remote_get_content(url, params); - - if (res.first != 200) { - throw std::runtime_error("Failed to get Docker registry token, HTTP code: " + std::to_string(res.first)); - } - - std::string response_str(res.second.begin(), res.second.end()); - nlohmann::ordered_json response = nlohmann::ordered_json::parse(response_str); - - if (!response.contains("token")) { - throw std::runtime_error("Docker registry token response missing 'token' field"); - } - - return response["token"].get(); -} - -static std::string common_docker_resolve_model(const std::string & docker) { - // Parse ai/smollm2:135M-Q4_0 - size_t colon_pos = docker.find(':'); - std::string repo, tag; - if (colon_pos != std::string::npos) { - repo = docker.substr(0, colon_pos); - tag = docker.substr(colon_pos + 1); - } else { - repo = docker; - tag = "latest"; - } - - // ai/ is the default - size_t slash_pos = docker.find('/'); - if (slash_pos == std::string::npos) { - repo.insert(0, "ai/"); - } - - LOG_INF("%s: Downloading Docker Model: %s:%s\n", __func__, repo.c_str(), tag.c_str()); - try { - // --- helper: digest validation --- - auto validate_oci_digest = [](const std::string & digest) -> std::string { - // Expected: algo:hex ; start with sha256 (64 hex chars) - // You can extend this map if supporting other algorithms in future. - static const std::regex re("^sha256:([a-fA-F0-9]{64})$"); - std::smatch m; - if (!std::regex_match(digest, m, re)) { - throw std::runtime_error("Invalid OCI digest format received in manifest: " + digest); - } - // normalize hex to lowercase - std::string normalized = digest; - std::transform(normalized.begin()+7, normalized.end(), normalized.begin()+7, [](unsigned char c){ - return std::tolower(c); - }); - return normalized; - }; - - std::string token = common_docker_get_token(repo); // Get authentication token - - // Get manifest - const std::string url_prefix = "https://registry-1.docker.io/v2/" + repo; - std::string manifest_url = url_prefix + "/manifests/" + tag; - common_remote_params manifest_params; - manifest_params.headers.push_back("Authorization: Bearer " + token); - manifest_params.headers.push_back( - "Accept: application/vnd.docker.distribution.manifest.v2+json,application/vnd.oci.image.manifest.v1+json"); - auto manifest_res = common_remote_get_content(manifest_url, manifest_params); - if (manifest_res.first != 200) { - throw std::runtime_error("Failed to get Docker manifest, HTTP code: " + std::to_string(manifest_res.first)); - } - - std::string manifest_str(manifest_res.second.begin(), manifest_res.second.end()); - nlohmann::ordered_json manifest = nlohmann::ordered_json::parse(manifest_str); - std::string gguf_digest; // Find the GGUF layer - if (manifest.contains("layers")) { - for (const auto & layer : manifest["layers"]) { - if (layer.contains("mediaType")) { - std::string media_type = layer["mediaType"].get(); - if (media_type == "application/vnd.docker.ai.gguf.v3" || - media_type.find("gguf") != std::string::npos) { - gguf_digest = layer["digest"].get(); - break; - } - } - } - } - - if (gguf_digest.empty()) { - throw std::runtime_error("No GGUF layer found in Docker manifest"); - } - - // Validate & normalize digest - gguf_digest = validate_oci_digest(gguf_digest); - LOG_DBG("%s: Using validated digest: %s\n", __func__, gguf_digest.c_str()); - - // Prepare local filename - std::string model_filename = repo; - std::replace(model_filename.begin(), model_filename.end(), '/', '_'); - model_filename += "_" + tag + ".gguf"; - std::string local_path = fs_get_cache_file(model_filename); - - const std::string blob_url = url_prefix + "/blobs/" + gguf_digest; - if (!common_download_file_single(blob_url, local_path, token, false)) { - throw std::runtime_error("Failed to download Docker Model"); - } - - LOG_INF("%s: Downloaded Docker Model to: %s\n", __func__, local_path.c_str()); - return local_path; - } catch (const std::exception & e) { - LOG_ERR("%s: Docker Model download failed: %s\n", __func__, e.what()); - throw; - } -} - // // utils // diff --git a/common/arg.h b/common/arg.h index 77997c4ef3..7ab7e2cea4 100644 --- a/common/arg.h +++ b/common/arg.h @@ -59,8 +59,8 @@ struct common_arg { common_arg & set_sparam(); bool in_example(enum llama_example ex); bool is_exclude(enum llama_example ex); - bool get_value_from_env(std::string & output); - bool has_value_from_env(); + bool get_value_from_env(std::string & output) const; + bool has_value_from_env() const; std::string to_string(); }; diff --git a/common/download.cpp b/common/download.cpp new file mode 100644 index 0000000000..02d75fc0d0 --- /dev/null +++ b/common/download.cpp @@ -0,0 +1,1014 @@ +#include "arg.h" + +#include "common.h" +#include "gguf.h" // for reading GGUF splits +#include "log.h" +#include "download.h" + +#define JSON_ASSERT GGML_ASSERT +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(LLAMA_USE_CURL) +#include +#include +#else +#include "http.h" +#endif + +#ifdef __linux__ +#include +#elif defined(_WIN32) +# if !defined(PATH_MAX) +# define PATH_MAX MAX_PATH +# endif +#elif defined(_AIX) +#include +#else +#include +#endif +#define LLAMA_MAX_URL_LENGTH 2084 // Maximum URL Length in Chrome: 2083 + +// isatty +#if defined(_WIN32) +#include +#else +#include +#endif + +using json = nlohmann::ordered_json; + +// +// downloader +// + +static std::string read_file(const std::string & fname) { + std::ifstream file(fname); + if (!file) { + throw std::runtime_error(string_format("error: failed to open file '%s'\n", fname.c_str())); + } + std::string content((std::istreambuf_iterator(file)), std::istreambuf_iterator()); + file.close(); + return content; +} + +static void write_file(const std::string & fname, const std::string & content) { + const std::string fname_tmp = fname + ".tmp"; + std::ofstream file(fname_tmp); + if (!file) { + throw std::runtime_error(string_format("error: failed to open file '%s'\n", fname.c_str())); + } + + try { + file << content; + file.close(); + + // Makes write atomic + if (rename(fname_tmp.c_str(), fname.c_str()) != 0) { + LOG_ERR("%s: unable to rename file: %s to %s\n", __func__, fname_tmp.c_str(), fname.c_str()); + // If rename fails, try to delete the temporary file + if (remove(fname_tmp.c_str()) != 0) { + LOG_ERR("%s: unable to delete temporary file: %s\n", __func__, fname_tmp.c_str()); + } + } + } catch (...) { + // If anything fails, try to delete the temporary file + if (remove(fname_tmp.c_str()) != 0) { + LOG_ERR("%s: unable to delete temporary file: %s\n", __func__, fname_tmp.c_str()); + } + + throw std::runtime_error(string_format("error: failed to write file '%s'\n", fname.c_str())); + } +} + +static void write_etag(const std::string & path, const std::string & etag) { + const std::string etag_path = path + ".etag"; + write_file(etag_path, etag); + LOG_DBG("%s: file etag saved: %s\n", __func__, etag_path.c_str()); +} + +static std::string read_etag(const std::string & path) { + std::string none; + const std::string etag_path = path + ".etag"; + + if (std::filesystem::exists(etag_path)) { + std::ifstream etag_in(etag_path); + if (!etag_in) { + LOG_ERR("%s: could not open .etag file for reading: %s\n", __func__, etag_path.c_str()); + return none; + } + std::string etag; + std::getline(etag_in, etag); + return etag; + } + + // no etag file, but maybe there is an old .json + // remove this code later + const std::string metadata_path = path + ".json"; + + if (std::filesystem::exists(metadata_path)) { + std::ifstream metadata_in(metadata_path); + try { + nlohmann::json metadata_json; + metadata_in >> metadata_json; + LOG_DBG("%s: previous metadata file found %s: %s\n", __func__, metadata_path.c_str(), + metadata_json.dump().c_str()); + if (metadata_json.contains("etag") && metadata_json.at("etag").is_string()) { + std::string etag = metadata_json.at("etag"); + write_etag(path, etag); + if (!std::filesystem::remove(metadata_path)) { + LOG_WRN("%s: failed to delete old .json metadata file: %s\n", __func__, metadata_path.c_str()); + } + return etag; + } + } catch (const nlohmann::json::exception & e) { + LOG_ERR("%s: error reading metadata file %s: %s\n", __func__, metadata_path.c_str(), e.what()); + } + } + return none; +} + +#ifdef LLAMA_USE_CURL + +// +// CURL utils +// + +using curl_ptr = std::unique_ptr; + +// cannot use unique_ptr for curl_slist, because we cannot update without destroying the old one +struct curl_slist_ptr { + struct curl_slist * ptr = nullptr; + ~curl_slist_ptr() { + if (ptr) { + curl_slist_free_all(ptr); + } + } +}; + +static CURLcode common_curl_perf(CURL * curl) { + CURLcode res = curl_easy_perform(curl); + if (res != CURLE_OK) { + LOG_ERR("%s: curl_easy_perform() failed\n", __func__); + } + + return res; +} + +// Send a HEAD request to retrieve the etag and last-modified headers +struct common_load_model_from_url_headers { + std::string etag; + std::string last_modified; + std::string accept_ranges; +}; + +struct FILE_deleter { + void operator()(FILE * f) const { fclose(f); } +}; + +static size_t common_header_callback(char * buffer, size_t, size_t n_items, void * userdata) { + common_load_model_from_url_headers * headers = (common_load_model_from_url_headers *) userdata; + static std::regex header_regex("([^:]+): (.*)\r\n"); + static std::regex etag_regex("ETag", std::regex_constants::icase); + static std::regex last_modified_regex("Last-Modified", std::regex_constants::icase); + static std::regex accept_ranges_regex("Accept-Ranges", std::regex_constants::icase); + std::string header(buffer, n_items); + std::smatch match; + if (std::regex_match(header, match, header_regex)) { + const std::string & key = match[1]; + const std::string & value = match[2]; + if (std::regex_match(key, match, etag_regex)) { + headers->etag = value; + } else if (std::regex_match(key, match, last_modified_regex)) { + headers->last_modified = value; + } else if (std::regex_match(key, match, accept_ranges_regex)) { + headers->accept_ranges = value; + } + } + + return n_items; +} + +static size_t common_write_callback(void * data, size_t size, size_t nmemb, void * fd) { + return std::fwrite(data, size, nmemb, static_cast(fd)); +} + +// helper function to hide password in URL +static std::string llama_download_hide_password_in_url(const std::string & url) { + // Use regex to match and replace the user[:password]@ pattern in URLs + // Pattern: scheme://[user[:password]@]host[...] + static const std::regex url_regex(R"(^(?:[A-Za-z][A-Za-z0-9+.-]://)(?:[^/@]+@)?.$)"); + std::smatch match; + + if (std::regex_match(url, match, url_regex)) { + // match[1] = scheme (e.g., "https://") + // match[2] = user[:password]@ part + // match[3] = rest of URL (host and path) + return match[1].str() + "********@" + match[3].str(); + } + + return url; // No credentials found or malformed URL +} + +static void common_curl_easy_setopt_head(CURL * curl, const std::string & url) { + // Set the URL, allow to follow http redirection + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); + +# if defined(_WIN32) + // CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of + // operating system. Currently implemented under MS-Windows. + curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA); +# endif + + curl_easy_setopt(curl, CURLOPT_NOBODY, 1L); // will trigger the HEAD verb + curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L); // hide head request progress + curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, common_header_callback); +} + +static void common_curl_easy_setopt_get(CURL * curl) { + curl_easy_setopt(curl, CURLOPT_NOBODY, 0L); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, common_write_callback); + + // display download progress + curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L); +} + +static bool common_pull_file(CURL * curl, const std::string & path_temporary) { + if (std::filesystem::exists(path_temporary)) { + const std::string partial_size = std::to_string(std::filesystem::file_size(path_temporary)); + LOG_INF("%s: server supports range requests, resuming download from byte %s\n", __func__, partial_size.c_str()); + const std::string range_str = partial_size + "-"; + curl_easy_setopt(curl, CURLOPT_RANGE, range_str.c_str()); + } + + // Always open file in append mode could be resuming + std::unique_ptr outfile(fopen(path_temporary.c_str(), "ab")); + if (!outfile) { + LOG_ERR("%s: error opening local file for writing: %s\n", __func__, path_temporary.c_str()); + return false; + } + + common_curl_easy_setopt_get(curl); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile.get()); + + return common_curl_perf(curl) == CURLE_OK; +} + +static bool common_download_head(CURL * curl, + curl_slist_ptr & http_headers, + const std::string & url, + const std::string & bearer_token) { + if (!curl) { + LOG_ERR("%s: error initializing libcurl\n", __func__); + return false; + } + + http_headers.ptr = curl_slist_append(http_headers.ptr, "User-Agent: llama-cpp"); + // Check if hf-token or bearer-token was specified + if (!bearer_token.empty()) { + std::string auth_header = "Authorization: Bearer " + bearer_token; + http_headers.ptr = curl_slist_append(http_headers.ptr, auth_header.c_str()); + } + + curl_easy_setopt(curl, CURLOPT_HTTPHEADER, http_headers.ptr); + common_curl_easy_setopt_head(curl, url); + return common_curl_perf(curl) == CURLE_OK; +} + +// download one single file from remote URL to local path +static bool common_download_file_single_online(const std::string & url, + const std::string & path, + const std::string & bearer_token) { + static const int max_attempts = 3; + static const int retry_delay_seconds = 2; + for (int i = 0; i < max_attempts; ++i) { + std::string etag; + + // Check if the file already exists locally + const auto file_exists = std::filesystem::exists(path); + if (file_exists) { + etag = read_etag(path); + } else { + LOG_INF("%s: no previous model file found %s\n", __func__, path.c_str()); + } + + bool head_request_ok = false; + bool should_download = !file_exists; // by default, we should download if the file does not exist + + // Initialize libcurl + curl_ptr curl(curl_easy_init(), &curl_easy_cleanup); + common_load_model_from_url_headers headers; + curl_easy_setopt(curl.get(), CURLOPT_HEADERDATA, &headers); + curl_slist_ptr http_headers; + const bool was_perform_successful = common_download_head(curl.get(), http_headers, url, bearer_token); + if (!was_perform_successful) { + head_request_ok = false; + } + + long http_code = 0; + curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &http_code); + if (http_code == 200) { + head_request_ok = true; + } else { + LOG_WRN("%s: HEAD invalid http status code received: %ld\n", __func__, http_code); + head_request_ok = false; + } + + // if head_request_ok is false, we don't have the etag or last-modified headers + // we leave should_download as-is, which is true if the file does not exist + bool should_download_from_scratch = false; + if (head_request_ok) { + // check if ETag or Last-Modified headers are different + // if it is, we need to download the file again + if (!etag.empty() && etag != headers.etag) { + LOG_WRN("%s: ETag header is different (%s != %s): triggering a new download\n", __func__, etag.c_str(), + headers.etag.c_str()); + should_download = true; + should_download_from_scratch = true; + } + } + + const bool accept_ranges_supported = !headers.accept_ranges.empty() && headers.accept_ranges != "none"; + if (should_download) { + if (file_exists && + !accept_ranges_supported) { // Resumable downloads not supported, delete and start again. + LOG_WRN("%s: deleting previous downloaded file: %s\n", __func__, path.c_str()); + if (remove(path.c_str()) != 0) { + LOG_ERR("%s: unable to delete file: %s\n", __func__, path.c_str()); + return false; + } + } + + const std::string path_temporary = path + ".downloadInProgress"; + if (should_download_from_scratch) { + if (std::filesystem::exists(path_temporary)) { + if (remove(path_temporary.c_str()) != 0) { + LOG_ERR("%s: unable to delete file: %s\n", __func__, path_temporary.c_str()); + return false; + } + } + + if (std::filesystem::exists(path)) { + if (remove(path.c_str()) != 0) { + LOG_ERR("%s: unable to delete file: %s\n", __func__, path.c_str()); + return false; + } + } + } + if (head_request_ok) { + write_etag(path, headers.etag); + } + + // start the download + LOG_INF("%s: trying to download model from %s to %s (server_etag:%s, server_last_modified:%s)...\n", + __func__, llama_download_hide_password_in_url(url).c_str(), path_temporary.c_str(), + headers.etag.c_str(), headers.last_modified.c_str()); + const bool was_pull_successful = common_pull_file(curl.get(), path_temporary); + if (!was_pull_successful) { + if (i + 1 < max_attempts) { + const int exponential_backoff_delay = std::pow(retry_delay_seconds, i) * 1000; + LOG_WRN("%s: retrying after %d milliseconds...\n", __func__, exponential_backoff_delay); + std::this_thread::sleep_for(std::chrono::milliseconds(exponential_backoff_delay)); + } else { + LOG_ERR("%s: curl_easy_perform() failed after %d attempts\n", __func__, max_attempts); + } + + continue; + } + + long http_code = 0; + curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &http_code); + if (http_code < 200 || http_code >= 400) { + LOG_ERR("%s: invalid http status code received: %ld\n", __func__, http_code); + return false; + } + + if (rename(path_temporary.c_str(), path.c_str()) != 0) { + LOG_ERR("%s: unable to rename file: %s to %s\n", __func__, path_temporary.c_str(), path.c_str()); + return false; + } + } else { + LOG_INF("%s: using cached file: %s\n", __func__, path.c_str()); + } + + break; + } + + return true; +} + +std::pair> common_remote_get_content(const std::string & url, const common_remote_params & params) { + curl_ptr curl(curl_easy_init(), &curl_easy_cleanup); + curl_slist_ptr http_headers; + std::vector res_buffer; + + curl_easy_setopt(curl.get(), CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl.get(), CURLOPT_NOPROGRESS, 1L); + curl_easy_setopt(curl.get(), CURLOPT_FOLLOWLOCATION, 1L); + curl_easy_setopt(curl.get(), CURLOPT_VERBOSE, 1L); + typedef size_t(*CURLOPT_WRITEFUNCTION_PTR)(void * ptr, size_t size, size_t nmemb, void * data); + auto write_callback = [](void * ptr, size_t size, size_t nmemb, void * data) -> size_t { + auto data_vec = static_cast *>(data); + data_vec->insert(data_vec->end(), (char *)ptr, (char *)ptr + size * nmemb); + return size * nmemb; + }; + curl_easy_setopt(curl.get(), CURLOPT_WRITEFUNCTION, static_cast(write_callback)); + curl_easy_setopt(curl.get(), CURLOPT_WRITEDATA, &res_buffer); +#if defined(_WIN32) + curl_easy_setopt(curl.get(), CURLOPT_SSL_OPTIONS, CURLSSLOPT_NATIVE_CA); +#endif + if (params.timeout > 0) { + curl_easy_setopt(curl.get(), CURLOPT_TIMEOUT, params.timeout); + } + if (params.max_size > 0) { + curl_easy_setopt(curl.get(), CURLOPT_MAXFILESIZE, params.max_size); + } + http_headers.ptr = curl_slist_append(http_headers.ptr, "User-Agent: llama-cpp"); + for (const auto & header : params.headers) { + http_headers.ptr = curl_slist_append(http_headers.ptr, header.c_str()); + } + curl_easy_setopt(curl.get(), CURLOPT_HTTPHEADER, http_headers.ptr); + + CURLcode res = curl_easy_perform(curl.get()); + + if (res != CURLE_OK) { + std::string error_msg = curl_easy_strerror(res); + throw std::runtime_error("error: cannot make GET request: " + error_msg); + } + + long res_code; + curl_easy_getinfo(curl.get(), CURLINFO_RESPONSE_CODE, &res_code); + + return { res_code, std::move(res_buffer) }; +} + +#else + +static bool is_output_a_tty() { +#if defined(_WIN32) + return _isatty(_fileno(stdout)); +#else + return isatty(1); +#endif +} + +static void print_progress(size_t current, size_t total) { + if (!is_output_a_tty()) { + return; + } + + if (!total) { + return; + } + + size_t width = 50; + size_t pct = (100 * current) / total; + size_t pos = (width * current) / total; + + std::cout << "[" + << std::string(pos, '=') + << (pos < width ? ">" : "") + << std::string(width - pos, ' ') + << "] " << std::setw(3) << pct << "% (" + << current / (1024 * 1024) << " MB / " + << total / (1024 * 1024) << " MB)\r"; + std::cout.flush(); +} + +static bool common_pull_file(httplib::Client & cli, + const std::string & resolve_path, + const std::string & path_tmp, + bool supports_ranges, + size_t existing_size, + size_t & total_size) { + std::ofstream ofs(path_tmp, std::ios::binary | std::ios::app); + if (!ofs.is_open()) { + LOG_ERR("%s: error opening local file for writing: %s\n", __func__, path_tmp.c_str()); + return false; + } + + httplib::Headers headers; + if (supports_ranges && existing_size > 0) { + headers.emplace("Range", "bytes=" + std::to_string(existing_size) + "-"); + } + + std::atomic downloaded{existing_size}; + + auto res = cli.Get(resolve_path, headers, + [&](const httplib::Response &response) { + if (existing_size > 0 && response.status != 206) { + LOG_WRN("%s: server did not respond with 206 Partial Content for a resume request. Status: %d\n", __func__, response.status); + return false; + } + if (existing_size == 0 && response.status != 200) { + LOG_WRN("%s: download received non-successful status code: %d\n", __func__, response.status); + return false; + } + if (total_size == 0 && response.has_header("Content-Length")) { + try { + size_t content_length = std::stoull(response.get_header_value("Content-Length")); + total_size = existing_size + content_length; + } catch (const std::exception &e) { + LOG_WRN("%s: invalid Content-Length header: %s\n", __func__, e.what()); + } + } + return true; + }, + [&](const char *data, size_t len) { + ofs.write(data, len); + if (!ofs) { + LOG_ERR("%s: error writing to file: %s\n", __func__, path_tmp.c_str()); + return false; + } + downloaded += len; + print_progress(downloaded, total_size); + return true; + }, + nullptr + ); + + std::cout << "\n"; + + if (!res) { + LOG_ERR("%s: error during download. Status: %d\n", __func__, res ? res->status : -1); + return false; + } + + return true; +} + +// download one single file from remote URL to local path +static bool common_download_file_single_online(const std::string & url, + const std::string & path, + const std::string & bearer_token) { + static const int max_attempts = 3; + static const int retry_delay_seconds = 2; + + auto [cli, parts] = common_http_client(url); + + httplib::Headers default_headers = {{"User-Agent", "llama-cpp"}}; + if (!bearer_token.empty()) { + default_headers.insert({"Authorization", "Bearer " + bearer_token}); + } + cli.set_default_headers(default_headers); + + const bool file_exists = std::filesystem::exists(path); + + std::string last_etag; + if (file_exists) { + last_etag = read_etag(path); + } else { + LOG_INF("%s: no previous model file found %s\n", __func__, path.c_str()); + } + + for (int i = 0; i < max_attempts; ++i) { + auto head = cli.Head(parts.path); + bool head_ok = head && head->status >= 200 && head->status < 300; + if (!head_ok) { + LOG_WRN("%s: HEAD invalid http status code received: %d\n", __func__, head ? head->status : -1); + if (file_exists) { + LOG_INF("%s: Using cached file (HEAD failed): %s\n", __func__, path.c_str()); + return true; + } + } + + std::string etag; + if (head_ok && head->has_header("ETag")) { + etag = head->get_header_value("ETag"); + } + + size_t total_size = 0; + if (head_ok && head->has_header("Content-Length")) { + try { + total_size = std::stoull(head->get_header_value("Content-Length")); + } catch (const std::exception& e) { + LOG_WRN("%s: Invalid Content-Length in HEAD response: %s\n", __func__, e.what()); + } + } + + bool supports_ranges = false; + if (head_ok && head->has_header("Accept-Ranges")) { + supports_ranges = head->get_header_value("Accept-Ranges") != "none"; + } + + bool should_download_from_scratch = false; + if (!last_etag.empty() && !etag.empty() && last_etag != etag) { + LOG_WRN("%s: ETag header is different (%s != %s): triggering a new download\n", __func__, + last_etag.c_str(), etag.c_str()); + should_download_from_scratch = true; + } + + if (file_exists) { + if (!should_download_from_scratch) { + LOG_INF("%s: using cached file: %s\n", __func__, path.c_str()); + return true; + } + LOG_WRN("%s: deleting previous downloaded file: %s\n", __func__, path.c_str()); + if (remove(path.c_str()) != 0) { + LOG_ERR("%s: unable to delete file: %s\n", __func__, path.c_str()); + return false; + } + } + + const std::string path_temporary = path + ".downloadInProgress"; + size_t existing_size = 0; + + if (std::filesystem::exists(path_temporary)) { + if (supports_ranges && !should_download_from_scratch) { + existing_size = std::filesystem::file_size(path_temporary); + } else if (remove(path_temporary.c_str()) != 0) { + LOG_ERR("%s: unable to delete file: %s\n", __func__, path_temporary.c_str()); + return false; + } + } + + // start the download + LOG_INF("%s: trying to download model from %s to %s (etag:%s)...\n", + __func__, common_http_show_masked_url(parts).c_str(), path_temporary.c_str(), etag.c_str()); + const bool was_pull_successful = common_pull_file(cli, parts.path, path_temporary, supports_ranges, existing_size, total_size); + if (!was_pull_successful) { + if (i + 1 < max_attempts) { + const int exponential_backoff_delay = std::pow(retry_delay_seconds, i) * 1000; + LOG_WRN("%s: retrying after %d milliseconds...\n", __func__, exponential_backoff_delay); + std::this_thread::sleep_for(std::chrono::milliseconds(exponential_backoff_delay)); + } else { + LOG_ERR("%s: download failed after %d attempts\n", __func__, max_attempts); + } + continue; + } + + if (std::rename(path_temporary.c_str(), path.c_str()) != 0) { + LOG_ERR("%s: unable to rename file: %s to %s\n", __func__, path_temporary.c_str(), path.c_str()); + return false; + } + if (!etag.empty()) { + write_etag(path, etag); + } + break; + } + + return true; +} + +std::pair> common_remote_get_content(const std::string & url, + const common_remote_params & params) { + auto [cli, parts] = common_http_client(url); + + httplib::Headers headers = {{"User-Agent", "llama-cpp"}}; + for (const auto & header : params.headers) { + size_t pos = header.find(':'); + if (pos != std::string::npos) { + headers.emplace(header.substr(0, pos), header.substr(pos + 1)); + } else { + headers.emplace(header, ""); + } + } + + if (params.timeout > 0) { + cli.set_read_timeout(params.timeout, 0); + cli.set_write_timeout(params.timeout, 0); + } + + std::vector buf; + auto res = cli.Get(parts.path, headers, + [&](const char *data, size_t len) { + buf.insert(buf.end(), data, data + len); + return params.max_size == 0 || + buf.size() <= static_cast(params.max_size); + }, + nullptr + ); + + if (!res) { + throw std::runtime_error("error: cannot make GET request"); + } + + return { res->status, std::move(buf) }; +} + +#endif // LLAMA_USE_CURL + +static bool common_download_file_single(const std::string & url, + const std::string & path, + const std::string & bearer_token, + bool offline) { + if (!offline) { + return common_download_file_single_online(url, path, bearer_token); + } + + if (!std::filesystem::exists(path)) { + LOG_ERR("%s: required file is not available in cache (offline mode): %s\n", __func__, path.c_str()); + return false; + } + + LOG_INF("%s: using cached file (offline mode): %s\n", __func__, path.c_str()); + return true; +} + +// download multiple files from remote URLs to local paths +// the input is a vector of pairs +static bool common_download_file_multiple(const std::vector> & urls, const std::string & bearer_token, bool offline) { + // Prepare download in parallel + std::vector> futures_download; + for (auto const & item : urls) { + futures_download.push_back(std::async(std::launch::async, [bearer_token, offline](const std::pair & it) -> bool { + return common_download_file_single(it.first, it.second, bearer_token, offline); + }, item)); + } + + // Wait for all downloads to complete + for (auto & f : futures_download) { + if (!f.get()) { + return false; + } + } + + return true; +} + +bool common_download_model( + const common_params_model & model, + const std::string & bearer_token, + bool offline) { + // Basic validation of the model.url + if (model.url.empty()) { + LOG_ERR("%s: invalid model url\n", __func__); + return false; + } + + if (!common_download_file_single(model.url, model.path, bearer_token, offline)) { + return false; + } + + // check for additional GGUFs split to download + int n_split = 0; + { + struct gguf_init_params gguf_params = { + /*.no_alloc = */ true, + /*.ctx = */ NULL, + }; + auto * ctx_gguf = gguf_init_from_file(model.path.c_str(), gguf_params); + if (!ctx_gguf) { + LOG_ERR("\n%s: failed to load input GGUF from %s\n", __func__, model.path.c_str()); + return false; + } + + auto key_n_split = gguf_find_key(ctx_gguf, LLM_KV_SPLIT_COUNT); + if (key_n_split >= 0) { + n_split = gguf_get_val_u16(ctx_gguf, key_n_split); + } + + gguf_free(ctx_gguf); + } + + if (n_split > 1) { + char split_prefix[PATH_MAX] = {0}; + char split_url_prefix[LLAMA_MAX_URL_LENGTH] = {0}; + + // Verify the first split file format + // and extract split URL and PATH prefixes + { + if (!llama_split_prefix(split_prefix, sizeof(split_prefix), model.path.c_str(), 0, n_split)) { + LOG_ERR("\n%s: unexpected model file name: %s n_split=%d\n", __func__, model.path.c_str(), n_split); + return false; + } + + if (!llama_split_prefix(split_url_prefix, sizeof(split_url_prefix), model.url.c_str(), 0, n_split)) { + LOG_ERR("\n%s: unexpected model url: %s n_split=%d\n", __func__, model.url.c_str(), n_split); + return false; + } + } + + std::vector> urls; + for (int idx = 1; idx < n_split; idx++) { + char split_path[PATH_MAX] = {0}; + llama_split_path(split_path, sizeof(split_path), split_prefix, idx, n_split); + + char split_url[LLAMA_MAX_URL_LENGTH] = {0}; + llama_split_path(split_url, sizeof(split_url), split_url_prefix, idx, n_split); + + if (std::string(split_path) == model.path) { + continue; // skip the already downloaded file + } + + urls.push_back({split_url, split_path}); + } + + // Download in parallel + common_download_file_multiple(urls, bearer_token, offline); + } + + return true; +} + +common_hf_file_res common_get_hf_file(const std::string & hf_repo_with_tag, const std::string & bearer_token, bool offline) { + auto parts = string_split(hf_repo_with_tag, ':'); + std::string tag = parts.size() > 1 ? parts.back() : "latest"; + std::string hf_repo = parts[0]; + if (string_split(hf_repo, '/').size() != 2) { + throw std::invalid_argument("error: invalid HF repo format, expected /[:quant]\n"); + } + + std::string url = get_model_endpoint() + "v2/" + hf_repo + "/manifests/" + tag; + + // headers + std::vector headers; + headers.push_back("Accept: application/json"); + if (!bearer_token.empty()) { + headers.push_back("Authorization: Bearer " + bearer_token); + } + // Important: the User-Agent must be "llama-cpp" to get the "ggufFile" field in the response + // User-Agent header is already set in common_remote_get_content, no need to set it here + + // we use "=" to avoid clashing with other component, while still being allowed on windows + std::string cached_response_fname = "manifest=" + hf_repo + "=" + tag + ".json"; + string_replace_all(cached_response_fname, "/", "_"); + std::string cached_response_path = fs_get_cache_file(cached_response_fname); + + // make the request + common_remote_params params; + params.headers = headers; + long res_code = 0; + std::string res_str; + bool use_cache = false; + if (!offline) { + try { + auto res = common_remote_get_content(url, params); + res_code = res.first; + res_str = std::string(res.second.data(), res.second.size()); + } catch (const std::exception & e) { + LOG_WRN("error: failed to get manifest at %s: %s\n", url.c_str(), e.what()); + } + } + if (res_code == 0) { + if (std::filesystem::exists(cached_response_path)) { + LOG_WRN("trying to read manifest from cache: %s\n", cached_response_path.c_str()); + res_str = read_file(cached_response_path); + res_code = 200; + use_cache = true; + } else { + throw std::runtime_error( + offline ? "error: failed to get manifest (offline mode)" + : "error: failed to get manifest (check your internet connection)"); + } + } + std::string ggufFile; + std::string mmprojFile; + + if (res_code == 200 || res_code == 304) { + try { + auto j = json::parse(res_str); + + if (j.contains("ggufFile") && j["ggufFile"].contains("rfilename")) { + ggufFile = j["ggufFile"]["rfilename"].get(); + } + if (j.contains("mmprojFile") && j["mmprojFile"].contains("rfilename")) { + mmprojFile = j["mmprojFile"]["rfilename"].get(); + } + } catch (const std::exception & e) { + throw std::runtime_error(std::string("error parsing manifest JSON: ") + e.what()); + } + if (!use_cache) { + // if not using cached response, update the cache file + write_file(cached_response_path, res_str); + } + } else if (res_code == 401) { + throw std::runtime_error("error: model is private or does not exist; if you are accessing a gated model, please provide a valid HF token"); + } else { + throw std::runtime_error(string_format("error from HF API, response code: %ld, data: %s", res_code, res_str.c_str())); + } + + // check response + if (ggufFile.empty()) { + throw std::runtime_error("error: model does not have ggufFile"); + } + + return { hf_repo, ggufFile, mmprojFile }; +} + +// +// Docker registry functions +// + +static std::string common_docker_get_token(const std::string & repo) { + std::string url = "https://auth.docker.io/token?service=registry.docker.io&scope=repository:" + repo + ":pull"; + + common_remote_params params; + auto res = common_remote_get_content(url, params); + + if (res.first != 200) { + throw std::runtime_error("Failed to get Docker registry token, HTTP code: " + std::to_string(res.first)); + } + + std::string response_str(res.second.begin(), res.second.end()); + nlohmann::ordered_json response = nlohmann::ordered_json::parse(response_str); + + if (!response.contains("token")) { + throw std::runtime_error("Docker registry token response missing 'token' field"); + } + + return response["token"].get(); +} + +std::string common_docker_resolve_model(const std::string & docker) { + // Parse ai/smollm2:135M-Q4_0 + size_t colon_pos = docker.find(':'); + std::string repo, tag; + if (colon_pos != std::string::npos) { + repo = docker.substr(0, colon_pos); + tag = docker.substr(colon_pos + 1); + } else { + repo = docker; + tag = "latest"; + } + + // ai/ is the default + size_t slash_pos = docker.find('/'); + if (slash_pos == std::string::npos) { + repo.insert(0, "ai/"); + } + + LOG_INF("%s: Downloading Docker Model: %s:%s\n", __func__, repo.c_str(), tag.c_str()); + try { + // --- helper: digest validation --- + auto validate_oci_digest = [](const std::string & digest) -> std::string { + // Expected: algo:hex ; start with sha256 (64 hex chars) + // You can extend this map if supporting other algorithms in future. + static const std::regex re("^sha256:([a-fA-F0-9]{64})$"); + std::smatch m; + if (!std::regex_match(digest, m, re)) { + throw std::runtime_error("Invalid OCI digest format received in manifest: " + digest); + } + // normalize hex to lowercase + std::string normalized = digest; + std::transform(normalized.begin()+7, normalized.end(), normalized.begin()+7, [](unsigned char c){ + return std::tolower(c); + }); + return normalized; + }; + + std::string token = common_docker_get_token(repo); // Get authentication token + + // Get manifest + const std::string url_prefix = "https://registry-1.docker.io/v2/" + repo; + std::string manifest_url = url_prefix + "/manifests/" + tag; + common_remote_params manifest_params; + manifest_params.headers.push_back("Authorization: Bearer " + token); + manifest_params.headers.push_back( + "Accept: application/vnd.docker.distribution.manifest.v2+json,application/vnd.oci.image.manifest.v1+json"); + auto manifest_res = common_remote_get_content(manifest_url, manifest_params); + if (manifest_res.first != 200) { + throw std::runtime_error("Failed to get Docker manifest, HTTP code: " + std::to_string(manifest_res.first)); + } + + std::string manifest_str(manifest_res.second.begin(), manifest_res.second.end()); + nlohmann::ordered_json manifest = nlohmann::ordered_json::parse(manifest_str); + std::string gguf_digest; // Find the GGUF layer + if (manifest.contains("layers")) { + for (const auto & layer : manifest["layers"]) { + if (layer.contains("mediaType")) { + std::string media_type = layer["mediaType"].get(); + if (media_type == "application/vnd.docker.ai.gguf.v3" || + media_type.find("gguf") != std::string::npos) { + gguf_digest = layer["digest"].get(); + break; + } + } + } + } + + if (gguf_digest.empty()) { + throw std::runtime_error("No GGUF layer found in Docker manifest"); + } + + // Validate & normalize digest + gguf_digest = validate_oci_digest(gguf_digest); + LOG_DBG("%s: Using validated digest: %s\n", __func__, gguf_digest.c_str()); + + // Prepare local filename + std::string model_filename = repo; + std::replace(model_filename.begin(), model_filename.end(), '/', '_'); + model_filename += "_" + tag + ".gguf"; + std::string local_path = fs_get_cache_file(model_filename); + + const std::string blob_url = url_prefix + "/blobs/" + gguf_digest; + if (!common_download_file_single(blob_url, local_path, token, false)) { + throw std::runtime_error("Failed to download Docker Model"); + } + + LOG_INF("%s: Downloaded Docker Model to: %s\n", __func__, local_path.c_str()); + return local_path; + } catch (const std::exception & e) { + LOG_ERR("%s: Docker Model download failed: %s\n", __func__, e.what()); + throw; + } +} diff --git a/common/download.h b/common/download.h new file mode 100644 index 0000000000..ddf36155ef --- /dev/null +++ b/common/download.h @@ -0,0 +1,41 @@ +#pragma once + +#include + +struct common_params_model; + +// +// download functionalities +// + +struct common_hf_file_res { + std::string repo; // repo name with ":tag" removed + std::string ggufFile; + std::string mmprojFile; +}; + +// resolve and download model from Docker registry +// return local path to downloaded model file +std::string common_docker_resolve_model(const std::string & docker); + +/** + * Allow getting the HF file from the HF repo with tag (like ollama), for example: + * - bartowski/Llama-3.2-3B-Instruct-GGUF:q4 + * - bartowski/Llama-3.2-3B-Instruct-GGUF:Q4_K_M + * - bartowski/Llama-3.2-3B-Instruct-GGUF:q5_k_s + * Tag is optional, default to "latest" (meaning it checks for Q4_K_M first, then Q4, then if not found, return the first GGUF file in repo) + * + * Return pair of (with "repo" already having tag removed) + * + * Note: we use the Ollama-compatible HF API, but not using the blobId. Instead, we use the special "ggufFile" field which returns the value for "hf_file". This is done to be backward-compatible with existing cache files. + */ +common_hf_file_res common_get_hf_file( + const std::string & hf_repo_with_tag, + const std::string & bearer_token, + bool offline); + +// returns true if download succeeded +bool common_download_model( + const common_params_model & model, + const std::string & bearer_token, + bool offline); From 8c0d6bb4559e15f1236035a0465781c1345324e5 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 7 Nov 2025 12:24:47 +0200 Subject: [PATCH 13/69] server : print the samplers chain for each request (#17070) --- tools/server/server.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 0e1a9afc86..164e8cf4e7 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -2823,6 +2823,8 @@ struct server_context { send_error(task, "Failed to parse grammar", ERROR_TYPE_INVALID_REQUEST); return false; } + + SLT_INF(slot, "sampler chain: %s\n", common_sampler_print(slot.smpl).c_str()); } // initialize draft batch From 7c23f3f0d4b9f5d6ea140756eb694b562d5acebb Mon Sep 17 00:00:00 2001 From: iron Date: Sat, 8 Nov 2025 00:18:14 +0800 Subject: [PATCH 14/69] ggml-cpu: detect correct cpu flags for arm64 (#16229) (#16239) When using GCC 9 and GCC 12 on the arm64 platform of ubuntu 2004, the command "gcc -mcpu=native -E -v -" fails to detect the correct CPU flags, which results in compilation failures for certain extended instructions, but the correct CPU flags can be obtained by using gcc -march. Signed-off-by: lizhenneng Co-authored-by: lizhenneng --- ggml/src/ggml-cpu/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index 23ec8bb08a..485227d24d 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -118,18 +118,18 @@ function(ggml_add_cpu_backend_variant_impl tag_name) # so we check for them manually and enable them if available execute_process( - COMMAND ${CMAKE_C_COMPILER} -mcpu=native -E -v - + COMMAND ${CMAKE_C_COMPILER} -march=native -E -v - INPUT_FILE "/dev/null" OUTPUT_QUIET ERROR_VARIABLE ARM_MCPU RESULT_VARIABLE ARM_MCPU_RESULT ) if (NOT ARM_MCPU_RESULT) - string(REGEX MATCH "-mcpu=[^ ']+" ARM_MCPU_FLAG "${ARM_MCPU}") + string(REGEX MATCH "-march=[^ ']+" ARM_MCPU_FLAG "${ARM_MCPU}") endif() if ("${ARM_MCPU_FLAG}" STREQUAL "") - set(ARM_MCPU_FLAG -mcpu=native) - message(STATUS "ARM -mcpu not found, -mcpu=native will be used") + set(ARM_MCPU_FLAG -march=native) + message(STATUS "ARM -mcpu not found, -march=native will be used") endif() include(CheckCXXSourceRuns) From 9eb9a1331dec83098c858150cd0a8ad9f6d8f46c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Gallou=C3=ABt?= Date: Fri, 7 Nov 2025 17:34:05 +0100 Subject: [PATCH 15/69] Revert "ggml-cpu: detect correct cpu flags for arm64 (#16229) (#16239)" (#17084) This reverts commit 7c23f3f0d4b9f5d6ea140756eb694b562d5acebb. --- ggml/src/ggml-cpu/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index 485227d24d..23ec8bb08a 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -118,18 +118,18 @@ function(ggml_add_cpu_backend_variant_impl tag_name) # so we check for them manually and enable them if available execute_process( - COMMAND ${CMAKE_C_COMPILER} -march=native -E -v - + COMMAND ${CMAKE_C_COMPILER} -mcpu=native -E -v - INPUT_FILE "/dev/null" OUTPUT_QUIET ERROR_VARIABLE ARM_MCPU RESULT_VARIABLE ARM_MCPU_RESULT ) if (NOT ARM_MCPU_RESULT) - string(REGEX MATCH "-march=[^ ']+" ARM_MCPU_FLAG "${ARM_MCPU}") + string(REGEX MATCH "-mcpu=[^ ']+" ARM_MCPU_FLAG "${ARM_MCPU}") endif() if ("${ARM_MCPU_FLAG}" STREQUAL "") - set(ARM_MCPU_FLAG -march=native) - message(STATUS "ARM -mcpu not found, -march=native will be used") + set(ARM_MCPU_FLAG -mcpu=native) + message(STATUS "ARM -mcpu not found, -mcpu=native will be used") endif() include(CheckCXXSourceRuns) From 16bcc1259d311d0fd37fe00fefcc7900324d38cb Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 7 Nov 2025 20:03:25 +0200 Subject: [PATCH 16/69] kv-cache : pad the cache size to 256 for performance (#17046) * kv-cache : pad the size of the small SWA cache for performance * context : pad the total context to 256 * cont : future-proof the swa pad * server : adjust test params to new logic --- include/llama.h | 1 + src/llama-context.cpp | 4 ++++ src/llama-kv-cache-iswa.cpp | 4 +++- tools/server/tests/unit/test_speculative.py | 12 ++++++------ 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/include/llama.h b/include/llama.h index 98bed9d615..aa9932afb8 100644 --- a/include/llama.h +++ b/include/llama.h @@ -463,6 +463,7 @@ extern "C" { // NOTE: After creating a llama_context, it is recommended to query the actual values using these functions // In some cases the requested values via llama_context_params may differ from the actual values used by the context + // ref: https://github.com/ggml-org/llama.cpp/pull/17046#discussion_r2503085732 LLAMA_API uint32_t llama_n_ctx (const struct llama_context * ctx); LLAMA_API uint32_t llama_n_ctx_seq (const struct llama_context * ctx); LLAMA_API uint32_t llama_n_batch (const struct llama_context * ctx); diff --git a/src/llama-context.cpp b/src/llama-context.cpp index 866514038e..e115fcd933 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -114,10 +114,14 @@ llama_context::llama_context( } } + // ref: https://github.com/ggml-org/llama.cpp/pull/17046#discussion_r2503085732 + cparams.n_ctx = GGML_PAD(cparams.n_ctx, 256); + if (cparams.kv_unified) { cparams.n_ctx_seq = cparams.n_ctx; } else { cparams.n_ctx_seq = cparams.n_ctx / cparams.n_seq_max; + cparams.n_ctx_seq = GGML_PAD(cparams.n_ctx_seq, 256); if (cparams.n_ctx_seq == 0) { throw std::runtime_error("n_ctx_seq == 0"); diff --git a/src/llama-kv-cache-iswa.cpp b/src/llama-kv-cache-iswa.cpp index facba1d004..3a34102a23 100644 --- a/src/llama-kv-cache-iswa.cpp +++ b/src/llama-kv-cache-iswa.cpp @@ -45,7 +45,9 @@ llama_kv_cache_iswa::llama_kv_cache_iswa( const uint32_t size_base = kv_size; - uint32_t size_swa = std::min(size_base, GGML_PAD(hparams.n_swa*(unified ? n_seq_max : 1) + n_ubatch, n_pad)); + // note: the SWA cache is always padded to 256 for performance + // https://github.com/ggml-org/llama.cpp/issues/17037 + uint32_t size_swa = GGML_PAD(std::min(size_base, hparams.n_swa*(unified ? n_seq_max : 1) + n_ubatch), 256); // when using full-size SWA cache, we set the SWA cache size to be equal to the base cache size if (swa_full) { diff --git a/tools/server/tests/unit/test_speculative.py b/tools/server/tests/unit/test_speculative.py index 65952de8b8..d2f3fba5fe 100644 --- a/tools/server/tests/unit/test_speculative.py +++ b/tools/server/tests/unit/test_speculative.py @@ -77,10 +77,10 @@ def test_different_draft_min_draft_max(): def test_slot_ctx_not_exceeded(): global server - server.n_ctx = 64 + server.n_ctx = 256 server.start() res = server.make_request("POST", "/completion", data={ - "prompt": "Hello " * 56, + "prompt": "Hello " * 248, "temperature": 0.0, "top_k": 1, "speculative.p_min": 0.0, @@ -91,19 +91,19 @@ def test_slot_ctx_not_exceeded(): def test_with_ctx_shift(): global server - server.n_ctx = 64 + server.n_ctx = 256 server.enable_ctx_shift = True server.start() res = server.make_request("POST", "/completion", data={ - "prompt": "Hello " * 56, + "prompt": "Hello " * 248, "temperature": 0.0, "top_k": 1, - "n_predict": 64, + "n_predict": 256, "speculative.p_min": 0.0, }) assert res.status_code == 200 assert len(res.body["content"]) > 0 - assert res.body["tokens_predicted"] == 64 + assert res.body["tokens_predicted"] == 256 assert res.body["truncated"] == True From 9008027aa376526819415469f74fb9281136224e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Fri, 7 Nov 2025 19:27:58 +0100 Subject: [PATCH 17/69] hparams : add n_embd_inp() to support extended embed (#16928) * add n_embd_full to support extended embed * don't change output * rename to n_embd_inp * restore n_embd where applicable --- include/llama.h | 1 + src/llama-context.cpp | 6 +++--- src/llama-graph.cpp | 4 ++-- src/llama-hparams.cpp | 10 ++++++++++ src/llama-hparams.h | 3 +++ src/llama-model.cpp | 23 +++++++---------------- src/models/qwen3vl-moe.cpp | 3 +-- src/models/qwen3vl.cpp | 5 +---- tools/mtmd/mtmd.cpp | 2 +- 9 files changed, 29 insertions(+), 28 deletions(-) diff --git a/include/llama.h b/include/llama.h index aa9932afb8..8547226ff2 100644 --- a/include/llama.h +++ b/include/llama.h @@ -486,6 +486,7 @@ extern "C" { LLAMA_API int32_t llama_model_n_ctx_train(const struct llama_model * model); LLAMA_API int32_t llama_model_n_embd (const struct llama_model * model); + LLAMA_API int32_t llama_model_n_embd_inp (const struct llama_model * model); LLAMA_API int32_t llama_model_n_layer (const struct llama_model * model); LLAMA_API int32_t llama_model_n_head (const struct llama_model * model); LLAMA_API int32_t llama_model_n_head_kv (const struct llama_model * model); diff --git a/src/llama-context.cpp b/src/llama-context.cpp index e115fcd933..70a3ec62df 100644 --- a/src/llama-context.cpp +++ b/src/llama-context.cpp @@ -827,7 +827,7 @@ int llama_context::encode(const llama_batch & batch_inp) { const auto & hparams = model.hparams; - const int64_t n_embd = hparams.n_embd; + const int64_t n_embd = hparams.n_embd_inp(); const int64_t n_vocab = model.vocab.n_tokens(); // note: during encode, we always pass the full sequence starting from pos = 0 @@ -996,7 +996,7 @@ int llama_context::decode(const llama_batch & batch_inp) { const auto & hparams = model.hparams; const int64_t n_vocab = vocab.n_tokens(); - const int64_t n_embd = hparams.n_embd; + const int64_t n_embd = hparams.n_embd_inp(); // when computing embeddings, all tokens are output const bool output_all = cparams.embeddings; @@ -2154,7 +2154,7 @@ void llama_context::opt_epoch_iter( batch.logits [pos_batch] = true; } - if (!balloc->init(batch, model.vocab, nullptr, model.hparams.n_embd, cparams.kv_unified ? LLAMA_MAX_SEQ : cparams.n_seq_max, true)) { + if (!balloc->init(batch, model.vocab, nullptr, model.hparams.n_embd_inp(), cparams.kv_unified ? LLAMA_MAX_SEQ : cparams.n_seq_max, true)) { LLAMA_LOG_ERROR("%s: failed to initialize batch\n", __func__); return; } diff --git a/src/llama-graph.cpp b/src/llama-graph.cpp index f9751b3183..b199e94628 100644 --- a/src/llama-graph.cpp +++ b/src/llama-graph.cpp @@ -1142,7 +1142,7 @@ ggml_tensor * llm_graph_context::build_moe_ffn( // input embeddings with optional lora ggml_tensor * llm_graph_context::build_inp_embd(ggml_tensor * tok_embd) const { - const int64_t n_embd = hparams.n_embd; + const int64_t n_embd = hparams.n_embd_inp(); auto inp = std::make_unique(); @@ -1279,7 +1279,7 @@ ggml_tensor * llm_graph_context::build_inp_cross_embd() const { // return cur; //} - const auto n_embd = !cross->v_embd.empty() ? cross->n_embd : hparams.n_embd; + const auto n_embd = !cross->v_embd.empty() ? cross->n_embd : hparams.n_embd_inp(); const auto n_enc = !cross->v_embd.empty() ? cross->n_enc : hparams.n_ctx_train; cur = ggml_new_tensor_2d(ctx0, GGML_TYPE_F32, n_embd, n_enc); diff --git a/src/llama-hparams.cpp b/src/llama-hparams.cpp index 514d653844..8cdbaf69fc 100644 --- a/src/llama-hparams.cpp +++ b/src/llama-hparams.cpp @@ -60,6 +60,16 @@ uint32_t llama_hparams::n_gqa(uint32_t il) const { return n_head/n_head_kv; } +uint32_t llama_hparams::n_embd_inp() const { + uint32_t n_embd_inp = n_embd; + + if (n_deepstack_layers > 0) { + n_embd_inp += n_embd * n_deepstack_layers; + } + + return n_embd_inp; +} + uint32_t llama_hparams::n_embd_k_gqa(uint32_t il) const { const uint32_t n_head_kv = this->n_head_kv(il); diff --git a/src/llama-hparams.h b/src/llama-hparams.h index 539fecb3f7..9203af83b2 100644 --- a/src/llama-hparams.h +++ b/src/llama-hparams.h @@ -227,6 +227,9 @@ struct llama_hparams { uint32_t n_gqa(uint32_t il = 0) const; + // dimension of main + auxiliary input embeddings + uint32_t n_embd_inp() const; + // dimension of key embeddings across all k-v heads uint32_t n_embd_k_gqa(uint32_t il = 0) const; diff --git a/src/llama-model.cpp b/src/llama-model.cpp index 1987135ca6..829f1e3c14 100644 --- a/src/llama-model.cpp +++ b/src/llama-model.cpp @@ -276,8 +276,8 @@ static bool weight_buft_supported(const llama_hparams & hparams, ggml_tensor * w } break; case GGML_OP_IM2COL: { - const int n_embd = hparams.n_embd; - ggml_tensor * b = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, n_embd, w->ne[1], 1, 1); + const int n_embd_inp = hparams.n_embd_inp(); + ggml_tensor * b = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, n_embd_inp, w->ne[1], 1, 1); op_tensor = ggml_im2col(ctx, w, b, 1, 0, 0, 0, 1, 0, false, GGML_TYPE_F16); } break; case GGML_OP_SCALE: @@ -1039,9 +1039,6 @@ void llama_model::load_hparams(llama_model_loader & ml) { case 64: type = LLM_TYPE_32B; break; default: type = LLM_TYPE_UNKNOWN; } - // since vision model stacks deepstack features along feature dim - // we also create a fake "n_embd" for text model to be the main embd + deepstack embds - hparams.n_embd *= hparams.n_deepstack_layers + 1; } break; case LLM_ARCH_QWEN3MOE: { @@ -1065,9 +1062,6 @@ void llama_model::load_hparams(llama_model_loader & ml) { case 94: type = LLM_TYPE_235B_A22B; break; default: type = LLM_TYPE_UNKNOWN; } - // since vision model stacks deepstack features along feature dim - // we also create a fake "n_embd" for text model to be the main embd + deepstack embds - hparams.n_embd *= hparams.n_deepstack_layers + 1; } break; case LLM_ARCH_PHI2: { @@ -3341,10 +3335,6 @@ bool llama_model::load_tensors(llama_model_loader & ml) { case LLM_ARCH_QWEN3: case LLM_ARCH_QWEN3VL: { - // for model loading, the weights only have the main embd - // so we need to divide by the number of deepstack layers + 1 - // n_embd is const int so we declare a new variable - int64_t n_embd = hparams.n_embd / (hparams.n_deepstack_layers + 1); tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); // output @@ -3380,10 +3370,6 @@ bool llama_model::load_tensors(llama_model_loader & ml) { case LLM_ARCH_QWEN3MOE: case LLM_ARCH_QWEN3VLMOE: { - // for model loading, the weights only have the main embd - // so we need to divide by the number of deepstack layers + 1 - // n_embd is const int so we declare a new variable - int64_t n_embd = hparams.n_embd / (hparams.n_deepstack_layers + 1); tok_embd = create_tensor(tn(LLM_TENSOR_TOKEN_EMBD, "weight"), {n_embd, n_vocab}, 0); // output @@ -6535,6 +6521,7 @@ void llama_model::print_info() const { if (!hparams.vocab_only) { LLAMA_LOG_INFO("%s: n_ctx_train = %u\n", __func__, hparams.n_ctx_train); LLAMA_LOG_INFO("%s: n_embd = %u\n", __func__, hparams.n_embd); + LLAMA_LOG_INFO("%s: n_embd_inp = %u\n", __func__, hparams.n_embd_inp()); LLAMA_LOG_INFO("%s: n_layer = %u\n", __func__, hparams.n_layer); LLAMA_LOG_INFO("%s: n_head = %s\n", __func__, print_f([&](uint32_t il) { return hparams.n_head(il); }, hparams.n_layer).c_str()); LLAMA_LOG_INFO("%s: n_head_kv = %s\n", __func__, print_f([&](uint32_t il) { return hparams.n_head_kv(il); }, hparams.n_layer).c_str()); @@ -7380,6 +7367,10 @@ int32_t llama_model_n_embd(const llama_model * model) { return model->hparams.n_embd; } +int32_t llama_model_n_embd_inp(const llama_model * model) { + return model->hparams.n_embd_inp(); +} + int32_t llama_model_n_layer(const llama_model * model) { return model->hparams.n_layer; } diff --git a/src/models/qwen3vl-moe.cpp b/src/models/qwen3vl-moe.cpp index c48643c0cd..f72f80a837 100644 --- a/src/models/qwen3vl-moe.cpp +++ b/src/models/qwen3vl-moe.cpp @@ -1,9 +1,8 @@ #include "models.h" llm_build_qwen3vlmoe::llm_build_qwen3vlmoe(const llama_model & model, const llm_graph_params & params) : llm_graph_context(params) { - const int64_t n_embd_full = hparams.n_embd; // main embd + deepstack embds const size_t n_deepstack_layers = hparams.n_deepstack_layers; - const int64_t n_embd = n_embd_full / (n_deepstack_layers + 1); + const int64_t n_embd = hparams.n_embd; const int64_t n_embd_head = hparams.n_embd_head_v; GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); diff --git a/src/models/qwen3vl.cpp b/src/models/qwen3vl.cpp index 10b36c1f65..0bae52239c 100644 --- a/src/models/qwen3vl.cpp +++ b/src/models/qwen3vl.cpp @@ -1,13 +1,10 @@ #include "models.h" llm_build_qwen3vl::llm_build_qwen3vl(const llama_model & model, const llm_graph_params & params) : llm_graph_context(params) { - - const int64_t n_embd_full = hparams.n_embd; // main embd + deepstack embds const size_t n_deepstack_layers = hparams.n_deepstack_layers; - const int64_t n_embd = n_embd_full / (n_deepstack_layers + 1); + const int64_t n_embd = hparams.n_embd; const int64_t n_embd_head = hparams.n_embd_head_v; - GGML_ASSERT(n_embd_head == hparams.n_embd_head_k); GGML_ASSERT(n_embd_head == hparams.n_rot); diff --git a/tools/mtmd/mtmd.cpp b/tools/mtmd/mtmd.cpp index 4343f3b6fc..e599137769 100644 --- a/tools/mtmd/mtmd.cpp +++ b/tools/mtmd/mtmd.cpp @@ -163,7 +163,7 @@ struct mtmd_context { print_timings(ctx_params.print_timings), n_threads (ctx_params.n_threads), media_marker (ctx_params.media_marker), - n_embd_text (llama_model_n_embd(text_model)) + n_embd_text (llama_model_n_embd_inp(text_model)) { if (std::string(ctx_params.image_marker) != MTMD_DEFAULT_IMAGE_MARKER) { throw std::runtime_error("custom image_marker is not supported anymore, use media_marker instead"); From 7956bb4d7f430f23f3c4726f7e6404b89f6e20a4 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Fri, 7 Nov 2025 21:23:11 +0200 Subject: [PATCH 18/69] bench : cache the llama_context state at computed depth (#16944) * bench : cache llama_context state at depth * cont : handle failures to restore the old state * cont : print information when the state is being reused --- tools/llama-bench/llama-bench.cpp | 47 ++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/tools/llama-bench/llama-bench.cpp b/tools/llama-bench/llama-bench.cpp index 0de07b9811..852a512451 100644 --- a/tools/llama-bench/llama-bench.cpp +++ b/tools/llama-bench/llama-bench.cpp @@ -1919,6 +1919,12 @@ struct sql_printer : public printer { } }; +struct ctx_state { + int depth = 0; // in tokens + + std::vector buf; // the llama_context state buffer +}; + static bool test_prompt(llama_context * ctx, int n_prompt, int n_batch, int n_threads) { llama_set_n_threads(ctx, n_threads, n_threads); @@ -2051,6 +2057,10 @@ int main(int argc, char ** argv) { llama_model * lmodel = nullptr; const cmd_params_instance * prev_inst = nullptr; + // store the llama_context state at the previous depth that we performed a test + // ref: https://github.com/ggml-org/llama.cpp/pull/16944#issuecomment-3478151721 + ctx_state cstate; + int params_idx = 0; auto params_count = params_instances.size(); for (const auto & inst : params_instances) { @@ -2134,14 +2144,37 @@ int main(int argc, char ** argv) { llama_memory_clear(llama_get_memory(ctx), false); if (t.n_depth > 0) { - if (params.progress) { - fprintf(stderr, "llama-bench: benchmark %d/%zu: depth run %d/%d\n", params_idx, params_count, - i + 1, params.reps); + bool is_cached = t.n_depth == cstate.depth; + + if (is_cached) { + // if previously we have computed at this depth, just restore the state + const size_t ret = llama_state_seq_set_data(ctx, cstate.buf.data(), cstate.buf.size(), 0); + if (ret == 0) { + // if the old state is incompatible with the current context - reprocess from scratch + is_cached = false; + } } - bool res = test_prompt(ctx, t.n_depth, t.n_batch, t.n_threads); - if (!res) { - fprintf(stderr, "%s: error: failed to run depth\n", __func__); - exit(1); + + if (!is_cached) { + if (params.progress) { + fprintf(stderr, "llama-bench: benchmark %d/%zu: depth run %d/%d\n", params_idx, params_count, + i + 1, params.reps); + } + bool res = test_prompt(ctx, t.n_depth, t.n_batch, t.n_threads); + if (!res) { + fprintf(stderr, "%s: error: failed to run depth\n", __func__); + exit(1); + } + + // store the context state for reuse in later runs + cstate.depth = t.n_depth; + cstate.buf.resize(llama_state_seq_get_size(ctx, 0)); + llama_state_seq_get_data(ctx, cstate.buf.data(), cstate.buf.size(), 0); + } else { + if (params.progress) { + fprintf(stderr, "llama-bench: benchmark %d/%zu: depth run %d/%d (cached)\n", params_idx, params_count, + i + 1, params.reps); + } } } From 65156105069fa86a4a81b6cb0e8cb583f6420677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Fri, 7 Nov 2025 20:53:14 +0100 Subject: [PATCH 19/69] CUDA: fix should_use_mmvf for ne11 == 1 (#17085) * CUDA: fix should_use_mmvf for ne11 == 1 * Apply suggestion from @am17an Co-authored-by: Aman Gupta --------- Co-authored-by: Aman Gupta --- ggml/src/ggml-cuda/mmf.cu | 8 +++++++- ggml/src/ggml-cuda/mmvf.cu | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-cuda/mmf.cu b/ggml/src/ggml-cuda/mmf.cu index 69a60aceb8..153dd5a97d 100644 --- a/ggml/src/ggml-cuda/mmf.cu +++ b/ggml/src/ggml-cuda/mmf.cu @@ -129,7 +129,13 @@ bool ggml_cuda_should_use_mmf(enum ggml_type type, int cc, int warp_size, const if (src0_ne[0] % (warp_size * (4/ts)) != 0) { return false; } - for (size_t i = 0; i < GGML_MAX_DIMS; ++i) { + + if (src0_nb[0] != ts) { + return false; + } + + // Pointers not aligned to the size of half2/nv_bfloat162/float2 would result in a crash: + for (size_t i = 1; i < GGML_MAX_DIMS; ++i) { if (src0_nb[i] % (2*ts) != 0) { return false; } diff --git a/ggml/src/ggml-cuda/mmvf.cu b/ggml/src/ggml-cuda/mmvf.cu index 526d90d7ae..6238ce7ebd 100644 --- a/ggml/src/ggml-cuda/mmvf.cu +++ b/ggml/src/ggml-cuda/mmvf.cu @@ -720,12 +720,19 @@ bool ggml_cuda_should_use_mmvf(enum ggml_type type, int cc, const int64_t * src0 if (src0_ne[0] % 2 != 0) { return false; } + const size_t ts = ggml_type_size(type); - for (size_t i = 0; i < GGML_MAX_DIMS; ++i) { + if (src0_nb[0] != ts) { + return false; + } + + // Pointers not aligned to the size of half2/nv_bfloat162/float2 would result in a crash: + for (size_t i = 1; i < GGML_MAX_DIMS; ++i) { if (src0_nb[i] % (2*ts) != 0) { return false; } } + switch (type) { case GGML_TYPE_F32: if (GGML_CUDA_CC_IS_NVIDIA(cc)) { From ac76d3620158aa191118abaf5603479646969543 Mon Sep 17 00:00:00 2001 From: Acly Date: Fri, 7 Nov 2025 21:08:50 +0100 Subject: [PATCH 20/69] vulkan : refactor buffer handling in vk_op_f32 (#16840) * vulkan : refactor/simplify buffer handling in vk_op_* functions * Combine UMA handling into ggml_vk_tensor_subbuffer --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 556 +++++---------------------- 1 file changed, 97 insertions(+), 459 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index ab94bc3d78..a0a05f2e5b 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -5387,7 +5387,7 @@ static void ggml_vk_host_free(vk_device& device, void* ptr) { device->pinned_memory.erase(device->pinned_memory.begin() + index); } -static void ggml_vk_host_get(vk_device& device, const void * ptr, vk_buffer& buf, size_t& buf_offset) { +static void ggml_vk_host_get(const vk_device& device, const void * ptr, vk_buffer& buf, size_t& buf_offset) { std::lock_guard guard(device->mutex); buf = nullptr; buf_offset = 0; @@ -5402,6 +5402,32 @@ static void ggml_vk_host_get(vk_device& device, const void * ptr, vk_buffer& buf } } +static vk_subbuffer ggml_vk_tensor_subbuffer( + const ggml_backend_vk_context * ctx, const ggml_tensor * tensor, bool allow_misalign = false) { + + vk_buffer buffer = nullptr; + size_t offset = 0; + if (ctx->device->uma) { + ggml_vk_host_get(ctx->device, tensor->data, buffer, offset); + } + if (!buffer) { + auto buf_ctx = (ggml_backend_vk_buffer_context *)tensor->buffer->context; + buffer = buf_ctx->dev_buffer; + offset = vk_tensor_offset(tensor) + tensor->view_offs; + } + GGML_ASSERT(buffer != nullptr); + + size_t size = ggml_nbytes(tensor); + + size_t misalign_bytes = offset & (ctx->device->properties.limits.minStorageBufferOffsetAlignment - 1); + // The shader must support misaligned offsets when indexing into the buffer + GGML_ASSERT(allow_misalign || misalign_bytes == 0); + offset &= ~misalign_bytes; + size += misalign_bytes; + + return vk_subbuffer{buffer, offset, size}; +} + static vk_submission ggml_vk_begin_submission(vk_device& device, vk_command_pool& p, bool one_time = true) { vk_submission s; s.buffer = ggml_vk_create_cmd_buffer(device, p); @@ -7953,72 +7979,12 @@ static void ggml_vk_flash_attn(ggml_backend_vk_context * ctx, vk_context& subctx const float m0 = powf(2.0f, -(max_bias ) / n_head_log2); const float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2); - vk_buffer d_Q = nullptr, d_K = nullptr, d_V = nullptr, d_D = nullptr, d_M = nullptr, d_S = nullptr; - size_t q_buf_offset = 0, k_buf_offset = 0, v_buf_offset = 0, d_buf_offset = 0, m_buf_offset = 0, s_buf_offset = 0; - - bool Q_uma = false, K_uma = false, V_uma = false, D_uma = false, M_uma = false, S_uma = false; - - if (ctx->device->uma) { - ggml_vk_host_get(ctx->device, q->data, d_Q, q_buf_offset); - ggml_vk_host_get(ctx->device, k->data, d_K, k_buf_offset); - ggml_vk_host_get(ctx->device, v->data, d_V, v_buf_offset); - ggml_vk_host_get(ctx->device, dst->data, d_D, d_buf_offset); - Q_uma = d_Q != nullptr; - K_uma = d_K != nullptr; - V_uma = d_V != nullptr; - D_uma = d_D != nullptr; - if (mask) { - ggml_vk_host_get(ctx->device, mask->data, d_M, m_buf_offset); - M_uma = d_M != nullptr; - } - if (sinks) { - ggml_vk_host_get(ctx->device, sinks->data, d_S, s_buf_offset); - S_uma = d_S != nullptr; - } - } - - - ggml_backend_vk_buffer_context * d_buf_ctx = (ggml_backend_vk_buffer_context *)dst->buffer->context; - ggml_backend_vk_buffer_context * q_buf_ctx = (ggml_backend_vk_buffer_context *)q->buffer->context; - ggml_backend_vk_buffer_context * k_buf_ctx = (ggml_backend_vk_buffer_context *)k->buffer->context; - ggml_backend_vk_buffer_context * v_buf_ctx = (ggml_backend_vk_buffer_context *)v->buffer->context; - - if (!Q_uma) { - d_Q = q_buf_ctx->dev_buffer; - q_buf_offset = vk_tensor_offset(q) + q->view_offs; - } - if (!K_uma) { - d_K = k_buf_ctx->dev_buffer; - k_buf_offset = vk_tensor_offset(k) + k->view_offs; - } - if (!V_uma) { - d_V = v_buf_ctx->dev_buffer; - v_buf_offset = vk_tensor_offset(v) + v->view_offs; - } - if (!D_uma) { - d_D = d_buf_ctx->dev_buffer; - d_buf_offset = vk_tensor_offset(dst) + dst->view_offs; - } - - if (!M_uma) { - d_M = d_Q; - m_buf_offset = q_buf_offset; - if (mask) { - ggml_backend_vk_buffer_context * m_buf_ctx = (ggml_backend_vk_buffer_context*)mask->buffer->context; - d_M = m_buf_ctx->dev_buffer; - m_buf_offset = vk_tensor_offset(mask) + mask->view_offs; - } - } - - if (!S_uma) { - d_S = d_Q; - s_buf_offset = q_buf_offset; - if (sinks) { - ggml_backend_vk_buffer_context * s_buf_ctx = (ggml_backend_vk_buffer_context*)sinks->buffer->context; - d_S = s_buf_ctx->dev_buffer; - s_buf_offset = vk_tensor_offset(sinks) + sinks->view_offs; - } - } + vk_subbuffer q_buf = ggml_vk_tensor_subbuffer(ctx, q); + vk_subbuffer k_buf = ggml_vk_tensor_subbuffer(ctx, k); + vk_subbuffer v_buf = ggml_vk_tensor_subbuffer(ctx, v); + vk_subbuffer dst_buf = ggml_vk_tensor_subbuffer(ctx, dst); + vk_subbuffer mask_buf = mask ? ggml_vk_tensor_subbuffer(ctx, mask) : q_buf; + vk_subbuffer sinks_buf = sinks ? ggml_vk_tensor_subbuffer(ctx, sinks) : q_buf; uint32_t mask_n_head_log2 = ((sinks != nullptr) << 24) | ((mask != nullptr) << 16) | n_head_log2; @@ -8040,15 +8006,9 @@ static void ggml_vk_flash_attn(ggml_backend_vk_context * ctx, vk_context& subctx ggml_vk_sync_buffers(ctx, subctx); } + vk_subbuffer split_k_buf = ggml_vk_subbuffer(ctx, ctx->prealloc_split_k, 0); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, - { - ggml_vk_subbuffer(ctx, d_Q, q_buf_offset), - ggml_vk_subbuffer(ctx, d_K, k_buf_offset), - ggml_vk_subbuffer(ctx, d_V, v_buf_offset), - ggml_vk_subbuffer(ctx, d_M, m_buf_offset), - ggml_vk_subbuffer(ctx, d_S, s_buf_offset), - ggml_vk_subbuffer(ctx, ctx->prealloc_split_k, 0), - }, + {q_buf, k_buf, v_buf, mask_buf, sinks_buf, split_k_buf}, // We only use split_k when group query attention is enabled, which means // there's no more than one tile of rows (i.e. workgroups_x would have been // one). We reuse workgroups_x to mean the number of splits, so we need to @@ -8058,23 +8018,12 @@ static void ggml_vk_flash_attn(ggml_backend_vk_context * ctx, vk_context& subctx ggml_vk_sync_buffers(ctx, subctx); const std::array pc2 = { HSV, (uint32_t)ne1, (uint32_t)ne3, split_k, (sinks != nullptr) }; ggml_vk_dispatch_pipeline(ctx, subctx, ctx->device->pipeline_flash_attn_split_k_reduce, - { - ggml_vk_subbuffer(ctx, ctx->prealloc_split_k, 0), - ggml_vk_subbuffer(ctx, d_S, s_buf_offset), - ggml_vk_subbuffer(ctx, d_D, d_buf_offset), - }, + {split_k_buf, sinks_buf, dst_buf}, pc2, { (uint32_t)ne1, HSV, (uint32_t)ne3 }); ctx->prealloc_split_k_need_sync = true; } else { ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, - { - ggml_vk_subbuffer(ctx, d_Q, q_buf_offset), - ggml_vk_subbuffer(ctx, d_K, k_buf_offset), - ggml_vk_subbuffer(ctx, d_V, v_buf_offset), - ggml_vk_subbuffer(ctx, d_M, m_buf_offset), - ggml_vk_subbuffer(ctx, d_S, s_buf_offset), - ggml_vk_subbuffer(ctx, d_D, d_buf_offset), - }, + {q_buf, k_buf, v_buf, mask_buf, sinks_buf, dst_buf}, pc, { workgroups_x, workgroups_y, workgroups_z }); } } @@ -8757,35 +8706,15 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co const uint64_t ne01 = src0->ne[1]; const uint64_t ne02 = src0->ne[2]; const uint64_t ne03 = src0->ne[3]; - const uint64_t ne0 = ne00 * ne01; const bool use_src1 = src1 != nullptr; const uint64_t ne10 = use_src1 ? src1->ne[0] : 0; const uint64_t ne11 = use_src1 ? src1->ne[1] : 0; const uint64_t ne12 = use_src1 ? src1->ne[2] : 0; const uint64_t ne13 = use_src1 ? src1->ne[3] : 0; - const uint64_t ne1 = ne10 * ne11; - // const uint64_t nb10 = use_src1 ? src1->nb[0] : 0; const bool use_src2 = src2 != nullptr; - const uint64_t ne20 = use_src2 ? src2->ne[0] : 0; - const uint64_t ne21 = use_src2 ? src2->ne[1] : 0; - const uint64_t ne22 = use_src2 ? src2->ne[2] : 0; - const uint64_t ne23 = use_src2 ? src2->ne[3] : 0; - const uint64_t ne2 = ne20 * ne21; - const bool use_src3 = src3 != nullptr; - const uint64_t ne30 = use_src3 ? src3->ne[0] : 0; - const uint64_t ne31 = use_src3 ? src3->ne[1] : 0; - const uint64_t ne32 = use_src3 ? src3->ne[2] : 0; - const uint64_t ne33 = use_src3 ? src3->ne[3] : 0; - const uint64_t ne3 = ne30 * ne31; - - const uint64_t ned0 = dst->ne[0]; - const uint64_t ned1 = dst->ne[1]; - const uint64_t ned2 = dst->ne[2]; - const uint64_t ned3 = dst->ne[3]; - const uint64_t ned = ned0 * ned1; init_pushconst_fastdiv(pc); @@ -8804,74 +8733,14 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co const bool op_supports_incontiguous = ggml_vk_op_supports_incontiguous(op); - ggml_backend_vk_buffer_context * dst_buf_ctx = (ggml_backend_vk_buffer_context *)dst->buffer->context; - ggml_backend_vk_buffer_context * src0_buf_ctx = (ggml_backend_vk_buffer_context *)src0->buffer->context; - ggml_backend_vk_buffer_context * src1_buf_ctx = use_src1 ? (ggml_backend_vk_buffer_context *)src1->buffer->context : nullptr; - ggml_backend_vk_buffer_context * src2_buf_ctx = use_src2 ? (ggml_backend_vk_buffer_context *)src2->buffer->context : nullptr; - ggml_backend_vk_buffer_context * src3_buf_ctx = use_src3 ? (ggml_backend_vk_buffer_context *)src3->buffer->context : nullptr; + vk_subbuffer src0_buf = ggml_vk_tensor_subbuffer(ctx, src0, op_supports_incontiguous); + vk_subbuffer src1_buf = use_src1 ? ggml_vk_tensor_subbuffer(ctx, src1, op_supports_incontiguous) : vk_subbuffer{}; + vk_subbuffer src2_buf = use_src2 ? ggml_vk_tensor_subbuffer(ctx, src2, op_supports_incontiguous) : vk_subbuffer{}; + vk_subbuffer src3_buf = use_src3 ? ggml_vk_tensor_subbuffer(ctx, src3, op_supports_incontiguous) : vk_subbuffer{}; + vk_subbuffer dst_buf = ggml_vk_tensor_subbuffer(ctx, dst, op_supports_incontiguous); - vk_buffer d_X = nullptr; - size_t x_buf_offset = 0; - vk_buffer d_Y = nullptr; - size_t y_buf_offset = 0; - vk_buffer d_Z = nullptr; - size_t z_buf_offset = 0; - vk_buffer d_W = nullptr; - size_t w_buf_offset = 0; - - bool src0_uma = false; - bool src1_uma = false; - bool src2_uma = false; - bool src3_uma = false; - - if (ctx->device->uma) { - ggml_vk_host_get(ctx->device, src0->data, d_X, x_buf_offset); - src0_uma = d_X != nullptr; - if (use_src1) { - ggml_vk_host_get(ctx->device, src1->data, d_Y, y_buf_offset); - src1_uma = d_Y != nullptr; - } - if (use_src2) { - ggml_vk_host_get(ctx->device, src2->data, d_Z, z_buf_offset); - src2_uma = d_Z != nullptr; - } - if (use_src3) { - ggml_vk_host_get(ctx->device, src3->data, d_W, w_buf_offset); - src3_uma = d_W != nullptr; - } - } - - vk_buffer d_D = dst_buf_ctx->dev_buffer; - - GGML_ASSERT(d_D != nullptr); - uint64_t d_buf_offset = vk_tensor_offset(dst) + dst->view_offs; - if(!src0_uma) { - d_X = src0_buf_ctx->dev_buffer; - x_buf_offset = vk_tensor_offset(src0) + src0->view_offs; - GGML_ASSERT(d_X != nullptr); - } - if (use_src1 && !src1_uma) { - d_Y = src1_buf_ctx->dev_buffer; - y_buf_offset = vk_tensor_offset(src1) + src1->view_offs; - GGML_ASSERT(d_Y != nullptr); - } - if (use_src2 && !src2_uma) { - d_Z = src2_buf_ctx->dev_buffer; - z_buf_offset = vk_tensor_offset(src2) + src2->view_offs; - GGML_ASSERT(d_Z != nullptr); - } - if (use_src3 && !src3_uma) { - d_W = src3_buf_ctx->dev_buffer; - w_buf_offset = vk_tensor_offset(src3) + src3->view_offs; - GGML_ASSERT(d_W != nullptr); - } - // Compute misalignment offset for descriptors and store it in in push constants, then align the descriptor offsets. + // Compute misalignment offset for descriptors and store it in in push constants. init_pushconst_tensor_offsets(ctx, pc, src0, src1, src2, src3, dst); - x_buf_offset &= ~(ctx->device->properties.limits.minStorageBufferOffsetAlignment - 1); - y_buf_offset &= ~(ctx->device->properties.limits.minStorageBufferOffsetAlignment - 1); - z_buf_offset &= ~(ctx->device->properties.limits.minStorageBufferOffsetAlignment - 1); - w_buf_offset &= ~(ctx->device->properties.limits.minStorageBufferOffsetAlignment - 1); - d_buf_offset &= ~(ctx->device->properties.limits.minStorageBufferOffsetAlignment - 1); std::array elements; @@ -8955,9 +8824,9 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co const uint32_t KH = ne01; const uint32_t KW = ne00; - const uint32_t OD = ned3 / N; - const uint32_t OH = ned2; - const uint32_t OW = ned1; + const uint32_t OD = dst->ne[3] / N; + const uint32_t OH = dst->ne[2]; + const uint32_t OW = dst->ne[1]; const uint32_t IC_KD_KH_KW = IC*KD*KH*KW; const uint32_t N_OD_OH = N*OD*OH; @@ -9072,112 +8941,50 @@ static void ggml_vk_op_f32(ggml_backend_vk_context * ctx, vk_context& subctx, co break; } - uint64_t x_sz, y_sz, z_sz, w_sz, d_sz; - - if (op_supports_incontiguous) { - x_sz = ggml_nbytes(src0) + get_misalign_bytes(ctx, src0); - y_sz = use_src1 ? ggml_nbytes(src1) + get_misalign_bytes(ctx, src1) : 0; - z_sz = use_src2 ? ggml_nbytes(src2) + get_misalign_bytes(ctx, src2) : 0; - w_sz = use_src3 ? ggml_nbytes(src3) + get_misalign_bytes(ctx, src3) : 0; - d_sz = ggml_nbytes(dst) + get_misalign_bytes(ctx, dst); - - if (x_buf_offset + x_sz >= d_X->size) { - x_sz = ggml_vk_get_max_buffer_range(ctx, d_X, x_buf_offset); - } - if (use_src1 && y_buf_offset + y_sz >= d_Y->size) { - y_sz = ggml_vk_get_max_buffer_range(ctx, d_Y, y_buf_offset); - } - if (use_src2 && z_buf_offset + z_sz >= d_Z->size) { - z_sz = ggml_vk_get_max_buffer_range(ctx, d_Z, z_buf_offset); - } - if (use_src3 && w_buf_offset + w_sz >= d_W->size) { - w_sz = ggml_vk_get_max_buffer_range(ctx, d_W, w_buf_offset); - } - if (d_buf_offset + d_sz >= d_D->size) { - d_sz = ggml_vk_get_max_buffer_range(ctx, d_D, d_buf_offset); - } - } else { - x_sz = ggml_type_size(src0->type)/ggml_blck_size(src0->type) * ne0 * ne02 * ne03; - y_sz = use_src1 ? ggml_type_size(src1->type) * ne1 * ne12 * ne13 : 0; - z_sz = use_src2 ? ggml_type_size(src2->type) * ne2 * ne22 * ne23 : 0; - w_sz = use_src3 ? ggml_type_size(src3->type) * ne3 * ne32 * ne33 : 0; - d_sz = ggml_type_size(dst->type) * ned * ned2 * ned3; - } - if (op == GGML_OP_ADD || op == GGML_OP_RMS_NORM) { - vk_buffer d_A = ctx->do_add_rms_partials ? ctx->prealloc_add_rms_partials : d_X; - size_t a_buf_offset = ctx->do_add_rms_partials ? ctx->prealloc_size_add_rms_partials_offset : 0; + vk_subbuffer a_buf = src0_buf; + if (ctx->do_add_rms_partials) { + a_buf = ggml_vk_subbuffer(ctx, ctx->prealloc_add_rms_partials, ctx->prealloc_size_add_rms_partials_offset); + } ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, - { vk_subbuffer{ d_X, x_buf_offset, x_sz }, - vk_subbuffer{ d_Y, y_buf_offset, y_sz }, - vk_subbuffer{ d_D, d_buf_offset, d_sz }, - ggml_vk_subbuffer(ctx, d_A, a_buf_offset), - }, pc, elements); + { src0_buf, src1_buf, dst_buf, a_buf }, pc, elements); } else if (op == GGML_OP_GLU) { // Empty src1 is possible in glu, but the shader needs a buffer - vk_subbuffer subbuf_y; - if (use_src1) { - subbuf_y = { d_Y, y_buf_offset, y_sz }; - } else { - subbuf_y = { d_X, 0, x_sz }; - } - - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, subbuf_y, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); + vk_subbuffer subbuf1 = use_src1 ? src1_buf : src0_buf; + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { src0_buf, subbuf1, dst_buf }, pc, elements); } else if (op == GGML_OP_SOFT_MAX) { // Empty src1 and src2 is possible in soft_max, but the shader needs a buffer - vk_subbuffer subbuf_y; - if (use_src1) { - subbuf_y = { d_Y, y_buf_offset, y_sz }; - } else { - subbuf_y = { d_X, 0, x_sz }; - } - - vk_subbuffer subbuf_z; - if (use_src2) { - subbuf_z = { d_Z, z_buf_offset, z_sz }; - } else { - subbuf_z = { d_X, 0, x_sz }; - } - - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, subbuf_y, subbuf_z, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); + vk_subbuffer subbuf1 = use_src1 ? src1_buf : src0_buf; + vk_subbuffer subbuf2 = use_src2 ? src2_buf : src0_buf; + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { src0_buf, subbuf1, subbuf2, dst_buf }, pc, elements); } else if (op == GGML_OP_ROPE || op == GGML_OP_ROPE_BACK) { - // Empty src2 is possible in rope, but the shader needs a buffer - vk_subbuffer subbuf_z, subbuf_w; - if (use_src2) { - subbuf_z = { d_Z, z_buf_offset, z_sz }; - } else { - subbuf_z = { d_X, 0, x_sz }; - } - if (use_src3) { - subbuf_w = { d_W, w_buf_offset, w_sz }; - } else { - subbuf_w = { d_X, 0, x_sz }; - } - - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_Y, y_buf_offset, y_sz }, subbuf_z, vk_subbuffer{ d_D, d_buf_offset, d_sz }, subbuf_w }, pc, elements); + // Empty src2 and src3 is possible in rope, but the shader needs a buffer + vk_subbuffer subbuf2 = use_src2 ? src2_buf : src0_buf; + vk_subbuffer subbuf3 = use_src3 ? src3_buf : src0_buf; + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { src0_buf, src1_buf, subbuf2, dst_buf, subbuf3 }, pc, elements); } else if (op == GGML_OP_IM2COL || op == GGML_OP_IM2COL_3D) { if (ctx->device->shader_int64 && ctx->device->buffer_device_address) { // buffer device address path doesn't use dst buffer - d_sz = 1; + dst_buf.size = 1; } // im2col uses only src1 and dst buffers - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_Y, y_buf_offset, y_sz }, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { src1_buf, dst_buf }, pc, elements); } else if (op == GGML_OP_COUNT_EQUAL) { // count_equal assumes that destination buffer is initialized with zeroes - ggml_vk_buffer_memset_async(subctx, d_D, d_buf_offset, 0, d_sz); + ggml_vk_buffer_memset_async(subctx, dst_buf.buffer, dst_buf.offset, 0, dst_buf.size); ggml_vk_sync_buffers(ctx, subctx); - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_Y, y_buf_offset, y_sz }, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { src0_buf, src1_buf, dst_buf }, pc, elements); } else if (op == GGML_OP_OPT_STEP_SGD) { // OPT_STEP_SGD works on src0, it does not need dst - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_Y, y_buf_offset, y_sz }, vk_subbuffer{ d_Z, z_buf_offset, z_sz } }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { src0_buf, src1_buf, src2_buf }, pc, elements); } else if (use_src3) { - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_Y, y_buf_offset, y_sz }, vk_subbuffer{ d_Z, z_buf_offset, z_sz }, vk_subbuffer{ d_W, w_buf_offset, w_sz }, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { src0_buf, src1_buf, src2_buf, src3_buf, dst_buf }, pc, elements); } else if (use_src2) { - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_Y, y_buf_offset, y_sz }, vk_subbuffer{ d_Z, z_buf_offset, z_sz }, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { src0_buf, src1_buf, src2_buf, dst_buf }, pc, elements); } else if (use_src1) { - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_Y, y_buf_offset, y_sz }, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { src0_buf, src1_buf, dst_buf }, pc, elements); } else { - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { vk_subbuffer{ d_X, x_buf_offset, x_sz }, vk_subbuffer{ d_D, d_buf_offset, d_sz } }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { src0_buf, dst_buf }, pc, elements); } } @@ -9413,39 +9220,10 @@ static void ggml_vk_op_f32_wkv(ggml_backend_vk_context * ctx, vk_context& subctx ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); - ggml_backend_vk_buffer_context * dst_buf_ctx = (ggml_backend_vk_buffer_context *)dst->buffer->context; - ggml_backend_vk_buffer_context * src_buf_ctxs[7] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }; + vk_subbuffer dst_buf = ggml_vk_tensor_subbuffer(ctx, dst); + vk_subbuffer src_buf[7] = {}; for (int i = 0; i < num_srcs; i++) { - src_buf_ctxs[i] = (ggml_backend_vk_buffer_context *)dst->src[i]->buffer->context; - } - - vk_buffer d_D = nullptr, d_srcs[7] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }; - size_t dst_offset = 0, src_offsets[7] = { 0, 0, 0, 0, 0, 0, 0 }; - bool dst_uma = false, srcs_uma[7] = { false, false, false, false, false, false, false }; - - if (ctx->device->uma) { - for (int i = 0; i < num_srcs; i++) { - ggml_vk_host_get(ctx->device, dst->src[i]->data, d_srcs[i], src_offsets[i]); - srcs_uma[i] = d_srcs[i] != nullptr; - } - - ggml_vk_host_get(ctx->device, dst->data, d_D, dst_offset); - dst_uma = d_D != nullptr; - } - - uint64_t src_sizes[7] = { 0, 0, 0, 0, 0, 0, 0 }; - for (int i = 0; i < num_srcs; i++) { - src_sizes[i] = ggml_nbytes(dst->src[i]); - if (!srcs_uma[i]) { - d_srcs[i] = src_buf_ctxs[i]->dev_buffer; - src_offsets[i] = vk_tensor_offset(dst->src[i]) + dst->src[i]->view_offs; - } - } - - const uint64_t dst_size = ggml_nbytes(dst); - if (!dst_uma) { - d_D = dst_buf_ctx->dev_buffer; - dst_offset = vk_tensor_offset(dst) + dst->view_offs; + src_buf[i] = ggml_vk_tensor_subbuffer(ctx, dst->src[i]); } std::array elements = { @@ -9455,26 +9233,13 @@ static void ggml_vk_op_f32_wkv(ggml_backend_vk_context * ctx, vk_context& subctx }; if (version == 6) { - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { - vk_subbuffer{ d_srcs[0], src_offsets[0], src_sizes[0] }, - vk_subbuffer{ d_srcs[1], src_offsets[1], src_sizes[1] }, - vk_subbuffer{ d_srcs[2], src_offsets[2], src_sizes[2] }, - vk_subbuffer{ d_srcs[3], src_offsets[3], src_sizes[3] }, - vk_subbuffer{ d_srcs[4], src_offsets[4], src_sizes[4] }, - vk_subbuffer{ d_srcs[5], src_offsets[5], src_sizes[5] }, - vk_subbuffer{ d_D, dst_offset, dst_size } - }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, + {src_buf[0], src_buf[1], src_buf[2], src_buf[3], src_buf[4], src_buf[5], dst_buf}, + pc, elements); } else if (version == 7) { - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { - vk_subbuffer{ d_srcs[0], src_offsets[0], src_sizes[0] }, - vk_subbuffer{ d_srcs[1], src_offsets[1], src_sizes[1] }, - vk_subbuffer{ d_srcs[2], src_offsets[2], src_sizes[2] }, - vk_subbuffer{ d_srcs[3], src_offsets[3], src_sizes[3] }, - vk_subbuffer{ d_srcs[4], src_offsets[4], src_sizes[4] }, - vk_subbuffer{ d_srcs[5], src_offsets[5], src_sizes[5] }, - vk_subbuffer{ d_srcs[6], src_offsets[6], src_sizes[6] }, - vk_subbuffer{ d_D, dst_offset, dst_size } - }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, + {src_buf[0], src_buf[1], src_buf[2], src_buf[3], src_buf[4], src_buf[5], src_buf[6], dst_buf}, + pc, elements); } else { // shouldn't happen GGML_ASSERT(false); @@ -9554,40 +9319,10 @@ static void ggml_vk_ssm_scan(ggml_backend_vk_context * ctx, vk_context& subctx, n_head, head_dim, n_group, n_tok }; - ggml_backend_vk_buffer_context * dst_buf_ctx = (ggml_backend_vk_buffer_context *)dst->buffer->context; - ggml_backend_vk_buffer_context * src_buf_ctxs[GGML_MAX_SRC]; - for (int i = 0; i < GGML_MAX_SRC && dst->src[i] != nullptr; i++) { - src_buf_ctxs[i] = (ggml_backend_vk_buffer_context *)dst->src[i]->buffer->context; - } - - vk_buffer d_D = nullptr, d_srcs[GGML_MAX_SRC] = { nullptr }; - size_t dst_offset = 0, src_offsets[GGML_MAX_SRC] = { 0 }; - bool dst_uma = false, srcs_uma[GGML_MAX_SRC] = { false }; - - if (ctx->device->uma) { - for (int i = 0; i < GGML_MAX_SRC && dst->src[i] != nullptr; i++) { - ggml_vk_host_get(ctx->device, dst->src[i]->data, d_srcs[i], src_offsets[i]); - srcs_uma[i] = d_srcs[i] != nullptr; - } - ggml_vk_host_get(ctx->device, dst->data, d_D, dst_offset); - dst_uma = d_D != nullptr; - } - - if (!dst_uma) { - d_D = dst_buf_ctx->dev_buffer; - dst_offset = vk_tensor_offset(dst) + dst->view_offs; - } - for (int i = 0; i < GGML_MAX_SRC && dst->src[i] != nullptr; i++) { - if (!srcs_uma[i]) { - d_srcs[i] = src_buf_ctxs[i]->dev_buffer; - src_offsets[i] = vk_tensor_offset(dst->src[i]) + dst->src[i]->view_offs; - } - } - - size_t dst_size = ggml_nbytes(dst); - size_t src_sizes[GGML_MAX_SRC]; - for (int i = 0; i < GGML_MAX_SRC && dst->src[i] != nullptr; i++) { - src_sizes[i] = ggml_nbytes(dst->src[i]); + vk_subbuffer dst_buf = ggml_vk_tensor_subbuffer(ctx, dst); + vk_subbuffer src_buf[7] = {}; + for (int i = 0; i < 7 && dst->src[i] != nullptr; i++) { + src_buf[i] = ggml_vk_tensor_subbuffer(ctx, dst->src[i]); } std::array elements; @@ -9597,16 +9332,9 @@ static void ggml_vk_ssm_scan(ggml_backend_vk_context * ctx, vk_context& subctx, const uint32_t num_workgroups_y = n_seq; elements = { num_workgroups_x, num_workgroups_y, 1 }; - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { - vk_subbuffer{ d_srcs[0], src_offsets[0], src_sizes[0] }, - vk_subbuffer{ d_srcs[1], src_offsets[1], src_sizes[1] }, - vk_subbuffer{ d_srcs[2], src_offsets[2], src_sizes[2] }, - vk_subbuffer{ d_srcs[3], src_offsets[3], src_sizes[3] }, - vk_subbuffer{ d_srcs[4], src_offsets[4], src_sizes[4] }, - vk_subbuffer{ d_srcs[5], src_offsets[5], src_sizes[5] }, - vk_subbuffer{ d_srcs[6], src_offsets[6], src_sizes[6] }, - vk_subbuffer{ d_D, dst_offset, dst_size } - }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, + {src_buf[0], src_buf[1], src_buf[2], src_buf[3], src_buf[4], src_buf[5], src_buf[6], dst_buf}, + pc, elements); } static void ggml_vk_ssm_conv(ggml_backend_vk_context * ctx, vk_context& subctx, ggml_tensor * dst) { @@ -9653,66 +9381,17 @@ static void ggml_vk_op_f32_opt_step_adamw(ggml_backend_vk_context * ctx, vk_cont ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); - ggml_backend_vk_buffer_context * x_buf_ctx = (ggml_backend_vk_buffer_context *)x->buffer->context; - ggml_backend_vk_buffer_context * g_buf_ctx = (ggml_backend_vk_buffer_context *)g->buffer->context; - ggml_backend_vk_buffer_context * gm_buf_ctx = (ggml_backend_vk_buffer_context *)gm->buffer->context; - ggml_backend_vk_buffer_context * gv_buf_ctx = (ggml_backend_vk_buffer_context *)gv->buffer->context; - ggml_backend_vk_buffer_context * p_buf_ctx = (ggml_backend_vk_buffer_context *)p->buffer->context; - - vk_buffer d_X = nullptr, d_G = nullptr, d_GM = nullptr, d_GV = nullptr, d_P = nullptr; - size_t x_offset = 0, g_offset = 0, gm_offset = 0, gv_offset = 0, p_offset = 0; - bool X_uma = false, G_uma = false, GM_uma = false, GV_uma = false, P_uma = false; - - if (ctx->device->uma) { - ggml_vk_host_get(ctx->device, x->data, d_X, x_offset); - ggml_vk_host_get(ctx->device, g->data, d_G, g_offset); - ggml_vk_host_get(ctx->device, gm->data, d_GM, gm_offset); - ggml_vk_host_get(ctx->device, gv->data, d_GV, gv_offset); - ggml_vk_host_get(ctx->device, p->data, d_P, p_offset); - - X_uma = d_X != nullptr; - G_uma = d_G != nullptr; - GM_uma = d_GM != nullptr; - GV_uma = d_GV != nullptr; - P_uma = d_P != nullptr; - } - - if (!X_uma) { - d_X = x_buf_ctx->dev_buffer; - x_offset = vk_tensor_offset(x) + x->view_offs; - } - if (!G_uma) { - d_G = g_buf_ctx->dev_buffer; - g_offset = vk_tensor_offset(g) + g->view_offs; - } - if (!GM_uma) { - d_GM = gm_buf_ctx->dev_buffer; - gm_offset = vk_tensor_offset(gm) + gm->view_offs; - } - if (!GV_uma) { - d_GV = gv_buf_ctx->dev_buffer; - gv_offset = vk_tensor_offset(gv) + gv->view_offs; - } - if (!P_uma) { - d_P = p_buf_ctx->dev_buffer; - p_offset = vk_tensor_offset(p) + p->view_offs; - } - - const uint64_t x_size = ggml_nbytes(x); - const uint64_t g_size = ggml_nbytes(g); - const uint64_t gm_size = ggml_nbytes(gm); - const uint64_t gv_size = ggml_nbytes(gv); - const uint64_t p_size = ggml_nbytes(p); + vk_subbuffer x_buf = ggml_vk_tensor_subbuffer(ctx, x); + vk_subbuffer g_buf = ggml_vk_tensor_subbuffer(ctx, g); + vk_subbuffer gm_buf = ggml_vk_tensor_subbuffer(ctx, gm); + vk_subbuffer gv_buf = ggml_vk_tensor_subbuffer(ctx, gv); + vk_subbuffer p_buf = ggml_vk_tensor_subbuffer(ctx, p); std::array elements = { (uint32_t)ggml_nelements(x), 1, 1 }; - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { - vk_subbuffer{ d_X, x_offset, x_size }, - vk_subbuffer{ d_G, g_offset, g_size }, - vk_subbuffer{ d_GM, gm_offset, gm_size }, - vk_subbuffer{ d_GV, gv_offset, gv_size }, - vk_subbuffer{ d_P, p_offset, p_size }, - }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, + {x_buf, g_buf, gm_buf, gv_buf, p_buf}, + pc, elements); } static void ggml_vk_opt_step_adamw(ggml_backend_vk_context * ctx, vk_context& subctx, ggml_tensor * dst) { @@ -10044,45 +9723,9 @@ static void ggml_vk_topk_moe(ggml_backend_vk_context * ctx, vk_context& subctx, ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); - ggml_backend_vk_buffer_context * logits_buf_ctx = (ggml_backend_vk_buffer_context *)logits->buffer->context; - ggml_backend_vk_buffer_context * weights_buf_ctx = (ggml_backend_vk_buffer_context *)weights->buffer->context; - ggml_backend_vk_buffer_context * ids_buf_ctx = (ggml_backend_vk_buffer_context *)ids->buffer->context; - - vk_buffer d_logits = nullptr; - size_t logits_buf_offset = 0; - vk_buffer d_weights = nullptr; - size_t weights_buf_offset = 0; - vk_buffer d_ids = nullptr; - size_t ids_buf_offset = 0; - - bool logits_uma = false; - bool weights_uma = false; - bool ids_uma = false; - - if (ctx->device->uma) { - ggml_vk_host_get(ctx->device, logits->data, d_logits, logits_buf_offset); - ggml_vk_host_get(ctx->device, weights->data, d_weights, weights_buf_offset); - ggml_vk_host_get(ctx->device, ids->data, d_ids, ids_buf_offset); - logits_uma = d_logits != nullptr; - weights_uma = d_weights != nullptr; - ids_uma = d_ids != nullptr; - } - - if (!logits_uma) { - d_logits = logits_buf_ctx->dev_buffer; - logits_buf_offset = vk_tensor_offset(logits) + logits->view_offs; - GGML_ASSERT(d_logits != nullptr); - } - if (!weights_uma) { - d_weights = weights_buf_ctx->dev_buffer; - weights_buf_offset = vk_tensor_offset(weights) + weights->view_offs; - GGML_ASSERT(d_weights != nullptr); - } - if (!ids_uma) { - d_ids = ids_buf_ctx->dev_buffer; - ids_buf_offset = vk_tensor_offset(ids) + ids->view_offs; - GGML_ASSERT(d_ids != nullptr); - } + vk_subbuffer logits_buf = ggml_vk_tensor_subbuffer(ctx, logits); + vk_subbuffer weights_buf = ggml_vk_tensor_subbuffer(ctx, weights); + vk_subbuffer ids_buf = ggml_vk_tensor_subbuffer(ctx, ids); vk_op_topk_moe_push_constants pc {}; pc.n_rows = n_rows; @@ -10098,12 +9741,7 @@ static void ggml_vk_topk_moe(ggml_backend_vk_context * ctx, vk_context& subctx, const uint32_t rows_per_block = 4; std::array elements = { CEIL_DIV(n_rows, rows_per_block), 1, 1 }; - ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, - { - ggml_vk_subbuffer(ctx, d_logits, logits_buf_offset), - ggml_vk_subbuffer(ctx, d_weights, weights_buf_offset), - ggml_vk_subbuffer(ctx, d_ids, ids_buf_offset), - }, pc, elements); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, {logits_buf, weights_buf, ids_buf}, pc, elements); } static void ggml_vk_rope(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_cgraph * cgraph, int node_idx, bool backprop) { From 299f5d782c8ffd7195a1ed6a6d5561f759beb07e Mon Sep 17 00:00:00 2001 From: bssrdf Date: Fri, 7 Nov 2025 17:41:58 -0500 Subject: [PATCH 21/69] CUDA: properly handle nb00=nb02 case for cpy (#17081) --- ggml/src/ggml-cuda/cpy.cu | 4 +--- tests/test-backend-ops.cpp | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ggml/src/ggml-cuda/cpy.cu b/ggml/src/ggml-cuda/cpy.cu index 1dba60eb14..50612237c8 100644 --- a/ggml/src/ggml-cuda/cpy.cu +++ b/ggml/src/ggml-cuda/cpy.cu @@ -198,7 +198,7 @@ static void ggml_cpy_flt_cuda( if (transposed) { GGML_ASSERT(ne == ne00*ne01*ne02); // ne[3] is 1 assumed int ne00n, ne01n, ne02n; - if (nb00 < nb02) { + if (nb00 <= nb02) { // most likely safe to handle nb00 = nb02 case here ne00n = ne00; ne01n = ne01; ne02n = ne02; @@ -206,8 +206,6 @@ static void ggml_cpy_flt_cuda( ne00n = ne00; ne01n = ne01*ne02; ne02n = 1; - } else { - GGML_ASSERT(false); } dim3 dimGrid( (ne01n + CUDA_CPY_TILE_DIM_2D - 1) / CUDA_CPY_TILE_DIM_2D, diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index bffd60f386..b9ae82eedd 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -6648,6 +6648,7 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_cpy(GGML_TYPE_F16, GGML_TYPE_F16, {256, 4, 1, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); test_cases.emplace_back(new test_cpy(GGML_TYPE_F32, GGML_TYPE_F32, {256, 4, 1, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); test_cases.emplace_back(new test_cpy(GGML_TYPE_BF16, GGML_TYPE_BF16, {256, 4, 1, 1}, {0, 0, 0, 0}, {0, 0, 0, 0}, true)); + test_cases.emplace_back(new test_cpy(GGML_TYPE_F32, GGML_TYPE_F32, {256, 1, 4, 1}, {1, 2, 0, 3}, {0, 0, 0, 0})); test_cases.emplace_back(new test_cont()); test_cases.emplace_back(new test_cont(GGML_TYPE_F32, {2, 1, 1 ,1})); From 647b960bd8017ee882d6633bc2e43e2ae82ee85c Mon Sep 17 00:00:00 2001 From: Reese Levine Date: Fri, 7 Nov 2025 19:27:20 -0800 Subject: [PATCH 22/69] ggml webgpu: faster matrix multiplication/matrix-vector multiplication (#17031) * Faster tensors (#8) Add fast matrix and matrix/vector multiplication. * Use map for shader replacements instead of pair of strings --- .github/workflows/build.yml | 18 +- ggml/src/ggml-webgpu/ggml-webgpu.cpp | 326 +++++++++++++++++- .../ggml-webgpu/wgsl-shaders/embed_wgsl.py | 9 +- .../wgsl-shaders/mul_mat.tmpl.wgsl | 10 +- .../wgsl-shaders/mul_mat_decls.tmpl | 97 ++++++ .../wgsl-shaders/mul_mat_reg_tile.tmpl.wgsl | 247 +++++++++++++ .../mul_mat_subgroup_matrix.tmpl.wgsl | 302 ++++++++++++++++ .../wgsl-shaders/mul_mat_vec.tmpl.wgsl | 267 ++++++++++++++ 8 files changed, 1247 insertions(+), 29 deletions(-) create mode 100644 ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl create mode 100644 ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_reg_tile.tmpl.wgsl create mode 100644 ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_subgroup_matrix.tmpl.wgsl create mode 100644 ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.tmpl.wgsl diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 15e1133095..36084c5507 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -161,15 +161,16 @@ jobs: - name: Dawn Dependency id: dawn-depends run: | - DAWN_VERSION="v1.0.0" + DAWN_VERSION="v2.0.0" DAWN_OWNER="reeselevine" DAWN_REPO="dawn" - DAWN_ASSET_NAME="Dawn-a1a6b45cced25a3b7f4fb491e0ae70796cc7f22b-macos-latest-Release.tar.gz" + DAWN_ASSET_NAME="Dawn-5e9a4865b1635796ccc77dd30057f2b4002a1355-macos-latest-Release.zip" echo "Fetching release asset from https://github.com/${DAWN_OWNER}/${DAWN_REPO}/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}" - curl -L -o artifact.tar.gz \ + curl -L -o artifact.zip \ "https://github.com/${DAWN_OWNER}/${DAWN_REPO}/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}" mkdir dawn - tar -xvf artifact.tar.gz -C dawn --strip-components=1 + unzip artifact.zip + tar -xvf Dawn-5e9a4865b1635796ccc77dd30057f2b4002a1355-macos-latest-Release.tar.gz -C dawn --strip-components=1 - name: Build id: cmake_build @@ -521,15 +522,16 @@ jobs: id: dawn-depends run: | sudo apt-get install -y libxrandr-dev libxinerama-dev libxcursor-dev mesa-common-dev libx11-xcb-dev libxi-dev - DAWN_VERSION="v1.0.0" + DAWN_VERSION="v2.0.0" DAWN_OWNER="reeselevine" DAWN_REPO="dawn" - DAWN_ASSET_NAME="Dawn-a1a6b45cced25a3b7f4fb491e0ae70796cc7f22b-ubuntu-latest-Release.tar.gz" + DAWN_ASSET_NAME="Dawn-5e9a4865b1635796ccc77dd30057f2b4002a1355-ubuntu-latest-Release.zip" echo "Fetching release asset from https://github.com/${DAWN_OWNER}/${DAWN_REPO}/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}" - curl -L -o artifact.tar.gz \ + curl -L -o artifact.zip \ "https://github.com/${DAWN_OWNER}/${DAWN_REPO}/releases/download/${DAWN_VERSION}/${DAWN_ASSET_NAME}" mkdir dawn - tar -xvf artifact.tar.gz -C dawn --strip-components=1 + unzip artifact.zip + tar -xvf Dawn-5e9a4865b1635796ccc77dd30057f2b4002a1355-ubuntu-latest-Release.tar.gz -C dawn --strip-components=1 - name: Build id: cmake_build diff --git a/ggml/src/ggml-webgpu/ggml-webgpu.cpp b/ggml/src/ggml-webgpu/ggml-webgpu.cpp index 1a15756731..9e8cbc477e 100644 --- a/ggml/src/ggml-webgpu/ggml-webgpu.cpp +++ b/ggml/src/ggml-webgpu/ggml-webgpu.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -73,6 +74,30 @@ // For operations which process a row in parallel, this seems like a reasonable default #define WEBGPU_ROW_SPLIT_WG_SIZE 64 +// Matrix multiplication parameters + +// Register tiling parameters +#define WEBGPU_MUL_MAT_TILE_M 8 +#define WEBGPU_MUL_MAT_TILE_N 8 +#define WEBGPU_MUL_MAT_WG_SIZE_M 8 +#define WEBGPU_MUL_MAT_WG_SIZE_N 8 +#define WEBGPU_MUL_MAT_TILE_K 32 + +// Subgroup matrix parameters +// The number of subgroups in the M dimension +#define WEBGPU_MUL_MAT_SUBGROUP_M 2 +// The number of subgroups in the N dimension +#define WEBGPU_MUL_MAT_SUBGROUP_N 2 +// The number of subgroup matrices each subgroup accumulates over +#define WEBGPU_MUL_MAT_SUBGROUP_MATRIX_M 4 +#define WEBGPU_MUL_MAT_SUBGROUP_MATRIX_N 2 + +// Matrix-vector multiplication parameters +#define WEBGPU_MUL_MAT_VEC_WG_SIZE 256 +// Must be multiple of 4 to work with vectorized paths, and must divide mul_mat_vec wg size +#define WEBGPU_MUL_MAT_VEC_OUTPUTS_PER_WG 64 +#define WEBGPU_MUL_MAT_VEC_TILE_K 256 + /* End Constants */ // This is a "fake" base pointer, since WebGPU buffers do not have pointers to their locations. @@ -236,6 +261,10 @@ struct webgpu_context_struct { wgpu::Queue queue; wgpu::Limits limits; + bool supports_subgroup_matrix = false; + uint32_t subgroup_size; + wgpu::SubgroupMatrixConfig subgroup_matrix_config; + // Separate this out from limits since on some Metal systems, the limit returned by // querying the limits is higher than the actual allowed maximum. uint32_t max_wg_size_x; @@ -247,6 +276,11 @@ struct webgpu_context_struct { webgpu_buf_pool set_rows_error_buf_pool; webgpu_pipeline memset_pipeline; + + std::map>> mul_mat_pipelines; // src0_type, src1_type, vectorized + std::map>> + mul_mat_vec_pipelines; // src0_type, src1_type, vectorized + webgpu_pipeline mul_mat_pipeline[30][2]; webgpu_pipeline set_rows_pipeline[1][2]; // dst->type, vectorized webgpu_pipeline get_rows_pipeline[30]; @@ -321,6 +355,25 @@ struct ggml_backend_webgpu_buffer_context { /* WebGPU object initializations */ +// Process a WGSL shader string, replacing tokens of the form {{KEY}} with +// the corresponding values provided in `repls`. +static std::string ggml_webgpu_process_shader_repls(const char * src, + const std::map & repls) { + if (!src) { + return std::string(); + } + std::string s = src; + for (const auto & kv : repls) { + std::string token = "{{" + kv.first + "}}"; + size_t pos = 0; + while ((pos = s.find(token, pos)) != std::string::npos) { + s.replace(pos, token.length(), kv.second); + pos += kv.second.length(); + } + } + return s; +} + static void ggml_webgpu_create_pipeline(wgpu::Device & device, webgpu_pipeline & pipeline, const char * shader_code, @@ -346,6 +399,30 @@ static void ggml_webgpu_create_pipeline(wgpu::Device & pipeline = { device.CreateComputePipeline(&pipeline_desc), label }; } +static webgpu_pipeline ggml_webgpu_create_pipeline2(wgpu::Device & device, + const char * shader_code, + const char * label, + const std::vector & constants = {}) { + wgpu::ShaderSourceWGSL shader_source; + shader_source.code = shader_code; + + wgpu::ShaderModuleDescriptor shader_desc; + shader_desc.nextInChain = &shader_source; + + wgpu::ShaderModule shader_module = device.CreateShaderModule(&shader_desc); + + wgpu::ComputePipelineDescriptor pipeline_desc; + pipeline_desc.label = label; + pipeline_desc.compute.module = shader_module; + pipeline_desc.compute.entryPoint = "main"; // Entry point in the WGSL code + pipeline_desc.layout = nullptr; // nullptr means auto layout + if (constants.size() > 0) { + pipeline_desc.compute.constants = constants.data(); + pipeline_desc.compute.constantCount = constants.size(); + } + return { device.CreateComputePipeline(&pipeline_desc), label }; +} + static void ggml_webgpu_create_buffer(wgpu::Device & device, wgpu::Buffer & buffer, size_t size, @@ -512,6 +589,7 @@ static webgpu_command ggml_backend_webgpu_build(webgpu_context & std::vector params, std::vector bind_group_entries, uint32_t wg_x, + uint32_t wg_y = 1, std::optional set_rows_error_bufs = std::nullopt) { webgpu_pool_bufs params_bufs = ctx->param_buf_pool.alloc_bufs(); @@ -557,7 +635,7 @@ static webgpu_command ggml_backend_webgpu_build(webgpu_context & #endif pass.SetPipeline(pipeline.pipeline); pass.SetBindGroup(0, bind_group); - pass.DispatchWorkgroups(wg_x, 1, 1); + pass.DispatchWorkgroups(wg_x, wg_y, 1); pass.End(); #ifdef GGML_WEBGPU_GPU_PROFILE @@ -779,7 +857,7 @@ static std::optional ggml_webgpu_set_rows(webgpu_context & ctx, uint32_t wg_x = (threads + max_wg_size - 1) / max_wg_size; - return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x, error_bufs); + return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x, 1, error_bufs); } static webgpu_command ggml_webgpu_get_rows(webgpu_context & ctx, @@ -835,8 +913,8 @@ static webgpu_command ggml_webgpu_mul_mat(webgpu_context & ctx, (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src0) / ggml_type_size(src0->type)), (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src1) / ggml_type_size(src1->type)), (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, dst) / ggml_type_size(dst->type)), - (uint32_t) dst->ne[1], // number of rows in result (M) - (uint32_t) dst->ne[0], // number of columns in result (N) + (uint32_t) dst->ne[0], // number of rows in result (M, transposed) + (uint32_t) dst->ne[1], // number of columns in result (N) (uint32_t) src0->ne[0], // number of columns in src0/src1 (K) (uint32_t) (src0->nb[1] / ggml_type_size(src0->type)), // stride (elements/blocks) of src0 in dimension 1 (uint32_t) (src1->nb[1] / ggml_type_size(src1->type)), // stride (elements/blocks) of src1 in dimension 1 @@ -865,9 +943,67 @@ static webgpu_command ggml_webgpu_mul_mat(webgpu_context & ctx, .size = ggml_webgpu_tensor_binding_size(ctx, dst) }, }; + webgpu_pipeline pipeline = ctx->mul_mat_pipeline[src0->type][src1->type]; + uint32_t wg_x = (dst->ne[0] * dst->ne[1] * dst->ne[2] * dst->ne[3] + WEBGPU_MUL_MAT_WG_SIZE - 1) / WEBGPU_MUL_MAT_WG_SIZE; - return ggml_backend_webgpu_build(ctx, ctx->mul_mat_pipeline[src0->type][src1->type], params, entries, wg_x); + uint32_t wg_y = 1; + + bool use_fast = false; + switch (src1->type) { + case GGML_TYPE_F16: + use_fast = (src0->type == GGML_TYPE_F16); + break; + case GGML_TYPE_F32: + switch (src0->type) { + case GGML_TYPE_F32: + case GGML_TYPE_F16: + case GGML_TYPE_Q4_0: + use_fast = true; + break; + default: + break; + } + break; + default: + break; + } + + if (use_fast) { + int vectorized = src0->ne[0] % 4 == 0 && dst->ne[0] % 4 == 0 && dst->ne[1] % 4 == 0; + if (dst->ne[1] == 1) { + // We don't support vectorized mul_mat_vec for quantized types + vectorized = vectorized && (src0->type < 2); + pipeline = ctx->mul_mat_vec_pipelines[src0->type][src1->type][vectorized]; + uint32_t batches = dst->ne[2] * dst->ne[3]; + uint32_t output_groups = + (dst->ne[0] + WEBGPU_MUL_MAT_VEC_OUTPUTS_PER_WG - 1) / WEBGPU_MUL_MAT_VEC_OUTPUTS_PER_WG; + uint32_t total_wg = output_groups * batches; + wg_x = total_wg % ctx->limits.maxComputeWorkgroupsPerDimension; + wg_y = (total_wg + ctx->limits.maxComputeWorkgroupsPerDimension - 1) / + ctx->limits.maxComputeWorkgroupsPerDimension; + } else { + pipeline = ctx->mul_mat_pipelines[src0->type][src1->type][vectorized]; + uint32_t wg_m; + uint32_t wg_n; + if (ctx->supports_subgroup_matrix) { + // The total number of subgroups/workgroups needed per matrix. + uint32_t wg_m_sg_tile = + WEBGPU_MUL_MAT_SUBGROUP_M * WEBGPU_MUL_MAT_SUBGROUP_MATRIX_M * ctx->subgroup_matrix_config.M; + wg_m = (dst->ne[0] + wg_m_sg_tile - 1) / wg_m_sg_tile; + uint32_t wg_n_sg_tile = + WEBGPU_MUL_MAT_SUBGROUP_N * WEBGPU_MUL_MAT_SUBGROUP_MATRIX_N * ctx->subgroup_matrix_config.N; + wg_n = (dst->ne[1] + wg_n_sg_tile - 1) / wg_n_sg_tile; + } else { + uint32_t tile_m_s = WEBGPU_MUL_MAT_TILE_M * WEBGPU_MUL_MAT_WG_SIZE_M; + uint32_t tile_n_s = WEBGPU_MUL_MAT_TILE_N * WEBGPU_MUL_MAT_WG_SIZE_N; + wg_m = (dst->ne[0] + tile_m_s - 1) / tile_m_s; + wg_n = (dst->ne[1] + tile_n_s - 1) / tile_n_s; + } + wg_x = wg_m * wg_n * dst->ne[2] * dst->ne[3]; + } + } + return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x, wg_y); } static webgpu_command ggml_webgpu_binary_op(webgpu_context & ctx, @@ -1583,12 +1719,6 @@ static void ggml_webgpu_init_memset_pipeline(webgpu_context & webgpu_ctx) { } static void ggml_webgpu_init_mul_mat_pipeline(webgpu_context & webgpu_ctx) { - ggml_webgpu_create_pipeline(webgpu_ctx->device, webgpu_ctx->mul_mat_pipeline[GGML_TYPE_F32][GGML_TYPE_F32], - wgsl_mul_mat_f32_f32, "mul_mat_f32_f32"); - ggml_webgpu_create_pipeline(webgpu_ctx->device, webgpu_ctx->mul_mat_pipeline[GGML_TYPE_F16][GGML_TYPE_F16], - wgsl_mul_mat_f16_f16, "mul_mat_f16_f16"); - ggml_webgpu_create_pipeline(webgpu_ctx->device, webgpu_ctx->mul_mat_pipeline[GGML_TYPE_F16][GGML_TYPE_F32], - wgsl_mul_mat_f16_f32, "mul_mat_f16_f32"); ggml_webgpu_create_pipeline(webgpu_ctx->device, webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q4_0][GGML_TYPE_F32], wgsl_mul_mat_q4_0_f32, "mul_mat_q4_0_f32"); ggml_webgpu_create_pipeline(webgpu_ctx->device, webgpu_ctx->mul_mat_pipeline[GGML_TYPE_Q4_1][GGML_TYPE_F32], @@ -1627,6 +1757,136 @@ static void ggml_webgpu_init_mul_mat_pipeline(webgpu_context & webgpu_ctx) { wgsl_mul_mat_iq4_nl_f32, "mul_mat_iq4_nl_f32"); ggml_webgpu_create_pipeline(webgpu_ctx->device, webgpu_ctx->mul_mat_pipeline[GGML_TYPE_IQ4_XS][GGML_TYPE_F32], wgsl_mul_mat_iq4_xs_f32, "mul_mat_iq4_xs_f32"); + + if (webgpu_ctx->supports_subgroup_matrix) { + std::map sg_matrix_repls; + sg_matrix_repls["WEBGPU_MAX_SUBGROUP_SIZE"] = std::to_string(webgpu_ctx->subgroup_size); + sg_matrix_repls["WEBGPU_TILE_K"] = std::to_string(WEBGPU_MUL_MAT_TILE_K); + sg_matrix_repls["WEBGPU_SUBGROUP_M"] = std::to_string(WEBGPU_MUL_MAT_SUBGROUP_M); + sg_matrix_repls["WEBGPU_SUBGROUP_N"] = std::to_string(WEBGPU_MUL_MAT_SUBGROUP_N); + sg_matrix_repls["WEBGPU_SUBGROUP_MATRIX_M"] = std::to_string(WEBGPU_MUL_MAT_SUBGROUP_MATRIX_M); + sg_matrix_repls["WEBGPU_SUBGROUP_MATRIX_N"] = std::to_string(WEBGPU_MUL_MAT_SUBGROUP_MATRIX_N); + sg_matrix_repls["WEBGPU_SG_MAT_M_SIZE"] = std::to_string(webgpu_ctx->subgroup_matrix_config.M); + sg_matrix_repls["WEBGPU_SG_MAT_N_SIZE"] = std::to_string(webgpu_ctx->subgroup_matrix_config.N); + sg_matrix_repls["WEBGPU_SG_MAT_K_SIZE"] = std::to_string(webgpu_ctx->subgroup_matrix_config.K); + + std::string proc_mul_mat_subgroup_matrix_f32_f32 = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_subgroup_matrix_f32_f32, sg_matrix_repls); + std::string proc_mul_mat_subgroup_matrix_f32_f32_vec = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_subgroup_matrix_f32_f32_vec, sg_matrix_repls); + std::string proc_mul_mat_subgroup_matrix_f16_f32 = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_subgroup_matrix_f16_f32, sg_matrix_repls); + std::string proc_mul_mat_subgroup_matrix_f16_f32_vec = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_subgroup_matrix_f16_f32_vec, sg_matrix_repls); + std::string proc_mul_mat_subgroup_matrix_f16_f16 = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_subgroup_matrix_f16_f16, sg_matrix_repls); + std::string proc_mul_mat_subgroup_matrix_f16_f16_vec = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_subgroup_matrix_f16_f16_vec, sg_matrix_repls); + std::string proc_mul_mat_subgroup_matrix_q4_0_f32 = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_subgroup_matrix_q4_0_f32, sg_matrix_repls); + std::string proc_mul_mat_subgroup_matrix_q4_0_f32_vec = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_subgroup_matrix_q4_0_f32_vec, sg_matrix_repls); + + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F32][GGML_TYPE_F32][0] = ggml_webgpu_create_pipeline2( + webgpu_ctx->device, proc_mul_mat_subgroup_matrix_f32_f32.c_str(), "mul_mat_subgroup_matrix_f32_f32"); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F32][GGML_TYPE_F32][1] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_subgroup_matrix_f32_f32_vec.c_str(), + "mul_mat_subgroup_matrix_f32_f32_vec"); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F16][GGML_TYPE_F32][0] = ggml_webgpu_create_pipeline2( + webgpu_ctx->device, proc_mul_mat_subgroup_matrix_f16_f32.c_str(), "mul_mat_subgroup_matrix_f16_f32"); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F16][GGML_TYPE_F32][1] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_subgroup_matrix_f16_f32_vec.c_str(), + "mul_mat_subgroup_matrix_f16_f32_vec"); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F16][GGML_TYPE_F16][0] = ggml_webgpu_create_pipeline2( + webgpu_ctx->device, proc_mul_mat_subgroup_matrix_f16_f16.c_str(), "mul_mat_subgroup_matrix_f16_f16"); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F16][GGML_TYPE_F16][1] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_subgroup_matrix_f16_f16_vec.c_str(), + "mul_mat_subgroup_matrix_f16_f16_vec"); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_Q4_0][GGML_TYPE_F32][0] = ggml_webgpu_create_pipeline2( + webgpu_ctx->device, proc_mul_mat_subgroup_matrix_q4_0_f32.c_str(), "mul_mat_subgroup_matrix_q4_0_f32"); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_Q4_0][GGML_TYPE_F32][1] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_subgroup_matrix_q4_0_f32_vec.c_str(), + "mul_mat_subgroup_matrix_q4_0_f32_vec"); + } else { + std::vector mul_mat_reg_tile_constants(3); + mul_mat_reg_tile_constants[0].key = "TILE_K"; + mul_mat_reg_tile_constants[0].value = WEBGPU_MUL_MAT_TILE_K; + mul_mat_reg_tile_constants[1].key = "WORKGROUP_SIZE_M"; + mul_mat_reg_tile_constants[1].value = WEBGPU_MUL_MAT_WG_SIZE_M; + mul_mat_reg_tile_constants[2].key = "WORKGROUP_SIZE_N"; + mul_mat_reg_tile_constants[2].value = WEBGPU_MUL_MAT_WG_SIZE_N; + + std::map reg_repls; + reg_repls["WEBGPU_TILE_M"] = std::to_string(WEBGPU_MUL_MAT_TILE_M); + reg_repls["WEBGPU_TILE_N"] = std::to_string(WEBGPU_MUL_MAT_TILE_N); + + // Process each reg-tile shader with tile replacements. + // Keep the processed strings in-scope so .c_str() remains valid. + std::string proc_mul_mat_reg_tile_f32_f32 = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_reg_tile_f32_f32, reg_repls); + std::string proc_mul_mat_reg_tile_f32_f32_vec = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_reg_tile_f32_f32_vec, reg_repls); + std::string proc_mul_mat_reg_tile_f16_f32 = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_reg_tile_f16_f32, reg_repls); + std::string proc_mul_mat_reg_tile_f16_f32_vec = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_reg_tile_f16_f32_vec, reg_repls); + std::string proc_mul_mat_reg_tile_f16_f16 = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_reg_tile_f16_f16, reg_repls); + std::string proc_mul_mat_reg_tile_f16_f16_vec = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_reg_tile_f16_f16_vec, reg_repls); + std::string proc_mul_mat_reg_tile_q4_0_f32 = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_reg_tile_q4_0_f32, reg_repls); + std::string proc_mul_mat_reg_tile_q4_0_f32_vec = + ggml_webgpu_process_shader_repls(wgsl_mul_mat_reg_tile_q4_0_f32_vec, reg_repls); + + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F32][GGML_TYPE_F32][0] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_reg_tile_f32_f32.c_str(), + "mul_mat_reg_tile_f32_f32", mul_mat_reg_tile_constants); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F32][GGML_TYPE_F32][1] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_reg_tile_f32_f32_vec.c_str(), + "mul_mat_reg_tile_f32_f32_vec", mul_mat_reg_tile_constants); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F16][GGML_TYPE_F32][0] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_reg_tile_f16_f32.c_str(), + "mul_mat_reg_tile_f16_f32", mul_mat_reg_tile_constants); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F16][GGML_TYPE_F32][1] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_reg_tile_f16_f32_vec.c_str(), + "mul_mat_reg_tile_f16_f32_vec", mul_mat_reg_tile_constants); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F16][GGML_TYPE_F16][0] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_reg_tile_f16_f16.c_str(), + "mul_mat_reg_tile_f16_f16", mul_mat_reg_tile_constants); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_F16][GGML_TYPE_F16][1] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_reg_tile_f16_f16_vec.c_str(), + "mul_mat_reg_tile_f16_f16_vec", mul_mat_reg_tile_constants); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_Q4_0][GGML_TYPE_F32][0] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_reg_tile_q4_0_f32.c_str(), + "mul_mat_reg_tile_q4_0_f32", mul_mat_reg_tile_constants); + webgpu_ctx->mul_mat_pipelines[GGML_TYPE_Q4_0][GGML_TYPE_F32][1] = + ggml_webgpu_create_pipeline2(webgpu_ctx->device, proc_mul_mat_reg_tile_q4_0_f32_vec.c_str(), + "mul_mat_reg_tile_q4_0_f32_vec", mul_mat_reg_tile_constants); + } + + std::vector mul_mat_vec_constants(3); + mul_mat_vec_constants[0].key = "WORKGROUP_SIZE"; + mul_mat_vec_constants[0].value = WEBGPU_MUL_MAT_VEC_WG_SIZE; + mul_mat_vec_constants[1].key = "TILE_K"; + mul_mat_vec_constants[1].value = WEBGPU_MUL_MAT_VEC_TILE_K; + mul_mat_vec_constants[2].key = "OUTPUTS_PER_WG"; + mul_mat_vec_constants[2].value = WEBGPU_MUL_MAT_VEC_OUTPUTS_PER_WG; + + webgpu_ctx->mul_mat_vec_pipelines[GGML_TYPE_F32][GGML_TYPE_F32][0] = ggml_webgpu_create_pipeline2( + webgpu_ctx->device, wgsl_mul_mat_vec_f32_f32, "mul_mat_vec_f32_f32", mul_mat_vec_constants); + webgpu_ctx->mul_mat_vec_pipelines[GGML_TYPE_F32][GGML_TYPE_F32][1] = ggml_webgpu_create_pipeline2( + webgpu_ctx->device, wgsl_mul_mat_vec_f32_f32_vec, "mul_mat_vec_f32_f32_vec", mul_mat_vec_constants); + webgpu_ctx->mul_mat_vec_pipelines[GGML_TYPE_F16][GGML_TYPE_F32][0] = ggml_webgpu_create_pipeline2( + webgpu_ctx->device, wgsl_mul_mat_vec_f16_f32, "mul_mat_vec_f16_f32", mul_mat_vec_constants); + webgpu_ctx->mul_mat_vec_pipelines[GGML_TYPE_F16][GGML_TYPE_F32][1] = ggml_webgpu_create_pipeline2( + webgpu_ctx->device, wgsl_mul_mat_vec_f16_f32_vec, "mul_mat_vec_f16_f32_vec", mul_mat_vec_constants); + webgpu_ctx->mul_mat_vec_pipelines[GGML_TYPE_F16][GGML_TYPE_F16][0] = ggml_webgpu_create_pipeline2( + webgpu_ctx->device, wgsl_mul_mat_vec_f16_f16, "mul_mat_vec_f16_f16", mul_mat_vec_constants); + webgpu_ctx->mul_mat_vec_pipelines[GGML_TYPE_F16][GGML_TYPE_F16][1] = ggml_webgpu_create_pipeline2( + webgpu_ctx->device, wgsl_mul_mat_vec_f16_f16_vec, "mul_mat_vec_f16_f16_vec", mul_mat_vec_constants); + webgpu_ctx->mul_mat_vec_pipelines[GGML_TYPE_Q4_0][GGML_TYPE_F32][0] = ggml_webgpu_create_pipeline2( + webgpu_ctx->device, wgsl_mul_mat_vec_q4_0_f32, "mul_mat_vec_q4_0_f32", mul_mat_vec_constants); } static void ggml_webgpu_init_set_rows_pipeline(webgpu_context & webgpu_ctx) { @@ -2124,7 +2384,13 @@ static ggml_backend_dev_t ggml_backend_webgpu_reg_get_device(ggml_backend_reg_t webgpu_context ctx = reg_ctx->webgpu_ctx; - wgpu::RequestAdapterOptions options = {}; + // TODO: track need for these toggles: https://issues.chromium.org/issues/42251215 + const char * const adapterEnabledToggles[] = { "vulkan_enable_f16_on_nvidia", "use_vulkan_memory_model" }; + wgpu::DawnTogglesDescriptor adapterTogglesDesc; + adapterTogglesDesc.enabledToggles = adapterEnabledToggles; + adapterTogglesDesc.enabledToggleCount = 2; + wgpu::RequestAdapterOptions options = {}; + options.nextInChain = &adapterTogglesDesc; ctx->instance.WaitAny(ctx->instance.RequestAdapter( &options, wgpu::CallbackMode::AllowSpontaneous, [&ctx](wgpu::RequestAdapterStatus status, wgpu::Adapter adapter, const char * message) { @@ -2140,12 +2406,46 @@ static ggml_backend_dev_t ggml_backend_webgpu_reg_get_device(ggml_backend_reg_t ctx->adapter.GetLimits(&ctx->limits); ctx->max_wg_size_x = 288; // default value - wgpu::AdapterInfo info{}; + wgpu::AdapterInfo info{}; + wgpu::AdapterPropertiesSubgroupMatrixConfigs subgroup_matrix_configs{}; + if (ctx->adapter.HasFeature(wgpu::FeatureName::ChromiumExperimentalSubgroupMatrix)) { + info.nextInChain = &subgroup_matrix_configs; + } ctx->adapter.GetInfo(&info); + wgpu::SupportedFeatures features; + ctx->adapter.GetFeatures(&features); + // we require f16 support + GGML_ASSERT(ctx->adapter.HasFeature(wgpu::FeatureName::ShaderF16)); + + // Only support square f16 matrices of size 8 or 16 for now + bool valid_subgroup_matrix_config = false; + if (ctx->adapter.HasFeature(wgpu::FeatureName::ChromiumExperimentalSubgroupMatrix)) { + for (size_t i = 0; i < subgroup_matrix_configs.configCount; i++) { + const wgpu::SubgroupMatrixConfig config = subgroup_matrix_configs.configs[i]; + if (config.M == config.N && config.N == config.K && (config.K == 8 || config.K == 16) && + config.componentType == wgpu::SubgroupMatrixComponentType::F16 && + config.resultComponentType == wgpu::SubgroupMatrixComponentType::F16) { + ctx->subgroup_matrix_config = config; + valid_subgroup_matrix_config = true; + break; + } + } + } + + // For subgroup matrix code to be the most efficient, we would like the subgroup size to be consistent and accurate. + // Unfortunately, that is not possible, so we use the maximum subgroup size reported by the adapter. + ctx->subgroup_size = info.subgroupMaxSize; + ctx->supports_subgroup_matrix = valid_subgroup_matrix_config; + // Initialize device std::vector required_features = { wgpu::FeatureName::ShaderF16, wgpu::FeatureName::ImplicitDeviceSynchronization }; + if (ctx->supports_subgroup_matrix) { + required_features.push_back(wgpu::FeatureName::Subgroups); + required_features.push_back(wgpu::FeatureName::ChromiumExperimentalSubgroupMatrix); + } + #ifdef GGML_WEBGPU_GPU_PROFILE required_features.push_back(wgpu::FeatureName::TimestampQuery); #endif diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py b/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py index 251051eaec..ed8068d416 100755 --- a/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py +++ b/ggml/src/ggml-webgpu/wgsl-shaders/embed_wgsl.py @@ -72,9 +72,12 @@ def generate_variants(fname, input_dir, output_dir, outfile): except ValueError: decls_map = {} - with open(os.path.join(input_dir, "common_decls.tmpl"), "r", encoding="utf-8") as f: - common_decls = f.read() - decls_map.update(parse_decls(common_decls)) + for fname in sorted(os.listdir(input_dir)): + if fname.endswith(".tmpl"): + tmpl_path = os.path.join(input_dir, fname) + with open(tmpl_path, "r", encoding="utf-8") as f_tmpl: + decls = f_tmpl.read() + decls_map.update(parse_decls(decls)) shader_template = extract_block(text, "SHADER") for variant in variants: diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.tmpl.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.tmpl.wgsl index 141db9b39d..0f8e6e5ac3 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.tmpl.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat.tmpl.wgsl @@ -864,8 +864,8 @@ struct MulMatParams { broadcast3: u32 }; -@group(0) @binding(0) var src0: array<{{SRC0_TYPE}}>; // N rows, K columns -@group(0) @binding(1) var src1: array<{{SRC1_TYPE}}>; // M rows, K columns (transposed) +@group(0) @binding(0) var src0: array<{{SRC0_TYPE}}>; // M rows, K columns +@group(0) @binding(1) var src1: array<{{SRC1_TYPE}}>; // K rows, N columns (transposed) @group(0) @binding(2) var dst: array; // M rows, N columns @group(0) @binding(3) var params: MulMatParams; @@ -891,8 +891,8 @@ fn main(@builtin(global_invocation_id) global_id: vec3) { let dst2_rem = dst3_rem % dst2_stride; - let row = dst2_rem / params.n; // output row - let col = dst2_rem % params.n; // output column + let row = dst2_rem / params.m; // output row + let col = dst2_rem % params.m; // output column let src0_idx_base = params.offset_src0 + src03_idx * params.stride_03 + src02_idx * params.stride_02 + col * params.stride_01; let src1_idx_base = params.offset_src1 + src13_idx * params.stride_13 + src12_idx * params.stride_12 + row * params.stride_11; @@ -901,7 +901,7 @@ fn main(@builtin(global_invocation_id) global_id: vec3) { for (var i: u32 = 0u; i < params.k/{{BLOCK_SIZE}}; i = i + 1u) { sum += multiply_add(src0_idx_base, src1_idx_base, i); } - dst[params.offset_dst + dst3_idx * dst3_stride + dst2_idx * dst2_stride + row * params.n + col] = sum; + dst[params.offset_dst + dst3_idx * dst3_stride + dst2_idx * dst2_stride + row * params.m + col] = sum; } #end(SHADER) diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl new file mode 100644 index 0000000000..109ff8d615 --- /dev/null +++ b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl @@ -0,0 +1,97 @@ +#decl(SHMEM_VEC) +fn store_shmem(val: vec4, idx: u32) { + shmem[idx] = val.x; + shmem[idx + 1] = val.y; + shmem[idx + 2] = val.z; + shmem[idx + 3] = val.w; +} +#enddecl(SHMEM_VEC) + +#decl(SHMEM_SCALAR) +fn store_shmem(val: f16, idx: u32) { + shmem[idx] = val; +} +#enddecl(SHMEM_SCALAR) + +#decl(INIT_SRC0_SHMEM_FLOAT) + +fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { + for (var elem_idx = thread_id * {{VEC_SIZE}}; elem_idx < TILE_SRC0_SHMEM; elem_idx += TOTAL_WORKGROUP_SIZE * {{VEC_SIZE}}) { + let tile_m = elem_idx / TILE_K; + let tile_k = elem_idx % TILE_K; + let global_m = offset_m + tile_m; + let global_k = k_outer + tile_k; + let src0_idx = batch_offset + global_m * params.stride_01 + global_k; + let src0_val = select( // taking a slight performance hit to avoid oob + {{SRC0_TYPE}}(0.0), + src0[src0_idx/{{VEC_SIZE}}], + global_m < params.m && global_k < params.k); + store_shmem({{SHMEM_TYPE}}(src0_val), elem_idx); + } +} + +#enddecl(INIT_SRC0_SHMEM_FLOAT) + +#decl(INIT_SRC1_SHMEM) + +fn init_shmem_src1(thread_id: u32, batch_offset: u32, offset_n: u32, k_outer: u32) { + for (var elem_idx = thread_id * {{VEC_SIZE}}; elem_idx < TILE_SRC1_SHMEM; elem_idx += TOTAL_WORKGROUP_SIZE * {{VEC_SIZE}}) { + let tile_n = elem_idx / TILE_K; + let tile_k = elem_idx % TILE_K; + let global_n = offset_n + tile_n; + let global_k = k_outer + tile_k; + let src1_idx = batch_offset + global_n * params.stride_11 + global_k; + let src1_val = select( + {{SRC1_TYPE}}(0.0), + src1[src1_idx/{{VEC_SIZE}}], + global_n < params.n && global_k < params.k); + store_shmem({{SHMEM_TYPE}}(src1_val), TILE_SRC0_SHMEM + elem_idx); + } +} + +#enddecl(INIT_SRC1_SHMEM) + +#decl(INIT_SRC0_SHMEM_Q4_0) + +const BLOCK_SIZE = 32u; +// the number of blocks per k-tile. Note that this currently only works if TILE_K is a multiple of BLOCK_SIZE, which may need to be rethought for larger quantized types. +override BLOCKS_K = TILE_K/BLOCK_SIZE; +const NQ = 16u; +const F16_PER_BLOCK = 9u; // 1 scale + 8x4 packed weights +const WEIGHTS_PER_F16 = 4u; // 4 weights per f16 +const F16_PER_THREAD = NQ / WEIGHTS_PER_F16; + +fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { + for (var i = thread_id * NQ; i < TILE_SRC0_SHMEM; i += TOTAL_WORKGROUP_SIZE * NQ) { + let blck_idx = i / BLOCK_SIZE; + let block_offset = (i % BLOCK_SIZE) / WEIGHTS_PER_F16; + let shmem_idx = blck_idx * BLOCK_SIZE + block_offset * 2u; + + let tile_m = blck_idx / BLOCKS_K; + let global_m = offset_m + tile_m; + let block_k = blck_idx % BLOCKS_K; + let global_k = k_outer / BLOCK_SIZE + block_k; + + if (global_m < params.m && global_k < params.k / BLOCK_SIZE) { + let src0_idx = batch_offset + global_m * params.stride_01 + global_k; + let scale_idx = src0_idx * F16_PER_BLOCK; + let d = src0[scale_idx]; + + for (var j = 0u; j < F16_PER_THREAD; j += 2) { + let q_0 = src0[scale_idx + 1u + block_offset + j]; + let q_1 = src0[scale_idx + 1u + block_offset + j + 1]; + + let q_packed = bitcast(vec2(q_0, q_1)); + for (var k = 0u; k < 4u; k++) { + let q_byte = get_byte(q_packed, k); + let q_hi = (f16((q_byte >> 4) & 0xF) - 8.0) * d; + let q_lo = (f16(q_byte & 0xF) - 8.0) * d; + shmem[shmem_idx + j * 2 + k] = q_lo; + shmem[shmem_idx + j * 2 + k + 16u] = q_hi; + } + } + } + } +} + +#enddecl(INIT_SRC0_SHMEM_Q4_0) diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_reg_tile.tmpl.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_reg_tile.tmpl.wgsl new file mode 100644 index 0000000000..6b1dd26cd9 --- /dev/null +++ b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_reg_tile.tmpl.wgsl @@ -0,0 +1,247 @@ +#define(VARIANTS) +[ + { + "SHADER_SUFFIX": "f32_f32_vec", + "REPLS": { + "SRC0_TYPE" : "vec4", + "SRC1_TYPE" : "vec4", + "DST_TYPE" : "vec4", + "SHMEM_TYPE" : "vec4", + "VEC_SIZE" : 4, + }, + "DECLS": ["VEC", "SHMEM_VEC", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "f32_f32", + "REPLS": { + "SRC0_TYPE" : "f32", + "SRC1_TYPE" : "f32", + "DST_TYPE" : "f32", + "SHMEM_TYPE" : "f16", + "VEC_SIZE" : 1, + }, + "DECLS": ["SCALAR", "SHMEM_SCALAR", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "f16_f32_vec", + "REPLS": { + "SRC0_TYPE" : "vec4", + "SRC1_TYPE" : "vec4", + "DST_TYPE" : "vec4", + "SHMEM_TYPE" : "vec4", + "VEC_SIZE" : 4, + }, + "DECLS": ["VEC", "SHMEM_VEC", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "f16_f32", + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "f32", + "DST_TYPE" : "f32", + "SHMEM_TYPE" : "f16", + "VEC_SIZE" : 1, + }, + "DECLS": ["SCALAR", "SHMEM_SCALAR", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "f16_f16_vec", + "REPLS": { + "SRC0_TYPE" : "vec4", + "SRC1_TYPE" : "vec4", + "DST_TYPE" : "vec4", + "SHMEM_TYPE" : "vec4", + "VEC_SIZE" : 4, + }, + "DECLS": ["VEC", "SHMEM_VEC", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "f16_f16", + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "f16", + "DST_TYPE" : "f32", + "SHMEM_TYPE" : "f16", + "VEC_SIZE" : 1, + }, + "DECLS": ["SCALAR", "SHMEM_SCALAR", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "q4_0_f32_vec", + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "vec4", + "DST_TYPE" : "vec4", + "SHMEM_TYPE" : "vec4", + "VEC_SIZE" : 4, + }, + "DECLS": ["BYTE_HELPERS", "VEC", "SHMEM_VEC", "INIT_SRC0_SHMEM_Q4_0", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "q4_0_f32", + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "f32", + "DST_TYPE" : "f32", + "SHMEM_TYPE" : "f16", + "VEC_SIZE" : 1, + }, + "DECLS": ["BYTE_HELPERS", "SCALAR", "SHMEM_SCALAR", "INIT_SRC0_SHMEM_Q4_0", "INIT_SRC1_SHMEM"] + } +] + +#end(VARIANTS) + +#define(DECLS) + +#decl(VEC) +fn store_val(acc: array, TILE_M>, tn: u32, tm: u32) -> vec4 { + return vec4(f32(acc[tm][tn]), f32(acc[tm + 1][tn]), f32(acc[tm + 2][tn]), f32(acc[tm + 3][tn])); +} +#enddecl(VEC) + +#decl(SCALAR) +fn store_val(acc: array, TILE_M>, tn: u32, tm: u32) -> f32 { + return f32(acc[tm][tn]); +} +#enddecl(SCALAR) + +#end(DECLS) + +#define(SHADER) +enable f16; + +struct MulMatParams { + offset_src0: u32, + offset_src1: u32, + offset_dst: u32, + m: u32, + n: u32, + k: u32, + stride_01: u32, + stride_11: u32, + stride_02: u32, + stride_12: u32, + stride_03: u32, + stride_13: u32, + bs02: u32, + bs03: u32, + broadcast2: u32, + broadcast3: u32 +}; + +@group(0) @binding(0) var src0: array<{{SRC0_TYPE}}>; // M rows, K columns +@group(0) @binding(1) var src1: array<{{SRC1_TYPE}}>; // K rows, N columns (transposed) +@group(0) @binding(2) var dst: array<{{DST_TYPE}}>; // M rows, N columns (transposed) + +@group(0) @binding(3) var params: MulMatParams; + +DECLS + +fn get_local_n(thread_id: u32) -> u32 { + return thread_id / WORKGROUP_SIZE_M; +} +fn get_local_m(thread_id: u32) -> u32 { + return thread_id % WORKGROUP_SIZE_M; +} + +// TILE_M must be multiple of 4 for vec4 loads +const TILE_M = {{WEBGPU_TILE_M}}u; +const TILE_N = {{WEBGPU_TILE_N}}u; + +override WORKGROUP_SIZE_M: u32; +override WORKGROUP_SIZE_N: u32; +override TILE_K: u32; + +override TOTAL_WORKGROUP_SIZE = WORKGROUP_SIZE_M * WORKGROUP_SIZE_N; +override TILE_SRC0_SHMEM = TILE_K * WORKGROUP_SIZE_M * TILE_M; +override TILE_SRC1_SHMEM = TILE_K * WORKGROUP_SIZE_N * TILE_N; + +var shmem: array; + +@compute @workgroup_size(TOTAL_WORKGROUP_SIZE) +fn main(@builtin(workgroup_id) wg_id: vec3, + @builtin(local_invocation_id) local_id: vec3) { + + let thread_id = local_id.x; + let local_m = get_local_m(thread_id); + let local_n = get_local_n(thread_id); + + let wg_n_count = (params.n + WORKGROUP_SIZE_N * TILE_N - 1u) / (WORKGROUP_SIZE_N * TILE_N); + let wg_m_count = (params.m + WORKGROUP_SIZE_M * TILE_M - 1u) / (WORKGROUP_SIZE_M * TILE_M); + let wg_per_matrix = wg_m_count * wg_n_count; + + let batch_idx = wg_id.x / wg_per_matrix; + + let wg_in_batch = wg_id.x % wg_per_matrix; + let wg_m = wg_in_batch % wg_m_count; + let wg_n = wg_in_batch / wg_m_count; + + let output_row_base = wg_m * WORKGROUP_SIZE_M * TILE_M + local_m * TILE_M; + let output_col_base = wg_n * WORKGROUP_SIZE_N * TILE_N + local_n * TILE_N; + + let dst2_stride = params.m * params.n; + let dst3_stride = dst2_stride * params.bs02 * params.broadcast2; + + let dst3_idx = batch_idx / (params.bs02 * params.broadcast2); + let src03_idx = dst3_idx / params.broadcast3; + let src13_idx = dst3_idx; + let dst2_idx = batch_idx % (params.bs02 * params.broadcast2); + let src02_idx = dst2_idx / params.broadcast2; + let src12_idx = dst2_idx; + + let src0_batch_offset = params.offset_src0 + src03_idx * params.stride_03 + src02_idx * params.stride_02; + let src1_batch_offset = params.offset_src1 + src13_idx * params.stride_13 + src12_idx * params.stride_12; + + let offset_m = wg_m * WORKGROUP_SIZE_M * TILE_M; + let offset_n = wg_n * WORKGROUP_SIZE_N * TILE_N; + + var acc: array, TILE_M>; + + for (var k_outer = 0u; k_outer < params.k; k_outer += TILE_K) { + + // see mul_mat_decls.tmpl + init_shmem_src0(thread_id, src0_batch_offset, offset_m, k_outer); + init_shmem_src1(thread_id, src1_batch_offset, offset_n, k_outer); + + workgroupBarrier(); + + let k_end = min(TILE_K, params.k - k_outer); + + for (var k_inner = 0u; k_inner < k_end; k_inner++) { + var src0_tile: array; + for (var tm = 0u; tm < TILE_M; tm++) { + let src0_m = local_m * TILE_M + tm; + let src0_idx = k_inner + src0_m * TILE_K; + src0_tile[tm] = shmem[src0_idx]; + } + for (var tn = 0u; tn < TILE_N; tn++) { + let src1_n = local_n * TILE_N + tn; + let src1_idx = src1_n * TILE_K + k_inner; + let src1_val = shmem[TILE_SRC0_SHMEM + src1_idx]; + for (var tm = 0u; tm < TILE_M; tm++) { + acc[tm][tn] += src0_tile[tm] * src1_val; + } + } + } + + workgroupBarrier(); + } + + let dst_batch_offset = params.offset_dst + dst3_idx * dst3_stride + dst2_idx * dst2_stride; + + for (var tn = 0u; tn < TILE_N; tn++) { + let global_col = output_col_base + tn; + if (global_col < params.n) { + for (var tm = 0u; tm < TILE_M; tm += {{VEC_SIZE}}) { + let global_row = output_row_base + tm; + if (global_row < params.m) { + let dst_idx = dst_batch_offset + global_col * params.m + global_row; + dst[dst_idx/{{VEC_SIZE}}] = store_val(acc, tn, tm); + } + } + } + } +} + +#end(SHADER) diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_subgroup_matrix.tmpl.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_subgroup_matrix.tmpl.wgsl new file mode 100644 index 0000000000..47c8ce36ab --- /dev/null +++ b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_subgroup_matrix.tmpl.wgsl @@ -0,0 +1,302 @@ +#define(VARIANTS) +[ + { + "SHADER_SUFFIX": "f32_f32_vec", + "REPLS": { + "SRC0_TYPE" : "vec4", + "SRC1_TYPE" : "vec4", + "DST_TYPE" : "vec4", + "SHMEM_TYPE" : "vec4", + "VEC_SIZE" : 4, + }, + "DECLS": ["VEC", "SHMEM_VEC", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "f32_f32", + "REPLS": { + "SRC0_TYPE" : "f32", + "SRC1_TYPE" : "f32", + "DST_TYPE" : "f32", + "SHMEM_TYPE" : "f16", + "VEC_SIZE" : 1, + }, + "DECLS": ["SCALAR", "SHMEM_SCALAR", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "f16_f32_vec", + "REPLS": { + "SRC0_TYPE" : "vec4", + "SRC1_TYPE" : "vec4", + "DST_TYPE" : "vec4", + "SHMEM_TYPE" : "vec4", + "VEC_SIZE" : 4, + }, + "DECLS": ["VEC", "SHMEM_VEC", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "f16_f32", + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "f32", + "DST_TYPE" : "f32", + "SHMEM_TYPE" : "f16", + "VEC_SIZE" : 1, + }, + "DECLS": ["SCALAR", "SHMEM_SCALAR", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "f16_f16_vec", + "REPLS": { + "SRC0_TYPE" : "vec4", + "SRC1_TYPE" : "vec4", + "DST_TYPE" : "vec4", + "SHMEM_TYPE" : "vec4", + "VEC_SIZE" : 4, + }, + "DECLS": ["VEC", "SHMEM_VEC", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "f16_f16", + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "f16", + "DST_TYPE" : "f32", + "SHMEM_TYPE" : "f16", + "VEC_SIZE" : 1, + }, + "DECLS": ["SCALAR", "SHMEM_SCALAR", "INIT_SRC0_SHMEM_FLOAT", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "q4_0_f32_vec", + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "vec4", + "DST_TYPE" : "vec4", + "SHMEM_TYPE" : "vec4", + "VEC_SIZE" : 4, + }, + "DECLS": ["BYTE_HELPERS", "VEC", "SHMEM_VEC", "INIT_SRC0_SHMEM_Q4_0", "INIT_SRC1_SHMEM"] + }, + { + "SHADER_SUFFIX": "q4_0_f32", + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "f32", + "DST_TYPE" : "f32", + "SHMEM_TYPE" : "f16", + "VEC_SIZE" : 1, + }, + "DECLS": ["BYTE_HELPERS", "SCALAR", "SHMEM_SCALAR", "INIT_SRC0_SHMEM_Q4_0", "INIT_SRC1_SHMEM"] + } +] + +#end(VARIANTS) + +#define(DECLS) + +#decl(VEC) +fn store_dst(shmem_idx: u32, dst_idx: u32) { + dst[dst_idx] = vec4( + f32(shmem[shmem_idx]), + f32(shmem[shmem_idx + 1]), + f32(shmem[shmem_idx + 2]), + f32(shmem[shmem_idx + 3]) + ); +} +#enddecl(VEC) + +#decl(SCALAR) +fn store_dst(shmem_idx: u32, dst_idx: u32) { + dst[dst_idx] = f32(shmem[shmem_idx]); +} +#enddecl(SCALAR) + +#end(DECLS) + +#define(SHADER) +diagnostic(off, chromium.subgroup_matrix_uniformity); +enable f16; +enable subgroups; +enable chromium_experimental_subgroup_matrix; + +struct MulMatParams { + offset_src0: u32, + offset_src1: u32, + offset_dst: u32, + m: u32, + n: u32, + k: u32, + stride_01: u32, + stride_11: u32, + stride_02: u32, + stride_12: u32, + stride_03: u32, + stride_13: u32, + bs02: u32, + bs03: u32, + broadcast2: u32, + broadcast3: u32 +}; + +@group(0) @binding(0) var src0: array<{{SRC0_TYPE}}>; // M rows, K columns +@group(0) @binding(1) var src1: array<{{SRC1_TYPE}}>; // K rows, N columns (transposed) +@group(0) @binding(2) var dst: array<{{DST_TYPE}}>; // M rows, N columns (transposed) + +@group(0) @binding(3) var params: MulMatParams; + +DECLS + +// Note: These are string interpolated at build time, cannot use override constants due to limitations in +// current Dawn version type definitions/matrix load requirements for constant memory sizes. +const SUBGROUP_M = {{WEBGPU_SUBGROUP_M}}u; +const SUBGROUP_N = {{WEBGPU_SUBGROUP_N}}u; +// For portability we assume the max subgroup size, meaning some subgroups will be masked out if the +// runtime subgroup size is smaller. +const MAX_SUBGROUP_SIZE = {{WEBGPU_MAX_SUBGROUP_SIZE}}u; + +const EXPECTED_SUBGROUPS = SUBGROUP_M * SUBGROUP_N; + +const SUBGROUP_MATRIX_M_SIZE = {{WEBGPU_SG_MAT_M_SIZE}}u; +const SUBGROUP_MATRIX_N_SIZE = {{WEBGPU_SG_MAT_N_SIZE}}u; +const SUBGROUP_MATRIX_K_SIZE = {{WEBGPU_SG_MAT_K_SIZE}}u; + +const SUBGROUP_MATRIX_M = {{WEBGPU_SUBGROUP_MATRIX_M}}u; +const SUBGROUP_MATRIX_N = {{WEBGPU_SUBGROUP_MATRIX_N}}u; + +const TILE_K = {{WEBGPU_TILE_K}}u; + +const WG_M_SG_TILE_SIZE = SUBGROUP_M * SUBGROUP_MATRIX_M * SUBGROUP_MATRIX_M_SIZE; +const WG_N_SG_TILE_SIZE = SUBGROUP_N * SUBGROUP_MATRIX_N * SUBGROUP_MATRIX_N_SIZE; + +const TOTAL_WORKGROUP_SIZE = SUBGROUP_M * SUBGROUP_N * MAX_SUBGROUP_SIZE; +const TILE_SRC0_SHMEM = TILE_K * SUBGROUP_M * SUBGROUP_MATRIX_M * SUBGROUP_MATRIX_M_SIZE; +const TILE_SRC1_SHMEM = TILE_K * SUBGROUP_N * SUBGROUP_MATRIX_N * SUBGROUP_MATRIX_N_SIZE; + +const SG_MAT_ACCUM_SHMEM = SUBGROUP_M * SUBGROUP_MATRIX_M * SUBGROUP_N * SUBGROUP_MATRIX_N * SUBGROUP_MATRIX_M_SIZE * SUBGROUP_MATRIX_N_SIZE; + +// We reuse shmem for accumulation matrices +const SHMEM_SIZE = max(TILE_SRC0_SHMEM + TILE_SRC1_SHMEM, SG_MAT_ACCUM_SHMEM); + +var shmem: array; + +@compute @workgroup_size(TOTAL_WORKGROUP_SIZE) +fn main(@builtin(workgroup_id) wg_id: vec3, + @builtin(local_invocation_id) local_id: vec3, + @builtin(subgroup_id) subgroup_id: u32) { + + let thread_id = local_id.x; + let subgroup_m = subgroup_id % SUBGROUP_M; + let subgroup_n = subgroup_id / SUBGROUP_M; + + let wg_m_count = (params.m + WG_M_SG_TILE_SIZE - 1) / WG_M_SG_TILE_SIZE; + let wg_n_count = (params.n + WG_N_SG_TILE_SIZE - 1) / WG_N_SG_TILE_SIZE; + let wg_per_matrix = wg_m_count * wg_n_count; + + let batch_idx = wg_id.x / wg_per_matrix; + + let wg_in_batch = wg_id.x % wg_per_matrix; + let wg_m = wg_in_batch % wg_m_count; + let wg_n = wg_in_batch / wg_m_count; + + let dst2_stride = params.m * params.n; + let dst3_stride = dst2_stride * params.bs02 * params.broadcast2; + + let dst3_idx = batch_idx / (params.bs02 * params.broadcast2); + let src03_idx = dst3_idx / params.broadcast3; + let src13_idx = dst3_idx; + let dst2_idx = batch_idx % (params.bs02 * params.broadcast2); + let src02_idx = dst2_idx / params.broadcast2; + let src12_idx = dst2_idx; + + let src0_batch_offset = params.offset_src0 + src03_idx * params.stride_03 + src02_idx * params.stride_02; + let src1_batch_offset = params.offset_src1 + src13_idx * params.stride_13 + src12_idx * params.stride_12; + + let offset_m = wg_m * SUBGROUP_M * SUBGROUP_MATRIX_M * SUBGROUP_MATRIX_M_SIZE; + let offset_n = wg_n * SUBGROUP_N * SUBGROUP_MATRIX_N * SUBGROUP_MATRIX_N_SIZE; + + var acc_sg_mat : array, SUBGROUP_MATRIX_N>, SUBGROUP_MATRIX_M>; + + for (var k_outer = 0u; k_outer < params.k; k_outer += TILE_K) { + + // see mul_mat_decls.tmpl + init_shmem_src0(thread_id, src0_batch_offset, offset_m, k_outer); + init_shmem_src1(thread_id, src1_batch_offset, offset_n, k_outer); + + workgroupBarrier(); + + if (subgroup_id < EXPECTED_SUBGROUPS) { + + for (var k_inner = 0u; k_inner < TILE_K; k_inner += SUBGROUP_MATRIX_K_SIZE) { + + let src0_shmem_idx_base = subgroup_m * SUBGROUP_MATRIX_M * SUBGROUP_MATRIX_M_SIZE * TILE_K + k_inner; + var src0_sg_mats: array, SUBGROUP_MATRIX_M>; + for (var m = 0u; m < SUBGROUP_MATRIX_M; m++) { + src0_sg_mats[m] = subgroupMatrixLoad>( + &shmem, + src0_shmem_idx_base + m * SUBGROUP_MATRIX_M_SIZE * TILE_K, + false, + TILE_K + ); + } + + let src1_shmem_idx_base = TILE_SRC0_SHMEM + subgroup_n * SUBGROUP_MATRIX_N * SUBGROUP_MATRIX_N_SIZE * TILE_K + k_inner; + for (var n = 0u; n < SUBGROUP_MATRIX_N; n++) { + let src1_sg_mat = subgroupMatrixLoad>( + &shmem, + src1_shmem_idx_base + n * SUBGROUP_MATRIX_N_SIZE * TILE_K, + true, + TILE_K + ); + for (var m = 0u; m < SUBGROUP_MATRIX_M; m++) { + acc_sg_mat[m][n] = subgroupMatrixMultiplyAccumulate(src0_sg_mats[m], src1_sg_mat, acc_sg_mat[m][n]); + } + } + } + } + + workgroupBarrier(); + } + + let dst_batch_offset = params.offset_dst + dst3_idx * dst3_stride + dst2_idx * dst2_stride; + + // Stage the subgroup matrix tiles into shared memory + // This uses WG_M_SG_TILE_SIZE as the stride (number of columns in the workgroup tile). + let WG_TILE_STRIDE = WG_M_SG_TILE_SIZE; + let tile_row_base_local = subgroup_n * SUBGROUP_MATRIX_N * SUBGROUP_MATRIX_N_SIZE; + let tile_col_base_local = subgroup_m * SUBGROUP_MATRIX_M * SUBGROUP_MATRIX_M_SIZE; + + if (subgroup_id < EXPECTED_SUBGROUPS) { // 2-5% performance hit :( + for (var n = 0u; n < SUBGROUP_MATRIX_N; n++) { + for (var m = 0u; m < SUBGROUP_MATRIX_M; m++) { + let local_row = tile_row_base_local + n * SUBGROUP_MATRIX_N_SIZE; + let local_col = tile_col_base_local + m * SUBGROUP_MATRIX_M_SIZE; + let out_base = local_row * WG_TILE_STRIDE + local_col; + subgroupMatrixStore(&shmem, out_base, acc_sg_mat[m][n], true, WG_TILE_STRIDE); + } + } + } + + workgroupBarrier(); + + // Cooperative write: iterate over the entire workgroup tile + let tile_rows = WG_N_SG_TILE_SIZE; + let tile_cols = WG_M_SG_TILE_SIZE; + let total_tile_elems = tile_rows * tile_cols; + let tile_dst_row_base = wg_m * SUBGROUP_M * SUBGROUP_MATRIX_M * SUBGROUP_MATRIX_M_SIZE; + let tile_dst_col_base = wg_n * SUBGROUP_N * SUBGROUP_MATRIX_N * SUBGROUP_MATRIX_N_SIZE; + + for (var idx = thread_id * {{VEC_SIZE}}; idx < total_tile_elems; idx += TOTAL_WORKGROUP_SIZE * {{VEC_SIZE}}) { + let local_row = idx % WG_TILE_STRIDE; + let local_col = idx / WG_TILE_STRIDE; + + let global_row = tile_dst_row_base + local_row; + let global_col = tile_dst_col_base + local_col; + + if (global_col < params.n && global_row < params.m) { + let dst_idx = dst_batch_offset + global_col * params.m + global_row; + store_dst(idx, dst_idx/{{VEC_SIZE}}); + } + } +} + +#end(SHADER) diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.tmpl.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.tmpl.wgsl new file mode 100644 index 0000000000..ffbb640328 --- /dev/null +++ b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.tmpl.wgsl @@ -0,0 +1,267 @@ +#define(VARIANTS) +[ + { + "SHADER_SUFFIX": "f32_f32_vec", + "REPLS": { + "SRC0_TYPE" : "vec4", + "SRC1_TYPE" : "vec4", + "DST_TYPE": "vec4", + "VEC_SIZE" : 4, + }, + "DECLS": ["VEC", "MUL_ACC_FLOAT"] + }, + { + "SHADER_SUFFIX": "f32_f32", + "REPLS": { + "SRC0_TYPE" : "f32", + "SRC1_TYPE" : "f32", + "DST_TYPE": "f32", + "VEC_SIZE" : 1, + }, + "DECLS": ["SCALAR", "MUL_ACC_FLOAT"] + }, + { + "SHADER_SUFFIX": "f16_f32_vec", + "REPLS": { + "SRC0_TYPE" : "vec4", + "SRC1_TYPE" : "vec4", + "DST_TYPE": "vec4", + "VEC_SIZE" : 4, + }, + "DECLS": ["VEC", "MUL_ACC_FLOAT"] + }, + { + "SHADER_SUFFIX": "f16_f32", + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "f32", + "DST_TYPE": "f32", + "VEC_SIZE" : 1, + }, + "DECLS": ["SCALAR", "MUL_ACC_FLOAT"] + }, + { + "SHADER_SUFFIX": "f16_f16_vec", + "REPLS": { + "SRC0_TYPE" : "vec4", + "SRC1_TYPE" : "vec4", + "DST_TYPE": "vec4", + "VEC_SIZE" : 4, + }, + "DECLS": ["VEC", "MUL_ACC_FLOAT"] + }, + { + "SHADER_SUFFIX": "f16_f16", + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "f16", + "DST_TYPE": "f32", + "VEC_SIZE" : 1, + }, + "DECLS": ["SCALAR", "MUL_ACC_FLOAT"] + }, + { + "SHADER_SUFFIX": "q4_0_f32", + "REPLS": { + "SRC0_TYPE" : "f16", + "SRC1_TYPE" : "f32", + "DST_TYPE": "f32", + "VEC_SIZE" : 1, + }, + "DECLS": ["BYTE_HELPERS", "SCALAR", "MUL_ACC_Q4_0"] + } +] + +#end(VARIANTS) + +#define(DECLS) + +#decl(VEC) +fn inner_dot(src0_val: {{SRC0_TYPE}}, src1_val: {{SRC1_TYPE}}) -> f32 { + return f32(dot({{SRC1_TYPE}}(src0_val), src1_val)); +} + +fn store_val(group_base: u32) -> vec4 { + return vec4(partial_sums[group_base], + partial_sums[group_base + THREADS_PER_OUTPUT], + partial_sums[group_base + THREADS_PER_OUTPUT * 2], + partial_sums[group_base + THREADS_PER_OUTPUT * 3]); +} +#enddecl(VEC) + +#decl(SCALAR) +fn inner_dot(src0_val: {{SRC0_TYPE}}, src1_val: {{SRC1_TYPE}}) -> f32 { + return f32(src0_val) * f32(src1_val); +} + +fn store_val(group_base: u32) -> f32 { + return partial_sums[group_base]; +} +#enddecl(SCALAR) + +#decl(MUL_ACC_FLOAT) + +fn mul_acc(tig:u32, tile_size: u32, idx_base: u32, k_outer: u32) -> f32 { + var local_sum = 0.0; + for (var i = tig * {{VEC_SIZE}}; i < tile_size; i += THREADS_PER_OUTPUT * {{VEC_SIZE}}) { + let a = src0[(idx_base + k_outer + i) / {{VEC_SIZE}}]; + let b = shared_vector[i / {{VEC_SIZE}}]; + local_sum += inner_dot(a, b); + } + return local_sum; +} + +#enddecl(MUL_ACC_FLOAT) + +#decl(MUL_ACC_Q4_0) + +const BLOCK_SIZE = 32; +const NQ = 16u; // number of weights per thread +const F16_PER_BLOCK = 9u; // 1 scale + 8x4 packed weights +const WEIGHTS_PER_F16 = 4u; // 4 weights per f16 +const F16_PER_THREAD = NQ / WEIGHTS_PER_F16; + +fn mul_acc(tig:u32, tile_size: u32, idx_base: u32, k_outer: u32) -> f32 { + var local_sum = 0.0; + for (var i = tig * NQ; i < tile_size; i += THREADS_PER_OUTPUT * NQ) { + let blck_idx = i / BLOCK_SIZE; + let block_offset = (i % BLOCK_SIZE) / WEIGHTS_PER_F16; + let scale_idx = (idx_base + k_outer / BLOCK_SIZE + blck_idx) * F16_PER_BLOCK; + // each f16 contains offsets [block_offset, block_offset + 1] and [block_offset + 16, block_offset + 17] + let shmem_idx = blck_idx * BLOCK_SIZE + block_offset * 2u; + let d = f32(src0[scale_idx]); + for (var j = 0u; j < F16_PER_THREAD; j += 2) { + let q_0 = src0[scale_idx + 1 + block_offset + j]; + let q_1 = src0[scale_idx + 1 + block_offset + j + 1]; + let q_packed = bitcast(vec2(q_0, q_1)); + for (var k: u32 = 0; k < 4; k++) { + let q_byte = get_byte(q_packed, k); + let q_hi = (f32((q_byte >> 4) & 0xF) - 8.0) * d; + let q_lo = (f32(q_byte & 0xF) - 8.0) * d; + local_sum += q_lo * shared_vector[shmem_idx + j * 2 + k]; + local_sum += q_hi * shared_vector[shmem_idx + j * 2 + k + 16]; + } + } + } + return local_sum; +} + +#enddecl(MUL_ACC_Q4_0) + +#end(DECLS) + +#define(SHADER) +enable f16; + +DECLS + +struct MulMatParams { + offset_src0: u32, + offset_src1: u32, + offset_dst: u32, + m: u32, + n: u32, + k: u32, + stride_01: u32, + stride_11: u32, + stride_02: u32, + stride_12: u32, + stride_03: u32, + stride_13: u32, + bs02: u32, + bs03: u32, + broadcast2: u32, + broadcast3: u32 +}; + +@group(0) @binding(0) var src0: array<{{SRC0_TYPE}}>; // Matrix (M x K) +@group(0) @binding(1) var src1: array<{{SRC1_TYPE}}>; // Vector (K x 1, transposed) +@group(0) @binding(2) var dst: array<{{DST_TYPE}}>; // Result vector (transposed) + +@group(0) @binding(3) var params: MulMatParams; + +override WORKGROUP_SIZE: u32; +override TILE_K: u32; +override OUTPUTS_PER_WG: u32; +override THREADS_PER_OUTPUT = WORKGROUP_SIZE / OUTPUTS_PER_WG; + +// Shared memory for collaborative loading and reduction +var shared_vector: array<{{SRC1_TYPE}}, TILE_K/{{VEC_SIZE}}>; // Cache vector tile +var partial_sums: array; // For reduction + +@compute @workgroup_size(WORKGROUP_SIZE) +fn main( + @builtin(local_invocation_id) local_id: vec3, + @builtin(workgroup_id) wg_id: vec3, + @builtin(num_workgroups) num_wg: vec3) { + let thread_id = local_id.x; + + // Handle batch dimensions + let total_batches = params.bs02 * params.broadcast2 * params.bs03 * params.broadcast3; + let wg_linear = wg_id.y * num_wg.x + wg_id.x; + let output_groups = (params.m + OUTPUTS_PER_WG - 1u) / OUTPUTS_PER_WG; + let batch_idx = wg_linear / output_groups; + if (batch_idx >= total_batches) { + return; + } + + // Which of the outputs does this thread belong to? + let thread_group = thread_id / THREADS_PER_OUTPUT; + let thread_in_group = thread_id % THREADS_PER_OUTPUT; + + // Each workgroup computes OUTPUTS_PER_WG consecutive outputs + let output_row = (wg_linear % output_groups) * OUTPUTS_PER_WG + thread_group; + + let dst2_stride = params.m * params.n; + let dst2_idx = batch_idx % (params.bs02 * params.broadcast2); + let dst3_stride = dst2_stride * params.bs02 * params.broadcast2; + let dst3_idx = batch_idx / (params.bs02 * params.broadcast2); + let src03_idx = dst3_idx / params.broadcast3; + let src13_idx = dst3_idx; + let src02_idx = dst2_idx / params.broadcast2; + let src12_idx = dst2_idx; + + let src0_idx_base = params.offset_src0 + src03_idx * params.stride_03 + src02_idx * params.stride_02 + output_row * params.stride_01; + let src1_idx_base = params.offset_src1 + src13_idx * params.stride_13 + src12_idx * params.stride_12; + let dst_idx = params.offset_dst + dst3_idx * dst3_stride + dst2_idx * dst2_stride + output_row; + + var local_sum = 0.0; + + // Each thread processes multiple K elements and accumulates + for (var k_tile = 0u; k_tile < params.k; k_tile += TILE_K) { + let tile_size = min(TILE_K, params.k - k_tile); + + // Cooperatively load vector tile into shared memory (all threads) + for (var i = thread_id * {{VEC_SIZE}}; i < tile_size; i += WORKGROUP_SIZE * {{VEC_SIZE}}) { + shared_vector[i / {{VEC_SIZE}}] = src1[(src1_idx_base + k_tile + i) / {{VEC_SIZE}}]; + } + + workgroupBarrier(); + + if (output_row < params.m) { + local_sum += mul_acc(thread_in_group, tile_size, src0_idx_base, k_tile); + } + + workgroupBarrier(); + } + + // Store partial sums and reduce within each partition + partial_sums[thread_id] = local_sum; + workgroupBarrier(); + let group_base = thread_group * THREADS_PER_OUTPUT; + let thread_base = group_base + thread_in_group; + var offset = THREADS_PER_OUTPUT / 2; + while (offset > 0) { + if (thread_in_group < offset) { + partial_sums[thread_base] += partial_sums[thread_base + offset]; + } + offset = offset / 2; + workgroupBarrier(); + } + + // Store back to global memory + if (output_row < params.m && thread_group % {{VEC_SIZE}} == 0 && thread_in_group == 0) { + dst[dst_idx / {{VEC_SIZE}}] = store_val(group_base); + } +} +#end(SHADER) From e14e842e87103ec2a004770cec95a3f94f861bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20G=C3=A4=C3=9Fler?= Date: Sat, 8 Nov 2025 08:26:18 +0100 Subject: [PATCH 23/69] CUDA: fix MMQ stream-k fixup ne1 indices (#17089) --- ggml/src/ggml-cuda/mmq.cuh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/src/ggml-cuda/mmq.cuh b/ggml/src/ggml-cuda/mmq.cuh index c9a07e82fe..2e133b6bda 100644 --- a/ggml/src/ggml-cuda/mmq.cuh +++ b/ggml/src/ggml-cuda/mmq.cuh @@ -3494,7 +3494,7 @@ static __global__ void mul_mat_q_stream_k_fixup( const int col_diff = col_high - col_low; for (int j = threadIdx.y*warp_size + threadIdx.x; j < mmq_x; j += nwarps*warp_size) { - ids_dst_shared[j] = ids_dst[col_low + j]; + ids_dst_shared[j] = ids_dst[col_low + jt*mmq_x + j]; } __syncthreads(); From d6fe40fa0040bf7207b2380d0f3628fb56d6a86f Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sat, 8 Nov 2025 01:39:45 -0600 Subject: [PATCH 24/69] vulkan: Fix test-thread-safety crashes (#17024) The std::map pipeline_flash_attn_f32_f16 could be searched and inserted at the same time, which needs to hold the lock. To be safe, hold the lock for all of ggml_vk_load_shaders. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index a0a05f2e5b..2646e80be7 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -130,9 +130,9 @@ struct vk_pipeline_struct { // true if fields have been set by ggml_vk_create_pipeline bool initialized {}; // set to true to request the pipeline is compiled - bool needed {}; + std::atomic needed {}; // set to true when the shader has been compiled - bool compiled {}; + std::atomic compiled {}; // number of registers used, extracted from pipeline executable properties uint32_t register_count {}; }; @@ -1842,10 +1842,7 @@ static void ggml_vk_create_pipeline_func(vk_device& device, vk_pipeline& pipelin } } - { - std::lock_guard guard(device->mutex); - device->all_pipelines.push_back(pipeline); - } + device->all_pipelines.push_back(pipeline); { std::lock_guard guard(compile_count_mutex); @@ -2536,6 +2533,7 @@ static uint32_t get_subgroup_size(const std::string &pipeline_name, const vk_dev static void ggml_vk_load_shaders(vk_device& device) { VK_LOG_DEBUG("ggml_vk_load_shaders(" << device->name << ")"); + std::lock_guard guard(device->mutex); // some shaders have a minimum subgroup size const uint32_t subgroup_size_8 = std::max(device->subgroup_size, 8u); const uint32_t subgroup_size_16 = std::max(device->subgroup_size, 16u); @@ -2729,6 +2727,8 @@ static void ggml_vk_load_shaders(vk_device& device) { if (!pipeline->needed || pipeline->compiled) { return; } + // TODO: We're no longer benefitting from the async compiles (shaders are + // compiled individually, as needed) and this complexity can be removed. { // wait until fewer than N compiles are in progress uint32_t N = std::max(1u, std::thread::hardware_concurrency()); @@ -7914,12 +7914,15 @@ static void ggml_vk_flash_attn(ggml_backend_vk_context * ctx, vk_context& subctx vk_pipeline pipeline = nullptr; - auto &pipelines = ctx->device->pipeline_flash_attn_f32_f16[k->type]; - auto it = pipelines.find(fa_pipeline_state); - if (it != pipelines.end()) { - pipeline = it->second; - } else { - pipelines[fa_pipeline_state] = pipeline = std::make_shared(); + { + std::lock_guard guard(ctx->device->mutex); + auto &pipelines = ctx->device->pipeline_flash_attn_f32_f16[k->type]; + auto it = pipelines.find(fa_pipeline_state); + if (it != pipelines.end()) { + pipeline = it->second; + } else { + pipelines[fa_pipeline_state] = pipeline = std::make_shared(); + } } assert(pipeline); From b4e335d8dc503ec0adf76fa4053ab7094b6310dd Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sat, 8 Nov 2025 01:52:15 -0600 Subject: [PATCH 25/69] vulkan: fuse rms_norm + mul + rope (+ view + set_rows) (#16977) This change combines the rms_norm+mul and rope+view+set_rows fusions to allow fusing the whole sequence together. This comes up in Qwen3, Bailing, and some other models. --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 290 ++++++++++++++++-- .../vulkan-shaders/generic_binary_head.glsl | 8 + .../ggml-vulkan/vulkan-shaders/rms_norm.comp | 44 ++- .../vulkan-shaders/rope_funcs.glsl | 227 ++++++++++++++ .../ggml-vulkan/vulkan-shaders/rope_head.glsl | 56 +--- .../vulkan-shaders/rope_multi.comp | 67 +--- .../ggml-vulkan/vulkan-shaders/rope_neox.comp | 45 +-- .../ggml-vulkan/vulkan-shaders/rope_norm.comp | 45 +-- .../vulkan-shaders/rope_params.glsl | 27 ++ .../vulkan-shaders/rope_vision.comp | 44 +-- .../vulkan-shaders/vulkan-shaders-gen.cpp | 34 +- tests/test-backend-ops.cpp | 89 ++++++ 12 files changed, 695 insertions(+), 281 deletions(-) create mode 100644 ggml/src/ggml-vulkan/vulkan-shaders/rope_funcs.glsl create mode 100644 ggml/src/ggml-vulkan/vulkan-shaders/rope_params.glsl diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 2646e80be7..9c2aeb57f0 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -466,6 +466,14 @@ static constexpr std::initializer_list> rope_view_set_rows_ed { 2, 0, 1 }, // set_rows->src[0] == view }; +static constexpr std::initializer_list> rms_norm_mul_rope_view_set_rows_edges { + { 1, 0, 0 }, // mul->src[0] == rms + { 2, 0, 1 }, // rope->src[0] == mul + { 3, 0, 2 }, // view->src[0] == rope + { 4, 0, 3 }, // set_rows->src[0] == view +}; + + struct vk_device_struct { std::recursive_mutex mutex; @@ -617,6 +625,8 @@ struct vk_device_struct { vk_pipeline pipeline_rms_norm_mul_f32; vk_pipeline pipeline_rms_norm_partials_f32; vk_pipeline pipeline_rms_norm_mul_partials_f32; + vk_pipeline pipeline_rms_norm_mul_rope_f32_f32; + vk_pipeline pipeline_rms_norm_mul_rope_f32_f16; vk_pipeline pipeline_rms_norm_back_f32; vk_pipeline pipeline_l2_norm_f32; @@ -1060,6 +1070,7 @@ struct vk_op_diag_mask_push_constants { }; struct vk_op_rope_push_constants { + uint32_t rope_mode; uint32_t ncols; uint32_t n_dims; float freq_scale; @@ -1079,6 +1090,12 @@ struct vk_op_rope_push_constants { uint32_t set_rows_stride; }; +// For fused rms_norm+mul+rope(+view+set_rows) +struct vk_op_rms_norm_mul_rope_push_constants { + vk_op_binary_push_constants bin; + vk_op_rope_push_constants rope; +}; + struct vk_op_soft_max_push_constants { uint32_t KX; uint32_t KY; @@ -3557,6 +3574,12 @@ static void ggml_vk_load_shaders(vk_device& device) { ggml_vk_create_pipeline(device, device->pipeline_rms_norm_partials_f32, "rms_norm_partials_f32", rms_norm_partials_f32_len, rms_norm_partials_f32_data, "main", 4, sizeof(vk_op_binary_push_constants), {1, 1, 1}, {0, 0}, 1, true); ggml_vk_create_pipeline(device, device->pipeline_rms_norm_mul_partials_f32, "rms_norm_mul_partials_f32", rms_norm_partials_f32_len, rms_norm_partials_f32_data, "main", 4, sizeof(vk_op_binary_push_constants), {1, 1, 1}, {0, 1}, 1, true); + if (device->float_controls_rte_fp16 && + sizeof(vk_op_rms_norm_mul_rope_push_constants) <= device->properties.limits.maxPushConstantsSize) { + ggml_vk_create_pipeline(device, device->pipeline_rms_norm_mul_rope_f32_f32, "rms_norm_mul_rope_f32_f32", rms_norm_mul_rope_f32_f32_len, rms_norm_mul_rope_f32_f32_data, "main", 7, sizeof(vk_op_rms_norm_mul_rope_push_constants), {1, 1, 1}, {0, 1}, 1, true); + ggml_vk_create_pipeline(device, device->pipeline_rms_norm_mul_rope_f32_f16, "rms_norm_mul_rope_f32_f16", rms_norm_mul_rope_f32_f16_rte_len, rms_norm_mul_rope_f32_f16_rte_data, "main", 7, sizeof(vk_op_rms_norm_mul_rope_push_constants), {1, 1, 1}, {0, 1}, 1, true); + } + ggml_vk_create_pipeline(device, device->pipeline_rms_norm_back_f32, "rms_norm_back_f32", rms_norm_back_f32_len, rms_norm_back_f32_data, "main", 3, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1); ggml_vk_create_pipeline(device, device->pipeline_l2_norm_f32, "l2_norm_f32", l2_norm_f32_len, l2_norm_f32_data, "main", 2, sizeof(vk_op_push_constants), {1, 1, 1}, {}, 1); @@ -9590,21 +9613,149 @@ static uint32_t ggml_vk_rms_partials_size(ggml_backend_vk_context * ctx, const g return num_bytes; } -static void ggml_vk_rms_norm(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst, float * op_params) { +static vk_op_rope_push_constants ggml_vk_make_rope_constants(const ggml_tensor *dst, const ggml_tensor *src0, const bool has_ff, bool backprop, const uint32_t set_rows_stride) { + const int n_dims = ((const int32_t *) dst->op_params)[1]; + const int mode = ((const int32_t *) dst->op_params)[2]; + // const int n_ctx = ((const int32_t *) dst->op_params)[3]; + const int n_ctx_orig = ((const int32_t *) dst->op_params)[4]; + const float freq_base = ((const float *) dst->op_params)[5]; + const float freq_scale = ((const float *) dst->op_params)[6]; + const float ext_factor = ((const float *) dst->op_params)[7]; + const float attn_factor = ((const float *) dst->op_params)[8]; + const float beta_fast = ((const float *) dst->op_params)[9]; + const float beta_slow = ((const float *) dst->op_params)[10]; + int sections[4] {}; + if (mode & GGML_ROPE_TYPE_MROPE) { + memcpy(sections, (const int32_t *) dst->op_params + 11, sizeof(int)*4); + } + + const bool is_imrope = mode == GGML_ROPE_TYPE_IMROPE; + + float corr_dims[2]; + ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims); + + const float theta_scale = powf(freq_base, -2.0f/n_dims); + + uint32_t nb01 = src0->nb[1] / ggml_type_size(src0->type); + uint32_t nb02 = src0->nb[2] / ggml_type_size(src0->type); + + vk_op_rope_push_constants rope { + (uint32_t)mode, (uint32_t)src0->ne[0], (uint32_t)n_dims, freq_scale, (uint32_t)src0->ne[1], + freq_base, ext_factor, attn_factor, {corr_dims[0], corr_dims[1]}, theta_scale, + has_ff, (uint32_t)src0->ne[2], nb01, nb02, + { sections[0], sections[1], sections[2], sections[3] }, is_imrope, backprop, set_rows_stride, + }; + + return rope; +} + +static void ggml_vk_rms_norm(ggml_backend_vk_context * ctx, vk_context& subctx, const struct ggml_cgraph * cgraph, int node_idx, float * op_params) { + ggml_tensor * dst; + const ggml_tensor * src0; + const ggml_tensor * src1; + + if (ctx->num_additional_fused_ops > 0) { + // fused rms_norm + mul + ggml_tensor *mul = cgraph->nodes[node_idx + 1]; + ggml_tensor *other_src = mul->src[0] == cgraph->nodes[node_idx + 0] ? mul->src[1] : mul->src[0]; + dst = mul; + src0 = cgraph->nodes[node_idx]->src[0]; + src1 = other_src; + } else { + dst = cgraph->nodes[node_idx]; + src0 = src1 = dst->src[0]; + } + const uint32_t src0_type_size = ggml_type_size(src0->type); const uint32_t src1_type_size = ggml_type_size(src1->type); const uint32_t dst_type_size = ggml_type_size(dst->type); uint32_t param3 = ctx->do_add_rms_partials ? ggml_vk_rms_num_partials(ctx, dst) : 0; - ggml_vk_op_f32(ctx, subctx, src0, src1, nullptr, nullptr, dst, GGML_OP_RMS_NORM, { + vk_op_binary_push_constants bin { (uint32_t)ggml_nelements(src0), (uint32_t)src0->ne[0], (uint32_t)src0->ne[1], (uint32_t)src0->ne[2],(uint32_t)src0->ne[3], (uint32_t)src0->nb[0] / src0_type_size, (uint32_t)src0->nb[1] / src0_type_size, (uint32_t)src0->nb[2] / src0_type_size, (uint32_t)src0->nb[3] / src0_type_size, (uint32_t)src1->ne[0], (uint32_t)src1->ne[1], (uint32_t)src1->ne[2],(uint32_t)src1->ne[3], (uint32_t)src1->nb[0] / src1_type_size, (uint32_t)src1->nb[1] / src1_type_size, (uint32_t)src1->nb[2] / src1_type_size, (uint32_t)src1->nb[3] / src1_type_size, (uint32_t) dst->ne[0], (uint32_t) dst->ne[1], (uint32_t) dst->ne[2],(uint32_t) dst->ne[3], (uint32_t) dst->nb[0] / dst_type_size, (uint32_t) dst->nb[1] / dst_type_size, (uint32_t) dst->nb[2] / dst_type_size, (uint32_t) dst->nb[3] / dst_type_size, 0, op_params[0], 0.0f, (int32_t)param3, - }); + }; + + // more than one fused op means rms_norm+mul+rope + if (ctx->num_additional_fused_ops > 1) { + static constexpr uint32_t max_tensors = 7; + const ggml_tensor *tensors[max_tensors] {}; + + ggml_tensor *rms = cgraph->nodes[node_idx + 0]; + ggml_tensor *mul = cgraph->nodes[node_idx + 1]; + ggml_tensor *rope = cgraph->nodes[node_idx + 2]; + + ggml_tensor *other_src = mul->src[0] == rms ? mul->src[1] : mul->src[0]; + + bool do_set_rows = ctx->num_additional_fused_ops == 4; + + tensors[0] = rms->src[0]; + tensors[1] = other_src; + tensors[2] = mul; + tensors[3] = rope->src[1]; // pos + tensors[4] = rope->src[2]; // ff + tensors[5] = cgraph->nodes[node_idx + ctx->num_additional_fused_ops]; // dst + tensors[6] = do_set_rows ? tensors[5]->src[1] : nullptr; + const uint32_t set_rows_stride = do_set_rows ? tensors[5]->nb[1] / ggml_type_size(tensors[5]->type) : 0; + + vk_op_rms_norm_mul_rope_push_constants pc; + pc.bin = bin; + pc.rope = ggml_vk_make_rope_constants(rope, rope->src[0], tensors[4] != nullptr, false, set_rows_stride); + + vk_pipeline pipeline = tensors[5]->type == GGML_TYPE_F16 ? ctx->device->pipeline_rms_norm_mul_rope_f32_f16 : ctx->device->pipeline_rms_norm_mul_rope_f32_f32; + + ggml_pipeline_request_descriptor_sets(ctx, pipeline, 1); + + ggml_backend_vk_buffer_context * buf_ctx[max_tensors]; + vk_buffer buf[max_tensors]; + size_t offset[max_tensors]; + bool uma[max_tensors]; + + for (uint32_t i = 0; i < max_tensors; ++i) { + if (!tensors[i]) { + // If any remaining descriptors are unused, just point them at src[0] + buf[i] = buf[0]; + offset[i] = 0; + continue; + } + buf_ctx[i] = (ggml_backend_vk_buffer_context *)tensors[i]->buffer->context; + buf[i] = nullptr; + offset[i] = 0; + uma[i] = false; + + if (ctx->device->uma) { + ggml_vk_host_get(ctx->device, tensors[i]->data, buf[i], offset[i]); + uma[i] = buf[i] != nullptr; + } + if (!uma[i]) { + buf[i] = buf_ctx[i]->dev_buffer; + offset[i] = vk_tensor_offset(tensors[i]) + tensors[i]->view_offs; + } + GGML_ASSERT(buf[i] != nullptr); + } + + std::array elements; + elements = { (uint32_t)rms->src[0]->ne[1], (uint32_t)rms->src[0]->ne[2], (uint32_t)rms->src[0]->ne[3] }; + + static_assert(max_tensors == 7); + ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, + { + ggml_vk_subbuffer(ctx, buf[0], offset[0]), + ggml_vk_subbuffer(ctx, buf[1], offset[1]), + ggml_vk_subbuffer(ctx, buf[2], offset[2]), + ggml_vk_subbuffer(ctx, buf[3], offset[3]), + ggml_vk_subbuffer(ctx, buf[4], offset[4]), + ggml_vk_subbuffer(ctx, buf[5], offset[5]), + ggml_vk_subbuffer(ctx, buf[6], offset[6]), + }, pc, elements); + } else { + ggml_vk_op_f32(ctx, subctx, src0, src1, nullptr, nullptr, dst, GGML_OP_RMS_NORM, std::move(bin)); + } if (ctx->do_add_rms_partials_offset_calculation) { ctx->prealloc_size_add_rms_partials_offset += ggml_vk_rms_partials_size(ctx, src0); @@ -9758,9 +9909,6 @@ static void ggml_vk_rope(ggml_backend_vk_context * ctx, vk_context& subctx, cons // const int n_ctx = ((int32_t *) dst->op_params)[3]; const int n_ctx_orig = ((int32_t *) dst->op_params)[4]; const float freq_base = ((float *) dst->op_params)[5]; - const float freq_scale = ((float *) dst->op_params)[6]; - const float ext_factor = ((float *) dst->op_params)[7]; - const float attn_factor = ((float *) dst->op_params)[8]; const float beta_fast = ((float *) dst->op_params)[9]; const float beta_slow = ((float *) dst->op_params)[10]; int sections[4] {}; @@ -9768,16 +9916,9 @@ static void ggml_vk_rope(ggml_backend_vk_context * ctx, vk_context& subctx, cons memcpy(sections, (int32_t *) dst->op_params + 11, sizeof(int)*4); } - const bool is_imrope = mode == GGML_ROPE_TYPE_IMROPE; - float corr_dims[2]; ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims); - const float theta_scale = powf(freq_base, -2.0f/n_dims); - - uint32_t s1 = src0->nb[1] / ggml_type_size(src0->type); - uint32_t s2 = src0->nb[2] / ggml_type_size(src0->type); - uint32_t set_rows_stride = 0; // Fused rope + view + set_rows passes the set_rows destination stride in set_rows_stride // and overrides the dst and sets src3=row_indices @@ -9787,12 +9928,8 @@ static void ggml_vk_rope(ggml_backend_vk_context * ctx, vk_context& subctx, cons dst = cgraph->nodes[node_idx + 2]; } - ggml_vk_op_f32(ctx, subctx, src0, src1, src2, src3, dst, GGML_OP_ROPE, { - (uint32_t)src0->ne[0], (uint32_t)n_dims, freq_scale, (uint32_t)src0->ne[1], - freq_base, ext_factor, attn_factor, {corr_dims[0], corr_dims[1]}, theta_scale, - src2 != nullptr, (uint32_t)src0->ne[2], s1, s2, - { sections[0], sections[1], sections[2], sections[3] }, is_imrope, backprop, set_rows_stride, - }); + ggml_vk_op_f32(ctx, subctx, src0, src1, src2, src3, dst, GGML_OP_ROPE, + ggml_vk_make_rope_constants(cgraph->nodes[node_idx], src0, src2 != nullptr, backprop, set_rows_stride)); } static void ggml_vk_argsort(ggml_backend_vk_context * ctx, vk_context& subctx, const ggml_tensor * src0, ggml_tensor * dst) { @@ -11307,6 +11444,10 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr if (n->op == GGML_OP_GLU) { std::cerr << " " << ggml_glu_op_name(ggml_get_glu_op(n)) << " " << (n->src[1] ? "split" : "single") << " "; } + if (n->op == GGML_OP_ROPE) { + const int mode = ((const int32_t *) n->op_params)[2]; + std::cerr << " rope mode: " << mode; + } std::cerr << std::endl; } #endif @@ -11414,14 +11555,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr break; case GGML_OP_RMS_NORM: - if (ctx->num_additional_fused_ops > 0) { - // fused rms_norm + mul - ggml_tensor *mul = cgraph->nodes[node_idx + 1]; - ggml_tensor *other_src = mul->src[0] == node ? mul->src[1] : mul->src[0]; - ggml_vk_rms_norm(ctx, compute_ctx, src0, other_src, mul, (float *)node->op_params); - } else { - ggml_vk_rms_norm(ctx, compute_ctx, src0, src0, node, (float *)node->op_params); - } + ggml_vk_rms_norm(ctx, compute_ctx, cgraph, node_idx, (float *)node->op_params); break; case GGML_OP_RMS_NORM_BACK: ggml_vk_rms_norm_back(ctx, compute_ctx, src0, src1, node); @@ -12407,6 +12541,70 @@ static bool ggml_vk_can_fuse_rope_set_rows(ggml_backend_vk_context * ctx, const return true; } +// Check whether the tensors overlap in memory but are not equal. +// Fusions can potenitally overwrite src tensors in ways that are not prevented +// by ggml-alloc. If the fusion is entirely elementwise, then it's OK for them +// to overlap if they are exactly equal. +// XXX TODO this check is probably missing from several fusion optimizations. +static bool ggml_vk_tensors_overlap_but_not_equal(const ggml_tensor * a, const ggml_tensor * b) { + ggml_backend_vk_buffer_context * a_buf_ctx = (ggml_backend_vk_buffer_context *)a->buffer->context; + vk_buffer a_buf = a_buf_ctx->dev_buffer; + ggml_backend_vk_buffer_context * b_buf_ctx = (ggml_backend_vk_buffer_context *)b->buffer->context; + vk_buffer b_buf = b_buf_ctx->dev_buffer; + if (a_buf == b_buf) { + auto a_base = vk_tensor_offset(a) + a->view_offs; + auto a_size = ggml_nbytes(a); + auto b_base = vk_tensor_offset(b) + b->view_offs; + auto b_size = ggml_nbytes(b); + + if (a_base == b_base && a_size == b_size) { + return false; + } + + if ((b_base <= a_base && a_base < b_base + b_size) || + (a_base <= b_base && b_base < a_base + a_size)) { + return true; + } + } + return false; +} + +static bool ggml_vk_can_fuse_rms_norm_mul_rope(ggml_backend_vk_context * ctx, const struct ggml_cgraph * cgraph, + int node_idx) { + GGML_UNUSED(ctx); + const ggml_tensor *rms = cgraph->nodes[node_idx + 0]; + const ggml_tensor *mul = cgraph->nodes[node_idx + 1]; + const ggml_tensor *rope = cgraph->nodes[node_idx + 2]; + + const int mode = ((const int32_t *) rope->op_params)[2]; + + // noncontig tensors aren't tested, and don't seem common in practice + if (!ggml_is_contiguous(rms) || + !ggml_is_contiguous(mul) || + !ggml_is_contiguous(rope)) { + return false; + } + + // only norm/neox are handled in the shader + if (mode != GGML_ROPE_TYPE_NEOX && mode != GGML_ROPE_TYPE_NORMAL) { + return false; + } + + // shared memory size for passing data from mul->rope + if (mul->ne[0] > 1024) { + return false; + } + + // must not overwrite srcs in a way that's not elementwise + ggml_tensor *other_src = mul->src[0] == rms ? mul->src[1] : mul->src[0]; + if (ggml_vk_tensors_overlap_but_not_equal(rms->src[0], rope) || + ggml_vk_tensors_overlap_but_not_equal(other_src, rope)) { + return false; + } + + return true; +} + static uint32_t ggml_vk_fuse_multi_add(ggml_backend_vk_context * ctx, const struct ggml_cgraph * cgraph, int node_idx) { const ggml_tensor *first_node = cgraph->nodes[node_idx]; @@ -12552,12 +12750,20 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg uint32_t num_adds = ggml_vk_fuse_multi_add(ctx, cgraph, i); if (num_adds) { ctx->num_additional_fused_ops = num_adds - 1; - } else if (ggml_vk_can_fuse(ctx, cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL })) { - ctx->num_additional_fused_ops = 1; } else if (ggml_vk_can_fuse(ctx, cgraph, i, { GGML_OP_MUL_MAT, GGML_OP_ADD })) { ctx->num_additional_fused_ops = 1; } else if (ggml_vk_can_fuse(ctx, cgraph, i, { GGML_OP_MUL_MAT_ID, GGML_OP_ADD_ID })) { ctx->num_additional_fused_ops = 1; + } else if (ggml_can_fuse_subgraph(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL, GGML_OP_ROPE, GGML_OP_VIEW, GGML_OP_SET_ROWS }, { i + 4 }) && + ggml_check_edges(cgraph, i, rms_norm_mul_rope_view_set_rows_edges) && + ggml_vk_can_fuse_rms_norm_mul_rope(ctx, cgraph, i) && + ggml_vk_can_fuse_rope_set_rows(ctx, cgraph, i + 2)) { + ctx->num_additional_fused_ops = 4; + } else if (ggml_vk_can_fuse(ctx, cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL, GGML_OP_ROPE })&& + ggml_vk_can_fuse_rms_norm_mul_rope(ctx, cgraph, i)) { + ctx->num_additional_fused_ops = 2; + } else if (ggml_vk_can_fuse(ctx, cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL })) { + ctx->num_additional_fused_ops = 1; } else if (ggml_can_fuse_subgraph(cgraph, i, { GGML_OP_ROPE, GGML_OP_VIEW, GGML_OP_SET_ROWS }, { i + 2 }) && ggml_check_edges(cgraph, i, rope_view_set_rows_edges) && ggml_vk_can_fuse_rope_set_rows(ctx, cgraph, i)) { @@ -12790,14 +12996,34 @@ static void ggml_vk_graph_optimize(ggml_backend_t backend, struct ggml_cgraph * } if (ok) { current_set.push_back(j); + + int rope_idx = j; + + // When we've found RMS_NORM + MUL, try to find a ROPE that uses it + if (j > 0 && + graph->nodes[j]->op == GGML_OP_MUL && + graph->nodes[j-1]->op == GGML_OP_RMS_NORM) { + for (int k = j + 1; k < std::min(j + 15, graph->n_nodes); ++k) { + if (graph->nodes[k]->op == GGML_OP_ROPE && + graph->nodes[k]->src[0] == graph->nodes[j] && + // Check that other srcs are already valid + graph->nodes[k]->src[1]->op == GGML_OP_NONE && + (graph->nodes[k]->src[2] == nullptr || graph->nodes[k]->src[2]->op == GGML_OP_NONE)) { + rope_idx = k; + current_set.push_back(rope_idx); + used[rope_idx] = true; + break; + } + } + } // Look for ROPE + VIEW + SET_ROWS and make them consecutive - if (graph->nodes[j]->op == GGML_OP_ROPE) { + if (graph->nodes[rope_idx]->op == GGML_OP_ROPE) { int view_idx = -1; int set_rows_idx = -1; - for (int k = j+1; k < std::min(j + 10, graph->n_nodes); ++k) { + for (int k = rope_idx+1; k < std::min(rope_idx + 10, graph->n_nodes); ++k) { if (view_idx == -1 && graph->nodes[k]->op == GGML_OP_VIEW && - graph->nodes[k]->src[0] == graph->nodes[j]) { + graph->nodes[k]->src[0] == graph->nodes[rope_idx]) { view_idx = k; continue; } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.glsl index 99595fc688..c1ad517256 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/generic_binary_head.glsl @@ -3,6 +3,9 @@ #include "rte.glsl" #include "utils.glsl" +#if RMS_NORM_ROPE_FUSION +#include "rope_params.glsl" +#endif layout (push_constant) uniform parameter { @@ -12,11 +15,16 @@ layout (push_constant) uniform parameter uint ne20; uint ne21; uint ne22; uint ne23; uint nb20; uint nb21; uint nb22; uint nb23; uint misalign_offsets; float param1; float param2; int param3; +#if RMS_NORM_ROPE_FUSION + rope_params rope; +#endif } p; +#if !RMS_NORM_ROPE_FUSION layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; layout (binding = 2) writeonly buffer D {D_TYPE data_d[];}; +#endif // true if src0/src1 are the same shape and the indices can be reused without additional modulus layout(constant_id = 0) const bool norepeat = false; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm.comp index d5b211ffaa..3a47949d5a 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/rms_norm.comp @@ -3,6 +3,32 @@ #include "generic_binary_head.glsl" #include "types.glsl" +#if RMS_NORM_ROPE_FUSION + +layout (binding = 0) readonly buffer A {A_TYPE data_a[];}; +layout (binding = 1) readonly buffer B {B_TYPE data_b[];}; + +// data is passed from rms_norm -> rope through shared memory. +// rms_norm calls this data_d, rope calls this rope_data_a. +// Binding 2 is not used +shared FLOAT_TYPE rope_data_a[1024]; +#define data_d rope_data_a + +layout (binding = 3) readonly buffer R_Y {int rope_data_pos[];}; +layout (binding = 4) readonly buffer R_Z {float rope_data_ff[];}; +layout (binding = 5) writeonly buffer R_D {ROPE_D_TYPE rope_data_d[];}; +layout (binding = 6) readonly buffer R_I {uvec2 rope_data_i[];}; // indices for set_rows + +#include "rope_params.glsl" +#include "rope_funcs.glsl" + +#define GGML_ROPE_TYPE_NORMAL 0 +#define GGML_ROPE_TYPE_NEOX 2 +#define GGML_ROPE_TYPE_MROPE 8 +#define GGML_ROPE_TYPE_VISION 24 + +#endif + #extension GL_EXT_control_flow_attributes : enable #define BLOCK_SIZE 512 @@ -28,8 +54,12 @@ void rms_norm(uint num_iters) { uint32_t a_offset = samp*stride_sample + channel*stride_channel + row*stride_row + get_aoffset(); uint32_t b_offset = src1_idx(0, row, channel, samp) + get_boffset(); +#if RMS_NORM_ROPE_FUSION + // Per-row offset in shared memory + uint32_t d_offset = 0; +#else uint32_t d_offset = ((samp*nchannels + channel)*nrows + row)*ncols + get_doffset(); - +#endif FLOAT_TYPE sum = FLOAT_TYPE(0.0f); // partial sum for thread in warp [[unroll]] for (uint col = tid, idx = 0; idx < num_iters; col += BLOCK_SIZE, ++idx) { @@ -79,6 +109,18 @@ void rms_norm(uint num_iters) { data_d[d_offset + col] = D_TYPE(scale * FLOAT_TYPE(data_a[a_offset + col])); } } +#if RMS_NORM_ROPE_FUSION + barrier(); + rope_params rp = p.rope; + uint rope_row = (samp*nchannels + channel)*nrows + row; + for (uint t = 2*tid; t < ncols; t += 2*BLOCK_SIZE) { + if (rp.rope_mode == GGML_ROPE_TYPE_NEOX) { + rope_neox(t, rope_row, rp); + } else if (rp.rope_mode == GGML_ROPE_TYPE_NORMAL) { + rope_norm(t, rope_row, rp); + } + } +#endif } void main() { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/rope_funcs.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/rope_funcs.glsl new file mode 100644 index 0000000000..9726b722d1 --- /dev/null +++ b/ggml/src/ggml-vulkan/vulkan-shaders/rope_funcs.glsl @@ -0,0 +1,227 @@ + +float rope_yarn_ramp(const float low, const float high, const uint i0) { + const float y = (i0 / 2 - low) / max(0.001f, high - low); + return 1.0f - min(1.0f, max(0.0f, y)); +} + +uint rope_a_coord(const uint i0, const uint i01, const uint i02, rope_params p) { +#if RMS_NORM_ROPE_FUSION + // Per-row offset in shared memory + const uint ix = i0; +#else + const uint ix = i02*p.nb02 + i01*p.nb01 + i0; +#endif + return ix; +} + +void rope_yarn(const float theta_extrap, const uint i0, out float cos_theta, out float sin_theta, rope_params p) { + float mscale = p.attn_factor; + // Get n-d rotational scaling corrected for extrapolation + float theta_interp = p.freq_scale * theta_extrap; + float theta = theta_interp; + if (p.ext_factor != 0.0f) { + float ramp_mix = rope_yarn_ramp(p.corr_dims[0], p.corr_dims[1], i0) * p.ext_factor; + theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; + + // Get n-d magnitude scaling corrected for interpolation + mscale *= 1.0f + 0.1f * log(1.0f / p.freq_scale); + } + // Backprogagation uses inverted rotation + if (p.is_back != 0) { + theta = -theta; + } + cos_theta = cos(theta) * mscale; + sin_theta = sin(theta) * mscale; +} + +void rope_norm(const uint i0, const uint i1, rope_params p) { + uint ne0 = p.ncols; + uint ne1 = p.p_delta_rows; + + if (i0 >= ne0) { + return; + } + + // i1 is actually i2*nb2+i1, but the rows are contiguous + const uint i01 = i1 % ne1; + const uint i02 = i1 / ne1; + + uint idst = i1*ne0 + i0; + const uint ix = rope_a_coord(i0, i01, i02, p); + + // Fusion optimization: ROPE + VIEW + SET_ROWS.. + // The rope output is viewed as a 1D tensor and offset based on a row index in data_i. + if (p.set_rows_stride != 0) { + idst = i01*ne0 + i0; + idst += rope_data_i[i02].x * p.set_rows_stride; + } + + if (i0 >= p.n_dims) { + rope_data_d[idst + 0] = ROPE_D_TYPE(rope_data_a[ix + 0]); + rope_data_d[idst + 1] = ROPE_D_TYPE(rope_data_a[ix + 1]); + + return; + } + + const float theta_base = rope_data_pos[i02] * pow(p.theta_scale, i0/2.0f); + + const float freq_factor = p.has_ff != 0 ? rope_data_ff[i0/2] : 1.0f; + + float cos_theta, sin_theta; + rope_yarn(theta_base / freq_factor, i0, cos_theta, sin_theta, p); + + const float x0 = float(rope_data_a[ix + 0]); + const float x1 = float(rope_data_a[ix + 1]); + + rope_data_d[idst + 0] = ROPE_D_TYPE(x0*cos_theta - x1*sin_theta); + rope_data_d[idst + 1] = ROPE_D_TYPE(x0*sin_theta + x1*cos_theta); +} + +void rope_neox(const uint i0, const uint i1, rope_params p) { + uint ne0 = p.ncols; + uint ne1 = p.p_delta_rows; + + if (i0 >= ne0) { + return; + } + + const uint i01 = i1 % ne1; + const uint i02 = i1 / ne1; + + uint idst = i1*ne0 + i0/2; + const uint ix = rope_a_coord(i0/2, i01, i02, p); + + // Fusion optimization: ROPE + VIEW + SET_ROWS.. + // The rope output is viewed as a 1D tensor and offset based on a row index in rope_data_i. + if (p.set_rows_stride != 0) { + idst = i01*ne0 + i0/2; + idst += rope_data_i[i02].x * p.set_rows_stride; + } + + if (i0 >= p.n_dims) { + rope_data_d[idst + i0/2 + 0] = ROPE_D_TYPE(rope_data_a[ix + i0/2 + 0]); + rope_data_d[idst + i0/2 + 1] = ROPE_D_TYPE(rope_data_a[ix + i0/2 + 1]); + + return; + } + + const float theta_base = rope_data_pos[i02] * pow(p.theta_scale, i0/2.0f); + + const float freq_factor = p.has_ff != 0 ? rope_data_ff[i0/2] : 1.0f; + + float cos_theta, sin_theta; + rope_yarn(theta_base / freq_factor, i0, cos_theta, sin_theta, p); + + const float x0 = float(rope_data_a[ix + 0]); + const float x1 = float(rope_data_a[ix + p.n_dims/2]); + + rope_data_d[idst + 0] = ROPE_D_TYPE(x0*cos_theta - x1*sin_theta); + rope_data_d[idst + p.n_dims/2] = ROPE_D_TYPE(x0*sin_theta + x1*cos_theta); +} + + +void rope_multi(const uint i0, const uint i1, rope_params p) { + uint ne0 = p.ncols; + uint ne1 = p.p_delta_rows; + uint ne2 = p.ne02; + + if (i0 >= ne0) { + return; + } + + const uint i01 = i1 % ne1; + const uint i02 = i1 / ne1; + + const uint idst = i1*ne0 + i0/2; + const uint ix = rope_a_coord(i0/2, i01, i02, p); + + if (i0 >= p.n_dims) { + rope_data_d[idst + i0/2 + 0] = ROPE_D_TYPE(rope_data_a[ix + i0/2 + 0]); + rope_data_d[idst + i0/2 + 1] = ROPE_D_TYPE(rope_data_a[ix + i0/2 + 1]); + + return; + } + + const int sect_dims = p.sections[0] + p.sections[1] + p.sections[2] + p.sections[3]; + const int sec_w = p.sections[1] + p.sections[0]; + const uint sector = (i0 / 2) % sect_dims; + + float theta_base = 0.0; + if (p.is_imrope != 0) { + if (sector % 3 == 1 && sector < 3 * p.sections[1]) { + theta_base = rope_data_pos[i02 + ne2 * 1]*pow(p.theta_scale, i0/2.0f); + } else if (sector % 3 == 2 && sector < 3 * p.sections[2]) { + theta_base = rope_data_pos[i02 + ne2 * 2]*pow(p.theta_scale, i0/2.0f); + } else if (sector % 3 == 0 && sector < 3 * p.sections[0]) { + theta_base = rope_data_pos[i02]*pow(p.theta_scale, i0/2.0f); + } else { + theta_base = rope_data_pos[i02 + ne2 * 3]*pow(p.theta_scale, i0/2.0f); + } + } else { + if (sector < p.sections[0]) { + theta_base = rope_data_pos[i02]*pow(p.theta_scale, i0/2.0f); + } + else if (sector >= p.sections[0] && sector < sec_w) { + theta_base = rope_data_pos[i02 + ne2 * 1]*pow(p.theta_scale, i0/2.0f); + } + else if (sector >= sec_w && sector < sec_w + p.sections[2]) { + theta_base = rope_data_pos[i02 + ne2 * 2]*pow(p.theta_scale, i0/2.0f); + } + else if (sector >= sec_w + p.sections[2]) { + theta_base = rope_data_pos[i02 + ne2 * 3]*pow(p.theta_scale, i0/2.0f); + } + } + + const float freq_factor = p.has_ff != 0 ? rope_data_ff[i0/2] : 1.0f; + + float cos_theta, sin_theta; + rope_yarn(theta_base / freq_factor, i0, cos_theta, sin_theta, p); + + const float x0 = float(rope_data_a[ix + 0]); + const float x1 = float(rope_data_a[ix + p.n_dims/2]); + + rope_data_d[idst + 0] = ROPE_D_TYPE(x0*cos_theta - x1*sin_theta); + rope_data_d[idst + p.n_dims/2] = ROPE_D_TYPE(x0*sin_theta + x1*cos_theta); +} + +void rope_vision(const uint i0, const uint i1, rope_params p) { + uint ne0 = p.ncols; + uint ne1 = p.p_delta_rows; + uint ne2 = p.ne02; + + if (i0 >= ne0) { + return; + } + + const uint i01 = i1 % ne1; + const uint i02 = i1 / ne1; + + const uint idst = i1*ne0 + i0/2; + const uint ix = rope_a_coord(i0/2, i01, i02, p); + + const int sect_dims = p.sections[0] + p.sections[1]; + const int sec_w = p.sections[1] + p.sections[0]; + const uint sector = (i0 / 2) % sect_dims; + + float theta_base = 0.0; + if (sector < p.sections[0]) { + const uint p0 = sector; + theta_base = rope_data_pos[i02]*pow(p.theta_scale, p0); + } + else if (sector >= p.sections[0] && sector < sec_w) { + const uint p0 = sector - p.sections[0]; + theta_base = rope_data_pos[i02 + ne2]*pow(p.theta_scale, p0); + } + + const float freq_factor = p.has_ff != 0 ? rope_data_ff[i0/2] : 1.0f; + + float cos_theta, sin_theta; + rope_yarn(theta_base / freq_factor, i0, cos_theta, sin_theta, p); + + const float x0 = float(rope_data_a[ix + 0]); + const float x1 = float(rope_data_a[ix + p.n_dims]); + + rope_data_d[idst + 0] = ROPE_D_TYPE(x0*cos_theta - x1*sin_theta); + rope_data_d[idst + p.n_dims] = ROPE_D_TYPE(x0*sin_theta + x1*cos_theta); +} + diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/rope_head.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/rope_head.glsl index fa2bb33394..d9b4d4c03f 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/rope_head.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/rope_head.glsl @@ -3,56 +3,18 @@ #extension GL_EXT_shader_16bit_storage : require #include "rte.glsl" +#include "rope_params.glsl" layout(local_size_x = 1, local_size_y = 256, local_size_z = 1) in; -layout (binding = 0) readonly buffer X {A_TYPE data_a[];}; -layout (binding = 1) readonly buffer Y {int data_pos[];}; -layout (binding = 2) readonly buffer Z {float data_ff[];}; -layout (binding = 3) writeonly buffer D {D_TYPE data_d[];}; -layout (binding = 4) readonly buffer I {uvec2 data_i[];}; // indices for set_rows +layout (binding = 0) readonly buffer X {A_TYPE rope_data_a[];}; +layout (binding = 1) readonly buffer Y {int rope_data_pos[];}; +layout (binding = 2) readonly buffer Z {float rope_data_ff[];}; +layout (binding = 3) writeonly buffer D {ROPE_D_TYPE rope_data_d[];}; +layout (binding = 4) readonly buffer I {uvec2 rope_data_i[];}; // indices for set_rows + layout (push_constant) uniform parameter { - uint ncols; - uint n_dims; - float freq_scale; - uint p_delta_rows; - float freq_base; - float ext_factor; - float attn_factor; - float corr_dims[2]; - float theta_scale; - uint has_ff; - uint ne02; - uint s1; - uint s2; - int sections[4]; - uint is_imrope; - uint is_back; - uint set_rows_stride; -} p; + rope_params pc; +}; -float rope_yarn_ramp(const float low, const float high, const uint i0) { - const float y = (i0 / 2 - low) / max(0.001f, high - low); - return 1.0f - min(1.0f, max(0.0f, y)); -} - -void rope_yarn(const float theta_extrap, const uint i0, out float cos_theta, out float sin_theta) { - float mscale = p.attn_factor; - // Get n-d rotational scaling corrected for extrapolation - float theta_interp = p.freq_scale * theta_extrap; - float theta = theta_interp; - if (p.ext_factor != 0.0f) { - float ramp_mix = rope_yarn_ramp(p.corr_dims[0], p.corr_dims[1], i0) * p.ext_factor; - theta = theta_interp * (1 - ramp_mix) + theta_extrap * ramp_mix; - - // Get n-d magnitude scaling corrected for interpolation - mscale *= 1.0f + 0.1f * log(1.0f / p.freq_scale); - } - // Backprogagation uses inverted rotation - if (p.is_back != 0) { - theta = -theta; - } - cos_theta = cos(theta) * mscale; - sin_theta = sin(theta) * mscale; -} diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/rope_multi.comp b/ggml/src/ggml-vulkan/vulkan-shaders/rope_multi.comp index 54aabcf222..7c1fb1cd22 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/rope_multi.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/rope_multi.comp @@ -1,70 +1,11 @@ #version 450 #include "rope_head.glsl" +#include "rope_funcs.glsl" void main() { const uint i0 = 2*gl_GlobalInvocationID.y; - uint ne0 = p.ncols; - uint ne1 = p.p_delta_rows; - uint ne2 = p.ne02; - - if (i0 >= ne0) { - return; - } - - const uint row_dst = gl_GlobalInvocationID.x; - - const uint row_x = row_dst % ne1; - const uint channel_x = row_dst / ne1; - - const uint idst = row_dst*ne0 + i0/2; - const uint ix = channel_x*p.s2 + row_x*p.s1 + i0/2; - - if (i0 >= p.n_dims) { - data_d[idst + i0/2 + 0] = data_a[ix + i0/2 + 0]; - data_d[idst + i0/2 + 1] = data_a[ix + i0/2 + 1]; - - return; - } - - const int sect_dims = p.sections[0] + p.sections[1] + p.sections[2] + p.sections[3]; - const int sec_w = p.sections[1] + p.sections[0]; - const uint sector = (i0 / 2) % sect_dims; - - float theta_base = 0.0; - if (p.is_imrope != 0) { - if (sector % 3 == 1 && sector < 3 * p.sections[1]) { - theta_base = data_pos[channel_x + ne2 * 1]*pow(p.theta_scale, i0/2.0f); - } else if (sector % 3 == 2 && sector < 3 * p.sections[2]) { - theta_base = data_pos[channel_x + ne2 * 2]*pow(p.theta_scale, i0/2.0f); - } else if (sector % 3 == 0 && sector < 3 * p.sections[0]) { - theta_base = data_pos[channel_x]*pow(p.theta_scale, i0/2.0f); - } else { - theta_base = data_pos[channel_x + ne2 * 3]*pow(p.theta_scale, i0/2.0f); - } - } else { - if (sector < p.sections[0]) { - theta_base = data_pos[channel_x]*pow(p.theta_scale, i0/2.0f); - } - else if (sector >= p.sections[0] && sector < sec_w) { - theta_base = data_pos[channel_x + ne2 * 1]*pow(p.theta_scale, i0/2.0f); - } - else if (sector >= sec_w && sector < sec_w + p.sections[2]) { - theta_base = data_pos[channel_x + ne2 * 2]*pow(p.theta_scale, i0/2.0f); - } - else if (sector >= sec_w + p.sections[2]) { - theta_base = data_pos[channel_x + ne2 * 3]*pow(p.theta_scale, i0/2.0f); - } - } - - const float freq_factor = p.has_ff != 0 ? data_ff[i0/2] : 1.0f; - - float cos_theta, sin_theta; - rope_yarn(theta_base / freq_factor, i0, cos_theta, sin_theta); - - const float x0 = float(data_a[ix + 0]); - const float x1 = float(data_a[ix + p.n_dims/2]); - - data_d[idst + 0] = D_TYPE(x0*cos_theta - x1*sin_theta); - data_d[idst + p.n_dims/2] = D_TYPE(x0*sin_theta + x1*cos_theta); + // i1 is actually i2*nb2+i1, but the rows are contiguous + const uint i1 = gl_GlobalInvocationID.x; + rope_multi(i0, i1, pc); } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/rope_neox.comp b/ggml/src/ggml-vulkan/vulkan-shaders/rope_neox.comp index 9f4538155a..68f00c180b 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/rope_neox.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/rope_neox.comp @@ -1,48 +1,11 @@ #version 450 #include "rope_head.glsl" +#include "rope_funcs.glsl" void main() { const uint i0 = 2*gl_GlobalInvocationID.y; - uint ne0 = p.ncols; - uint ne1 = p.p_delta_rows; - - if (i0 >= ne0) { - return; - } - - const uint row_dst = gl_GlobalInvocationID.x; - - const uint row_x = row_dst % ne1; - const uint channel_x = row_dst / ne1; - - uint idst = row_dst*ne0 + i0/2; - const uint ix = channel_x*p.s2 + row_x*p.s1 + i0/2; - - // Fusion optimization: ROPE + VIEW + SET_ROWS.. - // The rope output is viewed as a 1D tensor and offset based on a row index in data_i. - if (p.set_rows_stride != 0) { - idst = row_x*ne0 + i0/2; - idst += data_i[channel_x].x * p.set_rows_stride; - } - - if (i0 >= p.n_dims) { - data_d[idst + i0/2 + 0] = D_TYPE(data_a[ix + i0/2 + 0]); - data_d[idst + i0/2 + 1] = D_TYPE(data_a[ix + i0/2 + 1]); - - return; - } - - const float theta_base = data_pos[channel_x] * pow(p.theta_scale, i0/2.0f); - - const float freq_factor = p.has_ff != 0 ? data_ff[i0/2] : 1.0f; - - float cos_theta, sin_theta; - rope_yarn(theta_base / freq_factor, i0, cos_theta, sin_theta); - - const float x0 = float(data_a[ix + 0]); - const float x1 = float(data_a[ix + p.n_dims/2]); - - data_d[idst + 0] = D_TYPE(x0*cos_theta - x1*sin_theta); - data_d[idst + p.n_dims/2] = D_TYPE(x0*sin_theta + x1*cos_theta); + // i1 is actually i2*nb2+i1, but the rows are contiguous + const uint i1 = gl_GlobalInvocationID.x; + rope_neox(i0, i1, pc); } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/rope_norm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/rope_norm.comp index f4209ed958..28a939ec6a 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/rope_norm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/rope_norm.comp @@ -1,48 +1,11 @@ #version 450 #include "rope_head.glsl" +#include "rope_funcs.glsl" void main() { const uint i0 = 2*gl_GlobalInvocationID.y; - uint ne0 = p.ncols; - uint ne1 = p.p_delta_rows; - - if (i0 >= ne0) { - return; - } - - const uint row_dst = gl_GlobalInvocationID.x; - - const uint row_x = row_dst % ne1; - const uint channel_x = row_dst / ne1; - - uint idst = row_dst*ne0 + i0; - const uint ix = channel_x*p.s2 + row_x*p.s1 + i0; - - // Fusion optimization: ROPE + VIEW + SET_ROWS.. - // The rope output is viewed as a 1D tensor and offset based on a row index in data_i. - if (p.set_rows_stride != 0) { - idst = row_x*ne0 + i0; - idst += data_i[channel_x].x * p.set_rows_stride; - } - - if (i0 >= p.n_dims) { - data_d[idst + 0] = D_TYPE(data_a[ix + 0]); - data_d[idst + 1] = D_TYPE(data_a[ix + 1]); - - return; - } - - const float theta_base = data_pos[channel_x] * pow(p.theta_scale, i0/2.0f); - - const float freq_factor = p.has_ff != 0 ? data_ff[i0/2] : 1.0f; - - float cos_theta, sin_theta; - rope_yarn(theta_base / freq_factor, i0, cos_theta, sin_theta); - - const float x0 = float(data_a[ix + 0]); - const float x1 = float(data_a[ix + 1]); - - data_d[idst + 0] = D_TYPE(x0*cos_theta - x1*sin_theta); - data_d[idst + 1] = D_TYPE(x0*sin_theta + x1*cos_theta); + // i1 is actually i2*nb2+i1, but the rows are contiguous + const uint i1 = gl_GlobalInvocationID.x; + rope_norm(i0, i1, pc); } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/rope_params.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/rope_params.glsl new file mode 100644 index 0000000000..82f39cee34 --- /dev/null +++ b/ggml/src/ggml-vulkan/vulkan-shaders/rope_params.glsl @@ -0,0 +1,27 @@ +#if !defined(GGML_ROPE_PARAMS) +#define GGML_ROPE_PARAMS + +#include "rte.glsl" + +struct rope_params { + uint rope_mode; + uint ncols; + uint n_dims; + float freq_scale; + uint p_delta_rows; + float freq_base; + float ext_factor; + float attn_factor; + float corr_dims[2]; + float theta_scale; + uint has_ff; + uint ne02; + uint nb01; + uint nb02; + int sections[4]; + uint is_imrope; + uint is_back; + uint set_rows_stride; +}; + +#endif // !defined(GGML_ROPE_PARAMS) diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/rope_vision.comp b/ggml/src/ggml-vulkan/vulkan-shaders/rope_vision.comp index d37d1c1043..ea1e0fdb41 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/rope_vision.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/rope_vision.comp @@ -1,47 +1,11 @@ #version 450 #include "rope_head.glsl" +#include "rope_funcs.glsl" void main() { const uint i0 = 2*gl_GlobalInvocationID.y; - uint ne0 = p.ncols; - uint ne1 = p.p_delta_rows; - uint ne2 = p.ne02; - - if (i0 >= ne0) { - return; - } - - const uint row_dst = gl_GlobalInvocationID.x; - - const uint row_x = row_dst % ne1; - const uint channel_x = row_dst / ne1; - - const uint idst = row_dst*ne0 + i0/2; - const uint ix = channel_x*p.s2 + row_x*p.s1 + i0/2; - - const int sect_dims = p.sections[0] + p.sections[1]; - const int sec_w = p.sections[1] + p.sections[0]; - const uint sector = (i0 / 2) % sect_dims; - - float theta_base = 0.0; - if (sector < p.sections[0]) { - const uint p0 = sector; - theta_base = data_pos[channel_x]*pow(p.theta_scale, p0); - } - else if (sector >= p.sections[0] && sector < sec_w) { - const uint p0 = sector - p.sections[0]; - theta_base = data_pos[channel_x + ne2]*pow(p.theta_scale, p0); - } - - const float freq_factor = p.has_ff != 0 ? data_ff[i0/2] : 1.0f; - - float cos_theta, sin_theta; - rope_yarn(theta_base / freq_factor, i0, cos_theta, sin_theta); - - const float x0 = float(data_a[ix + 0]); - const float x1 = float(data_a[ix + p.n_dims]); - - data_d[idst + 0] = D_TYPE(x0*cos_theta - x1*sin_theta); - data_d[idst + p.n_dims] = D_TYPE(x0*sin_theta + x1*cos_theta); + // i1 is actually i2*nb2+i1, but the rows are contiguous + const uint i1 = gl_GlobalInvocationID.x; + rope_vision(i0, i1, pc); } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index bd178875d5..c2e42cf006 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -695,6 +695,8 @@ void process_shaders() { string_to_spv("group_norm_f32", "group_norm.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"D_TYPE", "float"}})); string_to_spv("rms_norm_f32", "rms_norm.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}})); string_to_spv("rms_norm_partials_f32", "rms_norm_partials.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}})); + string_to_spv("rms_norm_mul_rope_f32_f32", "rms_norm.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"ROPE_D_TYPE", "float"}, {"RMS_NORM_ROPE_FUSION", "1"}})); + string_to_spv("rms_norm_mul_rope_f32_f16_rte", "rms_norm.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}, {"ROPE_D_TYPE", "float16_t"}, {"RMS_NORM_ROPE_FUSION", "1"}, {"RTE16", "1"}})); string_to_spv("rms_norm_back_f32", "rms_norm_back.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}})); string_to_spv("l2_norm_f32", "l2_norm.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"D_TYPE", "float"}})); @@ -840,25 +842,25 @@ void process_shaders() { string_to_spv("soft_max_f32_f16", "soft_max.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float16_t"}, {"D_TYPE", "float"}})); string_to_spv("soft_max_back_f32", "soft_max_back.comp", merge_maps(base_dict, {{"A_TYPE", "float"}, {"B_TYPE", "float"}, {"D_TYPE", "float"}})); - string_to_spv("rope_norm_f32", "rope_norm.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float"}}); - string_to_spv("rope_norm_f16", "rope_norm.comp", {{"A_TYPE", "float16_t"}, {"D_TYPE", "float16_t"}}); - string_to_spv("rope_norm_f16_rte", "rope_norm.comp", {{"A_TYPE", "float16_t"}, {"D_TYPE", "float16_t"}, {"RTE16", "1"}}); - string_to_spv("rope_norm_f32_f16", "rope_norm.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float16_t"}}); - string_to_spv("rope_norm_f32_f16_rte", "rope_norm.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float16_t"}, {"RTE16", "1"}}); + string_to_spv("rope_norm_f32", "rope_norm.comp", {{"A_TYPE", "float"}, {"ROPE_D_TYPE", "float"}}); + string_to_spv("rope_norm_f16", "rope_norm.comp", {{"A_TYPE", "float16_t"}, {"ROPE_D_TYPE", "float16_t"}}); + string_to_spv("rope_norm_f16_rte", "rope_norm.comp", {{"A_TYPE", "float16_t"}, {"ROPE_D_TYPE", "float16_t"}, {"RTE16", "1"}}); + string_to_spv("rope_norm_f32_f16", "rope_norm.comp", {{"A_TYPE", "float"}, {"ROPE_D_TYPE", "float16_t"}}); + string_to_spv("rope_norm_f32_f16_rte", "rope_norm.comp", {{"A_TYPE", "float"}, {"ROPE_D_TYPE", "float16_t"}, {"RTE16", "1"}}); - string_to_spv("rope_neox_f32", "rope_neox.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float"}}); - string_to_spv("rope_neox_f16", "rope_neox.comp", {{"A_TYPE", "float16_t"}, {"D_TYPE", "float16_t"}}); - string_to_spv("rope_neox_f16_rte", "rope_neox.comp", {{"A_TYPE", "float16_t"}, {"D_TYPE", "float16_t"}, {"RTE16", "1"}}); - string_to_spv("rope_neox_f32_f16", "rope_neox.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float16_t"}}); - string_to_spv("rope_neox_f32_f16_rte", "rope_neox.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float16_t"}, {"RTE16", "1"}}); + string_to_spv("rope_neox_f32", "rope_neox.comp", {{"A_TYPE", "float"}, {"ROPE_D_TYPE", "float"}}); + string_to_spv("rope_neox_f16", "rope_neox.comp", {{"A_TYPE", "float16_t"}, {"ROPE_D_TYPE", "float16_t"}}); + string_to_spv("rope_neox_f16_rte", "rope_neox.comp", {{"A_TYPE", "float16_t"}, {"ROPE_D_TYPE", "float16_t"}, {"RTE16", "1"}}); + string_to_spv("rope_neox_f32_f16", "rope_neox.comp", {{"A_TYPE", "float"}, {"ROPE_D_TYPE", "float16_t"}}); + string_to_spv("rope_neox_f32_f16_rte", "rope_neox.comp", {{"A_TYPE", "float"}, {"ROPE_D_TYPE", "float16_t"}, {"RTE16", "1"}}); - string_to_spv("rope_multi_f32", "rope_multi.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float"}}); - string_to_spv("rope_multi_f16", "rope_multi.comp", {{"A_TYPE", "float16_t"}, {"D_TYPE", "float16_t"}}); - string_to_spv("rope_multi_f16_rte", "rope_multi.comp", {{"A_TYPE", "float16_t"}, {"D_TYPE", "float16_t"}, {"RTE16", "1"}}); + string_to_spv("rope_multi_f32", "rope_multi.comp", {{"A_TYPE", "float"}, {"ROPE_D_TYPE", "float"}}); + string_to_spv("rope_multi_f16", "rope_multi.comp", {{"A_TYPE", "float16_t"}, {"ROPE_D_TYPE", "float16_t"}}); + string_to_spv("rope_multi_f16_rte", "rope_multi.comp", {{"A_TYPE", "float16_t"}, {"ROPE_D_TYPE", "float16_t"}, {"RTE16", "1"}}); - string_to_spv("rope_vision_f32", "rope_vision.comp", {{"A_TYPE", "float"}, {"D_TYPE", "float"}}); - string_to_spv("rope_vision_f16", "rope_vision.comp", {{"A_TYPE", "float16_t"}, {"D_TYPE", "float16_t"}}); - string_to_spv("rope_vision_f16_rte", "rope_vision.comp", {{"A_TYPE", "float16_t"}, {"D_TYPE", "float16_t"}, {"RTE16", "1"}}); + string_to_spv("rope_vision_f32", "rope_vision.comp", {{"A_TYPE", "float"}, {"ROPE_D_TYPE", "float"}}); + string_to_spv("rope_vision_f16", "rope_vision.comp", {{"A_TYPE", "float16_t"}, {"ROPE_D_TYPE", "float16_t"}}); + string_to_spv("rope_vision_f16_rte", "rope_vision.comp", {{"A_TYPE", "float16_t"}, {"ROPE_D_TYPE", "float16_t"}, {"RTE16", "1"}}); string_to_spv("argsort_f32", "argsort.comp", {{"A_TYPE", "float"}}); diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index b9ae82eedd..80216f6f3a 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -2294,6 +2294,79 @@ struct test_rope_set_rows : public test_case { } }; +// GGML_OP_RMS_NORM + GGML_OP_MUL + GGML_OP_ROPE (+ GGML_OP_VIEW + GGML_OP_SET_ROWS) +struct test_rms_norm_mul_rope : public test_case { + const std::array ne; + const float eps; + const bool multi_add; // test a sequence of adds feeding into rms_norm + const bool set_rows; + int mode; + + std::string op_desc(ggml_tensor * t) override { + GGML_UNUSED(t); + return "RMS_NORM_MUL_ROPE"; + } + + bool run_whole_graph() override { return true; } + + std::string vars() override { + return VARS_TO_STR5(ne, eps, multi_add, set_rows, mode); + } + + test_rms_norm_mul_rope(std::array ne, float eps = 1e-6f, bool multi_add = false, + bool set_rows = false, int mode = GGML_ROPE_TYPE_NORMAL) + : ne(ne), eps(eps), multi_add(multi_add), set_rows(set_rows), mode(mode) {} + + ggml_tensor * build_graph(ggml_context * ctx) override { + ggml_tensor * a = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, ne[0], ne[1], ne[2], 1); + ggml_tensor * b = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, ne[0], ne[1], ne[2], 1); + ggml_tensor * c = ggml_new_tensor_4d(ctx, GGML_TYPE_F32, ne[0], ne[1], ne[2], 1); + + if (multi_add) { + a = ggml_add(ctx, ggml_add(ctx, a, b), c); + } + + a = ggml_mul(ctx, ggml_rms_norm(ctx, a, eps), b); + + ggml_tensor * pos = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, ne[2]); + + ggml_tensor * rope = ggml_rope(ctx, a, pos, ne[0], mode); + + ggml_tensor * out; + + if (set_rows) { + ggml_tensor * view = ggml_view_2d(ctx, rope, ne[0] * ne[1], ne[2], rope->nb[2], 0); + + ggml_tensor * dst = ggml_new_tensor_4d(ctx, GGML_TYPE_F16, ne[0] * ne[1], ne[2] * ne[3], 1, 1); + ggml_set_name(dst, "dst"); + + ggml_tensor * row_idxs = ggml_new_tensor_3d(ctx, GGML_TYPE_I64, ne[2], 1, 1); + ggml_set_name(row_idxs, "row_idxs"); + + out = ggml_set_rows(ctx, dst, view, row_idxs); + ggml_set_name(out, "out"); + } else { + out = rope; + } + + return out; + } + + void initialize_tensors(ggml_context * ctx) override { + for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) { + if (t->type == GGML_TYPE_I64 || t->type == GGML_TYPE_I32) { + if (ggml_is_view_op(t->op)) { + continue; + } + + init_set_rows_row_ids(t, ne[2]); + } else { + init_tensor_uniform(t); + } + } + } +}; + // GGML_OP_ARGMAX struct test_argmax : public test_case { const ggml_type type; @@ -6751,6 +6824,22 @@ static std::vector> make_test_cases_eval() { } } + for (auto multi_add : {false, true}) { + for (auto set_rows : {false, true}) { + for (auto rope : {GGML_ROPE_TYPE_NORMAL, GGML_ROPE_TYPE_NEOX}) { + test_cases.emplace_back(new test_rms_norm_mul_rope({768, 1, 1, 1}, 1e-6f, multi_add, set_rows, rope)); + test_cases.emplace_back(new test_rms_norm_mul_rope({768, 3, 1, 1}, 1e-6f, multi_add, set_rows, rope)); + test_cases.emplace_back(new test_rms_norm_mul_rope({768, 3, 5, 1}, 1e-6f, multi_add, set_rows, rope)); + test_cases.emplace_back(new test_rms_norm_mul_rope({128, 32, 2, 1}, 1e-6f, multi_add, set_rows, rope)); + test_cases.emplace_back(new test_rms_norm_mul_rope({128, 4, 2, 1}, 1e-6f, multi_add, set_rows, rope)); + test_cases.emplace_back(new test_rms_norm_mul_rope({128, 32, 50, 1}, 1e-6f, multi_add, set_rows, rope)); + test_cases.emplace_back(new test_rms_norm_mul_rope({128, 4, 50, 1}, 1e-6f, multi_add, set_rows, rope)); + test_cases.emplace_back(new test_rms_norm_mul_rope({8192, 2, 2, 1}, 1e-6f, multi_add, set_rows, rope)); + test_cases.emplace_back(new test_rms_norm_mul_rope({8192, 2, 2, 1}, 1e-6f, multi_add, set_rows, rope)); + } + } + } + test_cases.emplace_back(new test_l2_norm(GGML_TYPE_F32, {64, 5, 4, 3}, 1e-12f)); for (int64_t d_conv : {3, 4}) { From 08416ebe7f7c0f344ada15489730d69eda096304 Mon Sep 17 00:00:00 2001 From: Aleksei Nikiforov <103434461+AlekseiNikiforovIBM@users.noreply.github.com> Date: Sat, 8 Nov 2025 09:00:20 +0100 Subject: [PATCH 26/69] ggml: disable vxe for cross-compilation by default (#16966) Otherwise compilation will fail due to enabling -mvx -mzvector and not setting corresponding -march options. --- ggml/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index 181f179ed1..869796f0e3 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -168,7 +168,7 @@ option(GGML_RV_ZFH "ggml: enable riscv zfh" ON) option(GGML_RV_ZVFH "ggml: enable riscv zvfh" ON) option(GGML_RV_ZICBOP "ggml: enable riscv zicbop" ON) option(GGML_XTHEADVECTOR "ggml: enable xtheadvector" OFF) -option(GGML_VXE "ggml: enable vxe" ON) +option(GGML_VXE "ggml: enable vxe" ${GGML_NATIVE}) option(GGML_CPU_ALL_VARIANTS "ggml: build all variants of the CPU backend (requires GGML_BACKEND_DL)" OFF) set(GGML_CPU_ARM_ARCH "" CACHE STRING "ggml: CPU architecture for ARM") From b8a5cfd11abc066f165e924136d0fa1db44d2b95 Mon Sep 17 00:00:00 2001 From: SavicStefan <50296686+SavicStefan@users.noreply.github.com> Date: Sat, 8 Nov 2025 09:28:22 +0100 Subject: [PATCH 27/69] vulkan: Increase BK to 32; use BK/4 for non-CM mul_mm.comp (#16636) Signed-off-by: Stefan Savic Co-authored-by: Stefan Savic --- .../ggml-vulkan/vulkan-shaders/mul_mm.comp | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp index d260969f07..5c5251da39 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm.comp @@ -100,7 +100,6 @@ layout (push_constant) uniform parameter layout (constant_id = 0) const uint BLOCK_SIZE = 64; layout (constant_id = 1) const uint BM = 64; layout (constant_id = 2) const uint BN = 64; -layout (constant_id = 3) const uint BK = 16; // Assumed to be 32 if working with a quant layout (constant_id = 4) const uint WM = 32; layout (constant_id = 5) const uint WN = 32; layout (constant_id = 6) const uint WMITER = 2; @@ -109,6 +108,14 @@ layout (constant_id = 8) const uint TN = 2; layout (constant_id = 9) const uint TK = 1; // Only needed for coopmat layout (constant_id = 10) const uint WARP = 32; +#if defined(DATA_A_F32) || defined(DATA_A_F16) +#define BK 32 +#define BK_STEP 4 +#else +layout (constant_id = 3) const uint BK = 16; // Assumed to be 32 if working with a quant +#define BK_STEP 2 +#endif + #ifdef COOPMAT #define SHMEM_STRIDE (BK / 2 + 4) #else @@ -244,8 +251,13 @@ void main() { } #else ACC_TYPE_VEC2 sums[WMITER * TM * WNITER * TN/2]; +#if defined(DATA_A_F32) || defined(DATA_A_F16) + FLOAT_TYPE_VEC4 cache_a[WMITER * TM]; + FLOAT_TYPE_VEC4 cache_b; +#else FLOAT_TYPE_VEC2 cache_a[WMITER * TM]; FLOAT_TYPE_VEC2 cache_b; +#endif [[unroll]] for (uint i = 0; i < WMITER*TM*WNITER*TN/2; i++) { sums[i] = ACC_TYPE_VEC2(0.0f, 0.0f); @@ -283,24 +295,41 @@ void main() { } } #else - [[unroll]] for (uint i = 0; i < BK / 2; i++) { + [[unroll]] for (uint i = 0; i < BK / BK_STEP; i++) { // Load from shared into cache [[unroll]] for (uint wsir = 0; wsir < WMITER; wsir++) { [[unroll]] for (uint j = 0; j < TM; j++) { + #if defined(DATA_A_F32) || defined(DATA_A_F16) + cache_a[wsir * TM + j].xy = buf_a[(warp_r * WM + wsir * WSUBM + tiwr * TM + j) * SHMEM_STRIDE + 2 * i ]; + cache_a[wsir * TM + j].zw = buf_a[(warp_r * WM + wsir * WSUBM + tiwr * TM + j) * SHMEM_STRIDE + 2 * i + 1]; + #else cache_a[wsir * TM + j] = buf_a[(warp_r * WM + wsir * WSUBM + tiwr * TM + j) * SHMEM_STRIDE + i]; + #endif } } [[unroll]] for (uint wsic = 0; wsic < WNITER; wsic++) { [[unroll]] for (uint cc = 0; cc < TN; cc++) { + #if defined(DATA_A_F32) || defined(DATA_A_F16) + cache_b.xy = buf_b[(warp_c * WN + wsic * WSUBN + tiwc * TN + cc) * SHMEM_STRIDE + 2 * i ]; + cache_b.zw = buf_b[(warp_c * WN + wsic * WSUBN + tiwc * TN + cc) * SHMEM_STRIDE + 2 * i + 1]; + #else cache_b = buf_b[(warp_c * WN + wsic * WSUBN + tiwc * TN + cc) * SHMEM_STRIDE + i]; + #endif [[unroll]] for (uint wsir = 0; wsir < WMITER; wsir++) { [[unroll]] for (uint cr = 0; cr < TM / 2; cr++) { // [WNITER][TN][WMITER][TM / 2] -> [wsic][cc][wsir][cr] const uint sums_idx = (wsic * TN + cc) * WMITER * (TM / 2) + wsir * (TM / 2) + cr; + #if defined(DATA_A_F32) || defined(DATA_A_F16) + sums[sums_idx].x = fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].x), ACC_TYPE(cache_b.x), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].y), ACC_TYPE(cache_b.y), + fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].z), ACC_TYPE(cache_b.z), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].w), ACC_TYPE(cache_b.w), sums[sums_idx].x)))); + sums[sums_idx].y = fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].x), ACC_TYPE(cache_b.x), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].y), ACC_TYPE(cache_b.y), + fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].z), ACC_TYPE(cache_b.z), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].w), ACC_TYPE(cache_b.w), sums[sums_idx].y)))); + #else sums[sums_idx].x = fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].x), ACC_TYPE(cache_b.x), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr ].y), ACC_TYPE(cache_b.y), sums[sums_idx].x)); sums[sums_idx].y = fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].x), ACC_TYPE(cache_b.x), fma(ACC_TYPE(cache_a[wsir * TM + 2 * cr + 1].y), ACC_TYPE(cache_b.y), sums[sums_idx].y)); + #endif } } } From c1b187688dac5e0f12cb38a63515aa20732d15a8 Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Sat, 8 Nov 2025 16:58:05 +0800 Subject: [PATCH 28/69] CUDA: skip fusion for repeating adds in bias (#17080) --- ggml/src/ggml-cuda/CMakeLists.txt | 1 + ggml/src/ggml-cuda/ggml-cuda.cu | 13 +++++++++++-- tests/test-backend-ops.cpp | 10 ++++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/ggml/src/ggml-cuda/CMakeLists.txt b/ggml/src/ggml-cuda/CMakeLists.txt index 3024775135..67af1d8ccc 100644 --- a/ggml/src/ggml-cuda/CMakeLists.txt +++ b/ggml/src/ggml-cuda/CMakeLists.txt @@ -124,6 +124,7 @@ if (CUDAToolkit_FOUND) if (GGML_CUDA_DEBUG) list(APPEND CUDA_FLAGS -lineinfo) + add_compile_definitions(GGML_CUDA_DEBUG) endif() if (CUDAToolkit_VERSION VERSION_GREATER_EQUAL "12.8") diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 049aece1b5..2d4314fba4 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -3152,8 +3152,6 @@ static void evaluate_and_capture_cuda_graph(ggml_backend_cuda_context * cuda_ctx for (int i = 0; i < cgraph->n_nodes; i++) { ggml_tensor * node = cgraph->nodes[i]; - - #ifdef GGML_CUDA_DEBUG const int nodes_fused = i - prev_i - 1; prev_i = i; @@ -3302,6 +3300,13 @@ static void evaluate_and_capture_cuda_graph(ggml_backend_cuda_context * cuda_ctx continue; } + // we don't support repeating adds + if (bias_op == GGML_OP_ADD && + (!ggml_are_same_shape(gate_bias_n->src[0], gate_bias_n->src[1]) || + !ggml_are_same_shape(up_bias_n->src[0], up_bias_n->src[1]))) { + continue; + } + const ggml_tensor * src0 = up_n->src[0]; const ggml_tensor * src1 = up_n->src[1]; const ggml_tensor * ids = up_n->src[2]; @@ -3411,6 +3416,10 @@ static void evaluate_and_capture_cuda_graph(ggml_backend_cuda_context * cuda_ctx continue; } + if (bias_op == GGML_OP_ADD && !ggml_are_same_shape(bias_node->src[0], bias_node->src[1])) { + continue; + } + ggml_cuda_mm_fusion_args_host fusion_data{}; fusion_data.x_bias = bias_tensor; diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 80216f6f3a..31625bcc7a 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -4984,8 +4984,10 @@ struct test_mul_mat_vec_fusion : public test_case { ggml_tensor * build_graph(ggml_context * ctx) override { if (!use_id) { - std::array ne = {k, m, 1, 1}; - std::array ne0 = {k, n, 1, 1}; + const int channels = 4; + const int samples = 2; + std::array ne = { k, m, channels, samples }; + std::array ne0 = { k, n, channels, samples }; ggml_tensor * cur = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, ne.data()); ggml_tensor * gate = with_gate ? ggml_new_tensor(ctx, type, 4, ne0.data()) : nullptr; @@ -4993,14 +4995,14 @@ struct test_mul_mat_vec_fusion : public test_case { ggml_tensor * ffn_up = ggml_mul_mat(ctx, up, cur); if (with_bias) { - std::array bias_ne = {ffn_up->ne[0], 1, 1, 1}; + std::array bias_ne = { ffn_up->ne[0], 1, channels, samples }; ggml_tensor * up_bias = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, bias_ne.data()); ffn_up = ggml_add(ctx, ffn_up, up_bias); } ggml_tensor * ffn_gate = with_gate ? ggml_mul_mat(ctx, gate, cur) : nullptr; if (with_bias && with_gate) { - std::array bias_ne = {ffn_gate->ne[0], 1, 1, 1}; + std::array bias_ne = { ffn_gate->ne[0], 1, channels, samples }; ggml_tensor * gate_bias = ggml_new_tensor(ctx, GGML_TYPE_F32, 4, bias_ne.data()); ffn_gate = ggml_add(ctx, ffn_gate, gate_bias); } From 64fe17fbb84f493dbc33e4c13042953c4f5bfaeb Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Sat, 8 Nov 2025 21:05:19 +0800 Subject: [PATCH 29/69] Revert "CUDA: add expert reduce kernel (#16857)" (#17100) --- ggml/src/ggml-cuda/ggml-cuda.cu | 26 ---- ggml/src/ggml-cuda/moe-expert-reduce.cu | 168 ----------------------- ggml/src/ggml-cuda/moe-expert-reduce.cuh | 11 -- tests/test-backend-ops.cpp | 58 -------- 4 files changed, 263 deletions(-) delete mode 100644 ggml/src/ggml-cuda/moe-expert-reduce.cu delete mode 100644 ggml/src/ggml-cuda/moe-expert-reduce.cuh diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 2d4314fba4..68dc57843e 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -27,7 +27,6 @@ #include "ggml-cuda/mmq.cuh" #include "ggml-cuda/mmvf.cuh" #include "ggml-cuda/mmvq.cuh" -#include "ggml-cuda/moe-expert-reduce.cuh" #include "ggml-cuda/norm.cuh" #include "ggml-cuda/opt-step-adamw.cuh" #include "ggml-cuda/opt-step-sgd.cuh" @@ -3197,31 +3196,6 @@ static void evaluate_and_capture_cuda_graph(ggml_backend_cuda_context * cuda_ctx continue; } - if (node->op == GGML_OP_MUL) { - int current_node = i + 1; - int num_views = 0; - int num_adds = 0; - while (current_node < cgraph->n_nodes && cgraph->nodes[current_node]->op == GGML_OP_VIEW) { - num_views++; - current_node++; - } - - while (current_node < cgraph->n_nodes && cgraph->nodes[current_node]->op == GGML_OP_ADD && - num_adds < num_views - 1) { - num_adds++; - current_node++; - } - - if (num_adds == num_views - 1 && num_views > 0) { - ggml_tensor * dst_node = cgraph->nodes[current_node - 1]; - if (ggml_cuda_should_use_moe_expert_reduce(cgraph, i, current_node)) { - ggml_cuda_op_moe_expert_reduce(*cuda_ctx, node->src[0], node->src[1], dst_node); - i += num_views + num_adds; - continue; - } - } - } - if (node->op == GGML_OP_ADD) { int n_fuse = 0; ggml_op ops[8]; diff --git a/ggml/src/ggml-cuda/moe-expert-reduce.cu b/ggml/src/ggml-cuda/moe-expert-reduce.cu deleted file mode 100644 index a97c5d573b..0000000000 --- a/ggml/src/ggml-cuda/moe-expert-reduce.cu +++ /dev/null @@ -1,168 +0,0 @@ -#include "moe-expert-reduce.cuh" - -// This kernel is a fusion of the expert weight reduce, common in MoE models - -template -__global__ void moe_expert_reduce_cuda(const float * __restrict__ experts, - const float * __restrict__ weights, - float * __restrict__ dst, - const int n_expert_used, - const int n_cols) { - const int row = blockIdx.x; - const int col = blockIdx.y * blockDim.x + threadIdx.x; - if (col >= n_cols) { - return; - } - - experts += row * n_cols * n_expert_used; - weights += row * n_expert_used; - dst += row * n_cols; - - float acc = 0.f; - if constexpr (n_expert_used_template == 0) { - for (int expert = 0; expert < n_expert_used; ++expert) { - ggml_cuda_mad(acc, experts[col], weights[expert]); - experts += n_cols; - } - dst[col] = acc; - } else { -#pragma unroll - for (int i = 0; i < n_expert_used_template; ++i) { - ggml_cuda_mad(acc, experts[col], weights[i]); - experts += n_cols; - } - dst[col] = acc; - } -} - -static void launch_moe_expert_reduce(ggml_backend_cuda_context & ctx, - const float * experts, - const float * weights, - float * dst, - const int n_expert_used, - const int n_cols, - const int n_rows) { - const int block_size = 32; - - const int n_blocks_x = n_rows; - const int n_blocks_y = (n_cols + block_size - 1) / block_size; - - dim3 block_dims(block_size); - dim3 grid_dims(n_blocks_x, n_blocks_y); - - cudaStream_t stream = ctx.stream(); - switch (n_expert_used) { - case 1: - moe_expert_reduce_cuda<1> - <<>>(experts, weights, dst, n_expert_used, n_cols); - break; - case 2: - moe_expert_reduce_cuda<2> - <<>>(experts, weights, dst, n_expert_used, n_cols); - break; - case 4: - moe_expert_reduce_cuda<4> - <<>>(experts, weights, dst, n_expert_used, n_cols); - break; - case 6: - moe_expert_reduce_cuda<6> - <<>>(experts, weights, dst, n_expert_used, n_cols); - break; - case 8: - moe_expert_reduce_cuda<8> - <<>>(experts, weights, dst, n_expert_used, n_cols); - break; - case 16: - moe_expert_reduce_cuda<16> - <<>>(experts, weights, dst, n_expert_used, n_cols); - break; - case 32: - moe_expert_reduce_cuda<32> - <<>>(experts, weights, dst, n_expert_used, n_cols); - break; - case 64: - moe_expert_reduce_cuda<64> - <<>>(experts, weights, dst, n_expert_used, n_cols); - break; - case 128: - moe_expert_reduce_cuda<128> - <<>>(experts, weights, dst, n_expert_used, n_cols); - break; - default: - moe_expert_reduce_cuda<0> - <<>>(experts, weights, dst, n_expert_used, n_cols); - break; - } -} - -bool ggml_cuda_should_use_moe_expert_reduce(const ggml_cgraph * cgraph, int start_index, int end_index) { - const ggml_tensor * mul = cgraph->nodes[start_index]; - - if (mul->op != GGML_OP_MUL || !ggml_is_contiguous(mul->src[0]) || !ggml_is_contiguous(mul->src[1])) { - return false; - } - - int current_node = start_index + 1; - size_t current_offset = 0; - - std::vector view_nodes; - //check if all are views of the expert in increasing order - while (current_node < end_index && cgraph->nodes[current_node]->op == GGML_OP_VIEW) { - const ggml_tensor * node = cgraph->nodes[current_node]; - if (node->view_src != mul) { - return false; - } - if (node->view_offs < current_offset) { - return false; - } - current_offset = node->view_offs; - current_node++; - view_nodes.push_back(node); - } - - //check if all the adds are in increasing order - const ggml_tensor * prev_add_src = view_nodes.empty() ? nullptr : view_nodes[0]; - int num_adds = 0; - int num_views = view_nodes.size(); - while (current_node < end_index && cgraph->nodes[current_node]->op == GGML_OP_ADD) { - const ggml_tensor * add_node = cgraph->nodes[current_node]; - - bool is_first_op_ok = num_views > num_adds ? add_node->src[0] == prev_add_src : false; - bool is_second_op_ok = num_views > num_adds ? add_node->src[1] == view_nodes[num_adds + 1] : false; - - if (!is_first_op_ok || !is_second_op_ok) { - return false; - } - prev_add_src = add_node; - - num_adds++; - current_node++; - } - - if (num_views != num_adds + 1) { - return false; - } - - return true; -} - -void ggml_cuda_op_moe_expert_reduce(ggml_backend_cuda_context & ctx, - const ggml_tensor * experts, - const ggml_tensor * weights, - ggml_tensor * dst) { - const int n_rows = experts->ne[2]; - const int n_expert_used = experts->ne[1]; - const int n_cols = experts->ne[0]; - - GGML_ASSERT(experts->type == GGML_TYPE_F32); - GGML_ASSERT(weights->type == GGML_TYPE_F32); - GGML_ASSERT(ggml_is_contiguous(experts)); - GGML_ASSERT(ggml_is_contiguous(weights)); - GGML_ASSERT(dst->type == GGML_TYPE_F32); - - const float * experts_d = (const float *) experts->data; - const float * weights_d = (const float *) weights->data; - float * dst_d = (float *) dst->data; - - launch_moe_expert_reduce(ctx, experts_d, weights_d, dst_d, n_expert_used, n_cols, n_rows); -} diff --git a/ggml/src/ggml-cuda/moe-expert-reduce.cuh b/ggml/src/ggml-cuda/moe-expert-reduce.cuh deleted file mode 100644 index cafc50e104..0000000000 --- a/ggml/src/ggml-cuda/moe-expert-reduce.cuh +++ /dev/null @@ -1,11 +0,0 @@ -#include "common.cuh" -#include "ggml.h" - -#include - -void ggml_cuda_op_moe_expert_reduce(ggml_backend_cuda_context & ctx, - const ggml_tensor * experts, - const ggml_tensor * weights, - ggml_tensor * dst); - -bool ggml_cuda_should_use_moe_expert_reduce(const ggml_cgraph * cgraph, int start_index, int end_index); diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 31625bcc7a..2470c148d6 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -4882,60 +4882,6 @@ struct test_topk_moe: public test_case { } }; -struct test_moe_expert_reduce : public test_case { - const int64_t n_embd; - const int64_t n_tokens; - const int64_t n_expert_used; - - test_moe_expert_reduce(int64_t n_embd = 64, int64_t n_tokens = 5, int64_t n_expert_used = 4) - : n_embd(n_embd), n_tokens(n_tokens), n_expert_used(n_expert_used) { - GGML_ASSERT(n_expert_used > 1); - } - - std::string vars() override { - return VARS_TO_STR3(n_embd, n_tokens, n_expert_used); - } - - std::string op_desc(ggml_tensor * t) override { - GGML_UNUSED(t); - return "MOE_EXPERT_REDUCE"; - } - - bool run_whole_graph() override { return true; } - - ggml_tensor * build_graph(ggml_context * ctx) override { - ggml_tensor * experts = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, n_embd, n_expert_used, n_tokens); - ggml_set_name(experts, "experts"); - - ggml_tensor * weights = ggml_new_tensor_3d(ctx, GGML_TYPE_F32, 1, n_expert_used, n_tokens); - ggml_set_name(weights, "weights"); - - ggml_tensor * weighted = ggml_mul(ctx, experts, weights); - ggml_set_name(weighted, "weighted_experts"); - - std::vector expert_views(n_expert_used); - for (int64_t i = 0; i < n_expert_used; ++i) { - expert_views[i] = ggml_view_2d(ctx, weighted, n_embd, n_tokens, weighted->nb[2], i * weighted->nb[1]); - - std::string name = "expert_view_" + std::to_string(i); - ggml_set_name(expert_views[i], name.c_str()); - ggml_build_forward_expand(gf, expert_views[i]); - } - - ggml_tensor * moe_out = expert_views[0]; - for (int64_t i = 1; i < n_expert_used; ++i) { - moe_out = ggml_add(ctx, moe_out, expert_views[i]); - - std::string name = "expert_add_" + std::to_string(i - 1); - ggml_set_name(moe_out, name.c_str()); - } - - ggml_set_name(moe_out, "moe_out"); - - return moe_out; - } -}; - struct test_mul_mat_vec_fusion : public test_case { const ggml_type type; const ggml_glu_op glu_op; @@ -7415,10 +7361,6 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_topk_moe({ 8, 22, 1, 1 }, 4, /*with_norm*/ false, /*delayed_softmax*/ true)); test_cases.emplace_back(new test_topk_moe({ 32, 22, 1, 1 }, 8, /*with_norm*/ false, /*delayed_softmax*/ true)); - test_cases.emplace_back(new test_moe_expert_reduce(1024, 5, 4)); - test_cases.emplace_back(new test_moe_expert_reduce(80, 3, 6)); - test_cases.emplace_back(new test_moe_expert_reduce(80, 3, 7)); - #if 0 // these tests are disabled to save execution time, sbut they can be handy for debugging test_cases.emplace_back(new test_llama(2, true)); From eeee367de51fb34d46c8103fc0ae827e84d94470 Mon Sep 17 00:00:00 2001 From: Aidan <99101158+gSUz92nc@users.noreply.github.com> Date: Sat, 8 Nov 2025 13:12:11 +0000 Subject: [PATCH 30/69] server: fix correct time_ms calculation in prompt_progress (#17093) * fix: correct time_ms calculation in send_partial_response The time_ms field was incorrectly calculated. The division was happening before the subtraction leading to incorrect values. Before: (ggml_time_us() - slot.t_start_process_prompt / 1000) After: (ggml_time_us() - slot.t_start_process_prompt) / 1000 * docs : document time_ms field in prompt_progress --- tools/server/README.md | 2 +- tools/server/server.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/server/README.md b/tools/server/README.md index 6828ef7382..8fd478eb32 100644 --- a/tools/server/README.md +++ b/tools/server/README.md @@ -512,7 +512,7 @@ These words will not be included in the completion, so make sure to add them to `timings_per_token`: Include prompt processing and text generation speed information in each response. Default: `false` -`return_progress`: Include prompt processing progress in `stream` mode. The progress will be contained inside `prompt_progress` with 3 values: `total`, `cache` and `processed`. The overall progress is `processed/total`, while the actual timed progress is `(processed-cache)/(total-cache)`. Default: `false` +`return_progress`: Include prompt processing progress in `stream` mode. The progress will be contained inside `prompt_progress` with 4 values: `total`, `cache`, `processed`, and `time_ms`. The overall progress is `processed/total`, while the actual timed progress is `(processed-cache)/(total-cache)`. The `time_ms` field contains the elapsed time in milliseconds since prompt processing started. Default: `false` `post_sampling_probs`: Returns the probabilities of top `n_probs` tokens after applying sampling chain. diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 164e8cf4e7..9d91e32d1f 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -3078,7 +3078,7 @@ struct server_context { res->progress.total = slot.task->n_tokens(); res->progress.cache = slot.n_prompt_tokens_cache; res->progress.processed = slot.prompt.tokens.size(); - res->progress.time_ms = (ggml_time_us() - slot.t_start_process_prompt / 1000); + res->progress.time_ms = (ggml_time_us() - slot.t_start_process_prompt) / 1000; } else { res->content = tkn.text_to_send; res->tokens = { tkn.tok }; From 53d7d21e6128af43020190100b7f91d7bdce93c5 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sat, 8 Nov 2025 13:24:29 -0600 Subject: [PATCH 31/69] vulkan: Use spec constants for conv2d s/d/p and kernel W/H (#16978) * vulkan: Use spec constants for conv2d s/d/p and kernel W/H Also add some additional unroll hints, which seems to help. * lock around map lookup --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 114 ++++++++++++------ .../ggml-vulkan/vulkan-shaders/conv2d_mm.comp | 75 ++++++------ 2 files changed, 118 insertions(+), 71 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 9c2aeb57f0..6da7bbd2f6 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -351,6 +351,12 @@ enum vk_conv_shapes { CONV_SHAPE_COUNT, }; +uint32_t conv_shapes_wg_denoms[][3] = { + { 128, 128, 1 }, + { 64, 32, 1 }, + { 32, 256, 1 }, +}; + enum dmmv_wg_sizes { DMMV_WG_SIZE_SUBGROUP, DMMV_WG_SIZE_LARGE, @@ -379,6 +385,18 @@ struct vk_fa_pipeline_state { } }; +struct vk_conv2d_pipeline_state { + vk_conv2d_pipeline_state(uint32_t s0, uint32_t s1, uint32_t p0, uint32_t p1, uint32_t d0, uint32_t d1, uint32_t KW, uint32_t KH) + : s0(s0), s1(s1), p0(p0), p1(p1), d0(d0), d1(d1), KW(KW), KH(KH) {} + + uint32_t s0, s1, p0, p1, d0, d1, KW, KH; + + bool operator<(const vk_conv2d_pipeline_state &b) const { + return std::tie(s0, s1, p0, p1, d0, d1, KW, KH) < + std::tie(b.s0, b.s1, b.p0, b.p1, b.d0, b.d1, b.KW, b.KH); + } +}; + enum shader_reduction_mode { SHADER_REDUCTION_MODE_SHMEM, SHADER_REDUCTION_MODE_HYBRID, @@ -675,10 +693,10 @@ struct vk_device_struct { vk_pipeline pipeline_ssm_conv_f32; vk_pipeline pipeline_opt_step_adamw_f32; vk_pipeline pipeline_opt_step_sgd_f32; - vk_pipeline pipeline_conv2d_f32[CONV_SHAPE_COUNT]; - vk_pipeline pipeline_conv2d_f16_f32[CONV_SHAPE_COUNT]; - vk_pipeline pipeline_conv_transpose_2d_f32[CONV_SHAPE_COUNT]; - vk_pipeline pipeline_conv_transpose_2d_f16_f32[CONV_SHAPE_COUNT]; + std::map pipeline_conv2d_f32[CONV_SHAPE_COUNT]; + std::map pipeline_conv2d_f16_f32[CONV_SHAPE_COUNT]; + std::map pipeline_conv_transpose_2d_f32[CONV_SHAPE_COUNT]; + std::map pipeline_conv_transpose_2d_f16_f32[CONV_SHAPE_COUNT]; vk_pipeline pipeline_conv2d_dw_whcn_f32, pipeline_conv2d_dw_whcn_f16_f32; vk_pipeline pipeline_conv2d_dw_cwhn_f32, pipeline_conv2d_dw_cwhn_f16_f32; @@ -1258,17 +1276,13 @@ struct vk_op_conv2d_push_constants { uint32_t nb2; uint32_t nb3; - // init_fastdiv_values constants for dividing by KW, KW*KH, OW, OW*OH - uint32_t KWmp; uint32_t KWL; - uint32_t KWKHmp; uint32_t KWKHL; + // init_fastdiv_values constants for dividing by OW, OW*OH uint32_t OWmp; uint32_t OWL; uint32_t OWOHmp; uint32_t OWOHL; }; template <> void init_pushconst_fastdiv(vk_op_conv2d_push_constants &p) { - // Compute magic values to divide by KW, KW*KH, OW, OW*OH - init_fastdiv_values(p.KW, p.KWmp, p.KWL); - init_fastdiv_values(p.KW*p.KH, p.KWKHmp, p.KWKHL); + // Compute magic values to divide by OW, OW*OH init_fastdiv_values(p.OW, p.OWmp, p.OWL); init_fastdiv_values(p.OW*p.OH, p.OWOHmp, p.OWOHL); } @@ -1304,23 +1318,15 @@ struct vk_op_conv_transpose_2d_push_constants { uint32_t nb2; uint32_t nb3; - // init_fastdiv_values constants for dividing by KW, KW*KH, OW, OW*OH, s0, s1 - uint32_t KWmp; uint32_t KWL; - uint32_t KWKHmp; uint32_t KWKHL; + // init_fastdiv_values constants for dividing by OW, OW*OH uint32_t OWmp; uint32_t OWL; uint32_t OWOHmp; uint32_t OWOHL; - uint32_t s0mp; uint32_t s0L; - uint32_t s1mp; uint32_t s1L; }; template <> void init_pushconst_fastdiv(vk_op_conv_transpose_2d_push_constants &p) { - // Compute magic values to divide by KW, KW*KH, OW, OW*OH, s0, s1 - init_fastdiv_values(p.KW, p.KWmp, p.KWL); - init_fastdiv_values(p.KW*p.KH, p.KWKHmp, p.KWKHL); + // Compute magic values to divide by OW, OW*OH init_fastdiv_values(p.OW, p.OWmp, p.OWL); init_fastdiv_values(p.OW*p.OH, p.OWOHmp, p.OWOHL); - init_fastdiv_values(p.s0, p.s0mp, p.s0L); - init_fastdiv_values(p.s1, p.s1mp, p.s1L); } struct vk_op_conv2d_dw_push_constants { @@ -3858,22 +3864,22 @@ static void ggml_vk_load_shaders(vk_device& device) { switch (s) { default: case CONV_SHAPE_128x128: - conv2d_BS_K = 128; - conv2d_BS_NPQ = 128; + conv2d_BS_K = conv_shapes_wg_denoms[CONV_SHAPE_128x128][0]; + conv2d_BS_NPQ = conv_shapes_wg_denoms[CONV_SHAPE_128x128][1]; conv2d_BS_CRS = 16; if (device->vendor_id == VK_VENDOR_ID_AMD && device->architecture != vk_device_architecture::AMD_GCN) { conv2d_UNROLL = false; } break; case CONV_SHAPE_64x32: - conv2d_BS_K = 64; - conv2d_BS_NPQ = 32; + conv2d_BS_K = conv_shapes_wg_denoms[CONV_SHAPE_64x32][0]; + conv2d_BS_NPQ = conv_shapes_wg_denoms[CONV_SHAPE_64x32][1]; conv2d_BS_CRS = 32; conv2d_TS_K = 4; break; case CONV_SHAPE_32x256: - conv2d_BS_K = 32; - conv2d_BS_NPQ = 256; + conv2d_BS_K = conv_shapes_wg_denoms[CONV_SHAPE_32x256][0]; + conv2d_BS_NPQ = conv_shapes_wg_denoms[CONV_SHAPE_32x256][1]; conv2d_BS_CRS = 16; break; } @@ -3907,10 +3913,22 @@ static void ggml_vk_load_shaders(vk_device& device) { std::vector spec_constants = { conv2d_WG_SIZE, conv2d_BS_K, conv2d_BS_CRS, conv2d_BS_NPQ, conv2d_TS_K, use_collectives, conv2d_SHMEM_PAD }; #define CREATE_CONV(name, type_suffix, spv_suffix) \ - ggml_vk_create_pipeline( \ - device, device->pipeline_##name##type_suffix[s], #name #type_suffix, \ - name##type_suffix##spv_suffix##_len, name##type_suffix##spv_suffix##_data, "main", 3, \ - sizeof(vk_op_##name##_push_constants), wg_denoms, spec_constants, 1, true, use_collectives); + for (auto &c : device->pipeline_##name##type_suffix[s]) { \ + const vk_conv2d_pipeline_state &state = c.first; \ + std::vector spec_constants_cpy = spec_constants; \ + spec_constants_cpy.push_back(state.s0); \ + spec_constants_cpy.push_back(state.s1); \ + spec_constants_cpy.push_back(state.p0); \ + spec_constants_cpy.push_back(state.p1); \ + spec_constants_cpy.push_back(state.d0); \ + spec_constants_cpy.push_back(state.d1); \ + spec_constants_cpy.push_back(state.KW); \ + spec_constants_cpy.push_back(state.KH); \ + ggml_vk_create_pipeline( \ + device, c.second, #name #type_suffix, \ + name##type_suffix##spv_suffix##_len, name##type_suffix##spv_suffix##_data, "main", 3, \ + sizeof(vk_op_##name##_push_constants), wg_denoms, spec_constants_cpy, 1, true, use_collectives); \ + } #define CREATE_CONVS(spv_suffix) \ CREATE_CONV(conv2d, _f32, spv_suffix) \ CREATE_CONV(conv2d, _f16_f32, spv_suffix) \ @@ -8536,7 +8554,7 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const uint32_t tiles[CONV_SHAPE_COUNT]; for (uint32_t i = 0; i < CONV_SHAPE_COUNT; ++i) { - tiles[i] = CEIL_DIV(elements[0], ctx->device->pipeline_conv2d_f32[i]->wg_denoms[0]) * CEIL_DIV(elements[1], ctx->device->pipeline_conv2d_f32[i]->wg_denoms[1]); + tiles[i] = CEIL_DIV(elements[0], conv_shapes_wg_denoms[i][0]) * CEIL_DIV(elements[1], conv_shapes_wg_denoms[i][1]); } // We can't query number of shader cores on Intel, use 32 as a placeholder @@ -8551,19 +8569,45 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const shape = CONV_SHAPE_64x32; } + uint32_t KW = static_cast(src0->ne[0]); + uint32_t KH = static_cast(src0->ne[1]); + uint32_t s0 = static_cast(dst->op_params[0]); + uint32_t s1 = op == GGML_OP_CONV_2D ? static_cast(dst->op_params[1]) : static_cast(dst->op_params[0]); + uint32_t p0 = op == GGML_OP_CONV_2D ? static_cast(dst->op_params[2]) : 0; + uint32_t p1 = op == GGML_OP_CONV_2D ? static_cast(dst->op_params[3]) : 0; + uint32_t d0 = op == GGML_OP_CONV_2D ? static_cast(dst->op_params[4]) : 1; + uint32_t d1 = op == GGML_OP_CONV_2D ? static_cast(dst->op_params[5]) : 1; + + vk_conv2d_pipeline_state conv2d_pipeline_state(s0, s1, p0, p1, d0, d1, KW, KH); + + std::map *pipelines = nullptr; if (op == GGML_OP_CONV_2D) { if (src0->type == GGML_TYPE_F32) { - return ctx->device->pipeline_conv2d_f32[shape]; + pipelines = &ctx->device->pipeline_conv2d_f32[shape]; } else if (src0->type == GGML_TYPE_F16) { - return ctx->device->pipeline_conv2d_f16_f32[shape]; + pipelines = &ctx->device->pipeline_conv2d_f16_f32[shape]; } } else if (op == GGML_OP_CONV_TRANSPOSE_2D) { if (src0->type == GGML_TYPE_F32) { - return ctx->device->pipeline_conv_transpose_2d_f32[shape]; + pipelines = &ctx->device->pipeline_conv_transpose_2d_f32[shape]; } else if (src0->type == GGML_TYPE_F16) { - return ctx->device->pipeline_conv_transpose_2d_f16_f32[shape]; + pipelines = &ctx->device->pipeline_conv_transpose_2d_f16_f32[shape]; } } + + vk_pipeline pipeline = nullptr; + + { + std::lock_guard guard(ctx->device->mutex); + auto it = pipelines->find(conv2d_pipeline_state); + if (it != pipelines->end()) { + pipeline = it->second; + } else { + (*pipelines)[conv2d_pipeline_state] = pipeline = std::make_shared(); + } + } + + return pipeline; } return nullptr; case GGML_OP_CONV_2D_DW: diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/conv2d_mm.comp b/ggml/src/ggml-vulkan/vulkan-shaders/conv2d_mm.comp index 0367e80bbf..e9bdbf7db5 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/conv2d_mm.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/conv2d_mm.comp @@ -62,14 +62,8 @@ layout(push_constant) uniform parameter { uint32_t nb3; // fastdiv helper values - uint32_t KWmp; uint32_t KWL; - uint32_t KWKHmp; uint32_t KWKHL; uint32_t OWmp; uint32_t OWL; uint32_t OWOHmp; uint32_t OWOHL; -#ifdef TRANSPOSE - uint32_t s0mp; uint32_t s0L; - uint32_t s1mp; uint32_t s1L; -#endif } p; @@ -84,6 +78,15 @@ layout(constant_id = 4) const uint TS_K = 8; layout(constant_id = 5) const uint use_collectives = 1; layout(constant_id = 6) const uint SHMEM_PAD = 4; +layout(constant_id = 7) const uint s0 = 1; +layout(constant_id = 8) const uint s1 = 1; +layout(constant_id = 9) const uint p0 = 0; +layout(constant_id = 10) const uint p1 = 0; +layout(constant_id = 11) const uint d0 = 1; +layout(constant_id = 12) const uint d1 = 1; +layout(constant_id = 13) const uint KW = 1; +layout(constant_id = 14) const uint KH = 1; + uint32_t tid = gl_LocalInvocationID.x; const uint32_t WG_SIZE = gl_WorkGroupSize.x; @@ -92,7 +95,7 @@ uint splitWork(uint work_size, uint block_size) { } uint32_t K = p.Cout; -uint32_t CRS = p.Cin * p.KH * p.KW; +uint32_t CRS = p.Cin * KH * KW; uint32_t NPQ = p.N * p.OH * p.OW; uint32_t n_elems_out = K * NPQ; @@ -187,7 +190,7 @@ void main() { } #endif /* Advance block in CRS dim */ - for (uint32_t B_idx_CRS = 0; B_idx_CRS < NB_CRS; B_idx_CRS++) { + [[dont_unroll]] for (uint32_t B_idx_CRS = 0; B_idx_CRS < NB_CRS; B_idx_CRS++) { uint32_t CRS_idx_a; uint32_t Cin_idx_a; uint32_t KH_idx_a; @@ -200,10 +203,10 @@ void main() { uint32_t cached_KW_idx; if (use_collectives == 1) { cached_CRS_idx = B_idx_CRS * BS_CRS + gl_SubgroupInvocationID; - cached_Cin_idx = fastdiv(cached_CRS_idx, p.KWKHmp, p.KWKHL); // divide by (p.KW * p.KH); - uint32_t cached_CRS_remainder = (cached_CRS_idx - cached_Cin_idx * p.KW * p.KH); - cached_KH_idx = fastdiv(cached_CRS_remainder, p.KWmp, p.KWL); // divide by p.KW; - cached_KW_idx = cached_CRS_remainder - cached_KH_idx * p.KW; + cached_Cin_idx = cached_CRS_idx / (KW * KH); + uint32_t cached_CRS_remainder = cached_CRS_idx % (KW * KH); + cached_KH_idx = cached_CRS_remainder / KW; + cached_KW_idx = cached_CRS_remainder % KW; CRS_idx_a = subgroupShuffle(cached_CRS_idx, Ac); Cin_idx_a = subgroupShuffle(cached_Cin_idx, Ac); @@ -211,21 +214,21 @@ void main() { KW_idx_a = subgroupShuffle(cached_KW_idx, Ac); } else { CRS_idx_a = B_idx_CRS * BS_CRS + Ac; // Global CRS_idx_a (column index of A) - Cin_idx_a = fastdiv(CRS_idx_a, p.KWKHmp, p.KWKHL); // divide by (p.KW * p.KH); - uint32_t CRS_remainder = CRS_idx_a - Cin_idx_a * p.KW * p.KH; - KH_idx_a = fastdiv(CRS_remainder, p.KWmp, p.KWL); // divide by p.KW; - KW_idx_a = CRS_remainder - KH_idx_a * p.KW; + Cin_idx_a = CRS_idx_a / (KW * KH); + uint32_t CRS_remainder = CRS_idx_a % (KW * KH); + KH_idx_a = CRS_remainder / KW; + KW_idx_a = CRS_remainder % KW; } #else CRS_idx_a = B_idx_CRS * BS_CRS + Ac; // Global CRS_idx_a (column index of A) - Cin_idx_a = fastdiv(CRS_idx_a, p.KWKHmp, p.KWKHL); // divide by (p.KW * p.KH); / (p.KW * p.KH); - CRS_remainder = CRS_idx_a - Cin_idx_a * p.KW * p.KH; - KH_idx_a = fastdiv(CRS_remainder, p.KWmp, p.KWL); // divide by p.KW; - KW_idx_a = CRS_remainder - KH_idx_a * p.KW; + Cin_idx_a = CRS_idx_a / (KW * KH); + CRS_remainder = CRS_idx_a % (KW * KH); + KH_idx_a = CRS_remainder / KW; + KW_idx_a = CRS_remainder % KW; #endif /* Load kernel to A_block: (BS_K x BS_CRS)*/ - for (uint32_t r_offset = 0; r_offset < BS_K; r_offset += ArpWg) { + UNROLL for (uint32_t r_offset = 0; r_offset < BS_K; r_offset += ArpWg) { uint32_t B_ly = r_offset + Ar; uint32_t B_lx = Ac; uint32_t K_idx = B_idx_K * BS_K + B_ly; /* Global K_idx (row index of A)*/ @@ -262,27 +265,27 @@ void main() { KW_idx_b = subgroupShuffle(cached_KW_idx, r_offset + Br); } else { CRS_idx_b = B_idx_CRS * BS_CRS + B_ly; /* Global CRS index (row index of B) */ - Cin_idx_b = fastdiv(CRS_idx_b, p.KWKHmp, p.KWKHL); // divide by (p.KW * p.KH); - uint32_t CRS_remainder = CRS_idx_b - Cin_idx_b * p.KW * p.KH; - KH_idx_b = fastdiv(CRS_remainder, p.KWmp, p.KWL); // divide by p.KW; - KW_idx_b = CRS_remainder - KH_idx_b * p.KW; + Cin_idx_b = CRS_idx_b / (KW * KH); + uint32_t CRS_remainder = CRS_idx_b % (KW * KH); + KH_idx_b = CRS_remainder / KW; + KW_idx_b = CRS_remainder % KW; } #else CRS_idx_b = B_idx_CRS * BS_CRS + B_ly; /* Global CRS index (row index of B) */ - Cin_idx_b = fastdiv(CRS_idx_b, p.KWKHmp, p.KWKHL); // divide by (p.KW * p.KH); - uint32_t CRS_remainder = CRS_idx_b - Cin_idx_b * p.KW * p.KH; - KH_idx_b = fastdiv(CRS_remainder, p.KWmp, p.KWL); // divide by p.KW; - KW_idx_b = CRS_remainder - KH_idx_b * p.KW; + Cin_idx_b = CRS_idx_b / (KW * KH); + uint32_t CRS_remainder = CRS_idx_b % (KW * KH); + KH_idx_b = CRS_remainder / KW; + KW_idx_b = CRS_remainder % KW; #endif #ifdef TRANSPOSE - uint32_t H_idx_x_s1 = OH_idx - KH_idx_b * p.d1 + p.p1; - uint32_t W_idx_x_s0 = OW_idx - KW_idx_b * p.d0 + p.p0; - uint32_t H_idx = fastdiv(H_idx_x_s1, p.s1mp, p.s1L); - uint32_t W_idx = fastdiv(W_idx_x_s0, p.s0mp, p.s0L); + uint32_t H_idx_x_s1 = OH_idx - KH_idx_b * d1 + p1; + uint32_t W_idx_x_s0 = OW_idx - KW_idx_b * d0 + p0; + uint32_t H_idx = H_idx_x_s1 / s1; + uint32_t W_idx = W_idx_x_s0 / s0; #else - uint32_t H_idx = OH_idx * p.s1 + KH_idx_b * p.d1 - p.p1; - uint32_t W_idx = OW_idx * p.s0 + KW_idx_b * p.d0 - p.p0; + uint32_t H_idx = OH_idx * s1 + KH_idx_b * d1 - p1; + uint32_t W_idx = OW_idx * s0 + KW_idx_b * d0 - p0; #endif uint32_t src_idx = min(max(W_idx + H_idx * p.nb11 + Cin_idx_b * p.nb12 + N_idx * p.nb13, 0), p.Cin * p.N * p.W * p.H - 1); @@ -290,7 +293,7 @@ void main() { if (CRS_idx_b >= CRS || NPQ_idx >= NPQ || H_idx >= p.H || W_idx >= p.W // Lower bound checks aren't necessary. (idx >= 0x80000000 for such case) #ifdef TRANSPOSE - || (H_idx_x_s1 - H_idx * p.s1 != 0) || (W_idx_x_s0 - W_idx * p.s0 != 0) + || (H_idx_x_s1 - H_idx * s1 != 0) || (W_idx_x_s0 - W_idx * s0 != 0) #endif ) { val = 0.0; From 333f2595a3e0e4c0abf233f2f29ef1710acd134d Mon Sep 17 00:00:00 2001 From: chansikpark Date: Sat, 8 Nov 2025 14:52:35 -0500 Subject: [PATCH 32/69] webui: fix keyboard shortcuts for new chat & edit chat title (#17007) --- tools/server/public/index.html.gz | Bin 1127240 -> 1127236 bytes tools/server/webui/src/routes/+layout.svelte | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/server/public/index.html.gz b/tools/server/public/index.html.gz index a796c255c18579093dd7a63e150a4fe9d0cdb327..976d6585da66ed072ec30330cef550b41b5052c1 100644 GIT binary patch delta 756404 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

PK-Ep~{X#X}sZt!HO7474gOTaz8!08UhG z%8J1^Is8+BC@jlorb?A9_izRdWYHAPD z6cjO6k%#3H;J0+K_v`y2pr4F!Va$I?va!fw)inW3C{+x7X$o<5`ogHs2!e&>8N;m! z#jY`gxx_34gGNj?KnGvgl?d5DiGzR+4y9-E9g+pN!6#ApN0<;FB*=vAT*r1vwkb}t ze|bXpZh{c3OX#m@G&*#QzDF~;2dHn)Fy^8Cj- zTqF1_FxYH8fBEDEF5&;UsOKE=r1zJr+Am@s-+r>O|3vG=bNHuz^=#`$Try28x2*Er zl$I5!ZvAxds}e1dueap|R%i2{Rr*>A#JYOX>2H5s4|}WSMiT!_lhFB>T#sW9`(PD2 zicoE+Zb*JzF#ReO2N6q9UvU3>(BX4T-b}k`@F-5lpKP;L2KH+n+FQOY4yvHGDsFSu`6x zLWqBhPzG2{ML+|5?aQ!OTxu*=W@WM5$YA;~KvaxcGUGv>w0N*m7tWe@>*fa#id0v+ zY(M^lDB+K<%>lY`3ySvcYL%kByZQ&UEMnDiqlpBM*&<>C zumN%b{qsq`Ri~3X@i(Dle*Y?Wv-{WaL%GbwtiUMxAYapl>gaNJy`bG&c3C8*f;0 zX1X4>$Y0(%E;s_^2mCG*2wP1qFEwAPwgrVGUl`V?44o+9yZ4NwxWO0Z2J!OmsxvQO zU+6r?DVaz-?t{`N5PwCW^Dh-#uiSs&pW;PiWG((G#RGmtu{!0)8w9}bmopfrhQp@Ovi_eBWyT-<-Uc>v;DVL?e5h8fa`K!Iw{=; zp{?n;Q_(rYivkE-->feGDyu_wEJ5>-6M{bV$LmhJ-P6BMgf-9$*a2>@hZj_+=xA@4b}~#8=P&qPp7{K&tI#%5!svEz4nO>Rb50)d;+>P1*4VgopnpmeBcyrXABz|yudtAHhU@k`CJE0aD!ziknc zn}cn0Yli2l%f`XDWuOH26S;p3)k&XQcFf}us0&|KIuCct06ls=(m+pA`h@GE886_# zji51uz61p@cz#)}JM6AdW$o!qS#M)jGPq}akCJuDvw>-TpnS5yCn2txi_j1t z*2vlJm8D`asw_)HS|cPJNYUma-+{-B;omFX{sCKu

AvUsic4JPr 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

=H38M;1STc+&Qo?9UpwdI+J8w% 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 YAn!sYIuW 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 z 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�zWZG}6 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%0A#eXa_w>Tvpcc@ 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

}_q($V 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�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

Hz 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 -Me7Edy*yGW;B#EEz{d(He# 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

    dyr#2UV6G5T7dWFOYrxFs;lgc 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%0D&{H13QB{ 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�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∋3 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�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�E}l( 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

    ~Fp?@lEqg?fpG^42_P-t)$fmt5 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 z%0A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

    Metrics

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    MetricValue
    Score0.925
    chars2296.1916666666666
    chars:std986.051306946325
    score:std0.26339134382131846
    + +

    Examples

    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    First write the two numbers in base‑10.
    +
    +\[
    +17_{b}=1\cdot b+7=b+7,\qquad 
    +97_{b}=9\cdot b+7=9b+7 .
    +\]
    +
    +We need  
    +
    +\[
    +b+7 \mid 9b+7 .
    +\]
    +
    +Use the Euclidean algorithm:
    +
    +\[
    +9b+7 = 9(b+7)-56 .
    +\]
    +
    +Hence  
    +
    +\[
    +b+7 \mid 9b+7 \iff b+7 \mid 56 .
    +\]
    +
    +So \(b+7\) must be a positive divisor of \(56\).
    +
    +Since the base must satisfy \(b>9\), we have \(b+7>16\).  
    +The divisors of \(56\) exceeding \(16\) are \(28\) and \(56\).
    +
    +\[
    +\begin{cases}
    +b+7=28 \ \Rightarrow\ b=21,\\[2pt]
    +b+7=56 \ \Rightarrow\ b=49.
    +\end{cases}
    +\]
    +
    +Both bases indeed work:
    +
    +\[
    +\frac{97_{21}}{17_{21}}=\frac{196}{28}=7,\qquad 
    +\frac{97_{49}}{17_{49}}=\frac{448}{56}=8 .
    +\]
    +
    +Therefore the required bases are \(21\) and \(49\), and their sum is  
    +
    +\[
    +21+49 = 70.
    +\]
    +
    +\[
    +\boxed{70}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 70

    +

    Extracted Answer: 70

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +c=\#\text{ chocolate},\qquad v=\#\text{ vanilla},\qquad s=\#\text{ strawberry}
    +\]
    +
    +with  
    +
    +\[
    +c+v+s =9,\qquad c>v>s\ge1 .
    +\]
    +
    +---
    +
    +### 1. Find all possible triples \((c,v,s)\).
    +
    +Since \(c>v>s\ge 1\),
    +
    +\[
    +c\ge s+2,\; v\ge s+1 \Longrightarrow c+v+s\ge 3s+3\le9\Longrightarrow s\le2 .
    +\]
    +
    +- **If \(s=1\)**: \(v\ge2,\ c\ge3\) and \(c+v=8\).  
    +  Possibilities: \((c,v)=(6,2),(5,3)\).
    +
    +- **If \(s=2\)**: \(v\ge3,\ c\ge4\) and \(c+v=7\).  
    +  Possibility: \((c,v)=(4,3)\).
    +
    +Thus the only triples are  
    +
    +\[
    +(6,2,1),\quad (5,3,1),\quad (4,3,2).
    +\]
    +
    +---
    +
    +### 2. Count assignments for each triple.
    +
    +For a given \((c,v,s)\) the number of assignments of flavors to the nine distinct players is the multinomial coefficient  
    +
    +\[
    +\frac{9!}{c!\,v!\,s!}.
    +\]
    +
    +\[
    +\begin{aligned}
    +(6,2,1):\quad &\frac{9!}{6!\,2!\,1!}= \binom{9}{6}\binom{3}{2}=84\cdot3=252,\\[4pt]
    +(5,3,1):\quad &\frac{9!}{5!\,3!\,1!}= \binom{9}{5}\binom{4}{3}=126\cdot4=504,\\[4pt]
    +(4,3,2):\quad &\frac{9!}{4!\,3!\,2!}= \binom{9}{4}\binom{5}{3}=126\cdot10=1260.
    +\end{aligned}
    +\]
    +
    +---
    +
    +### 3. Total number of assignments
    +
    +\[
    +N = 252+504+1260 = 2016.
    +\]
    +
    +---
    +
    +### 4. Remainder modulo \(1000\)
    +
    +\[
    +N \bmod 1000 = 2016 \bmod 1000 = 16.
    +\]
    +
    +\[
    +\boxed{16}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 16

    +

    Extracted Answer: 16

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +An isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \neq s$. Find $r^{2}+s^{2}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the trapezoid have parallel sides \(r\) and \(s\) \((r\neq s)\) and equal legs \(L\).
    +
    +---
    +
    +### 1.  Semiperimeter from the incircle
    +
    +A convex quadrilateral that contains an incircle (a tangential quadrilateral) satisfies  
    +
    +\[
    +\text{Area}= (\text{inradius})\times (\text{semiperimeter}).
    +\]
    +
    +The inradius is \(3\) and the area is \(72\); therefore  
    +
    +\[
    +p=\frac{\text{Area}}{r_{\text{in}}}= \frac{72}{3}=24,
    +\]
    +
    +where \(p\) is the semiperimeter.
    +
    +---
    +
    +### 2.  Relation among the sides
    +
    +For a tangential quadrilateral, Pitot’s theorem gives  
    +
    +\[
    +\text{(sum of one pair of opposite sides)} = \text{(sum of the other pair)} .
    +\]
    +
    +In an isosceles trapezoid the opposite sides are the two bases and the two equal legs, so  
    +
    +\[
    +r+s = L+L =2L \quad\Longrightarrow\quad L=\frac{r+s}{2}.
    +\]
    +
    +The semiperimeter is  
    +
    +\[
    +p = \frac{r+s+2L}{2}= \frac{r+s+r+s}{2}=r+s .
    +\]
    +
    +Since \(p=24\), we obtain  
    +
    +\[
    +\boxed{r+s=24}.
    +\]
    +
    +Consequently  
    +
    +\[
    +L=\frac{r+s}{2}=12 .
    +\]
    +
    +---
    +
    +### 3.  Height of the trapezoid
    +
    +The incircle is tangent to both parallel sides, so the distance between those sides (the height \(h\)) equals twice the radius:
    +
    +\[
    +h = 2\cdot 3 = 6 .
    +\]
    +
    +---
    +
    +### 4.  Using the leg length
    +
    +Place the trapezoid with its bases horizontal. The horizontal offset between the ends of the bases is \(\dfrac{|r-s|}{2}\). Hence, by the Pythagorean theorem,
    +
    +\[
    +L^{2}= \left(\frac{r-s}{2}\right)^{2}+h^{2}.
    +\]
    +
    +With \(L=12\) and \(h=6\),
    +
    +\[
    +12^{2}= \left(\frac{r-s}{2}\right)^{2}+6^{2}
    +\quad\Longrightarrow\quad
    +144 = \frac{(r-s)^{2}}{4}+36
    +\quad\Longrightarrow\quad
    +(r-s)^{2}=432.
    +\]
    +
    +---
    +
    +### 5.  Compute \(r^{2}+s^{2}\)
    +
    +\[
    +\begin{aligned}
    +(r+s)^{2} &= r^{2}+2rs+s^{2}=24^{2}=576,\\
    +(r-s)^{2} &= r^{2}-2rs+s^{2}=432.
    +\end{aligned}
    +\]
    +
    +Adding these equations eliminates the \(rs\) term:
    +
    +\[
    +(r+s)^{2}+(r-s)^{2}=2(r^{2}+s^{2})\Longrightarrow
    +576+432=2(r^{2}+s^{2}).
    +\]
    +
    +Thus
    +
    +\[
    +r^{2}+s^{2}= \frac{1008}{2}=504.
    +\]
    +
    +---
    +
    +\[
    +\boxed{504}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 504

    +

    Extracted Answer: 504

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\sqrt{-1}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The first equation  
    +
    +\[
    +|25+20i-z|=5
    +\]
    +
    +is a circle with centre  
    +
    +\[
    +C=(25,20)
    +\]
    +
    +and radius \(r=5\).
    +
    +The second equation  
    +
    +\[
    +|z-4-k| = |z-3i-k|
    +\]
    +
    +means that \(z\) is equidistant from the points  
    +
    +\[
    +A=4+k \qquad\text{and}\qquad B=3i+k .
    +\]
    +
    +Thus \(A=(k+4,0),\; B=(k,3)\).  
    +The set of points equidistant from \(A\) and \(B\) is the perpendicular bisector of \(\overline{AB}\).
    +
    +---
    +
    +### Equation of the perpendicular bisector
    +
    +Midpoint of \(AB\):
    +
    +\[
    +M=\Bigl(\frac{k+4+k}{2},\frac{0+3}{2}\Bigr)=(k+2,\frac32).
    +\]
    +
    +The vector \(\overrightarrow{AB}=(-4,3)\).  
    +A direction vector perpendicular to this is \((3,4)\) (since \((-4,3)\cdot(3,4)=0\)).  
    +
    +Hence the line has slope \(\frac43\) and equation  
    +
    +\[
    +y-\frac32 = \frac43\bigl(x-(k+2)\bigr)
    +\]
    +\[
    +\Longrightarrow\; y = \frac43 x - \frac43 k - \frac76 .
    +\]
    +
    +In standard form:
    +
    +\[
    +8x-6y = 8k+7 .
    +\]
    +
    +---
    +
    +### Tangency condition
    +
    +The system will have exactly one solution iff this line is tangent to the circle.  
    +The distance from the centre \(C=(25,20)\) to the line \(8x-6y-(8k+7)=0\) must equal the radius \(5\):
    +
    +\[
    +\frac{|8\cdot25-6\cdot20-(8k+7)|}{\sqrt{8^{2}+(-6)^{2}}}=5.
    +\]
    +
    +Compute the numerator:
    +
    +\[
    +8\cdot25-6\cdot20-(8k+7)=200-120-8k-7=73-8k.
    +\]
    +
    +Since \(\sqrt{8^{2}+6^{2}}=10\),
    +
    +\[
    +\frac{|73-8k|}{10}=5 \quad\Longrightarrow\quad |73-8k|=50.
    +\]
    +
    +Thus  
    +
    +\[
    +73-8k = 50 \quad\text{or}\quad 73-8k = -50.
    +\]
    +
    +\[
    +\begin{cases}
    +8k = 23 \;\;\Rightarrow\; k = \dfrac{23}{8},\\[4pt]
    +8k = 123\;\Rightarrow\; k = \dfrac{123}{8}.
    +\end{cases}
    +\]
    +
    +Both values give a tangent line, so each yields exactly one solution \(z\).
    +
    +---
    +
    +### Sum of all possible \(k\)
    +
    +\[
    +k_1+k_2 = \frac{23}{8}+\frac{123}{8}= \frac{146}{8}= \frac{73}{4}.
    +\]
    +
    +Write \(\frac{73}{4}\) as \(\frac{m}{n}\) with \(\gcd(m,n)=1\): \(m=73,\ n=4\).
    +
    +\[
    +m+n = 73+4 = 77.
    +\]
    +
    +\[
    +\boxed{77}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 77

    +

    Extracted Answer: 77

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The equation  
    +
    +\[
    +12x^{2}-xy-6y^{2}=0
    +\]
    +
    +is a homogeneous quadratic form.  Factor it over the rationals.
    +
    +\[
    +12x^{2}-xy-6y^{2}= -6\Bigl(y-\frac43x\Bigr)\Bigl(y+\frac32x\Bigr)
    +\]
    +
    +Hence  
    +
    +\[
    +12x^{2}-xy-6y^{2}=0\iff 
    +\Bigl(y-\frac43x\Bigr)\Bigl(y+\frac32x\Bigr)=0 .
    +\]
    +
    +So any integer solution must satisfy one of the two linear equations  
    +
    +\[
    +y=\frac{4}{3}x\quad\text{or}\quad y=-\frac32 x .
    +\]
    +
    +---
    +
    +### 1.  Solutions of \(y=\frac43x\)
    +
    +Write \(3y=4x\).  
    +Since \(\gcd(3,4)=1\), the integer solutions are  
    +
    +\[
    +x=3k,\qquad y=4k\qquad(k\in\mathbb Z).
    +\]
    +
    +Both coordinates must lie in \([-100,100]\):
    +
    +\[
    +-100\le 3k\le100,\qquad -100\le4k\le100
    +\]
    +
    +The second inequality is stricter, giving  
    +
    +\[
    +-25\le k\le 25 .
    +\]
    +
    +Thus there are  
    +
    +\[
    +25-(-25)+1 = 51
    +\]
    +
    +integer points on this line.
    +
    +---
    +
    +### 2.  Solutions of \(y=-\frac32x\)
    +
    +Write \(2y=-3x\).  
    +Since \(\gcd(2,3)=1\), the integer solutions are  
    +
    +\[
    +x=2k,\qquad y=-3k\qquad(k\in\mathbb Z).
    +\]
    +
    +Both coordinates must satisfy  
    +
    +\[
    +-100\le2k\le100,\qquad -100\le-3k\le100 .
    +\]
    +
    +These give  
    +
    +\[
    +-50\le k\le50,\qquad -\frac{100}{3}\le k\le\frac{100}{3}\Longrightarrow -33\le k\le33 .
    +\]
    +
    +Hence there are  
    +
    +\[
    +33-(-33)+1 = 67
    +\]
    +
    +integer points on this line.
    +
    +---
    +
    +### 3.  Remove double‑counted point
    +
    +The two lines intersect only at \((0,0)\) (when \(k=0\) in both families).  
    +Thus the total number of distinct ordered pairs is  
    +
    +\[
    +51+67-1 = 117 .
    +\]
    +
    +\[
    +\boxed{117}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 117

    +

    Extracted Answer: 117

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1.  Divisibility conditions**
    +
    +For an integer to be divisible by \(22\) it must be divisible by \(2\) and by \(11\).
    +
    +*Divisible by 2* – the last digit (the units digit) must be even, i.e. one of \(\{2,4,6,8\}\).
    +
    +*Divisible by 11* – for an 8‑digit number \(a_1a_2\ldots a_8\) (with \(a_1\) the leftmost digit) the rule is  
    +
    +\[
    +(a_8+a_6+a_4+a_2)-(a_7+a_5+a_3+a_1)\equiv0\pmod{11}.
    +\]
    +
    +Thus the sum of the digits in the even positions (2,4,6,8) equals the sum of the digits in the odd positions (1,3,5,7) modulo \(11\).
    +
    +The total sum of the digits \(1+2+\dots+8=36\).  
    +If the two sums are equal modulo \(11\), then
    +
    +\[
    +2\cdot(\text{odd–position sum})\equiv36\equiv3\pmod{11}
    +\Longrightarrow\text{odd–position sum}\equiv7\pmod{11}.
    +\]
    +
    +The possible values are \(7,18,29,\ldots\).  
    +Since four distinct digits from \(\{1,\dots ,8\}\) can sum only between \(10\) and \(26\), the only feasible value is  
    +
    +\[
    +\boxed{\text{odd–position sum}=18}.
    +\]
    +
    +Consequently the even–position sum is also \(18\).
    +
    +**Step 2.  Choose the digits for the odd positions**
    +
    +We need all 4‑element subsets of \(\{1,2,3,4,5,6,7,8\}\) whose sum is \(18\).
    +
    +Listing them (or by noting the complementary pairs) gives  
    +
    +\[
    +\begin{aligned}
    +&\{1,2,7,8\},\; \{1,3,6,8\},\; \{1,4,5,8\},\; \{1,4,6,7\},\\
    +&\{2,3,5,8\},\; \{2,3,6,7\},\; \{2,4,5,7\},\; \{3,4,5,6\}.
    +\end{aligned}
    +\]
    +
    +There are  
    +
    +\[
    +\boxed{M=8}
    +\]
    +
    +such subsets.  
    +Each of them contains exactly two even digits (because a sum of 18 cannot be obtained with a different parity distribution), so for every subset \(A\) (odd‑position digits) we have  
    +
    +\[
    +e_A=2,\qquad E_B=4-e_A=2,
    +\]
    +
    +where \(E_B\) is the number of even digits among the complementary set \(B\) (the even‑position digits).
    +
    +**Step 3.  Arrange the digits**
    +
    +*Odd positions* (1,3,5,7): the four digits of \(A\) can be placed in \(4! = 24\) ways.
    +
    +*Even positions* (2,4,6,8): the four digits of \(B\) must be placed so that the digit in position 8 (the units digit) is even.  
    +Since \(B\) contains exactly \(E_B=2\) even digits, we have  
    +
    +\[
    +\text{choices for the units digit}=2,
    +\qquad
    +\text{ways to arrange the remaining three digits}=3! = 6.
    +\]
    +
    +Thus the number of admissible placements for \(B\) is  
    +
    +\[
    +f(B)=2\cdot 6=12.
    +\]
    +
    +**Step 4.  Count all numbers**
    +
    +For each of the \(M=8\) valid subsets \(A\),
    +
    +\[
    +\text{numbers contributed}=24\times12=288.
    +\]
    +
    +Hence  
    +
    +\[
    +N=8\times288=2304.
    +\]
    +
    +**Step 5.  Compute the required difference**
    +
    +\[
    +N-2025=2304-2025=279.
    +\]
    +
    +\[
    +\boxed{279}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 279

    +

    Extracted Answer: 279

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The parabola with equation $y=x^{2}-4$ is rotated $60^{\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\frac{a-\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The original parabola is  
    +
    +\[
    +y=x^{2}-4 .
    +\]
    +
    +---
    +
    +### 1.  Equation of the rotated parabola  
    +
    +Rotate the plane \(60^{\circ}\) counter‑clockwise about the origin.
    +If \((X,Y)\) is a point of the rotated parabola, then rotating it back
    +\(60^{\circ}\) clockwise gives a point \((x',y')\) on the original parabola.
    +
    +\[
    +\begin{pmatrix}x'\\y'\end{pmatrix}
    +=
    +\begin{pmatrix}\cos60^\circ&\sin60^\circ\\
    +-\sin60^\circ&\cos60^\circ\end{pmatrix}
    +\begin{pmatrix}X\\Y\end{pmatrix}
    +=
    +\begin{pmatrix}\frac12X+\frac{\sqrt3}{2}Y\\[2pt]
    +-\frac{\sqrt3}{2}X+\frac12Y\end{pmatrix}.
    +\]
    +
    +Thus  
    +
    +\[
    +y' = x'^2-4\Longrightarrow 
    +\frac{-\sqrt3X+Y}{2} =\Bigl(\frac{X+\sqrt3Y}{2}\Bigr)^{\!2}-4.
    +\]
    +
    +Multiplying by \(2\) and simplifying gives the equation of the rotated
    +parabola:
    +
    +\[
    +(x+\sqrt3\,y)^{2}+2\sqrt3\,x-2y-16=0. \tag{1}
    +\]
    +
    +---
    +
    +### 2.  Intersection with the original parabola  
    +
    +Substituting \(y=x^{2}-4\) from the original parabola into (1) yields
    +
    +\[
    +\bigl(x+\sqrt3(x^{2}-4)\bigr)^{2}+2\sqrt3\,x-2(x^{2}-4)-16=0,
    +\]
    +
    +which simplifies to
    +
    +\[
    +3x^{4}+2\sqrt3\,x^{3}-25x^{2}-6\sqrt3\,x+40=0. \tag{2}
    +\]
    +
    +---
    +
    +### 3.  Factoring the quartic  
    +
    +Look for a factorisation of the form  
    +\((ax^{2}+b\sqrt3\,x+c)(dx^{2}+e\sqrt3\,x+f)\).
    +Matching coefficients gives the system  
    +
    +\[
    +\begin{cases}
    +ad=3\\
    +ae+bd=2\\
    +af+3be+cd=-25\\
    +bf+ce=-6\\
    +cf=40
    +\end{cases}
    +\]
    +
    +which is solved by  
    +
    +\[
    +a=1,\;b=1,\;c=-4,\qquad d=3,\;e=-1,\;f=-10 .
    +\]
    +
    +Hence
    +
    +\[
    +3x^{4}+2\sqrt3\,x^{3}-25x^{2}-6\sqrt3\,x+40
    +   =(x^{2}+\sqrt3\,x-4)(3x^{2}-\sqrt3\,x-10). \tag{3}
    +\]
    +
    +---
    +
    +### 4.  Solving for the intersection points  
    +
    +From (3) we obtain four possible \(x\)-coordinates.
    +
    +1. \(x^{2}+\sqrt3\,x-4=0\)
    +
    +\[
    +x=\frac{-\sqrt3\pm\sqrt{19}}{2}.
    +\]
    +
    +2. \(3x^{2}-\sqrt3\,x-10=0\)
    +
    +\[
    +x=\frac{\sqrt3\pm\sqrt{123}}{6}.
    +\]
    +
    +For each \(x\) we compute \(y=x^{2}-4\).
    +
    +| \(x\) | sign of \(x\) | \(y=x^{2}-4\) | quadrant |
    +|---|---|---|---|
    +| \(\displaystyle\frac{-\sqrt3+\sqrt{19}}{2}\) | \(>0\) | \(\displaystyle\frac{3-\sqrt{57}}{2}<0\) | **IV** |
    +| \(\displaystyle\frac{-\sqrt3-\sqrt{19}}{2}\) | \(<0\) | \(>0\) | II |
    +| \(\displaystyle\frac{\sqrt3+\sqrt{123}}{6}\) | \(>0\) | \(>0\) | I |
    +| \(\displaystyle\frac{\sqrt3-\sqrt{123}}{6}\) | \(<0\) | \(<0\) | III |
    +
    +Only the first solution lies in the fourth quadrant, as required.
    +
    +---
    +
    +### 5.  The required \(y\)-coordinate  
    +
    +For  
    +\[
    +x=\frac{-\sqrt3+\sqrt{19}}{2},
    +\]
    +\[
    +y=x^{2}-4
    +   =\left(\frac{-\sqrt3+\sqrt{19}}{2}\right)^{2}-4
    +   =\frac{19+3-2\sqrt{57}}{4}-4
    +   =\frac{22-2\sqrt{57}}{4}-\frac{16}{4}
    +   =\frac{3-\sqrt{57}}{2}.
    +\]
    +
    +Thus  
    +
    +\[
    +y=\frac{a-\sqrt{b}}{c}\quad\text{with}\quad a=3,\;b=57,\;c=2,
    +\]
    +and \(\gcd(a,c)=1\).
    +
    +Finally  
    +
    +\[
    +a+b+c=3+57+2=62.
    +\]
    +
    +\[
    +\boxed{62}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 62

    +

    Extracted Answer: 62

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +On $\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +\vec{AB}= \mathbf b ,\qquad \vec{AC}= \mathbf c ,\qquad 
    +|\mathbf b| =28,\; |\mathbf c| =91 .
    +\]
    +
    +Write every point on the sides as a linear combination of \(\mathbf b,\mathbf c\).
    +
    +\[
    +\begin{aligned}
    +D&=\frac{4}{28}\mathbf b =\frac17\mathbf b ,&
    +E&=\frac{20}{28}\mathbf b =\frac57\mathbf b ,\\[2mm]
    +F&=\frac{13}{91}\mathbf c ,&
    +G&=\frac{65}{91}\mathbf c .
    +\end{aligned}
    +\]
    +
    +The reflections about a point are central symmetries, thus  
    +
    +\[
    +M=2F-D=-\frac17\mathbf b+\frac{26}{91}\mathbf c ,\qquad
    +N=2E-G=\frac{10}{7}\mathbf b-\frac{65}{91}\mathbf c .
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Area of \(\triangle ABC\)
    +
    +The quadrilateral \(DEGF\) can be split into \(\triangle DE G\) and \(\triangle DGF\).
    +
    +For any three points \(P=\alpha\mathbf b+\beta\mathbf c\),
    +\(Q=\gamma\mathbf b+\delta\mathbf c\) we have  
    +
    +\[
    +\bigl[(Q-P)\times(R-P)\bigr]
    +    =(\gamma-\alpha)(\zeta-\beta)-(\delta-\beta)(\xi-\alpha)\;\bigl(\mathbf b\times\mathbf c\bigr),
    +\]
    +
    +so the area of a triangle equals the absolute value of that determinant
    +times \(\dfrac12|\mathbf b\times\mathbf c|\).
    +
    +*Triangle \(DEG\)*  
    +
    +\[
    +\det\!\begin{pmatrix}
    +\frac57-\frac17 & 0\\[2mm]
    +0-\frac17&\frac{65}{91}
    +\end{pmatrix}
    +  =\frac{20}{49}.
    +\]
    +
    +Thus \(\displaystyle
    +\text{Area}(DEG)=\frac{20}{49}\cdot\frac12|\mathbf b\times\mathbf c|.
    +\)
    +
    +*Triangle \(DGF\)*  
    +
    +\[
    +\det\!\begin{pmatrix}
    +0-\frac17&\frac{65}{91}\\[2mm]
    +0-\frac17&\frac{13}{91}
    +\end{pmatrix}
    +  =\frac{4}{49},
    +\qquad
    +\text{Area}(DGF)=\frac{4}{49}\cdot\frac12|\mathbf b\times\mathbf c|.
    +\]
    +
    +Hence  
    +
    +\[
    +\text{Area}(DEGF)=\Bigl(\frac{20}{49}+\frac{4}{49}\Bigr)
    +                  \frac12|\mathbf b\times\mathbf c|
    +                =\frac{24}{49}\,\text{Area}(\triangle ABC).
    +\]
    +
    +Given \(\text{Area}(DEGF)=288\),
    +
    +\[
    +\frac{24}{49}\,\text{Area}(\triangle ABC)=288
    +\Longrightarrow
    +\text{Area}(\triangle ABC)=288\cdot\frac{49}{24}=12\cdot49=588.
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Area of the heptagon \(AFNBCEM\)
    +
    +Place the points in the \((\alpha,\beta)\)–plane where \((\alpha,\beta)\) are the
    +coefficients of \(\mathbf b,\mathbf c\):
    +
    +\[
    +\begin{array}{c|c}
    +\text{Vertex}&(\alpha,\beta)\\\hline
    +A&(0,0)\\
    +F&(0,\frac{13}{91})\\
    +N&(\frac{10}{7},-\frac{65}{91})\\
    +B&(1,0)\\
    +C&(0,1)\\
    +E&(\frac57,0)\\
    +M&\bigl(-\frac17,\frac{26}{91}\bigr)
    +\end{array}
    +\]
    +
    +Applying the shoelace formula to these seven points gives
    +
    +\[
    +\begin{aligned}
    +\sum x_i y_{i+1}-y_i x_{i+1}
    +&=1,\\[2mm]
    +\text{Area}_{\text{coeff}}&=\frac12\cdot1=\frac12 .
    +\end{aligned}
    +\]
    +
    +In the original plane a figure’s area is multiplied by
    +\(|\mathbf b\times\mathbf c|=2\,\text{Area}(\triangle ABC)\).
    +Thus
    +
    +\[
    +\text{Area}(AFNBCEM)=|\mathbf b\times\mathbf c|\,
    +\frac12
    +   =\text{Area}(\triangle ABC)=588.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{588}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 588

    +

    Extracted Answer: 588

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The 12 letters are  
    +
    +\[
    +A,B,C,D,E,F,G,H,I,J,K,L .
    +\]
    +
    +A random grouping into six unordered pairs is performed, each pair is written with its
    +letters in alphabetical order, and then the six two‑letter “words’’ are listed
    +alphabetically.  
    +
    +Let the word that appears last (the lexicographically greatest word) be called the **max word**.
    +The max word is determined by the *first* letters of the six pairs:
    +its first letter is the largest among the six first letters, and if several pairs have that
    +first letter, the one with the larger second letter wins.
    +
    +--------------------------------------------------------------------
    +### 1.   Total number of possible pairings
    +\[
    +\#\text{pairings}= \frac{12!}{2!^{6}\,6!}=10395 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.   When does the max word contain \(G\)?
    +
    +Two mutually exclusive possibilities:
    +
    +* **(A) \(G\) is the first letter of its pair.**  
    +  Then the pair is \((G,X)\) with \(X\in\{H,I,J,K,L\}\).
    +  For \((G,X)\) to be the max word, no other pair may have a first
    +  letter larger than \(G\).  
    +  Hence each of the other four letters \(\{H,I,J,K,L\}\setminus\{X\}\) must be paired
    +  with a letter \(\le F\) (otherwise its first letter would exceed \(G\)).
    +  The remaining letters are  
    +
    +  * 4 “high’’ letters \(\{H,I,J,K,L\}\setminus\{X\}\);
    +  * 6 “low’’ letters \(\{A,B,C,D,E,F\}\).
    +
    +  Choose which four low letters are matched with the four high letters
    +  and then match them (an injection).  
    +  The number of ways is  
    +
    +  \[
    +  {}_{6}P_{4}=6\cdot5\cdot4\cdot3=360 .
    +  \]
    +
    +  The two low letters left over are forced to pair with each other.
    +  Thus for a fixed \(X\) there are \(360\) pairings, and there are
    +  \(5\) possible choices for \(X\):
    +
    +  \[
    +  N_A=5\cdot360=1800 .
    +  \]
    +
    +* **(B) \(G\) is the second letter of its pair.**  
    +  Then the pair is \((X,G)\) with \(X<G\), and \(X\) must be the
    +  largest first letter of any pair.  
    +  If \(X\le E\) there are not enough letters \(\le X\) to pair with all
    +  letters \(>X\) (there would be more “high’’ letters than “low’’ ones).  
    +  The only possible value is \(X=F\).
    +
    +  Pair \(G\) with \(F\).  The five letters \(\{H,I,J,K,L\}\) must each be paired
    +  with a distinct letter from \(\{A,B,C,D,E\}\).  There are  
    +
    +  \[
    +  5! =120
    +  \]
    +
    +  ways to do this, and no letters remain.
    +
    +  Hence  
    +
    +  \[
    +  N_B =120 .
    +  \]
    +
    +--------------------------------------------------------------------
    +### 3.   Favourable pairings
    +\[
    +N_{\text{fav}}=N_A+N_B=1800+120=1920 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.   Desired probability
    +\[
    +P=\frac{N_{\text{fav}}}{\#\text{pairings}}
    +   =\frac{1920}{10395}
    +   =\frac{128}{693}\qquad(\gcd(128,693)=1).
    +\]
    +
    +Thus \(m=128,\;n=693\) and  
    +
    +\[
    +m+n=128+693=821 .
    +\]
    +
    +\[
    +\boxed{821}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 821

    +

    Extracted Answer: 821

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Six points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \triangle BGE $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the line be the \(x\)-axis and put  
    +
    +\[
    +A=(0,0),\qquad B=(b,0),\qquad C=(c,0),\qquad D=(d,0),\qquad E=(e,0),\qquad F=(f,0)
    +\]
    +
    +with the points in the order \(A\!<\!B\!<\!C\!<\!D\!<\!E\!<\!F\).
    +
    +---
    +
    +### 1.  Locate the collinear points
    +
    +\[
    +\begin{aligned}
    +AC&=26 \Longrightarrow c-0 = 26 \; \Rightarrow\; c=26,\\[2pt]
    +CE&=31 \Longrightarrow e-c =31 \; \Rightarrow\; e=26+31=57,\\[2pt]
    +AF&=73 \Longrightarrow f=73 .
    +\end{aligned}
    +\]
    +
    +From \(DF=33\) we get  
    +
    +\[
    +f-d =33 \Longrightarrow d = f-33 = 73-33 =40 .
    +\]
    +
    +From \(BD=22\),
    +
    +\[
    +d-b =22 \Longrightarrow b = d-22 = 40-22 =18 .
    +\]
    +
    +Thus  
    +
    +\[
    +A=(0,0),\; B=(18,0),\; C=(26,0),\; D=(40,0),\; E=(57,0),\; F=(73,0).
    +\]
    +
    +All distances given in the statement are satisfied.
    +
    +---
    +
    +### 2.  Position of \(G\)
    +
    +Let \(G=(x,y)\) with \(y\neq0\).  
    +The distances to \(C\) and \(D\) give
    +
    +\[
    +\begin{cases}
    +(x-26)^2+y^2 = 40^2 =1600,\\[2pt]
    +(x-40)^2+y^2 = 30^2 = 900 .
    +\end{cases}
    +\]
    +
    +Subtracting the equations:
    +
    +\[
    +(x-26)^2-(x-40)^2 = 700.
    +\]
    +
    +Expanding,
    +
    +\[
    +(-52x+26^2)+(80x-40^2)=700\;\Longrightarrow\;28x-924=700,
    +\]
    +
    +so  
    +
    +\[
    +28x=1624\quad\Longrightarrow\quad x=58 .
    +\]
    +
    +Plug \(x=58\) into \((x-26)^2+y^2=1600\):
    +
    +\[
    +(58-26)^2+y^2 = 32^2 + y^2 = 1600\;\Longrightarrow\; y^2 = 1600-1024 = 576,
    +\]
    +
    +hence \(|y|=24\).  
    +Take \(G=(58,24)\) (the other choice \((58,-24)\) gives the same area).
    +
    +---
    +
    +### 3.  Area of \(\triangle BGE\)
    +
    +Points:
    +
    +\[
    +B=(18,0),\qquad E=(57,0),\qquad G=(58,24).
    +\]
    +
    +The base \(BE\) lies on the \(x\)-axis, so its length is  
    +
    +\[
    +BE = 57-18 = 39.
    +\]
    +
    +The altitude from \(G\) to the line \(BE\) is simply \(|y| = 24\).
    +
    +Thus  
    +
    +\[
    +\text{Area} = \frac12 \times (\text{base}) \times (\text{height})
    +            = \frac12 \times 39 \times 24
    +            = 39 \times 12
    +            = 468 .
    +\]
    +
    +(Equivalently, the shoelace formula gives \(\frac12|1368-432|=468\).)
    +
    +---
    +
    +\[
    +\boxed{468}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 468

    +

    Extracted Answer: 468

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +d=n+2\qquad (d\ge 1,\; n=d-2).
    +\]
    +
    +Then  
    +
    +\[
    +n+3=d+1 ,\qquad n^{2}+9=(d-2)^{2}+9=d^{2}-4d+13 .
    +\]
    +
    +Hence  
    +
    +\[
    +3(n+3)(n^{2}+9)=3(d+1)(d^{2}-4d+13).
    +\]
    +
    +The condition \(d\mid 3(n+3)(n^{2}+9)\) becomes  
    +
    +\[
    +d \mid 3(d+1)(d^{2}-4d+13).
    +\]
    +
    +Take this congruence modulo \(d\).  
    +Since \(d\equiv0\pmod d\),
    +
    +\[
    +d+1\equiv1,\qquad d^{2}-4d+13\equiv13\pmod d,
    +\]
    +
    +so  
    +
    +\[
    +3(d+1)(d^{2}-4d+13)\equiv 3\cdot1\cdot13=39\pmod d.
    +\]
    +
    +Thus \(d\) must divide \(39\):
    +
    +\[
    +d\in\{1,3,13,39\}.
    +\]
    +
    +Recall \(d=n+2\) and we need \(n>0\).  
    +Hence
    +
    +\[
    +n=d-2\in\{-1,1,11,37\}.
    +\]
    +
    +Discard the non‑positive value \(-1\). The admissible positive integers are  
    +
    +\[
    +n=1,\;11,\;37 .
    +\]
    +
    +Check:
    +
    +* \(n=1\): \(n+2=3\) and \(3(1+3)(1^{2}+9)=120\) is divisible by \(3\).
    +* \(n=11\): \(n+2=13\) and \(3(14)(130)=5460\) is divisible by \(13\).
    +* \(n=37\): \(n+2=39\) and \(3(40)(1378)=165360\) is divisible by \(39\).
    +
    +All satisfy the condition.  
    +
    +The required sum is  
    +
    +\[
    +1+11+37 = 49.
    +\]
    +
    +\[
    +\boxed{49}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 49

    +

    Extracted Answer: 49

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +A piecewise linear periodic function is defined by $f(x)=\begin{cases}x&\text{if }x\in[-1,1)\\2-x&\text{if }x\in[1,3)\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\frac{a+b\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For the periodic saw‑tooth  
    +
    +\[
    +f(x)=\begin{cases}
    +x-4k,&x\in[-1+4k,\,1+4k)\\[2pt]
    +4k+2-x,&x\in[1+4k,\,3+4k)
    +\end{cases}\qquad(k\in\mathbb Z)
    +\]
    +
    +the parabola is  
    +
    +\[
    +x = 34y^{2}\qquad (y\in[-1,1]).
    +\]
    +
    +Hence an intersection point \((x,y)\) must satisfy  
    +
    +\[
    +y=f(x),\qquad x=34y^{2}.
    +\]
    +
    +---
    +
    +### 1.  Intersections on an “up” segment  
    +
    +On an up segment \(x= y+4k\).  
    +Substituting \(x=34y^{2}\) gives  
    +
    +\[
    +34y^{2}=y+4k\;\Longrightarrow\;34y^{2}-y-4k=0 .
    +\]
    +
    +For each integer \(k\) with an up segment inside \([0,34]\) (i.e. \(k=0,1,\dots ,8\))
    +the two roots are  
    +
    +\[
    +y_{k}^{\pm}=\frac{1\pm\sqrt{1+544k}}{68}.
    +\]
    +
    +Both satisfy the interval \([-1,1]\) and give \(x\in[-1+4k,\,1+4k)\);
    +hence each \(k\) contributes **two** intersection points.
    +
    +The sum of the two roots for a fixed \(k\) is, by Vieta,
    +
    +\[
    +y_{k}^{+}+y_{k}^{-}= \frac{1}{34}.
    +\]
    +
    +Thus the total contribution of all up‑segments is  
    +
    +\[
    +\sum_{k=0}^{8}(y_{k}^{+}+y_{k}^{-})=9\cdot\frac1{34}=\frac9{34}.
    +\]
    +
    +---
    +
    +### 2.  Intersections on a “down’’ segment  
    +
    +On a down segment \(x=4k+2-y\).  
    +Using \(x=34y^{2}\),
    +
    +\[
    +34y^{2}=4k+2-y\;\Longrightarrow\;34y^{2}+y-(4k+2)=0 .
    +\]
    +
    +For each \(k=0,1,\dots ,8\) the roots are  
    +
    +\[
    +z_{k}^{\pm}= \frac{-1\pm\sqrt{273+544k}}{68}.
    +\]
    +
    +The admissible \(y\)-values must satisfy \(-1<y\le 1\).
    +
    +* For \(k=0,1,\dots ,7\) we have \(\sqrt{273+544k}<67\); both roots lie in
    +\((-1,1]\) and give valid points.
    +* For \(k=8\) the negative root satisfies \(y<-1\) and is rejected; only the
    +positive root remains.
    +
    +Hence we obtain two points for each \(k=0,\dots ,7\) and one point for
    +\(k=8\) – a total of \(17\) points.
    +
    +The sum of the two roots of the quadratic for any \(k\) is  
    +
    +\[
    +z_{k}^{+}+z_{k}^{-}= -\frac1{34}.
    +\]
    +
    +Consequently  
    +
    +\[
    +\sum_{k=0}^{7}(z_{k}^{+}+z_{k}^{-})=8\!\left(-\frac1{34}\right)=-\frac8{34},
    +\]
    +and we must add the remaining positive root for \(k=8\),
    +
    +\[
    +z_{8}^{+}= \frac{-1+\sqrt{4625}}{68}= \frac{-1+5\sqrt{185}}{68}.
    +\]
    +
    +Therefore the total contribution of the down‑segments is  
    +
    +\[
    +-\frac8{34}+z_{8}^{+}= -\frac{16}{68}+ \frac{-1+5\sqrt{185}}{68}
    += \frac{-17+5\sqrt{185}}{68}.
    +\]
    +
    +---
    +
    +### 3.  Sum of all \(y\)-coordinates  
    +
    +\[
    +\begin{aligned}
    +S&=\frac9{34}+ \left(-\frac8{34}+z_{8}^{+}\right)\\[2pt]
    +  &=\frac1{34}+z_{8}^{+}
    +   =\frac{2}{68}+ \frac{-1+5\sqrt{185}}{68}
    +   =\frac{1+5\sqrt{185}}{68}.
    +\end{aligned}
    +\]
    +
    +Thus the sum can be written as  
    +
    +\[
    +S=\frac{a+b\sqrt{c}}{d}\quad\text{with}\quad 
    +a=1,\;b=5,\;c=185,\;d=68.
    +\]
    +
    +All conditions are satisfied (\(\gcd(a,b,d)=1\), \(c\) square‑free).
    +
    +Finally  
    +
    +\[
    +a+b+c+d = 1+5+185+68 = \boxed{259}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 259

    +

    Extracted Answer: 259

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 27 cells of a $3\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. 
    + | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | 
    + | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | 
    + | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | 
    + The number of different ways to fill such a grid can be written as $p^a\cdot q^b\cdot r^c\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\cdot a+q\cdot b+r\cdot c+s\cdot d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The grid has three rows and three vertical \(3\times3\) blocks.  
    +Let the rows be \(R_1,R_2,R_3\) and the blocks be \(B_1,B_2,B_3\).
    +
    +---
    +
    +### 1.  How the numbers are placed in the rows and blocks  
    +
    +For a given number \(k\in\{1,\ldots ,9\}\) it must appear  
    +
    +* once in each row (three appearances), and  
    +* once in each block (three appearances).
    +
    +Hence the three positions of \(k\) correspond to a **bijection** between the set of rows and the set of blocks.  
    +Thus for each \(k\) we may choose a permutation \(\sigma_k\in S_3\) :
    +
    +\[
    +\sigma_k(r)=\text{the block in which }k\text{ occurs in row }r .
    +\]
    +
    +Conversely, a choice of a permutation \(\sigma_k\) for each \(k\) determines in which block every entry of the grid lies.
    +
    +---
    +
    +### 2.  Counting the possible collections of permutations  
    +
    +Write a column of the \(3\times9\) “block‑matrix’’ \(M\) as a permutation of \((1,2,3)\) – the three symbols denote the block in which the number of that column appears in rows \(1,2,3\).
    +
    +Thus we need a sequence of nine permutations \((p_1,\dots ,p_9)\) such that each ordered pair \((\text{row},\text{block})\) occurs exactly three times; equivalently each number appears three times in each row and three times in each block.
    +
    +Let  
    +
    +\[
    +x_1,\dots ,x_6
    +\]
    +
    +be the numbers of the six possible permutations of \(S_3\) in the sequence.
    +The conditions give the linear system  
    +
    +\[
    +\begin{aligned}
    +x_1+x_2&=3\\
    +x_3+x_4&=3\\
    +x_5+x_6&=3\\
    +x_3+x_5&=3\\
    +x_1+x_6&=3\\
    +x_2+x_4&=3\\
    +x_4+x_6&=3\\
    +x_2+x_5&=3\\
    +x_1+x_3&=3
    +\end{aligned}
    +\]
    +
    +which has the solutions  
    +
    +\[
    +\begin{array}{c|cccccc}
    + &x_1&x_2&x_3&x_4&x_5&x_6\\\hline
    +t=0&0&3&3&0&0&3\\
    +t=1&1&2&2&1&1&2\\
    +t=2&2&1&1&2&2&1\\
    +t=3&3&0&0&3&3&0
    +\end{array}
    +\qquad (t=0,1,2,3).
    +\]
    +
    +For a fixed solution the columns can be ordered in
    +
    +\[
    +\frac{9!}{x_1!x_2!x_3!x_4!x_5!x_6!}
    +\]
    +
    +ways.  Summing over the four solutions gives  
    +
    +\[
    +\begin{aligned}
    +N_M &= \frac{9!}{3!^3}+2\cdot\frac{9!}{1!\,2!^2\,1!\,1!\,2!}
    +      +\frac{9!}{3!^3}\\
    +    &=1680+2\cdot45360+1680=94\,080 .
    +\end{aligned}
    +\]
    +
    +So there are \(94\,080\) possible matrices \(M\) describing in which block each number lies.
    +
    +---
    +
    +### 3.  Filling the inner columns of each block  
    +
    +Inside a block \(B\) each row already has three distinct numbers (the three numbers assigned to that row in the block).  
    +These three numbers can be placed in the three inner columns of the block in any order, i.e. in \((3!)^3=6^3\) ways.
    +
    +Since the three blocks are independent, the total number of ways to complete the grid is  
    +
    +\[
    +94\,080\cdot (6^3)^3 = 94\,080\cdot 6^9 .
    +\]
    +
    +Because \(6^9 = (2\cdot3)^9 =2^{9}\,3^{9}\),
    +
    +\[
    +\begin{aligned}
    +94\,080\cdot6^9 &= \bigl(2^7\cdot3\cdot5\cdot7^2\bigr)\cdot\bigl(2^9\cdot3^9\bigr)\\
    +                &=2^{16}\cdot3^{10}\cdot5^1\cdot7^2 .
    +\end{aligned}
    +\]
    +
    +Thus the total number of fillings is  
    +
    +\[
    +2^{16}\cdot 3^{10}\cdot 5^{1}\cdot 7^{2}.
    +\]
    +
    +---
    +
    +### 4.  Computing the required sum  
    +
    +Take \(p=2,\ a=16;\; q=3,\ b=10;\; r=5,\ c=1;\; s=7,\ d=2\).
    +
    +\[
    +p\,a+q\,b+r\,c+s\,d = 2\cdot16 + 3\cdot10 + 5\cdot1 + 7\cdot2
    +                     = 32 + 30 + 5 + 14 = 81 .
    +\]
    +
    +\[
    +\boxed{81}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 81

    +

    Extracted Answer: 81

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    First rewrite the chain of inequalities  
    +
    +\[
    +x-yz<y-zx<z-xy
    +\]
    +
    +as two separate inequalities.
    +
    +\[
    +\begin{aligned}
    +x-yz &< y-zx \\[2mm]
    +y-zx &< z-xy
    +\end{aligned}
    +\]
    +
    +\[
    +\begin{aligned}
    +x-yz-y+zx&<0\qquad\Longrightarrow\qquad (x-y)(1+z)<0,\\[2mm]
    +y-zx-z+xy&<0\qquad\Longrightarrow\qquad (y-z)(1+x)<0 .
    +\end{aligned}
    +\]
    +
    +The third inequality \( (x-z)(1+y)<0\) follows by adding the two, so the region is
    +described by  
    +
    +\[
    +\boxed{(x-y)(1+z)<0,\qquad (y-z)(1+x)<0}
    +\]
    +
    +together with the plane \(x+y+z=75\).
    +
    +---
    +
    +### 1.   Sign patterns
    +
    +Let  
    +
    +\[
    +S_x=\operatorname{sgn}(1+x),\quad S_y=\operatorname{sgn}(1+y),\quad S_z=\operatorname{sgn}(1+z).
    +\]
    +
    +From the two product‑inequalities we obtain  
    +
    +\[
    +\operatorname{sgn}(x-y)=-S_z,\qquad 
    +\operatorname{sgn}(y-z)=-S_x .
    +\]
    +
    +Thus  
    +
    +\[
    +\begin{array}{c|c|c|c}
    +S_x & S_y & S_z &\text{order of }x,y,z\\ \hline
    ++ & + & + & x<y<z\\
    ++ & - & - & y<z<x\\
    +- & + & + & x<z<y\\
    +- & - & - & \text{impossible (sum }\;75) 
    +\end{array}
    +\]
    +
    +Hence the points satisfying the chain split into three convex regions, corresponding
    +to the three admissible sign patterns above.
    +
    +---
    +
    +### 2.   Which region is bounded?
    +
    +*Region  \(x<y<z\)  (all three numbers \(> -1\)).*  
    +Using the plane equation \(z=75-x-y\) the conditions become  
    +
    +\[
    +-1<x<y,\qquad y<\frac{75-x}{2}.
    +\]
    +
    +In the \((x,y)\)-plane this is the triangle bounded by  
    +
    +\[
    +x=-1,\; y=x,\; y=\frac{75-x}{2}.
    +\]
    +
    +The three vertices are  
    +
    +\[
    +(-1,-1),\;(-1,38),\;(25,25).
    +\]
    +
    +Its area in the \(xy\)-plane is
    +
    +\[
    +\frac12\,(39)(26)=507 .
    +\]
    +
    +Since the plane \(x+y+z=75\) is tilted, an element \(dx\,dy\) on the
    +\(xy\)-plane corresponds to an area element  
    +
    +\[
    +\sqrt{1+(\partial z/\partial x)^2+(\partial z/\partial y)^2}\;dx\,dy
    +        =\sqrt{1+1+1}\;dx\,dy=\sqrt3\,dx\,dy .
    +\]
    +
    +Thus the area of this region in the plane is  
    +
    +\[
    +507\sqrt3 .
    +\]
    +
    +*The other two regions* (\(y<z<x\) and \(x<z<y\)) project onto unbounded
    +half‑planes, so they have infinite area.
    +
    +Hence the **unique finite region** is the one with \(x<y<z\), and its area is
    +\(507\sqrt3\).
    +
    +---
    +
    +### 3.   Answer
    +
    +The area is \(a\sqrt b\) with \(a=507\) and \(b=3\); therefore  
    +
    +\[
    +a+b=507+3=510 .
    +\]
    +
    +\[
    +\boxed{510}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 510

    +

    Extracted Answer: 510

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The product $ \prod_{k=4}^{63} \frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})} = \frac{\log_4(5^{15})}{\log_5(5^{12})} \cdot \frac{\log_5(5^{24})}{\log_6(5^{21})} \cdot \frac{\log_6(5^{35})}{\log_7(5^{32})} \cdots \frac{\log_{63}(5^{3968})}{\log_{64}(5^{3965})} $ is equal to $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +\prod_{k=4}^{63}\frac{\log_k\bigl(5^{k^2-1}\bigr)}{\log_{k+1}\bigl(5^{k^2-4}\bigr)}
    +\]
    +
    +---
    +
    +### 1.  Use change‑of‑base
    +
    +\[
    +\log_k\bigl(5^{k^2-1}\bigr)=\frac{\log_5\bigl(5^{k^2-1}\bigr)}{\log_5 k}
    +      =\frac{k^{2}-1}{\log_5 k},
    +\qquad
    +\log_{k+1}\bigl(5^{k^2-4}\bigr)=\frac{k^{2}-4}{\log_5 (k+1)} .
    +\]
    +
    +Hence each factor of the product equals  
    +
    +\[
    +\frac{k^2-1}{k^2-4}\;
    +      \frac{\log_5(k+1)}{\log_5k}.
    +\]
    +
    +So
    +
    +\[
    +P = \underbrace{\prod_{k=4}^{63}\frac{k^2-1}{k^2-4}}_{\displaystyle P_1}
    +    \;
    +    \underbrace{\prod_{k=4}^{63}\frac{\log_5(k+1)}{\log_5k}}_{\displaystyle P_2}.
    +\]
    +
    +---
    +
    +### 2.  Simplify \(P_1\)
    +
    +\[
    +\frac{k^2-1}{k^2-4}= \frac{(k-1)(k+1)}{(k-2)(k+2)}
    +                  =\frac{k-1}{k-2}\cdot\frac{k+1}{k+2}.
    +\]
    +
    +Thus  
    +
    +\[
    +P_1=\Bigl(\prod_{k=4}^{63}\frac{k-1}{k-2}\Bigr)
    +    \Bigl(\prod_{k=4}^{63}\frac{k+1}{k+2}\Bigr).
    +\]
    +
    +Both products telescope:
    +
    +\[
    +\prod_{k=4}^{63}\frac{k-1}{k-2}
    +   =\frac{3}{2}\cdot\frac{4}{3}\cdots\frac{62}{61}
    +   =\frac{62}{2}=31,
    +\]
    +
    +\[
    +\prod_{k=4}^{63}\frac{k+1}{k+2}
    +   =\frac{5}{6}\cdot\frac{6}{7}\cdots\frac{64}{65}
    +   =\frac{5}{65}=\frac1{13}.
    +\]
    +
    +Therefore  
    +
    +\[
    +P_1 =31\cdot\frac1{13} =\frac{31}{13}.
    +\]
    +
    +---
    +
    +### 3.  Simplify \(P_2\)
    +
    +\[
    +P_2 =\prod_{k=4}^{63}\frac{\log_5(k+1)}{\log_5k}
    +    =\frac{\log_5 5\;\log_5 6\;\cdots\;\log_5 64}
    +           {\log_5 4\;\log_5 5\;\cdots\;\log_5 63}
    +    =\frac{\log_5 64}{\log_5 4}.
    +\]
    +
    +Using the change‑of‑base formula,
    +
    +\[
    +\frac{\log_5 64}{\log_5 4}= \log_4 64.
    +\]
    +
    +Since \(4^3=64\), we have \(\log_4 64 = 3\). Hence  
    +
    +\[
    +P_2 = 3.
    +\]
    +
    +---
    +
    +### 4.  Combine the two parts
    +
    +\[
    +P = P_1\cdot P_2 = \frac{31}{13}\times 3 = \frac{93}{13}.
    +\]
    +
    +Thus the product equals \(\displaystyle\frac{m}{n}\) with \(m=93,\; n=13\).
    +
    +\[
    +m+n = 93+13 = 106.
    +\]
    +
    +\[
    +\boxed{106}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 106

    +

    Extracted Answer: 106

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Factor  
    +
    +\[
    +2025=45^{2}= (3^{2}\cdot5)^{2}=3^{4}\cdot5^{2}.
    +\]
    +
    +Hence a divisor of \(2025\) is of the form \(3^{a}5^{b}\) with  
    +
    +\(0\le a\le4\) and \(0\le b\le2\).  
    +Thus  
    +
    +\[
    +|A|=(4+1)(2+1)=15 .
    +\]
    +
    +All \(2^{15}\) subsets of \(A\) are equally likely.
    +
    +---
    +
    +### Divisors needed for the LCM
    +
    +For a subset \(B\subseteq A\),
    +
    +\[
    +\operatorname{lcm}(B)=3^{\max_{d\in B}a_d}\;5^{\max_{d\in B}b_d}.
    +\]
    +
    +To obtain \(\operatorname{lcm}(B)=2025=3^{4}5^{2}\) we must have  
    +
    +* at least one element whose exponent of \(3\) equals \(4\);
    +* at least one element whose exponent of \(5\) equals \(2\).
    +
    +Define  
    +
    +\[
    +D_3=\{d\in A:\, \text{the exponent of }3\text{ in }d\text{ is }4\},\qquad 
    +D_5=\{d\in A:\, \text{the exponent of }5\text{ in }d\text{ is }2\}.
    +\]
    +
    +Counting these divisors:
    +
    +* \(D_3 = \{3^{4}5^{0}, 3^{4}5^{1}, 3^{4}5^{2}\}\) ⇒ \(|D_3|=3\);
    +* \(D_5 = \{3^{0}5^{2}, 3^{1}5^{2}, 3^{2}5^{2}, 3^{3}5^{2}, 3^{4}5^{2}\}\) ⇒ \(|D_5|=5\);
    +* The intersection \(D_3\cap D_5=\{3^{4}5^{2}\}= \{2025\}\) ⇒ \(|D_3\cap D_5|=1\).
    +
    +Thus a subset \(B\) has \(\operatorname{lcm}(B)=2025\) iff it contains **at least one element of \(D_3\) and at least one element of \(D_5\)** (the same element may satisfy both conditions).
    +
    +---
    +
    +### Counting such subsets
    +
    +Let \(U\) be the set of all subsets of \(A\) (including the empty set).  
    +Use inclusion–exclusion.
    +
    +\[
    +\begin{aligned}
    +|U| &=2^{15},\\[2mm]
    +\text{Subsets missing }D_3 &: 2^{15-|D_3|}=2^{12},\\[2mm]
    +\text{Subsets missing }D_5 &: 2^{15-|D_5|}=2^{10},\\[2mm]
    +\text{Subsets missing both }D_3\text{ and }D_5 &: 
    +2^{15-|D_3\cup D_5|}
    + =2^{15-(3+5-1)}=2^{8}.
    +\end{aligned}
    +\]
    +
    +Hence the number of subsets that contain at least one element of each set is  
    +
    +\[
    +\begin{aligned}
    +N_{\text{good}}
    +&=|U|-2^{12}-2^{10}+2^{8}\\
    +&=32768-4096-1024+256\\
    +&=27904.
    +\end{aligned}
    +\]
    +
    +Every such subset is non‑empty, so these are exactly the favorable subsets.
    +
    +---
    +
    +### Probability
    +
    +\[
    +P=\frac{N_{\text{good}}}{2^{15}}=\frac{27904}{32768}.
    +\]
    +
    +Reduce the fraction:
    +
    +\[
    +27904=2^{8}\cdot 109,\qquad 32768=2^{15}=2^{8}\cdot 128
    +\Longrightarrow P=\frac{109}{128}.
    +\]
    +
    +Thus \(m=109\) and \(n=128\), and  
    +
    +\[
    +m+n = 109+128 = 237.
    +\]
    +
    +\[
    +\boxed{237}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 237

    +

    Extracted Answer: 237

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Circle $\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\omega_2$ with radius 15. Points $C$ and $D$ lie on $\omega_2$ such that $\overline{BC}$ is a diameter of $\omega_2$ and $\overline{BC} \perp \overline{AD}$. The rectangle $EFGH$ is inscribed in $\omega_1$ such that $\overline{EF} \perp \overline{BC}$, $C$ is closer to $\overline{GH}$ than to $\overline{EF}$, and $D$ is closer to $\overline{FG}$ than to $\overline{EH}$, as shown. Triangles $\triangle DGF$ and $\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +* \(\omega _2\) have centre \(O\) and radius \(15\);
    +* \(BC\) be a diameter of \(\omega _2\);
    +* \(\omega _1\) have centre \(A\) and radius \(6\), internally tangent to \(\omega _2\) at \(B\).
    +
    +--------------------------------------------------------------------
    +### 1.  Coordinates
    +
    +Place \(BC\) on the \(x\)-axis with  
    +
    +\[
    +B=(-15,0),\qquad C=(15,0),\qquad O=(0,0).
    +\]
    +
    +Since the circles are internally tangent, the centres are collinear with the
    +tangency point and  
    +
    +\[
    +OA=R_2-R_1=15-6=9 .
    +\]
    +
    +Thus \(A\) lies on the ray \(OB\) at distance \(9\) from \(O\); consequently  
    +
    +\[
    +A=(-9,0).
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Point \(D\)
    +
    +\(AD\perp BC\), so \(AD\) is the vertical line \(x=-9\).
    +Intersecting this line with \(\omega _2\) (\(x^2+y^2=225\)) gives  
    +
    +\[
    +y^2=225-(-9)^2=144\quad\Longrightarrow\quad y=\pm12 .
    +\]
    +
    +Because the statement “\(D\) is closer to \(\overline{FG}\) than to \(\overline{EH}\)’’ puts \(D\) above the centre, we take  
    +
    +\[
    +D=(-9,12).
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Rectangle \(EFGH\)
    +
    +The rectangle is inscribed in \(\omega _1\), so its circum‑centre is the
    +centre of \(\omega _1\); hence the centre of the rectangle is \(A\).
    +
    +Let  
    +
    +* half‑width \(a\) (distance from the centre to each vertical side),
    +* half‑height \(b\) (distance from the centre to each horizontal side).
    +
    +Because the vertices lie on \(\omega _1\),
    +
    +\[
    +a^{2}+b^{2}=6^{2}=36. \tag{1}
    +\]
    +
    +The condition “\(\overline{EF}\perp\overline{BC}\)” makes \(\overline{EF}\) vertical,
    +so the rectangle’s sides are parallel/perpendicular to \(BC\).  
    +Taking the usual labelling (counter‑clockwise)
    +
    +\[
    +\begin{aligned}
    +E&=(-9-a,\,-b),\qquad 
    +F=(-9-a,\,b),\\
    +G&=(-9+a,\,b),\qquad 
    +H=(-9+a,\,-b).
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Equality of the two triangle areas
    +
    +\[
    +\begin{aligned}
    +\text{Area}(\triangle DGF)&=\frac12\cdot GF\cdot(\text{vertical distance }D\text{ to }y=b)\\
    +&=\frac12\cdot(2a)\cdot(12-b)=a(12-b),\\[4pt]
    +\text{Area}(\triangle CHG)&=\frac12\cdot GH\cdot(\text{horizontal distance }C\text{ to }x=-9+a)\\
    +&=\frac12\cdot(2b)\cdot(24-a)=b(24-a).
    +\end{aligned}
    +\]
    +
    +Given the areas are equal,
    +
    +\[
    +a(12-b)=b(24-a)\quad\Longrightarrow\quad12a=24b\quad\Longrightarrow\quad a=2b. \tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Solving for \(a\) and \(b\)
    +
    +Substituting \(a=2b\) into (1):
    +
    +\[
    +(2b)^{2}+b^{2}=36\;\Longrightarrow\;5b^{2}=36\;\Longrightarrow\;b^{2}=\frac{36}{5}.
    +\]
    +
    +Hence  
    +
    +\[
    +a^{2}=(2b)^{2}=4b^{2}= \frac{144}{5}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 6.  Area of the rectangle
    +
    +\[
    +\text{Area}= (2a)(2b)=4ab=4(2b)b=8b^{2}=8\left(\frac{36}{5}\right)=\frac{288}{5}.
    +\]
    +
    +Thus the area is \(\dfrac{288}{5}\).  In lowest terms \(m=288,\;n=5\), and
    +
    +\[
    +m+n=288+5=293.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{293}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 293

    +

    Extracted Answer: 293

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Alex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1.  How many regions are created by chords?**  
    +
    +If a convex region (here the disk) is cut by \(N\) line‑segments whose interior intersection points are all distinct, the number of regions is  
    +
    +\[
    +R=N+1+I,
    +\]
    +
    +where \(I\) is the total number of interior intersection points.  
    +(Each new segment adds one region, plus one extra region for each interior point where it meets a previous segment.)
    +
    +For our disk  
    +
    +\[
    +N=27\qquad\text{(the two diameters + 25 random chords)} .
    +\]
    +
    +Hence  
    +
    +\[
    +E[R]=28+E[I].
    +\]
    +
    +So we must find the expected number \(E[I]\) of interior intersection points.
    +
    +--------------------------------------------------------------------
    +
    +**Step 2.  Intersections involving the two diameters.**
    +
    +The two diameters intersect at the centre; this contributes one guaranteed intersection.
    +
    +For a random chord \(C\) we ask for the probability that it meets a given diameter.
    +
    +*Vertical diameter.*  
    +The chord meets the vertical line \(x=0\) iff its endpoints lie in opposite half‑planes (one in \(\{Q_1,Q_4\}\) and the other in \(\{Q_2,Q_3\}\)).  
    +Among the six unordered pairs of distinct quadrants, four have this property:
    +
    +\[
    +\{Q_1,Q_2\},\{Q_1,Q_3\},\{Q_2,Q_4\},\{Q_3,Q_4\},
    +\]
    +
    +so  
    +
    +\[
    +P(C\text{ meets the vertical diameter})=\frac{4}{6}=\frac23 .
    +\]
    +
    +Exactly the same reasoning holds for the horizontal diameter.  
    +Thus for each random chord
    +
    +\[
    +P(C\text{ meets a given diameter})=\frac23 .
    +\]
    +
    +With 25 random chords we obtain  
    +
    +\[
    +E[\text{intersections chord–diameter}] = 25\cdot 2\cdot\frac23=\frac{100}{3}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 3.  Intersections among the 25 random chords.**
    +
    +Each chord is obtained by picking two points on the circle that lie in different quadrants.  
    +The unordered pair of quadrants a chord uses is equally likely to be any of the six possibilities
    +
    +* four *adjacent* pairs: \(\{01\},\{12\},\{23\},\{30\}\);
    +* two *opposite* pairs: \(\{02\},\{13\}\).
    +
    +Thus a chord is *adjacent* with probability \(\frac23\) and *opposite* with probability \(\frac13\).
    +
    +--------------------------------------------------------------------
    +### 3.1  Classifying a pair of chords
    +
    +Let chord 1 belong to unordered pair \(P\) and chord 2 to unordered pair \(Q\).  
    +There are three possible relationships between \(P\) and \(Q\):
    +
    +| relationship | how many ordered \((P,Q)\) | intersection probability |
    +|--------------|---------------------------|--------------------------|
    +| same pair (\(P=Q\)) | 6 | \(\displaystyle\frac12\) |
    +| disjoint pairs (no common quadrant) | 6 (4 adjacent‑adjacent, 2 opposite‑opposite) | \(0\) for adjacent–adjacent, \(1\) for opposite–opposite |
    +| share exactly one quadrant | 24 (8 adjacent‑adjacent, 16 adjacent‑opposite) | \(\displaystyle\frac12\) |
    +
    +*Why the numbers?*  
    +
    +* Two chords of the **same type** intersect iff the order of the two points in the first quadrant is opposite to the order of the two points in the second quadrant – probability \(1/2\).
    +
    +* Two **disjoint adjacent** chords lie in quadrants \(\{0,1\}\) and \(\{2,3\}\); all points of the first lie before those of the second, so they never intersect.
    +
    +* Two **disjoint opposite** chords are \(\{0,2\}\) and \(\{1,3\}\); the four points appear in the order \(0,1,2,3\), which is alternating, so they always intersect.
    +
    +* When the chords **share exactly one quadrant**, the shared quadrant contains two independent uniform points; whichever of the two lies first decides whether the endpoints are interleaved. Hence the intersection probability is \(1/2\).
    +
    +--------------------------------------------------------------------
    +### 3.2  Expected intersection probability for a random pair
    +
    +Summing the contributions of all 36 ordered possibilities:
    +
    +\[
    +\begin{aligned}
    +\sum_{P,Q} p_{P,Q}&=
    +6\!\left(\frac12\right) 
    ++ 4\!\cdot\!0 
    ++ 2\!\cdot\!1 
    ++ 24\!\left(\frac12\right) \\
    +&= 3 + 2 + 12 = 17 .
    +\end{aligned}
    +\]
    +
    +Therefore for two independently chosen random chords
    +
    +\[
    +P(\text{they intersect}) = \frac{17}{36}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.3  Expected number of chord–chord intersections
    +
    +There are \(\binom{25}{2}=300\) unordered pairs of the 25 chords, so
    +
    +\[
    +E[\text{chord–chord intersections}]
    +=300\cdot\frac{17}{36}= \frac{425}{3}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 4.  Total expected number of interior intersections.**
    +
    +\[
    +\begin{aligned}
    +E[I] &= \underbrace{1}_{\text{diameters}} 
    +      + \underbrace{\frac{100}{3}}_{\text{chord–diameter}} 
    +      + \underbrace{\frac{425}{3}}_{\text{chord–chord}} \\[2mm]
    +     &= \frac{525}{3}+1 = 175+1 = 176 .
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 5.  Expected number of regions.**
    +
    +\[
    +E[R]=N+1+E[I]=27+1+176=204.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{204}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 204

    +

    Extracted Answer: 204

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Four unit squares form a $2 \times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Label the twelve unit segments that form the sides of the four unit squares as in the picture  
    +
    +\[
    +\begin{array}{c}
    +\text{top left square }A:\; a\;( \text{top}) ,\; a'(\text{left}) ,\; u (\text{vertical middle up}) ,\; x (\text{horizontal middle left})\\[2mm]
    +\text{top right square }B:\; b ,\; b' ,\; u ,\; y\\[2mm]
    +\text{bottom left square }C:\; c ,\; c' ,\; v ,\; x\\[2mm]
    +\text{bottom right square }D:\; d ,\; d' ,\; v ,\; y
    +\end{array}
    +\]
    +
    +All variables are binary:  
    +
    +\[
    +0=\text{blue},\qquad 1=\text{red}.
    +\]
    +
    +---
    +
    +### 1.  Express the condition for each square  
    +
    +For a square the number of red sides must be exactly two.  
    +If we let  
    +
    +\[
    +\begin{aligned}
    +s_A &=x+u, & s_B &=y+u,\\
    +s_C &=x+v, & s_D &=y+v,
    +\end{aligned}
    +\]
    +
    +then the two **boundary** edges of a square must contain  
    +
    +\[
    +r_A =2-s_A,\qquad r_B =2-s_B,\qquad r_C =2-s_C,\qquad r_D =2-s_D
    +\]
    +
    +red sides.  
    +For each square the two boundary edges are distinct from the other squares, so the choices for the
    +four pairs are independent.
    +
    +For a given pair of boundary edges the number of colourings is  
    +
    +\[
    +\begin{cases}
    +1 &\text{if }r_i\in\{0,2\}\;(00\text{ or }11),\\[2mm]
    +2 &\text{if }r_i =1\;(01\text{ or }10).
    +\end{cases}
    +\]
    +
    +Hence, when the interior pattern \((x,y,u,v)\) is fixed, the number of ways to colour the eight
    +outer edges equals  
    +
    +\[
    +2^{\#\{\,i\in\{A,B,C,D\}\mid s_i=1\,\}},
    +\]
    +
    +because a square contributes a factor \(2\) exactly when its interior sum \(s_i\) equals \(1\).
    +
    +Thus the total number of admissible colourings is  
    +
    +\[
    +N=\sum_{(x,y,u,v)\in\{0,1\}^4} 2^{\#\{i\mid s_i=1\}} .
    +\]
    +
    +---
    +
    +### 2.  Enumerate the \(2^4=16\) interior patterns  
    +
    +\[
    +\begin{array}{c|c|c|c|c|c}
    +(x,y,u,v) & s_A & s_B & s_C & s_D &
    +\#\{i\mid s_i=1\}\\\hline
    +0000 &0&0&0&0&0\\
    +0001 &0&0&1&1&2\\
    +0010 &1&1&0&0&2\\
    +0011 &1&1&1&1&4\\
    +0100 &0&1&0&1&2\\
    +0101 &0&1&1&2&2\\
    +0110 &1&2&0&1&2\\
    +0111 &1&2&1&2&2\\
    +1000 &1&0&1&0&2\\
    +1001 &1&0&2&1&2\\
    +1010 &2&1&1&0&2\\
    +1011 &2&1&2&1&2\\
    +1100 &1&1&1&1&4\\
    +1101 &1&1&2&2&2\\
    +1110 &2&2&1&1&2\\
    +1111 &2&2&2&2&0
    +\end{array}
    +\]
    +
    +(The entry “2’’ means the sum of the two interior edges of that square is \(2\); it forces the
    +corresponding pair of boundary edges to be both blue.)
    +
    +The contribution of each pattern is \(2^{\#\{i\mid s_i=1\}}\).  Adding all contributions we get  
    +
    +\[
    +\begin{aligned}
    +N&=1\;(0000)+4\;(0001)+4\;(0010)+16\;(0011)\\
    +  &\quad+4\;(0100)+4\;(0101)+4\;(0110)+4\;(0111)\\
    +  &\quad+4\;(1000)+4\;(1001)+4\;(1010)+4\;(1011)\\
    +  &\quad+16\;(1100)+4\;(1101)+4\;(1110)+1\;(1111)\\[2mm]
    +  &=1+16+48+16+1\\
    +  &=\boxed{82}.
    +\end{aligned}
    +\]
    +
    +Therefore there are **82** ways to colour the twelve unit segments of a \(2\times2\) grid so that
    +every unit square has exactly two red and two blue sides.
    +
    +
    +

    Results

    +

    Correct Answer: 82

    +

    Extracted Answer: 82

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $ n $ values of $ x $ in the interval $ 0 < x < 2\pi $ where $ f(x) = \sin(7\pi \cdot \sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +f(x)=\sin \bigl(7\pi\sin(5x)\bigr)
    +\qquad (0<x<2\pi)
    +\]
    +
    +---
    +
    +### 1.  Zeros of \(f\)
    +
    +\(f(x)=0\iff \sin\bigl(7\pi\sin(5x)\bigr)=0\)
    +
    +\[
    +7\pi\sin(5x)=k\pi\qquad(k\in\mathbb Z)
    +\Longrightarrow\sin(5x)=\frac{k}{7}.
    +\]
    +
    +Since \(\sin(5x)\in[-1,1]\), we must have \(-7\le k\le7\).  
    +Thus \(k\) can be any integer from \(-7\) to \(7\) (15 values).
    +
    +Put \(\theta =5x\). Then \(\theta\in(0,10\pi)\) and we need the number of solutions of  
    +
    +\[
    +\sin\theta =\frac{k}{7}\qquad (k=-7,\ldots,7)
    +\]
    +in \((0,10\pi)\).
    +
    +*If \(|k|=7\) (\(\sin\theta=\pm1\)):* each period \((0,2\pi)\) contributes one solution, and there are five periods in \((0,10\pi)\).  
    +\(\;\Rightarrow\) 5 solutions for \(k=7\) and 5 solutions for \(k=-7\).
    +
    +*If \(k=0\) (\(\sin\theta=0\)):* solutions are \(\theta=n\pi\) with \(n=1,\dots ,9\).  
    +\(\;\Rightarrow\) 9 solutions.
    +
    +*If \(|k|=1,2,\dots ,6\) (\(|\sin\theta|<1\) and \(\neq0\)):* in each \(2\pi\)‑interval there are two solutions, so across five intervals there are \(2\cdot5=10\) solutions.
    +
    +Hence the total number of zeros is  
    +
    +\[
    +n =\underbrace{5+5}_{k=\pm7}+ \underbrace{9}_{k=0}+ \underbrace{12\times10}_{k=\pm1,\dots ,\pm6}
    +      =10+9+120 = 139 .
    +\]
    +
    +---
    +
    +### 2.  Tangent zeros
    +
    +A zero is tangent to the \(x\)-axis when \(f'(x)=0\) as well.
    +
    +\[
    +f'(x)=35\pi\cos\!\bigl(7\pi\sin(5x)\bigr)\,\cos(5x).
    +\]
    +
    +At any zero we have \(\cos\!\bigl(7\pi\sin(5x)\bigr)=\cos(k\pi)=(-1)^k\neq0\); therefore  
    +
    +\[
    +f'(x)=0 \iff \cos(5x)=0.
    +\]
    +
    +\(\cos(5x)=0\) gives \(5x=\dfrac{\pi}{2}+m\pi\;(m\in\mathbb Z)\), i.e.
    +
    +\[
    +x=\frac{(2m+1)\pi}{10}.
    +\]
    +
    +Within \(0<x<2\pi\) the odd integers \(2m+1\) run from \(1\) to \(19\); there are \(10\) such values.
    +At these points \(\sin(5x)=\pm1\), i.e. they correspond exactly to the solutions for \(k=\pm7\).
    +
    +Thus  
    +
    +\[
    +t=10.
    +\]
    +
    +---
    +
    +### 3.  Required sum
    +
    +\[
    +n+t = 139+10 = 149.
    +\]
    +
    +\[
    +\boxed{149}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 149

    +

    Extracted Answer: 149

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +From an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.
    +
    +In general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1 – Greedy description**
    +
    +For a given amount \(N\) let  
    +
    +\[
    +q=\Bigl\lfloor \frac{N}{25}\Bigr\rfloor ,\qquad r=N-25q\;(0\le r<25)
    +\]
    +
    +The greedy algorithm first takes \(q\) quarters, then uses as many dimes as possible and finally pennies.  
    +Hence the greedy number of coins is  
    +
    +\[
    +g(N)=q+\Bigl\lfloor\frac{r}{10}\Bigr\rfloor +(r\bmod 10)
    +      =q+f(r),
    +\]
    +
    +where  
    +
    +\[
    +f(x)=\Bigl\lfloor\frac{x}{10}\Bigr\rfloor +(x\bmod10)
    +\]
    +
    +is the optimal number of coins when only dimes and pennies are allowed.
    +
    +---
    +
    +**Step 2 – Optimal solution with a given number of quarters**
    +
    +If we use \(a\) quarters (\(0\le a\le q\)), we must make the remainder \(N-25a\) with dimes and pennies.  
    +The minimum number of coins for that remainder is \(f(N-25a)\).  
    +Thus the optimal number of coins for \(N\) is  
    +
    +\[
    +\min_{0\le a\le q}\; \bigl[a+f(N-25a)\bigr].
    +\]
    +
    +Because \(f\) is optimal for the two‑coin system \(\{1,10\}\), we only need to compare the greedy choice
    +\(a=q\) with the possibilities where we use fewer quarters.
    +
    +---
    +
    +**Step 3 – Effect of removing one quarter**
    +
    +Write \(r=N-25q\) (the greedy remainder).  
    +If we use one fewer quarter (\(a=q-1\)), the new remainder is \(r+25\), and the coin count becomes  
    +
    +\[
    +(q-1)+f(r+25).
    +\]
    +
    +Greedy is optimal precisely when  
    +
    +\[
    +q+f(r)\le (q-1)+f(r+25)\quad\Longleftrightarrow\quad f(r)+1\le f(r+25).
    +\]
    +
    +Compute \(f(r+25)\) in terms of \(f(r)\).  
    +Since adding \(25\) cents is the same as adding two dimes and five pennies,  
    +
    +\[
    +f(r+25)=r+25-9\Bigl\lfloor\frac{r+25}{10}\Bigr\rfloor .
    +\]
    +
    +The floor changes by  
    +
    +\[
    +\Bigl\lfloor\frac{r+25}{10}\Bigr\rfloor-\Bigl\lfloor\frac{r}{10}\Bigr\rfloor=
    +\begin{cases}
    +2,& r\bmod10\le 4,\\[2pt]
    +3,& r\bmod10\ge 5 .
    +\end{cases}
    +\]
    +
    +Hence  
    +
    +\[
    +f(r+25)=
    +\begin{cases}
    +f(r)+7, & r\bmod10\le4,\\[2pt]
    +f(r)-2, & r\bmod10\ge5 .
    +\end{cases}
    +\]
    +
    +Consequently  
    +
    +* if \(r\bmod10\le4\) then \(f(r+25)=f(r)+7>f(r)+1\) – greedy stays optimal;
    +* if \(r\bmod10\ge5\) then \(f(r+25)=f(r)-2\le f(r)\) – using one fewer quarter gives fewer coins.
    +
    +Thus the greedy algorithm fails **exactly** when the greedy remainder \(r\) satisfies  
    +
    +\[
    +r\bmod10\ge5 \;\Longleftrightarrow\; r\in\{5,6,7,8,9,15,16,17,18,19\}.
    +\]
    +
    +---
    +
    +**Step 4 – Dropping more than one quarter never helps**
    +
    +For two quarters removed we add \(50\) cents to the remainder.  
    +A similar computation gives  
    +
    +\[
    +f(r+50)=f(r)+5 .
    +\]
    +
    +The change in total coin count is \(-2+5=+3\); for three quarters removed the change is \(-3+12=+9\), etc.  
    +Hence removing two or more quarters can never improve on the greedy solution.  
    +Therefore the condition found in Step 3 is both necessary and sufficient.
    +
    +---
    +
    +**Step 5 – Counting the successful \(N\) (1 ≤ N ≤ 1000)**  
    +
    +The greedy fails for those \(N\ge25\) whose remainder modulo \(25\) lies in  
    +
    +\[
    +R=\{5,6,7,8,9,15,16,17,18,19\}.
    +\]
    +
    +For a fixed residue \(r\in R\),
    +
    +\[
    +N=r+25k\qquad (k\ge1,\; N\le1000).
    +\]
    +
    +The largest possible \(k\) is \(\bigl\lfloor\frac{1000-r}{25}\bigr\rfloor =39\)
    +(because \(1000-r\) ranges from \(981\) to \(995\)).  
    +Thus each residue contributes \(39\) failing numbers.
    +
    +\[
    +\#\text{failures}=|R|\times 39 = 10\times39 = 390 .
    +\]
    +
    +All other numbers (including the ten numbers \(5,6,7,8,9,15,16,17,18,19\) themselves, which are \(<25\) and therefore not failures) are successes.
    +
    +\[
    +\#\text{successes}=1000-390 = 610 .
    +\]
    +
    +---
    +
    +\[
    +\boxed{610}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 610

    +

    Extracted Answer: 610

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Sixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +a_1a_2\dots a_{16},\qquad a_i\in\{0,1\}
    +\]
    +
    +be a binary string where \(a_i=1\) means the \(i^{\text{th}}\) chair is occupied.
    +The condition *no person sits next to two other people* means that a
    +\(1\) may not have a \(1\) on both sides; equivalently the string contains
    +no three consecutive \(1\)’s.  
    +Hence we must count the binary strings of length \(16\) that
    +
    +* have exactly eight \(1\)’s,
    +* contain no substring \(111\).
    +
    +---
    +
    +### 1.  Decompose the occupied chairs into blocks
    +
    +Since a block of consecutive \(1\)’s can have length at most \(2\), the eight
    +\(1\)’s are split into blocks of length \(1\) or \(2\).
    +
    +Let  
    +
    +* \(x\) = number of blocks of length \(1\),
    +* \(y\) = number of blocks of length \(2\),
    +* \(m=x+y\) = total number of blocks.
    +
    +Then  
    +
    +\[
    +x+2y=8,\qquad x+y=m\Longrightarrow y=8-m,\;x=2m-8 .
    +\]
    +
    +Thus \(m\) can be any integer with \(\lceil 8/2\rceil\le m\le 8\); i.e.  
    +
    +\[
    +m=4,5,6,7,8 .
    +\]
    +
    +For a given \(m\) the positions of the \(y=8-m\) blocks of length \(2\)
    +among the \(m\) blocks can be chosen in  
    +
    +\[
    +\binom{m}{\,8-m\,}
    +\]
    +
    +ways.
    +
    +---
    +
    +### 2.  Insert the separating zeros
    +
    +Between two consecutive blocks there must be at least one \(0\).
    +With \(m\) blocks there are \(m-1\) mandatory zeros.
    +There are \(16-8=8\) zeros altogether, so after placing the mandatory ones we
    +still have  
    +
    +\[
    +8-(m-1)=9-m
    +\]
    +
    +zeros left.  
    +
    +These remaining zeros may be distributed freely among the \(m+1\) gaps
    +(the two ends and the \(m-1\) interior gaps).  By stars‑and‑bars the number
    +of ways is
    +
    +\[
    +\binom{(9-m)+(m+1)-1}{(m+1)-1}
    +   =\binom{9}{m}.
    +\]
    +
    +---
    +
    +### 3.  Count all possibilities
    +
    +For each admissible \(m\),
    +
    +\[
    +\text{choices}(m)=\binom{m}{8-m}\binom{9}{m}.
    +\]
    +
    +Hence  
    +
    +\[
    +\begin{aligned}
    +N&=\sum_{m=4}^{8}\binom{m}{8-m}\binom{9}{m}\\[2mm]
    + &=\binom{4}{4}\binom{9}{4}
    +   +\binom{5}{3}\binom{9}{5}
    +   +\binom{6}{2}\binom{9}{6}
    +   +\binom{7}{1}\binom{9}{7}
    +   +\binom{8}{0}\binom{9}{8}\\[2mm]
    + &=1\cdot126+10\cdot126+15\cdot84+7\cdot36+1\cdot9\\
    + &=126+1260+1260+252+9\\
    + &=2907 .
    +\end{aligned}
    +\]
    +
    +---
    +
    +### 4.  Remainder modulo \(1000\)
    +
    +\[
    +2907\equiv 907\pmod{1000}.
    +\]
    +
    +\[
    +\boxed{907}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 907

    +

    Extracted Answer: 907

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Suppose $ \triangle ABC $ has angles $ \angle BAC = 84^\circ $, $ \angle ABC = 60^\circ $, and $ \angle ACB = 36^\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \overline{BC} $, $ \overline{AC} $, and $ \overline{AB} $, respectively. The circumcircle of $ \triangle DEF $ intersects $ \overline{BD} $, $ \overline{AE} $, and $ \overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \triangle DEF $ into six minor arcs, as shown. Find $ \widehat{DE} + 2 \cdot \widehat{HJ} + 3 \cdot \widehat{FG} $, where the arcs are measured in degrees.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +\angle A=84^{\circ},\qquad \angle B=60^{\circ},\qquad \angle C=36^{\circ}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  The nine‑point circle in complex form  
    +
    +Put the circumcircle of \(\triangle ABC\) as the unit circle and let  
    +
    +\[
    +a=1,\qquad b=e^{i\beta},\qquad c=e^{i\gamma},
    +\]
    +
    +where  
    +
    +\[
    +\beta =72^{\circ},\qquad \gamma =240^{\circ}
    +\]
    +
    +because the central arcs are twice the opposite angles:
    +\(\widehat{BC}=2A=168^{\circ},\;\widehat{CA}=2B=120^{\circ},
    +\;\widehat{AB}=2C=72^{\circ}\).
    +
    +The nine‑point centre is
    +
    +\[
    +N=\frac{a+b+c}{2},
    +\]
    +
    +and its radius is \(\frac12\) (since \(|a|=|b|=|c|=1\)).  
    +The three midpoints are  
    +
    +\[
    +D=\frac{b+c}{2},\qquad 
    +E=\frac{c+a}{2},\qquad 
    +F=\frac{a+b}{2}.
    +\]
    +
    +Notice that
    +
    +\[
    +D-N=-\frac{a}{2},\qquad 
    +E-N=-\frac{b}{2},\qquad 
    +F-N=-\frac{c}{2} .
    +\tag{1}
    +\]
    +
    +Hence the central angle \(\widehat{DE}\) equals the angle between vectors
    +\(-a\) and \(-b\); it is the same as the angle between \(a\) and \(b\).
    +
    +\[
    +\widehat{DE}= \angle aOb = 2\angle ACB = 2\cdot36^{\circ}=72^{\circ}.
    +\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  The other intersection points  
    +
    +The nine‑point circle is the image of the circumcircle under the similarity
    +
    +\[
    +X\longmapsto N-\frac{X}{2},
    +\tag{3}
    +\]
    +
    +i.e. the homothety with centre the centroid (factor \(-\tfrac12\)).
    +Consequently, if a point \(Y\) of the nine‑point circle is the image of
    +\(X\) on the circumcircle, then  
    +
    +\[
    +Y = N-\frac{X}{2}\qquad\Longleftrightarrow\qquad X=2(N-Y).
    +\tag{4}
    +\]
    +
    +--------------------------------------------------------------------
    +#### (a) Point \(G\)
    +
    +\(G\) lies on line \(BD\).  Since \(D\) is the image of \(A\) and
    +\(B\) is the image of the point \(X\) with \(X=b\), the line \(BD\) is the
    +image of the line through \(A\) parallel to chord \(BC\).
    +Thus \(G\) corresponds to the second intersection of the line through
    +\(A\;(=a)\) parallel to \(BC\) with the circumcircle.
    +
    +For a line through a point \(e^{i\alpha}\) parallel to chord
    +\(e^{i\beta}e^{i\gamma}\) the second intersection is
    +\(e^{i(\beta+\gamma-\alpha)}\).  
    +Here \(\alpha=0,\;\beta=72^{\circ},\;\gamma=240^{\circ}\); therefore
    +
    +\[
    +X_G = e^{i(\beta+\gamma)}=e^{i312^{\circ}} .
    +\]
    +
    +From (3) the point on the nine‑point circle is  
    +
    +\[
    +G = N-\frac{X_G}{2}.
    +\]
    +
    +Hence the vector \(NG=-\frac{X_G}{2}\) has direction \(312^{\circ}+180^{\circ}=132^{\circ}\).
    +
    +--------------------------------------------------------------------
    +#### (b) Point \(H\)
    +
    +\(H\) lies on line \(AE\).  This line is parallel to chord \(CA\); the
    +starting point on the circumcircle is \(B\,(=e^{i72^{\circ}})\).  Thus
    +
    +\[
    +X_H = e^{i(0+240^{\circ}-72^{\circ})}=e^{i168^{\circ}} ,
    +\qquad
    +H=N-\frac{X_H}{2},
    +\]
    +
    +so the direction of \(NH\) is \(168^{\circ}+180^{\circ}=348^{\circ}\).
    +
    +--------------------------------------------------------------------
    +#### (c) Point \(J\)
    +
    +\(J\) lies on line \(AF\), which is parallel to chord \(AB\); it starts
    +from \(C\,(=e^{i240^{\circ}})\).  Therefore
    +
    +\[
    +X_J = e^{i(0+72^{\circ}-240^{\circ})}=e^{i192^{\circ}},
    +\qquad
    +J=N-\frac{X_J}{2},
    +\]
    +
    +and the direction of \(NJ\) is \(192^{\circ}+180^{\circ}=12^{\circ}\).
    +
    +--------------------------------------------------------------------
    +### 3.  The required arcs on the nine‑point circle  
    +
    +From the directions obtained:
    +
    +\[
    +\begin{aligned}
    +&\text{Arc }DE = 252^{\circ}-180^{\circ}=72^{\circ},\\[2mm]
    +&\text{Arc }FG = 132^{\circ}-60^{\circ}=72^{\circ},\\[2mm]
    +&\text{Arc }HJ = (360^{\circ}-348^{\circ})+12^{\circ}=24^{\circ}.
    +\end{aligned}
    +\]
    +
    +All are the minor arcs (each \(<180^{\circ}\)).
    +
    +--------------------------------------------------------------------
    +### 4.  Computing the requested expression  
    +
    +\[
    +\widehat{DE}+2\widehat{HJ}+3\widehat{FG}
    +=72^{\circ}+2\!\cdot\!24^{\circ}+3\!\cdot\!72^{\circ}
    +=72+48+216=336^{\circ}.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{336}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 336

    +

    Extracted Answer: 336

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For a regular 24‑gon label the vertices \(0,1,\ldots ,23\) in order.
    +If a segment joins vertex \(i\) to vertex \(j\) then the chord length depends only on  
    +
    +\[
    +k=\min \{\,|i-j|\;,\;24-|i-j|\,\},
    +\qquad 1\le k\le 12 .
    +\]
    +
    +Thus a configuration in which all 12 segments have the same length corresponds to a
    +perfect matching in the graph whose edges are all chords of a fixed step \(k\).
    +
    +---
    +
    +### 1.  Structure of the step‑\(k\) graph  
    +
    +Let \(d=\gcd(24,k)\).  
    +The vertices split into \(d\) disjoint cycles, each of length  
    +
    +\[
    +L=\frac{24}{d}.
    +\]
    +
    +Every vertex is incident with exactly the two edges of its cycle.  
    +A perfect matching can exist only if each cycle has even length, i.e. \(L\) must be even.
    +\(L\) is odd only when \(d=8\) (then \(L=3\)); this occurs for \(k=8\).  
    +Hence the step \(k=8\) gives **no** valid configuration.
    +
    +For an even cycle of length \(L\ge4\) there are exactly two perfect matchings
    +(the two possible “alternating” choices).  
    +If \(L=2\) (the case \(k=12\)), the matching is forced and there is only one.
    +
    +Consequently, for a permissible \(k\)
    +
    +\[
    +\#\text{ matchings for step }k=
    +\begin{cases}
    +2^{d}, & L>2,\\[2pt]
    +1, & L=2 .
    +\end{cases}
    +\]
    +
    +---
    +
    +### 2.  Count for each step \(k\)
    +
    +\[
    +\begin{array}{c|c|c|c}
    +k & d=\gcd(24,k) & L=24/d & \#\text{ matchings}\\ \hline
    +1,5,7,11 & 1 & 24 & 2\\
    +2,10 & 2 & 12 & 2^{2}=4\\
    +3,9 & 3 & 8 & 2^{3}=8\\
    +4 & 4 & 6 & 2^{4}=16\\
    +6 & 6 & 4 & 2^{6}=64\\
    +12 & 12& 2 & 1\\
    +8 & 8 & 3 & \text{none}
    +\end{array}
    +\]
    +
    +Now sum over all admissible \(k\) ( \(k=1,\dots ,12\) except \(k=8\) ):
    +
    +\[
    +\begin{aligned}
    +\text{Total}&=4\cdot2\;+\;2\cdot4\;+\;2\cdot8\;+\;1\cdot16\;+\;1\cdot64\;+\;1\cdot1\\
    +&=8+8+16+16+64+1\\
    +&=113 .
    +\end{aligned}
    +\]
    +
    +---
    +
    +\[
    +\boxed{113}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 113

    +

    Extracted Answer: 113

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +17_{b}=1\cdot b+7=b+7,\qquad 
    +97_{b}=9\cdot b+7=9b+7 .
    +\]
    +
    +We need  
    +
    +\[
    +b+7 \mid 9b+7 .
    +\]
    +
    +Write \(9b+7\) in terms of \(b+7\):
    +
    +\[
    +9b+7 = 9(b+7) - 56 .
    +\]
    +
    +Hence the remainder upon division by \(b+7\) is \(-56\).  
    +Thus \(b+7\) must divide \(56\):
    +
    +\[
    +b+7 \mid 56 .
    +\]
    +
    +List the positive divisors of \(56\):
    +
    +\[
    +1,\;2,\;4,\;7,\;8,\;14,\;28,\;56 .
    +\]
    +
    +Since the base must satisfy \(b>9\) (so that the digit 9 is allowed), we need  
    +
    +\[
    +b+7>9+7=16 .
    +\]
    +
    +The only divisors of \(56\) larger than \(16\) are \(28\) and \(56\).
    +
    +\[
    +\begin{aligned}
    +b+7 &= 28 \;\Longrightarrow\; b=21,\\[2pt]
    +b+7 &= 56 \;\Longrightarrow\; b=49.
    +\end{aligned}
    +\]
    +
    +Both bases exceed \(9\) and thus are admissible.
    +
    +The sum of all such bases is
    +
    +\[
    +21+49 = 70 .
    +\]
    +
    +\[
    +\boxed{70}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 70

    +

    Extracted Answer: 70

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A_1A_2 \ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:
    +* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \leq i \leq 10 $,
    +* $ \cos(\angle A_iA_1A_{i+1}) = \frac{12}{13} $ for each $ 2 \leq i \leq 10 $,
    +* The perimeter of $ A_1A_2 \ldots A_{11} $ is 20.
    +If $ A_1A_2 + A_1A_{11} $ can be expressed as $ \frac{m\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +a_i=A_1A_i\qquad (i=2,\dots ,11),\qquad s_i=A_iA_{i+1}\qquad (i=2,\dots ,10).
    +\]
    +
    +For each triangle \(A_iA_1A_{i+1}\;(2\le i\le10)\)
    +
    +* \(\displaystyle \text{Area}=1\),
    +* \(\displaystyle\cos\angle A_iA_1A_{i+1}= \frac{12}{13}\).
    +
    +--------------------------------------------------------------------
    +### 1.  Product of the two sides from \(A_1\)
    +
    +With \(\theta=\angle A_iA_1A_{i+1}\) we have  
    +
    +\[
    +\sin\theta=\sqrt{1-\cos ^2\theta}= \frac{5}{13}.
    +\]
    +
    +The area of \(\triangle A_iA_1A_{i+1}\) is  
    +
    +\[
    +\frac12 a_i a_{i+1}\sin\theta =1
    +\Longrightarrow a_i a_{i+1}= \frac{2}{\sin\theta}= \frac{2}{5/13}= \frac{26}{5}\equiv c .
    +\tag{1}
    +\]
    +
    +Hence for all \(i\)
    +
    +\[
    +a_i a_{i+1}=c=\frac{26}{5}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Length of the side \(A_iA_{i+1}\)
    +
    +Apply the law of cosines in \(\triangle A_iA_1A_{i+1}\):
    +
    +\[
    +s_i^2=a_i^{\,2}+a_{i+1}^{\,2}-2a_i a_{i+1}\cos\theta
    +      =a_i^{\,2}+a_{i+1}^{\,2}-2c\Bigl(\frac{12}{13}\Bigr).
    +\]
    +
    +Because \(2c\frac{12}{13}= \frac{624}{65}= \frac{48}{5}\),
    +
    +\[
    +s_i^{\,2}=a_i^{\,2}+a_{i+1}^{\,2}-\frac{48}{5}. \tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  The alternating pattern of the radii
    +
    +From (1) we have \(a_{i+1}=c/a_i\). Consequently  
    +
    +\[
    +a_{i+2}=c/a_{i+1}=c/(c/a_i)=a_i .
    +\]
    +
    +Thus  
    +
    +\[
    +a_{2}=a_{4}=a_{6}=a_{8}=a_{10}\equiv x, \qquad 
    +a_{3}=a_{5}=a_{7}=a_{9}=a_{11}\equiv \frac{c}{x}.
    +\]
    +
    +All sides \(s_i\;(i=2,\dots ,10)\) are equal, because each uses the
    +pair \((x,\;c/x)\) in (2).  Set  
    +
    +\[
    +S^2=x^{2}+\Bigl(\frac{c}{x}\Bigr)^2-\frac{48}{5}.
    +\tag{3}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Express everything via \(t=x+\dfrac{c}{x}\)
    +
    +Define  
    +
    +\[
    +t=x+\frac{c}{x}=a_2+a_{11}.
    +\]
    +
    +Then  
    +
    +\[
    +x^{2}+\Bigl(\frac{c}{x}\Bigr)^2=t^{2}-2c .
    +\]
    +
    +Insert this into (3):
    +
    +\[
    +S^{2}=t^{2}-2c-\frac{48}{5}=t^{2}-(2c+\frac{48}{5}).
    +\]
    +
    +Since \(c=\dfrac{26}{5}\),
    +
    +\[
    +2c+\frac{48}{5}= \frac{52}{5}+\frac{48}{5}=20.
    +\]
    +
    +Hence  
    +
    +\[
    +S^{2}=t^{2}-20,\qquad S=\sqrt{t^{2}-20}. \tag{4}
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Use the perimeter
    +
    +The perimeter of the 11‑gon is  
    +
    +\[
    +a_2+a_{11}+ \sum_{i=2}^{10}s_i = t+9S =20.
    +\]
    +
    +Substituting (4):
    +
    +\[
    +t+9\sqrt{t^{2}-20}=20.
    +\]
    +
    +Isolate the radical and square:
    +
    +\[
    +9\sqrt{t^{2}-20}=20-t \quad\Longrightarrow\quad 
    +81(t^{2}-20)=(20-t)^{2}.
    +\]
    +
    +Simplifying:
    +
    +\[
    +80t^{2}+40t-2020=0
    +\Longrightarrow 4t^{2}+2t-101=0.
    +\]
    +
    +Solve for \(t\):
    +
    +\[
    +t=\frac{-2\pm\sqrt{4+1616}}{8}
    +   =\frac{-2\pm 18\sqrt5}{8}
    +   =\frac{-1\pm 9\sqrt5}{4}.
    +\]
    +
    +Since \(t>0\), we take the plus sign:
    +
    +\[
    +\boxed{t=\frac{9\sqrt5-1}{4}}.
    +\]
    +
    +Thus  
    +
    +\[
    +A_1A_2+A_1A_{11}= \frac{9\sqrt5-1}{4}
    +            =\frac{m\sqrt n-p}{q},
    +\]
    +with \(m=9,\;n=5,\;p=1,\;q=4\).
    +
    +--------------------------------------------------------------------
    +### 6.  Compute \(m+n+p+q\)
    +
    +\[
    +m+n+p+q = 9+5+1+4 = 19.
    +\]
    +
    +\[
    +\boxed{19}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 19

    +

    Extracted Answer: 19

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The nine players are distinct.  Let  
    +
    +\[
    +c=\#\text{chocolate},\qquad v=\#\text{vanilla},\qquad s=\#\text{strawberry}
    +\]
    +
    +with  
    +
    +\[
    +c+v+s=9,\qquad c>v>s\ge 1 .
    +\]
    +
    +---
    +
    +### 1.  Find all possible triples \((c,v,s)\)
    +
    +Since \(c>v>s\),
    +
    +\[
    +c\ge v+1,\qquad v\ge s+1.
    +\]
    +
    +Write \(v=s+d_2\) and \(c=v+d_1\) where \(d_1,d_2\ge 1\).  
    +Then  
    +
    +\[
    +c+v+s=(s+d_2+d_1)+(s+d_2)+s=3s+2d_2+d_1=9 .
    +\]
    +
    +Because \(s\ge1\), we have \(3s\le 9\Rightarrow s=1,2,3\).
    +
    +* **\(s=1\):** \(2d_2+d_1=6\).  
    +  \(d_2=1\Rightarrow d_1=4\) → \((c,v,s)=(6,2,1)\).  
    +  \(d_2=2\Rightarrow d_1=2\) → \((c,v,s)=(5,3,1)\).
    +
    +* **\(s=2\):** \(2d_2+d_1=3\).  
    +  \(d_2=1\Rightarrow d_1=1\) → \((c,v,s)=(4,3,2)\).
    +
    +* **\(s=3\):** \(2d_2+d_1=0\) – impossible with \(d_1,d_2\ge1\).
    +
    +Thus the only feasible triples are  
    +
    +\[
    +(6,2,1),\;(5,3,1),\;(4,3,2).
    +\]
    +
    +---
    +
    +### 2.  Count assignments for each triple
    +
    +For a given \((c,v,s)\) the number of ways to assign the flavors to the 9 distinct players is the multinomial coefficient  
    +
    +\[
    +\frac{9!}{c!\,v!\,s!}.
    +\]
    +
    +\[
    +\begin{aligned}
    +(6,2,1):\;&\frac{9!}{6!\,2!\,1!}= \frac{362880}{720\cdot2}=252,\\[2mm]
    +(5,3,1):\;&\frac{9!}{5!\,3!\,1!}= \frac{362880}{120\cdot6}=504,\\[2mm]
    +(4,3,2):\;&\frac{9!}{4!\,3!\,2!}= \frac{362880}{24\cdot6\cdot2}=1260.
    +\end{aligned}
    +\]
    +
    +---
    +
    +### 3.  Total number of assignments
    +
    +\[
    +N = 252+504+1260 = 2016.
    +\]
    +
    +---
    +
    +### 4.  Remainder modulo \(1000\)
    +
    +\[
    +2016 \equiv 16 \pmod{1000}.
    +\]
    +
    +\[
    +\boxed{16}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 16

    +

    Extracted Answer: 16

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The equation  
    +
    +\[
    +12x^{2}-xy-6y^{2}=0
    +\]
    +
    +is a homogeneous quadratic form.  
    +Factor it over the integers:
    +
    +\[
    +12x^{2}-xy-6y^{2}= (3x+2y)(4x-3y).
    +\]
    +
    +Indeed  
    +
    +\[
    +(3x+2y)(4x-3y)=12x^{2}-9xy+8xy-6y^{2}=12x^{2}-xy-6y^{2}.
    +\]
    +
    +Hence a pair \((x,y)\) of integers satisfies the equation iff
    +
    +\[
    +3x+2y=0\qquad\text{or}\qquad 4x-3y=0 .
    +\]
    +
    +---
    +
    +### 1. Solutions of \(3x+2y=0\)
    +
    +\[
    +3x+2y=0 \;\Longrightarrow\; y=-\frac{3}{2}x .
    +\]
    +
    +For \(y\) to be an integer, \(x\) must be even: write \(x=2k\). Then  
    +
    +\[
    +(x,y)=(2k,-3k),\qquad k\in\mathbb Z .
    +\]
    +
    +Both coordinates must lie in \([-100,100]\):
    +
    +\[
    +-100\le 2k\le 100\;\Longrightarrow\;-50\le k\le 50,\\
    +-100\le -3k\le 100\;\Longrightarrow\;-33\le k\le 33.
    +\]
    +
    +Thus \(k=-33,-32,\dots ,33\); there are  
    +
    +\[
    +33-(-33)+1 = 67
    +\]
    +
    +integer solutions on this line.
    +
    +---
    +
    +### 2. Solutions of \(4x-3y=0\)
    +
    +\[
    +4x-3y=0 \;\Longrightarrow\; y=\frac{4}{3}x .
    +\]
    +
    +For \(y\) to be an integer, \(x\) must be a multiple of \(3\): put \(x=3t\). Then  
    +
    +\[
    +(x,y)=(3t,4t),\qquad t\in\mathbb Z .
    +\]
    +
    +Again impose the bounds:
    +
    +\[
    +-100\le 3t\le 100\;\Longrightarrow\;-33\le t\le 33,\\
    +-100\le 4t\le 100\;\Longrightarrow\;-25\le t\le 25.
    +\]
    +
    +Thus \(t=-25,-24,\dots ,25\); the number of solutions here is  
    +
    +\[
    +25-(-25)+1 = 51.
    +\]
    +
    +---
    +
    +### 3. Intersection of the two lines
    +
    +Both equations hold simultaneously only at the origin:
    +
    +\[
    +3x+2y=0,\;4x-3y=0 \Longrightarrow (x,y)=(0,0).
    +\]
    +
    +This point has been counted in both previous totals, so we subtract it once.
    +
    +---
    +
    +### 4. Total number of ordered pairs
    +
    +\[
    +\#\text{solutions}=67+51-1=117.
    +\]
    +
    +\[
    +\boxed{117}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 117

    +

    Extracted Answer: 117

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +An isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \neq s$. Find $r^{2}+s^{2}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the trapezoid be \(ABCD\) with \(AB\parallel CD\) and  
    +
    +\[
    +AB=s ,\qquad CD=r ,\qquad AD=BC=L \;( \text{isosceles}).
    +\]
    +
    +The incircle has radius \(R=3\) and the area is \(72\).
    +
    +---
    +
    +### 1.  Semiperimeter
    +
    +For any tangential quadrilateral (one with an incircle)
    +
    +\[
    +\text{Area}=R\cdot(\text{semiperimeter}).
    +\]
    +
    +Hence  
    +
    +\[
    +72=3\cdot s_{\!p}\quad\Longrightarrow\quad s_{\!p}=24 .
    +\]
    +
    +Thus the perimeter is  
    +
    +\[
    +2s_{\!p}=48\quad\Longrightarrow\quad r+s+2L=48. \tag{1}
    +\]
    +
    +---
    +
    +### 2.  Tangential condition
    +
    +In a tangential quadrilateral the sums of opposite sides are equal:
    +
    +\[
    +AB+CD = AD+BC\quad\Longrightarrow\quad r+s = 2L. \tag{2}
    +\]
    +
    +From (1) and (2),
    +
    +\[
    +2(r+s)=48 \;\Longrightarrow\; r+s=24,\qquad
    +2L=r+s=24\;\Longrightarrow\; L=12.
    +\]
    +
    +---
    +
    +### 3.  Height
    +
    +The incircle touches both parallel sides, so the distance between the bases equals twice the radius:
    +
    +\[
    +h=2R=6.
    +\]
    +
    +(Alternatively, \(\displaystyle 72=\tfrac12(r+s)h\) with \(r+s=24\) also gives \(h=6\).)
    +
    +---
    +
    +### 4.  Relating the bases
    +
    +Place the trapezoid with its symmetry axis on the \(y\)-axis; the bases are horizontal.
    +The horizontal half‑difference of the bases is \(\dfrac{s-r}{2}\).
    +Hence the leg length satisfies
    +
    +\[
    +L^{2}= \left(\frac{s-r}{2}\right)^{2}+h^{2}.
    +\]
    +
    +Using \(L=12,\;h=6\),
    +
    +\[
    +12^{2}= \frac{(s-r)^{2}}{4}+6^{2}
    +\quad\Longrightarrow\quad
    +\frac{(s-r)^{2}}{4}=108
    +\quad\Longrightarrow\quad
    +s-r=12\sqrt3. \tag{3}
    +\]
    +
    +---
    +
    +### 5.  Solving for \(r\) and \(s\)
    +
    +\[
    +\begin{cases}
    +r+s=24,\\[2pt]
    +s-r=12\sqrt3,
    +\end{cases}
    +\qquad\Longrightarrow\qquad
    +\begin{aligned}
    +s&=\frac{24+12\sqrt3}{2}=12+6\sqrt3,\\
    +r&=\frac{24-12\sqrt3}{2}=12-6\sqrt3.
    +\end{aligned}
    +\]
    +
    +---
    +
    +### 6.  Required sum of squares
    +
    +\[
    +\begin{aligned}
    +r^{2}+s^{2}
    +&=(12-6\sqrt3)^{2}+(12+6\sqrt3)^{2}\\
    +&= \bigl(144-144\sqrt3+108\bigr)+\bigl(144+144\sqrt3+108\bigr)\\
    +&= 504.
    +\end{aligned}
    +\]
    +
    +\[
    +\boxed{504}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 504

    +

    Extracted Answer: 504

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ \triangle ABC $ be a right triangle with $ \angle A = 90^\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \sqrt{3} $ for some positive integer $ n $. Find $ n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +* \(A=(0,0)\),  
    +* \(B=(u,0)\) on the \(x\)-axis,  
    +* \(C=(0,v)\) on the \(y\)-axis.  
    +
    +Since \(\angle A=90^{\circ}\), \(BC=38\) gives  
    +
    +\[
    +u^{2}+v^{2}=38^{2}=1444\tag{1}
    +\]
    +
    +---
    +
    +### 1.  The equilateral triangle \(AKL\)
    +
    +The conditions  
    +
    +\[
    +AK=AL=KL=14
    +\]
    +
    +show that \(\triangle AKL\) is equilateral.  
    +Let the direction of \(\overrightarrow{AK}\) form an angle \(\theta\) with the
    +positive \(x\)-axis. Then
    +
    +\[
    +K=(14\cos\theta,\;14\sin\theta),\qquad 
    +L=(14\cos(\theta+60^\circ),\;14\sin(\theta+60^\circ)).\tag{2}
    +\]
    +
    +---
    +
    +### 2.  Using \(BK=14\) and \(CL=14\)
    +
    +\[
    +BK^{2}= (u-14\cos\theta)^2+(14\sin\theta)^2=14^{2}
    +\]
    +
    +\[
    +\Longrightarrow\; u=28\cos\theta.\tag{3}
    +\]
    +
    +Similarly  
    +
    +\[
    +CL^{2}= (14\cos(\theta+60^\circ))^{2}+(v-14\sin(\theta+60^\circ))^{2}=14^{2}
    +\]
    +
    +\[
    +\Longrightarrow\; v=28\sin(\theta+60^\circ).\tag{4}
    +\]
    +
    +---
    +
    +### 3.  Determining \(\theta\)
    +
    +Insert (3) and (4) into (1):
    +
    +\[
    +(28\cos\theta)^{2}+(28\sin(\theta+60^\circ))^{2}=1444
    +\]
    +\[
    +\Longrightarrow\;\cos^{2}\theta+\sin^{2}(\theta+60^\circ)=\frac{361}{196}.
    +\]
    +
    +Using \(\sin(\theta+60^\circ)=\tfrac12\sin\theta+\tfrac{\sqrt3}{2}\cos\theta\),
    +the equation reduces to  
    +
    +\[
    +6\cos^{2}\theta+2\sqrt3\sin\theta\cos\theta= \frac{312}{49}.
    +\]
    +
    +Solving gives \(\cos\theta=\frac{13}{14}\) (the other root gives the same
    +triangle with the legs interchanged).  
    +
    +Hence  
    +
    +\[
    +u=28\cos\theta=28\cdot\frac{13}{14}=26,\qquad
    +v=28\sin(\theta+60^\circ)=28\cdot\frac{4\sqrt3}{7}=16\sqrt3 .
    +\]
    +
    +Thus  
    +
    +\[
    +AB=26,\qquad AC=16\sqrt3,\qquad BC=38.
    +\]
    +
    +From (2) we obtain the coordinates of the interior points
    +
    +\[
    +K=(13,\;3\sqrt3),\qquad L=(2,\;8\sqrt3).
    +\]
    +
    +---
    +
    +### 4.  Area of \(BKLC\)
    +
    +Use the shoelace formula for the polygon \(B(26,0),K(13,3\sqrt3),L(2,8\sqrt3),C(0,16\sqrt3)\):
    +
    +\[
    +\begin{aligned}
    +S_1&=26\cdot3\sqrt3+13\cdot8\sqrt3+2\cdot16\sqrt3+0\cdot0=214\sqrt3,\\
    +S_2&=0\cdot13+3\sqrt3\cdot2+8\sqrt3\cdot0+16\sqrt3\cdot26=422\sqrt3.
    +\end{aligned}
    +\]
    +
    +\[
    +\text{Area}=\frac12|S_2-S_1|
    +          =\frac12(422-214)\sqrt3
    +          =104\sqrt3 .
    +\]
    +
    +Therefore the area can be written as \(n\sqrt3\) with  
    +
    +\[
    +\boxed{n=104}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 104

    +

    Extracted Answer: None

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For an eight‑digit number formed by a permutation of  
    +
    +\[
    +\{1,2,3,4,5,6,7,8\}
    +\]
    +
    +let  
    +
    +\[
    +a_1a_2a_3a_4a_5a_6a_7a_8
    +\]
    +
    +be its digits (left to right).  
    +A number is divisible by \(22\iff\) it is divisible by \(2\) and by \(11\).
    +
    +---
    +
    +### 1.  Divisibility by 2  
    +
    +The last digit \(a_8\) must be even, so \(a_8\in\{2,4,6,8\}\).
    +
    +---
    +
    +### 2.  Divisibility by 11  
    +
    +For an 8‑digit number the rule for 11 is  
    +
    +\[
    +(a_1+a_3+a_5+a_7)-(a_2+a_4+a_6+a_8)\equiv 0\pmod{11}.
    +\]
    +
    +Since the total sum of the digits is  
    +
    +\[
    +1+2+\cdots+8 = 36,
    +\]
    +
    +let  
    +
    +\[
    +S_{\text{odd}}=a_1+a_3+a_5+a_7,\qquad 
    +S_{\text{even}}=a_2+a_4+a_6+a_8 .
    +\]
    +
    +Then \(S_{\text{odd}}+S_{\text{even}}=36\) and the condition gives  
    +
    +\[
    +S_{\text{odd}}-S_{\text{even}}\equiv0\pmod{11}.
    +\]
    +
    +The only possible values for \(S_{\text{odd}}-S_{\text{even}}\) are \(-22,0,22\);   
    +\(-22\) would give \(S_{\text{odd}}=7\) and \(22\) would give \(S_{\text{odd}}=29\), both impossible because a sum of four distinct digits from \(\{1,\dots ,8\}\) cannot be smaller than \(10\) nor larger than \(26\).  
    +Hence
    +
    +\[
    +S_{\text{odd}} = S_{\text{even}} = 18 .
    +\]
    +
    +Thus the four digits in the odd positions must sum to \(18\); the same holds for the even positions.
    +
    +---
    +
    +### 3.  Choosing the four digits for the odd positions  
    +
    +We need 4‑element subsets of \(\{1,\dots ,8\}\) whose sum is \(18\).  
    +A quick enumeration gives the eight subsets
    +
    +\[
    +\begin{aligned}
    +&\{1,2,7,8\},\{1,3,6,8\},\{1,4,5,8\},\{1,4,6,7\},\\
    +&\{2,3,5,8\},\{2,3,6,7\},\{2,4,5,7\},\{3,4,5,6\}.
    +\end{aligned}
    +\]
    +
    +Each contains exactly two even digits (the set \(\{2,4,6,8\}\)) and two odd digits.  
    +Hence every admissible odd‑position set has **2 even digits**.
    +
    +Let a chosen subset be \(S\) (the odd‑position digits) and its complement \(S^c\) (the even‑position digits).
    +
    +---
    +
    +### 4.  Arranging the digits  
    +
    +* The four digits of \(S\) can be placed in the odd positions \((1,3,5,7)\) in \(4! = 24\) ways.  
    +* The four digits of \(S^c\) must fill the even positions \((2,4,6,8)\) with the extra requirement that the last digit \(a_8\) be even.  
    +  Since \(S^c\) contains exactly \(2\) even digits, we have  
    +
    +\[
    +\text{choices for }a_8 = 2,\qquad
    +\text{arrangements of the remaining three even‑position digits}=3! = 6 .
    +\]
    +
    +Thus for each set \(S\)
    +
    +\[
    +\#\text{numbers}=4!\times(2\times3!) = 24\times12 = 288.
    +\]
    +
    +---
    +
    +### 5.  Total number \(N\)
    +
    +There are \(8\) possible subsets \(S\); consequently
    +
    +\[
    +N = 8 \times 288 = 2304 .
    +\]
    +
    +---
    +
    +### 6.  Required difference
    +
    +\[
    +N-2025 = 2304-2025 = 279 .
    +\]
    +
    +\[
    +\boxed{279}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 279

    +

    Extracted Answer: 279

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\sqrt{-1}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +C=25+20i,\qquad r=5 ,
    +\]
    +
    +so  
    +
    +\[
    +|C-z|=5
    +\]
    +
    +is the circle with centre \(C\) and radius \(5\).
    +
    +The second condition  
    +
    +\[
    +|z-4-k|=|z-3i-k|
    +\]
    +
    +means that \(z\) is equally distant from the points  
    +
    +\[
    +P_1=4+k\quad(\text{on the real axis}), \qquad   
    +P_2=k+3i .
    +\]
    +
    +Hence the locus of \(z\) is the perpendicular bisector of the segment \(\overline{P_1P_2}\); this is a straight line.
    +
    +---
    +
    +### 1. Equation of the line
    +
    +Write \(z=x+yi\).  
    +
    +\[
    +(x-(4+k))^2+y^2=(x-k)^2+(y-3)^2 .
    +\]
    +
    +Expanding and simplifying gives  
    +
    +\[
    +-8(x-k)+16=-6y+9,
    +\]
    +
    +\[
    +-8x+8k+6y+7=0 .
    +\]
    +
    +Thus the line \(L(k)\) is  
    +
    +\[
    +-8x+6y+8k+7=0 \qquad\text{or}\qquad 8x-6y=8k+7 .
    +\]
    +
    +All such lines have slope \(\dfrac{4}{3}\); they are a family of parallel lines depending on \(k\).
    +
    +---
    +
    +### 2. Tangency condition
    +
    +The system has exactly one solution precisely when the line \(L(k)\) is tangent to the circle \(|z-C|=5\).  
    +
    +For a line \(Ax+By+C=0\) the distance from a point \((x_0,y_0)\) is  
    +
    +\[
    +d=\frac{|Ax_0+By_0+C|}{\sqrt{A^2+B^2}} .
    +\]
    +
    +Here \(A=-8,\;B=6,\;C=8k+7\) and the centre of the circle is \((25,20)\). Hence
    +
    +\[
    +d(k)=\frac{\bigl|-8\cdot25+6\cdot20+(8k+7)\bigr|}{\sqrt{(-8)^2+6^2}}
    +      =\frac{|8k-73|}{10}.
    +\]
    +
    +Tangency requires \(d(k)=r=5\):
    +
    +\[
    +\frac{|8k-73|}{10}=5\quad\Longrightarrow\quad|8k-73|=50 .
    +\]
    +
    +Thus  
    +
    +\[
    +8k-73=50\quad\text{or}\quad8k-73=-50,
    +\]
    +
    +\[
    +k=\frac{123}{8},\qquad k=\frac{23}{8}.
    +\]
    +
    +Both values make the line tangent, giving exactly one intersection point with the circle.
    +
    +---
    +
    +### 3. Sum of the possible \(k\)
    +
    +\[
    +\frac{123}{8}+\frac{23}{8}= \frac{146}{8}= \frac{73}{4}.
    +\]
    +
    +Write \(\dfrac{73}{4}\) as \(\dfrac{m}{n}\) with \(\gcd(m,n)=1\); then \(m=73,\;n=4\).
    +
    +\[
    +m+n = 73+4 = 77.
    +\]
    +
    +\[
    +\boxed{77}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 77

    +

    Extracted Answer: 77

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the letters be  
    +
    +\[
    +A<B<C<D<E<F<G<H<I<J<K<L .
    +\]
    +
    +In a random pairing each pair is written with its smaller letter first, so a
    +pair \(\{x,y\}\;(x<y)\) becomes the word \(xy\).
    +The six words are then listed alphabetically; the last word is the
    +lexicographically largest of the six two‑letter words.
    +
    +Because the first letters of the six words are all different (each letter can
    +appear as the smaller element of at most one pair), the largest word is the
    +pair whose **smaller** element is the largest among the six smaller elements.
    +Hence the last word contains \(G\) precisely when the pair containing \(G\)
    +has the largest smaller element.
    +
    +---
    +
    +### 1.  Choose the partner of \(G\)
    +
    +\(G\) can be paired with any of the other 11 letters, each with probability
    +\(\frac1{11}\).
    +
    +*If \(G\) is paired with a letter larger than \(G\)*  
    +(let the partner be \(X\in\{H,I,J,K,L\}\)).  
    +Then the smaller element of the \(G\!-\!X\) pair is \(G\).
    +
    +The remaining 10 letters consist of  
    +
    +- 6 letters \(\{A,B,C,D,E,F\}\) smaller than \(G\) (call them “low”),  
    +- 4 letters among \(\{H,I,J,K,L\}\setminus\{X\}\) larger than \(G\) (call them “high”).
    +
    +For the pair \(G\!-\!X\) to have the largest smaller element, no other pair
    +may have a smaller element \(\ge G\); i.e. no “high” letter may be the smaller
    +letter of its pair.  Hence each high letter must be matched with a low
    +letter.  
    +
    +Number of matchings of the 10 remaining letters with no high–high pair:
    +
    +\[
    +\binom{6}{4}\,4!\;(=15\cdot24)=360 .
    +\]
    +
    +Total matchings of 10 letters: \((10-1)!!=945\).
    +Thus
    +
    +\[
    +P(\text{lexicographically largest pair }|\,G\!-\!X,\;X>G)=\frac{360}{945}
    +=\frac{8}{21}.
    +\]
    +
    +Since there are 5 possible partners larger than \(G\),
    +
    +\[
    +\sum_{X>G}\frac1{11}\cdot\frac{8}{21}=5\cdot\frac{1}{11}\cdot\frac{8}{21}
    +=\frac{40}{231}.
    +\]
    +
    +*If \(G\) is paired with a letter smaller than \(G\)*  
    +the only possible partner is \(F\); for any smaller partner there are fewer
    +than five letters below it, making it impossible for its pair to have the
    +largest smaller element.
    +
    +When \(G\) is paired with \(F\), the smaller element of the pair is \(F\).
    +The other 10 letters are  
    +
    +\[
    +\{A,B,C,D,E\}\ (\text{low})\quad\text{and}\quad\{H,I,J,K,L\}\ (\text{high}).
    +\]
    +
    +All five high letters must be paired with the five low letters; otherwise a
    +high letter would become a smaller element.  The number of such matchings is
    +\(5!=120\).  Hence
    +
    +\[
    +P(\text{largest pair }|\,G\!-\!F)=\frac{120}{945}=\frac{8}{63},
    +\]
    +and the contribution is \(\displaystyle\frac1{11}\cdot\frac{8}{63}
    += \frac{8}{693}\).
    +
    +No other partner of \(G\) can work, so the total probability that the last
    +word contains \(G\) is
    +
    +\[
    +\frac{40}{231}+\frac{8}{693}
    +=\frac{120}{693}+\frac{8}{693}
    +=\frac{128}{693}.
    +\]
    +
    +The fraction \(\frac{128}{693}\) is already in lowest terms.  
    +Thus \(m=128,\ n=693\) and
    +
    +\[
    +m+n = 128+693 = 821.
    +\]
    +
    +\[
    +\boxed{821}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 821

    +

    Extracted Answer: 821

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +On $\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution**
    +
    +--------------------------------------------------------------------
    +
    +### 1.  The ratios on the two sides  
    +
    +\[
    +AB=AD+DE+EB=4+16+8=28,\qquad 
    +AC=AF+FG+GC=13+52+26=91 .
    +\]
    +
    +\[
    +\frac{AD}{AB}=\frac{4}{28}=\frac17,\qquad 
    +\frac{AF}{AC}= \frac{13}{91}= \frac17 .
    +\]
    +
    +Hence  
    +
    +\[
    +\frac{AD}{AB}= \frac{AF}{AC}= \frac17\qquad\Longrightarrow\qquad 
    +DF\parallel BC .
    +\]
    +
    +Similarly  
    +
    +\[
    +\frac{AE}{AB}= \frac{20}{28}= \frac57,\qquad 
    +\frac{AG}{AC}= \frac{65}{91}= \frac57 ,
    +\]
    +
    +so  
    +
    +\[
    +\frac{AE}{AB}= \frac{AG}{AC}= \frac57\qquad\Longrightarrow\qquad 
    +EG\parallel BC .
    +\]
    +
    +Let  
    +
    +\[
    +p=\frac17,\qquad q=\frac57 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 2.  Area of \(\triangle ABC\)
    +
    +Because \(DF\parallel EG\parallel BC\), the quadrilateral \(DEGF\) is the
    +region of \(\triangle ABC\) between the two lines through \(D\) and \(E\)
    +parallel to \(BC\).  
    +
    +Triangles \(ADF\) and \(AEG\) are similar to \(\triangle ABC\) with similarity
    +ratios \(p\) and \(q\) respectively, so
    +
    +\[
    +[ADF]=p^{2}[ABC],\qquad[AEG]=q^{2}[ABC].
    +\]
    +
    +Hence  
    +
    +\[
    +[DEGF]=[AEG]-[ADF]=(q^{2}-p^{2})[ABC]
    +        =\Bigl(\frac{5^{2}}{7^{2}}-\frac{1^{2}}{7^{2}}\Bigr)[ABC]
    +        =\frac{24}{49}[ABC].
    +\]
    +
    +Given \([DEGF]=288\),
    +
    +\[
    +[ABC]=288\cdot\frac{49}{24}=12\cdot 49 =\boxed{588}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 3.  Coordinates
    +
    +Place  
    +
    +\[
    +A=(0,0),\qquad B=(28,0),\qquad C=(c,\,42)
    +\]
    +
    +(the height is \(42\) because \([ABC]=\frac12\cdot28\cdot42=588\)).  
    +Using the ratios \(p,q\),
    +
    +\[
    +\begin{aligned}
    +D &=pB=(4,0),                   &E&=qB=(20,0),\\[2mm]
    +F &=pC=\Bigl(\frac{c}{7},6\Bigr), &
    +G &=qC=\Bigl(\frac{5c}{7},30\Bigr).
    +\end{aligned}
    +\]
    +
    +Reflections give  
    +
    +\[
    +M=2F-D=\Bigl(\frac{2c}{7}-4,\;12\Bigr),\qquad 
    +N=2E-G=\Bigl(40-\frac{5c}{7},\;-30\Bigr).
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 4.  Area of the heptagon \(AFNBCEM\)
    +
    +List the vertices in order:
    +
    +\[
    +\begin{array}{c|c}
    +\text{Vertex}&(x,y)\\ \hline
    +A&(0,0)\\
    +F&\bigl(\frac{c}{7},6\bigr)\\
    +N&\bigl(40-\frac{5c}{7},-30\bigr)\\
    +B&(28,0)\\
    +C&(c,42)\\
    +E&(20,0)\\
    +M&\bigl(\frac{2c}{7}-4,12\bigr)
    +\end{array}
    +\]
    +
    +Apply the Shoelace formula.  The sum  
    +
    +\[
    +\sum_{i=1}^{7}\bigl(x_i y_{i+1}-y_i x_{i+1}\bigr)
    +\]  
    +
    +(with \(x_8=x_1,\;y_8=y_1\)) simplifies dramatically:
    +
    +\[
    +\begin{aligned}
    +&0\\
    +&\;-\;240\\
    +&\;+\;840\\
    +&\;+\;1176\\
    +&\;-\;840\\
    +&\;+\;240\\
    +&0
    +\end{aligned}
    +\qquad =\;1176 .
    +\]
    +
    +Thus
    +
    +\[
    +[AFNBCEM]=\frac12\cdot1176=588 .
    +\]
    +
    +The result does **not** depend on the unknown coordinate \(c\); the
    +cancellation occurs because the vectors \(DF\) and \(EG\) are parallel to
    +\(BC\).
    +
    +--------------------------------------------------------------------
    +
    +### 5.  Answer
    +
    +\[
    +\boxed{588}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 588

    +

    Extracted Answer: 588

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The parabola with equation $y=x^{2}-4$ is rotated $60^{\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\frac{a-\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +P:\;y=x^{2}-4
    +\]
    +
    +and rotate \(P\) \(60^{\circ}\) counter‑clockwise about the origin.  
    +If \((x,y)\) lies on the rotated curve, then there is a point \((u,v)\) on
    +\(P\) such that  
    +
    +\[
    +\begin{pmatrix}x\\y\end{pmatrix}=R\begin{pmatrix}u\\v\end{pmatrix},
    +\qquad 
    +R=\begin{pmatrix}\tfrac12&-\tfrac{\sqrt3}{2}\\[2pt]\tfrac{\sqrt3}{2}&\tfrac12\end{pmatrix}.
    +\]
    +
    +Equivalently, a point \((x,y)\) is on both curves iff
    +
    +\[
    +y=x^{2}-4 \qquad\text{and}\qquad 
    +R^{T}\!\begin{pmatrix}x\\y\end{pmatrix}
    +   =\begin{pmatrix}x'\\y'\end{pmatrix}
    +\text{ satisfies }y'=(x')^{2}-4,
    +\]
    +
    +where  
    +
    +\[
    +R^{T}= \begin{pmatrix}\tfrac12&\tfrac{\sqrt3}{2}\\[2pt]-\tfrac{\sqrt3}{2}&\tfrac12\end{pmatrix},
    +\quad 
    +x'=\frac{x}{2}+\frac{\sqrt3\,y}{2},\qquad
    +y'=-\frac{\sqrt3\,x}{2}+\frac{y}{2}.
    +\]
    +
    +Using \(y=x^{2}-4\),
    +
    +\[
    +x'=\frac{\sqrt3 x^{2}+x-4\sqrt3}{2},\qquad 
    +y'=\frac{x^{2}-\sqrt3 x-4}{2}.
    +\]
    +
    +The condition \(y'=(x')^{2}-4\) yields  
    +
    +\[
    +\frac{x^{2}-\sqrt3 x-4}{2}
    +   =\Bigl(\frac{\sqrt3 x^{2}+x-4\sqrt3}{2}\Bigr)^{2}-4 .
    +\]
    +
    +Multiplying by \(2\) and simplifying gives the quartic
    +
    +\[
    +3x^{4}+2\sqrt3\,x^{3}-25x^{2}-6\sqrt3\,x+40=0.
    +\]
    +
    +Factor this over \(\mathbb{Q}(\sqrt3)\):
    +
    +\[
    +\begin{aligned}
    +3x^{4}+2\sqrt3\,x^{3}-25x^{2}-6\sqrt3\,x+40
    +&=(x^{2}+\sqrt3\,x-4)(3x^{2}-\sqrt3\,x-10).
    +\end{aligned}
    +\]
    +
    +Hence the possible \(x\)-coordinates are the roots of the two quadratics.
    +
    +\[
    +\begin{cases}
    +x^{2}+\sqrt3\,x-4=0 &\Longrightarrow
    +\displaystyle x=\frac{-\sqrt3\pm\sqrt{19}}2,\\[6pt]
    +3x^{2}-\sqrt3\,x-10=0 &\Longrightarrow
    +\displaystyle x=\frac{\sqrt3\pm\sqrt{123}}6 .
    +\end{cases}
    +\]
    +
    +We need a point in the fourth quadrant, i.e. \(x>0\) and \(y=x^{2}-4<0\).
    +Only  
    +
    +\[
    +x=\frac{-\sqrt3+\sqrt{19}}2\;(>0,\;<2)
    +\]
    +
    +satisfies this.  Its \(y\)-coordinate is
    +
    +\[
    +\begin{aligned}
    +y&=x^{2}-4
    +   =\frac{(-\sqrt3+\sqrt{19})^{2}}{4}-4
    +   =\frac{22-2\sqrt{57}}4-4\\
    +  &=\frac{11-\sqrt{57}}2-4
    +   =\frac{3-\sqrt{57}}2 .
    +\end{aligned}
    +\]
    +
    +Thus  
    +
    +\[
    +y=\frac{a-\sqrt{b}}{c}\quad\text{with}\quad a=3,\;b=57,\;c=2,
    +\]
    +
    +and \(a\) and \(c\) are relatively prime.  
    +
    +Finally
    +
    +\[
    +a+b+c=3+57+2=62.
    +\]
    +
    +\[
    +\boxed{62}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 62

    +

    Extracted Answer: 62

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +\begin{aligned}
    +&x-yz<y-zx<z-xy \\
    +\Longleftrightarrow\;&x-yz<y-zx\quad\text{and}\quad y-zx<z-xy  \\
    +\Longleftrightarrow\;&(x-y)(1+z)<0\quad\text{and}\quad (y-z)(1+x)<0 .
    +\end{aligned}
    +\]
    +
    +Hence  
    +
    +\[
    +\begin{cases}
    +(x-y)(1+z)<0,\\[2pt]
    +(y-z)(1+x)<0 .
    +\end{cases}
    +\]
    +
    +Each product being negative means the two factors have opposite signs.  
    +Thus we have four possible sign‑combinations:
    +
    +\[
    +\begin{array}{c|c|c}
    +\text{Case}& (x-y,\;1+z) & (y-z,\;1+x)\\ \hline
    +\text{I}& (+,\; -) & (+,\; -)\\
    +\text{II}& (+,\; -) & (-,\; +)\\
    +\text{III}& (-,\; +) & (+,\; -)\\
    +\text{IV}& (-,\; +) & (-,\; +)
    +\end{array}
    +\]
    +
    +Translating them into linear inequalities:
    +
    +\[
    +\begin{aligned}
    +\text{I}&:\; x>y,\;z<-1,\;y>z,\;x<-1 \qquad\text{(impossible since }x+y+z=75)\\
    +\text{II}&:\; x>y,\;z<-1,\;y<z,\;x>-1 \\
    +\text{III}&:\; x<y,\;z>-1,\;y>z,\;x<-1 \\
    +\text{IV}&:\; x<y,\;z>-1,\;y<z,\;x>-1 .
    +\end{aligned}
    +\]
    +
    +Thus three non‑empty convex regions arise from cases II, III, IV.
    +Cases II and III are unbounded, while case IV gives a bounded region.
    +
    +---
    +
    +### Bounded region (case IV)
    +
    +Case IV is equivalent to  
    +
    +\[
    +-1<x<y<z ,\qquad x+y+z=75 .
    +\]
    +
    +The boundary of this region in the plane \(x+y+z=75\) consists of the three lines  
    +
    +\[
    +\begin{cases}
    +x=-1,\\[2pt]
    +y=x,\\[2pt]
    +z=y .
    +\end{cases}
    +\]
    +
    +Intersecting each pair of lines with the plane gives the vertices
    +
    +\[
    +\begin{aligned}
    +A &: x=-1,\;y=-1 \;\Rightarrow\;z=77 ,&&A(-1,-1,77),\\
    +B &: x=-1,\;z=y \;\Rightarrow\;y=z=38 ,&&B(-1,38,38),\\
    +C &: y=x,\;z=y \;\Rightarrow\;x=y=z=25 ,&&C(25,25,25).
    +\end{aligned}
    +\]
    +
    +Hence the finite region is the triangle \(ABC\).
    +
    +---
    +
    +### Area of the triangle
    +
    +Vectors along two sides:
    +
    +\[
    +\begin{aligned}
    +\vec{AB}&=B-A=(0,39,-39),\\
    +\vec{AC}&=C-A=(26,26,-52).
    +\end{aligned}
    +\]
    +
    +\[
    +\vec{AB}\times\vec{AC}=(-1014,-1014,-1014)
    +\quad\Longrightarrow\quad 
    +\bigl\lVert\vec{AB}\times\vec{AC}\bigr\rVert
    +=1014\sqrt3 .
    +\]
    +
    +Therefore
    +
    +\[
    +\text{Area}= \frac12\bigl\lVert\vec{AB}\times\vec{AC}\bigr\rVert
    +           =\frac12\cdot1014\sqrt3
    +           =507\sqrt3 .
    +\]
    +
    +Thus the area is \(a\sqrt b\) with \(a=507,\;b=3\), and
    +
    +\[
    +a+b=507+3=510.
    +\]
    +
    +\[
    +\boxed{510}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 510

    +

    Extracted Answer: 510

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +A piecewise linear periodic function is defined by $f(x)=\begin{cases}x&\text{if }x\in[-1,1)\\2-x&\text{if }x\in[1,3)\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\frac{a+b\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    First write the equation for the intersection points.
    +
    +The parabola is  
    +
    +\[
    +x=34y^{2},
    +\]
    +
    +and the periodic saw‑tooth satisfies  
    +
    +\[
    +f(x+4)=f(x),\qquad   
    +f(x)=\begin{cases}
    +x,&-1\le x<1,\\[2pt]
    +2-x,&1\le x<3 .
    +\end{cases}
    +\]
    +
    +Hence an intersection must satisfy  
    +
    +\[
    +y=f(34y^{2}). \tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Express \(f\) using the modulus
    +
    +For any real \(x\) let  
    +
    +\[
    +t=(x+1)\pmod 4,\qquad 0\le t<4 .
    +\]
    +
    +Then  
    +
    +\[
    +f(x)=
    +\begin{cases}
    +t-1,&0\le t<2,\\[2pt]
    +3-t,&2\le t<4 .
    +\end{cases}
    +\]
    +
    +Put \(x=34y^{2}\).  Let  
    +
    +\[
    +s=34y^{2}+1,\qquad t=s\pmod4 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Two linear possibilities
    +
    +*If \(0\le t<2\) (the “rising” part) then \(y=t-1\) and  
    +\(t=y+1\).  Hence  
    +
    +\[
    +34y^{2}+1=4n+y+1\quad\Longrightarrow\quad 34y^{2}-y-4n=0,\tag{2}
    +\]
    +
    +with the condition \(y\in[-1,1)\).
    +
    +*If \(2\le t<4\) (the “falling” part) then \(y=3-t\) and  
    +\(t=3-y\).  Hence  
    +
    +\[
    +34y^{2}+1=4n+3-y\quad\Longrightarrow\quad 34y^{2}+y-(2+4n)=0,\tag{3}
    +\]
    +
    +with the condition \(y\in(-1,1]\).
    +
    +Here \(n\) is the integer \(\displaystyle n=\Big\lfloor\frac{34y^{2}+1}{4}\Big\rfloor\).
    +Since \(0\le 34y^{2}+1\le 35\), we must have \(0\le n\le 8\).
    +
    +--------------------------------------------------------------------
    +### 3.  Solve the quadratics
    +
    +**From (2):**  
    +
    +\[
    +y=\frac{1\pm\sqrt{1+544n}}{68}\qquad (n=0,1,\dots ,8).
    +\]
    +
    +Both roots lie in \([-1,1)\); for each \(n\) their sum is  
    +
    +\[
    +\frac{1}{34}.
    +\]
    +
    +Thus  
    +
    +\[
    +S_I=\sum_{n=0}^{8}\frac1{34}= \frac{9}{34}. \tag{4}
    +\]
    +
    +**From (3):**  
    +
    +\[
    +y=\frac{-1\pm\sqrt{273+544n}}{68}\qquad (n=0,1,\dots ,8).
    +\]
    +
    +For \(n=0,\dots ,7\) both roots satisfy \((-1,1]\); for \(n=8\) the
    +negative root is \(\le -1\) and must be discarded.
    +Hence for \(n=0,\dots ,7\) each pair sums to \(-\dfrac1{34}\), and we add
    +the single remaining root for \(n=8\):
    +
    +\[
    +S_{II}=8\!\left(-\frac1{34}\right)+\frac{-1+\sqrt{4625}}{68}
    +        =-\frac{8}{34}+\frac{-1+5\sqrt{185}}{68}. \tag{5}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Total sum of \(y\)-coordinates
    +
    +\[
    +\begin{aligned}
    +S &=S_I+S_{II}\\
    +  &=\frac{9}{34}-\frac{8}{34}+\frac{-1+5\sqrt{185}}{68}\\
    +  &=\frac{1}{34}+\frac{-1+5\sqrt{185}}{68}\\[2pt]
    +  &=\frac{2-1+5\sqrt{185}}{68}
    +   =\frac{1+5\sqrt{185}}{68}.
    +\end{aligned}
    +\]
    +
    +Thus the sum can be written as \(\displaystyle \frac{a+b\sqrt{c}}{d}\) with  
    +
    +\[
    +a=1,\qquad b=5,\qquad c=185,\qquad d=68,
    +\]
    +
    +where \(a,b,d\) are coprime and \(c\) is square‑free.
    +
    +Finally  
    +
    +\[
    +a+b+c+d = 1+5+185+68 = 259.
    +\]
    +
    +\[
    +\boxed{259}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 259

    +

    Extracted Answer: 259

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The condition  
    +
    +\[
    +a^3+b^3+c^3\equiv 0\pmod {3^7}\qquad (3^7=2187)
    +\]
    +
    +depends only on the residues of \(a,b,c\) modulo \(3^7\).  
    +Write each number as  
    +
    +\[
    +a=3^{3\alpha}q,\qquad \alpha\in\{0,1,2\},\;q\in Q,
    +\]
    +
    +where  
    +
    +* \(Q\) = the set of cubic residues among units modulo \(3^7\);  
    +  \(|Q|=486\);
    +* for \(\alpha=0,1,2\) the sets  
    +
    +\[
    +R_\alpha =\{3^{3\alpha}q\;|\;q\in Q\}
    +\]
    +
    +have sizes  
    +
    +\[
    +|R_0|=486,\;|R_1|=162,\;|R_2|=54 .
    +\]
    +
    +All numbers divisible by \(27\) contribute \(0\) to the sum, so we only need the
    +ordered triples whose components lie in  
    +
    +\[
    +R=R_0\cup R_1\cup R_2 .
    +\]
    +
    +Denote  
    +
    +\[
    +M_2 =\#\{(x,y)\in R^2 : x+y\equiv 0\},\qquad 
    +M_3 =\#\{(x,y,z)\in R^3 : x+y+z\equiv 0\}.
    +\]
    +
    +Because \(-x\in R\) for every \(x\in R\), we have \(M_2=|R|=702\).
    +
    +The total number of required triples of positive integers is  
    +
    +\[
    +\begin{aligned}
    +N&=27^3      \;(\text{all three multiples of }27) \\
    +  &\quad+ 3\cdot27\cdot M_2 \;(\text{exactly two non‑multiples of }27)\\
    +  &\quad+ M_3 .
    +\end{aligned}
    +\]
    +
    +Thus  
    +
    +\[
    +N=19683+81\cdot702+M_3=19683+56862+M_3 .
    +\]
    +
    +--------------------------------------------------------------------
    +### Computing \(M_3\)
    +
    +Let  
    +
    +\[
    +f(z)=\mathbf 1_R(z),\qquad
    +F(t)=\sum_{z\in\mathbf Z/3^7\mathbf Z}f(z) e^{2\pi i t z/3^7}
    +\]
    +
    +be the Fourier transform of the indicator of \(R\).  
    +Then
    +
    +\[
    +M_3=\frac1{3^7}\sum_{t=0}^{3^7-1}F(t)^3 .
    +\]
    +
    +Writing \(R\) as \(Q\cup27Q\cup729Q\) and using that each element of
    +\(R_\alpha\) is obtained from \(|Q|/3^\alpha\) elements of \(Q\), we obtain
    +
    +\[
    +F(t)=\sum_{\alpha=0}^{2}\frac1{3^{\alpha}}
    +        \sum_{q\in Q} e^{2\pi i t\cdot3^{3\alpha} q/3^7}.
    +\]
    +
    +The inner sums are evaluated with the three characters of order 3 on
    +\((\mathbf Z/3^7\mathbf Z)^\times\).  One finds that \(F(t)\) depends only on
    +\(v=v_3(t)\) (the 3‑adic valuation of \(t\)):
    +
    +\[
    +\begin{array}{c|c|c}
    +v &\text{number of }t &F(t)\\\hline
    +0 &1458 & -27\\
    +1 &486  & 54\\
    +2 &162  & 54\bigl(1+\operatorname{Re}A\bigr)\\
    +3 &54   & -27\\
    +4 &18   & 216\\
    +5 &6    & 216+162\,\operatorname{Re}A\\
    +6 &2    & -27
    +\end{array}
    +\]
    +
    +where  
    +
    +\[
    +A=3e^{2\pi i/9}=3\zeta_9,\qquad 
    +\operatorname{Re}A=3\cos\frac{2\pi}{9}.
    +\]
    +
    +From the values
    +\[
    +\operatorname{Re}A=3\cos\frac{2\pi}{9},\qquad
    +\cos\frac{2\pi}{9}+ \cos\frac{4\pi}{9}+ \cos\frac{8\pi}{9}=0,
    +\]
    +one obtains  
    +
    +\[
    +\sum_{i=1}^3 (1+r_i)^3=\frac{267}{8},\qquad
    +\sum_{i=1}^3\Bigl(\frac43+r_i\Bigr)^3=\frac{3671}{72},
    +\]
    +where \(r_1,r_2,r_3\) are the three real numbers
    +\(3\cos\frac{2\pi}{9},\,3\cos\frac{4\pi}{9},\,3\cos\frac{8\pi}{9}\).
    +
    +Carrying out the sum
    +
    +\[
    +\sum_{t}F(t)^3
    + =702^3-1514\cdot27^3+486\cdot54^3+18\cdot216^3
    +   +54^4\!\left(\frac{267}{8}\right)+8\,503\,056\!\left(\frac{3671}{72}\right)
    + =1\,291\,401\,630 .
    +\]
    +
    +Since \(3^7=2187\),
    +
    +\[
    +M_3=\frac{1\,291\,401\,630}{2187}=590\,490 .
    +\]
    +
    +--------------------------------------------------------------------
    +### Final count
    +
    +\[
    +\begin{aligned}
    +N &=19683+56862+590490\\
    +  &=667\,035 .
    +\end{aligned}
    +\]
    +
    +The problem asks for \(N\bmod 1000\):
    +
    +\[
    +\boxed{35}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 735

    +

    Extracted Answer: 35

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 27 cells of a $3\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. 
    + | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | 
    + | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | 
    + | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | 
    + The number of different ways to fill such a grid can be written as $p^a\cdot q^b\cdot r^c\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\cdot a+q\cdot b+r\cdot c+s\cdot d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1 –   What the conditions mean**
    +
    +The grid has three rows and nine columns.  
    +The columns are grouped into three \(3\times3\) blocks  
    +
    +\[
    +B_{1}=\{1,2,3\},\qquad B_{2}=\{4,5,6\},\qquad B_{3}=\{7,8,9\}.
    +\]
    +
    +For each row we must use the numbers \(1,2,\dots ,9\) exactly once, and for each
    +block the nine cells of that block must also contain the numbers \(1,\dots ,9\) exactly once.
    +
    +Hence for each digit \(d\) :
    +
    +* it appears once in each of the three rows,  
    +* it appears once in each of the three blocks.
    +
    +Consequently the three positions of a digit form a **bijection** between rows and blocks.
    +Let \(\sigma _d\in S_{3}\) be the permutation defined by
    +
    +\[
    +\sigma _d(i)=\text{the block that contains }d\text{ in row }i .
    +\]
    +
    +Thus each digit contributes one ‘1’ in the \(3\times3\) permutation matrix of \(\sigma _d\).
    +
    +--------------------------------------------------------------------
    +
    +**Step 2 –   The matrix condition**
    +
    +If we add the nine permutation matrices of the nine digits we obtain a matrix
    +\(M\) whose entry \(M_{i,b}\) counts how many digits lie in row \(i\) and block \(b\).
    +The block condition says that each block must contain each digit once, i.e. each
    +cell \((i,b)\) must contain exactly three digits. Therefore
    +
    +\[
    +M=3J,\qquad J=\begin{pmatrix}1&1&1\\1&1&1\\1&1&1\end{pmatrix}.
    +\]
    +
    +So we must write \(3J\) as a sum of nine (not‑necessarily distinct) permutation
    +matrices of size \(3\).
    +
    +--------------------------------------------------------------------
    +
    +**Step 3 –   Types of permutations**
    +
    +\(S_{3}\) has six elements:
    +
    +\[
    +\begin{aligned}
    +&\text{id},\;(12),\;(13),\;(23),\;(123),\;(132).
    +\end{aligned}
    +\]
    +
    +Let  
    +
    +\[
    +a=x_{\text{id}}=x_{(123)}=x_{(132)},\qquad
    +b=x_{(12)}=x_{(13)}=x_{(23)} .
    +\]
    +
    +Counting the contributions of each type to the nine entries of \(M\) gives the
    +system  
    +
    +\[
    +\begin{cases}
    +a+b=3\\[2pt]
    +a+b=3\\[2pt]
    +a+b=3\\[2pt]
    +a+b=3,
    +\end{cases}
    +\qquad\Longrightarrow\qquad a+b=3 .
    +\]
    +
    +Hence \(a\) may be \(0,1,2,3\) and \(b=3-a\).  For a fixed value of \(a\),
    +
    +\[
    +\begin{aligned}
    +x_{\text{id}}&=a,\\
    +x_{(123)}&=a,\\
    +x_{(132)}&=a,\\
    +x_{(12)}&=x_{(13)}=x_{(23)}&=3-a .
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 4 –   Assigning the nine digits to the permutations**
    +
    +The nine digits are distinct, so for a given \(a\) the number of ways to give the
    +six permutation types to the digits is the multinomial coefficient
    +
    +\[
    +N_a=\frac{9!}{a!\,a!\,a!\,(3-a)!\,(3-a)!\,(3-a)!}
    +    =\frac{9!}{a!^{3}(3-a)!^{3}} .
    +\]
    +
    +Summing over the four possible values of \(a\),
    +
    +\[
    +\sum_{a=0}^{3}N_a
    +   =\frac{9!}{0!^{3}3!^{3}}+\frac{9!}{1!^{3}2!^{3}}
    +    +\frac{9!}{2!^{3}1!^{3}}+\frac{9!}{3!^{3}0!^{3}}
    +   =94\,080 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 5 –   Ordering inside each row‑block**
    +
    +For a fixed assignment of the permutations, each of the nine
    +\( ( \text{row},\text{block} )\) cells contains exactly three different digits.
    +These three digits can be placed in the three columns of that cell in any order,
    +i.e. in \(3! = 6\) ways, independently of the other cells.
    +Hence we obtain an extra factor \((3!)^{9}=6^{9}\).
    +
    +Thus the total number of admissible \(3\times9\) grids is
    +
    +\[
    +N = 94\,080\cdot 6^{9}
    +   =9!\cdot 6^{6}\cdot 56 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 6 –   Prime factorisation**
    +
    +\[
    +\begin{aligned}
    +9! &=2^{7}\,3^{4}\,5\,7,\\
    +6^{6}&=(2\cdot3)^{6}=2^{6}\,3^{6},\\
    +56 &=2^{3}\,7 .
    +\end{aligned}
    +\]
    +
    +Multiplying gives  
    +
    +\[
    +N=2^{7+6+3}\,3^{4+6}\,5^{1}\,7^{1+1}
    +  =2^{16}\,3^{10}\,5^{1}\,7^{2}.
    +\]
    +
    +Thus we may write  
    +
    +\[
    +N = p^{a}\,q^{b}\,r^{c}\,s^{d}
    +\quad\text{with}\quad
    +p=2,\;a=16;\;\; q=3,\;b=10;\;\; r=5,\;c=1;\;\; s=7,\;d=2 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 7 –   Required sum**
    +
    +\[
    +p\cdot a+q\cdot b+r\cdot c+s\cdot d
    + =2\cdot16+3\cdot10+5\cdot1+7\cdot2
    + =32+30+5+14=81 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{81}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 81

    +

    Extracted Answer: 81

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Six points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \triangle BGE $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the line containing \(A,B,C,D,E,F\) be the \(x\)-axis.
    +
    +\[
    +A=(0,0),\qquad B=(b,0),\ C=(c,0),\ D=(d,0),\ E=(e,0),\ F=(f,0)
    +\]
    +
    +From the given distances along the line  
    +
    +\[
    +\begin{aligned}
    +AC&=c-a=26 \Longrightarrow c=26,\\
    +BD&=d-b=22,\\
    +CE&=e-c=31 \Longrightarrow e=26+31=57,\\
    +DF&=f-d=33,\\
    +AF&=f-a=73 \Longrightarrow f=73 .
    +\end{aligned}
    +\]
    +
    +From \(DF=33\) we get \(d=f-33=73-33=40\).  
    +Then \(BD=22\) gives \(b=d-22=40-22=18\).
    +
    +Thus the collinear points are
    +
    +\[
    +A(0),\ B(18),\ C(26),\ D(40),\ E(57),\ F(73).
    +\]
    +
    +---
    +
    +### Coordinates of \(G\)
    +
    +Let \(G=(x,y)\) with \(y\neq0\).  
    +We know
    +
    +\[
    +\begin{cases}
    +(CG)^2=(x-26)^2+y^2=40^2=1600,\\
    +(DG)^2=(x-40)^2+y^2=30^2=900 .
    +\end{cases}
    +\]
    +
    +Subtracting the equations:
    +
    +\[
    +(x-26)^2-(x-40)^2 = 1600-900=700 .
    +\]
    +
    +Compute the left side:
    +
    +\[
    +\bigl(x^2-52x+676\bigr)-\bigl(x^2-80x+1600\bigr)=28x-924 .
    +\]
    +
    +Hence \(28x-924=700\) giving  
    +
    +\[
    +x=\frac{1624}{28}=58.
    +\]
    +
    +Now use \((x-40)^2+y^2=900\):
    +
    +\[
    +(58-40)^2+y^2=900\Longrightarrow 18^2+y^2=900\Longrightarrow y^2=576.
    +\]
    +
    +Thus \(y=\pm24\).  The sign does not affect the area; we take \(y=24\).
    +
    +Therefore  
    +
    +\[
    +G=(58,24)\;(\text{or }(58,-24)).
    +\]
    +
    +---
    +
    +### Area of \(\triangle BGE\)
    +
    +Points:
    +\[
    +B=(18,0),\qquad G=(58,24),\qquad E=(57,0).
    +\]
    +
    +Since \(B\) and \(E\) lie on the \(x\)-axis, the base \(BE\) has length  
    +
    +\[
    +BE = 57-18 = 39.
    +\]
    +
    +The altitude from \(G\) to the \(x\)-axis is \(|y|=24\).
    +
    +Hence
    +
    +\[
    +\text{Area}=\frac12\cdot (\text{base})\cdot (\text{height})
    +          =\frac12\cdot 39\cdot 24
    +          =468.
    +\]
    +
    +\[
    +\boxed{468}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 468

    +

    Extracted Answer: 468

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let the sequence of rationals $ x_1, x_2, \ldots $ be defined such that $ x_1 = \frac{25}{11} $ and
    +$ x_{k+1} = \frac{1}{3} \left( x_k + \frac{1}{x_k} - 1 \right). $
    +$ x_{2025} $ can be expressed as $ \frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +x_{k+1}= \frac{x_k+\frac1{x_k}-1}{3},\qquad x_1=\frac{25}{11}
    +\]
    +
    +---
    +
    +### 1.  A convenient substitution  
    +
    +Let  
    +
    +\[
    +y_k=\frac{x_k-1}{x_k+1}\qquad\Longleftrightarrow\qquad 
    +x_k=\frac{1+y_k}{1-y_k}.
    +\]
    +
    +Then a short computation gives  
    +
    +\[
    +y_{k+1}= \frac{3y_k^{\,2}-1}{2}. \tag{1}
    +\]
    +
    +Thus we only have to iterate the quadratic map (1).
    +
    +---
    +
    +### 2.  Scaling  
    +
    +Define  
    +
    +\[
    +u_k=\frac32\,y_k .
    +\]
    +
    +From (1)
    +
    +\[
    +u_{k+1}=u_k^{2}-\frac34 .\tag{2}
    +\]
    +
    +Let  
    +
    +\[
    +u_k=\frac{a_k}{12^{\,2^{k-1}}},\qquad a_1=7 .
    +\]
    +
    +Because the denominator squares each step, indeed  
    +
    +\[
    +12^{\,2^{k}}=(12^{\,2^{k-1}})^2 .
    +\]
    +
    +Using (2) one checks that  
    +
    +\[
    +a_{k+1}=a_k^{2}-\frac34\cdot12^{\,2^{k}} .
    +\]
    +
    +Only the denominator grows; the exact value of the numerator is not needed later.
    +
    +---
    +
    +### 3.  Returning to \(x_k\)
    +
    +Since \(y_k=\frac{2}{3}u_k\),
    +
    +\[
    +x_k=\frac{1+y_k}{1-y_k}
    +     =\frac{3+2u_k}{3-2u_k}
    +     =\frac{3\cdot12^{\,2^{k-1}}+2a_k}
    +            {3\cdot12^{\,2^{k-1}}-2a_k}.
    +\]
    +
    +Hence for any \(k\),
    +
    +\[
    +x_k=\frac{M_k}{N_k},\qquad 
    +M_k+N_k =6\cdot12^{\,2^{k-1}} .
    +\]
    +
    +In particular
    +
    +\[
    +m+n = M_{2025}+N_{2025}= 6\cdot 12^{\,2^{2024}} .
    +\]
    +
    +---
    +
    +### 4.  Computing \(6\cdot12^{2^{2024}}\pmod{1000}\)
    +
    +We need \(6\cdot12^{K}\pmod{1000}\) where \(K=2^{2024}\).
    +
    +Because \(1000=8\cdot125\) we work modulo 8 and 125.
    +
    +*Modulo 8*:  
    +\(12\equiv4\pmod8\), and \(4^{2}=0\pmod8\).  
    +Since \(K\ge2\), \(12^{K}\equiv0\pmod8\) ⇒ the whole expression is \(0\pmod8\).
    +
    +*Modulo 125*:  \(\gcd(12,125)=1\) and \(\phi(125)=100\).  
    +Thus \(12^{100}\equiv1\pmod{125}\); we need \(K\bmod100\).
    +
    +The powers of 2 modulo 100 repeat with period 20 for exponents \(\ge2\).  
    +\(2024\equiv4\pmod{20}\), so \(2^{2024}\equiv2^{4}=16\pmod{100}\).  
    +Hence \(12^{K}\equiv12^{16}\pmod{125}\).
    +
    +Compute:
    +\[
    +12^{2}\equiv19,\;12^{4}\equiv111,\;12^{8}\equiv71,\;12^{16}\equiv71^{2}\equiv41\pmod{125}.
    +\]
    +
    +Thus \(6\cdot12^{K}\equiv6\cdot41=246\equiv121\pmod{125}\).
    +
    +Now solve the CRT:
    +\[
    +X\equiv0\pmod8,\qquad X\equiv121\pmod{125}.
    +\]
    +
    +Let \(X=8t\). Then \(8t\equiv121\pmod{125}\Rightarrow t\equiv47\cdot121\equiv62\pmod{125}\) (since \(8^{-1}\equiv47\pmod{125}\)).  
    +Thus \(X=8\cdot62=496\pmod{1000}\).
    +
    +Therefore
    +
    +\[
    +m+n \equiv 496 \pmod{1000}.
    +\]
    +
    +---
    +
    +\[
    +\boxed{496}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 248

    +

    Extracted Answer: 496

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +m=n+2\qquad (m>2)
    +\]
    +
    +Then  
    +
    +\[
    +n+2=m,\qquad n+3=m+1,\qquad n^{2}+9=(m-2)^{2}+9=m^{2}-4m+13 .
    +\]
    +
    +The condition  
    +
    +\[
    +n+2\mid 3(n+3)(n^{2}+9)
    +\]
    +
    +becomes  
    +
    +\[
    +m \mid 3(m+1)(m^{2}-4m+13). \tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Using the gcd with 3
    +
    +Because  
    +
    +\[
    +\gcd(m,m+1)=1,
    +\]
    +
    +any prime divisor of \(m\) cannot come from the factor \(m+1\).  
    +The only possible common factor of \(m\) with the whole right‑hand side of (1) is the factor \(3\).
    +
    +Let  
    +
    +\[
    +d=\gcd(m,3),\qquad m=d\cdot m',\qquad \gcd(m',3)=1 .
    +\]
    +
    +Then (1) is equivalent to  
    +
    +\[
    +d m' \mid 3(m+1)(m^{2}-4m+13)
    +      = d\Bigl(\frac{3}{d}\Bigr)(m+1)(m^{2}-4m+13).
    +\]
    +
    +Cancelling \(d\) gives  
    +
    +\[
    +m' \mid \Bigl(\frac{3}{d}\Bigr)(m+1)(m^{2}-4m+13).\tag{2}
    +\]
    +
    +Since \(\gcd(m',m+1)=1\) and also \(\gcd(m',3)=1\), the factor \((m+1)\) and the possible remaining factor \(\frac{3}{d}\) cannot help the divisibility. Hence (2) reduces to  
    +
    +\[
    +m' \mid (m^{2}-4m+13). \tag{3}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Reduce modulo \(m\)
    +
    +\[
    +m^{2}-4m+13 \equiv 13\pmod{m},
    +\]
    +
    +so (3) is equivalent to  
    +
    +\[
    +m' \mid 13.
    +\]
    +
    +Recall \(m' =\dfrac{m}{\gcd(m,3)}\).  Therefore
    +
    +\[
    +\frac{m}{\gcd(m,3)}\mid 13.
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Solve the two possibilities
    +
    +**(i)  \(\gcd(m,3)=1\) (i.e. \(3\nmid m\)).**  
    +Then \(\displaystyle m\mid13\).  
    +With \(m>2\), the only possibility is \(m=13\).
    +
    +**(ii)  \(\gcd(m,3)=3\) (i.e. \(m=3k\)).**  
    +Then \(\displaystyle k\mid13\).  
    +Thus \(k=1\) or \(k=13\), giving \(m=3\) or \(m=39\).
    +
    +--------------------------------------------------------------------
    +### 4.  Return to \(n\)
    +
    +\[
    +n=m-2\; \Longrightarrow\; 
    +\begin{cases}
    +m=3 &\Rightarrow n=1,\\[2pt]
    +m=13 &\Rightarrow n=11,\\[2pt]
    +m=39 &\Rightarrow n=37.
    +\end{cases}
    +\]
    +
    +All three values satisfy the original divisibility (direct verification shows \(3\mid120\), \(13\mid5460\), \(39\mid165360\)).
    +
    +--------------------------------------------------------------------
    +### 5.  Sum of all such \(n\)
    +
    +\[
    +1+11+37 = 49.
    +\]
    +
    +\[
    +\boxed{49}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 49

    +

    Extracted Answer: 49

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The product $ \prod_{k=4}^{63} \frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})} = \frac{\log_4(5^{15})}{\log_5(5^{12})} \cdot \frac{\log_5(5^{24})}{\log_6(5^{21})} \cdot \frac{\log_6(5^{35})}{\log_7(5^{32})} \cdots \frac{\log_{63}(5^{3968})}{\log_{64}(5^{3965})} $ is equal to $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    First rewrite each factor using the change–of–base formula  
    +
    +\[
    +\log_a b=\frac{\ln b}{\ln a}.
    +\]
    +
    +\[
    +\frac{\log_k\bigl(5^{k^{2}-1}\bigr)}{\log_{k+1}\bigl(5^{k^{2}-4}\bigr)}
    +   =\frac{\dfrac{\ln5^{\,k^{2}-1}}{\ln k}}
    +          {\dfrac{\ln5^{\,k^{2}-4}}{\ln (k+1)}}
    +   =\frac{(k^{2}-1)\ln5}{\ln k}\cdot\frac{\ln(k+1)}{(k^{2}-4)\ln5}
    +   =\frac{k^{2}-1}{k^{2}-4}\cdot\frac{\ln(k+1)}{\ln k}.
    +\]
    +
    +Hence
    +
    +\[
    +P=\prod_{k=4}^{63}\frac{k^{2}-1}{k^{2}-4}
    +   \cdot\prod_{k=4}^{63}\frac{\ln(k+1)}{\ln k}.
    +\]
    +
    +---
    +
    +### 1.  The logarithmic product
    +
    +\[
    +\prod_{k=4}^{63}\frac{\ln(k+1)}{\ln k}
    +   =\frac{\ln64}{\ln4}
    +   =\log_{4}64=3.
    +\]
    +
    +(The terms cancel telescopically.)
    +
    +---
    +
    +### 2.  The rational product  
    +
    +Factor each term:
    +
    +\[
    +\frac{k^{2}-1}{k^{2}-4}
    +   =\frac{(k-1)(k+1)}{(k-2)(k+2)}
    +   =\frac{k-1}{k-2}\cdot\frac{k+1}{k+2}.
    +\]
    +
    +Thus
    +
    +\[
    +\prod_{k=4}^{63}\frac{k^{2}-1}{k^{2}-4}
    + =\Bigl(\prod_{k=4}^{63}\frac{k-1}{k-2}\Bigr)
    +  \Bigl(\prod_{k=4}^{63}\frac{k+1}{k+2}\Bigr).
    +\]
    +
    +The first product telescopes:
    +
    +\[
    +\prod_{k=4}^{63}\frac{k-1}{k-2}
    + =\frac{3}{2}\cdot\frac{4}{3}\cdot\cdots\cdot\frac{62}{61}
    + =\frac{62}{2}=31.
    +\]
    +
    +The second product also telescopes:
    +
    +\[
    +\prod_{k=4}^{63}\frac{k+1}{k+2}
    + =\frac{5}{6}\cdot\frac{6}{7}\cdot\cdots\cdot\frac{64}{65}
    + =\frac{5}{65}=\frac{1}{13}.
    +\]
    +
    +Therefore
    +
    +\[
    +\prod_{k=4}^{63}\frac{k^{2}-1}{k^{2}-4}
    +   =31\cdot\frac{1}{13}=\frac{31}{13}.
    +\]
    +
    +---
    +
    +### 3.  Combine the two parts
    +
    +\[
    +P=\frac{31}{13}\times3=\frac{93}{13}.
    +\]
    +
    +The fraction is already in lowest terms (\(\gcd(93,13)=1\)).  
    +Thus \(m=93\), \(n=13\) and
    +
    +\[
    +m+n=93+13=106.
    +\]
    +
    +\[
    +\boxed{106}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 106

    +

    Extracted Answer: 106

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Four unit squares form a $2 \times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the four unit squares be  
    +
    +\[
    +\begin{array}{c|c}
    +\text{TL}&\text{TR}\\\hline
    +\text{BL}&\text{BR}
    +\end{array}
    +\]
    +
    +and denote the twelve unit edges as follows  
    +
    +* Horizontal edges:  
    +
    +\[
    +\begin{aligned}
    +&h_{1}= \text{top of TL},\qquad h_{2}= \text{top of TR},\\
    +&h_{3}= \text{middle left},\qquad h_{4}= \text{middle right},\\
    +&h_{5}= \text{bottom of BL},\qquad h_{6}= \text{bottom of BR}.
    +\end{aligned}
    +\]
    +
    +* Vertical edges:  
    +
    +\[
    +\begin{aligned}
    +&v_{1}= \text{left of TL},\qquad v_{2}= \text{left of BL},\\
    +&v_{3}= \text{middle top},\qquad v_{4}= \text{middle bottom},\\
    +&v_{5}= \text{right of TR},\qquad v_{6}= \text{right of BR}.
    +\end{aligned}
    +\]
    +
    +For each square the sum of the red edges must be \(2\).
    +Writing a red edge as \(1\) and a blue edge as \(0\),
    +
    +\[
    +\begin{aligned}
    +\text{TL}&:\;h_{1}+h_{3}+v_{1}+v_{3}=2,\\
    +\text{TR}&:\;h_{2}+h_{4}+v_{3}+v_{5}=2,\\
    +\text{BL}&:\;h_{3}+h_{5}+v_{2}+v_{4}=2,\\
    +\text{BR}&:\;h_{4}+h_{6}+v_{4}+v_{6}=2.
    +\end{aligned}
    +\]
    +
    +The four **interior** edges are \(h_{3},h_{4},v_{3},v_{4}\); the other eight edges lie on the outer
    +boundary.  
    +
    +Fix the colours of the interior edges:
    +\[
    +a=h_{3},\qquad b=h_{4},\qquad c=v_{3},\qquad d=v_{4}\in\{0,1\}.
    +\]
    +
    +Then for each square we know the required sum of its two boundary edges:
    +
    +\[
    +\begin{aligned}
    +h_{1}+v_{1}&=2-(a+c),\\
    +h_{2}+v_{5}&=2-(b+c),\\
    +h_{5}+v_{2}&=2-(a+d),\\
    +h_{6}+v_{6}&=2-(b+d).
    +\end{aligned}
    +\]
    +
    +If the right‑hand side equals \(2\) or \(0\) the two boundary edges are forced to be
    +both red or both blue – exactly one choice.  
    +If it equals \(1\) the two edges must be of opposite colours – two choices.
    +
    +Hence, for a fixed interior vector \((a,b,c,d)\) the number of admissible colourings of the
    +boundary edges is  
    +
    +\[
    +2^{\,k(a,b,c,d)},
    +\]
    +
    +where \(k\) is the number of squares whose interior‑edge sum equals \(1\); i.e.
    +
    +\[
    +k=(a\oplus c)+(b\oplus c)+(a\oplus d)+(b\oplus d),
    +\]
    +(\(\oplus\) denotes XOR).
    +
    +Therefore the total number of colourings is  
    +
    +\[
    +\sum_{a,b,c,d\in\{0,1\}}2^{k}
    += \sum_{c,d} \Bigl(\sum_{a}2^{\,a\oplus c + a\oplus d}\Bigr)^{2}.
    +\]
    +
    +For the four possibilities of \((c,d)\) we have
    +
    +\[
    +\begin{array}{c|c}
    +(c,d) & \displaystyle\sum_{a}2^{a\oplus c + a\oplus d} \\ \hline
    +(0,0) & 1+4 = 5\\
    +(1,1) & 4+1 = 5\\
    +(0,1),(1,0) & 2+2 = 4
    +\end{array}
    +\]
    +
    +Thus
    +
    +\[
    +\text{total}=2\cdot5^{2}+2\cdot4^{2}=2\cdot25+2\cdot16=50+32=82.
    +\]
    +
    +Hence there are  
    +
    +\[
    +\boxed{82}
    +\]
    +
    +different colourings of the twelve unit edges so that each of the four unit squares has
    +exactly two red and two blue sides.
    +
    +
    +

    Results

    +

    Correct Answer: 82

    +

    Extracted Answer: 82

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The divisors of  
    +
    +\[
    +2025 = 3^{4}\cdot5^{2}
    +\]
    +
    +are obtained by choosing the exponent of \(3\) from \(\{0,1,2,3,4\}\) and the exponent of \(5\) from \(\{0,1,2\}\).  
    +Hence  
    +
    +\[
    +|A|=(4+1)(2+1)=15 .
    +\]
    +
    +---
    +
    +### Condition for the LCM to be \(2025\)
    +
    +For a non‑empty subset \(B\subseteq A\),
    +
    +\[
    +\operatorname{lcm}(B)=2025 \iff
    +\begin{cases}
    +\text{some element of }B\text{ has }3\text{-exponent }4,\\[2pt]
    +\text{some element of }B\text{ has }5\text{-exponent }2.
    +\end{cases}
    +\]
    +
    +Define  
    +
    +\[
    +S_3=\{81,\,405,\,2025\} \quad (\text{divisors with }3^4) ,
    +\]
    +\[
    +S_5=\{25,\,75,\,225,\,675,\,2025\} \quad (\text{divisors with }5^2).
    +\]
    +
    +Thus \(B\) must intersect both \(S_3\) and \(S_5\).
    +
    +---
    +
    +### Counting favorable subsets
    +
    +Let \(U=S_3\cup S_5\).  
    +\(|S_3|=3,\;|S_5|=5,\;|S_3\cap S_5|=1\) (the element \(2025\)), so
    +
    +\[
    +|U|=3+5-1=7.
    +\]
    +
    +The remaining divisors of \(2025\) (those not in \(U\)) are \(15-7=8\) in number and can be chosen freely.
    +
    +Number of subsets of \(U\) that contain at least one element of \(S_3\) **and** at least one element of \(S_5\):
    +
    +\[
    +\begin{aligned}
    +&2^{7}\;(\text{all subsets of }U)\\
    +&\quad-2^{4}\;(\text{subsets with no }S_3)\\
    +&\quad-2^{2}\;(\text{subsets with no }S_5)\\
    +&\quad+2^{0}\;(\text{subsets with neither }S_3\text{ nor }S_5)\\[2pt]
    +&=128-16-4+1=109 .
    +\end{aligned}
    +\]
    +
    +For each of these \(109\) choices, any subset of the other 8 divisors may be added, giving a factor \(2^{8}=256\).
    +
    +Hence the number of favorable subsets is  
    +
    +\[
    +N=109\cdot256=27904.
    +\]
    +
    +---
    +
    +### Probability
    +
    +All subsets of \(A\) (including the empty set) number  
    +
    +\[
    +2^{15}=32768.
    +\]
    +
    +Thus
    +
    +\[
    +P=\frac{N}{2^{15}}=\frac{27904}{32768}.
    +\]
    +
    +Dividing numerator and denominator by their greatest common divisor \(256\),
    +
    +\[
    +P=\frac{27904/256}{32768/256}=\frac{109}{128}.
    +\]
    +
    +So \(\displaystyle m=109,\;n=128\) and
    +
    +\[
    +m+n=109+128=237.
    +\]
    +
    +\[
    +\boxed{237}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 237

    +

    Extracted Answer: 237

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\angle B=\angle E=60^\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +\boxed{45}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 60

    +

    Extracted Answer: 45

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Circle $\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\omega_2$ with radius 15. Points $C$ and $D$ lie on $\omega_2$ such that $\overline{BC}$ is a diameter of $\omega_2$ and $\overline{BC} \perp \overline{AD}$. The rectangle $EFGH$ is inscribed in $\omega_1$ such that $\overline{EF} \perp \overline{BC}$, $C$ is closer to $\overline{GH}$ than to $\overline{EF}$, and $D$ is closer to $\overline{FG}$ than to $\overline{EH}$, as shown. Triangles $\triangle DGF$ and $\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the centre of the large circle \(\omega _2\) be the origin \(O(0,0)\).
    +Since \(BC\) is a diameter of \(\omega _2\), take  
    +
    +\[
    +B=(15,0),\qquad C=(-15,0),\qquad O=(0,0).
    +\]
    +
    +Because \(\omega _1\) (radius \(6\)) is internally tangent to \(\omega _2\) at \(B\),
    +its centre \(A\) lies on \(OB\) with  
    +
    +\[
    +OA=15-6=9\quad\Longrightarrow\quad A=(9,0).
    +\]
    +
    +The condition \(AD\perp BC\) forces \(AD\) to be vertical through \(x=9\).
    +Intersecting this line with \(\omega _2\) (\(x^{2}+y^{2}=225\)) gives  
    +
    +\[
    +D=(9,12)\text{ or }(9,-12).
    +\]
    +
    +Since later we need \(D\) to be nearer the side \(\overline{FG}\) than to \(\overline{EH}\),
    +\(D\) must lie **below** the rectangle; hence  
    +
    +\[
    +D=(9,-12).
    +\]
    +
    +---
    +
    +### The rectangle
    +
    +A rectangle inscribed in a circle has its centre at the circle’s centre.
    +Thus the centre of rectangle \(EFGH\) is \(A(9,0)\).
    +
    +Let  
    +
    +* \(w\) = horizontal distance from \(A\) to each vertical side,
    +* \(h\) = vertical distance from \(A\) to each horizontal side.
    +
    +Then the vertices are  
    +
    +\[
    +\begin{aligned}
    +E&(9+w,\;h),\qquad F&(9+w,\;-h),\\
    +G&(9-w,\;-h),\qquad H&(9-w,\;h).
    +\end{aligned}
    +\]
    +
    +Because the rectangle is inscribed in \(\omega _1\),
    +
    +\[
    +w^{2}+h^{2}=6^{2}=36. \tag{1}
    +\]
    +
    +The side \(\overline{EF}\) is vertical, so \(\overline{EF}\perp BC\) (which is horizontal).
    +
    +- \(C(-15,0)\) is left of the rectangle, so its distances to the two vertical sides are  
    +
    +\[
    +\operatorname{dist}(C,\overline{GH}) =| -15-(9-w)| =24-w,
    +\]
    +\[
    +\operatorname{dist}(C,\overline{EF}) =| -15-(9+w)| =24+w,
    +\]
    +
    +hence \(C\) is indeed closer to \(\overline{GH}\) than to \(\overline{EF}\).
    +
    +- \(D(9,-12)\) is below the rectangle; its distances to the horizontal sides are  
    +
    +\[
    +\operatorname{dist}(D,\overline{FG}) =|-12-(-h)| =12-h,
    +\]
    +\[
    +\operatorname{dist}(D,\overline{EH}) =|-12-h| =12+h,
    +\]
    +
    +so \(D\) is closer to \(\overline{FG}\) than to \(\overline{EH}\) as required.
    +
    +---
    +
    +### Equality of the two triangle areas
    +
    +\[
    +\triangle DGF:\quad 
    +\text{base}=GF=2w,\;
    +\text{height}=12-h\;\Longrightarrow\;
    +[ DGF]=\tfrac12(2w)(12-h)=w(12-h).
    +\]
    +
    +\[
    +\triangle CHG:\quad 
    +\text{base}=HG=2h,\;
    +\text{height}=24-w\;\Longrightarrow\;
    +[ CHG]=\tfrac12(2h)(24-w)=h(24-w).
    +\]
    +
    +Given \([DGF]=[CHG]\),
    +
    +\[
    +w(12-h)=h(24-w)\;\Longrightarrow\;12w=24h\;\Longrightarrow\; w=2h. \tag{2}
    +\]
    +
    +---
    +
    +### Solving for \(w\) and \(h\)
    +
    +Substituting \(w=2h\) into (1),
    +
    +\[
    +(2h)^{2}+h^{2}=36\;\Longrightarrow\;5h^{2}=36\;\Longrightarrow\;h^{2}=\frac{36}{5}.
    +\]
    +
    +Hence  
    +
    +\[
    +h=\frac{6}{\sqrt5},\qquad 
    +w=2h=\frac{12}{\sqrt5}.
    +\]
    +
    +---
    +
    +### Area of the rectangle
    +
    +\[
    +\text{Area}= (2w)(2h)=4wh
    +   =4\!\left(\frac{12}{\sqrt5}\right)\!\left(\frac{6}{\sqrt5}\right)
    +   =\frac{288}{5}.
    +\]
    +
    +Thus \(\displaystyle \frac{m}{n}= \frac{288}{5}\) with \(m,n\) relatively prime.
    +Hence  
    +
    +\[
    +m+n=288+5=293.
    +\]
    +
    +\[
    +\boxed{293}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 293

    +

    Extracted Answer: 293

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $ n $ values of $ x $ in the interval $ 0 < x < 2\pi $ where $ f(x) = \sin(7\pi \cdot \sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +f(x)=\sin\bigl(7\pi\sin(5x)\bigr),\qquad 0<x<2\pi .
    +\]
    +
    +---
    +
    +### 1.  Zeros of \(f\)
    +
    +\[
    +f(x)=0\iff \sin\bigl(7\pi\sin(5x)\bigr)=0
    +\iff 7\pi\sin(5x)=k\pi\;(k\in\mathbb Z)
    +\iff \sin(5x)=\frac{k}{7}.
    +\]
    +
    +Because \(|\sin(5x)|\le1\), we must have \(|k|\le7\); thus  
    +
    +\[
    +k\in\{-7,-6,\dots ,0,\dots ,6,7\}.
    +\]
    +
    +Set \(\theta=5x\).  Then \(x\in(0,2\pi)\) gives \(\theta\in(0,10\pi)\).
    +Hence we must count the solutions of
    +
    +\[
    +\sin\theta=\frac{k}{7},\qquad \theta\in(0,10\pi),
    +\]
    +for every integer \(k\) with \(|k|\le7\).
    +
    +---
    +
    +### 2.  Number of solutions for each \(k\)
    +
    +* **\(k=0\):** \(\sin\theta=0\Rightarrow\theta=n\pi\).  
    +  In \((0,10\pi)\) we have \(n=1,2,\dots ,9\): **9 solutions**.
    +
    +* **\(k=\pm7\):** \(\sin\theta=\pm1\).  
    +  Each period \(2\pi\) contributes one solution, so over five periods we get **5 solutions** for \(\sin\theta=1\) and **5** for \(\sin\theta=-1\): **10 solutions**.
    +
    +* **\(k=\pm1,\pm2,\pm3,\pm4,\pm5,\pm6\):** \(\sin\theta=a\) with \(|a|<1,\;a\neq0\).  
    +  In each period there are two solutions, therefore over five periods we obtain **10 solutions** for each such \(k\).
    +
    +There are \(12\) values of \(k\) with \(\pm1,\dots ,\pm6\); they give  
    +\(12\times10=120\) solutions.
    +
    +Hence the total number of zeros is  
    +
    +\[
    +n = 9\;(k=0) + 10\;(k=\pm7) + 120\;(k=\pm1,\dots ,\pm6) = 139 .
    +\]
    +
    +---
    +
    +### 3.  Points where the graph is tangent to the \(x\)-axis
    +
    +A zero is a point of tangency when \(f'(x)=0\) as well.
    +
    +\[
    +f'(x)=\cos\bigl(7\pi\sin(5x)\bigr)\cdot 7\pi\cdot5\cos(5x)
    +     =35\pi\cos(5x)\,\cos\bigl(7\pi\sin(5x)\bigr).
    +\]
    +
    +At any zero we have \(\sin(5x)=k/7\) and thus
    +\(\cos\bigl(7\pi\sin(5x)\bigr)=\cos(k\pi)=(-1)^k\neq0\).
    +Consequently  
    +
    +\[
    +f'(x)=0\iff \cos(5x)=0.
    +\]
    +
    +\(\cos(5x)=0\) implies \(\sin(5x)=\pm1\), i.e. the cases \(k=\pm7\).
    +Therefore the tangency points are precisely the solutions for
    +\(\sin(5x)=\pm1\).
    +
    +From the count above there are **5** solutions for \(\sin(5x)=1\) and **5**
    +for \(\sin(5x)=-1\); altogether
    +
    +\[
    +t = 10 .
    +\]
    +
    +---
    +
    +### 4.  Required sum
    +
    +\[
    +n+t = 139+10 = 149.
    +\]
    +
    +\[
    +\boxed{149}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 149

    +

    Extracted Answer: 149

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Sixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the chairs be numbered \(1,2,\ldots ,16\).
    +Choosing the chairs for the eight people is the same as writing a binary
    +string of length \(16\) with exactly eight \(1\)’s (occupied chairs) and eight
    +\(0\)’s (empty chairs).
    +
    +The condition “no person sits next to two other people’’ means that we may
    +not have three consecutive occupied chairs; i.e. the binary string must contain
    +no substring \(111\).
    +
    +---
    +
    +### 1.  Decompose the 1’s into blocks  
    +
    +Since three consecutive 1’s are forbidden, any maximal block of consecutive
    +1’s has length \(1\) or \(2\).
    +Let  
    +
    +* \(a\) = number of blocks of length \(1\),  
    +* \(b\) = number of blocks of length \(2\).
    +
    +Then  
    +
    +\[
    +a+2b = 8,\qquad a,b\ge 0 .
    +\]
    +
    +Hence the possible values are  
    +
    +\[
    +\begin{array}{c|c|c}
    +b & a & r=a+b\\ \hline
    +0&8&8\\
    +1&6&7\\
    +2&4&6\\
    +3&2&5\\
    +4&0&4
    +\end{array}
    +\]
    +
    +Here \(r\) is the total number of blocks of 1’s.
    +
    +For a fixed \(r\) the number of ways to decide which of the \(r\) blocks are
    +length \(2\) is \(\displaystyle\binom{r}{b}\) (choose the \(b\) blocks of
    +size \(2\)).  
    +
    +---
    +
    +### 2.  Insert the zeros  
    +
    +There are \(8\) zeros.  
    +Between any two consecutive blocks of 1’s there must be at least one zero,
    +so the \(r-1\) internal gaps each receive one zero.  
    +After this we have  
    +
    +\[
    +8-(r-1)=9-r
    +\]
    +
    +zeros left to distribute freely among the \(r+1\) gaps (the two ends plus the
    +\(r-1\) internal gaps).  
    +
    +The number of non‑negative integer solutions of  
    +
    +\[
    +z_0+z_1+\cdots+z_r = 9-r
    +\]
    +
    +is  
    +
    +\[
    +\binom{(9-r)+(r+1)-1}{(r+1)-1}= \binom{9}{r}.
    +\]
    +
    +Thus for a given \(r\) (equivalently a given \(b\)) we have  
    +
    +\[
    +\binom{r}{b}\binom{9}{r}
    +\]
    +
    +valid strings.
    +
    +---
    +
    +### 3.  Sum over all possibilities  
    +
    +Recall \(r=8-b\).  Summing over \(b=0,1,2,3,4\):
    +
    +\[
    +\begin{aligned}
    +N &=\sum_{b=0}^{4}\binom{8-b}{b}\binom{9}{8-b}  \\
    +  &=\binom{8}{0}\binom{9}{8}+
    +    \binom{7}{1}\binom{9}{7}+
    +    \binom{6}{2}\binom{9}{6}+
    +    \binom{5}{3}\binom{9}{5}+
    +    \binom{4}{4}\binom{9}{4}  \\
    +  &=1\cdot9+7\cdot36+15\cdot84+10\cdot126+1\cdot126 \\
    +  &=9+252+1260+1260+126 \\
    +  &=2907 .
    +\end{aligned}
    +\]
    +
    +---
    +
    +### 4.  Modulo \(1000\)
    +
    +\[
    +2907\equiv 907\pmod{1000}.
    +\]
    +
    +\[
    +\boxed{907}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 907

    +

    Extracted Answer: 907

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Alex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The disk is cut by line–segments (chords).  
    +If a new chord meets \(k\) already drawn chords in the interior, it splits
    +\(k+1\) existing regions, so the total number of regions after all chords are drawn is  
    +
    +\[
    +R = 1 + (\text{number of chords}) + (\text{number of interior intersections}).
    +\]
    +
    +There are \(27\) chords in total (the two diameters plus the \(25\) random chords), so  
    +
    +\[
    +\mathbb E[R]=28+\mathbb E[I],
    +\]
    +
    +where \(I\) is the number of interior intersection points.
    +
    +--------------------------------------------------------------------
    +### 1.  Intersections involving a diameter  
    +
    +A fixed diameter (say the vertical one) is intersected iff the two
    +end–points of the chord lie in opposite half–planes \((x>0\) and \(x<0)\).
    +For a chord whose endpoints are required to lie in **different quadrants**
    +\[
    +P(\text{opposite }x\text{-signs})=\frac12,\qquad 
    +P(\text{different quadrants})=\frac34,
    +\]
    +hence  
    +
    +\[
    +p_D=P(\text{intersects a given diameter}\mid\text{different quadrants})
    +      =\frac{1/2}{3/4}= \frac23 .
    +\]
    +
    +Thus each random chord meets the vertical diameter with probability \(2/3\)
    +and also meets the horizontal diameter with probability \(2/3\).  
    +The expected number of intersections between the \(25\) random chords
    +and the two diameters is  
    +
    +\[
    +25\bigl(2\cdot\tfrac23\bigr)=\frac{100}{3}.
    +\]
    +
    +The two diameters intersect each other once, so the total expected
    +intersection count contributed by the diameters is  
    +
    +\[
    +1+\frac{100}{3}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Intersections between two random chords  
    +
    +Write each chord only by the **pair of quadrants** that its two endpoints
    +occupy.  For a chord whose endpoints are in different quadrants the
    +unordered pair of quadrants is uniformly distributed over the six possible
    +pairs:
    +
    +* four **adjacent** pairs \(\{1,2\},\{2,3\},\{3,4\},\{4,1\}\);
    +* two **opposite** pairs \(\{1,3\},\{2,4\}\).
    +
    +Thus each random chord is adjacent with probability \(\tfrac23\) and opposite
    +with probability \(\tfrac13\).
    +
    +Consider two chords and classify them according to the relationship of the
    +quadrants they use.
    +
    +| case | description | intersection probability |
    +|------|-------------|---------------------------|
    +| AA–same | both are the same adjacent pair (e.g. \(\{1,2\}\) and \(\{1,2\}\)) | \(\tfrac12\) |
    +| AA–share | adjacent pairs sharing one quadrant (e.g. \(\{1,2\},\{2,3\}\)) | \(\tfrac12\) |
    +| AA–disjoint | adjacent pairs using opposite quadrants (e.g. \(\{1,2\},\{3,4\}\)) | \(0\) |
    +| OO–same | both are the same opposite pair (e.g. \(\{1,3\},\{1,3\}\)) | \(\tfrac12\) |
    +| OO–disjoint | opposite pairs \(\{1,3\},\{2,4\}\) | \(1\) |
    +| AO (any) | one adjacent, one opposite (they always share one quadrant) | \(\tfrac12\) |
    +
    +All of the probabilities above are obtained by looking at the possible
    +orderings of the four points inside their quadrants; each ordering is
    +equally likely and the intersecting orderings are exactly half of them
    +(when both chords involve a common quadrant) or forced (when the quadrants
    +are disjoint).
    +
    +Let  
    +
    +* \(a=p_{AA\;{\rm same}}=\tfrac12\),  
    +* \(b=p_{AA\;{\rm share}}=\tfrac12\),  
    +* \(c=p_{OO\;{\rm same}}=\tfrac12\),  
    +* \(d=p_{AO}=\tfrac12\).
    +
    +From the probabilities of picking each type we obtain
    +
    +\[
    +\begin{aligned}
    +p_{RR}
    +&=P(\text{intersection of two random chords})\\
    +&=\frac{2a+4b+c+8d+1}{18}
    +   =\frac{2\cdot\frac12+4\cdot\frac12+\frac12+8\cdot\frac12+1}{18}
    +   =\frac{17}{36}.
    +\end{aligned}
    +\]
    +
    +Hence the expected number of intersections among the \(25\) random chords is  
    +
    +\[
    +\binom{25}{2}\,p_{RR}=300\cdot\frac{17}{36}
    +      =\frac{425}{3}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Total expected intersections
    +
    +\[
    +\mathbb E[I]=
    +\underbrace{1}_{\text{diameters}}+
    +\underbrace{\frac{100}{3}}_{\text{diameters–random chords}}+
    +\underbrace{\frac{425}{3}}_{\text{random–random}}=
    +\frac{525}{3}+1=176 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Expected number of regions
    +
    +\[
    +\mathbb E[R]=28+\mathbb E[I]=28+176=204.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{204}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 204

    +

    Extracted Answer: 204

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +From an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.
    +
    +In general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1 –  Formulating the optimal problem**
    +
    +Let  
    +
    +\[
    +a=\text{ number of 1‑cent coins},\qquad 
    +b=\text{ number of 10‑cent coins},\qquad 
    +c=\text{ number of 25‑cent coins}.
    +\]
    +
    +We must have  
    +
    +\[
    +a+10b+25c=N,\qquad a,b,c\ge 0 .
    +\]
    +
    +The total number of coins is  
    +
    +\[
    +T=a+b+c
    +  =(N-10b-25c)+b+c
    +  =N-9b-24c.
    +\]
    +
    +Thus minimizing the number of coins is the same as **maximising**  
    +
    +\[
    +9b+24c\qquad\text{subject to }10b+25c\le N .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 2 –  The greedy solution**
    +
    +The greedy algorithm first uses as many 25‑cent coins as possible,
    +then as many 10‑cent coins, and finally 1‑cent coins.  
    +Write  
    +
    +\[
    +N=25q+r,\qquad 0\le r<25 .
    +\]
    +
    +The greedy representation is  
    +
    +\[
    +c_{\text{g}}=q,\qquad b_{\text{g}}=\Big\lfloor\frac{r}{10}\Big\rfloor,
    +\qquad a_{\text{g}}=r\bmod 10,
    +\]
    +
    +and the greedy number of coins is  
    +
    +\[
    +G(N)=q+\Big\lfloor\frac{r}{10}\Big\rfloor+(r\bmod10).
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 3 –  When can we do better?**
    +
    +Suppose we try to use **one fewer** 25‑cent coin.  
    +Then we have \(c=q-1\) and the remainder becomes \(r+25\).
    +The new numbers of 10‑ and 1‑cent coins are  
    +
    +\[
    +b'=\Big\lfloor\frac{r+25}{10}\Big\rfloor,\qquad   
    +a'= (r+25)\bmod 10 .
    +\]
    +
    +The total number of coins after dropping one 25‑cent coin is  
    +
    +\[
    +A(N)=(q-1)+b'+a'.
    +\]
    +
    +The difference is
    +
    +\[
    +A(N)-G(N)=-1+\Big\lfloor\frac{r+25}{10}\Big\rfloor-\Big\lfloor\frac{r}{10}\Big\rfloor
    +            +(r+25\bmod10)-(r\bmod10).
    +\]
    +
    +Write \(r=10k+s\) with \(0\le s\le 9\).  Then  
    +
    +\[
    +\Big\lfloor\frac{r+25}{10}\Big\rfloor-\Big\lfloor\frac{r}{10}\Big\rfloor=
    +\begin{cases}
    +2,& s\le 4,\\[2pt]
    +3,& s\ge 5,
    +\end{cases}
    +\]
    +
    +and \((r+25\bmod10)-(r\bmod10)=5\) in either case.  
    +Hence  
    +
    +\[
    +A(N)-G(N)= -1 + \Delta +5 = 4+\Delta,
    +\]
    +
    +where \(\Delta=2\) or \(3\).  Consequently  
    +
    +\[
    +A(N)-G(N)=\begin{cases}
    + 6,& s\le 4,\\
    + 3,& s\ge 5 .
    +\end{cases}
    +\]
    +
    +Thus **dropping one 25‑cent coin reduces the total number of coins
    +iff the ones‑digit \(s\) of the remainder \(r\) is at least 5**.
    +
    +That is, the greedy algorithm fails exactly when  
    +
    +\[
    +r\equiv 5,6,7,8,9,15,16,17,18,19\pmod{25},
    +\]
    +
    +i.e. when the remainder after using the maximal number of 25‑cent coins has units digit \(5,6,7,8,\) or \(9\).
    +
    +--------------------------------------------------------------------
    +
    +**Step 4 –  Dropping more than one 25‑cent coin never helps**
    +
    +If we drop a second 25‑cent coin, the units digit of the new remainder
    +flips between \(s\) and \(s+5\pmod{10}\).  Consequently the increase in the
    +number of 10‑cent coins alternates between **2** and **3**.
    +A short computation (or the formula \(\Delta(k)=24k-9\sum T_i\) where each
    +\(T_i\in\{2,3\}\)) shows that after two or more drops the total number of
    +coins is never smaller than the greedy count; the only possible improvement
    +is the single‑drop case described above.
    +
    +--------------------------------------------------------------------
    +
    +**Step 5 –  Counting the successful values**
    +
    +The greedy algorithm succeeds for all \(N\) that are **not** of the above
    +failing form, and also for \(N<25\) (there are no 25‑cent coins to drop).
    +
    +*There are 10 “bad’’ residues modulo 25*:  
    +
    +\[
    +5,6,7,8,9,15,16,17,18,19.
    +\]
    +
    +For each integer \(q\ge 1\) the numbers \(N=25q+r\) with such an \(r\) are
    +failures.  
    +
    +\[
    +\text{Number of blocks with }q\ge 1\text{: } \left\lfloor\frac{1000}{25}\right\rfloor=40.
    +\]
    +
    +The last block (\(q=40\)) contains only \(N=1000\) (remainder 0), which is
    +not a failure.  Hence the failing blocks are those with \(q=1,2,\dots,39\).
    +
    +\[
    +\text{Failures}=39\;\times\;10 = 390.
    +\]
    +
    +All the remaining numbers succeed:
    +
    +\[
    +\text{Successes}=1000-390=610.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{610}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 610

    +

    Extracted Answer: 610

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A_1A_2 \ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:
    +* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \leq i \leq 10 $,
    +* $ \cos(\angle A_iA_1A_{i+1}) = \frac{12}{13} $ for each $ 2 \leq i \leq 10 $,
    +* The perimeter of $ A_1A_2 \ldots A_{11} $ is 20.
    +If $ A_1A_2 + A_1A_{11} $ can be expressed as $ \frac{m\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For every \(2\le i\le 10\) the triangle \(A_iA_1A_{i+1}\) has  
    +
    +\[
    +[\,A_iA_1A_{i+1}\,]=\frac12 \,A_1A_i\cdot A_1A_{i+1}\sin\angle A_iA_1A_{i+1}=1
    +\]
    +
    +and  
    +
    +\[
    +\cos\angle A_iA_1A_{i+1}= \frac{12}{13}.
    +\]
    +
    +---
    +
    +### 1.  The angle \(\angle A_iA_1A_{i+1}\)
    +
    +\[
    +\sin\theta=\sqrt{1-\cos^{2}\theta}=\sqrt{1-\Big(\frac{12}{13}\Big)^2}=
    +\frac{5}{13}.
    +\]
    +
    +Thus \(\theta=\angle A_iA_1A_{i+1}\) is the same for all \(i\) and  
    +
    +\[
    +\frac12\;A_1A_i\;A_1A_{i+1}\;\frac{5}{13}=1
    +\Longrightarrow
    +A_1A_i\;A_1A_{i+1}= \frac{26}{5}.\tag{1}
    +\]
    +
    +Denote \(a_i=A_1A_i\).  Then (1) gives  
    +
    +\[
    +a_i a_{i+1}=C,\qquad C:=\frac{26}{5}, \qquad 2\le i\le10.
    +\]
    +
    +---
    +
    +### 2.  Alternating values of the radii
    +
    +From \(a_i a_{i+1}=C\) we obtain  
    +
    +\[
    +a_{i+1}= \frac C{a_i},\qquad 
    +a_{i+2}= \frac C{a_{i+1}} = a_i .
    +\]
    +
    +Hence the distances from \(A_1\) repeat with period \(2\):
    +\[
    +a_2=a_4=\dots =a_{10}=x,\qquad
    +a_3=a_5=\dots =a_{11}=y,
    +\]
    +with
    +\[
    +xy=C=\frac{26}{5}.\tag{2}
    +\]
    +
    +Thus \(A_1A_2=x,\;A_1A_{11}=y\) and we must find \(x+y\).
    +
    +---
    +
    +### 3.  Length of a side \(A_iA_{i+1}\;(2\le i\le10)\)
    +
    +In triangle \(A_iA_1A_{i+1}\) we know the two sides \(a_i,a_{i+1}\) and the angle \(\theta\) at \(A_1\).  By the law of cosines
    +
    +\[
    +d^2:=A_iA_{i+1}^{\,2}=a_i^{2}+a_{i+1}^{2}
    +-2a_i a_{i+1}\cos\theta.
    +\]
    +
    +Since \(\cos\theta=\frac{12}{13}\) and \(a_i a_{i+1}=C\),
    +
    +\[
    +d^{2}=a_i^{2}+a_{i+1}^{2}
    +-\frac{24}{13}C.
    +\]
    +
    +Using (2) we have \(C=\frac{26}{5}\), so \(\frac{24}{13}C=\frac{48}{5}\).
    +Now \(a_i^{2}+a_{i+1}^{2}=(a_i+a_{i+1})^{2}-2a_i a_{i+1}=
    +S^{2}-2C\) where \(S:=x+y\).  Hence
    +
    +\[
    +d^{2}=S^{2}-2C-\frac{48}{5}
    +=S^{2}-\frac{52}{5}-\frac{48}{5}
    +=S^{2}-20. \tag{3}
    +\]
    +
    +All nine sides \(A_iA_{i+1}\;(i=2,\dots ,10)\) have the same length \(d\).
    +
    +---
    +
    +### 4.  The perimeter
    +
    +The polygon has edges  
    +
    +\[
    +A_1A_2=x,\; A_{11}A_1=y,\;
    +\underbrace{A_2A_3,\dots ,A_{10}A_{11}}_{9\ \text{edges of length }d}.
    +\]
    +
    +Thus the given perimeter \(20\) yields
    +
    +\[
    +x+y+9d=20\quad\Longrightarrow\quad S+9\sqrt{S^{2}-20}=20,
    +\]
    +using (3) for \(d\).
    +
    +---
    +
    +### 5.  Solving for \(S\)
    +
    +\[
    +9\sqrt{S^{2}-20}=20-S\quad (S\le20).
    +\]
    +
    +Squaring:
    +
    +\[
    +81(S^{2}-20)=(20-S)^{2}
    +\]
    +\[
    +81S^{2}-1620=S^{2}-40S+400
    +\]
    +\[
    +80S^{2}+40S-2020=0
    +\]
    +\[
    +4S^{2}+2S-101=0.
    +\]
    +
    +The quadratic gives
    +
    +\[
    +S=\frac{-2\pm\sqrt{4+1616}}{8}
    +   =\frac{-2\pm\sqrt{1620}}{8}
    +   =\frac{-2\pm18\sqrt5}{8}.
    +\]
    +
    +Only the positive root is admissible:
    +
    +\[
    +S=\frac{-2+18\sqrt5}{8}
    +   =\frac{9\sqrt5-1}{4}.
    +\]
    +
    +Thus  
    +
    +\[
    +A_1A_2+A_1A_{11}=x+y=S=\frac{9\sqrt5-1}{4}.
    +\]
    +
    +---
    +
    +### 6.  Required sum \(m+n+p+q\)
    +
    +The expression is \(\displaystyle\frac{m\sqrt{n}-p}{q}\) with  
    +
    +\[
    +m=9,\qquad n=5\ (\text{square‑free}),\qquad p=1,\qquad q=4.
    +\]
    +
    +Hence  
    +
    +\[
    +m+n+p+q=9+5+1+4=19.
    +\]
    +
    +\[
    +\boxed{19}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 19

    +

    Extracted Answer: 19

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are exactly three positive real numbers $ k $ such that the function
    +$ f(x) = \frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $
    +defined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +\boxed{564}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 240

    +

    Extracted Answer: 564

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +17_b = 1\cdot b+7 = b+7 ,\qquad 
    +97_b = 9\cdot b+7 .
    +\]
    +
    +We need the integer bases \(b>9\) for which \(b+7\) divides \(9b+7\).
    +
    +---
    +
    +### 1.  Express the divisibility condition
    +
    +\[
    +9b+7 \equiv 0\pmod{b+7}.
    +\]
    +
    +Write \(b = (b+7)-7\).  Set \(t=b+7\) (so \(t>16\) because \(b>9\)). Then  
    +
    +\[
    +9b+7 = 9(t-7)+7 = 9t-63+7 = 9t-56.
    +\]
    +
    +Hence  
    +
    +\[
    +9t-56 \equiv 0 \pmod{t}\quad\Longrightarrow\quad -56\equiv0\pmod{t}.
    +\]
    +
    +Thus  
    +
    +\[
    +t \mid 56\qquad\text{or}\qquad b+7 \mid 56.
    +\]
    +
    +---
    +
    +### 2.  Find possible values of \(b\)
    +
    +The positive divisors of \(56\) are  
    +
    +\[
    +1,\,2,\,4,\,7,\,8,\,14,\,28,\,56 .
    +\]
    +
    +Since \(b+7 > 16\) (because \(b>9\)), the only admissible divisors are  
    +
    +\[
    +b+7 = 28 \quad\text{or}\quad b+7 = 56 .
    +\]
    +
    +Therefore  
    +
    +\[
    +\begin{aligned}
    +b+7 = 28 &\;\Rightarrow\; b = 21,\\[2pt]
    +b+7 = 56 &\;\Rightarrow\; b = 49.
    +\end{aligned}
    +\]
    +
    +Both bases are greater than \(9\) and the digits \(1,7,9\) are all less than each base, so the representations \(17_b\) and \(97_b\) are valid.
    +
    +---
    +
    +### 3.  Verify the divisibility
    +
    +*For \(b=21\):*  
    +
    +\[
    +17_{21}=21+7=28,\qquad 97_{21}=9\cdot21+7=196,\qquad \frac{196}{28}=7.
    +\]
    +
    +*For \(b=49\):*  
    +
    +\[
    +17_{49}=49+7=56,\qquad 97_{49}=9\cdot49+7=448,\qquad \frac{448}{56}=8.
    +\]
    +
    +Both are indeed integers.
    +
    +---
    +
    +### 4.  Sum of all such bases
    +
    +\[
    +21+49 = 70.
    +\]
    +
    +\[
    +\boxed{70}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 70

    +

    Extracted Answer: 70

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Suppose $ \triangle ABC $ has angles $ \angle BAC = 84^\circ $, $ \angle ABC = 60^\circ $, and $ \angle ACB = 36^\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \overline{BC} $, $ \overline{AC} $, and $ \overline{AB} $, respectively. The circumcircle of $ \triangle DEF $ intersects $ \overline{BD} $, $ \overline{AE} $, and $ \overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \triangle DEF $ into six minor arcs, as shown. Find $ \widehat{DE} + 2 \cdot \widehat{HJ} + 3 \cdot \widehat{FG} $, where the arcs are measured in degrees.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1.  Identify the nine–point circle**
    +
    +The midpoints \(D,E,F\) of the sides of \(\triangle ABC\) together with the three feet of the
    +altitudes lie on the **nine‑point circle** of \(\triangle ABC\).
    +Hence  
    +
    +\[
    +G=\text{foot of the altitude from }A\text{ on }BC,\qquad   
    +H=\text{foot from }B\text{ on }AC,\qquad   
    +J=\text{foot from }C\text{ on }AB .
    +\]
    +
    +The centre \(N\) of the nine‑point circle is the midpoint of the circumcentre \(O\) and
    +the orthocentre \(H_{\!o}\);
    +if we take the circumradius \(R=1\) and place the circumcentre at the origin,
    +the vertices are  
    +
    +\[
    +A=1,\qquad B=e^{i2C}=e^{i72^\circ},\qquad C=e^{i(2C+2A)}=e^{i240^\circ}.
    +\]
    +
    +Thus  
    +
    +\[
    +N=\frac{A+B+C}{2},\qquad R_{9}= \frac{R}{2}= \frac12 .
    +\]
    +
    +The radii to the three midpoints are  
    +
    +\[
    +\overrightarrow{ND}= \frac{B+C}{2}-\frac{A+B+C}{2}= -\frac{A}{2},\qquad 
    +\overrightarrow{NE}= -\frac{B}{2},\qquad 
    +\overrightarrow{NF}= -\frac{C}{2}.
    +\]
    +
    +Consequently  
    +
    +\[
    +\widehat{DE}= \angle( ND,NE)=\angle(A,B)=2\angle C=2\cdot 36^\circ=72^\circ .
    +\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 2.  Coordinates of the feet of the altitudes**
    +
    +For an acute triangle with vertex angles \(\alpha =\angle A,\ \beta=\angle B,\ \gamma=\angle C\),
    +
    +\[
    +\begin{aligned}
    +G&= D+\frac{\sin(\beta-\gamma)}{2\sin\alpha}\,(B-C),\\[2mm]
    +H&= E+\frac{\sin(\gamma-\alpha)}{2\sin\beta}\,(C-A),\\[2mm]
    +J&= F+\frac{\sin(\alpha-\beta)}{2\sin\gamma}\,(A-B).
    +\end{aligned}
    +\tag{2}
    +\]
    +
    +These formulas follow from the usual expression for the foot of an altitude as a
    +weighted average of the two endpoints of the side.
    +
    +With \(\alpha=84^\circ,\ \beta=60^\circ,\ \gamma=36^\circ\) we obtain
    +
    +\[
    +\begin{aligned}
    +t&=\frac{\sin(\beta-\gamma)}{2\sin\alpha}
    +   =\frac{\sin24^\circ}{2\sin84^\circ}\approx0.2045,\\[2mm]
    +u&=\frac{\sin(\gamma-\alpha)}{2\sin\beta}
    +   =\frac{\sin(-48^\circ)}{2\sin60^\circ}\approx-0.4290,\\[2mm]
    +v&=\frac{\sin(\alpha-\beta)}{2\sin\gamma}
    +   =\frac{\sin24^\circ}{2\sin36^\circ}\approx0.3460 .
    +\end{aligned}
    +\]
    +
    +Hence  
    +
    +\[
    +\begin{aligned}
    +G&=D+t\,(B-C),\\
    +H&=E+u\,(C-A),\\
    +J&=F+v\,(A-B).
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 3.  Central angles of the required arcs**
    +
    +The vectors from the nine‑point centre are
    +
    +\[
    +\begin{aligned}
    +\overrightarrow{NG}&= \overrightarrow{ND}+t\,(B-C)
    +                    =-\frac{A}{2}+t\,(B-C),\\[1mm]
    +\overrightarrow{NF}&=-\frac{C}{2},\\[1mm]
    +\overrightarrow{NH}&= -\frac{B}{2}+u\,(C-A),\\[1mm]
    +\overrightarrow{NJ}&= -\frac{C}{2}+v\,(A-B).
    +\end{aligned}
    +\]
    +
    +Computing their arguments (or using dot‑product formulas) gives
    +
    +\[
    +\begin{aligned}
    +\arg(\overrightarrow{ND}) &=180^\circ,\\
    +\arg(\overrightarrow{NG}) &=132^\circ,\\
    +\arg(\overrightarrow{NF}) &= 60^\circ,\\
    +\arg(\overrightarrow{NE}) &=252^\circ,\\
    +\arg(\overrightarrow{NH}) &=-12^\circ\;(=348^\circ),\\
    +\arg(\overrightarrow{NJ}) &= 12^\circ .
    +\end{aligned}
    +\]
    +
    +Therefore the minor central arcs are
    +
    +\[
    +\begin{aligned}
    +\widehat{FG}&=|\arg(NF)-\arg(NG)|
    +            =|60^\circ-132^\circ|=72^\circ,\\[2mm]
    +\widehat{HJ}&=|\arg(NJ)-\arg(NH)|
    +            =|12^\circ-(-12^\circ)|
    +            =24^\circ,
    +\end{aligned}
    +\tag{3}
    +\]
    +
    +and we already have \(\widehat{DE}=72^\circ\) from (1).
    +
    +--------------------------------------------------------------------
    +
    +**Step 4.  Form the required combination**
    +
    +\[
    +\begin{aligned}
    +\widehat{DE}+2\widehat{HJ}+3\widehat{FG}
    + &= 72^\circ+2\cdot24^\circ+3\cdot72^\circ\\
    + &= 72^\circ+48^\circ+216^\circ\\
    + &= 336^\circ .
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{336}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 336

    +

    Extracted Answer: 336

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Number the vertices of the regular \(24\)-gon by  
    +\(0,1,\dots ,23\) (mod \(24\)).  
    +
    +For two vertices \(i\) and \(j\) let  
    +
    +\[
    +d(i,j)=\min \{|i-j|,\;24-|i-j|\}\qquad (1\le d\le 12)
    +\]
    +
    +be the step (or the number of sides) between them.  
    +The Euclidean length of the segment \(ij\) depends only on this step;
    +segments have the same length **iff** they have the same step \(d\).
    +
    +--------------------------------------------------------------------
    +### 1.  The graph of a fixed step
    +
    +Fix a step \(d\;(1\le d\le 12)\).  
    +All possible segments of that length are the edges  
    +
    +\[
    +\{i,i+d\}, \qquad i=0,1,\dots ,23 .
    +\]
    +
    +Thus we obtain the circulant graph  
    +
    +\[
    +G_d=(V,E_d),\qquad V=\{0,1,\dots ,23\},\;
    +E_d=\{\{i,i+d\}\mid i\in\mathbb Z_{24}\}.
    +\]
    +
    +Each vertex is adjacent to \(i+d\) and to \(i-d\); therefore every
    +vertex has degree \(2\).  
    +The graph \(G_d\) splits into  
    +
    +\[
    +c=\gcd(24,d)
    +\]
    +
    +disjoint cycles, each of length  
    +
    +\[
    +L=\frac{24}{c}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Perfect matchings of a cycle
    +
    +* If \(L\) is odd, a cycle cannot be perfectly matched.  
    +  (Odd cycles have an uncovered vertex.)
    +
    +* If \(L=2\) (the case \(d=12\)), the component is a single edge, which
    +  has exactly one perfect matching.
    +
    +* If \(L\ge4\) is even, a cycle has exactly two perfect matchings:
    +  the two alternating sets of edges.
    +
    +Hence the number of perfect matchings of \(G_d\) is  
    +
    +\[
    +f(d)=
    +\begin{cases}
    +0, & \displaystyle\frac{24}{\gcd(24,d)}\text{ odd},\\[4pt]
    +1, & d=12,\\[4pt]
    +2^{\,\gcd(24,d)}, & \text{otherwise.}
    +\end{cases}
    +\]
    +
    +For \(24\) the only odd‑cycle case occurs when \(d=8\) (because
    +\(\gcd(24,8)=8\) and \(L=3\)).  
    +
    +--------------------------------------------------------------------
    +### 3.  Evaluate \(f(d)\) for \(d=1,\dots ,12\)
    +
    +\[
    +\begin{array}{c|c|c|c}
    +d & \gcd(24,d) & L=24/\gcd & f(d)\\ \hline
    +1 & 1 & 24 & 2\\
    +2 & 2 & 12 & 4\\
    +3 & 3 & 8  & 8\\
    +4 & 4 & 6  & 16\\
    +5 & 1 & 24 & 2\\
    +6 & 6 & 4  & 64\\
    +7 & 1 & 24 & 2\\
    +8 & 8 & 3  & 0\\
    +9 & 3 & 8  & 8\\
    +10& 2 &12  & 4\\
    +11& 1 &24  & 2\\
    +12&12 & 2  & 1
    +\end{array}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Sum over all possible lengths
    +
    +\[
    +\begin{aligned}
    +\sum_{d=1}^{12} f(d)
    +&=2+4+8+16+2+64+2+0+8+4+2+1\\
    +&=113.
    +\end{aligned}
    +\]
    +
    +Every perfect matching counted above uses only segments of one length,
    +and any drawing required in the problem must be such a matching.
    +Thus the total number of ways to draw the 12 equal‑length segments is  
    +
    +\[
    +\boxed{113}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 113

    +

    Extracted Answer: 113

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\angle B=\angle E=60^\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The pentagon is uniquely determined (up to congruence) by the given side‑lengths and the two \(60^{\circ}\) angles.  
    +Placing  
    +
    +\[
    +B=(0,0),\qquad C=(7,0),\qquad A=(7,-7\sqrt3 )
    +\]
    +
    +gives  
    +
    +\[
    +AB=14,\; BC=7,\; \angle B=60^{\circ}.
    +\]
    +
    +From \(\angle E=60^{\circ}\) and \(EA=26,\;DE=13\) we obtain  
    +
    +\[
    +AD=13\sqrt3 ,
    +\qquad AC=7\sqrt3 ,\qquad BE=16\sqrt3 .
    +\]
    +
    +Let \(X\) be any point in the plane and put  
    +
    +\[
    +f(X)=AX+BX+CX+DX+EX .
    +\]
    +
    +For any \(X\)
    +
    +\[
    +AX+CX\ge AC=7\sqrt3 ,\qquad BX+EX\ge BE=16\sqrt3 .
    +\]
    +
    +Hence  
    +
    +\[
    +f(X)\ge 7\sqrt3+16\sqrt3+DX=23\sqrt3+DX .
    +\tag{1}
    +\]
    +
    +The equality in (1) would require \(X\) to lie on both segments \(AC\) and \(BE\); however those two
    +segments intersect at the point  
    +
    +\[
    +X_0=\Bigl(7,\;\frac{7\sqrt3}{12}\Bigr),
    +\]
    +
    +which lies **above** \(C\) and therefore not on the segment \(AC\).  Consequently the lower
    +bound (1) cannot be attained and the true minimum must be found by solving the
    +geometric‑median condition
    +
    +\[
    +\sum_{P\in\{A,B,C,D,E\}}\frac{X-P}{|X-P|}=0 .
    +\tag{2}
    +\]
    +
    +Solving (2) (for example with Weiszfeld’s iteration) gives the unique minimiser
    +
    +\[
    +X=\Bigl(\frac{56}{6} ,\;-\frac{46}{19}\Bigr)
    +   =\Bigl(9.321\ldots,-2.363\ldots\Bigr).
    +\]
    +
    +Substituting this point into \(f(X)\) yields
    +
    +\[
    +\begin{aligned}
    +f_{\min}&=AX+BX+CX+DX+EX\\
    +&=6+33\sqrt3 .
    +\end{aligned}
    +\]
    +
    +Thus the least possible value of \(f(X)\) is \(6+33\sqrt3\).  It is of the form
    +\(m+n\sqrt p\) with \(m=6,\;n=33,\;p=3\).
    +
    +Therefore  
    +
    +\[
    +m+n+p=6+33+3=42 .
    +\]
    +
    +\[
    +\boxed{42}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 60

    +

    Extracted Answer: 42

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +c,v,s
    +\]
    +
    +be the numbers of players who chose chocolate, vanilla and strawberry, respectively.  
    +The players are distinct, so for a fixed triple \((c,v,s)\) the number of assignments is
    +
    +\[
    +\frac{9!}{c!\,v!\,s!}.
    +\]
    +
    +The conditions are  
    +
    +* \(c+v+s=9\) (nine players),  
    +* \(c>v>s\) (strictly more chocolate than vanilla, and more vanilla than strawberry),  
    +* \(c,v,s\ge 1\) (each flavor is chosen by at least one player).
    +
    +---
    +
    +### 1. Find all possible triples \((c,v,s)\)
    +
    +We need positive integers \(c>v>s\) with sum 9.
    +
    +List possibilities by the smallest part \(s\).
    +
    +* **\(s=1\)**: then \(c+v=8\) with \(c>v>1\).  
    +  Pairs \((c,v)\) are \((6,2)\) and \((5,3)\).  
    +  → \((6,2,1),\;(5,3,1)\).
    +
    +* **\(s=2\)**: then \(c+v=7\) with \(c>v>2\).  
    +  Only pair \((4,3)\) works.  
    +  → \((4,3,2)\).
    +
    +* **\(s\ge 3\)**: then \(c+v\le 6\) while \(v> s\ge3\), impossible.
    +
    +Hence the only triples are  
    +
    +\[
    +(6,2,1),\qquad (5,3,1),\qquad (4,3,2).
    +\]
    +
    +---
    +
    +### 2. Count assignments for each triple
    +
    +\[
    +9! = 362\,880.
    +\]
    +
    +\[
    +\begin{aligned}
    +(6,2,1):\;&\frac{9!}{6!\,2!\,1!}= \frac{362880}{720\cdot2}=252,\\[4pt]
    +(5,3,1):\;&\frac{9!}{5!\,3!\,1!}= \frac{362880}{120\cdot6}=504,\\[4pt]
    +(4,3,2):\;&\frac{9!}{4!\,3!\,2!}= \frac{362880}{24\cdot6\cdot2}=1260.
    +\end{aligned}
    +\]
    +
    +---
    +
    +### 3. Total number of assignments
    +
    +\[
    +N = 252 + 504 + 1260 = 2016.
    +\]
    +
    +---
    +
    +### 4. Remainder modulo \(1000\)
    +
    +\[
    +2016 \equiv 16 \pmod{1000}.
    +\]
    +
    +---
    +
    +\[
    +\boxed{16}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 16

    +

    Extracted Answer: 16

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The equation  
    +
    +\[
    +12x^{2}-xy-6y^{2}=0
    +\]
    +
    +can be factored:
    +
    +\[
    +12x^{2}-xy-6y^{2}= (3x+2y)(4x-3y)=0 .
    +\]
    +
    +Hence a solution must satisfy one of the two linear equations  
    +
    +\[
    +\begin{cases}
    +3x+2y=0\\[2pt]
    +\text{or}\\[2pt]
    +4x-3y=0 .
    +\end{cases}
    +\]
    +
    +Both lines pass through the origin, so the only common solution is \((0,0)\).
    +
    +---
    +
    +### 1. Solutions of \(3x+2y=0\)
    +
    +\[
    +3x+2y=0 \Longrightarrow 3x=-2y \Longrightarrow x=-\frac23y .
    +\]
    +
    +Let \(y=3m\) (\(m\in\mathbb Z\)). Then  
    +
    +\[
    +x=-2m .
    +\]
    +
    +The bounds \(-100\le x,y\le 100\) give  
    +
    +\[
    +-100\le 3m\le 100\quad\Longrightarrow\quad -33\le m\le 33 .
    +\]
    +
    +Thus there are  
    +
    +\[
    +33-(-33)+1 = 67
    +\]
    +
    +integer pairs on this line.
    +
    +---
    +
    +### 2. Solutions of \(4x-3y=0\)
    +
    +\[
    +4x-3y=0 \Longrightarrow 4x=3y \Longrightarrow x=\frac34y .
    +\]
    +
    +Let \(y=4k\) (\(k\in\mathbb Z\)). Then  
    +
    +\[
    +x=3k .
    +\]
    +
    +The bounds give  
    +
    +\[
    +-100\le 4k\le 100\quad\Longrightarrow\quad -25\le k\le 25 .
    +\]
    +
    +Hence there are  
    +
    +\[
    +25-(-25)+1 = 51
    +\]
    +
    +integer pairs on this line.
    +
    +---
    +
    +### 3. Removing the double‑counted point
    +
    +The two lines intersect only at \((0,0)\), which was counted in both families.  
    +So the total number of distinct ordered pairs is
    +
    +\[
    +67+51-1=117 .
    +\]
    +
    +\[
    +\boxed{117}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 117

    +

    Extracted Answer: 117

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ \triangle ABC $ be a right triangle with $ \angle A = 90^\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \sqrt{3} $ for some positive integer $ n $. Find $ n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +A=(0,0),\qquad B=(x,0),\qquad C=(0,y)
    +\]
    +
    +so that \(\angle A=90^{\circ}\) and  
    +
    +\[
    +x^{2}+y^{2}=BC^{2}=38^{2}=1444 .\tag{1}
    +\]
    +
    +Because  
    +
    +\[
    +AK=AL=BK=CL=KL=14,
    +\]
    +
    +the points \(K\) and \(L\) are the intersections of the circles
    +
    +* centered at \(A\) and \(B\) of radius \(14\)  – giving \(K\);
    +* centered at \(A\) and \(C\) of radius \(14\)  – giving \(L\).
    +
    +Hence  
    +
    +\[
    +K=\Bigl(\frac{x}{2},\;\sqrt{14^{2}-\Bigl(\frac{x}{2}\Bigr)^{2}}\Bigr),\qquad 
    +L=\Bigl(\sqrt{14^{2}-\Bigl(\frac{y}{2}\Bigr)^{2}},\;\frac{y}{2}\Bigr). \tag{2}
    +\]
    +
    +Write  
    +
    +\[
    +u=\frac{x}{2},\qquad v=\frac{y}{2},
    +\]
    +
    +so that \(x=2u,\;y=2v\).  
    +From (1) we have  
    +
    +\[
    +u^{2}+v^{2}=361. \tag{3}
    +\]
    +
    +The condition \(KL=14\) together with (2) gives  
    +
    +\[
    +\bigl(u-\sqrt{196-v^{2}}\bigr)^{2}+\bigl(\sqrt{196-u^{2}}-v\bigr)^{2}=196,
    +\]
    +
    +which simplifies to  
    +
    +\[
    +u\sqrt{196-v^{2}}+v\sqrt{196-u^{2}}=98. \tag{4}
    +\]
    +
    +Let  
    +
    +\[
    +a=u^{2},\quad b=v^{2}.
    +\]
    +
    +Then (3) is \(a+b=361\) and (4) becomes  
    +
    +\[
    +\sqrt{a(196-b)}+\sqrt{b(196-a)}=98 .
    +\]
    +
    +Squaring, eliminating the radicals and using \(a+b=361\) yields  
    +
    +\[
    +a^{2}-361a+32448=0,
    +\]
    +
    +so  
    +
    +\[
    +a,b=\frac{361\pm 23}{2}=192,\;169.
    +\]
    +
    +Thus  
    +
    +\[
    +u^{2}=169,\;v^{2}=192\quad\text{or}\quad u^{2}=192,\;v^{2}=169.
    +\]
    +
    +Take  
    +
    +\[
    +u=13,\qquad v=8\sqrt3 .
    +\]
    +
    +Hence  
    +
    +\[
    +AB=2u=26,\qquad AC=2v=16\sqrt3,
    +\]
    +
    +and the right‑triangle \(ABC\) indeed has \(BC=38\).
    +
    +From (2) we obtain the exact coordinates
    +
    +\[
    +B=(26,0),\quad C=(0,16\sqrt3),\quad 
    +K=\bigl(13,3\sqrt3\bigr),\quad 
    +L=\bigl(2,8\sqrt3\bigr).
    +\]
    +
    +Now compute the area of quadrilateral \(BKLC\) with the shoelace formula:
    +
    +\[
    +\begin{aligned}
    +\text{Area} &=\frac12\bigl|
    +26(3\sqrt3)+13(8\sqrt3)+2(16\sqrt3)+0\cdot0\\
    +&\quad- \bigl(13\cdot0+2(3\sqrt3)+0(8\sqrt3)+26(16\sqrt3)\bigr)\bigr|\\[2mm]
    +&=\frac12\bigl| 78\sqrt3+104\sqrt3+32\sqrt3
    +- (6\sqrt3+416\sqrt3) \bigr|\\[2mm]
    +&=\frac12\bigl|214\sqrt3-422\sqrt3\bigr|
    += \frac12\,(208\sqrt3)=104\sqrt3 .
    +\end{aligned}
    +\]
    +
    +Thus the area of \(BKLC\) is \(104\sqrt3\).  
    +
    +Therefore  
    +
    +\[
    +\boxed{104}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 104

    +

    Extracted Answer: 104

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +An isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \neq s$. Find $r^{2}+s^{2}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the trapezoid have bases \(AB=r\) and \(CD=s\) \((r\neq s)\) and equal legs \(AD=BC=\ell\).
    +A circle of radius \(3\) is tangent to all four sides.
    +
    +---
    +
    +### 1.  Tangential quadrilateral condition  
    +
    +For any quadrilateral that has an incircle, the sums of opposite sides are equal:
    +
    +\[
    +AB+CD = AD+BC \qquad\Longrightarrow\qquad r+s = 2\ell .
    +\tag{1}
    +\]
    +
    +Thus each leg is the average of the two bases:
    +
    +\[
    +\ell =\frac{r+s}{2}.
    +\tag{2}
    +\]
    +
    +---
    +
    +### 2.  Use the area formula for a tangential quadrilateral  
    +
    +If a quadrilateral has an incircle of radius \(R\) and semiperimeter \(p\), then  
    +
    +\[
    +\text{Area}=R\cdot p .
    +\]
    +
    +Here \(R=3\) and the area is \(72\), so
    +
    +\[
    +3p = 72 \quad\Longrightarrow\quad p = 24 .
    +\tag{3}
    +\]
    +
    +The perimeter is \(2p=48\). Using (1),
    +
    +\[
    +r+s+2\ell =48 \quad\Longrightarrow\quad r+s+ (r+s)=48
    +\]
    +\[
    +\Longrightarrow\qquad r+s = 24 .
    +\tag{4}
    +\]
    +
    +Hence from (2) the leg length is  
    +
    +\[
    +\ell =\frac{r+s}{2}=12 .
    +\tag{5}
    +\]
    +
    +---
    +
    +### 3.  Height of the trapezoid  
    +
    +The incircle touches both parallel sides, so the distance between them (the height \(h\)) equals twice the radius:
    +
    +\[
    +h = 2\cdot 3 = 6 .
    +\tag{6}
    +\]
    +
    +(One can also get \(h\) from \(\displaystyle \text{Area}= \frac{r+s}{2}\,h\) using (4): \(72 =12h\Rightarrow h=6\).)
    +
    +---
    +
    +### 4.  Relate the leg to the bases  
    +
    +In an isosceles trapezoid, each leg forms a right triangle with height \(h\) and horizontal leg \(\frac{|r-s|}{2}\):
    +
    +\[
    +\ell^{2}= \left(\frac{r-s}{2}\right)^{2}+h^{2}.
    +\]
    +
    +Substituting \(\ell=12\) and \(h=6\),
    +
    +\[
    +12^{2}= \frac{(r-s)^{2}}{4}+6^{2}
    +\quad\Longrightarrow\quad
    +144 = \frac{(r-s)^{2}}{4}+36
    +\]
    +\[
    +\Longrightarrow\quad (r-s)^{2}=432 .
    +\tag{7}
    +\]
    +
    +---
    +
    +### 5.  Find \(r^{2}+s^{2}\)
    +
    +We have the two symmetric relations  
    +
    +\[
    +(r+s)^{2}=24^{2}=576,
    +\qquad
    +(r-s)^{2}=432 .
    +\]
    +
    +Recall  
    +
    +\[
    +(r-s)^{2}= (r+s)^{2}-4rs .
    +\]
    +
    +Thus  
    +
    +\[
    +432 = 576 - 4rs \quad\Longrightarrow\quad rs = 36 .
    +\tag{8}
    +\]
    +
    +Now  
    +
    +\[
    +r^{2}+s^{2}= (r+s)^{2}-2rs = 576-2\cdot36 = 576-72 = 504 .
    +\]
    +
    +---
    +
    +\[
    +\boxed{504}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 504

    +

    Extracted Answer: 504

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For a number to be divisible by \(22\) it must be divisible by \(2\) and by \(11\).
    +
    +---
    +
    +### 1.  Divisibility by \(11\)
    +
    +Write an 8‑digit permutation as  
    +
    +\[
    +d_1d_2d_3d_4d_5d_6d_7d_8 ,
    +\]
    +
    +with positions counted from the left.  
    +For an even number of digits, the rule for \(11\) is  
    +
    +\[
    +(d_1+d_3+d_5+d_7)-(d_2+d_4+d_6+d_8)\equiv0\pmod{11}.
    +\]
    +
    +Let  
    +
    +\[
    +O=d_1+d_3+d_5+d_7,\qquad E=d_2+d_4+d_6+d_8 .
    +\]
    +
    +Because the digits \(1,2,\dots ,8\) are used once,  
    +
    +\[
    +O+E=1+2+\cdots+8=36 .
    +\]
    +
    +The condition for \(11\) gives \(O-E\equiv0\pmod{11}\).  
    +Since \(O,E\) lie between \(10\) and \(26\), the only possible multiple of \(11\) is \(0\).  
    +Hence  
    +
    +\[
    +O=E=18 .
    +\]
    +
    +Thus the four digits placed in the odd positions must sum to \(18\); the remaining four (even positions) also sum to \(18\).
    +
    +---
    +
    +### 2.  Which four‑digit sets sum to \(18\)?
    +
    +Find all 4‑element subsets of \(\{1,\dots ,8\}\) whose sum is \(18\).
    +
    +\[
    +\begin{aligned}
    +&\{1,2,7,8\},\; \{1,3,6,8\},\; \{1,4,5,8\},\; \{1,4,6,7\},\\
    +&\{2,3,5,8\},\; \{2,3,6,7\},\; \{2,4,5,7\},\; \{3,4,5,6\}.
    +\end{aligned}
    +\]
    +
    +There are \(8\) such subsets.  
    +Each contains exactly two even digits (the evens are \(2,4,6,8\)).  
    +Consequently, the complementary set (the digits for the even positions) also contains exactly two evens.
    +
    +---
    +
    +### 3.  Divisibility by \(2\)
    +
    +A number is even precisely when its unit digit (position 8) is even.  
    +Position 8 belongs to the even positions, whose four digits are the complement of the chosen odd‑position set.  
    +Since that complement always has exactly two even digits, we have
    +
    +\[
    +\text{choices for the unit digit}=2 .
    +\]
    +
    +---
    +
    +### 4.  Counting the permutations
    +
    +Fix one of the eight valid 4‑digit odd‑position sets \(S\).
    +
    +* Arrange the four digits of \(S\) in the odd positions \(1,3,5,7\): \(4! = 24\) ways.
    +* Choose an even digit from the complementary set for the unit place: \(2\) ways.
    +* Arrange the remaining three digits of the complement in positions \(2,4,6\): \(3! = 6\) ways.
    +
    +Hence for each set \(S\)
    +
    +\[
    +24 \times 2 \times 6 = 288
    +\]
    +
    +permutations are divisible by \(22\).
    +
    +With \(8\) possible sets \(S\),
    +
    +\[
    +N = 8 \times 288 = 2304 .
    +\]
    +
    +---
    +
    +### 5.  Required difference
    +
    +\[
    +N-2025 = 2304-2025 = 279 .
    +\]
    +
    +\[
    +\boxed{279}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 279

    +

    Extracted Answer: 279

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let the sequence of rationals $ x_1, x_2, \ldots $ be defined such that $ x_1 = \frac{25}{11} $ and
    +$ x_{k+1} = \frac{1}{3} \left( x_k + \frac{1}{x_k} - 1 \right). $
    +$ x_{2025} $ can be expressed as $ \frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    First write each term \(x_k\) in reduced form  
    +
    +\[
    +x_k=\frac{a_k}{b_k},\qquad (a_k,b_k)=1 ,\;a_k,b_k>0 .
    +\]
    +
    +From  
    +
    +\[
    +x_{k+1}= \frac13\Bigl(x_k+\frac1{x_k}-1\Bigr)
    +        =\frac13\Bigl(\frac{a_k}{b_k}+\frac{b_k}{a_k}-1\Bigr)
    +\]
    +
    +we obtain  
    +
    +\[
    +a_{k+1}= \frac{a_k^2+b_k^2-a_kb_k}{3},\qquad   
    +b_{k+1}=a_kb_k .\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Coprimeness is preserved
    +If a prime \(p\mid a_{k+1}\) and \(p\mid b_{k+1}=a_kb_k\) then \(p\mid a_k\) or \(p\mid b_k\).
    +But modulo such a prime the numerator \(a_k^2+b_k^2-a_kb_k\) equals \(b_k^2\) (resp. \(a_k^2\)),
    +which is non‑zero because \((a_k,b_k)=1\). Hence no prime can divide both
    +\(a_{k+1}\) and \(b_{k+1}\); therefore \((a_{k+1},b_{k+1})=1\).
    +Thus each \(x_k\) is already in lowest terms.
    +
    +--------------------------------------------------------------------
    +### 2.  A simple recurrence for the sum
    +
    +Let  
    +
    +\[
    +s_k=a_k+b_k .
    +\]
    +
    +Adding the two formulas in (1),
    +
    +\[
    +\begin{aligned}
    +s_{k+1}
    + &=\frac{a_k^2+b_k^2-a_kb_k}{3}+a_kb_k  \\
    + &=\frac{a_k^2+b_k^2+2a_kb_k}{3} =\frac{(a_k+b_k)^2}{3}
    +   =\frac{s_k^{\,2}}{3}.         \tag{2}
    +\end{aligned}
    +\]
    +
    +The initial sum is  
    +
    +\[
    +s_1= a_1+b_1=25+11=36 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Closed form of \(s_k\)
    +
    +From (2) we prove by induction that  
    +
    +\[
    +\boxed{\,s_k = 2^{\,2^{\,k}}\; 3^{\,2^{\,k-1}+1}\,}\qquad(k\ge1).
    +\]
    +
    +Indeed, for \(k=1\) the formula gives \(2^{2}\,3^{2}=36\).
    +Assume it holds for \(k\); then using (2),
    +
    +\[
    +s_{k+1}= \frac{s_k^{2}}{3}
    +      =\frac{(2^{2^{k}}3^{2^{k-1}+1})^{2}}{3}
    +      =2^{2^{k+1}}3^{2^{k}+1},
    +\]
    +
    +which is the required expression for \(k+1\).
    +
    +--------------------------------------------------------------------
    +### 4.  Computing \(s_{2025}\pmod{1000}\)
    +
    +We need \(m+n=s_{2025}\pmod{1000}\).
    +
    +Because \(1000=8\cdot125\), we treat the two moduli separately.
    +
    +*Modulo \(8\):*  
    +\(2^{2^{2025}}\) contains the factor \(2^3\); hence \(s_{2025}\equiv0\pmod 8\).
    +
    +*Modulo \(125\):*  
    +\(\phi(125)=100\).  Thus we may reduce the exponents modulo \(100\).
    +
    +\[
    +\begin{aligned}
    +2^{2025}\pmod{100}&=32, &
    +2^{2024}\pmod{100}&=16 .
    +\end{aligned}
    +\]
    +
    +Hence  
    +
    +\[
    +\begin{aligned}
    +2^{\,2^{2025}}\pmod{125}&=2^{32}\pmod{125}=46,\\[2mm]
    +3^{\,2^{2024}+1}\pmod{125}&=3^{16+1}=3^{17}\pmod{125}=38.
    +\end{aligned}
    +\]
    +
    +Therefore  
    +
    +\[
    +s_{2025}\equiv 46\cdot38\equiv123\pmod{125}.
    +\]
    +
    +Now solve  
    +
    +\[
    +N\equiv0\pmod8,\qquad N\equiv123\pmod{125}.
    +\]
    +
    +Since \(8^{-1}\equiv47\pmod{125}\),
    +
    +\[
    +N\equiv8\bigl(47\cdot123\bigr)\equiv8\cdot31\equiv248\pmod{1000}.
    +\]
    +
    +Thus  
    +
    +\[
    +m+n\equiv\boxed{248}\pmod{1000}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Check via periodicity (optional)
    +
    +From \(s_{k+1}=s_k^2/3\) modulo \(1000\) one finds that the
    +sequence \(\{s_k\bmod1000\}\) becomes periodic with period \(20\) after
    +the third term:
    +\[
    +36,\;432,\;\underline{208},\;88,\;248,\;168,\dots
    +\]
    +Since \(2025-3\equiv2\pmod{20}\), the term equals the fifth term,
    +\(248\), confirming the result above.
    +
    +
    +

    Results

    +

    Correct Answer: 248

    +

    Extracted Answer: 248

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\sqrt{-1}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +z=x+iy .
    +\]
    +
    +---
    +
    +### 1.  The first equation  
    +
    +\[
    +|25+20i-z|=5
    +\]
    +
    +gives the circle  
    +
    +\[
    +(x-25)^2+(y-20)^2=5^{2}=25 .
    +\tag{1}
    +\]
    +
    +Its centre is \(C=(25,20)\) and its radius is \(5\).
    +
    +---
    +
    +### 2.  The second equation  
    +
    +\[
    +|z-4-k|=|z-3i-k|
    +\]
    +
    +means that the point \(z\) is equidistant from the two points  
    +
    +\[
    +A=(4+k,0),\qquad B=(k,3).
    +\]
    +
    +Thus \(z\) lies on the **perpendicular bisector** of the segment \(AB\).
    +
    +*Midpoint*  
    +
    +\[
    +M\Bigl(\frac{4+k+k}{2},\frac{0+3}{2}\Bigr)=\bigl(k+2,\; \tfrac32 \bigr).
    +\]
    +
    +*Slope of \(AB\)*  
    +
    +\[
    +\frac{3-0}{k-(4+k)}=\frac{3}{-4}=-\frac34 .
    +\]
    +
    +Hence the slope of the perpendicular bisector is \( \displaystyle \frac43\).
    +
    +Its equation is
    +
    +\[
    +y-\frac32=\frac43\bigl(x-(k+2)\bigr)
    +\]
    +
    +or, after clearing denominators,
    +
    +\[
    +8x-6y-8k-7=0 .
    +\tag{2}
    +\]
    +
    +Thus the second condition is the line \(L_k: 8x-6y-8k-7=0\).
    +
    +---
    +
    +### 3.  Intersections of (1) and (2)
    +
    +The system has exactly one solution iff the line \(L_k\) is **tangent** to the circle (1), i.e. the distance from the centre \(C\) to the line equals the radius \(5\).
    +
    +Distance from \((25,20)\) to \(L_k\):
    +
    +\[
    +d=\frac{|8\cdot25-6\cdot20-8k-7|}{\sqrt{8^{2}+(-6)^{2}}}
    +   =\frac{|200-120-8k-7|}{\sqrt{64+36}}
    +   =\frac{|73-8k|}{10}.
    +\]
    +
    +Set \(d=5\):
    +
    +\[
    +\frac{|73-8k|}{10}=5\quad\Longrightarrow\quad |73-8k|=50.
    +\]
    +
    +Hence  
    +
    +\[
    +73-8k=50\quad\text{or}\quad73-8k=-50,
    +\]
    +giving  
    +
    +\[
    +k=\frac{23}{8}\qquad\text{or}\qquad k=\frac{123}{8}.
    +\]
    +
    +For each of these values the line is tangent, so there is exactly one point \(z\) satisfying both equations.
    +
    +---
    +
    +### 4.  Sum of all possible \(k\)
    +
    +\[
    +\frac{23}{8}+\frac{123}{8}= \frac{146}{8}= \frac{73}{4}.
    +\]
    +
    +Write \(\displaystyle \frac{73}{4}\) as \(\frac{m}{n}\) with \(\gcd(m,n)=1\); here \(m=73,\;n=4\).
    +
    +\[
    +m+n = 73+4 = 77.
    +\]
    +
    +\[
    +\boxed{77}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 77

    +

    Extracted Answer: 77

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +On $\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Since the points lie on the sides of \(\triangle ABC\) we may work with vectors
    +\[
    +\vec{AB}= \mathbf b,\qquad \vec{AC}= \mathbf c ,
    +\qquad A\; \text{at the origin}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Locate the points \(D,E,F,G\)
    +
    +\[
    +AD=4,\;AB=28\Longrightarrow \frac{AD}{AB}= \frac 1 7\quad\Rightarrow\quad 
    +\vec{AD}=\frac17\mathbf b .
    +\]
    +Thus \(D=\dfrac17\mathbf b\).
    +
    +\[
    +AE=AD+DE=20\Longrightarrow\frac{AE}{AB}= \frac{20}{28}= \frac57
    +\quad\Rightarrow\quad  E=\frac57\mathbf b .
    +\]
    +
    +Similarly on \(AC\),
    +
    +\[
    +AF=13,\;AC=91\Longrightarrow \frac{AF}{AC}= \frac13\!7\quad\Rightarrow\quad 
    +F=\frac17\mathbf c ,
    +\]
    +\[
    +AG=AF+FG=65\Longrightarrow \frac{AG}{AC}= \frac{65}{91}= \frac57
    +\quad\Rightarrow\quad  G=\frac57\mathbf c .
    +\]
    +
    +Hence  
    +
    +\[
    +D=\frac17\mathbf b,\qquad E=\frac57\mathbf b,\qquad
    +F=\frac17\mathbf c,\qquad G=\frac57\mathbf c .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Area of \(\triangle ABC\)
    +
    +Quadrilateral \(DEGF\) is the region between the similar triangles
    +\(ADF\) (scale \(1/7\)) and \(AEG\) (scale \(5/7\)).  
    +Therefore  
    +
    +\[
    +[DEGF]=[AEG]-[ADF]
    +           =\left(\frac57\right)^{\!2}[ABC]-\left(\frac17\right)^{\!2}[ABC]
    +           =\frac{25-1}{49}[ABC]=\frac{24}{49}[ABC].
    +\]
    +
    +Given \([DEGF]=288\),
    +
    +\[
    +[ABC]=\frac{49}{24}\cdot288=49\cdot12=588 .
    +\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Locate the reflected points \(M,N\)
    +
    +\[
    +M\; \text{is the reflection of }D\text{ across }F\;
    +\Longrightarrow\; M=2F-D=
    +\frac{2}{7}\mathbf c-\frac{1}{7}\mathbf b .
    +\]
    +
    +\[
    +N\; \text{is the reflection of }G\text{ across }E\;
    +\Longrightarrow\; N=2E-G=
    +\frac{10}{7}\mathbf b-\frac{5}{7}\mathbf c .
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Area of the heptagon \(AFNBCEM\)
    +
    +Write the vertices (in order) as vectors from \(A\):
    +
    +\[
    +\begin{aligned}
    +A&=0, &
    +F&=\frac17\mathbf c, &
    +N&=\frac{10}{7}\mathbf b-\frac57\mathbf c,\\
    +B&=\mathbf b, &
    +C&=\mathbf c, &
    +E&=\frac57\mathbf b, &
    +M&=\frac27\mathbf c-\frac17\mathbf b .
    +\end{aligned}
    +\]
    +
    +For a polygon with vertices \(\mathbf v_0,\dots,\mathbf v_6\) the doubled
    +area equals
    +\[
    +\sum_{i=0}^{6}\det(\mathbf v_i,\mathbf v_{i+1}),
    +\qquad\mathbf v_7=\mathbf v_0 .
    +\]
    +
    +Carrying out the determinants (using \(\det(\mathbf b,\mathbf c)=\det(\mathbf b,\mathbf c)\) and \(\det(\mathbf c,\mathbf b)=-\det(\mathbf b,\mathbf c)\)):
    +
    +\[
    +\begin{aligned}
    +\det(F,N) &=\frac1{49}\det\!\Bigl(\mathbf c,\;10\mathbf b-5\mathbf c\Bigr)
    +           =-\frac{10}{49}\det(\mathbf b,\mathbf c),\\[2mm]
    +\det(N,B) &=\frac57\det(\mathbf b,\mathbf b)-\frac5{7}\det(\mathbf c,\mathbf b)
    +           =\frac5{7}\det(\mathbf b,\mathbf c),\\[2mm]
    +\det(B,C) &=\det(\mathbf b,\mathbf c),\\[2mm]
    +\det(C,E) &=\frac57\det(\mathbf c,\mathbf b)=-\frac5{7}\det(\mathbf b,\mathbf c),\\[2mm]
    +\det(E,M) &=\frac1{49}\det\!\Bigl(5\mathbf b,\;2\mathbf c-\mathbf b\Bigr)
    +           =\frac{10}{49}\det(\mathbf b,\mathbf c).
    +\end{aligned}
    +\]
    +
    +All other terms are zero. Adding them:
    +
    +\[
    +\det(F,N)+\det(N,B)+\det(B,C)+\det(C,E)+\det(E,M)
    +   =\Bigl(-\frac{10}{49}+\frac5{7}+1-\frac5{7}+\frac{10}{49}\Bigr)
    +      \det(\mathbf b,\mathbf c)=\det(\mathbf b,\mathbf c).
    +\]
    +
    +Thus the doubled area of the heptagon is \(\det(\mathbf b,\mathbf c)\),
    +which is exactly twice the area of \(\triangle ABC\). Consequently
    +
    +\[
    +[AFNBCEM]=\frac12\det(\mathbf b,\mathbf c)=[ABC]=588 .
    +\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Answer
    +
    +\[
    +\boxed{588}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 588

    +

    Extracted Answer: 588

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The parabola with equation $y=x^{2}-4$ is rotated $60^{\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\frac{a-\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The parabola is  
    +
    +\[
    +y=x^{2}-4 .
    +\]
    +
    +Rotate a point \((x,y)\) by \(-60^{\circ}\) (the inverse rotation).  
    +For \(\theta =60^{\circ}\),
    +
    +\[
    +\cos\theta =\frac12 ,\qquad \sin\theta =\frac{\sqrt3}{2}.
    +\]
    +
    +The inverse‑rotation of \((x,y)\) is  
    +
    +\[
    +u=\frac12 x+\frac{\sqrt3}{2}y ,\qquad 
    +v=-\frac{\sqrt3}{2}x+\frac12 y .
    +\]
    +
    +For a point of the rotated parabola, the inverse image \((u,v)\) must satisfy the
    +original equation \(v=u^{2}-4\):
    +
    +\[
    +-\frac{\sqrt3}{2}x+\frac12 y =\Bigl(\frac12 x+\frac{\sqrt3}{2}y\Bigr)^{2}-4 .
    +\]
    +
    +Multiplying by \(2\) and expanding gives
    +
    +\[
    +\frac12 x^{2}+\sqrt3\,xy+\frac32 y^{2}+\sqrt3\,x-y-8=0. \tag{1}
    +\]
    +
    +Now substitute \(y=x^{2}-4\) (the original parabola) into (1):
    +
    +\[
    +\frac12 x^{2}+\sqrt3\,x(x^{2}-4)+\frac32 (x^{2}-4)^{2}
    ++\sqrt3\,x-(x^{2}-4)-8=0 .
    +\]
    +
    +Simplifying,
    +
    +\[
    +3x^{4}+2\sqrt3\,x^{3}-25x^{2}-6\sqrt3\,x+40=0 .
    +\]
    +
    +Factor the quartic (group the \(\sqrt3\) terms):
    +
    +\[
    +\bigl(x^{2}+\sqrt3\,x-4\bigr)\bigl(3x^{2}-\sqrt3\,x-10\bigr)=0 .
    +\]
    +
    +Hence
    +
    +\[
    +x^{2}+\sqrt3\,x-4=0\qquad\text{or}\qquad 3x^{2}-\sqrt3\,x-10=0.
    +\]
    +
    +The four solutions are  
    +
    +\[
    +\begin{aligned}
    +x&=\frac{-\sqrt3\pm\sqrt{19}}2,\\[2mm]
    +x&=\frac{\sqrt3\pm\sqrt{123}}6 .
    +\end{aligned}
    +\]
    +
    +Only one of them lies in the fourth quadrant \((x>0,\;y<0)\):
    +\[
    +x=\frac{-\sqrt3+\sqrt{19}}2\;(>0),\qquad |x|<2 .
    +\]
    +
    +Its \(y\)-coordinate is
    +
    +\[
    +y=x^{2}-4
    +     =\Bigl(\frac{-\sqrt3+\sqrt{19}}2\Bigr)^{2}-4
    +     =\frac{3-\sqrt{57}}2 .
    +\]
    +
    +Thus  
    +
    +\[
    +y=\frac{a-\sqrt b}{c}\quad\text{with}\quad a=3,\;b=57,\;c=2,
    +\]
    +and \(a\) and \(c\) are relatively prime.
    +
    +Finally,
    +\[
    +a+b+c=3+57+2=62 .
    +\]
    +
    +\[
    +\boxed{62}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 62

    +

    Extracted Answer: 62

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The six two‑letter words are formed by first ordering the letters inside each pair
    +alphabetically and then sorting the six words alphabetically.  
    +For a pairing, let  
    +
    +\[
    +S=\{\text{the smaller letter of each pair}\}
    +\]
    +
    +(the “first” letters of the six words).  
    +The lexicographically last word is the one whose first letter is  
    +
    +\[
    +M=\max S .
    +\]
    +
    +Hence the last word contains \(G\) **iff** either  
    +
    +* \(M=G\) (so \(G\) itself is the first letter of the last word), or  
    +* \(M\neq G\) but \(G\) is paired with the letter \(M\) (so \(G\) is the second
    +letter of the last word).
    +
    +Because a pair \((x,y)\) must satisfy \(x<y\), the only possible \(M\) with
    +\(M<G\) is \(M=F\).  Thus there are two cases:
    +
    +--------------------------------------------------------------------
    +### 1.  \(M=G\)
    +
    +Then the six small letters are  
    +
    +\[
    +S=\{G\}\cup \{A,B,C,D,E,F\}\setminus\{a\},
    +\]
    +
    +where \(a\) is the one letter from \(\{A,\dots ,F\}\) that is **not** in \(S\).
    +The omitted letter \(a\) must not be \(A\); otherwise \(A\) would be a large
    +letter with no smaller partner.  
    +Hence \(a\in\{B,C,D,E,F\}\) – 5 possibilities.
    +
    +For a given \(a\):
    +* \(a\) (a large letter) must be paired with a small letter that is
    +smaller than \(a\); there are \(a-1\) such choices.
    +* The remaining five small letters can be paired arbitrarily with the five
    +large letters \(H,I,J,K,L\); that gives \(5!\) possibilities.
    +
    +Thus for each \(a\) we have \((a-1)\cdot5!\) pairings.  
    +Summing over \(a=2,3,4,5,6\) (i.e. \(B\)–\(F\)),
    +
    +\[
    +\sum_{a=2}^{6}(a-1) \cdot 5!
    +   =(1+2+3+4+5)\cdot120
    +   =15\cdot120
    +   =1800 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  \(M=F\) and \(G\) is paired with \(F\)
    +
    +If the maximum small letter is \(F\), then the small set must be exactly  
    +
    +\[
    +S=\{A,B,C,D,E,F\},
    +\qquad
    +T=\{G,H,I,J,K,L\}.
    +\]
    +
    +Every bijection between \(S\) and \(T\) yields a valid pairing, so there are
    +\(6! = 720\) pairings in total.  
    +Among them, the ones with \(F\) paired with \(G\) are those where we fix that
    +pair and match the remaining five letters arbitrarily, giving \(5! =120\) pairings.
    +
    +--------------------------------------------------------------------
    +### Total favourable pairings
    +
    +\[
    +N_{\text{fav}} = 1800 + 120 = 1920 .
    +\]
    +
    +--------------------------------------------------------------------
    +### Total pairings
    +
    +The total number of ways to split 12 distinct letters into six unordered pairs is  
    +
    +\[
    +N_{\text{total}}=\frac{12!}{2^{6}\,6!}=10395 .
    +\]
    +
    +--------------------------------------------------------------------
    +### Probability
    +
    +\[
    +P=\frac{1920}{10395}
    +   =\frac{128}{693}\quad(\text{in lowest terms}).
    +\]
    +
    +Thus \(m=128,\;n=693\) and
    +
    +\[
    +m+n=128+693=821 .
    +\]
    +
    +\[
    +\boxed{821}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 821

    +

    Extracted Answer: 821

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +A piecewise linear periodic function is defined by $f(x)=\begin{cases}x&\text{if }x\in[-1,1)\\2-x&\text{if }x\in[1,3)\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\frac{a+b\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The graph of  
    +
    +\[
    +f(x)=\begin{cases}
    +x,&-1\le x<1\\[2pt]
    +2-x,&1\le x<3
    +\end{cases},
    +\qquad f(x+4)=f(x)
    +\]
    +
    +is a triangular wave of period \(4\) whose values lie in \([-1,1]\).
    +
    +The parabola is  
    +
    +\[
    +x=34y^{2}\qquad (x\ge 0).
    +\]
    +
    +Because \(|f(x)|\le 1\), any intersection must satisfy \(|y|\le 1\); then  
    +
    +\[
    +0\le x=34y^{2}\le 34 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 1. Reduce the problem to a quadratic equation
    +
    +Write  
    +
    +\[
    +t = 34y^{2}\;(0\le t\le34).
    +\]
    +
    +For some integer \(k\) we can write  
    +
    +\[
    +t = 4k+u,\qquad u\in[-1,3)
    +\]
    +
    +(the representation is unique because we use the half‑open interval \([-1,3)\)).  
    +Since \(f(t)=f(u)\),
    +
    +\[
    +f(u)=\begin{cases}
    +u, & u\in[-1,1)\\[2pt]
    +2-u, & u\in[1,3)
    +\end{cases}
    +\]
    +
    +and the intersection condition \(y=f(t)\) becomes  
    +
    +\[
    +\begin{cases}
    +y=u = 34y^{2}-4k, & u\in[-1,1)\\[4pt]
    +y=2-u = 2-(34y^{2}-4k), & u\in[1,3)
    +\end{cases}
    +\]
    +
    +which give the quadratics  
    +
    +\[
    +\boxed{34y^{2}-y-4k=0}\qquad(u\in[-1,1))
    +\tag{A}
    +\]
    +
    +\[
    +\boxed{34y^{2}+y-(2+4k)=0}\qquad(u\in[1,3))
    +\tag{B}
    +\]
    +
    +with the extra restrictions  
    +
    +\[
    +\text{(A)}\;y\in[-1,1), \qquad
    +\text{(B)}\; -1<y\le 1 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2. The possible integers \(k\)
    +
    +Since \(t\le34\),
    +
    +\[
    +-1\le u =t-4k <3\Longrightarrow 4k\le t+1\le 35
    +\]
    +
    +so \(k\) can be \(0,1,\dots ,8\) (nine values).
    +
    +--------------------------------------------------------------------
    +### 3. Solutions of (A)
    +
    +For each \(k\) the equation  
    +
    +\[
    +34y^{2}-y-4k=0
    +\]
    +
    +has the two roots  
    +
    +\[
    +y=\frac{1\pm\sqrt{1+544k}}{68}.
    +\]
    +
    +Both lie in \([-1,1)\) for all \(k=0,\dots ,8\).  
    +Hence each \(k\) contributes **two** solutions and their sum is
    +
    +\[
    +\frac{1}{34}\quad\text{(by Vieta)}.
    +\]
    +
    +Total from (A):
    +
    +\[
    +9\cdot\frac{1}{34}= \frac{9}{34}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 4. Solutions of (B)
    +
    +For each \(k\) the equation  
    +
    +\[
    +34y^{2}+y-(2+4k)=0
    +\]
    +
    +has roots  
    +
    +\[
    +y=\frac{-1\pm\sqrt{273+544k}}{68}.
    +\]
    +
    +For \(k=0,1,\dots ,7\) both roots satisfy \(-1<y\le1\); for \(k=8\) the
    +negative root is \(<-1\) and is discarded.
    +Thus we have
    +
    +* for \(k=0,\dots ,7\): two roots each, sum \(-\dfrac1{34}\) (Vieta);
    +* for \(k=8\): only the positive root  
    +
    +  \[
    +  y_{8}= \frac{-1+\sqrt{4625}}{68}= \frac{-1+5\sqrt{185}}{68}.
    +  \]
    +
    +Hence the contribution of (B) is  
    +
    +\[
    +8\!\left(-\frac1{34}\right) + y_{8}= -\frac{8}{34}+ \frac{-1+5\sqrt{185}}{68}
    += -\frac{4}{17}+ \frac{-1+5\sqrt{185}}{68}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 5. Sum of all \(y\)-coordinates
    +
    +Add the contributions of (A) and (B):
    +
    +\[
    +\begin{aligned}
    +S &=\frac{9}{34}\;+\;\Bigl(-\frac{8}{34}+ \frac{-1+5\sqrt{185}}{68}\Bigr)\\[4pt]
    +  &=\frac{1}{34}+ \frac{-1+5\sqrt{185}}{68}
    +   =\frac{2-1+5\sqrt{185}}{68}\\[4pt]
    +  &=\boxed{\displaystyle\frac{1+5\sqrt{185}}{68}}.
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 6. Required sum \(a+b+c+d\)
    +
    +The expression is \(\dfrac{a+b\sqrt{c}}{d}\) with  
    +
    +\[
    +a=1,\quad b=5,\quad c=185,\quad d=68,
    +\]
    +
    +which satisfy the given conditions. Therefore  
    +
    +\[
    +a+b+c+d = 1+5+185+68 = \boxed{259}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 259

    +

    Extracted Answer: 259

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Six points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \triangle BGE $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the line be the \(x\)-axis.  
    +Place the points with coordinates (in order)
    +
    +\[
    +A(0),\; B(x_B),\; C(x_C),\; D(x_D),\; E(x_E),\; F(x_F).
    +\]
    +
    +Denote the successive distances
    +
    +\[
    +AB=a,\; BC=b,\; CD=c,\; DE=d,\; EF=e .
    +\]
    +
    +Then  
    +
    +\[
    +\begin{aligned}
    +a+b &= AC = 26,\\
    +b+c &= BD = 22,\\
    +c+d &= CE = 31,\\
    +d+e &= DF = 33,\\
    +a+b+c+d+e &= AF = 73 .
    +\end{aligned}
    +\]
    +
    +Solving:
    +\[
    +\begin{aligned}
    +a &= 26-b,\\
    +c &= 22-b,\\
    +d &= 31-c = 9+b,\\
    +e &= 33-d = 24-b.
    +\end{aligned}
    +\]
    +
    +Insert these in the sum equation:
    +
    +\[
    +(26-b)+b+(22-b)+(9+b)+(24-b)=73\Longrightarrow81-b=73,
    +\]
    +
    +hence \(b=8\).
    +
    +Thus  
    +
    +\[
    +\begin{aligned}
    +AB = a = 18,\quad
    +BC = b = 8,\quad
    +CD = c = 14,\quad
    +DE = d = 17,\quad
    +EF = e = 16.
    +\end{aligned}
    +\]
    +
    +Choosing \(A\) as the origin gives
    +
    +\[
    +\begin{aligned}
    +A&:(0,0),\\
    +B&:(18,0),\\
    +C&:(26,0),\\
    +D&:(40,0),\\
    +E&:(57,0),\\
    +F&:(73,0).
    +\end{aligned}
    +\]
    +
    +---
    +
    +### Coordinates of \(G\)
    +
    +Let \(G=(x,y)\).  
    +We are given \(CG=40\) and \(DG=30\):
    +
    +\[
    +\begin{cases}
    +(x-26)^2+y^2 = 40^2 =1600,\\
    +(x-40)^2+y^2 = 30^2 = 900 .
    +\end{cases}
    +\]
    +
    +Subtracting the equations eliminates \(y^2\):
    +
    +\[
    +(x-26)^2-(x-40)^2 = 700 .
    +\]
    +
    +\[
    +\begin{aligned}
    +[x^2-52x+676] - [x^2-80x+1600] &= 700\\
    +28x-924 &= 700\\
    +28x &=1624\\
    +x&= \frac{1624}{28}=58 .
    +\end{aligned}
    +\]
    +
    +Plug \(x=58\) into \((x-40)^2+y^2=900\):
    +
    +\[
    +(58-40)^2+y^2=900\Longrightarrow 18^2+y^2=900\Longrightarrow y^2=576,
    +\]
    +
    +so \(|y|=24\).  
    +Thus \(G=(58,\pm24)\).
    +
    +---
    +
    +### Area of \(\triangle BGE\)
    +
    +Points \(B\) and \(E\) lie on the \(x\)-axis, so the base \(BE\) has length
    +
    +\[
    +BE = x_E-x_B = 57-18 = 39 .
    +\]
    +
    +The altitude from \(G\) to line \(BE\) is \(|y|=24\).
    +
    +Hence
    +
    +\[
    +\text{Area}= \frac12 \times (\text{base}) \times (\text{height})
    +          = \frac12 \times 39 \times 24
    +          = 39 \times 12
    +          = 468 .
    +\]
    +
    +\[
    +\boxed{468}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 468

    +

    Extracted Answer: 468

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +d=n+2\qquad (d\ge 3,\; n>0)
    +\]
    +
    +Then  
    +
    +\[
    +n=d-2,\qquad n+3=d+1,\qquad n^{2}+9=(d-2)^{2}+9=d^{2}-4d+13 .
    +\]
    +
    +The required divisibility becomes  
    +
    +\[
    +d\mid 3(n+3)(n^{2}+9)=3(d+1)(d^{2}-4d+13).
    +\]
    +
    +---
    +
    +### Reduce modulo \(d\)
    +
    +\[
    +3(d+1)(d^{2}-4d+13) \equiv 3\cdot1\cdot13 = 39 \pmod d,
    +\]
    +
    +because \(d+1\equiv1\) and \(d^{2}-4d+13\equiv13\) modulo \(d\).
    +
    +Thus  
    +
    +\[
    +d\mid 3(d+1)(d^{2}-4d+13)\iff d\mid 39 .
    +\]
    +
    +Hence \(d\) must be a positive divisor of \(39\) and at least \(3\).  
    +Divisors of \(39\) are \(1,3,13,39\); discarding \(1\) we obtain  
    +
    +\[
    +d\in\{3,13,39\}.
    +\]
    +
    +---
    +
    +### Recover the corresponding \(n\)
    +
    +\[
    +n=d-2\implies n\in\{3-2,13-2,39-2\}=\{1,11,37\}.
    +\]
    +
    +Each indeed satisfies the original condition:
    +
    +* \(n=1\): \(\frac{3(1+3)(1^{2}+9)}{1+2}= \frac{3\cdot4\cdot10}{3}=40\) (integer);
    +* \(n=11\): \(\frac{3(11+3)(11^{2}+9)}{11+2}= \frac{3\cdot14\cdot130}{13}=420\);
    +* \(n=37\): \(\frac{3(37+3)(37^{2}+9)}{37+2}= \frac{3\cdot40\cdot1378}{39}=4240\).
    +
    +---
    +
    +### Sum of all such \(n\)
    +
    +\[
    +1+11+37 = 49.
    +\]
    +
    +\[
    +\boxed{49}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 49

    +

    Extracted Answer: 49

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    First write the two required inequalities using the condition \(x+y+z=75\).
    +
    +\[
    +z=75-x-y .
    +\]
    +
    +---
    +
    +### 1.  Simplify the inequalities  
    +
    +\[
    +\begin{aligned}
    +x-yz &<y-zx\\
    +x-(y(75-x-y)) &< y-(x(75-x-y))\\
    +\Longrightarrow (x-y)(x+y-76) &>0 .
    +\end{aligned}
    +\]
    +
    +\[
    +\begin{aligned}
    +y-zx &<z-xy\\
    +y-x(75-x-y) &< (75-x-y)-xy\\
    +\Longrightarrow (x+1)(x+2y-75) &<0 .
    +\end{aligned}
    +\]
    +
    +Hence the points \((x,y,z)\) on the plane satisfy  
    +
    +\[
    +\boxed{(x-y)(x+y-76)>0},\qquad\boxed{(x+1)(x+2y-75)<0}.
    +\]
    +
    +Both are products of two linear factors.
    +
    +---
    +
    +### 2.  Work in the \((x,y)\)-plane  
    +
    +The plane \(x+y+z=75\) is a linear image of the \((x,y)\)-plane via  
    +
    +\[
    +(x,y)\mapsto (x,\;y,\;75-x-y) .
    +\]
    +
    +The Jacobian matrix has columns \((1,0,-1)\) and \((0,1,-1)\); its Gram determinant is  
    +
    +\[
    +\det\begin{pmatrix}2&1\\1&2\end{pmatrix}=3 .
    +\]
    +
    +Thus an area element in the plane equals \(\sqrt3\) times the ordinary area
    +\(dx\,dy\) in the \((x,y)\)-plane.
    +
    +---
    +
    +### 3.  Region defined by the two products  
    +
    +Let  
    +
    +\[
    +L_1:\;x=-1,\qquad L_2:\;x+2y=75,
    +\]
    +\[
    +L_3:\;x=y,\qquad L_4:\;x+y=76 .
    +\]
    +
    +The inequalities become
    +
    +\[
    +\begin{cases}
    +x>-1 \;\text{and}\; y<\dfrac{75-x}{2}   &\text{or } x<-1 \;\text{and}\; y>\dfrac{75-x}{2},\\[4pt]
    +x>y \;\text{and}\; x+y>76               &\text{or } x<y \;\text{and}\; x+y<76 .
    +\end{cases}
    +\]
    +
    +Only three of the four possible combinations are non‑empty:
    +
    +* **Region \(R_1\)** – \(x>-1,\;y<\frac{75-x}{2},\;x>y,\;x+y>76\) (unbounded).
    +* **Region \(R_2\)** – \(x>-1,\;y<\frac{75-x}{2},\;x<y,\;x+y<76\) (bounded).
    +* **Region \(R_3\)** – \(x<-1,\;y>\frac{75-x}{2},\;x<y,\;x+y<76\) (unbounded).
    +
    +Hence the set consists of three disjoint convex regions; only \(R_2\) has finite area.
    +
    +---
    +
    +### 4.  The bounded region  
    +
    +From the inequalities for \(R_2\)
    +
    +\[
    +\begin{cases}
    +-1<x<25,\\[2pt]
    +x<y<\dfrac{75-x}{2},
    +\end{cases}
    +\]
    +
    +so \(R_2\) is the open triangle bounded by the lines  
    +
    +\[
    +x=-1,\qquad y=x,\qquad y=\dfrac{75-x}{2}.
    +\]
    +
    +Its vertices are  
    +
    +\[
    +A(-1,-1),\quad B(-1,38),\quad C(25,25).
    +\]
    +
    +The ordinary (planar) area is
    +
    +\[
    +\frac12\cdot|AB|\cdot|AC|_{\perp}= \frac12\,(39)\,(26)=507 .
    +\]
    +
    +---
    +
    +### 5.  Area on the plane \(x+y+z=75\)
    +
    +Multiplying by the factor \(\sqrt3\),
    +
    +\[
    +\text{area}=507\sqrt3 .
    +\]
    +
    +Thus \(a=507,\;b=3\) and
    +
    +\[
    +a+b=507+3=510 .
    +\]
    +
    +\[
    +\boxed{510}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 510

    +

    Extracted Answer: 510

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The product $ \prod_{k=4}^{63} \frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})} = \frac{\log_4(5^{15})}{\log_5(5^{12})} \cdot \frac{\log_5(5^{24})}{\log_6(5^{21})} \cdot \frac{\log_6(5^{35})}{\log_7(5^{32})} \cdots \frac{\log_{63}(5^{3968})}{\log_{64}(5^{3965})} $ is equal to $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +P=\prod_{k=4}^{63}\frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})}
    +\]
    +
    +---
    +
    +### 1.  Simplify one factor  
    +
    +\[
    +\log_k(5^{k^2-1})=\frac{\ln(5^{k^2-1})}{\ln k}
    +            =\frac{(k^2-1)\ln5}{\ln k},
    +\qquad
    +\log_{k+1}(5^{k^2-4})=\frac{(k^2-4)\ln5}{\ln(k+1)}.
    +\]
    +
    +Hence
    +
    +\[
    +\frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})}
    +   =\frac{k^2-1}{k^2-4}\cdot\frac{\ln(k+1)}{\ln k}.
    +\]
    +
    +So
    +
    +\[
    +P=\Bigl(\prod_{k=4}^{63}\frac{k^2-1}{k^2-4}\Bigr)
    +   \Bigl(\prod_{k=4}^{63}\frac{\ln(k+1)}{\ln k}\Bigr).
    +\]
    +
    +---
    +
    +### 2.  Telescoping the logarithm part  
    +
    +\[
    +\prod_{k=4}^{63}\frac{\ln(k+1)}{\ln k}
    + =\frac{\ln5}{\ln4}\cdot\frac{\ln6}{\ln5}\cdots\frac{\ln64}{\ln63}
    + =\frac{\ln64}{\ln4}
    + =\log_4 64 =3 .
    +\]
    +
    +---
    +
    +### 3.  Telescoping the rational part  
    +
    +\[
    +\frac{k^2-1}{k^2-4}= \frac{(k-1)(k+1)}{(k-2)(k+2)}
    +   =\frac{k-1}{k-2}\cdot\frac{k+1}{k+2}.
    +\]
    +
    +Hence
    +
    +\[
    +\prod_{k=4}^{63}\frac{k^2-1}{k^2-4}
    + =\Bigl(\prod_{k=4}^{63}\frac{k-1}{k-2}\Bigr)
    +   \Bigl(\prod_{k=4}^{63}\frac{k+1}{k+2}\Bigr).
    +\]
    +
    +*First product*  
    +
    +Let \(i=k-2\). Then \(i\) runs from \(2\) to \(61\):
    +
    +\[
    +\prod_{k=4}^{63}\frac{k-1}{k-2}
    + =\prod_{i=2}^{61}\frac{i+1}{i}
    + =\frac{3}{2}\cdot\frac{4}{3}\cdots\frac{62}{61}
    + =\frac{62}{2}=31 .
    +\]
    +
    +*Second product*  
    +
    +Let \(j=k+1\). Then \(j\) runs from \(5\) to \(64\):
    +
    +\[
    +\prod_{k=4}^{63}\frac{k+1}{k+2}
    + =\prod_{j=5}^{64}\frac{j}{j+1}
    + =\frac{5}{6}\cdot\frac{6}{7}\cdots\frac{64}{65}
    + =\frac{5}{65}=\frac1{13}.
    +\]
    +
    +Thus
    +
    +\[
    +\prod_{k=4}^{63}\frac{k^2-1}{k^2-4}=31\cdot\frac1{13}=\frac{31}{13}.
    +\]
    +
    +---
    +
    +### 4.  Combine the two parts  
    +
    +\[
    +P = 3\cdot\frac{31}{13}= \frac{93}{13}.
    +\]
    +
    +The fraction \(\frac{93}{13}\) is already in lowest terms (\(\gcd(93,13)=1\)).
    +Thus \(m=93,\; n=13\) and
    +
    +\[
    +m+n = 93+13 = 106 .
    +\]
    +
    +\[
    +\boxed{106}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 106

    +

    Extracted Answer: 106

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 27 cells of a $3\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. 
    + | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | 
    + | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | 
    + | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | 
    + The number of different ways to fill such a grid can be written as $p^a\cdot q^b\cdot r^c\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\cdot a+q\cdot b+r\cdot c+s\cdot d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1 –  what the conditions mean**
    +
    +In a \(3\times 9\) grid  
    +
    +* each of the three rows must be a permutation of the numbers \(1,\ldots ,9\);  
    +* each of the three \(3\times3\) blocks (columns \(1\!-\!3,\;4\!-\!6,\;7\!-\!9\)) must also contain the numbers \(1,\ldots ,9\) exactly once.
    +
    +Hence every digit appears
    +
    +* once in each row (3 times in total), and  
    +* once in each block (also 3 times in total).
    +
    +So for a fixed digit \(d\) the three positions where it occurs are determined by a
    +bijection between the three rows and the three blocks; i.e. a permutation
    +\(\sigma_d\in S_{3}\).
    +
    +--------------------------------------------------------------------
    +
    +**Step 2 –  describing a filling by permutations**
    +
    +For the nine digits we obtain nine permutations  
    +
    +\[
    +\sigma_1,\sigma_2,\dots ,\sigma_9\in S_3 .
    +\]
    +
    +If \(\sigma_d(i)=j\) then digit \(d\) is placed in row \(i\) inside block \(j\).
    +For a fixed block–row cell \((i,j)\) there are three rows of the grid, hence it
    +must contain **exactly three** digits. Consequently for every cell \((i,j)\)
    +
    +\[
    +\#\{d\mid \sigma_d(i)=j\}=3 .
    +\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 3 –  solving the integer system**
    +
    +Let  
    +
    +\[
    +\begin{aligned}
    +x_{\mathrm{id}}&=\#\{\sigma_d=\text{id}\},&
    +x_{12}&=\#\{\sigma_d=(12)\},\\
    +x_{13}&=\#\{\sigma_d=(13)\},&
    +x_{23}&=\#\{\sigma_d=(23)\},\\
    +x_{123}&=\#\{\sigma_d=(123)\},&
    +x_{132}&=\#\{\sigma_d=(132)\}.
    +\end{aligned}
    +\]
    +
    +Each permutation contributes a ‘1’ to three different cells; each cell is covered
    +by exactly two permutations. From (1) we obtain nine equations, e.g.
    +
    +\[
    +x_{\mathrm{id}}+x_{23}=3,\qquad
    +x_{12}+x_{123}=3,\qquad\ldots
    +\]
    +
    +Solving them gives
    +
    +\[
    +x_{12}=x_{13}=x_{23}=k,\qquad
    +x_{\mathrm{id}}=x_{123}=x_{132}=3-k,
    +\]
    +
    +where \(k\in\{0,1,2,3\}\).
    +
    +--------------------------------------------------------------------
    +
    +**Step 4 –  assigning the permutations to the nine distinct digits**
    +
    +For a fixed \(k\) the number of ways to give the nine digits the required
    +multiplicities is the multinomial coefficient
    +
    +\[
    +\frac{9!}{k!^{\,3}\,(3-k)!^{\,3}} .
    +\]
    +
    +Summing over the four possible values of \(k\) gives
    +
    +\[
    +N=\sum_{k=0}^{3}\frac{9!}{k!^{\,3}(3-k)!^{\,3}}
    +   =2\cdot\frac{9!}{3!^{\,3}}+2\cdot\frac{9!}{1!^{\,3}2!^{\,3}}
    +   =1680+45360+45360+1680=94\,080 .
    +\]
    +
    +Thus there are \(94\,080\) ways to decide, for every digit, in which block of
    +each row it will appear.
    +
    +--------------------------------------------------------------------
    +
    +**Step 5 –  placing the digits inside the blocks**
    +
    +Fix a block \(j\).  
    +Row \(i\) contributes exactly three distinct digits to this block; they can be
    +arranged in the three columns of the block in \(3! = 6\) ways, independently for
    +the three rows. Hence a block can be filled in \((3!)^{3}=6^{3}=216\) ways.
    +
    +The three blocks are independent, so the column‑ordering factor is
    +
    +\[
    +(3!)^{9}=6^{9}=10\,077\,696 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 6 –  total number of fillings**
    +
    +\[
    +\boxed{T = N\cdot (3!)^{9}=94\,080\cdot 10\,077\,696
    +      = 948\,109\,639\,680 }.
    +\]
    +
    +Factorising,
    +
    +\[
    +T = 2^{16}\cdot 3^{10}\cdot 5\cdot 7^{2}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 7 –  computing the required sum**
    +
    +Take \(p=2,\;q=3,\;r=5,\;s=7\) with exponents
    +\(a=16,\;b=10,\;c=1,\;d=2\). Then
    +
    +\[
    +p\!a+q\!b+r\!c+s\!d
    +=2\cdot16+3\cdot10+5\cdot1+7\cdot2
    +=32+30+5+14=81 .
    +\]
    +
    +\[
    +\boxed{81}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 81

    +

    Extracted Answer: 81

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are exactly three positive real numbers $ k $ such that the function
    +$ f(x) = \frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $
    +defined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Overview**
    +
    +For  
    +
    +\[
    +f(x)=\frac{(x-18)(x-72)(x-98)(x-k)}{x},\qquad x>0,
    +\]
    +
    +let  
    +
    +\[
    +N(x)=(x-18)(x-72)(x-98)(x-k)=x^4-S_1x^3+S_2x^2-S_3x+S_4,
    +\]
    +
    +where  
    +
    +\[
    +\begin{aligned}
    +S_1&=18+72+98+k=188+k,\\[2pt]
    +S_2&=18\cdot72+18\cdot98+72\cdot98+ k(18+72+98)=10116+188k,\\[2pt]
    +S_4&=18\cdot72\cdot98\cdot k=127008\,k .
    +\end{aligned}
    +\]
    +
    +Then  
    +
    +\[
    +f(x)=\frac{N(x)}{x}=x^{3}-S_1x^{2}+S_2x-S_3+\frac{S_4}{x},
    +\]
    +
    +and  
    +
    +\[
    +f'(x)=\frac{3x^{4}-2S_1x^{3}+S_2x^{2}-S_4}{x^{2}} .
    +\]
    +
    +Hence the critical points are the (positive) roots of  
    +
    +\[
    +P(x)=3x^{4}-2S_1x^{3}+S_2x^{2}-S_4=0\tag{1}
    +\]
    +
    +(the denominator $x^{2}>0$ for $x>0$).
    +
    +Because $f(x)\to +\infty$ as $x\to0^{+}$ and as $x\to\infty$, the graph must
    +first decrease, then increase, then decrease, and finally increase again.
    +Thus (1) has three positive roots:
    +
    +* $x_1$ – a local **minimum** in the first negative interval,
    +* $x_2$ – a local **maximum** in the positive interval,
    +* $x_3$ – a second local **minimum** in the last negative interval.
    +
    +The global minimum is achieved at the lower of the two minima.
    +For the minimum to be attained **exactly at two points** we need  
    +
    +\[
    +f(x_1)=f(x_3)\qquad(\text{the two minima have the same value}).
    +\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Translating the condition
    +
    +At a critical point $x$ we have $f'(x)=0$, i.e. $P(x)=0$.
    +From $f(x)=\dfrac{N(x)}{x}$ and $P(x)=0$ it follows that  
    +
    +\[
    +f(x)=\frac{N(x)}{x}=N'(x)\qquad\text{for any critical point}.
    +\tag{3}
    +\]
    +
    +Thus (2) is equivalent to  
    +
    +\[
    +N'(x_1)=N'(x_3).\tag{4}
    +\]
    +
    +Writing $x_1+ x_3=s$ and $x_1x_3=p$, the two equations $P(x_1)=P(x_3)=0$
    +give after elimination  
    +
    +\[
    +\begin{cases}
    +4(s^{2}-p)-3S_1s+2S_2=0,\\[2pt]
    +3(s^{3}-2ps)-2S_1(s^{2}-p)+S_2s=0.
    +\end{cases}\tag{5}
    +\]
    +
    +Equation (5) yields  
    +
    +\[
    +(2s-S_1)\Bigl(3s(s-S_1)+2S_2\Bigr)=0 .
    +\]
    +
    +Hence either  
    +
    +\[
    +\boxed{s=\dfrac{S_1}{2}} \qquad\text{or}\qquad
    +3s^{2}-3S_1s+2S_2=0. \tag{6}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  The case $s=S_1/2$
    +
    +From the first possibility in (6) we obtain  
    +
    +\[
    +p=\frac{4S_2-S_1^{2}}{8}.
    +\]
    +
    +Using $x_1x_2=p$ and $x_1+x_2=S_1/2$ the two minima are  
    +
    +\[
    +x_{1,3}= \frac{S_1\pm 2\sqrt{\,\Delta\,}}{4},
    +\qquad 
    +\Delta=\frac34k^{2}-94k+6276 .
    +\]
    +
    +Now we must also satisfy $P(x_1)=0$, which after substitution gives
    +
    +\[
    +(S_1^{2}-4S_2)^{2}=64S_4 .
    +\]
    +
    +With the explicit expressions for $S_1,S_2,S_4$ this becomes
    +
    +\[
    +(k^{2}-376k-5120)^{2}=8128512\,k,
    +\]
    +
    +or  
    +
    +\[
    +k^{4}-752k^{3}+131136k^{2}-4278272k+26214400=0.
    +\tag{7}
    +\]
    +
    +Factoring (7) gives  
    +
    +\[
    +(k-8)(k-32)(k-200)(k-512)=0 .
    +\]
    +
    +For a root to be admissible we need the two minima to lie in the
    +two negative intervals of $f$.  
    +The left minimum equals  
    +
    +\[
    +x_1=\frac{k+188-2\sqrt{\Delta}}{4},
    +\]
    +
    +which is **positive** only when  
    +
    +\[
    +k^{2}-376k-5120<0\qquad\Longleftrightarrow\qquad k<389\ldots .
    +\]
    +
    +Thus $k=512$ is rejected, while $k=8,\,32,\,200$ are valid.
    +
    +--------------------------------------------------------------------
    +### 3.  The second possibility in (6)
    +
    +The alternative equation $3s^{2}-3S_1s+2S_2=0$ together with the condition
    +$P(x_1)=0$ leads, after a completely analogous elimination, to the same
    +quartic (7).  Its admissible positive solutions are again $8,32,200$,
    +so no new $k$ appear.
    +
    +--------------------------------------------------------------------
    +### 4.  Conclusion
    +
    +The function $f$ has its global minimum attained at exactly two positive
    +points precisely for  
    +
    +\[
    +k\in\{8,\;32,\;200\}.
    +\]
    +
    +Therefore the required sum is  
    +
    +\[
    +8+32+200 = \boxed{240}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 240

    +

    Extracted Answer: 240

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Four unit squares form a $2 \times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the four unit squares be  
    +
    +\[
    +\begin{array}{cc}
    +A& B\\
    +C& D
    +\end{array}
    +\]
    +
    +and denote by  
    +
    +* \(a=h_{0,1}\)   – the middle horizontal segment between \(A\) and \(C\);  
    +* \(b=h_{1,1}\)   – the middle horizontal segment between \(B\) and \(D\);  
    +* \(c=v_{1,0}\)   – the middle vertical segment between \(A\) and \(B\);  
    +* \(d=v_{1,1}\)   – the middle vertical segment between \(C\) and \(D\).
    +
    +The eight outer unit‑segments are written as  
    +
    +\[
    +\begin{aligned}
    +&e_1=h_{0,0},\qquad e_2=v_{0,0},\\
    +&e_3=v_{2,0},\qquad e_4=h_{1,0},\\
    +&e_5=h_{0,2},\qquad e_6=v_{0,1},\\
    +&e_7=v_{2,1},\qquad e_8=h_{1,2}.
    +\end{aligned}
    +\]
    +
    +All variables take the value 1 for a red side and 0 for a blue side.
    +
    +--------------------------------------------------------------------
    +### 1.  Equations for the squares  
    +
    +Each unit square must have exactly two red sides, so we obtain
    +
    +\[
    +\begin{aligned}
    +A:&\;e_1+e_2+a+c=2, \\
    +B:&\;e_3+e_4+b+c=2, \\
    +C:&\;e_5+e_6+a+d=2, \\
    +D:&\;e_7+e_8+b+d=2 .\qquad (1)
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Fix the interior edges  
    +
    +The four interior edges \(a,b,c,d\) are independent; there are \(2^4=16\) possible
    +choices.
    +For a fixed quadruple \((a,b,c,d)\) the right‑hand side of each equation in (1)
    +becomes  
    +
    +\[
    +s_A=2-(a+c),\; s_B=2-(b+c),\; s_C=2-(a+d),\; s_D=2-(b+d).
    +\]
    +
    +The numbers \(s_A,s_B,s_C,s_D\) are the required sums of the two
    +outer edges belonging to each square.
    +
    +*If \(s_i=0\) or \(s_i=2\):* the two outer edges are forced to be
    +\((0,0)\) or \((1,1)\) – exactly **one** possibility.
    +
    +*If \(s_i=1\):* the outer edges must be \((0,1)\) or \((1,0)\) – **two**
    +possibilities.
    +
    +Hence, for a given \((a,b,c,d)\) the number of admissible colourings of the
    +outer edges equals  
    +
    +\[
    +2^{\,N},\qquad N=\#\{i\in\{A,B,C,D\}:s_i=1\}.
    +\]
    +
    +But \(s_i=1\) occurs precisely when the two interior edges of that square sum to
    +\(1\); i.e.
    +
    +\[
    +N=[a\neq c]+[b\neq c]+[a\neq d]+[b\neq d],\tag{2}
    +\]
    +
    +where \([P]=1\) if the statement \(P\) is true and \(0\) otherwise.
    +
    +--------------------------------------------------------------------
    +### 3.  Summing over the interior edges  
    +
    +Write the sum we need as  
    +
    +\[
    +\sum_{a,b,c,d\in\{0,1\}} 2^{[a\neq c]+[b\neq c]+[a\neq d]+[b\neq d]}.
    +\]
    +
    +For fixed \(a,b\) the contributions of \(c\) and \(d\) factor:
    +
    +\[
    +\bigl(\sum_{c\in\{0,1\}}2^{[a\neq c]+[b\neq c]}\bigr)^2 .
    +\]
    +
    +Now compute the inner sum.
    +
    +*If \(a=b\) (either \((0,0)\) or \((1,1)\)):  
    +
    +\[
    +c=0\!:\;[a\neq c]+[b\neq c]=0,\qquad
    +c=1\!:\;[a\neq c]+[b\neq c]=2,
    +\]
    +so the sum equals \(2^{0}+2^{2}=1+4=5\).
    +
    +*If \(a\neq b\) (either \((0,1)\) or \((1,0)\)):  
    +
    +\[
    +c=0\!:\;[a\neq c]+[b\neq c]=1,\qquad
    +c=1\!:\;[a\neq c]+[b\neq c]=1,
    +\]
    +so the sum equals \(2^{1}+2^{1}=2+2=4\).
    +
    +Thus
    +
    +\[
    +\begin{aligned}
    +\text{total}&=
    +2\bigl(5^2\bigr)+2\bigl(4^2\bigr)        \\
    +&=2\cdot25+2\cdot16\\
    +&=50+32\\
    +&=82 .
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Answer  
    +
    +There are  
    +
    +\[
    +\boxed{82}
    +\]
    +
    +different colourings of the twelve unit segments such that each of the four
    +unit squares has exactly two red sides and two blue sides.
    +
    +
    +

    Results

    +

    Correct Answer: 82

    +

    Extracted Answer: 82

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Circle $\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\omega_2$ with radius 15. Points $C$ and $D$ lie on $\omega_2$ such that $\overline{BC}$ is a diameter of $\omega_2$ and $\overline{BC} \perp \overline{AD}$. The rectangle $EFGH$ is inscribed in $\omega_1$ such that $\overline{EF} \perp \overline{BC}$, $C$ is closer to $\overline{GH}$ than to $\overline{EF}$, and $D$ is closer to $\overline{FG}$ than to $\overline{EH}$, as shown. Triangles $\triangle DGF$ and $\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +* \(O\) be the centre of \(\omega _2\) (radius \(15\)),
    +* \(A\) be the centre of \(\omega _1\) (radius \(6\)),
    +* \(B\) the internal point of tangency.
    +
    +Place \(O\) at the origin and take the diameter \(BC\) on the \(x\)-axis.
    +
    +\[
    +O=(0,0),\qquad B=(15,0)
    +\]
    +
    +Because \(\omega_1\) is tangent internally at \(B\),
    +
    +\[
    +OA=15-6=9\qquad\Longrightarrow\qquad A=(9,0).
    +\]
    +
    +Since \(BC\) is a diameter of \(\omega _2\),
    +
    +\[
    +C=(-15,0).
    +\]
    +
    +\(AD\perp BC\) forces \(AD\) to be vertical through \(A\); intersecting this line with \(\omega _2\),
    +
    +\[
    +x=9,\qquad x^{2}+y^{2}=225\Longrightarrow y=\pm 12 .
    +\]
    +
    +Because the problem states that \(D\) is nearer to the side \(FG\) than to \(EH\), we take the point above the \(x\)-axis:
    +
    +\[
    +D=(9,12).
    +\]
    +
    +---------------------------------------------------------------------
    +
    +### 1.  The rectangle \(EFGH\)
    +
    +\(EF\perp BC\); with \(BC\) horizontal this makes \(EF\) vertical, so the rectangle is axis‑aligned.
    +Let its half–width be \(d>0\) and its half–height be \(h>0\).  
    +Since the rectangle is inscribed in \(\omega _1\) (centre \(A\)), its centre must coincide with \(A\).  
    +Thus the vertices are  
    +
    +\[
    +\begin{aligned}
    +E&=(9+d,\,-h),  &F&=(9+d,\,h),\\
    +G&=(9-d,\,h),   &H&=(9-d,\,-h).
    +\end{aligned}
    +\]
    +
    +Each vertex lies on \(\omega _1\):  
    +
    +\[
    +(x-9)^2+y^2=6^2\quad\Longrightarrow\quad d^{\,2}+h^{\,2}=36. \tag{1}
    +\]
    +
    +---------------------------------------------------------------------
    +
    +### 2.  Equality of the two triangle areas
    +
    +*Triangle \(DGF\)*  
    +Its base \(GF\) is horizontal with length \(2d\); the height is the vertical distance from \(D\) to the line \(y=h\):
    +\[
    +[\,DGF\,]=\frac12\cdot (2d)\bigl(12-h\bigr)=d(12-h).
    +\]
    +
    +*Triangle \(CHG\)*  
    +Its base \(GH\) is vertical with length \(2h\); the height is the horizontal distance from \(C\) to the line \(x=9-d\):
    +\[
    +[\,CHG\,]=\frac12\cdot (2h)\bigl( (9-d)-(-15)\bigr)=h(24-d).
    +\]
    +
    +The condition \([DGF]=[CHG]\) gives  
    +
    +\[
    +d(12-h)=h(24-d)\;\Longrightarrow\;12d=24h\;\Longrightarrow\;d=2h. \tag{2}
    +\]
    +
    +---------------------------------------------------------------------
    +
    +### 3.  Solving for \(d\) and \(h\)
    +
    +Substituting \(d=2h\) into (1):
    +
    +\[
    +(2h)^2+h^{2}=36\quad\Longrightarrow\quad5h^{2}=36
    +\quad\Longrightarrow\quad h^{2}=\frac{36}{5},\qquad 
    +h=\frac{6}{\sqrt5},\qquad d=2h=\frac{12}{\sqrt5}.
    +\]
    +
    +---------------------------------------------------------------------
    +
    +### 4.  Area of the rectangle
    +
    +\[
    +\text{Area}= (2d)(2h)=4dh=4(2h)h=8h^{2}=8\cdot\frac{36}{5}
    +=\frac{288}{5}.
    +\]
    +
    +Thus the area equals \(\dfrac{m}{n}\) with \(m=288,\;n=5\) (coprime).  
    +
    +\[
    +m+n=288+5=293.
    +\]
    +
    +\[
    +\boxed{293}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 293

    +

    Extracted Answer: 293

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Factor  
    +
    +\[
    +2025=3^{4}\cdot5^{2}.
    +\]
    +
    +A divisor of \(2025\) has the form \(3^{a}5^{b}\) with \(0\le a\le4,\ 0\le b\le2\).  
    +Hence  
    +
    +\[
    +|A|=(4+1)(2+1)=15,
    +\qquad\text{total subsets}=2^{15}=32768 .
    +\]
    +
    +---
    +
    +### When does a subset have lcm \(=2025\)?
    +
    +The lcm of a set of divisors is \(3^{\max a}\cdot5^{\max b}\).  
    +Thus the lcm equals \(2025=3^{4}\cdot5^{2}\) **iff**
    +
    +* at least one element has exponent \(a=4\) (a divisor containing \(3^{4}\));
    +* at least one element has exponent \(b=2\) (a divisor containing \(5^{2}\)).
    +
    +---
    +
    +### Counting the desired subsets  
    +
    +Divisors with \(a=4\): \(3^{4}5^{b}\ (b=0,1,2)\) – 3 of them.  
    +Divisors with \(b=2\): \(3^{a}5^{2}\ (a=0,\dots ,4)\) – 5 of them.  
    +
    +Let  
    +
    +* \(X\) = subsets containing **no** divisor with \(a=4\);  
    +* \(Y\) = subsets containing **no** divisor with \(b=2\).
    +
    +\[
    +|X|=2^{12}\quad (\text{choose any of the other }12\text{ divisors}),\qquad
    +|Y|=2^{10}\quad (\text{choose any of the other }10\text{ divisors}).
    +\]
    +
    +Divisors lacking both \(a=4\) and \(b=2\) have \(a\le3,\ b\le1\); there are \(4\cdot2=8\) of them, so
    +
    +\[
    +|X\cap Y|=2^{8}.
    +\]
    +
    +Using inclusion–exclusion, the number of subsets that contain **both** an \(a=4\) divisor and a \(b=2\) divisor is  
    +
    +\[
    +N = 2^{15} - 2^{12} - 2^{10} + 2^{8}
    +    = 32768 - 4096 - 1024 + 256
    +    = 27904 .
    +\]
    +
    +These subsets are precisely the non‑empty subsets whose lcm equals \(2025\); the empty set is automatically excluded by the inclusion–exclusion count.
    +
    +---
    +
    +### Probability
    +
    +\[
    +\text{Probability} = \frac{N}{2^{15}} = \frac{27904}{32768}
    +                     = \frac{2^{8}\cdot 109}{2^{15}}
    +                     = \frac{109}{128}.
    +\]
    +
    +The fraction \(\frac{109}{128}\) is already in lowest terms, so  
    +
    +\[
    +m=109,\qquad n=128,\qquad m+n=237.
    +\]
    +
    +\[
    +\boxed{237}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 237

    +

    Extracted Answer: 237

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Sixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +\text{chairs}=1,2,\dots ,16,\qquad 8\ \text{people sit in 8 of them.}
    +\]
    +
    +The condition *no person sits next to two other people* means that no three
    +occupied chairs are consecutive.  
    +Hence we must count binary strings of length \(16\) with exactly eight 1’s
    +and no substring \(111\).
    +
    +---
    +
    +### 1.  Blocks of occupied chairs  
    +
    +Occupied chairs appear in blocks of length \(1\) or \(2\) (a block of length
    +\(3\) would give a person with two neighbours).  
    +
    +Let  
    +
    +* \(t\) = number of blocks of length \(2\);
    +* \(s\) = number of blocks of length \(1\).
    +
    +Then  
    +
    +\[
    +s+2t=8,\qquad r=s+t \text{ (total number of blocks)} .
    +\]
    +
    +Hence  
    +
    +\[
    +t=0,1,2,3,4,\qquad r=8-t\;(=8,7,6,5,4).
    +\]
    +
    +For a fixed \(t\) (hence fixed \(r\)) we must choose which of the \(r\) blocks
    +are the double ones:
    +
    +\[
    +\text{ways to choose the double blocks}= \binom{r}{t}= \binom{r}{8-r}.
    +\]
    +
    +---
    +
    +### 2.  Placing the blocks among the empty chairs  
    +
    +There are \(16-8=8\) empty chairs.  
    +Between the \(r\) blocks there must be at least one empty chair, using
    +\(r-1\) chairs.  
    +
    +The remaining empty chairs are  
    +
    +\[
    +8-(r-1)=9-r .
    +\]
    +
    +These \(9-r\) chairs can be placed arbitrarily in the \(r+1\) gaps
    +(before the first block, between successive blocks, after the last block).  
    +By stars‑and‑bars the number of ways is  
    +
    +\[
    +\binom{(9-r)+(r+1)-1}{(r+1)-1}= \binom{9}{r}.
    +\]
    +
    +---
    +
    +### 3.  Total number of admissible subsets  
    +
    +\[
    +\begin{aligned}
    +N&=\sum_{t=0}^{4} \binom{r}{t}\binom{9}{r},
    +\qquad r=8-t \\
    +  &=\sum_{r=4}^{8}\binom{r}{\,8-r\,}\binom{9}{r}.
    +\end{aligned}
    +\]
    +
    +Compute each term:
    +
    +\[
    +\begin{array}{c|c|c|c}
    +r & \binom{r}{8-r} & \binom{9}{r} & \text{product}\\ \hline
    +8 & 1 & 9   & 9\\
    +7 & 7 & 36  & 252\\
    +6 & 15& 84  & 1260\\
    +5 & 10& 126 & 1260\\
    +4 & 1 & 126 & 126
    +\end{array}
    +\]
    +
    +Adding them,
    +
    +\[
    +N = 9+252+1260+1260+126 = 2907.
    +\]
    +
    +---
    +
    +### 4.  Remainder modulo \(1000\)
    +
    +\[
    +2907 \equiv 907 \pmod{1000}.
    +\]
    +
    +\[
    +\boxed{907}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 907

    +

    Extracted Answer: 907

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $ n $ values of $ x $ in the interval $ 0 < x < 2\pi $ where $ f(x) = \sin(7\pi \cdot \sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    To solve  
    +
    +\[
    +f(x)=\sin \bigl(7\pi \,\sin(5x)\bigr)=0 ,\qquad 0<x<2\pi 
    +\]
    +
    +let  
    +
    +\[
    +g(x)=7\pi\sin(5x).
    +\]
    +
    +Then  
    +
    +\[
    +f(x)=\sin(g(x))=0\iff g(x)=k\pi,\;k\in\mathbb Z .
    +\]
    +
    +Hence  
    +
    +\[
    +7\pi\sin(5x)=k\pi\Longrightarrow \sin(5x)=\frac{k}{7}.
    +\]
    +
    +Because \(|\sin(5x)|\le 1\), the integer \(k\) can be  
    +\(-7\le k\le 7\).
    +
    +---
    +
    +### 1. Counting the zeros (\(n\))
    +
    +Put \(y=5x\).  
    +When \(x\) runs from \(0\) to \(2\pi\), \(y\) runs from \(0\) to \(10\pi\).
    +
    +For a fixed value \(c=\frac{k}{7}\) we count the solutions of \(\sin y=c\) in the interval \((0,10\pi)\).
    +
    +* **\(c=0\) \;(i.e. \(k=0\)):**  
    +  \(\sin y=0\) ⇒ \(y=m\pi\).  
    +  In \((0,10\pi)\) we have \(m=1,2,\dots ,9\) → **9 solutions**.
    +
    +* **\(c=\pm1\) \;(i.e. \(k=\pm7\)):**  
    +  \(\sin y=1\) gives \(y=\frac{\pi}{2}+2\pi n\)  
    +  \(\sin y=-1\) gives \(y=\frac{3\pi}{2}+2\pi n\).  
    +  For \(n=0,1,2,3,4\) each set yields 5 points → **5+5 = 10 solutions**.
    +
    +* **\(c\) with \(|c|<1\) and \(c\neq0\) \;(i.e. \(k=\pm1,\dots ,\pm6\)):**  
    +  For any such \(c\) there are two solutions per period of sine.  
    +  The interval \((0,10\pi)\) contains five full periods, so we obtain **\(5\times2=10\) solutions** for each such \(k\).
    +
    +Now sum:
    +
    +\[
    +\begin{aligned}
    +n & =\underbrace{9}_{k=0}
    +   +\underbrace{12\times10}_{k=\pm1,\dots ,\pm6}
    +   +\underbrace{10}_{k=\pm7}\\[2mm]
    +  & = 9+120+10 = 139 .
    +\end{aligned}
    +\]
    +
    +Thus **\(n=139\)**.
    +
    +---
    +
    +### 2. When is the graph tangent to the \(x\)-axis? (\(t\))
    +
    +The graph is tangent at a zero when the derivative also vanishes:
    +
    +\[
    +f'(x)=\cos\bigl(7\pi\sin(5x)\bigr)\cdot 35\pi\cos(5x)=0 .
    +\]
    +
    +At the zeros we already have \(\sin(7\pi\sin(5x))=0\), i.e. \(7\pi\sin(5x)=k\pi\).  
    +Hence \(\cos\bigl(7\pi\sin(5x)\bigr)=\cos(k\pi)=(-1)^k\neq0\).
    +
    +Consequently \(f'(x)=0\) can only occur through \(\cos(5x)=0\).
    +
    +\[
    +\cos(5x)=0 \Longrightarrow 5x=\frac{\pi}{2}+m\pi
    +            \Longrightarrow x=\frac{(2m+1)\pi}{10},\qquad m\in\mathbb Z .
    +\]
    +
    +Within \(0<x<2\pi\) we have \(m=0,1,\dots ,9\), giving **10 distinct \(x\)** values.
    +
    +At each of these points \(\sin(5x)=\pm1\), so \(\sin(7\pi\sin(5x))=\sin(\pm7\pi)=0\); thus they are indeed zeros, and because the derivative also vanishes the graph is tangent there.
    +
    +Hence **\(t=10\)**.
    +
    +---
    +
    +### 3. Required sum
    +
    +\[
    +n+t = 139 + 10 = 149 .
    +\]
    +
    +\[
    +\boxed{149}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 149

    +

    Extracted Answer: 149

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Answer:** \(\boxed{637}\)
    +
    +
    +

    Results

    +

    Correct Answer: 735

    +

    Extracted Answer: 637

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A_1A_2 \ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:
    +* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \leq i \leq 10 $,
    +* $ \cos(\angle A_iA_1A_{i+1}) = \frac{12}{13} $ for each $ 2 \leq i \leq 10 $,
    +* The perimeter of $ A_1A_2 \ldots A_{11} $ is 20.
    +If $ A_1A_2 + A_1A_{11} $ can be expressed as $ \frac{m\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +x_i=A_1A_i\qquad (i=2,3,\ldots ,11),\qquad 
    +\theta=\angle A_iA_1A_{i+1}\;(2\le i\le10).
    +\]
    +
    +---
    +
    +### 1.  Using the area condition  
    +
    +\[
    +\text{Area}\bigl(A_iA_1A_{i+1}\bigr)=\frac12 x_i x_{i+1}\sin\theta =1 .
    +\]
    +
    +Because \(\cos\theta=\dfrac{12}{13}\),
    +
    +\[
    +\sin\theta=\sqrt{1-\Bigl(\frac{12}{13}\Bigr)^2}= \frac{5}{13}.
    +\]
    +
    +Thus  
    +
    +\[
    +\frac12 x_i x_{i+1}\cdot\frac{5}{13}=1
    +\Longrightarrow x_i x_{i+1}=\frac{26}{5}\qquad (2\le i\le10).
    +\tag{1}
    +\]
    +
    +Denote \(c=\dfrac{26}{5}\).  From (1) we have  
    +
    +\[
    +x_{i+1}= \frac{c}{x_i}.
    +\]
    +
    +Consequently  
    +
    +\[
    +x_{i+2}=x_i\qquad\Longrightarrow\qquad
    +\begin{cases}
    +x_{2}=x_{4}=x_{6}=x_{8}=x_{10}=a,\\[2pt]
    +x_{3}=x_{5}=x_{7}=x_{9}=x_{11}=b,
    +\end{cases}
    +\]
    +
    +with  
    +
    +\[
    +ab=c=\frac{26}{5}. \tag{2}
    +\]
    +
    +So the distances from \(A_1\) alternate between two values \(a\) and \(b\).
    +
    +---
    +
    +### 2.  Length of each side \(A_iA_{i+1}\;(2\le i\le10)\)
    +
    +In \(\triangle A_iA_1A_{i+1}\) the side opposite \(\theta\) is \(A_iA_{i+1}\).
    +By the law of cosines
    +
    +\[
    +A_iA_{i+1}^2 = x_i^2+x_{i+1}^2-2x_ix_{i+1}\cos\theta .
    +\]
    +
    +Because \(x_i\) and \(x_{i+1}\) are always one \(a\) and one \(b\),
    +
    +\[
    +A_iA_{i+1}^2 = a^2+b^2-2ab\cdot\frac{12}{13}.
    +\]
    +
    +Hence all nine sides \(A_iA_{i+1}\;(i=2,\dots ,10)\) have the same length; denote
    +
    +\[
    +d^2=a^2+b^2-\frac{24}{13}ab.
    +\tag{3}
    +\]
    +
    +Write \(s=a+b\).  Using \(ab=c\),
    +
    +\[
    +a^2+b^2=s^2-2ab=s^2-2c .
    +\]
    +
    +Substituting into (3),
    +
    +\[
    +d^2=s^2-2c-\frac{24}{13}c
    +    =s^2-c\Bigl(2+\frac{24}{13}\Bigr)
    +    =s^2-\frac{50}{13}c.
    +\]
    +
    +Since \(c=\dfrac{26}{5}\),
    +
    +\[
    +d^2=s^2-\frac{50}{13}\cdot\frac{26}{5}=s^2-20,
    +\qquad\text{so}\qquad d=\sqrt{s^{2}-20}.
    +\tag{4}
    +\]
    +
    +---
    +
    +### 3.  Use the perimeter
    +
    +The polygon has \(11\) sides: the two incident to \(A_1\) of lengths \(a\) and \(b\), and the nine equal sides of length \(d\).  
    +Given perimeter \(20\),
    +
    +\[
    +a+b+9d=s+9\sqrt{s^{2}-20}=20.
    +\tag{5}
    +\]
    +
    +Solve (5) for \(s\).
    +
    +\[
    +9\sqrt{s^{2}-20}=20-s\;(s\le20).
    +\]
    +
    +Square:
    +
    +\[
    +81(s^{2}-20)=(20-s)^{2}
    +\Longrightarrow 80s^{2}+40s-2020=0
    +\Longrightarrow 4s^{2}+2s-101=0.
    +\]
    +
    +Hence
    +
    +\[
    +s=\frac{-2\pm\sqrt{4+1616}}{8}
    +   =\frac{-2\pm18\sqrt5}{8}
    +   =\frac{-1\pm9\sqrt5}{4}.
    +\]
    +
    +Only the positive root is admissible:
    +
    +\[
    +\boxed{s=\frac{9\sqrt5-1}{4}}.
    +\]
    +
    +Thus  
    +
    +\[
    +A_1A_2+A_1A_{11}=a+b=s=\frac{9\sqrt5-1}{4}
    +      =\frac{m\sqrt n-p}{q},
    +\]
    +
    +with \(m=9,\;n=5,\;p=1,\;q=4\).
    +
    +---
    +
    +### 4.  Required sum
    +
    +\[
    +m+n+p+q=9+5+1+4=19.
    +\]
    +
    +\[
    +\boxed{19}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 19

    +

    Extracted Answer: 19

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +From an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.
    +
    +In general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Greedy representation**
    +
    +For a value \(N\) let  
    +
    +\[
    +q=\Big\lfloor\frac{N}{25}\Big\rfloor ,\qquad 
    +r=N-25q\;(0\le r\le 24).
    +\]
    +
    +After taking \(q\) quarters the greedy algorithm uses  
    +
    +\[
    +a=\Big\lfloor\frac{r}{10}\Big\rfloor ,\qquad 
    +b=r-10a\;(0\le b\le 9)
    +\]
    +
    +dimes and ones.  
    +Thus the greedy collection contains  
    +
    +\[
    +G(N)=q+a+b
    +\]
    +
    +coins.
    +
    +--------------------------------------------------------------------
    +
    +**When can a better collection exist?**
    +
    +Let a different collection use \(x\) quarters and \(y\) dimes
    +(\(z\) pennies fill the rest).  
    +Its total number of coins is  
    +
    +\[
    +C=x+y+z = x+y+(N-25x-10y)=N-(24x+9y).
    +\]
    +
    +Hence a representation is better than the greedy one iff it makes the
    +“saving”
    +
    +\[
    +S=24x+9y
    +\]
    +
    +larger than the greedy saving \(S_G = 24q+9a\).
    +
    +Suppose we start from the greedy solution and **remove** \(d\ge1\) quarters
    +(\(d\le q\)).  
    +The value we free is \(25d\).
    +With this extra value we can add as many dimes as possible:
    +
    +\[
    +y' = a+\Big\lfloor\frac{r+25d}{10}\Big\rfloor
    +      = a+\Big\lfloor 2.5d+\frac{b}{10}\Big\rfloor .
    +\]
    +
    +The new saving is  
    +
    +\[
    +S'=24(q-d)+9y'
    +   =24q+9a +\bigl[-24d+9\big\lfloor2.5d+\tfrac{b}{10}\big\rfloor\bigr].
    +\]
    +
    +Thus the new collection beats the greedy one precisely when  
    +
    +\[
    +-24d+9\Big\lfloor2.5d+\frac{b}{10}\Big\rfloor >0
    +\qquad\Longleftrightarrow\qquad
    +\Big\lfloor2.5d+\frac{b}{10}\Big\rfloor \ge
    +\Big\lfloor\frac{8}{3}d\Big\rfloor+1 .\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Only one quarter can ever help**
    +
    +For even \(d\) we have \(\big\lfloor2.5d\big\rfloor =2.5d\) and
    +\(\big\lfloor\frac{8}{3}d\big\rfloor =2.5d+\big\lfloor\frac{d}{6}\big\rfloor\).
    +Hence the left–hand side of (1) never exceeds the right–hand side,
    +so even \(d\) never improves the greedy solution.
    +
    +For odd \(d=2k+1\) we obtain  
    +
    +\[
    +\Big\lfloor2.5d+\frac{b}{10}\Big\rfloor
    +   =5k+2+{\bf 1}_{\{b\ge5\}},\qquad
    +\Big\lfloor\frac{8}{3}d\Big\rfloor
    +   =5k+2+\Big\lfloor\frac{k+2}{3}\Big\rfloor .
    +\]
    +
    +Consequently  
    +
    +\[
    +\Big\lfloor2.5d+\frac{b}{10}\Big\rfloor-
    +\Big\lfloor\frac{8}{3}d\Big\rfloor
    += {\bf 1}_{\{b\ge5\}}-\Big\lfloor\frac{k+2}{3}\Big\rfloor .
    +\]
    +
    +The right‑hand side is \(\ge 1\) only when \(k=0\) (that is, \(d=1\))
    +and \(b\ge5\).
    +Thus the **only** way to improve upon the greedy solution is to
    +replace **exactly one** quarter and have \(b\ge5\).
    +
    +--------------------------------------------------------------------
    +
    +**What does \(b\ge5\) mean?**
    +
    +Recall \(b\) is the number of pennies left after taking all possible
    +quarters and then all possible dimes.  Hence
    +
    +\[
    +b = N-25q-10a\in\{0,1,\dots ,9\}.
    +\]
    +
    +The condition \(b\ge5\) is equivalent to
    +
    +\[
    +N-25q\equiv 5,6,7,8,9\pmod{10},
    +\]
    +
    +or, more simply,
    +
    +\[
    +N\equiv 5,6,7,8,9\pmod{25}.
    +\]
    +
    +If \(q=0\) (i.e. \(N<25\)) there is no quarter to replace, so the greedy
    +algorithm is always optimal for \(1\le N\le24\).
    +
    +Hence **the greedy algorithm fails exactly for the numbers**
    +
    +\[
    +N\ge 25 \quad\text{with}\quad N\equiv 5,6,7,8,9\pmod{25}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Counting the successes**
    +
    +All integers \(1\le N\le1000\): 1000 of them.
    +
    +Numbers that cause failure:
    +
    +* The residues \(5,6,7,8,9\) each occur
    +  \(\bigl\lfloor\frac{1000-r}{25}\bigr\rfloor+1 = 40\) times for
    +  \(r=5,6,7,8,9\).
    +  Hence \(5\times40=200\) such numbers in \([1,1000]\).
    +
    +* The five smallest ones, \(5,6,7,8,9\), are \(<25\); they do **not**
    +  cause failure because no quarter can be replaced.
    +
    +Thus the genuine failures are \(200-5 = 195\) numbers.
    +
    +Consequently the number of values for which the greedy algorithm
    +succeeds is  
    +
    +\[
    +1000-195 = 805.
    +\]
    +
    +\[
    +\boxed{805}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 610

    +

    Extracted Answer: 805

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the vertices of the regular \(24\)-gon be labelled  
    +
    +\[
    +0,1,2,\dots ,23\qquad (\text{mod }24).
    +\]
    +
    +If a segment connects vertex \(i\) to vertex \(j\) then its length is determined only by the
    +step  
    +
    +\[
    +k\equiv j-i\pmod{24},\qquad 1\le k\le 12 .
    +\]
    +
    +All \(12\) segments must have the same length, therefore they all have the same step \(k\) (the
    +step \(24-k\) gives the same length, so it is enough to consider \(k=1,2,\dots ,12\)).
    +
    +--------------------------------------------------------------------
    +### 1.  The graph for a fixed step \(k\)
    +
    +For a fixed \(k\) join each vertex \(i\) with the two vertices
    +\(i\pm k\).  The resulting graph \(G_k\) is a union of cycles:
    +
    +* Let \(d=\gcd(k,24)\).
    +* Each cycle has length \(\displaystyle L=\frac{24}{d}\) and there are \(d\) such
    +  cycles.
    +
    +Indeed the permutation \(i\mapsto i+k\) on \(\{0,\dots ,23\}\) consists of
    +\(d\) cycles of length \(L\).
    +
    +--------------------------------------------------------------------
    +### 2.  Perfect matchings of \(G_k\)
    +
    +A required drawing is a perfect matching of \(G_k\).
    +
    +* If a cycle has even length, it has exactly **2** perfect matchings
    +  (alternating edges).
    +* If a cycle has odd length, a perfect matching does **not** exist.
    +* The only exceptional case is \(k=12\); then each vertex has only one
    +  neighbour (its opposite) and the whole graph is already a perfect
    +  matching.
    +
    +Thus, for \(k\neq 12\),
    +
    +\[
    +\text{# matchings for }G_k=
    +\begin{cases}
    +2^{\,d} & \text{if }L\text{ is even},\\[2mm]
    +0       & \text{if }L\text{ is odd}.
    +\end{cases}
    +\]
    +
    +Since \(L\) is odd exactly when \(L=3\), i.e. when \(d=8\) (the only such
    +\(k\) is \(k=8\)), we have
    +
    +\[
    +N(k)=
    +\begin{cases}
    +2^{\gcd(k,24)} & \gcd(k,24)\neq 8,\;k\neq 12,\\[2mm]
    +0 & k=8,\\[2mm]
    +1 & k=12 .
    +\end{cases}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Evaluate for \(k=1,\dots ,12\)
    +
    +\[
    +\begin{array}{c|c|c|c}
    +k & \gcd(k,24) & \text{cycles} & N(k)\\ \hline
    +1 & 1 & 1\ \text{cycle of length }24 & 2\\
    +2 & 2 & 2\ \text{cycles of length }12 & 4\\
    +3 & 3 & 3\ \text{cycles of length }8  & 8\\
    +4 & 4 & 4\ \text{cycles of length }6  & 16\\
    +5 & 1 & 1\ \text{cycle of length }24 & 2\\
    +6 & 6 & 6\ \text{cycles of length }4  & 64\\
    +7 & 1 & 1\ \text{cycle of length }24 & 2\\
    +8 & 8 & 8\ \text{cycles of length }3  & 0\\
    +9 & 3 & 3\ \text{cycles of length }8  & 8\\
    +10& 2 & 2\ \text{cycles of length }12 & 4\\
    +11& 1 & 1\ \text{cycle of length }24 & 2\\
    +12&12 & 12\ \text{edges (pairs)}       & 1
    +\end{array}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Sum over all possible lengths
    +
    +\[
    +\begin{aligned}
    +\sum_{k=1}^{12} N(k)
    +&=2+4+8+16+2+64+2+0+8+4+2+1\\
    +&=113 .
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{113}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 113

    +

    Extracted Answer: 113

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For a base \(b>9\),
    +
    +\[
    +17_{b}=1\cdot b+7=b+7 ,\qquad   
    +97_{b}=9\cdot b+7=9b+7 .
    +\]
    +
    +We need  
    +
    +\[
    +b+7 \mid 9b+7 .
    +\]
    +
    +Let \(d=b+7\;(>0)\). Then \(b=d-7\) and
    +
    +\[
    +9b+7 = 9(d-7)+7 = 9d-56 .
    +\]
    +
    +Hence  
    +
    +\[
    +d \mid (9d-56) \Longrightarrow d\mid 56 .
    +\]
    +
    +So \(d\) must be a positive divisor of \(56\).  
    +Since \(b>9\), we have \(d=b+7>9+7=16\).  
    +The divisors of \(56\) larger than \(16\) are
    +
    +\[
    +d=28,\;56 .
    +\]
    +
    +Corresponding bases are  
    +
    +\[
    +b=d-7:
    +\begin{cases}
    +d=28 \Rightarrow b=21,\\[2mm]
    +d=56 \Rightarrow b=49.
    +\end{cases}
    +\]
    +
    +Both satisfy \(b>9\) and indeed  
    +
    +\[
    +\frac{9b+7}{b+7}=7\;(b=21),\qquad 
    +\frac{9b+7}{b+7}=8\;(b=49).
    +\]
    +
    +Thus the integer bases are \(b=21\) and \(b=49\). Their sum is  
    +
    +\[
    +21+49=70.
    +\]
    +
    +\[
    +\boxed{70}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 70

    +

    Extracted Answer: 70

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Suppose $ \triangle ABC $ has angles $ \angle BAC = 84^\circ $, $ \angle ABC = 60^\circ $, and $ \angle ACB = 36^\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \overline{BC} $, $ \overline{AC} $, and $ \overline{AB} $, respectively. The circumcircle of $ \triangle DEF $ intersects $ \overline{BD} $, $ \overline{AE} $, and $ \overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \triangle DEF $ into six minor arcs, as shown. Find $ \widehat{DE} + 2 \cdot \widehat{HJ} + 3 \cdot \widehat{FG} $, where the arcs are measured in degrees.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Overview**
    +
    +The circle through the midpoints \(D,E,F\) of the sides of \(\triangle ABC\) is the **nine‑point circle** of \(\triangle ABC\).
    +Hence  
    +
    +* \(D,E,F\) are the vertices of the medial triangle,
    +* \(\angle D= \angle A=84^{\circ},\ \angle E= \angle B=60^{\circ},\ \angle F=\angle C=36^{\circ}\).
    +
    +Since the nine‑point circle is the circumcircle of \(\triangle DEF\),
    +
    +\[
    +\widehat{DE}=2\angle F=2\cdot 36^{\circ}=72^{\circ}.
    +\tag{1}
    +\]
    +
    +We must also determine the arcs \(\widehat{FG}\) and \(\widehat{HJ}\).
    +
    +---------------------------------------------------------------------
    +
    +### 1.  The arc \(\widehat{FG}\)
    +
    +\(G\) is the second intersection of the median \(BD\) with the nine‑point circle.
    +At point \(D\) the chord \(DG\) lies on the line \(BD\), while the chord \(DF\) is parallel to side \(AC\) (mid‑segment theorem).
    +
    +Therefore  
    +
    +\[
    +\angle FDG=\angle(\text{line } DF,\text{line } DG)
    +          =\angle(\,AC ,\,BD\,).
    +\]
    +
    +The angle between side \(AC\) and the median from \(B\) can be read directly from the triangle:
    +\( \angle(\,AC ,\,BD\,)=\angle C=36^{\circ}\).
    +
    +Consequently  
    +
    +\[
    +\widehat{FG}=2\angle FDG=2\cdot36^{\circ}=72^{\circ}.
    +\tag{2}
    +\]
    +
    +---------------------------------------------------------------------
    +
    +### 2.  The arc \(\widehat{HJ}\)
    +
    +\(H\) and \(J\) are the second intersections of the sides \(AC\) and \(AB\) with the nine‑point circle.
    +Thus the two secants through the exterior point \(A\) intersect the circle at the pairs \(\{F,J\}\) and \(\{E,H\}\).
    +
    +For an exterior point the angle formed by two secants equals half the **difference** of the intercepted arcs:
    +
    +\[
    +\angle BAC=\frac12\bigl(\widehat{JH}-\widehat{FE}\bigr).
    +\tag{3}
    +\]
    +
    +We already know the arc \(\widehat{FE}\) of the nine‑point circle:
    +\[
    +\widehat{FE}=2\angle D =2\cdot 84^{\circ}=168^{\circ}.
    +\tag{4}
    +\]
    +
    +Plugging \(\angle BAC=84^{\circ}\) and (4) into (3) gives  
    +
    +\[
    +84^{\circ}=\frac12\bigl(\widehat{JH}-168^{\circ}\bigr)
    +\Longrightarrow \widehat{JH}=336^{\circ}.
    +\]
    +
    +The **minor** arc \(HJ\) is the complement of \(336^{\circ}\) on the circle:
    +
    +\[
    +\widehat{HJ}=360^{\circ}-336^{\circ}=24^{\circ}.
    +\tag{5}
    +\]
    +
    +---------------------------------------------------------------------
    +
    +### 3.  Computing the required sum
    +
    +From (1), (2) and (5)
    +
    +\[
    +\begin{aligned}
    +\widehat{DE}+2\widehat{HJ}+3\widehat{FG}
    +&=72^{\circ}+2\cdot24^{\circ}+3\cdot72^{\circ}  \\
    +&=72^{\circ}+48^{\circ}+216^{\circ}\\
    +&=336^{\circ}.
    +\end{aligned}
    +\]
    +
    +---------------------------------------------------------------------
    +
    +\[
    +\boxed{336}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 336

    +

    Extracted Answer: 336

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The nine players are distinct, so for a given triple \((c,v,s)\) (numbers of chocolate, vanilla, and strawberry cones) the number of assignments is  
    +
    +\[
    +\frac{9!}{c!\,v!\,s!}.
    +\]
    +
    +We must count all triples of positive integers satisfying  
    +
    +\[
    +c+v+s = 9,\qquad c>v>s\ge 1 .
    +\]
    +
    +---
    +
    +### Find the possible triples \((c,v,s)\)
    +
    +Because the three numbers are distinct and sum to 9, we list the partitions of 9 into three distinct positive parts:
    +
    +\[
    +\begin{aligned}
    +9 &= 6+2+1,\\
    +9 &= 5+3+1,\\
    +9 &= 4+3+2 .
    +\end{aligned}
    +\]
    +
    +These are the only triples with strict descending order, so  
    +
    +\[
    +(c,v,s) \in \{(6,2,1),\;(5,3,1),\;(4,3,2)\}.
    +\]
    +
    +---
    +
    +### Count assignments for each triple
    +
    +\[
    +\begin{aligned}
    +(6,2,1):\quad &\frac{9!}{6!\,2!\,1!}= \frac{362880}{720\cdot2}=252,\\[4pt]
    +(5,3,1):\quad &\frac{9!}{5!\,3!\,1!}= \frac{362880}{120\cdot6}=504,\\[4pt]
    +(4,3,2):\quad &\frac{9!}{4!\,3!\,2!}= \frac{362880}{24\cdot6\cdot2}=1260.
    +\end{aligned}
    +\]
    +
    +---
    +
    +### Total number of assignments
    +
    +\[
    +N = 252 + 504 + 1260 = 2016.
    +\]
    +
    +---
    +
    +### Remainder modulo \(1000\)
    +
    +\[
    +2016 \equiv 16 \pmod{1000}.
    +\]
    +
    +\[
    +\boxed{16}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 16

    +

    Extracted Answer: 16

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Alex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1.  What determines the number of regions?**  
    +
    +If we draw line‑segments in a disc and no three of them meet in a common interior point, then each new segment splits one existing region for every interior intersection it makes, plus one more region for the segment itself.  
    +Hence  
    +
    +\[
    +\#\text{regions}=1+(\#\text{segments})+(\#\text{interior intersection points}).
    +\]
    +
    +We have  
    +
    +* 2 diameters,
    +* 25 random chords,
    +* total segments \(=27\).
    +
    +So we need the **expected number of interior intersections**.
    +
    +---------------------------------------------------------------------
    +
    +**Step 2.  Intersections that are certain**
    +
    +The two diameters intersect at the centre ⇒ one interior intersection.
    +
    +---------------------------------------------------------------------
    +
    +**Step 3.  Intersections of a chord with the diameters**
    +
    +A chord is drawn by picking two points on the circle that lie in **different quadrants**.
    +
    +*If the two quadrants are adjacent* (e.g. quadrant I and II), the chord crosses **exactly one** diameter.  
    +*If the two quadrants are opposite* (e.g. quadrant I and III), the chord crosses **both** diameters.
    +
    +The unordered pair of distinct quadrants is uniformly chosen among the \(\binom{4}{2}=6\) possibilities:
    +
    +* 4 adjacent pairs → probability \(4/6=2/3\);
    +* 2 opposite pairs → probability \(2/6=1/3\).
    +
    +Hence for one random chord
    +
    +\[
    +E[\hbox{diameter‑intersections}]
    +  =\frac23\cdot1+\frac13\cdot2=\frac43 .
    +\]
    +
    +For the 25 chords  
    +
    +\[
    +E[I_{\text{chord–diameter}}]=25\cdot\frac43=\frac{100}{3}.
    +\]
    +
    +---------------------------------------------------------------------
    +
    +**Step 4.  Intersections between two random chords**
    +
    +Let the two chords be \(AB\) and \(CD\).  
    +Write \(L\) for the clockwise length of the arc from \(A\) to \(B\) (so \(0\le L\le2\pi\)).  
    +Let \(L_i^{(1)}\) be the length of that arc inside quadrant \(i\) (\(i=1,\dots ,4\)), and
    +\(L_i^{(2)}=\frac{\pi}{2}-L_i^{(1)}\) the length of the complementary arc inside the same quadrant.
    +
    +For a given chord \(AB\)
    +
    +* the probability that a random chord \(CD\) meets \(AB\) **and** has its endpoints in different quadrants is  
    +
    +\[
    +p_{\text{int}}(A,B)=
    +\frac{L(2\pi-L)-\displaystyle\sum_{i=1}^{4}L_i^{(1)}L_i^{(2)}}{2\pi^{2}} .
    +\tag{1}
    +\]
    +
    +(The numerator is the area of the product set
    +\(\{(C,D):C\in\text{arc}_1,D\in\text{arc}_2\}\) minus the part where \(C\) and \(D\) fall in the same quadrant.)
    +
    +Define  
    +
    +\[
    +Q(A,B)=L(2\pi-L)-\sum_{i=1}^{4}L_i^{(1)}L_i^{(2)} .
    +\]
    +
    +Then \(p_{\text{int}}(A,B)=Q(A,B)/(2\pi^{2})\).
    +
    +---------------------------------------------------------------------
    +
    +**Step 5.  Averaging \(Q\)**  
    +
    +Put the circle’s total length as \(4d\) with a quadrant length \(d=\pi/2\).
    +Write the clockwise length as a multiple of \(d\): \(t=L/d\in[0,4]\).
    +
    +For a fixed \(t\) and a uniformly random starting point of the arc,
    +the expected value of \(\sum_i (L_i^{(1)})^{2}\) (the sum of squares of the pieces of the arc) is
    +
    +\[
    +h(t)=
    +\begin{cases}
    +t^{2}-\dfrac{t^{3}}{3}, & 0\le t\le 1,\\[4pt]
    +t-\dfrac13,               & 1\le t\le 4 .
    +\end{cases}
    +\]
    +
    +Consequently  
    +
    +\[
    +E\!\left[\sum_i L_i^{(1)}L_i^{(2)}\right]
    +      =\frac{\pi}{2}E[L]-E\!\left[\sum_i(L_i^{(1)})^{2}\right]
    +      =\frac{\pi^{2}}{2}-\frac{27\pi^{2}}{64}
    +      =\frac{5\pi^{2}}{64}.
    +\]
    +
    +From this we obtain the unconditional expectation
    +
    +\[
    +E[Q]=E\!\bigl[L(2\pi-L)\bigr]-E\!\Bigl[\sum_i L_i^{(1)}L_i^{(2)}\Bigr]
    +      =\frac{2}{3}\pi^{2}-\frac{5}{64}\pi^{2}
    +      =\frac{113}{192}\pi^{2}.
    +\tag{2}
    +\]
    +
    +---------------------------------------------------------------------
    +
    +**Step 6.  Conditioning on “different quadrants’’ for the first chord**
    +
    +If the first chord’s endpoints lie in the *same* quadrant (probability \(1/4\)),
    +then \(Q\) simplifies to \(Q=\frac{3\pi}{2}L\).  
    +Because the absolute difference of two points inside a quadrant has mean \(d/3=\pi/6\),
    +
    +\[
    +E[Q\mid\text{same quadrant}]=\frac{3\pi}{2}\cdot\frac{\pi}{6}
    +                              =\frac{\pi^{2}}{4}.
    +\]
    +
    +Hence  
    +
    +\[
    +E[Q\;{\bf 1}_{\text{different quadrants}}]
    +   =E[Q]-\frac14\cdot\frac{\pi^{2}}{4}
    +   =\frac{113}{192}\pi^{2}-\frac{\pi^{2}}{16}
    +   =\frac{101}{192}\pi^{2}. \tag{3}
    +\]
    +
    +---------------------------------------------------------------------
    +
    +**Step 7.  Probability that two *valid* chords intersect**
    +
    +From (1) and (3),
    +
    +\[
    +\boxed{
    +P(\text{intersection } \&\; AB\text{ valid}\; \&\; CD\text{ valid})
    +    =\frac{E[Q\,{\bf 1}_{\text{different quadrants}}]}{2\pi^{2}}
    +    =\frac{101}{384}.
    +}
    +\]
    +
    +The event “both chords are valid’’ occurs with probability \((3/4)^{2}=9/16\).  
    +Therefore the conditional probability that two random valid chords intersect is
    +
    +\[
    +P_{\text{int}}=
    +\frac{101/384}{9/16}= \frac{101}{216}\approx0.4676.
    +\tag{4}
    +\]
    +
    +---------------------------------------------------------------------
    +
    +**Step 8.  Expected number of chord–chord intersections**
    +
    +\[
    +E[I_{\text{chord–chord}}]
    +   =\binom{25}{2}\;P_{\text{int}}
    +   =300\cdot\frac{101}{216}
    +   =\frac{2525}{18}.
    +\]
    +
    +---------------------------------------------------------------------
    +
    +**Step 9.  Total expected interior intersections**
    +
    +\[
    +\begin{aligned}
    +E[I] &=
    +\underbrace{1}_{\text{diameters}}+
    +\underbrace{\frac{100}{3}}_{\text{chord–diameter}}+
    +\underbrace{\frac{2525}{18}}_{\text{chord–chord}} \\[4pt]
    +&= \frac{18+600+2525}{18}
    +   =\frac{3143}{18}.
    +\end{aligned}
    +\]
    +
    +---------------------------------------------------------------------
    +
    +**Step 10.  Expected number of regions**
    +
    +\[
    +\begin{aligned}
    +E[\#\text{regions}]
    +&=1+(\#\text{segments})+E[I] \\
    +&=1+27+\frac{3143}{18}\\[4pt]
    +&=28+\frac{3143}{18}
    +   =\frac{504+3143}{18}
    +   =\boxed{\frac{3647}{18}}\; \approx 202.6 .
    +\end{aligned}
    +\]
    +
    +Thus, on average Alex’s 27 line segments partition the disk into \(\displaystyle \frac{3647}{18}\) regions.
    +
    +
    +

    Results

    +

    Correct Answer: 204

    +

    Extracted Answer: None

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +12x^{2}-xy-6y^{2}=0
    +\]
    +
    +---
    +
    +### 1.  Factor the quadratic  
    +
    +Look for integers \(a,b,c,d\) such that  
    +
    +\[
    +(ax+by)(cx+dy)=12x^{2}-xy-6y^{2}.
    +\]
    +
    +We need  
    +
    +\[
    +ac=12,\qquad bd=-6,\qquad ad+bc=-1 .
    +\]
    +
    +Taking \(a=4,\;c=3\) (since \(4\cdot 3=12\)) and trying \(b=-3,\;d=2\) gives  
    +
    +\[
    +bd=(-3)(2)=-6,\qquad ad+bc=4\cdot2+3\cdot(-3)=8-9=-1.
    +\]
    +
    +Hence  
    +
    +\[
    +12x^{2}-xy-6y^{2}=(4x-3y)(3x+2y).
    +\]
    +
    +So the original equation is equivalent to  
    +
    +\[
    +(4x-3y)(3x+2y)=0.
    +\]
    +
    +Thus any integer solution must satisfy one of the two linear equations  
    +
    +\[
    +\boxed{4x-3y=0}\qquad\text{or}\qquad\boxed{3x+2y=0}.
    +\]
    +
    +---
    +
    +### 2.  Solve each linear equation in integers  
    +
    +**(i) \(4x-3y=0\).**  
    +
    +\(4x=3y\Rightarrow y= \frac{4}{3}x\).  
    +Since \(\gcd(4,3)=1\), write \(x=3k,\;y=4k\) for some integer \(k\).
    +
    +Both coordinates must satisfy \(-100\le x,y\le 100\):
    +
    +\[
    +-100\le 3k\le 100 \Longrightarrow -\frac{100}{3}\le k\le \frac{100}{3},
    +\qquad
    +-100\le 4k\le 100 \Longrightarrow -25\le k\le 25.
    +\]
    +
    +The tighter bound is \(-25\le k\le 25\).  
    +Hence there are  
    +
    +\[
    +25-(-25)+1 = 51
    +\]
    +
    +solutions from this family.
    +
    +---
    +
    +**(ii) \(3x+2y=0\).**  
    +
    +\(3x=-2y\Rightarrow x=-\frac{2}{3}y\).  
    +Again \(\gcd(3,2)=1\), so write \(y=3m,\;x=-2m\) for some integer \(m\).
    +
    +Bounds:
    +
    +\[
    +-100\le -2m\le 100 \Longrightarrow -50\le m\le 50,
    +\qquad
    +-100\le 3m\le 100 \Longrightarrow -\frac{100}{3}\le m\le \frac{100}{3}
    +\Longrightarrow -33\le m\le 33.
    +\]
    +
    +Thus \(-33\le m\le 33\), giving  
    +
    +\[
    +33-(-33)+1 = 67
    +\]
    +
    +solutions from this family.
    +
    +---
    +
    +### 3.  Remove the double‑counted solution  
    +
    +The two families intersect only when both equations hold, i.e. when  
    +
    +\[
    +4x-3y=0\;\text{and}\;3x+2y=0\Longrightarrow (x,y)=(0,0).
    +\]
    +
    +So \((0,0)\) has been counted twice.  
    +
    +Total distinct ordered pairs:
    +
    +\[
    +51+67-1 = 117.
    +\]
    +
    +---
    +
    +\[
    +\boxed{117}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 117

    +

    Extracted Answer: 117

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ \triangle ABC $ be a right triangle with $ \angle A = 90^\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \sqrt{3} $ for some positive integer $ n $. Find $ n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +A=(0,0),\qquad B=(b,0),\qquad C=(0,c)
    +\]
    +
    +with \(\angle A=90^{\circ}\) and \(BC=38\Rightarrow b^{2}+c^{2}=38^{2}=1444\).
    +
    +---
    +
    +### 1.  Locating \(K\) and \(L\)
    +
    +\(AK=BK=14\).  
    +The circles \(\odot(A,14)\) and \(\odot(B,14)\) intersect at the interior point  
    +
    +\[
    +K=\Bigl(\frac b2,\; \sqrt{196-\Bigl(\frac b2\Bigr)^2}\Bigr).
    +\]
    +
    +Similarly \(AL=CL=14\) gives  
    +
    +\[
    +L=\Bigl(\sqrt{196-\Bigl(\frac c2\Bigr)^2},\; \frac c2\Bigr).
    +\]
    +
    +Since \(AK=AL=KL=14\), points \(A,K,L\) form an equilateral triangle.
    +Put  
    +
    +\[
    +K=(14\cos\theta,14\sin\theta),\qquad 
    +L=(14\cos(\theta+60^\circ),14\sin(\theta+60^\circ)).
    +\]
    +
    +Using \(BK=14\) and \(CL=14\),
    +
    +\[
    +b=28\cos\theta,\qquad c=28\sin(\theta+60^\circ). \tag{1}
    +\]
    +
    +---
    +
    +### 2.  Determining \(\theta\)
    +
    +From \(b^2+c^2=1444\),
    +
    +\[
    +\cos^{2}\theta+\sin^{2}(\theta+60^\circ)=\frac{1444}{28^{2}}
    +        =\frac{361}{196}=\Bigl(\frac{19}{14}\Bigr)^{2}.
    +\]
    +
    +Using \(\cos^2x=\frac{1+\cos2x}{2},\ \sin^2x=\frac{1-\cos2x}{2}\),
    +
    +\[
    +\frac{2+\cos2\theta-\cos(2\theta+120^\circ)}2
    +      =\frac{361}{196}.
    +\]
    +
    +Simplifying gives  
    +
    +\[
    +\cos2\theta-\cos(2\theta+120^\circ)=\frac{165}{98}.
    +\]
    +
    +Since \(\cos A-\cos B=-2\sin\frac{A+B}{2}\sin\frac{A-B}{2}\),
    +
    +\[
    +\sqrt3\sin(2\theta+60^\circ)=\frac{165}{98}
    +   \Longrightarrow \sin(2\theta+60^\circ)=\frac{55\sqrt3}{98}.
    +\]
    +
    +Hence  
    +
    +\[
    +\cos(2\theta+60^\circ)=\frac{23}{98},\qquad 
    +\sin(2\theta+60^\circ)=\frac{55\sqrt3}{98}.
    +\]
    +
    +Let \(\phi=2\theta+60^\circ\). Then
    +
    +\[
    +\cos\phi=\frac{23}{98},\qquad \sin\phi=\frac{55\sqrt3}{98}.
    +\]
    +
    +Compute \(\cos(\phi-60^\circ)\) and \(\cos(\phi+60^\circ)\):
    +
    +\[
    +\cos(\phi-60^\circ)=\frac{47}{49},\qquad
    +\cos(\phi+60^\circ)=-\frac{71}{98}.
    +\]
    +
    +Now
    +
    +\[
    +\cos\theta=\sqrt{\frac{1+\cos(\phi-60^\circ)}2}
    +          =\sqrt{\frac{1+\frac{47}{49}}2}
    +          =\sqrt{\frac{48}{49}}=\frac{4\sqrt3}{7},
    +\]
    +
    +\[
    +\sin(\theta+60^\circ)=\sqrt{\frac{1-\cos(\phi+60^\circ)}2}
    +                     =\sqrt{\frac{1+\frac{71}{98}}2}
    +                     =\sqrt{\frac{169}{196}}=\frac{13}{14}.
    +\]
    +
    +Using (1),
    +
    +\[
    +b=28\cos\theta=28\cdot\frac{4\sqrt3}{7}=16\sqrt3,
    +\qquad
    +c=28\sin(\theta+60^\circ)=28\cdot\frac{13}{14}=26.
    +\]
    +
    +Thus  
    +
    +\[
    +AB=16\sqrt3,\qquad AC=26,\qquad BC=38.
    +\]
    +
    +Consequently  
    +
    +\[
    +K=\Bigl(\frac{b}{2},\sqrt{196-\Bigl(\frac b2\Bigr)^2}\Bigr)
    +  =\bigl(8\sqrt3,\;2\bigr),\qquad
    +L=\Bigl(\sqrt{196-\Bigl(\frac c2\Bigr)^2},\frac c2\Bigr)
    +  =\bigl(3\sqrt3,\;13\bigr).
    +\]
    +
    +---
    +
    +### 3.  Area of \(BKLC\)
    +
    +Using the shoelace formula for vertices  
    +
    +\[
    +B=(16\sqrt3,0),\; K=(8\sqrt3,2),\; L=(3\sqrt3,13),\; C=(0,26),
    +\]
    +
    +\[
    +\begin{aligned}
    +\sum x_iy_{i+1}&=16\sqrt3\cdot2+8\sqrt3\cdot13+3\sqrt3\cdot26+0\cdot0\\
    +               &=214\sqrt3,\\[2mm]
    +\sum y_ix_{i+1}&=0\cdot8\sqrt3+2\cdot3\sqrt3+13\cdot0+26\cdot16\sqrt3\\
    +               &=422\sqrt3.
    +\end{aligned}
    +\]
    +
    +Hence
    +
    +\[
    +\text{Area}(BKLC)=\frac12|214\sqrt3-422\sqrt3|=104\sqrt3.
    +\]
    +
    +---
    +
    +Thus the area of \(BKLC\) is \(104\sqrt3\), so  
    +
    +\[
    +\boxed{104}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 104

    +

    Extracted Answer: 104

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +An isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \neq s$. Find $r^{2}+s^{2}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the trapezoid have parallel sides (bases) \(r\) and \(s\) \((r\neq s)\), the equal legs \(L\), and height \(h\).
    +
    +---
    +
    +### 1.  Height from the incircle  
    +
    +The circle of radius \(3\) is tangent to the two parallel sides, so the distance between those sides equals the sum of the distances from the centre to each side:
    +
    +\[
    +h = 3+3 = 6 .
    +\]
    +
    +---
    +
    +### 2.  Sum of the bases from the area  
    +
    +\[
    +\text{Area}= \frac{r+s}{2}\,h = 72
    +\quad\Longrightarrow\quad
    +\frac{r+s}{2}\cdot 6 = 72 \implies r+s = 24 .
    +\]
    +
    +---
    +
    +### 3.  Relation of the legs (tangential quadrilateral)  
    +
    +A quadrilateral has an incircle iff the sums of opposite sides are equal.  
    +For the trapezoid the opposite sides are the two bases and the two legs, so
    +
    +\[
    +r+s = L+L \;\Longrightarrow\; L =\frac{r+s}{2}=12 .
    +\]
    +
    +Thus each leg has length \(L=12\).
    +
    +---
    +
    +### 4.  Difference of the bases from the leg length  
    +
    +Because the trapezoid is isosceles, each leg together with the height forms a right triangle whose horizontal leg is \(\dfrac{|s-r|}{2}\):
    +
    +\[
    +L^{2}=h^{2}+ \left(\frac{s-r}{2}\right)^{2}.
    +\]
    +
    +Insert \(L=12,\;h=6\):
    +
    +\[
    +12^{2}=6^{2}+ \left(\frac{s-r}{2}\right)^{2}
    +\Longrightarrow 144-36 = \left(\frac{s-r}{2}\right)^{2}
    +\Longrightarrow \left(\frac{s-r}{2}\right)^{2}=108.
    +\]
    +
    +Hence  
    +
    +\[
    +|s-r| = 2\sqrt{108}=12\sqrt3 .
    +\]
    +
    +Assume \(s>r\); then \(s-r=12\sqrt3\).
    +
    +---
    +
    +### 5.  Solve for \(r\) and \(s\)
    +
    +\[
    +\begin{cases}
    +r+s = 24,\\
    +s-r = 12\sqrt3.
    +\end{cases}
    +\qquad\Longrightarrow\qquad
    +\begin{aligned}
    +s &= 12+6\sqrt3,\\
    +r &= 12-6\sqrt3.
    +\end{aligned}
    +\]
    +
    +---
    +
    +### 6.  Compute \(r^{2}+s^{2}\)
    +
    +\[
    +\begin{aligned}
    +r^{2}+s^{2} &= (12-6\sqrt3)^{2}+(12+6\sqrt3)^{2} \\
    +&= \bigl(144-144\sqrt3+108\bigr)+\bigl(144+144\sqrt3+108\bigr) \\
    +&= 252-144\sqrt3+252+144\sqrt3 \\
    +&= 504.
    +\end{aligned}
    +\]
    +
    +---
    +
    +\[
    +\boxed{504}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 504

    +

    Extracted Answer: 504

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For an 8‑digit number using each of the digits \(1,2,\dots ,8\) exactly once  
    +
    +\[
    +22=2\cdot11
    +\]
    +
    +so the number must be divisible by \(2\) **and** by \(11\).
    +
    +---
    +
    +### 1.  Divisibility by \(2\)
    +
    +The units digit must be even, i.e. one of \(\{2,4,6,8\}\).
    +
    +---
    +
    +### 2.  Divisibility by \(11\)
    +
    +For an 8‑digit number \(a_1a_2\ldots a_8\),
    +
    +\[
    +(a_1+a_3+a_5+a_7)-(a_2+a_4+a_6+a_8)\equiv 0\pmod{11}.
    +\]
    +
    +Let  
    +
    +\[
    +S_{\text{odd}}=a_1+a_3+a_5+a_7,\qquad 
    +S_{\text{even}}=a_2+a_4+a_6+a_8 .
    +\]
    +
    +Since the digits \(1\) through \(8\) sum to \(36\),
    +
    +\[
    +S_{\text{odd}}+S_{\text{even}}=36\qquad\text{and}\qquad 
    +S_{\text{odd}}-S_{\text{even}}\equiv0\pmod{11}.
    +\]
    +
    +Thus  
    +
    +\[
    +2S_{\text{odd}}\equiv36\equiv3\pmod{11}\Longrightarrow
    +S_{\text{odd}}\equiv7\pmod{11}.
    +\]
    +
    +The possible values of \(S_{\text{odd}}\) (sum of four distinct digits from \(1\)–\(8\)) lie between \(10\) and \(26\).  
    +The only value in this interval congruent to \(7\pmod{11}\) is \(18\).
    +
    +Hence
    +
    +\[
    +S_{\text{odd}}=S_{\text{even}}=18 .
    +\]
    +
    +So the four digits placed in the odd positions must sum to \(18\).
    +
    +---
    +
    +### 3.  4‑digit subsets with sum \(18\)
    +
    +All 4‑element subsets of \(\{1,\dots ,8\}\) whose sum is \(18\) are  
    +
    +\[
    +\begin{aligned}
    +&\{1,2,7,8\},\; \{1,3,6,8\},\; \{1,4,5,8\},\; \{1,4,6,7\},\\
    +&\{2,3,5,8\},\; \{2,3,6,7\},\; \{2,4,5,7\},\; \{3,4,5,6\}.
    +\end{aligned}
    +\]
    +
    +There are exactly \(8\) such subsets.  
    +Each contains **exactly two even digits** (the even digits are \(2,4,6,8\)).
    +
    +---
    +
    +### 4.  Arranging the digits
    +
    +* Choose one of the 8 subsets for the odd positions.
    +* Permute its four digits among the odd places \((1,3,5,7)\) – \(4! = 24\) ways.
    +* The remaining four digits occupy the even places \((2,4,6,8)\).  
    +
    +  The units place (position 8) must be even.  
    +  Since the complementary set also has exactly two even digits, we may
    +  \[
    +  \text{choose the even digit for position 8 in }2\text{ ways,}
    +  \]
    +  then arrange the other three digits in positions \(2,4,6\) in \(3! = 6\) ways.
    +
    +Hence for a given subset the number of valid permutations is  
    +
    +\[
    +24 \times (2 \times 6)=24 \times 12 = 288 .
    +\]
    +
    +With \(8\) possible subsets,
    +
    +\[
    +N = 8 \times 288 = 2304 .
    +\]
    +
    +---
    +
    +### 5.  Required difference
    +
    +\[
    +N-2025 = 2304-2025 = 279 .
    +\]
    +
    +\[
    +\boxed{279}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 279

    +

    Extracted Answer: 279

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\sqrt{-1}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The first equation  
    +
    +\[
    +|25+20i-z|=5
    +\]
    +
    +describes the circle  
    +
    +\[
    +\text{Center }C=(25,20),\qquad\text{radius }R=5 .
    +\]
    +
    +The second equation  
    +
    +\[
    +|z-4-k|=|z-3i-k|
    +\]
    +
    +states that the distance from \(z\) to the point  
    +
    +\[
    +A=4+k\;(=k+4+0i)
    +\]
    +
    +equals its distance to the point  
    +
    +\[
    +B=3i+k\;(=k+0i+3i).
    +\]
    +
    +Hence the locus of points satisfying the second condition is the **perpendicular bisector** of the segment \(\overline{AB}\).
    +
    +---
    +
    +### 1.  Equation of the perpendicular bisector
    +
    +Coordinates:
    +
    +\[
    +A=(k+4,0),\qquad B=(k,3).
    +\]
    +
    +Midpoint  
    +
    +\[
    +M=\Big(\frac{k+4+k}{2},\frac{0+3}{2}\Big)=\Big(k+2,\frac32\Big).
    +\]
    +
    +Slope of \(\overline{AB}\):
    +
    +\[
    +\frac{3-0}{k-(k+4)}=\frac{3}{-4}=-\frac34 .
    +\]
    +
    +Therefore the slope of the perpendicular bisector is the negative reciprocal,
    +
    +\[
    +m=\frac{4}{3}.
    +\]
    +
    +Using point–slope form through \(M\):
    +
    +\[
    +y-\frac32=\frac{4}{3}(x-(k+2)).
    +\]
    +
    +Multiplying by \(6\),
    +
    +\[
    +6y-9=8x-8k-16\qquad\Longrightarrow\qquad 8x-6y=8k+7.
    +\]
    +
    +Thus the line is  
    +
    +\[
    +L:\;8x-6y=8k+7 .
    +\]
    +
    +---
    +
    +### 2.  Tangency condition
    +
    +The system has **exactly one** solution \(z\) when the line \(L\) is tangent to the circle.  
    +The distance from the center \(C=(25,20)\) to \(L\) must equal the radius \(5\).
    +
    +For a line \(Ax+By+C=0\), the distance from \((x_0,y_0)\) is  
    +
    +\[
    +d=\frac{|Ax_0+By_0+C|}{\sqrt{A^2+B^2}} .
    +\]
    +
    +Write \(L\) as \(8x-6y-(8k+7)=0\). Then
    +
    +\[
    +d=\frac{|8\cdot25-6\cdot20-(8k+7)|}{\sqrt{8^2+(-6)^2}}
    +   =\frac{|200-120-8k-7|}{\sqrt{64+36}}
    +   =\frac{|73-8k|}{10}.
    +\]
    +
    +Set \(d=R=5\):
    +
    +\[
    +\frac{|73-8k|}{10}=5 \;\Longrightarrow\; |73-8k|=50 .
    +\]
    +
    +Hence  
    +
    +\[
    +73-8k=50 \quad\text{or}\quad 73-8k=-50.
    +\]
    +
    +Solving:
    +
    +\[
    +\begin{aligned}
    +73-8k=50 &\Rightarrow 8k=23 \Rightarrow k=\frac{23}{8},\\[2mm]
    +73-8k=-50 &\Rightarrow 8k=123 \Rightarrow k=\frac{123}{8}.
    +\end{aligned}
    +\]
    +
    +Both values give a line tangent to the circle, so the system has exactly one complex solution for each.
    +
    +---
    +
    +### 3.  Sum of all possible \(k\)
    +
    +\[
    +\frac{23}{8}+\frac{123}{8}=\frac{146}{8}=\frac{73}{4}.
    +\]
    +
    +Write \(\frac{73}{4}\) as \(\frac{m}{n}\) with \(\gcd(m,n)=1\); here \(m=73,\;n=4\).
    +
    +\[
    +m+n=73+4=77.
    +\]
    +
    +\[
    +\boxed{77}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 77

    +

    Extracted Answer: 77

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let the sequence of rationals $ x_1, x_2, \ldots $ be defined such that $ x_1 = \frac{25}{11} $ and
    +$ x_{k+1} = \frac{1}{3} \left( x_k + \frac{1}{x_k} - 1 \right). $
    +$ x_{2025} $ can be expressed as $ \frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The recurrence  
    +
    +\[
    +x_{k+1}= \frac{1}{3}\Bigl(x_k+\frac{1}{x_k}-1\Bigr)
    +\]
    +
    +can be rewritten as  
    +
    +\[
    +x_{k+1}= \frac{x_k^2-x_k+1}{3x_k}.
    +\]
    +
    +---
    +
    +### 1.  A convenient change of variables  
    +
    +Define  
    +
    +\[
    +t_k=\frac{2x_k-1}{x_k+1}\qquad\Longleftrightarrow\qquad 
    +x_k=\frac{b_k+a_k}{2b_k-a_k},
    +\]
    +
    +where \(a_k,b_k\) are integers defined below.  
    +
    +From the definition  
    +
    +\[
    +t_{k+1}=t_k\bigl(t_k-1\bigr),\qquad t_1=\frac{13}{12}.
    +\]
    +
    +---
    +
    +### 2.  Integer sequences  
    +
    +Write \(t_k=\dfrac{a_k}{b_k}\) in lowest terms.  
    +From \(t_{k+1}=t_k(t_k-1)\) we obtain  
    +
    +\[
    +a_{k+1}=a_k\bigl(a_k-b_k\bigr),\qquad  
    +b_{k+1}=b_k^2,\qquad a_1=13,\;b_1=12 .
    +\]
    +
    +Thus  
    +
    +\[
    +b_k=12^{\,2^{\,k-1}} .
    +\]
    +
    +Because \(a_k\) is always odd and not a multiple of \(3\), \(\gcd(a_k,b_k)=1\) for all \(k\).
    +
    +---
    +
    +### 3.  Expressing \(x_k\)  
    +
    +Using \(x_k=\dfrac{b_k+a_k}{2b_k-a_k}\) we get  
    +
    +\[
    +m_k=b_k+a_k,\qquad n_k=2b_k-a_k,
    +\]
    +so that  
    +
    +\[
    +m_k+n_k = (b_k+a_k)+(2b_k-a_k)=3b_k .
    +\]
    +
    +Hence for any \(k\),
    +
    +\[
    +m_k+n_k = 3\cdot 12^{\,2^{\,k-1}} .
    +\]
    +
    +---
    +
    +### 4.  The required term  
    +
    +For \(k=2025\),
    +
    +\[
    +m+n = 3\cdot 12^{\,2^{\,2024}} .
    +\]
    +
    +We need this number modulo \(1000\).
    +
    +---
    +
    +### 5.  Computing \(3\cdot12^{2^{2024}}\pmod{1000}\)
    +
    +Since \(1000=8\cdot125\), work modulo \(8\) and \(125\).
    +
    +*Modulo 8*: \(12\equiv4\pmod8\) and \(4^2\equiv0\pmod8\); with exponent \(2^{2024}>1\),
    +
    +\[
    +12^{2^{2024}}\equiv0\pmod8\Longrightarrow
    +3\cdot12^{2^{2024}}\equiv0\pmod8 .
    +\]
    +
    +*Modulo 125*: \(\gcd(12,125)=1\), \(\phi(125)=100\).  
    +Reduce the exponent modulo 100:
    +
    +\[
    +2^{2024}\equiv 2^{4}=16\pmod{100}
    +\]
    +(because \(2^{2024}\equiv16\pmod{100}\)).  
    +Hence  
    +
    +\[
    +12^{2^{2024}}\equiv12^{16}\pmod{125}.
    +\]
    +
    +Compute:
    +\[
    +12^2\equiv19,\quad
    +12^4\equiv19^2\equiv111,\quad
    +12^8\equiv111^2\equiv71,\quad
    +12^{16}\equiv71^2\equiv41\pmod{125}.
    +\]
    +
    +Thus  
    +
    +\[
    +3\cdot12^{2^{2024}}\equiv3\cdot41=123\pmod{125}.
    +\]
    +
    +Now solve  
    +
    +\[
    +R\equiv0\pmod8,\qquad R\equiv123\pmod{125}.
    +\]
    +
    +Write \(R=125a+123\). Mod 8:
    +
    +\[
    +125a+123\equiv5a+3\equiv0\pmod8\Longrightarrow5a\equiv5\pmod8
    +\Longrightarrow a\equiv1\pmod8.
    +\]
    +
    +Take \(a=1\); then \(R=125\cdot1+123=248\).
    +
    +Hence  
    +
    +\[
    +m+n\equiv 248 \pmod{1000}.
    +\]
    +
    +---
    +
    +\[
    +\boxed{248}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 248

    +

    Extracted Answer: 248

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +On $\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +AD=4,\; DE=16,\; EB=8,\qquad AF=13,\; FG=52,\; GC=26 .
    +\]
    +
    +Hence  
    +
    +\[
    +AB=4+16+8=28,\qquad AC=13+52+26=91 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Coordinates
    +
    +Place \(A=(0,0),\; B=(28,0)\) and let the height of \(\triangle ABC\) be \(h\).  
    +Write \(C=(x,h)\) (the \(x\)‑coordinate is unknown).
    +
    +Points on the sides are then  
    +
    +\[
    +\begin{aligned}
    +D&=(4,0),   &E&=(20,0), \\
    +F&=\Bigl(\frac{13}{91}x,\;\frac{13}{91}h\Bigr), &
    +G&=\Bigl(\frac{65}{91}x,\;\frac{65}{91}h\Bigr).
    +\end{aligned}
    +\]
    +
    +Since \(M\) is the reflection of \(D\) about \(F\),
    +
    +\[
    +M=2F-D=\Bigl(\frac{26}{91}x-4,\;\frac{26}{91}h\Bigr),
    +\]
    +
    +and because \(N\) is the reflection of \(G\) about \(E\),
    +
    +\[
    +N=2E-G=\Bigl(40-\frac{65}{91}x,\;-\frac{65}{91}h\Bigr).
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Height from the given area
    +
    +Quadrilateral \(DEGF\) consists of triangles \(DEG\) and \(DFG\).  
    +Its area is
    +
    +\[
    +\begin{aligned}
    +[DEGF]&=\frac12\Bigl[\,DE\cdot G_y
    +      +|\,\overrightarrow{DF}\times\overrightarrow{DG}\,|\,\Bigr]\\[2mm]
    +     &=\frac{h}{2\cdot91}\Bigl(16\cdot65+4\cdot52\Bigr)
    +      =\frac{1248}{182}\,h
    +      =\frac{624}{91}\,h .
    +\end{aligned}
    +\]
    +
    +Given \([DEGF]=288\),
    +
    +\[
    +\frac{624}{91}\,h=288\quad\Longrightarrow\quad h=42 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Area of \(\triangle ABC\)
    +
    +\[
    +[ABC]=\frac12\cdot AB\cdot h
    +      =\frac12\cdot28\cdot42
    +      =588 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Area of the heptagon \(AFNBCEM\)
    +
    +Use the shoelace formula with the vertices in the order  
    +
    +\[
    +A,\;F,\;N,\;B,\;C,\;E,\;M .
    +\]
    +
    +Because the \(x\)-coordinate \(x\) of \(C\) appears only in the
    +terms \(x\,h\) and they cancel each other, the sum reduces to  
    +
    +\[
    +\begin{aligned}
    +S&=2\bigl( -\tfrac{2\cdot13}{91} (4+16)h
    +          + (4+16+8)h
    +          + (4+16+8)h
    +          - (4+16)h \bigr) \\
    +  &=2\cdot 28h .
    +\end{aligned}
    +\]
    +
    +Hence
    +
    +\[
    +[AFNBCEM]=\frac12 S = \frac12\cdot28h = [ABC]=588 .
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{588}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 588

    +

    Extracted Answer: 588

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The parabola with equation $y=x^{2}-4$ is rotated $60^{\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\frac{a-\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The original parabola is  
    +
    +\[
    +y=x^{2}-4 .
    +\]
    +
    +Rotate it \(60^{\circ}\) counter‑clockwise about the origin.  
    +If \((X,Y)\) is a point on the rotated parabola, then rotating it back
    +\(60^{\circ}\) (clockwise) must put it on the original parabola:
    +
    +\[
    +\begin{aligned}
    +x &= X\cos60^{\circ}+Y\sin60^{\circ},\\
    +y &=-X\sin60^{\circ}+Y\cos60^{\circ},
    +\end{aligned}
    +\qquad\text{with }\;y=x^{2}-4 .
    +\]
    +
    +Using \(\cos60^{\circ}= \tfrac12,\; \sin60^{\circ}= \tfrac{\sqrt3}{2}\),
    +
    +\[
    +-\,\frac{\sqrt3}{2}X+\frac12Y= \Bigl(\frac12X+\frac{\sqrt3}{2}Y\Bigr)^{2}-4 .
    +\tag{1}
    +\]
    +
    +The original parabola gives \(Y=X^{2}-4\). Substituting this into (1) and
    +clearing denominators yields
    +
    +\[
    +3X^{4}+2\sqrt3\,X^{3}-25X^{2}-6\sqrt3\,X+40=0 .
    +\tag{2}
    +\]
    +
    +The quartic factors over \(\mathbb{Q}(\sqrt3)\):
    +
    +\[
    +\bigl(X^{2}+\sqrt3\,X-4\bigr)\bigl(3X^{2}-\sqrt3\,X-10\bigr)=0 .
    +\]
    +
    +Hence the possible \(X\)-coordinates are the roots of the two quadratics.
    +
    +* From \(X^{2}+\sqrt3X-4=0\) :
    +
    +\[
    +X=\frac{-\sqrt3\pm\sqrt{19}}{2}.
    +\]
    +
    +The positive root is  
    +
    +\[
    +X_{0}= \frac{-\sqrt3+\sqrt{19}}{2}\approx1.31,
    +\]
    +
    +which satisfies \(0<X<2\); thus the point \((X_{0},Y_{0})\) lies in the
    +fourth quadrant.
    +
    +* The other quadratic \(3X^{2}-\sqrt3X-10=0\) gives \(X\approx2.14\) or
    +\(X\approx-1.56\), neither of which lies in the fourth quadrant.
    +
    +Therefore the unique fourth‑quadrant intersection comes from
    +\(X_{0}\).  For this root we have from the quadratic
    +
    +\[
    +X_{0}^{2}=4-\sqrt3 X_{0},
    +\qquad\text{so}\qquad
    +Y_{0}=X_{0}^{2}-4=-\sqrt3 X_{0}.
    +\]
    +
    +Thus
    +
    +\[
    +Y_{0}= -\sqrt3\left(\frac{-\sqrt3+\sqrt{19}}{2}\right)
    +     =\frac{3-\sqrt{57}}{2}.
    +\]
    +
    +The \(y\)-coordinate is \(\displaystyle\frac{a-\sqrt b}{c}\) with  
    +
    +\[
    +a=3,\qquad b=57,\qquad c=2.
    +\]
    +
    +Since \(\gcd(3,2)=1\), the conditions are satisfied.  
    +
    +\[
    +a+b+c=3+57+2=62.
    +\]
    +
    +\[
    +\boxed{62}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 62

    +

    Extracted Answer: 62

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +A piecewise linear periodic function is defined by $f(x)=\begin{cases}x&\text{if }x\in[-1,1)\\2-x&\text{if }x\in[1,3)\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\frac{a+b\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The periodic function  
    +
    +\[
    +f(x)=\begin{cases}
    +x,&x\in[-1,1)\\[2pt]
    +2-x,&x\in[1,3)
    +\end{cases},
    +\qquad f(x+4)=f(x)
    +\]
    +
    +has period \(4\).  
    +On each period write  
    +
    +\[
    +x=4k+u,\qquad u\in[-1,3),\ k\in\mathbb Z .
    +\]
    +
    +Then  
    +
    +\[
    +f(x)=\begin{cases}
    +u, & u\in[-1,1)\\[2pt]
    +2-u,&u\in[1,3)
    +\end{cases}.
    +\]
    +
    +The parabola is \(x=34y^{2}\;(x\ge 0,\;|y|\le 1)\).  
    +Set \(x=34y^{2}=4k+u\) with \(u\in[-1,3)\).  
    +The integer \(k\) is uniquely determined by  
    +
    +\[
    +\frac{34y^{2}-3}{4}<k\le\frac{34y^{2}+1}{4},
    +\]
    +
    +so for each \(y\) there is exactly one such \(k\).
    +
    +---
    +
    +### 1.  Rising part \((u\in[-1,1))\)
    +
    +Here \(y=u\).  Hence  
    +
    +\[
    +y=34y^{2}-4k\Longrightarrow 34y^{2}-y-4k=0.
    +\]
    +
    +For a fixed \(k\) the two roots are  
    +
    +\[
    +y_{R,k}^{\pm}= \frac{1\pm\sqrt{1+544k}}{68},
    +\qquad k=0,1,\dots ,8 .
    +\]
    +
    +Both lie in \([-1,1]\) for all these \(k\).  
    +Each pair sums to  
    +
    +\[
    +y_{R,k}^{+}+y_{R,k}^{-}= \frac1{34}.
    +\]
    +
    +Thus  
    +
    +\[
    +\sum_{k=0}^{8}\bigl(y_{R,k}^{+}+y_{R,k}^{-}\bigr)=\frac{9}{34}.
    +\]
    +
    +---
    +
    +### 2.  Falling part \((u\in[1,3))\)
    +
    +Here \(y=2-u\).  Hence  
    +
    +\[
    +y=2-(34y^{2}-4k)\Longrightarrow 34y^{2}+y-(4k+2)=0.
    +\]
    +
    +The roots are  
    +
    +\[
    +y_{D,k}^{\pm}= \frac{-1\pm\sqrt{273+544k}}{68},
    +\qquad k=0,1,\dots ,8 .
    +\]
    +
    +For \(k=0,\dots ,7\) both roots lie in \([-1,1]\); for \(k=8\) the
    +negative root is \(<-1\) and must be discarded.
    +Each admissible pair sums to  
    +
    +\[
    +y_{D,k}^{+}+y_{D,k}^{-}= -\frac1{34},
    +\]
    +
    +so for \(k=0,\dots ,7\)
    +
    +\[
    +\sum_{k=0}^{7}\bigl(y_{D,k}^{+}+y_{D,k}^{-}\bigr)= -\frac{8}{34}
    += -\frac{4}{17}.
    +\]
    +
    +The remaining root (the positive one for \(k=8\)) is  
    +
    +\[
    +y_{D,8}^{+}= \frac{-1+ \sqrt{273+544\cdot8}}{68}
    +          = \frac{-1+ \sqrt{4625}}{68}
    +          = \frac{-1+5\sqrt{185}}{68}.
    +\]
    +
    +---
    +
    +### 3.  Sum of all \(y\)-coordinates
    +
    +Adding the contributions,
    +
    +\[
    +\begin{aligned}
    +S &=\frac{9}{34}-\frac{4}{17}+\frac{-1+5\sqrt{185}}{68}\\[2pt]
    +  &=\frac{9}{34}-\frac{8}{34}+\frac{-1}{68}+\frac{5\sqrt{185}}{68}\\[2pt]
    +  &=\frac{1}{34}-\frac{1}{68}+\frac{5\sqrt{185}}{68}\\[2pt]
    +  &=\frac{1+5\sqrt{185}}{68}.
    +\end{aligned}
    +\]
    +
    +Thus the sum can be written as \(\displaystyle\frac{a+b\sqrt{c}}{d}\) with  
    +
    +\[
    +a=1,\qquad b=5,\qquad c=185,\qquad d=68,
    +\]
    +
    +where \(\gcd(a,b,d)=1\) and \(c\) is square‑free.
    +
    +Finally  
    +
    +\[
    +a+b+c+d=1+5+185+68=259.
    +\]
    +
    +\[
    +\boxed{259}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 259

    +

    Extracted Answer: 259

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\angle B=\angle E=60^\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The required sum is  
    +
    +\[
    +\min_{X\in \mathbb {R}^2}\bigl(AX+BX+CX+DX+EX\bigr)
    +=38+19\sqrt{3}.
    +\]
    +
    +Hence  
    +
    +\[
    +m=38,\qquad n=19,\qquad p=3,
    +\]
    +
    +and  
    +
    +\[
    +m+n+p=38+19+3=60.
    +\]
    +
    +\[
    +\boxed{60}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 60

    +

    Extracted Answer: 60

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 27 cells of a $3\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. 
    + | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | 
    + | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | 
    + | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | 
    + The number of different ways to fill such a grid can be written as $p^a\cdot q^b\cdot r^c\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\cdot a+q\cdot b+r\cdot c+s\cdot d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the rows be \(R_{1},R_{2},R_{3}\) and the three \(3\times3\) blocks be
    +\(B_{1},B_{2},B_{3}\) (columns \(1\!-\!3,\;4\!-\!6,\;7\!-\!9\)).
    +Each number \(x\in\{1,\dots ,9\}\) appears
    +
    +* once in each row,
    +* once in each block.
    +
    +Hence for a fixed number \(x\) the three occurrences give a bijection  
    +
    +\[
    +\sigma _x:\{R_1,R_2,R_3\}\longrightarrow \{B_1,B_2,B_3\},
    +\qquad 
    +\sigma_x(R_i)=\text{the block containing }x\text{ in row }R_i .
    +\]
    +
    +Thus \(\sigma_x\) is a permutation of \(\{1,2,3\}\).  
    +Conversely, any choice of a permutation \(\sigma_x\) for every \(x\) determines
    +which block each occurrence of \(x\) occupies.
    +
    +--------------------------------------------------------------------
    +### 1.  Counting the permutations \(\sigma_x\)
    +
    +Write a \(9\times3\) matrix whose rows are the six possible permutations of
    +\(\{1,2,3\}\):
    +
    +\[
    +\begin{array}{c}
    +123\\ 213\\ 321\\ 132\\ 231\\ 312
    +\end{array}
    +\]
    +
    +If a number receives a given permutation, that row of the matrix is placed in
    +the matrix of size \(9\times3\).  
    +Denote by \(x_i\;(i=1,\dots ,6)\) the number of numbers that receive the
    +\(i\)‑th permutation.  
    +
    +Row‑balance (each number uses each symbol once) is automatic; column‑balance
    +(because each block must contain exactly three numbers in each row) gives
    +
    +\[
    +\begin{aligned}
    +x_1+x_4&=3,\qquad x_2+x_5=3,\qquad x_3+x_6=3,\\
    +x_2+x_6&=3,\qquad x_1+x_3=3,\qquad x_4+x_5=3,
    +\end{aligned}
    +\]
    +
    +with \(\sum_{i=1}^6x_i=9\).
    +Solving gives a one‑parameter family
    +
    +\[
    +(x_1,x_2,x_3,x_4,x_5,x_6)=\bigl(3-t,\;t,\;t,\;t,\;3-t,\;3-t\bigr)
    +\qquad(t=0,1,2,3).
    +\]
    +
    +For a fixed \(t\) the numbers are assigned to the six permutation types in  
    +
    +\[
    +\frac{9!}{(t!)^3\bigl((3-t)!\bigr)^3}
    +\]
    +
    +ways.  Summing over the four possible values of \(t\),
    +
    +\[
    +N_{\sigma}= \frac{9!}{(3!)^3}+\frac{9!}{(1!)^3(2!)^3}
    +          +\frac{9!}{(2!)^3(1!)^3}+\frac{9!}{(3!)^3}
    +          =94\,080 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Placing the numbers inside the blocks
    +
    +Fix the block‑row distribution given by the \(\sigma_x\)’s.
    +In each block, a row contains exactly three different numbers.
    +These three numbers can be arranged in the three columns of the block in
    +\(3! = 6\) ways, independently for the three rows.
    +Hence each block offers \(6^{3}=216\) possibilities, and for the three blocks
    +
    +\[
    +N_{\text{cols}} = 6^{9}=10\,077\,696 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Total number of fillings
    +
    +\[
    +N = N_{\sigma}\,N_{\text{cols}}
    +   = 94\,080 \times 6^{9}
    +   = 948\,109\,639\,680 .
    +\]
    +
    +Prime factorising,
    +
    +\[
    +N = 2^{16}\cdot 3^{10}\cdot 5^{1}\cdot 7^{2}.
    +\]
    +
    +Thus we may take  
    +
    +\[
    +p=2,\;a=16,\qquad q=3,\;b=10,\qquad r=5,\;c=1,\qquad s=7,\;d=2 .
    +\]
    +
    +Finally,
    +
    +\[
    +p a+ q b+ r c+ s d
    += 2\cdot16 + 3\cdot10 + 5\cdot1 + 7\cdot2
    += 32+30+5+14 = 81 .
    +\]
    +
    +\[
    +\boxed{81}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 81

    +

    Extracted Answer: 81

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +\{A,B,\dots ,L\}= \{1,2,\dots ,12\}
    +\]
    +
    +and let a random pairing be a perfect matching of the 12 numbers.
    +For each pair \(\{a,b\}\;(a<b)\) we write the word \(ab\);  
    +the six words are then listed in alphabetical order.  
    +
    +--------------------------------------------------------------------
    +### 1.  What determines the last word?
    +
    +In each pair the smaller letter is written first, so the six words are
    +
    +\[
    +\{\,\underbrace{\text{smaller}}_{\text{first letter}},\ \text{larger}\,\}.
    +\]
    +
    +If we denote by  
    +
    +\[
    +S=\{\,\min\{a,b\}\mid\{a,b\}\text{ a pair}\,\},
    +\]
    +
    +then \(|S|=6\) and the last (lexicographically largest) word is the
    +pair whose **smaller** element is the largest element of \(S\).
    +
    +Hence the last word contains \(G\) iff the smaller element of the
    +pair containing \(G\) is the maximal element of \(S\).
    +
    +--------------------------------------------------------------------
    +### 2.  Condition on the partner of \(G\)
    +
    +Let the partner of \(G\;(=7)\) be \(j\neq7\).
    +
    +*If \(j>7\):* then the smaller element of the \(G\)–pair is \(7\).  
    +We need that every other pair have its smaller element \(\le 6\); i.e.
    +all the other five “smaller” letters must lie in \(\{1,\dots ,6\}\).
    +
    +*If \(j<7\):* then the smaller element of the \(G\)–pair is \(j\).  
    +We need that every other smaller element be \(<j\); consequently all
    +the remaining five smaller letters must be taken from \(\{1,\dots ,j-1\}\).
    +
    +--------------------------------------------------------------------
    +### 3.  Counting matchings that satisfy the condition
    +
    +After fixing the partner \(j\) we have 10 letters left.
    +Let  
    +
    +\[
    +L=\{\text{remaining letters }<j\},\qquad H=\{\text{remaining letters }\ge j\}.
    +\]
    +
    +The condition “no other pair has a smaller element \(\ge j\)” is
    +equivalent to **no pair joining two letters of \(H\)**; every element
    +of \(H\) must be paired with a distinct element of \(L\).
    +
    +If \(|L|=l\) and \(|H|=h\) (\(l+h=10\)), the number of perfect matchings
    +with no \(H\!-\!H\) pair is
    +
    +\[
    +\binom{l}{h}h!\,(l-h-1)!!\;,
    +\]
    +
    +where \((2k-1)!!=1\cdot3\cdots(2k-1)\).
    +The total number of matchings on 10 letters is \((10-1)!!=945\).
    +
    +---
    +
    +* **\(j>7\) (five possibilities)**  
    +  Here \(j\in\{8,9,10,11,12\}\).  
    +  We have \(L=\{1,\dots ,6\}\;(l=6),\ H=\) the four other numbers \(>7\)
    +  \((h=4)\).  
    +
    +  \[
    +  \frac{\binom{6}{4}4!\,(6-4-1)!!}{945}
    +  =\frac{15\cdot24\cdot1}{945}=\frac{8}{21}.
    +  \]
    +
    +* **\(j=6\)**  
    +  Then \(L=\{1,\dots ,5\},\ H=\{8,9,10,11,12\}\) (\(l=h=5\)).  
    +
    +  \[
    +  \frac{\binom{5}{5}5!\,(5-5-1)!!}{945}
    +  =\frac{5!}{945}=\frac{120}{945}=\frac{8}{63}.
    +  \]
    +
    +* **\(j=1,2,3,4,5\)**  
    +  In these cases \(h>l\); it is impossible to avoid an \(H\!-\!H\) pair,
    +  so the probability is \(0\).
    +
    +--------------------------------------------------------------------
    +### 4.  Assemble the total probability
    +
    +Each of the 11 possible partners of \(G\) is equally likely (\(1/11\)).
    +Therefore
    +
    +\[
    +\begin{aligned}
    +P(\text{last word contains }G)
    +&= \frac1{11}\Bigl(5\cdot\frac{8}{21}+\frac{8}{63}\Bigr)\\[2mm]
    +&= \frac1{11}\Bigl(\frac{120}{63}+\frac{8}{63}\Bigr)\\[2mm]
    +&= \frac{128}{693}.
    +\end{aligned}
    +\]
    +
    +The fraction \(\displaystyle\frac{128}{693}\) is already in lowest terms.
    +Hence  
    +
    +\[
    +m=128,\qquad n=693,\qquad m+n=821.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{821}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 821

    +

    Extracted Answer: 821

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +P(n)=3(n+3)(n^{2}+9).
    +\]
    +
    +We need all positive integers \(n\) for which  
    +
    +\[
    +n+2 \mid P(n).
    +\]
    +
    +---
    +
    +### 1. Work modulo \(n+2\)
    +
    +Write \(n\equiv -2 \pmod{\,n+2\,}\).  
    +Replace \(n\) by \(-2\) in the factors of \(P(n)\) (this gives the remainder of each factor modulo \(n+2\)):
    +
    +\[
    +\begin{aligned}
    +n+3 &\equiv (-2)+3 = 1 \pmod{n+2},\\[2mm]
    +n^{2}+9 &\equiv (-2)^{2}+9 = 4+9 = 13 \pmod{n+2}.
    +\end{aligned}
    +\]
    +
    +Hence
    +
    +\[
    +P(n)=3(n+3)(n^{2}+9)\equiv 3\cdot 1\cdot 13 = 39\pmod{n+2}.
    +\]
    +
    +---
    +
    +### 2. Condition for divisibility
    +
    +The requirement \(n+2\mid P(n)\) is equivalent to  
    +
    +\[
    +P(n)\equiv 0\pmod{n+2}\Longleftrightarrow 39\equiv 0\pmod{n+2}.
    +\]
    +
    +Thus  
    +
    +\[
    +n+2 \text{ must be a positive divisor of } 39.
    +\]
    +
    +The positive divisors of \(39\) are  
    +
    +\[
    +1,\;3,\;13,\;39.
    +\]
    +
    +Since \(n\) is a **positive** integer, \(n+2\ge 3\).  
    +Hence \(n+2\) can be only \(3,\;13,\;39\).
    +
    +---
    +
    +### 3. Corresponding values of \(n\)
    +
    +\[
    +\begin{array}{c|c}
    +n+2 & n \\ \hline
    +3   & 1\\
    +13  & 11\\
    +39  & 37
    +\end{array}
    +\]
    +
    +All three satisfy the original condition (a quick check confirms divisibility).
    +
    +---
    +
    +### 4. Sum of all such \(n\)
    +
    +\[
    +1+11+37 = 49.
    +\]
    +
    +\[
    +\boxed{49}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 49

    +

    Extracted Answer: 49

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Six points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \triangle BGE $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    We place the six collinear points on the \(x\)-axis.
    +
    +---
    +
    +### 1.  Determine the coordinates of \(A,B,C,D,E,F\)
    +
    +Let \(A=(0,0)\).  
    +Write the distances in terms of the unknown coordinate \(AB=x\).
    +
    +\[
    +\begin{aligned}
    +C&: AC=26 \quad\Longrightarrow\quad C=(26,0)\\
    +B&: AB=x \quad\Longrightarrow\quad B=(x,0)\\
    +D&: BD=22 \quad\Longrightarrow\quad D=(x+22,0)\\
    +E&: CE=31 \quad\Longrightarrow\quad E=(26+31,0)=(57,0)\\
    +F&: DF=33 \quad\Longrightarrow\quad F=(x+22+33,0)=(x+55,0)\\
    +\text{and }AF&=73 \Longrightarrow x+55=73 .
    +\end{aligned}
    +\]
    +
    +Hence \(x=18\). So  
    +
    +\[
    +A=0,\; B=18,\; C=26,\; D=40,\; E=57,\; F=73 .
    +\]
    +
    +These satisfy all given segment lengths.
    +
    +---
    +
    +### 2.  Locate point \(G\)
    +
    +Let \(G=(u,v)\) with \(v\neq 0\).  
    +From the given distances
    +
    +\[
    +\begin{cases}
    +(u-26)^2+v^2 = 40^2 =1600,\\[2pt]
    +(u-40)^2+v^2 = 30^2 = 900 .
    +\end{cases}
    +\]
    +
    +Subtract the second equation from the first:
    +
    +\[
    +(u-26)^2-(u-40)^2 = 700 .
    +\]
    +
    +Expanding,
    +
    +\[
    +(-52u+676)-(-80u+1600)=28u-924=700
    +\Longrightarrow 28u=1624\Longrightarrow u=58 .
    +\]
    +
    +Now find \(v\):
    +
    +\[
    +(58-26)^2+v^2=1600\Longrightarrow 32^2+v^2=1600
    +\Longrightarrow v^2=1600-1024=576 .
    +\]
    +
    +Thus \(|v|=24\).  Take \(v=24\) (the sign does not affect the area).  
    +
    +\[
    +\boxed{G=(58,24)} .
    +\]
    +
    +---
    +
    +### 3.  Area of \(\triangle BGE\)
    +
    +Points on the \(x\)-axis:
    +
    +\[
    +B=(18,0),\qquad E=(57,0).
    +\]
    +
    +The length of the base \(BE\) is
    +
    +\[
    +BE = 57-18 = 39 .
    +\]
    +
    +Since the line through \(B\) and \(E\) is the \(x\)-axis, the perpendicular distance from \(G\) to this line is \(|v|=24\).
    +
    +Hence
    +
    +\[
    +[\triangle BGE]=\frac12\,(BE)\cdot(\text{height})
    +               =\frac12\cdot 39\cdot 24
    +               =\frac{936}{2}=468 .
    +\]
    +
    +(Using the determinant formula also gives \(468\).)
    +
    +---
    +
    +\[
    +\boxed{468}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 468

    +

    Extracted Answer: 468

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The inequalities  
    +
    +\[
    +x-yz<y-zx<z-xy
    +\]
    +
    +can be rewritten by factoring:
    +
    +\[
    +\begin{aligned}
    +x-yz<y-zx &\iff (x-y)(1+z)<0,\\[2pt]
    +y-zx<z-xy &\iff (y-z)(1+x)<0 .
    +\end{aligned}
    +\]
    +
    +Since the points lie on the plane  
    +
    +\[
    +x+y+z=75\qquad\Longrightarrow\qquad z=75-x-y,
    +\]
    +
    +the two conditions become inequalities in the variables \(x,y\):
    +
    +\[
    +\begin{cases}
    +(x-y)\bigl(76-x-y\bigr)<0,\\[2pt]
    +\bigl(x+2y-75\bigr)(1+x)<0 .
    +\end{cases}
    +\tag{1}
    +\]
    +
    +---
    +
    +### 1.  Geometry of the half‑planes
    +
    +From (1)
    +
    +* \((x-y)(76-x-y)<0\) gives either  
    +
    +  \[
    +  \begin{cases}
    +  x>y,\;x+y>76 \quad\text{(region }A_1)\\
    +  \text{or}\\
    +  x<y,\;x+y<76 \quad\text{(region }A_2)
    +  \end{cases}
    +  \]
    +
    +* \((x+2y-75)(1+x)<0\) gives either  
    +
    +  \[
    +  \begin{cases}
    +  x<-1,\;x+2y>75 \quad\text{(region }B_1)\\
    +  \text{or}\\
    +  x>-1,\;x+2y<75 \quad\text{(region }B_2)
    +  \end{cases}
    +  \]
    +
    +The set of points satisfying both inequalities is the intersection of one of the
    +\(A_i\) with one of the \(B_j\).
    +
    +Checking the four possibilities:
    +
    +* \(A_1\cap B_1=\varnothing\) (impossible to have \(x>y\) and \(x<-1\) while
    +  \(x+y>76\)).
    +* \(A_1\cap B_2\) is non‑empty and unbounded (e.g. \(x>77\)).
    +* \(A_2\cap B_1\) is non‑empty and unbounded (e.g. \(x<-1\)).
    +* \(A_2\cap B_2\) is bounded.
    +
    +Thus there are three convex components: two infinite ones and one finite one,
    +the latter being \(A_2\cap B_2\).
    +
    +---
    +
    +### 2.  The finite region
    +
    +\(A_2\cap B_2\) is described by  
    +
    +\[
    +\begin{cases}
    +x>-1,\\
    +x<y,\\
    +x+2y<75 .
    +\end{cases}
    +\]
    +
    +From \(x+2y<75\) we have \(y<(75-x)/2\).  
    +Together with \(y>x\) we obtain
    +
    +\[
    +-1<x<25,\qquad x<y<\frac{75-x}{2}.
    +\]
    +
    +The three bounding lines intersect at
    +
    +\[
    +\begin{aligned}
    +x=-1 \ \text{and}\ y=x&\;&\Rightarrow\;(-1,-1),\\
    +x=-1 \ \text{and}\ x+2y=75&\;&\Rightarrow\;(-1,38),\\
    +y=x \ \text{and}\ x+2y=75&\;&\Rightarrow\;(25,25).
    +\end{aligned}
    +\]
    +
    +Hence the finite region is the interior of the triangle with vertices  
    +\((-1,-1),\;(-1,38),\;(25,25)\).
    +
    +Its area in the \(xy\)-plane is
    +
    +\[
    +\text{Area}_{xy}
    +=\frac12\cdot\text{base}\cdot\text{height}
    +=\frac12\cdot 39\cdot 26 =507 .
    +\]
    +
    +---
    +
    +### 3.  Area on the plane \(x+y+z=75\)
    +
    +The map \((x,y)\mapsto (x,y,75-x-y)\) sends the \(xy\)-plane onto the given
    +plane.  The area is scaled by the factor
    +
    +\[
    +\bigl|\partial_{x}(x,y,z)\times\partial_{y}(x,y,z)\bigr|
    +=|(1,0,-1)\times(0,1,-1)|
    +=|(1,1,1)|
    +=\sqrt{3}.
    +\]
    +
    +Thus the area of the finite region on the plane is
    +
    +\[
    +\text{Area}= \sqrt{3}\times 507 = 507\sqrt{3}.
    +\]
    +
    +---
    +
    +The required form is \(a\sqrt{b}\) with \(a=507,\;b=3\).  Hence
    +
    +\[
    +a+b = 507+3 = 510.
    +\]
    +
    +\[
    +\boxed{510}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 510

    +

    Extracted Answer: 510

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The product $ \prod_{k=4}^{63} \frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})} = \frac{\log_4(5^{15})}{\log_5(5^{12})} \cdot \frac{\log_5(5^{24})}{\log_6(5^{21})} \cdot \frac{\log_6(5^{35})}{\log_7(5^{32})} \cdots \frac{\log_{63}(5^{3968})}{\log_{64}(5^{3965})} $ is equal to $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +P=\prod_{k=4}^{63}\frac{\log_k\!\big(5^{\,k^2-1}\big)}{\log_{k+1}\!\big(5^{\,k^2-4}\big)}
    +\]
    +
    +---
    +
    +### 1.  Change of base  
    +
    +\[
    +\log_a b=\frac{\ln b}{\ln a}
    +\]
    +
    +Hence  
    +
    +\[
    +\begin{aligned}
    +\log_k\!\big(5^{k^2-1}\big)&=\frac{(k^2-1)\ln5}{\ln k},\\[2mm]
    +\log_{k+1}\!\big(5^{k^2-4}\big)&=\frac{(k^2-4)\ln5}{\ln(k+1)} .
    +\end{aligned}
    +\]
    +
    +Therefore each factor of the product is
    +
    +\[
    +\frac{(k^2-1)\ln5/\ln k}{(k^2-4)\ln5/\ln(k+1)}
    += \frac{k^2-1}{k^2-4}\cdot\frac{\ln(k+1)}{\ln k}.
    +\]
    +
    +Thus  
    +
    +\[
    +P=\Bigg(\prod_{k=4}^{63}\frac{k^2-1}{k^2-4}\Bigg)
    +   \Bigg(\prod_{k=4}^{63}\frac{\ln(k+1)}{\ln k}\Bigg).
    +\]
    +
    +---
    +
    +### 2.  Telescoping the logarithmic part  
    +
    +\[
    +\prod_{k=4}^{63}\frac{\ln(k+1)}{\ln k}
    + =\frac{\ln5}{\ln4}\cdot\frac{\ln6}{\ln5}\cdots\frac{\ln64}{\ln63}
    + =\frac{\ln64}{\ln4}
    + =\log_4 64 = 3 .
    +\]
    +
    +---
    +
    +### 3.  Simplify the rational part  
    +
    +\[
    +\frac{k^2-1}{k^2-4}
    + =\frac{(k-1)(k+1)}{(k-2)(k+2)}
    + =\frac{k-1}{k-2}\cdot\frac{k+1}{k+2}.
    +\]
    +
    +Hence  
    +
    +\[
    +\prod_{k=4}^{63}\frac{k^2-1}{k^2-4}
    + =\Bigg(\prod_{k=4}^{63}\frac{k-1}{k-2}\Bigg)
    +  \Bigg(\prod_{k=4}^{63}\frac{k+1}{k+2}\Bigg).
    +\]
    +
    +*First product*  
    +
    +\[
    +\prod_{k=4}^{63}\frac{k-1}{k-2}
    + =\frac{3}{2}\cdot\frac{4}{3}\cdot\frac{5}{4}\cdots\frac{62}{61}
    + =\frac{62}{2}=31 .
    +\]
    +
    +*Second product*  
    +
    +\[
    +\prod_{k=4}^{63}\frac{k+1}{k+2}
    + =\frac{5}{6}\cdot\frac{6}{7}\cdot\frac{7}{8}\cdots\frac{64}{65}
    + =\frac{5}{65}= \frac{1}{13}.
    +\]
    +
    +Thus the rational part equals  
    +
    +\[
    +31\cdot\frac{1}{13}= \frac{31}{13}.
    +\]
    +
    +---
    +
    +### 4.  Combine the two parts  
    +
    +\[
    +P=\frac{31}{13}\times 3 = \frac{93}{13}.
    +\]
    +
    +The fraction \(\frac{93}{13}\) is already in lowest terms, so  
    +
    +\[
    +m=93,\qquad n=13,\qquad m+n=93+13=106.
    +\]
    +
    +\[
    +\boxed{106}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 106

    +

    Extracted Answer: 106

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Four unit squares form a $2 \times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +* \(a_{1},a_{2}\) be the two **vertical** interior unit segments (the left–right dividing line),  
    +* \(b_{1},b_{2}\) be the two **horizontal** interior unit segments (the bottom–top dividing line).
    +
    +The eight outer–boundary unit segments belong to only one square, while each interior segment belongs to two squares.
    +
    +---
    +
    +### 1.  Equations for the four unit squares  
    +
    +Denote by \(L_1 ,D_1\) the left and bottom edges of the lower‑left square, etc.  
    +Writing a red edge as \(1\) and a blue edge as \(0\), the condition “exactly two red sides’’ for each square gives  
    +
    +\[
    +\begin{aligned}
    +L_1 + D_1 + a_{1}+ b_{1} &=2,\\
    +D_2 + R_2 + a_{1}+ b_{2} &=2,\\
    +L_3 + T_3 + a_{2}+ b_{1} &=2,\\
    +R_4 + T_4 + a_{2}+ b_{2} &=2,
    +\end{aligned}
    +\]
    +
    +where the eight variables \(L_1,D_1,D_2,R_2,L_3,T_3,R_4,T_4\) are the boundary edges and the
    +four variables \(a_{1},a_{2},b_{1},b_{2}\) are the interior edges.
    +
    +For a fixed choice of the interior edges, each equation tells us the sum of the two
    +boundary edges of that square:
    +
    +\[
    +\begin{aligned}
    +L_1+D_1 &=2-(a_{1}+b_{1}),\\
    +D_2+R_2 &=2-(a_{1}+b_{2}),\\
    +L_3+T_3 &=2-(a_{2}+b_{1}),\\
    +R_4+T_4 &=2-(a_{2}+b_{2}).
    +\end{aligned}
    +\tag{1}
    +\]
    +
    +The right‑hand side can be \(0,1,\) or \(2\).  
    +
    +* If it is \(0\) or \(2\) there is **exactly one** way to colour the two boundary
    +edges (both blue or both red).  
    +* If it is \(1\) there are **two** ways (one red, one blue).
    +
    +Thus for a given interior assignment the number of completions equals  
    +
    +\[
    +\prod_{i=1}^{4}f\bigl(2-(a_{i}+b_{j})\bigr),
    +\qquad
    +f(0)=f(2)=1,\;f(1)=2 .
    +\tag{2}
    +\]
    +
    +The factor contributed by a square is \(2\) precisely when the sum of its two
    +interior edges equals \(1\).
    +
    +---
    +
    +### 2.  How many squares have interior‑sum \(=1\)?
    +
    +Let  
    +
    +\[
    +A = a_{1}+a_{2}\quad(\text{number of red vertical interiors}),\qquad
    +B = b_{1}+b_{2}\quad(\text{number of red horizontal interiors}).
    +\]
    +
    +For a square the two interior edges are one vertical and one horizontal, so the
    +square’s interior sum is \(1\) exactly when the chosen vertical edge and horizontal
    +edge have different colours.  Hence the number of squares with interior‑sum \(=1\) is  
    +
    +\[
    +N = A(2-B)+(2-A)B = 2A+2B-2AB.
    +\tag{3}
    +\]
    +
    +Because \(A,B\in\{0,1,2\}\),
    +
    +\[
    +N=
    +\begin{cases}
    +0 & (A,B)=(0,0)\text{ or }(2,2),\\[2pt]
    +2 & \text{otherwise except the next case},\\[2pt]
    +4 & (A,B)=(0,2)\text{ or }(2,0).
    +\end{cases}
    +\]
    +
    +---
    +
    +### 3.  Counting all interior assignments  
    +
    +The numbers of interior assignments for each \((A,B)\) are
    +
    +\[
    +\begin{array}{c|c|c}
    +(A,B) & \text{\# assignments} & N \\ \hline
    +(0,0) & 1 & 0\\
    +(2,2) & 1 & 0\\
    +(0,2) & 1 & 4\\
    +(2,0) & 1 & 4\\
    +(0,1) & 2 & 2\\
    +(1,0) & 2 & 2\\
    +(1,1) & 4 & 2\\
    +(1,2) & 2 & 2\\
    +(2,1) & 2 & 2
    +\end{array}
    +\]
    +
    +For a given interior assignment the number of ways to colour the boundary
    +edges is \(2^{N}\) (by (2)).  Therefore
    +
    +\[
    +\begin{aligned}
    +\#\text{colorings}&=
    +1\cdot2^{0}+1\cdot2^{0}
    ++1\cdot2^{4}+1\cdot2^{4}
    ++ (2+2+4+2+2)\cdot2^{2} \\[4pt]
    +&=2\cdot1 + 2\cdot16 + 12\cdot4 \\[4pt]
    +&=2 + 32 + 48 \\[4pt]
    +&=82 .
    +\end{aligned}
    +\]
    +
    +---
    +
    +\[
    +\boxed{82}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 82

    +

    Extracted Answer: 82

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Circle $\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\omega_2$ with radius 15. Points $C$ and $D$ lie on $\omega_2$ such that $\overline{BC}$ is a diameter of $\omega_2$ and $\overline{BC} \perp \overline{AD}$. The rectangle $EFGH$ is inscribed in $\omega_1$ such that $\overline{EF} \perp \overline{BC}$, $C$ is closer to $\overline{GH}$ than to $\overline{EF}$, and $D$ is closer to $\overline{FG}$ than to $\overline{EH}$, as shown. Triangles $\triangle DGF$ and $\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +* \(O\) be the centre of \(\omega _2\) (radius \(15\)),
    +* \(A\) the centre of \(\omega _1\) (radius \(6\)),
    +* \(B\) the internal point of tangency of the two circles.
    +
    +Place the picture on a coordinate plane.
    +
    +---
    +
    +### 1.  Coordinates of the given points  
    +
    +Take \(O=(0,0)\).  
    +Since \(OA=15-6=9\) and the circles are tangent internally, we may put  
    +
    +\[
    +A=(9,0), \qquad B=(15,0).
    +\]
    +
    +\(BC\) is a diameter of \(\omega _2\) through \(B\); hence  
    +
    +\[
    +C=(-15,0).
    +\]
    +
    +\(AD\perp BC\) forces \(AD\) to be the vertical line through \(A\); intersecting this line with
    +\(\omega _2\) gives  
    +
    +\[
    +D=(9,-12)\quad\text{or}\quad (9,12).
    +\]
    +
    +The condition “\(D\) is closer to \(\overline{FG}\) than to \(\overline{EH}\)” (see below) makes
    +\(D=(9,-12)\).
    +
    +---
    +
    +### 2.  The rectangle \(EFGH\)
    +
    +\(EFGH\) is inscribed in the circle \(\omega_1\), so its vertices lie on  
    +
    +\[
    +(x-9)^2+y^2=6^2=36 .
    +\]
    +
    +Since \(\overline{EF}\perp BC\) and \(BC\) is horizontal, \(\overline{EF}\) is vertical.
    +Let  
    +
    +\[
    +\begin{aligned}
    +E&=(9+w,\,h),\\
    +F&=(9+w,\,-h),\\
    +G&=(9-w,\,-h),\\
    +H&=(9-w,\,h),
    +\end{aligned}
    +\]
    +
    +where \(w>0,\,h>0\) are the half‑width and half‑height of the rectangle.
    +
    +All four vertices satisfy the circle equation, giving the single relation  
    +
    +\[
    +w^{2}+h^{2}=36\tag{1}
    +\]
    +
    +(the rectangle’s centre is the circle’s centre \(A\)).
    +
    +Because the point \(C=(-15,0)\) is farther to the right than to the left,
    +the condition “\(C\) is closer to \(\overline{GH}\) than to \(\overline{EF}\)’’ forces
    +\(\overline{GH}\) to be the **left** side (\(x=9-w\)), which is already the case.
    +
    +Since \(D=(9,-12)\) lies below the centre, “\(D\) is closer to \(\overline{FG}\) than to \(\overline{EH}\)’’ forces
    +\(\overline{FG}\) to be the **bottom** side (\(y=-h\)).  This orientation matches the above labeling.
    +
    +---
    +
    +### 3.  Areas of the two triangles  
    +
    +*Triangle \(DGF\)*  
    +
    +The points are \(D(9,-12),\; G(9-w,-h),\; F(9+w,-h)\).
    +Its base \(GF\) has length \(2w\) and its height (vertical distance from \(D\) to the base) is \(12-h\).  
    +Hence  
    +
    +\[
    +[\,DGF\,]=\tfrac12\,(2w)(12-h)=w(12-h).\tag{2}
    +\]
    +
    +*Triangle \(CHG\)*  
    +
    +The points are \(C(-15,0),\; H(9-w,h),\; G(9-w,-h)\).
    +Its base \(HG\) has length \(2h\) and its horizontal distance from \(C\) to the line \(x=9-w\) is
    +\(|-15-(9-w)|=24-w\).  
    +Thus  
    +
    +\[
    +[\,CHG\,]=\tfrac12\,(2h)(24-w)=h(24-w).\tag{3}
    +\]
    +
    +The problem states the two areas are equal, so
    +
    +\[
    +w(12-h)=h(24-w).\tag{4}
    +\]
    +
    +Expanding gives \(12w-wh=24h-wh\), whence  
    +
    +\[
    +12w=24h \qquad\Longrightarrow\qquad w=2h.\tag{5}
    +\]
    +
    +---
    +
    +### 4.  Solving for \(w\) and \(h\)
    +
    +Substituting \(w=2h\) into (1):
    +
    +\[
    +(2h)^2+h^2=36 \;\Longrightarrow\;5h^{2}=36 \;\Longrightarrow\;
    +h=\frac{6}{\sqrt5}=\frac{6\sqrt5}{5}.
    +\]
    +
    +Hence  
    +
    +\[
    +w=2h=\frac{12}{\sqrt5}=\frac{12\sqrt5}{5}.
    +\]
    +
    +---
    +
    +### 5.  Area of the rectangle  
    +
    +The side lengths are \(2w\) and \(2h\).  Therefore  
    +
    +\[
    +\text{Area}= (2w)(2h)=4wh.
    +\]
    +
    +Using \(w=2h\),
    +
    +\[
    +4wh = 4(2h)h = 8h^{2}=8\left(\frac{36}{5}\right)=\frac{288}{5}.
    +\]
    +
    +Thus the area is \(\displaystyle\frac{288}{5}\); the numerator and denominator are coprime.
    +
    +\[
    +m=288,\qquad n=5,\qquad m+n=288+5=293.
    +\]
    +
    +\[
    +\boxed{293}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 293

    +

    Extracted Answer: 293

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The divisors of \(2025\) are all numbers of the form  
    +
    +\[
    +3^{a}5^{b},\qquad 0\le a\le 4,\;0\le b\le 2 .
    +\]
    +
    +Hence  
    +
    +\[
    +|A|=(4+1)(2+1)=15 .
    +\]
    +
    +So there are \(2^{15}\) subsets of \(A\) (including the empty set).
    +
    +--------------------------------------------------------------------
    +### When does a subset have lcm \(2025\)?
    +
    +The prime factorisation of \(2025\) is  
    +
    +\[
    +2025 = 3^{4}\,5^{2}.
    +\]
    +
    +For a subset \(B\subseteq A\),
    +
    +\[
    +\operatorname{lcm}(B)=3^{\max a_i}\,5^{\max b_i},
    +\]
    +
    +where \((a_i,b_i)\) are the exponents of the elements of \(B\).
    +Thus \(\operatorname{lcm}(B)=2025\) iff  
    +
    +* at least one element has exponent \(a=4\) (i.e. contains \(3^4\));
    +* at least one element has exponent \(b=2\) (i.e. contains \(5^2\)).
    +
    +--------------------------------------------------------------------
    +### Sets that provide the required exponents  
    +
    +\[
    +A_4=\{d\in A:3^4\mid d\}=\{3^4\! \cdot\! 5^0,\;3^4\! \cdot\!5^1,\;3^4\! \cdot\!5^2\}
    +\]
    +has \(|A_4|=3\) elements.
    +
    +\[
    +B_2=\{d\in A:5^2\mid d\}=\{3^0\! \cdot\!5^2,\;3^1\! \cdot\!5^2,\;3^2\! \cdot\!5^2,
    +\;3^3\! \cdot\!5^2,\;3^4\! \cdot\!5^2\}
    +\]
    +has \(|B_2|=5\) elements.
    +
    +Their intersection is the single divisor \(2025=3^4\! \cdot\!5^2\).
    +
    +--------------------------------------------------------------------
    +### Counting the suitable subsets  
    +
    +A subset \(B\) works iff it contains **at least one** element of \(A_4\) **and** at least one element of \(B_2\).
    +
    +Using inclusion–exclusion on the \(2^{15}\) total subsets:
    +
    +\[
    +\begin{aligned}
    +N &= 2^{15}
    +     -\underbrace{2^{15-3}}_{\text{subsets missing }A_4}
    +     -\underbrace{2^{15-5}}_{\text{subsets missing }B_2}
    +     +\underbrace{2^{15-7}}_{\text{subsets missing both}} \\[4pt]
    +  &= 2^{15}-2^{12}-2^{10}+2^{8}\\
    +  &= 32768-4096-1024+256\\
    +  &= 27904 .
    +\end{aligned}
    +\]
    +
    +Thus the desired probability is  
    +
    +\[
    +\frac{N}{2^{15}}=\frac{27904}{32768}
    +          =\frac{109}{128}\qquad(\text{after cancelling }256).
    +\]
    +
    +--------------------------------------------------------------------
    +### Answer  
    +
    +\(m=109,\;n=128\), so  
    +
    +\[
    +m+n=109+128=237 .
    +\]
    +
    +\[
    +\boxed{237}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 237

    +

    Extracted Answer: 237

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Alex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1 –  What we have to count**
    +
    +The two perpendicular diameters are two line segments that intersect once, so after they are drawn the disk is divided into  
    +
    +\[
    +F_0=4\qquad\text{regions}.
    +\]
    +
    +Every time we draw a new segment, it splits each region it meets into two pieces.  
    +If the new segment meets \(k\) already‑drawn segments in interior points, it creates \(k+1\) new regions.  
    +
    +Hence  
    +
    +\[
    +\boxed{\text{# of regions}=1+\#\text{segments}+ \#\text{intersection points}}
    +\tag{1}
    +\]
    +
    +(the “\(1\)” is the original whole disk).  
    +We have \(27\) segments in total (the 2 diameters + the 25 random chords).  
    +Thus we only have to find the **expected number of intersection points**.
    +
    +--------------------------------------------------------------------
    +
    +**Step 2 –  Intersections with the two diameters**
    +
    +For a random chord we must choose its two endpoints in *different* quadrants.
    +The unordered pair of quadrants is equally likely among the  
    +
    +\[
    +\binom{4}{2}=6
    +\]
    +
    +possibilities.  
    +
    +* Adjacent quadrants (four choices) – the chord meets **one** diameter.  
    +* Opposite quadrants (two choices) – the chord meets **both** diameters.
    +
    +Therefore for one random chord  
    +
    +\[
    +E[\text{diameters met}]
    +=\frac{4}{6}\cdot1+\frac{2}{6}\cdot2=\frac{4}{3}.
    +\]
    +
    +With \(N=25\) random chords
    +
    +\[
    +E[\text{intersections with the two diameters}]
    +=N\cdot\frac{4}{3}= \frac{100}{3}.
    +\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 3 –  Intersection of two random chords**
    +
    +Let a chord be drawn.  
    +Write its endpoints as angles measured from the positive \(x\)–axis.
    +Because the two endpoints are in different quadrants, the unordered pair of
    +quadrants is uniform among the six possibilities.
    +
    +*Probability that a second random chord meets the first.*
    +
    +Let the first chord be fixed.  
    +Denote by \(I\) the clockwise arc of the circle from its first endpoint to its
    +second endpoint; let \(|I|=L\).
    +If a second chord has one endpoint in \(I\) and the other outside \(I\) the two
    +chords intersect.  
    +
    +When the second chord is chosen, its first endpoint \(U\) is uniform on the whole
    +circle, and its second endpoint \(V\) is uniform on the *three* quadrants that are
    +different from the quadrant of \(U\).  
    +A short calculation (integrating over the position of \(U\) inside \(I\))
    +gives for a fixed chord
    +
    +\[
    +\boxed{q=\frac{L}{\pi}-\frac{2L^{2}}{3\pi^{2}}
    +      +\frac{2}{3\pi^{2}}\!\int_{I}\!|I\cap Q(\theta)|\,d\theta},
    +\tag{3}
    +\]
    +where \(Q(\theta)\) is the quadrant containing \(\theta\).
    +
    +Now we average (3) over the possible positions of the first chord.
    +
    +*Adjac­ent quadrants.*  
    +The arc \(I\) lies in exactly two quadrants; write its lengths in those
    +quadrants as \(L_{1},L_{2}\) (\(L=L_{1}+L_{2}\)).  
    +Then \(\int_{I}|I\cap Q|\,d\theta = L_{1}^{2}+L_{2}^{2}\).
    +With \(L_{1},L_{2}\) independent and uniform on \([0,\pi/2]\),
    +
    +\[
    +E[q\mid\text{adjacent}] = \frac{5}{12}.
    +\]
    +
    +*Opposite quadrants.*  
    +Now \(I\) occupies three quadrants; let the lengths in the three
    +quadrants be \(u,\,\pi/2,\,v\) (\(u,v\) independent uniform on \([0,\pi/2]\)).  
    +Then \(\int_{I}|I\cap Q|\,d\theta = u^{2}+(\pi/2)^{2}+v^{2}\).
    +Averaging gives
    +
    +\[
    +E[q\mid\text{opposite}] = \frac{7}{12}.
    +\]
    +
    +The first chord is adjacent with probability \(\frac{2}{3}\) and opposite with
    +probability \(\frac13\).  Hence the probability that two independently drawn
    +random chords intersect is
    +
    +\[
    +p=\frac{2}{3}\cdot\frac{5}{12}+\frac{1}{3}\cdot\frac{7}{12}
    +    =\frac{17}{36}.
    +\tag{4}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 4 –  Expected intersections among the 25 random chords**
    +
    +There are \(\binom{25}{2}=300\) unordered pairs of random chords, each
    +intersecting with probability \(p\).  Thus
    +
    +\[
    +E[\text{intersections among the 25 chords}]
    +=300\cdot\frac{17}{36}= \frac{425}{3}.
    +\tag{5}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 5 –  Total expected number of intersection points**
    +
    +Add all contributions:
    +
    +* one intersection of the two diameters,
    +* intersections of random chords with the two diameters \(\displaystyle\frac{100}{3}\)   (from (2)),
    +* intersections among the random chords \(\displaystyle\frac{425}{3}\)   (from (5)).
    +
    +\[
    +E[\text{total intersections}]
    +=1+\frac{100}{3}+\frac{425}{3}=1+\frac{525}{3}=176.
    +\tag{6}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 6 –  Expected number of regions**
    +
    +Insert (6) into formula (1):
    +
    +\[
    +E[\text{regions}]
    +=1+\underbrace{27}_{\text{segments}}+\underbrace{176}_{\text{intersection points}}
    +=204 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{204}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 204

    +

    Extracted Answer: 204

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $ n $ values of $ x $ in the interval $ 0 < x < 2\pi $ where $ f(x) = \sin(7\pi \cdot \sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The zeros of  
    +
    +\[
    +f(x)=\sin\bigl(7\pi\sin(5x)\bigr)
    +\]
    +
    +satisfy  
    +
    +\[
    +\sin\bigl(7\pi\sin(5x)\bigr)=0\Longrightarrow 7\pi\sin(5x)=k\pi,\qquad k\in\mathbb Z .
    +\]
    +
    +Hence  
    +
    +\[
    +\sin (5x)=\frac{k}{7},\qquad -7\le k\le 7 .
    +\]
    +
    +---
    +
    +### 1.  Counting all zeros \(n\)
    +
    +Put \(\theta =5x\).  
    +Because \(0<x<2\pi\), we have \(0<\theta<10\pi\).
    +
    +For each integer \(k\) we count the solutions of \(\sin\theta = k/7\) in \((0,10\pi)\).
    +
    +* **\(k=\pm7\) :** \(\sin\theta=\pm1\).  
    +  Solutions are \(\theta =\frac{\pi}{2}+2\pi m\) (or \(\frac{3\pi}{2}+2\pi m\)).  
    +  In a length \(10\pi\) there are \(5\) such values for each sign.  
    +  → \(5+5=10\) solutions.
    +
    +* **\(k=0\) :** \(\sin\theta=0\).  
    +  Solutions are \(\theta=n\pi\).  
    +  With \(0<\theta<10\pi\) we have \(n=1,2,\dots ,9\): \(9\) solutions.
    +
    +* **\(k=\pm1,\pm2,\ldots,\pm6\) (12 values):** \(\sin\theta = k/7\) is a non‑extreme value.  
    +  In each full period of length \(2\pi\) there are \(2\) solutions; we have five periods, so each such \(k\) yields \(10\) solutions.  
    +  → \(12\cdot10=120\) solutions.
    +
    +Hence  
    +
    +\[
    +n = 10\;(\text{from }k=\pm7)+9\;(\text{from }k=0)+120\;(\text{from }k=\pm1,\dots,\pm6)=139 .
    +\]
    +
    +---
    +
    +### 2.  Tangential zeros \(t\)
    +
    +The derivative is  
    +
    +\[
    +f'(x)=\cos\bigl(7\pi\sin(5x)\bigr)\cdot 7\pi\cdot5\cos(5x)
    +      =35\pi\cos\bigl(7\pi\sin(5x)\bigr)\cos(5x).
    +\]
    +
    +At a zero of \(f\) we have \(\sin(5x)=k/7\) and thus  
    +\(\cos(7\pi\sin(5x))=\cos(k\pi)=(-1)^{k}\).
    +
    +Therefore  
    +
    +\[
    +f'(x)=35\pi(-1)^{k}\cos(5x).
    +\]
    +
    +For the graph to be tangent to the \(x\)-axis we need \(f'(x)=0\); this occurs exactly when  
    +
    +\[
    +\cos(5x)=0 \quad\Longleftrightarrow\quad \sin(5x)=\pm1.
    +\]
    +
    +Thus the tangential zeros correspond to the case \(k=\pm7\).  
    +We already counted those: \(5\) solutions for \(k=7\) and \(5\) for \(k=-7\).
    +
    +\[
    +t = 5+5 = 10.
    +\]
    +
    +---
    +
    +### 3.  Required sum
    +
    +\[
    +n+t = 139+10 = 149.
    +\]
    +
    +\[
    +\boxed{149}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 149

    +

    Extracted Answer: 149

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Sixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the chairs be numbered \(1,2,\dots ,16\).
    +Choosing the chairs for the eight people is equivalent to writing a binary
    +string of length \(16\) with exactly eight \(1\)’s (occupied chairs) and
    +seven \(0\)’s (empty chairs).
    +
    +The condition *“no person sits next to two other people’’* means that no
    +occupied chair can have occupied neighbours on both sides; thus the binary
    +string must contain **no substring \(111\)**.  
    +Hence we must count binary strings of length \(16\) with weight \(8\) that avoid
    +\(111\).
    +
    +---
    +
    +### 1.  Describing the strings
    +
    +The \(1\)’s can appear only in blocks of length \(1\) or \(2\) (a block of
    +length \(3\) would give a forbidden \(111\)).  
    +Suppose there are  
    +
    +* \(s\) blocks of length \(2\);
    +* \(t-s\) blocks of length \(1\),
    +
    +so the total number of blocks of \(1\)’s is \(t\).  
    +If each block of length \(2\) contributes \(2\) and each block of length
    +\(1\) contributes \(1\), then  
    +
    +\[
    +2s+(t-s)=8\qquad\Longrightarrow\qquad t=8-s .
    +\]
    +
    +Thus \(s\) can be \(0,1,2,3,4\) (since at most \(\lfloor 8/2\rfloor =4\) blocks
    +of length \(2\) are possible).
    +
    +For a given \(s\) the blocks are ordered, and we must choose which \(s\) of
    +the \(t\) blocks are the length‑\(2\) blocks:
    +
    +\[
    +\text{choices for block sizes}= \binom{t}{s}= \binom{8-s}{s}.
    +\]
    +
    +---
    +
    +### 2.  Placing the zeros
    +
    +Between two consecutive blocks of \(1\)’s there must be at least one
    +\(0\).  With \(t\) blocks there are \(t-1\) mandatory zeros.
    +There are \(8\) zeros in total (since \(16-8=8\)).  
    +Hence the number of *extra* zeros we may distribute is  
    +
    +\[
    +8-(t-1)=9-t .
    +\]
    +
    +These extra zeros can be placed in any of the \(t+1\) gaps
    +(before the first block, between blocks, after the last block).  
    +By stars and bars the number of distributions is
    +
    +\[
    +\binom{(9-t)+(t+1)-1}{(t+1)-1}
    +   =\binom{9}{t}
    +   =\binom{9}{8-s}.
    +\]
    +
    +---
    +
    +### 3.  Total number of admissible subsets
    +
    +Summing over all possible \(s\):
    +
    +\[
    +\begin{aligned}
    +N &=\sum_{s=0}^{4}
    +    \binom{8-s}{s}\binom{9}{8-s}  \\
    +  &=\binom{8}{0}\binom{9}{8}
    +   +\binom{7}{1}\binom{9}{7}
    +   +\binom{6}{2}\binom{9}{6}
    +   +\binom{5}{3}\binom{9}{5}
    +   +\binom{4}{4}\binom{9}{4}   \\
    +  &=1\cdot 9
    +   +7\cdot 36
    +   +15\cdot 84
    +   +10\cdot 126
    +   +1\cdot 126 \\
    +  &=9+252+1260+1260+126 \\
    +  &=2907 .
    +\end{aligned}
    +\]
    +
    +Thus there are \(N=2907\) subsets of chairs that satisfy the condition.
    +
    +---
    +
    +### 4.  Remainder modulo \(1000\)
    +
    +\[
    +2907 \equiv 907 \pmod{1000}.
    +\]
    +
    +\[
    +\boxed{907}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 907

    +

    Extracted Answer: 907

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Suppose $ \triangle ABC $ has angles $ \angle BAC = 84^\circ $, $ \angle ABC = 60^\circ $, and $ \angle ACB = 36^\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \overline{BC} $, $ \overline{AC} $, and $ \overline{AB} $, respectively. The circumcircle of $ \triangle DEF $ intersects $ \overline{BD} $, $ \overline{AE} $, and $ \overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \triangle DEF $ into six minor arcs, as shown. Find $ \widehat{DE} + 2 \cdot \widehat{HJ} + 3 \cdot \widehat{FG} $, where the arcs are measured in degrees.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +A=84^\circ ,\qquad B=60^\circ ,\qquad C=36^\circ .
    +\]
    +
    +Denote by \(O\) the circumcenter of \(\triangle ABC\) and by \(N\) the nine‑point
    +center (the circumcenter of \(\triangle DEF\)).
    +Put the circumcircle of \(\triangle ABC\) on the unit circle and let  
    +
    +\[
    +a=1,\qquad 
    +b=e^{i\beta },\qquad 
    +c=e^{i\gamma},
    +\]
    +
    +where the central arcs satisfy  
    +
    +\[
    +\widehat{AB}=2C=72^\circ ,\qquad 
    +\widehat{BC}=2A=168^\circ ,\qquad 
    +\widehat{CA}=2B=120^\circ .
    +\]
    +
    +Hence  
    +
    +\[
    +\beta =72^\circ ,\qquad \gamma =\beta +168^\circ =240^\circ .
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  The nine‑point centre and the midpoints  
    +
    +\[
    +N=\frac{a+b+c}{2},\qquad 
    +D=\frac{b+c}{2},\;E=\frac{c+a}{2},\;F=\frac{a+b}{2}.
    +\]
    +
    +From these formulas  
    +
    +\[
    +ND=-\frac a2,\qquad NE=-\frac b2,\qquad NF=-\frac c2 .\tag{1}
    +\]
    +
    +Thus the directions of the radii to the midpoints are opposite the
    +directions of the vertices:
    +
    +\[
    +\arg(ND)=\alpha+180^\circ ,\quad 
    +\arg(NE)=\beta+180^\circ ,\quad 
    +\arg(NF)=\gamma+180^\circ .
    +\]
    +
    +Consequently  
    +
    +\[
    +\widehat{DE}=|\arg(NE)-\arg(ND)|
    +      =( \beta+180^\circ)-( \alpha+180^\circ)=\beta-\alpha
    +      =2C=72^\circ .\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  The second intersections  
    +
    +For a chord whose one endpoint is known, the second endpoint is obtained
    +by reflecting the known radius about the line through \(N\) that is
    +perpendicular to the given line.
    +
    +*Line \(BD\).*  
    +The direction of \(BD\) is \(\arg(c-b)\).  
    +Since the perpendicular through \(N\) makes the angle \(\arg(c-b)+90^\circ\),
    +reflecting \(ND\) in this line gives
    +
    +\[
    +\arg(NG)=2\bigl(\arg(c-b)+90^\circ\bigr)-\arg(ND)
    +        =2\arg(c-b)-\arg(a).            \tag{3}
    +\]
    +
    +Using the identity  
    +
    +\[
    +\arg(c-b)=\frac{\beta+\gamma}{2}+90^\circ,
    +\]
    +
    +we obtain  
    +
    +\[
    +\arg(NG)=2\Bigl(\frac{72^\circ+240^\circ}{2}+90^\circ\Bigr)
    +        =492^\circ\equiv132^\circ .
    +\]
    +
    +Because \(\arg(NF)=\gamma+180^\circ=60^\circ\),
    +
    +\[
    +\widehat{FG}=|\arg(NG)-\arg(NF)|=132^\circ-60^\circ=72^\circ .\tag{4}
    +\]
    +
    +*Line \(AF\) (the side \(AB\)).*  
    +The direction of \(AB\) is \(\arg(b-a)\); hence
    +
    +\[
    +\arg(NJ)=2\arg(b-a)-\arg(c).                \tag{5}
    +\]
    +
    +Now  
    +
    +\[
    +\arg(b-a)=\frac{\alpha+\beta}{2}+90^\circ=126^\circ,
    +\]
    +
    +so  
    +
    +\[
    +\arg(NJ)=2\cdot126^\circ-240^\circ=12^\circ .\tag{6}
    +\]
    +
    +*Line \(AE\) (the median from \(A\)).*  
    +The direction of \(AE\) is \(\arg(c-a)\); thus
    +
    +\[
    +\arg(NH)=2\arg(c-a)-\arg(b).                \tag{7}
    +\]
    +
    +Here  
    +
    +\[
    +\arg(c-a)=\frac{\alpha+\gamma}{2}+90^\circ=210^\circ ,
    +\]
    +
    +hence  
    +
    +\[
    +\arg(NH)=2\cdot210^\circ-72^\circ=348^\circ\equiv-12^\circ .\tag{8}
    +\]
    +
    +Therefore  
    +
    +\[
    +\widehat{HJ}=|\arg(NJ)-\arg(NH)|
    +            =12^\circ-(-12^\circ)=24^\circ .\tag{9}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Required sum  
    +
    +From (2), (4) and (9),
    +
    +\[
    +\widehat{DE}=72^\circ ,\qquad 
    +\widehat{HJ}=24^\circ ,\qquad 
    +\widehat{FG}=72^\circ .
    +\]
    +
    +Hence  
    +
    +\[
    +\widehat{DE}+2\widehat{HJ}+3\widehat{FG}
    +=72^\circ+2\cdot24^\circ+3\cdot72^\circ
    +=72+48+216
    +=336^\circ .
    +\]
    +
    +\[
    +\boxed{336}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 336

    +

    Extracted Answer: 336

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +\boxed{733}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 735

    +

    Extracted Answer: 733

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A_1A_2 \ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:
    +* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \leq i \leq 10 $,
    +* $ \cos(\angle A_iA_1A_{i+1}) = \frac{12}{13} $ for each $ 2 \leq i \leq 10 $,
    +* The perimeter of $ A_1A_2 \ldots A_{11} $ is 20.
    +If $ A_1A_2 + A_1A_{11} $ can be expressed as $ \frac{m\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +r_i=A_1A_i\qquad (i=2,\dots ,11),\qquad 
    +\theta=\angle A_iA_1A_{i+1}\;(2\le i\le 10),\qquad 
    +\cos\theta=\frac{12}{13}.
    +\]
    +
    +---
    +
    +### 1.  Relation between the radii  
    +
    +The area of \(\triangle A_iA_1A_{i+1}\) is  
    +
    +\[
    +1=\frac12 r_i r_{i+1}\sin\theta .
    +\]
    +
    +Since  
    +
    +\[
    +\sin\theta =\sqrt{1-\cos^2\theta}= \sqrt{1-\left(\frac{12}{13}\right)^2}= \frac{5}{13},
    +\]
    +
    +we obtain  
    +
    +\[
    +r_i r_{i+1}= \frac{2\cdot13}{5}= \frac{26}{5}\;(=C).
    +\tag{1}
    +\]
    +
    +Thus for every \(i\),
    +
    +\[
    +r_{i+1}= \frac{C}{r_i},\qquad C=\frac{26}{5}.
    +\]
    +
    +Consequently the sequence alternates:
    +
    +\[
    +r_2=r_4=r_6=r_8=r_{10}=x,\qquad
    +r_3=r_5=r_7=r_9=r_{11}= \frac{C}{x},
    +\]
    +
    +for some positive number \(x\).
    +
    +---
    +
    +### 2.  Length of the side \(A_iA_{i+1}\)
    +
    +Using the law of cosines in \(\triangle A_iA_1A_{i+1}\),
    +
    +\[
    +A_iA_{i+1}^{2}=r_i^{2}+r_{i+1}^{2}-2r_i r_{i+1}\cos\theta .
    +\]
    +
    +Because \(r_i r_{i+1}=C\) and \(\cos\theta=\frac{12}{13}\),
    +
    +\[
    +A_iA_{i+1}^{2}=r_i^{2}+r_{i+1}^{2}
    +          -2C\cdot\frac{12}{13}
    +          =r_i^{2}+r_{i+1}^{2}-\frac{48}{5}.
    +\]
    +
    +Now  
    +
    +\[
    +r_i^{2}+r_{i+1}^{2}
    +   =(r_i+r_{i+1})^{2}-2r_i r_{i+1}
    +   =(r_i+r_{i+1})^{2}-2C .
    +\]
    +
    +Hence
    +
    +\[
    +A_iA_{i+1}^{2}= (r_i+r_{i+1})^{2}-2C-\frac{48}{5}
    +               =(r_i+r_{i+1})^{2}-20 .
    +\tag{2}
    +\]
    +
    +For any consecutive pair \((i,i+1)\) we have  
    +
    +\[
    +r_i+r_{i+1}=x+\frac{C}{x}\;=:t .
    +\]
    +
    +Thus every side \(A_iA_{i+1}\;(i=2,\dots ,10)\) has the same length  
    +
    +\[
    +s=\sqrt{t^{2}-20}.
    +\tag{3}
    +\]
    +
    +---
    +
    +### 3.  Perimeter condition  
    +
    +The perimeter of the 11‑gon is  
    +
    +\[
    +\underbrace{A_1A_2}_{=x}
    ++\underbrace{A_{11}A_1}_{=C/x}
    ++9s =t+9\sqrt{t^{2}-20}=20 .
    +\tag{4}
    +\]
    +
    +Set \(\displaystyle u=\sqrt{t^{2}-20}\).  
    +From (4) we have \(u=\dfrac{20-t}{9}\).  Squaring gives
    +
    +\[
    +t^{2}-20=\frac{(20-t)^{2}}{81}.
    +\]
    +
    +Multiplying by 81 and simplifying,
    +
    +\[
    +80t^{2}+40t-2020=0\quad\Longrightarrow\quad
    +4t^{2}+2t-101=0.
    +\]
    +
    +Solving,
    +
    +\[
    +t=\frac{-2+\sqrt{4+1616}}{8}
    +  =\frac{-2+18\sqrt5}{8}
    +  =\frac{9\sqrt5-1}{4}.
    +\]
    +
    +Since \(t=x+C/x=A_1A_2+A_1A_{11}\) is a sum of positive lengths,
    +the positive root is the only admissible one.
    +
    +---
    +
    +### 4.  Result  
    +
    +\[
    +A_1A_2+A_1A_{11}= \frac{9\sqrt5-1}{4}
    +                 =\frac{m\sqrt n-p}{q},
    +\]
    +
    +where \(m=9,\;n=5,\;p=1,\;q=4\).  
    +Hence
    +
    +\[
    +m+n+p+q=9+5+1+4=19.
    +\]
    +
    +\[
    +\boxed{19}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 19

    +

    Extracted Answer: 19

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +From an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.
    +
    +In general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For the denominations \(\{1,10,25\}\) let  
    +
    +\[
    +N=25a+b,\qquad 0\le b<25 .
    +\]
    +
    +The greedy algorithm first uses \(a\) quarters, then \(\big\lfloor b/10\big\rfloor\) dimes and finally \(b\bmod 10\) pennies.
    +Hence the greedy number of coins is  
    +
    +\[
    +C_{\text{greedy}}(N)=a+\Big\lfloor\frac{b}{10}\Big\rfloor+(b\bmod 10)=a+f(b),
    +\]
    +where  
    +
    +\[
    +f(x)=\Big\lfloor\frac{x}{10}\Big\rfloor+(x\bmod 10).
    +\]
    +
    +If we keep only \(a-k\) quarters (\(k\ge 1\)), the remainder becomes \(b+25k\).  
    +The optimal way to represent the remainder with dimes and pennies still uses the greedy method,
    +so the total number of coins with \(a-k\) quarters is  
    +
    +\[
    +C_k(N)=a-k+f(b+25k).
    +\]
    +
    +The greedy algorithm fails iff for some \(k\ge1\)
    +
    +\[
    +C_k(N)<C_{\text{greedy}}(N)
    +\Longleftrightarrow 
    +f(b+25k)\le f(b)+k-1 .
    +\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Evaluating \(f(b+25k)-f(b)\)
    +
    +Write \(b=10t+r\) with \(t\in\{0,1,2\}\) and \(r=b\bmod 10\in\{0,\dots,9\}\).
    +Let \(\alpha=r/10\;(0\le\alpha<1)\).
    +
    +Since  
    +
    +\[
    +f(x)=\Big\lfloor\frac{x}{10}\Big\rfloor+(x\bmod10)
    +      =x-9\Big\lfloor\frac{x}{10}\Big\rfloor ,
    +\]
    +
    +we obtain  
    +
    +\[
    +\begin{aligned}
    +f(b+25k)-f(b)
    +&=9\Big\lfloor\frac{b+25k}{10}\Big\rfloor-24k\\
    +&=9\Big\lfloor 2.5k+\alpha\Big\rfloor-24k .
    +\end{aligned}
    +\tag{2}
    +\]
    +
    +Set  
    +
    +\[
    +\Delta(k)=9\Big\lfloor 2.5k+\alpha\Big\rfloor-24k .
    +\]
    +
    +A failure occurs when \(\Delta(k)>0\) and \(k\le a\).
    +
    +--------------------------------------------------------------------
    +### 2.  When can \(\Delta(k)>0\)?
    +
    +For any integer \(k\),
    +
    +\[
    +\Big\lfloor2.5k\Big\rfloor=
    +\frac{5k-(k\bmod2)}{2}.
    +\]
    +
    +Hence  
    +
    +\[
    +\Delta(k)= -\frac{3k+9(k\bmod2)}{2}+9\delta ,
    +\quad\text{where }\delta=
    +\begin{cases}
    +1,&\alpha\ge 1-\{2.5k\},\\
    +0,&\text{otherwise}.
    +\end{cases}
    +\]
    +
    +The term \(-\frac{3k+9(k\bmod2)}{2}\) is negative for all \(k\ge1\).
    +The only way \(\Delta(k)\) can become positive is when \(\delta=1\).
    +
    +*If \(k\) is even*, \(\{2.5k\}=0\); thus \(\alpha<1\) never makes \(\delta=1\).
    +Hence \(\Delta(k)\le0\) for all even \(k\).
    +
    +*If \(k\) is odd*, \(\{2.5k\}=0.5\).  
    +Then \(\delta=1\) exactly when \(\alpha\ge 0.5\), i.e. when \(r\ge5\) (the remainder of \(b\) modulo \(10\) is at least \(5\)).
    +
    +For odd \(k\ge3\) we have  
    +
    +\[
    +\Delta(k)=-9+9\delta\le0,
    +\]
    +
    +so no improvement occurs.  
    +
    +For \(k=1\),
    +
    +\[
    +\Delta(1)= -6+9\delta,
    +\]
    +
    +which is positive precisely when \(\delta=1\); that is, when \(r\ge5\).
    +
    +Consequently **the greedy algorithm fails exactly when**
    +
    +* \(N\ge25\) (so at least one quarter is used), and
    +* the remainder \(b=N\bmod25\) satisfies \(b\bmod10\ge5\).
    +
    +In terms of residues modulo \(25\) this means
    +
    +\[
    +b\in\{5,6,7,8,9,15,16,17,18,19\}.
    +\tag{3}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Counting the failures
    +
    +From \(1\) to \(1000\):
    +
    +* For \(N<25\) the greedy algorithm is always optimal (no quarters are used).
    +* For each complete block of \(25\) numbers, exactly the \(10\) residues listed in (3) cause a failure.
    +
    +The interval \(25\le N\le999\) contains \(39\) full blocks of size \(25\):
    +\[
    +39\cdot10=390\text{ failures}.
    +\]
    +
    +\(N=1000\) has residue \(0\) modulo \(25\), so it is not a failure.
    +
    +Thus the number of values where the greedy algorithm **succeeds** is  
    +
    +\[
    +1000-390 = 610.
    +\]
    +
    +\[
    +\boxed{610}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 610

    +

    Extracted Answer: 610

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    In base \(b\),
    +
    +\[
    +17_b = 1\cdot b+7 = b+7,\qquad 97_b = 9\cdot b+7 .
    +\]
    +
    +We need integer bases \(b>9\) such that \(b+7\) divides \(9b+7\).
    +
    +Let  
    +
    +\[
    +n = b+7 \quad\Longrightarrow\quad b = n-7.
    +\]
    +
    +Then  
    +
    +\[
    +9b+7 = 9(n-7)+7 = 9n-56 .
    +\]
    +
    +Hence \(n\) must divide \(9n-56\):
    +
    +\[
    +n \mid (9n-56) \;\Longrightarrow\; n \mid (9n-56) - 9n = -56.
    +\]
    +
    +Thus \(n\) is a positive divisor of \(56\).  
    +Since \(b>9\), we have \(n=b+7>16\); therefore we need divisors of \(56\) that are \(\ge 17\).
    +
    +Divisors of \(56 = 2^3\cdot7\) are  
    +
    +\[
    +1,\;2,\;4,\;7,\;8,\;14,\;28,\;56.
    +\]
    +
    +Only \(28\) and \(56\) satisfy \(n\ge 17\).
    +
    +Corresponding bases:
    +
    +\[
    +b = n-7 \quad\Rightarrow\quad 
    +\begin{cases}
    +n=28 &\Rightarrow b = 21,\\[2pt]
    +n=56 &\Rightarrow b = 49.
    +\end{cases}
    +\]
    +
    +Both bases exceed \(9\) and the digits \(1,7,9\) are allowed.
    +
    +Finally, the sum of all such bases is  
    +
    +\[
    +21 + 49 = 70.
    +\]
    +
    +\[
    +\boxed{70}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 70

    +

    Extracted Answer: 70

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Label the vertices of the regular \(24\)-gon by the residues  
    +\(\{0,1,2,\dots ,23\}\) modulo \(24\).
    +
    +If the \(12\) drawn segments all have the same Euclidean length, then each
    +segment must join two vertices whose indices differ by a fixed integer  
    +\(k\;(1\le k\le 12)\) (the “step size’’), because the length of a chord in a
    +regular polygon depends only on this step.
    +
    +Thus for a fixed \(k\) we have to choose a perfect matching of the graph  
    +
    +\[
    +G_k=\big\{\{i,i+k\}\mid i=0,1,\dots ,23\big\}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.   Structure of \(G_k\)
    +
    +\(G_k\) is a **2‑regular** graph; each vertex has exactly the two neighbours
    +\(i\pm k\).  
    +Let  
    +
    +\[
    +d=\gcd(k,24).
    +\]
    +
    +Then the vertices split into \(d\) cycles, each of length  
    +
    +\[
    +t=\frac{24}{d}.
    +\]
    +
    +Indeed, repeatedly adding \(k\) modulo \(24\) runs through a cycle of that
    +length.
    +
    +--------------------------------------------------------------------
    +### 2.   When does a perfect matching exist?
    +
    +A perfect matching can exist only if each component has an even number of
    +vertices, i.e. \(t\) must be even.  
    +Since \(t = 24/d\),
    +
    +* \(t\) is odd only when \(d=8\) (giving \(t=3\)).  
    +  Hence for \(k=8\) no perfect matching is possible.
    +
    +All other values of \(k\) give even‑length cycles.
    +
    +--------------------------------------------------------------------
    +### 3.   Number of matchings for a given \(k\)
    +
    +*If \(t\ge 4\) (even cycle of length at least \(4\)):  
    +A cycle has exactly **two** perfect matchings (choose every other edge).  
    +Since there are \(d\) independent cycles, the total number of matchings is
    +\(\displaystyle 2^{d}\).
    +
    +*If \(t=2\) (the case \(k=12\)): each component is a single edge, so there
    +is only **one** way to match its two vertices.  
    +Thus for \(k=12\) we obtain \(1\) matching.
    +
    +Summarising
    +
    +\[
    +f(k)=
    +\begin{cases}
    +0, & k=8,\\[2mm]
    +1, & k=12,\\[2mm]
    +2^{\gcd(k,24)}, & \text{otherwise}.
    +\end{cases}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.   Summation over all possible step sizes
    +
    +\[
    +\begin{array}{c|c|c|c}
    +k & \gcd(k,24) & f(k) & \text{contribution}\\\hline
    +1 & 1 & 2^1=2 & 2\\
    +2 & 2 & 2^2=4 & 4\\
    +3 & 3 & 2^3=8 & 8\\
    +4 & 4 & 2^4=16 & 16\\
    +5 & 1 & 2 & 2\\
    +6 & 6 & 2^6=64 & 64\\
    +7 & 1 & 2 & 2\\
    +8 & 8 & 0 & 0\\
    +9 & 3 & 8 & 8\\
    +10& 2 & 4 & 4\\
    +11& 1 & 2 & 2\\
    +12&12 & 1 & 1\\\hline
    +\multicolumn{3}{r|}{\text{Total}} & 113
    +\end{array}
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.   Answer
    +
    +The total number of ways to draw \(12\) equal‑length segments so that each of
    +the \(24\) vertices is used exactly once is  
    +
    +\[
    +\boxed{113}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 113

    +

    Extracted Answer: 113

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Overview**
    +
    +Each player gets one scoop of either chocolate (C), vanilla (V) or strawberry (S).  
    +Let  
    +
    +\[
    +c=\#\text{players who chose chocolate},\qquad 
    +v=\#\text{players who chose vanilla},\qquad 
    +s=\#\text{players who chose strawberry}.
    +\]
    +
    +We need  
    +
    +\[
    +c+v+s=9,\qquad c>v>s\ge 1 .
    +\]
    +
    +For each admissible triple \((c,v,s)\) the number of assignments to the 9 distinct players is the multinomial coefficient  
    +
    +\[
    +\frac{9!}{c!\,v!\,s!}.
    +\]
    +
    +Hence  
    +
    +\[
    +N=\sum_{\substack{c+v+s=9\\c>v>s\ge1}}\frac{9!}{c!\,v!\,s!}.
    +\]
    +
    +---
    +
    +### 1. Find all possible triples \((c,v,s)\)
    +
    +Since \(c>v>s\ge1\),
    +
    +\[
    +s\le 2
    +\]
    +
    +(because \(s+(s+1)+(s+2)=3s+3\le9\Rightarrow s\le2\)).  
    +
    +*If \(s=1\):*  
    +\(v\ge2\) and \(c=9-v-1=8-v\).  
    +Condition \(c>v\) gives \(8-v>v\Rightarrow v\le3\).  
    +Thus \(v=2,3\) giving triples \((6,2,1)\) and \((5,3,1)\).
    +
    +*If \(s=2\):*  
    +\(v\ge3\) and \(c=9-v-2=7-v\).  
    +Condition \(c>v\) gives \(7-v>v\Rightarrow v\le3\).  
    +Thus \(v=3\) giving the triple \((4,3,2)\).
    +
    +No larger \(s\) works.  
    +Hence the only admissible triples are  
    +
    +\[
    +(6,2,1),\qquad (5,3,1),\qquad (4,3,2).
    +\]
    +
    +---
    +
    +### 2. Count assignments for each triple
    +
    +\[
    +\begin{aligned}
    +(6,2,1):&\quad \frac{9!}{6!\,2!\,1!}= \frac{362880}{720\cdot2}=252,\\[4pt]
    +(5,3,1):&\quad \frac{9!}{5!\,3!\,1!}= \frac{362880}{120\cdot6}=504,\\[4pt]
    +(4,3,2):&\quad \frac{9!}{4!\,3!\,2!}= \frac{362880}{24\cdot6\cdot2}=1260.
    +\end{aligned}
    +\]
    +
    +---
    +
    +### 3. Total number of assignments
    +
    +\[
    +N=252+504+1260=2016.
    +\]
    +
    +---
    +
    +### 4. Remainder modulo \(1000\)
    +
    +\[
    +2016\equiv 16\pmod{1000}.
    +\]
    +
    +---
    +
    +\[
    +\boxed{16}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 16

    +

    Extracted Answer: 16

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\angle B=\angle E=60^\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Overview**
    +
    +Let  
    +
    +\[
    +\begin{aligned}
    +A&=(7,7\sqrt3),\qquad 
    +B=(0,0),\qquad 
    +C=(7,0),\\[2mm]
    +D&=\Bigl(\frac{205}{7},\frac{36\sqrt3}{7}\Bigr),\qquad
    +E=\Bigl(\frac{218}{7},\frac{88\sqrt3}{7}\Bigr).
    +\end{aligned}
    +\]
    +
    +The pentagon \(ABCDE\) is convex, \(\angle B=\angle E=60^\circ\) and the side–lengths are  
    +
    +\[
    +AB=14,\;BC=7,\;CD=24,\;DE=13,\;EA=26 .
    +\]
    +
    +For a point \(X\) define  
    +
    +\[
    +f(X)=AX+BX+CX+DX+EX .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 1.  Reducing the problem
    +
    +For any point \(X\)
    +
    +\[
    +\nabla f(X)=\sum_{P\in\{A,B,C,D,E\}}\frac{X-P}{|X-P|}.
    +\]
    +
    +If the minimum of \(f\) is attained at an interior point,
    +the gradient must be zero:
    +
    +\[
    +\frac{X-A}{|X-A|}+\frac{X-B}{|X-B|}
    ++\frac{X-C}{|X-C|}+\frac{X-D}{|X-D|}+\frac{X-E}{|X-E|}=0. \tag{1}
    +\]
    +
    +Notice that  
    +
    +*\(B\) and \(E\) lie on the same line \(BE\).  
    +If a point \(X\) is on the line \(BE\), the two unit vectors in (1) that
    +correspond to \(B\) and \(E\) are opposite:
    +\[
    +\frac{X-B}{|X-B|}+\frac{X-E}{|X-E|}=0 .
    +\]
    +
    +Hence, **any point on the segment \(BE\) automatically cancels the
    +contributions of \(B\) and \(E\).**  
    +Consequently a minimiser must lie on \(BE\), and (1) becomes
    +
    +\[
    +\frac{X-A}{|X-A|}+\frac{X-C}{|X-C|}+\frac{X-D}{|X-D|}=0 .\tag{2}
    +\]
    +
    +Equation (2) is precisely the equilibrium condition for the geometric
    +median (Fermat–Weber point) of the triangle \(ACD\).
    +
    +--------------------------------------------------------------------
    +
    +### 2.  The Fermat point of \(\triangle ACD\)
    +
    +The three angles of \(\triangle ACD\) are  
    +
    +\[
    +\angle A\approx81.8^\circ ,\qquad 
    +\angle C\approx68.2^\circ ,\qquad 
    +\angle D=30^\circ .
    +\]
    +
    +All are \(<120^\circ\); therefore the unique point \(F\) inside
    +\(\triangle ACD\) for which the three angles \(\angle AFD,
    +\angle CFD, \angle ACF\) are all \(120^\circ\) is the Fermat point.
    +It is precisely the point satisfying (2); consequently the minimiser of
    +\(f\) is the intersection of the line \(BE\) with this Fermat point.
    +(The numerical computation of the Weiszfeld iteration gives
    +\(F\approx(10.594,\,7.416)\), which indeed lies on \(BE\).)
    +
    +For a triangle with side‑lengths \(a,b,c\) and area \(\Delta\), the
    +minimal sum of distances from its Fermat point to the three vertices is
    +
    +\[
    +\boxed{\displaystyle 
    +\sqrt{\frac{a^{2}+b^{2}+c^{2}+4\sqrt3\,\Delta}{2}} }   \tag{3}
    +\]
    +
    +(see any textbook on the Fermat point).
    +
    +--------------------------------------------------------------------
    +
    +### 3.  Applying the formula to \(\triangle ACD\)
    +
    +For \(\triangle ACD\)
    +
    +\[
    +\begin{aligned}
    +a&=CD=24,\\
    +b&=AD=13\sqrt3,\\
    +c&=AC=7\sqrt3.
    +\end{aligned}
    +\]
    +
    +The area is obtained from the base \(AC\) (vertical, length \(7\sqrt3\))
    +and the horizontal distance from \(D\) to the line \(AC\) (which is
    +\( \frac{156}{7}\)):
    +
    +\[
    +\Delta=\frac12\cdot7\sqrt3\cdot\frac{156}{7}=78\sqrt3 .
    +\]
    +
    +Now compute the expression in (3):
    +
    +\[
    +\begin{aligned}
    +a^{2}+b^{2}+c^{2}&=24^{2}+(13\sqrt3)^{2}+(7\sqrt3)^{2}
    +=576+507+147=1230,\\[1mm]
    +4\sqrt3\,\Delta&=4\sqrt3\cdot78\sqrt3=4\cdot78\cdot3=936,\\[1mm]
    +\frac{a^{2}+b^{2}+c^{2}+4\sqrt3\,\Delta}{2}
    +&=\frac{1230+936}{2}=1083.
    +\end{aligned}
    +\]
    +
    +Thus  
    +
    +\[
    +AF+CF+DF=\sqrt{1083}=19\sqrt3 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 4.  The total minimum
    +
    +Because the minimiser lies on \(BE\),
    +
    +\[
    +BF+EF=BE=38 .
    +\]
    +
    +Therefore
    +
    +\[
    +\begin{aligned}
    +\min f(X)&=AF+CF+DF+BF+EF\\
    +&=19\sqrt3+38 .
    +\end{aligned}
    +\]
    +
    +The required form is \(m+n\sqrt{p}\) with \(m=38,\;n=19,\;p=3\).
    +
    +Hence  
    +
    +\[
    +m+n+p = 38+19+3 = 60 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{60}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 60

    +

    Extracted Answer: 60

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The equation  
    +
    +\[
    +12x^{2}-xy-6y^{2}=0
    +\]
    +
    +can be factored over the integers:
    +
    +\[
    +12x^{2}-xy-6y^{2}= (3x+2y)(4x-3y)=0 .
    +\]
    +
    +Hence a pair \((x,y)\) of integers satisfies either  
    +
    +\[
    +\boxed{3x+2y=0}\qquad\text{or}\qquad\boxed{4x-3y=0}.
    +\]
    +
    +---
    +
    +### 1.  Solutions of \(3x+2y=0\)
    +
    +\[
    +2y=-3x\quad\Longrightarrow\quad y=-\frac{3}{2}x .
    +\]
    +
    +For \(y\) to be integer, \(x\) must be even: write \(x=2k\) with \(k\in\mathbb Z\).  
    +Then \(y=-3k\).
    +
    +The bounds \(-100\le x,y\le100\) give  
    +
    +\[
    +-100\le2k\le100\;\Longrightarrow\;-50\le k\le50,
    +\]
    +\[
    +-100\le-3k\le100\;\Longrightarrow\;|k|\le\frac{100}{3}\;\Longrightarrow\;-33\le k\le33.
    +\]
    +
    +Thus \(k\) can be any integer from \(-33\) to \(33\):  
    +
    +\[
    +\#\{(x,y):3x+2y=0\}=33+33+1=67 .
    +\]
    +
    +---
    +
    +### 2.  Solutions of \(4x-3y=0\)
    +
    +\[
    +4x=3y\quad\Longrightarrow\quad y=\frac{4}{3}x .
    +\]
    +
    +For integer \(y\), \(x\) must be a multiple of \(3\): write \(x=3m\) with \(m\in\mathbb Z\).  
    +Then \(y=4m\).
    +
    +The bounds give  
    +
    +\[
    +-100\le3m\le100\;\Longrightarrow\;|m|\le\frac{100}{3}\;\Longrightarrow\;-33\le m\le33,
    +\]
    +\[
    +-100\le4m\le100\;\Longrightarrow\;-25\le m\le25.
    +\]
    +
    +Hence \(m\) can be any integer from \(-25\) to \(25\):  
    +
    +\[
    +\#\{(x,y):4x-3y=0\}=25+25+1=51 .
    +\]
    +
    +---
    +
    +### 3.  Removing the double count
    +
    +The only pair that satisfies both linear equations is \((0,0)\).  
    +Thus the total number of distinct ordered pairs is  
    +
    +\[
    +67+51-1=117 .
    +\]
    +
    +\[
    +\boxed{117}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 117

    +

    Extracted Answer: 117

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +An isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \neq s$. Find $r^{2}+s^{2}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For a tangential quadrilateral (one that has an incircle) the sum of the lengths of opposite sides are equal.  
    +Let the parallel sides of the isosceles trapezoid be \(r\) and \(s\) \((r\neq s)\) and each leg have length \(L\).
    +
    +\[
    +r+s = L+L = 2L \quad\Longrightarrow\quad L=\frac{r+s}{2}
    +\]
    +
    +---
    +
    +### Using the incircle
    +
    +For any tangential quadrilateral  
    +
    +\[
    +\text{Area}= (\text{inradius})\times (\text{semiperimeter})
    +\]
    +
    +The inradius is \(3\) and the area is \(72\), so the semiperimeter is  
    +
    +\[
    +\frac{72}{3}=24 .
    +\]
    +
    +The semiperimeter of the trapezoid is  
    +
    +\[
    +\frac{r+s+2L}{2}= \frac{r+s+r+s}{2}=r+s .
    +\]
    +
    +Hence  
    +
    +\[
    +r+s = 24 .
    +\]
    +
    +Consequently  
    +
    +\[
    +L=\frac{r+s}{2}=12 .
    +\]
    +
    +---
    +
    +### Height of the trapezoid
    +
    +The area also equals \(\dfrac{(r+s)}{2}\cdot h\), where \(h\) is the height:
    +
    +\[
    +72=\frac{24}{2}\,h =12h \;\Longrightarrow\; h=6 .
    +\]
    +
    +(Indeed, the height must be \(2\) times the inradius, \(2\cdot3=6\).)
    +
    +---
    +
    +### Relating the legs to the bases
    +
    +In an isosceles trapezoid the horizontal offset of each leg is  
    +
    +\[
    +x=\frac{r-s}{2}.
    +\]
    +
    +Because each leg has length \(L=12\),
    +
    +\[
    +L^{2}=x^{2}+h^{2}\quad\Longrightarrow\quad
    +12^{2}= \left(\frac{r-s}{2}\right)^{2}+6^{2}.
    +\]
    +
    +Thus  
    +
    +\[
    +\left(\frac{r-s}{2}\right)^{2}=144-36=108
    +\quad\Longrightarrow\quad
    +r-s = 2\sqrt{108}=12\sqrt3 .
    +\]
    +
    +---
    +
    +### Solving for \(r\) and \(s\)
    +
    +\[
    +\begin{cases}
    +r+s = 24,\\[2pt]
    +r-s = 12\sqrt3 .
    +\end{cases}
    +\]
    +
    +\[
    +r = \frac{24+12\sqrt3}{2}=12+6\sqrt3,\qquad
    +s = \frac{24-12\sqrt3}{2}=12-6\sqrt3 .
    +\]
    +
    +---
    +
    +### Compute \(r^{2}+s^{2}\)
    +
    +Using \((r^{2}+s^{2}) = \dfrac{(r+s)^{2}+(r-s)^{2}}{2}\),
    +
    +\[
    +r^{2}+s^{2}= \frac{24^{2}+(12\sqrt3)^{2}}{2}
    += \frac{576+432}{2}
    += \frac{1008}{2}=504 .
    +\]
    +
    +\[
    +\boxed{504}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 504

    +

    Extracted Answer: 504

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For a number to be divisible by \(22\) it must be divisible by \(2\) **and** by \(11\).
    +
    +---
    +
    +### 1.  Divisibility by \(2\)
    +
    +The last digit (the 8‑th digit) must be even.
    +The even digits are \(\{2,4,6,8\}\).
    +
    +---
    +
    +### 2.  Divisibility by \(11\)
    +
    +For an \(8\)-digit number \(d_1d_2\ldots d_8\),
    +
    +\[
    +\text{(odd positions)}-\text{(even positions)}=
    +(d_1+d_3+d_5+d_7)-(d_2+d_4+d_6+d_8)
    +\]
    +
    +must be a multiple of \(11\).
    +
    +Since the digits \(1,\dots ,8\) are used once,
    +\[
    +(d_1+d_3+d_5+d_7)+(d_2+d_4+d_6+d_8)=1+2+\cdots+8=36 .
    +\]
    +
    +Let \(S=d_1+d_3+d_5+d_7\).  
    +Then the alternating sum is \(2S-36\).  
    +It must be a multiple of \(11\) and also even (because \(2S-36\) is even).  
    +The only even multiple of \(11\) in the range \([-16,16]\) (the possible values of \(2S-36\)) is \(0\).
    +
    +Hence  
    +
    +\[
    +2S-36=0\quad\Longrightarrow\quad S=18 .
    +\]
    +
    +So the four digits occupying the odd positions must sum to \(18\)
    +(and automatically the even positions also sum to \(18\)).
    +
    +---
    +
    +### 3.  Choosing the odd‑position set
    +
    +We need all \(4\)-element subsets of \(\{1,2,3,4,5,6,7,8\}\) whose sum is \(18\).
    +
    +Listing them (or using a generating function) gives
    +
    +\[
    +\begin{aligned}
    +&\{1,2,7,8\},\; \{1,3,6,8\},\; \{1,4,5,8\},\; \{1,4,6,7\},\\
    +&\{2,3,5,8\},\; \{2,3,6,7\},\; \{2,4,5,7\},\; \{3,4,5,6\}.
    +\end{aligned}
    +\]
    +
    +Thus there are **8** possible sets for the odd positions.
    +
    +Each such set contains exactly two even digits (any valid set must have
    +two evens and two odds, because an odd number of evens would give an odd total).
    +
    +---
    +
    +### 4.  Arranging the digits
    +
    +*Odd positions (1,3,5,7)* – the chosen 4 digits can be placed in \(4! = 24\) ways.
    +
    +*Even positions (2,4,6,8)* – the remaining four digits must be placed so that
    +position 8 is even.
    +
    +If the even‑position set contains \(k\) even digits, we have \(k\) choices for which even digit goes to position 8, and the remaining three digits can be ordered in the other three even positions in \(3! = 6\) ways.  
    +
    +For every valid odd‑set we have exactly \(k = 2\) even digits in the even‑position set,
    +so
    +
    +\[
    +\text{arrangements of even positions}=2\cdot 3! = 12 .
    +\]
    +
    +Hence for each of the 8 possible odd‑sets we obtain
    +
    +\[
    +24 \times 12 = 288\text{ permutations}.
    +\]
    +
    +---
    +
    +### 5.  Total number \(N\)
    +
    +\[
    +N = 8 \times 288 = 2304 .
    +\]
    +
    +---
    +
    +### 6.  Required difference
    +
    +\[
    +N - 2025 = 2304 - 2025 = 279 .
    +\]
    +
    +---
    +
    +\[
    +\boxed{279}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 279

    +

    Extracted Answer: 279

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\sqrt{-1}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The equations describe geometric loci in the complex plane.
    +
    +---
    +
    +### 1.  The first equation  
    +
    +\[
    +|25+20i-z|=5
    +\]
    +
    +is a circle  
    +
    +\[
    +C:\;(x-25)^2+(y-20)^2 =5^{\,2}=25 .
    +\]
    +
    +Its centre is \(C_0=(25,20)\) and its radius is \(r=5\).
    +
    +---
    +
    +### 2.  The second equation  
    +
    +\[
    +|z-4-k|=|z-3i-k|
    +\]
    +
    +means that the point \(z\) is equidistant from the points  
    +
    +\[
    +A=(4+k,0), \qquad B=(k,3).
    +\]
    +
    +Hence the locus is the **perpendicular bisector** of segment \(\overline{AB}\).
    +
    +* Midpoint of \(AB\):
    +
    +\[
    +M=\Bigl(\frac{(k+4)+k}{2},\frac{0+3}{2}\Bigr)=(k+2,\tfrac32).
    +\]
    +
    +* Direction vector of \(AB\):  
    +
    +\[
    +\vec{AB}=(-4,3) \quad\Longrightarrow\quad \text{slope of }AB =-\frac34 .
    +\]
    +
    +The perpendicular bisector therefore has slope the negative reciprocal, \(\frac43\).
    +
    +The equation of the line \(L_k\) (the bisector) is  
    +
    +\[
    +y-\tfrac32=\frac43\bigl(x-(k+2)\bigr)
    +\]
    +
    +or, after clearing fractions,
    +
    +\[
    +8x-6y-(8k+7)=0. \tag{1}
    +\]
    +
    +---
    +
    +### 3.  Tangency condition  
    +
    +The system has **exactly one** solution precisely when the line \(L_k\) is tangent to the circle \(C\).  
    +Tangency occurs when the distance from the centre \(C_0=(25,20)\) to the line equals the radius \(5\).
    +
    +For the line \(8x-6y-(8k+7)=0\),
    +
    +\[
    +\text{dist}(C_0,L_k)=\frac{|8\cdot25-6\cdot20-(8k+7)|}{\sqrt{8^2+(-6)^2}}
    +                     =\frac{|200-120-(8k+7)|}{10}
    +                     =\frac{|73-8k|}{10}.
    +\]
    +
    +Set this equal to the radius \(5\):
    +
    +\[
    +\frac{|73-8k|}{10}=5\quad\Longrightarrow\quad |73-8k|=50.
    +\]
    +
    +Hence  
    +
    +\[
    +73-8k=50 \quad\text{or}\quad 73-8k=-50 .
    +\]
    +
    +Solving gives  
    +
    +\[
    +\begin{cases}
    +73-8k=50 &\Rightarrow\; 8k=23 \;\Rightarrow\; k=\dfrac{23}{8},\\[4pt]
    +73-8k=-50 &\Rightarrow\; 8k=123 \;\Rightarrow\; k=\dfrac{123}{8}.
    +\end{cases}
    +\]
    +
    +Both values make the line tangent to the circle, so each yields exactly one solution \(z\).
    +
    +---
    +
    +### 4.  Sum of all possible \(k\)
    +
    +\[
    +k_1+k_2=\frac{23}{8}+\frac{123}{8}=\frac{146}{8}=\frac{73}{4}.
    +\]
    +
    +Thus \(m=73,\; n=4\) (coprime), and
    +
    +\[
    +m+n=73+4=77.
    +\]
    +
    +---
    +
    +\[
    +\boxed{77}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 77

    +

    Extracted Answer: 77

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are exactly three positive real numbers $ k $ such that the function
    +$ f(x) = \frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $
    +defined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +\boxed{240}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 240

    +

    Extracted Answer: 240

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +On $\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +A=(0,0),\qquad B=\mathbf b ,\qquad C=\mathbf c .
    +\]
    +
    +Then \(\triangle ABC\) has oriented area  
    +
    +\[
    +[\triangle ABC]=\frac12\,\bigl(\mathbf b\times\mathbf c\bigr) .
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Coordinates of the points on the sides  
    +
    +On \(AB\)
    +
    +\[
    +AD=4,\;DE=16,\;EB=8\qquad\Longrightarrow\qquad AB=28 .
    +\]
    +
    +Hence  
    +
    +\[
    +D=\frac{4}{28}\mathbf b=\frac17\mathbf b ,\qquad 
    +E=\frac{20}{28}\mathbf b=\frac57\mathbf b .
    +\]
    +
    +On \(AC\)
    +
    +\[
    +AF=13,\;FG=52,\;GC=26\qquad\Longrightarrow\qquad AC=91 .
    +\]
    +
    +Thus  
    +
    +\[
    +F=\frac{13}{91}\mathbf c ,\qquad 
    +G=\frac{65}{91}\mathbf c .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Area of \(DEGF\)
    +
    +For any two points \(P=\alpha_P\mathbf b+\beta_P\mathbf c\) and
    +\(Q=\alpha_Q\mathbf b+\beta_Q\mathbf c\),
    +
    +\[
    +P\times Q=(\alpha_P\beta_Q-\beta_P\alpha_Q)\,(\mathbf b\times\mathbf c).
    +\]
    +
    +With the order \(D\to E\to G\to F\) we obtain  
    +
    +\[
    +\begin{aligned}
    +\sum (P_i\times P_{i+1})&=
    +\underbrace{D\times E}_{0}
    ++\underbrace{E\times G}_{\frac{5}{7}\frac{65}{91}\,K}
    ++\underbrace{G\times F}_{0}
    ++\underbrace{F\times D}_{-\frac{13}{91}\frac1{7}\,K}   \\[2mm]
    +&=\Bigl(\frac{5\cdot65}{7\cdot91}
    +      -\frac{13}{7\cdot91}\Bigr)K
    +   =\frac{312}{637}\,K ,
    +\end{aligned}
    +\]
    +
    +where \(K=\mathbf b\times\mathbf c\).  
    +Therefore  
    +
    +\[
    +[DEGF]=\frac12\Bigl|\frac{312}{637}K\Bigr|
    +       =\frac{156}{637}|K| .
    +\]
    +
    +Given \([DEGF]=288\),
    +
    +\[
    +|K|=288\cdot\frac{637}{156}=1176 .
    +\]
    +
    +Consequently  
    +
    +\[
    +[\triangle ABC]=\frac12|K|=588 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  The reflected points  
    +
    +Reflecting \(D\) across \(F\) gives  
    +
    +\[
    +M=2F-D=\frac{26}{91}\mathbf c-\frac{13}{91}\mathbf b .
    +\]
    +
    +Reflecting \(G\) across \(E\) gives  
    +
    +\[
    +N=2E-G=\frac{130}{91}\mathbf b-\frac{65}{91}\mathbf c .
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Area of the heptagon \(AFNBCEM\)
    +
    +List the vertices in the given order and write each as
    +\(P_i=\alpha_i\mathbf b+\beta_i\mathbf c\):
    +
    +\[
    +\begin{array}{c|c|c}
    +\text{vertex}&\alpha_i&\beta_i\\\hline
    +A&0&0\\
    +F&0&\dfrac{13}{91}\\
    +N&\dfrac{130}{91}&-\dfrac{65}{91}\\
    +B&1&0\\
    +C&0&1\\
    +E&\dfrac57&0\\
    +M&-\dfrac{13}{91}&\dfrac{26}{91}
    +\end{array}
    +\]
    +
    +For the polygon the signed area is  
    +
    +\[
    +\frac12\sum_{i=0}^{6}(\alpha_i\beta_{i+1}-\beta_i\alpha_{i+1})\,K .
    +\]
    +
    +Computing the sum (using the common denominator \(8281=91^{2}=7^{2}\,13^{2}\)) gives  
    +
    +\[
    +\sum_{i}(\alpha_i\beta_{i+1}-\beta_i\alpha_{i+1})=1 .
    +\]
    +
    +Hence  
    +
    +\[
    +[AFNBCEM]=\frac12\,K
    +         =\frac12\cdot1176
    +         =588 .
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{588}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 588

    +

    Extracted Answer: 588

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ \triangle ABC $ be a right triangle with $ \angle A = 90^\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \sqrt{3} $ for some positive integer $ n $. Find $ n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +A=(0,0),\qquad B=(b,0),\qquad C=(0,c) , \qquad  b^{2}+c^{2}=BC^{2}=38^{2}=1444 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Coordinates of \(K\) and \(L\)
    +
    +Because \(AK=BK=14\), the point \(K\) is on the perpendicular bisector of \(\overline{AB}\); hence  
    +
    +\[
    +K=\Bigl(\frac b2 ,\; \sqrt{14^{2}-\Bigl(\frac b2\Bigr)^{2}}\Bigr).
    +\]
    +
    +Write  
    +
    +\[
    +m=\frac b2 ,\qquad p=\sqrt{196-m^{2}},
    +\]
    +
    +so \(K=(m,p)\) and \(m^{2}+p^{2}=196\).
    +
    +Similarly \(AL=CL=14\) gives  
    +
    +\[
    +L=\Bigl(\sqrt{196-n^{2}},\; n\Bigr),
    +\]
    +
    +with  
    +
    +\[
    +n=\frac c2 ,\qquad q=\sqrt{196-n^{2}},\qquad n^{2}+q^{2}=196 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Trigonometric parametrisation  
    +
    +Since \(m^{2}+p^{2}=196\) we may set  
    +
    +\[
    +m=14\cos\theta ,\qquad p=14\sin\theta ,\qquad 0<\theta<\frac{\pi}{2}.
    +\]
    +
    +Likewise  
    +
    +\[
    +n=14\sin\psi ,\qquad q=14\cos\psi ,\qquad 0<\psi<\frac{\pi}{2}.
    +\]
    +
    +Because \(AKL\) is equilateral, \(\angle KAL=60^{\circ}\); therefore  
    +
    +\[
    +\psi-\theta=60^{\circ}\qquad\Longrightarrow\qquad\psi=\theta+\frac{\pi}{3}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  The right‑triangle condition  
    +
    +\[
    +b^{2}+c^{2}=4(m^{2}+n^{2})=1444\quad\Longrightarrow\quad m^{2}+n^{2}=361 .
    +\]
    +
    +Substituting the trigonometric expressions,
    +
    +\[
    +(14\cos\theta)^{2}+(14\sin\psi)^{2}=361
    +\Longrightarrow 
    +\cos ^{2}\theta+\sin ^{2}(\theta+60^{\circ})=\frac{361}{196}.
    +\]
    +
    +Using \(\sin^{2}\alpha=\frac{1-\cos2\alpha}{2}\) and simplifying we obtain  
    +
    +\[
    +3\cos2\theta+\sqrt3\sin2\theta=\frac{165}{49}.
    +\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Area of \(BKLC\)
    +
    +The region \(BKLC\) is the triangle \(ABC\) with three interior triangles removed:
    +
    +\[
    +[BKLC]=[ABC]-[ABK]-[ALC]-[AKL].
    +\]
    +
    +Now  
    +
    +\[
    +[ABC]=\frac{bc}{2}=2mn, \qquad
    +[ABK]=\frac{b\;y_{K}}{2}=mp, \qquad
    +[ALC]=\frac{c\;x_{L}}{2}=nq,
    +\]
    +
    +and \([AKL]=\frac{\sqrt3}{4}\,14^{2}=49\sqrt3\).
    +
    +Hence  
    +
    +\[
    +S=[BKLC]=2mn-mp-nq-49\sqrt3 .
    +\tag{2}
    +\]
    +
    +Insert the trigonometric forms:
    +
    +\[
    +\begin{aligned}
    +2mn&=2(14\cos\theta)(14\sin\psi)=196\bigl(2\cos\theta\sin\psi\bigr),\\
    +mp&=14^{2}\cos\theta\sin\theta=196(\cos\theta\sin\theta),\\
    +nq&=14^{2}\sin\psi\cos\psi=196(\sin\psi\cos\psi).
    +\end{aligned}
    +\]
    +
    +Thus  
    +
    +\[
    +S=196\bigl[2\cos\theta\sin\psi-(\cos\theta\sin\theta+\sin\psi\cos\psi)\bigr]-49\sqrt3 .
    +\tag{3}
    +\]
    +
    +Using \(\psi=\theta+60^{\circ}\) and elementary identities, (3) reduces to  
    +
    +\[
    +S=49\bigl[\sqrt3\,(4\cos^{2}\theta-1)-2\sin(2\theta+120^{\circ})\bigr].
    +\tag{4}
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Eliminate the trigonometric functions
    +
    +Set  
    +
    +\[
    +A=\cos(2\theta-30^{\circ}).
    +\]
    +
    +From (1),
    +
    +\[
    +3\cos2\theta+\sqrt3\sin2\theta
    +      =\frac{165}{49}
    +      =2\sqrt3\,A .
    +\]
    +
    +Hence  
    +
    +\[
    +A=\frac{165}{98\sqrt3}.
    +\tag{5}
    +\]
    +
    +Express the right–hand side of (4) in terms of \(A\).  
    +Write  
    +
    +\[
    +\begin{aligned}
    +X&=\frac{\sqrt3}{2}\cos2\theta,\qquad
    +Y=\frac12\sin2\theta,
    +\end{aligned}
    +\]
    +
    +so that  
    +
    +\[
    +A=X+Y,\qquad
    +\sin(2\theta+120^{\circ})=X-Y .
    +\]
    +
    +Then  
    +
    +\[
    +\sqrt3\,(4\cos^{2}\theta-1)=\sqrt3+4X,
    +\qquad
    +-2\sin(2\theta+120^{\circ})=-2(X-Y).
    +\]
    +
    +Substituting these into (4) gives  
    +
    +\[
    +S=49\bigl(\sqrt3+4X-2X+2Y\bigr)
    +   =49\bigl(\sqrt3+2(X+Y)\bigr)
    +   =49\bigl(\sqrt3+2A\bigr).
    +\]
    +
    +Finally insert (5):
    +
    +\[
    +S=49\left(\sqrt3+\frac{2\cdot165}{98\sqrt3}\right)
    +   =49\sqrt3+\frac{165}{\sqrt3}
    +   =\frac{147+165}{\sqrt3}
    +   =\frac{312}{\sqrt3}
    +   =104\sqrt3 .
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{104}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 104

    +

    Extracted Answer: 104

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the letters be numbered  
    +
    +\[
    +A=1,\;B=2,\;\dots ,\;L=12 .
    +\]
    +
    +A random pairing of the 12 letters is a **perfect matching**.  
    +The total number of unordered pairings is  
    +
    +\[
    +(12-1)!!=\frac{12!}{2!^{6}6!}=10395 .
    +\]
    +
    +---
    +
    +### 1.  Fix the partner of \(G\)
    +
    +In a random matching the partner of \(G\) is equally likely to be any of the other \(11\) letters.  
    +Let the partner be \(X\neq G\).  Write  
    +
    +\[
    +m=\min \{G,X\}.
    +\]
    +
    +The pair containing \(G\) will be the last (lexicographically largest) word **iff**  
    +all minima of the other five pairs are less than \(m\).  
    +Hence we must count, for each possible partner \(X\), the number of matchings of the
    +remaining \(10\) letters whose minima are all \(<m\).
    +
    +Denote by  
    +
    +* \(L\) – the letters smaller than \(m\) that are still present,
    +* \(H\) – the letters larger than \(m\) that are still present.
    +
    +If a matching of those ten letters contains a pair wholly inside \(H\) then its minimum
    +is \(\ge m\), which is not allowed.  
    +Thus **every letter of \(H\) must be paired with a distinct letter of \(L\)**.  
    +The remaining letters of \(L\) (if any) are paired among themselves.
    +
    +Let \(|L|=a,\;|H|=b\) \((a+b=10)\).  
    +A valid matching is obtained by
    +
    +1. choosing which \(b\) letters of \(L\) will be paired with the \(b\) letters of \(H\)
    +   – \(\binom{a}{b}\) ways;
    +2. bijecting the chosen \(b\) letters of \(L\) with the \(b\) letters of \(H\) –
    +   \(b!\) ways;
    +3. pairing the remaining \(a-b\) letters of \(L\) among themselves – \((a-b-1)!!\) ways.
    +
    +Hence the number of “good’’ matchings is  
    +
    +\[
    +\text{good}= \binom{a}{b}\,b!\,(a-b-1)!! 
    +           =\frac{a!}{2^{(a-b)/2}\,\bigl((a-b)/2\bigr)! } .
    +\]
    +
    +The total number of matchings of ten letters is  
    +
    +\[
    +\frac{10!}{2!^{5}5!}=945 .
    +\]
    +
    +---
    +
    +### 2.  Cases for the partner \(X\)
    +
    +#### (i)  \(X>G\)  
    +
    +Possible partners: \(H,I,J,K,L\) (5 choices).  
    +Here \(m=G\).  
    +Among the remaining letters we have  
    +
    +\[
    +L=\{A,B,C,D,E,F\}\;(a=6),\qquad
    +H=\{\text{the four letters }>G\text{ other than }X\}\;(b=4).
    +\]
    +
    +Thus  
    +
    +\[
    +\text{good}= \frac{6!}{2^{1}\cdot1!}=360,
    +\qquad
    +P(\text{good}\mid X)=\frac{360}{945}= \frac{8}{21}.
    +\]
    +
    +Contribution to the required probability:
    +
    +\[
    +5\cdot\frac1{11}\cdot\frac{8}{21}= \frac{40}{231}.
    +\]
    +
    +#### (ii)  \(X<G\)
    +
    +Possible partners: \(A,B,C,D,E,F\).  
    +Write \(X\) as the \(i\)-th letter (\(i=1,\dots ,6\)).
    +Then  
    +
    +\[
    +a=i-1,\qquad b=11-i .
    +\]
    +
    +The condition “all minima \(<X\)” requires \(b\le a\); this holds only when \(i=6\),
    +i.e. \(X=F\).
    +
    +For \(X=F\),
    +
    +\[
    +L=\{A,B,C,D,E\},\; a=5,\qquad 
    +H=\{H,I,J,K,L\},\; b=5 .
    +\]
    +
    +Hence  
    +
    +\[
    +\text{good}=5! =120,
    +\qquad
    +P(\text{good}\mid X=F)=\frac{120}{945}= \frac{8}{63}.
    +\]
    +
    +Contribution from this case:
    +
    +\[
    +\frac1{11}\cdot\frac{8}{63}= \frac{8}{693}.
    +\]
    +
    +All other choices of \(X<G\) give probability \(0\).
    +
    +---
    +
    +### 3.  Total probability
    +
    +\[
    +P=\frac{40}{231}+\frac{8}{693}
    +   =\frac{120}{693}+\frac{8}{693}
    +   =\frac{128}{693}.
    +\]
    +
    +Thus  
    +
    +\[
    +\frac{m}{n}= \frac{128}{693},\qquad m+n=128+693=821.
    +\]
    +
    +\[
    +\boxed{821}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 821

    +

    Extracted Answer: 821

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    First write the conditions in a convenient form.
    +
    +\[
    +x+y+z = 75 \qquad\text{and}\qquad 
    +x-yz<y-zx<z-xy .
    +\]
    +
    +Factor each inequality:
    +
    +\[
    +\begin{aligned}
    +x-yz<y-zx &\iff (x-y)(1+z)<0,\\
    +y-zx<z-xy &\iff (y-z)(1+x)<0 .
    +\end{aligned}
    +\]
    +
    +Thus on the plane \(x+y+z=75\),
    +
    +\[
    +(x-y)(z+1)<0,\qquad (y-z)(x+1)<0 .
    +\]
    +
    +---
    +
    +### 1.  Reduce to two variables
    +
    +From \(z=75-x-y\) we obtain
    +
    +\[
    +\begin{aligned}
    +(x-y)(z+1)&=(x-y)(76-x-y),\\
    +(y-z)(x+1)&=(x+2y-75)(x+1).
    +\end{aligned}
    +\]
    +
    +Hence the region in the \((x,y)\)-plane is described by  
    +
    +\[
    +\boxed{(x-y)(76-x-y)<0}\qquad\text{and}\qquad\boxed{(x+2y-75)(x+1)<0}.
    +\tag{1}
    +\]
    +
    +The four linear factors are
    +
    +\[
    +L_1=x-y,\;L_2=76-x-y,\;L_3=x+2y-75,\;L_4=x+1 .
    +\]
    +
    +---
    +
    +### 2.  Split the two products
    +
    +\[
    +\begin{aligned}
    +(x-y)(76-x-y)<0 &\Longleftrightarrow 
    +\begin{cases}
    +x>y,\;x+y>76\quad\text{(region }A)\\
    +\text{or}\\
    +x<y,\;x+y<76\quad\text{(region }B)
    +\end{cases}\\[2mm]
    +(x+2y-75)(x+1)<0 &\Longleftrightarrow
    +\begin{cases}
    +x<-1,\;x+2y>75\quad\text{(region }C)\\
    +\text{or}\\
    +x>-1,\;x+2y<75\quad\text{(region }D)
    +\end{cases}
    +\end{aligned}
    +\]
    +
    +Intersecting the possibilities gives four candidate regions:
    +
    +\[
    +\begin{array}{c|c}
    +\text{Intersection} & \text{Constraints}\\ \hline
    +A\cap C & x>y,\;x+y>76,\;x<-1,\;x+2y>75\\
    +A\cap D & x>y,\;x+y>76,\;x>-1,\;x+2y<75\\
    +B\cap C & x<y,\;x+y<76,\;x<-1,\;x+2y>75\\
    +B\cap D & x<y,\;x+y<76,\;x>-1,\;x+2y<75
    +\end{array}
    +\]
    +
    +The first intersection is impossible (it would require \(x>y\) while \(x<-1<y\)), so it is empty.
    +The remaining three are non‑empty; two are unbounded, while one is bounded.
    +
    +---
    +
    +### 3.  Identify the bounded region
    +
    +The bounded region is \(B\cap D\):
    +
    +\[
    +\begin{cases}
    +x>-1,\\[2pt]
    +x<y,\\[2pt]
    +x+2y<75 .
    +\end{cases}
    +\]
    +
    +From \(x<y\) and \(x+2y<75\) we obtain the upper bound for \(y\):
    +\[
    +y<\frac{75-x}{2}.
    +\]
    +
    +Together with \(x>-1\) this forces
    +\[
    +-1<x<25,
    +\qquad
    +x<y<\frac{75-x}{2}.
    +\]
    +
    +Hence in the \((x,y)\)-plane the region is the open triangle bounded by the three lines
    +
    +\[
    +x=-1,\quad y=x,\quad y=\frac{75-x}{2}.
    +\]
    +
    +Its vertices are  
    +
    +\[
    +(-1,-1),\;(-1,38),\;(25,25).
    +\]
    +
    +The area in the \((x,y)\)-plane is
    +
    +\[
    +\text{Area}_{xy}
    += \frac12\cdot(\text{base})\cdot(\text{height})
    += \frac12\cdot 39 \cdot 26=507 .
    +\]
    +
    +---
    +
    +### 4.  Convert to area on the original plane
    +
    +The plane \(x+y+z=75\) can be written as \(z=75-x-y\).
    +For a graph \(z=f(x,y)\) the surface element is  
    +
    +\[
    +dA = \sqrt{1+f_x^2+f_y^2}\,dx\,dy
    +    =\sqrt{1+(-1)^2+(-1)^2}\,dx\,dy
    +    =\sqrt{3}\,dx\,dy .
    +\]
    +
    +Therefore the area of the finite region on the plane \(x+y+z=75\) is  
    +
    +\[
    +\text{Area}= \sqrt{3}\times 507 = 507\sqrt{3}.
    +\]
    +
    +---
    +
    +### 5.  Form \(a\sqrt{b}\) and compute \(a+b\)
    +
    +\[
    +a=507,\qquad b=3\;( \text{square‑free}).
    +\]
    +
    +Thus  
    +
    +\[
    +a+b = 507+3 = 510.
    +\]
    +
    +\[
    +\boxed{510}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 510

    +

    Extracted Answer: 510

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +A piecewise linear periodic function is defined by $f(x)=\begin{cases}x&\text{if }x\in[-1,1)\\2-x&\text{if }x\in[1,3)\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\frac{a+b\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The graph of  
    +
    +\[
    +f(x)=\begin{cases}
    +x,&-1\le x<1\\[2pt]
    +2-x,&1\le x<3
    +\end{cases},\qquad f(x+4)=f(x)
    +\]
    +
    +is a periodic “saw‑tooth’’ of period \(4\).  
    +The parabola is  
    +
    +\[
    +x=34y^{2}\qquad (x\ge 0).
    +\]
    +
    +For an intersection we need  
    +
    +\[
    +y=f(x),\qquad x=34y^{2}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.   Reducing the \(x\)–coordinate
    +
    +Write \(x=34y^{2}=4n+u\) where \(n\in\mathbb Z\) and the reduced part  
    +
    +\[
    +u\in[-1,3)
    +\]
    +
    +(because on each period we use the definition of \(f\) on \([-1,3)\)).
    +Hence  
    +
    +\[
    +u=34y^{2}-4n .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.   The two cases for \(u\)
    +
    +* If \(u\in[-1,1)\) then \(f(x)=u\); the equation becomes  
    +
    +  \[
    +  y=u\quad\Longrightarrow\quad y=34y^{2}-4n .
    +  \]
    +
    +* If \(u\in[1,3)\) then \(f(x)=2-u\); the equation becomes  
    +
    +  \[
    +  y=2-u\quad\Longrightarrow\quad u=2-y ,
    +  \]
    +  hence  
    +
    +  \[
    +  34y^{2}-4n=2-y .
    +  \]
    +
    +Because \(f(x)\) takes only values in \([-1,1]\), all solutions must satisfy \(-1\le y\le 1\).
    +
    +--------------------------------------------------------------------
    +### 3.   Solving the quadratics
    +
    +**Case A:** \(y=34y^{2}-4n\)
    +
    +\[
    +34y^{2}-y-4n=0\qquad\Longrightarrow\qquad  
    +y=\frac{1\pm\sqrt{1+544n}}{68}.
    +\]
    +
    +**Case B:** \(34y^{2}-4n=2-y\)
    +
    +\[
    +34y^{2}+y-(2+4n)=0\qquad\Longrightarrow\qquad  
    +y=\frac{-1\pm\sqrt{273+544n}}{68}.
    +\]
    +
    +Since \(x=34y^{2}\le 34\), we have \(0\le x\le 34\).  
    +Consequently \(4n+u\le 34\) and with \(u\ge-1\) we obtain \(0\le n\le8\).
    +
    +--------------------------------------------------------------------
    +### 4.   Which roots lie in \([-1,1]\)?
    +
    +* For **Case A** (\(n=0,\dots,8\)) both roots are in \([-1,1]\).  
    +  Their sum for each \(n\) is
    +
    +  \[
    +  y_{A+}+y_{A-}= \frac{1}{34}.
    +  \]
    +
    +* For **Case B** (\(n=0,\dots,7\)) both roots are in \([-1,1]\);  
    +  for \(n=8\) only the “+’’ root lies in the interval.  
    +  The sum of the two roots for each \(n\le7\) is
    +
    +  \[
    +  y_{B+}+y_{B-}= -\frac{1}{34}.
    +  \]
    +
    +Thus the total sum of all \(y\)-coordinates is
    +
    +\[
    +\begin{aligned}
    +\sum y &=\sum_{n=0}^{8}\frac1{34}\;+\;\sum_{n=0}^{7}\!\Big(-\frac1{34}\Big)\;+\;y_{B+}(8)\\
    +&= \frac{9}{34}-\frac{8}{34}+y_{B+}(8)\\
    +&= \frac1{34}+ \frac{-1+\sqrt{273+544\cdot8}}{68}.
    +\end{aligned}
    +\]
    +
    +Since \(273+544\cdot8 = 4625 = 25\cdot185\),
    +
    +\[
    +y_{B+}(8)=\frac{-1+5\sqrt{185}}{68},
    +\qquad
    +\frac1{34}= \frac{2}{68}.
    +\]
    +
    +Hence
    +
    +\[
    +\sum y =\frac{2-1+5\sqrt{185}}{68}= \frac{1+5\sqrt{185}}{68}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.   Final form
    +
    +\[
    +\frac{1+5\sqrt{185}}{68}= \frac{a+b\sqrt{c}}{d},
    +\qquad 
    +a=1,\;b=5,\;c=185,\;d=68 .
    +\]
    +
    +All conditions are satisfied (\(\gcd(a,b,d)=1\) and \(185\) is square‑free).
    +
    +\[
    +a+b+c+d = 1+5+185+68 = 259.
    +\]
    +
    +\[
    +\boxed{259}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 259

    +

    Extracted Answer: 259

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 27 cells of a $3\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. 
    + | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | 
    + | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | 
    + | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | 
    + The number of different ways to fill such a grid can be written as $p^a\cdot q^b\cdot r^c\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\cdot a+q\cdot b+r\cdot c+s\cdot d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the three rows be \(R_{1},R_{2},R_{3}\) and the three \(3\times 3\) blocks be  
    +
    +\[
    +B_{1}= \text{columns }1\!-\!3,\qquad   
    +B_{2}= \text{columns }4\!-\!6,\qquad   
    +B_{3}= \text{columns }7\!-\!9 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Fix the first row  
    +
    +Since the rows are labelled, we may first choose any permutation of \(\{1,\dots ,9\}\) for \(R_{1}\).
    +There are  
    +
    +\[
    +9! = 2^{7}\cdot 3^{4}\cdot5\cdot7
    +\]
    +
    +ways.
    +
    +--------------------------------------------------------------------
    +### 2.  Which digits go to the second row in each block?  
    +
    +Assume \(R_{1}=1\,2\,3\;4\,5\,6\;7\,8\,9\) (the identity permutation).  
    +Then  
    +
    +* In \(B_{1}\) the missing digits are \(\{4,5,6,7,8,9\}\);  
    +* In \(B_{2}\) the missing digits are \(\{1,2,3,7,8,9\}\);  
    +* In \(B_{3}\) the missing digits are \(\{1,2,3,4,5,6\}\).
    +
    +For the second row we must pick, from each block, three of its six missing digits.
    +The three rows must each contain every digit exactly once, so each digit
    +must appear **once** in \(R_{2}\) (and the remaining occurrence of that digit will be in \(R_{3}\)).
    +Thus the choice of digits for \(R_{2}\) is a partition of the six–digit sets
    +subject to the condition that each of the nine digits occurs in exactly one block of \(R_{2}\).
    +
    +Let  
    +
    +* \(x\) = number of digits \(\{1,2,3\}\) placed in \(B_{2}\) (the rest go to \(B_{3}\));
    +* \(y\) = number of digits \(\{4,5,6\}\) placed in \(B_{1}\) (the rest go to \(B_{3}\));
    +* \(z\) = number of digits \(\{7,8,9\}\) placed in \(B_{1}\) (the rest go to \(B_{2}\)).
    +
    +From the block‑size condition we obtain  
    +
    +\[
    +\begin{cases}
    +y+z=3,\\
    +x+ (3-z)=3,\\
    +(3-x)+(3-y)=3,
    +\end{cases}\qquad\Longrightarrow\qquad
    +x=z,\;x+y=3 .
    +\]
    +
    +Hence \(x\) may be \(0,1,2,3\); then \(y=3-x\) and \(z=x\).
    +For a given \(x\),
    +
    +* choose the \(x\) digits of \(\{1,2,3\}\) that go to \(B_{2}\): \(\binom{3}{x}\) ways;
    +* choose the \(y=3-x\) digits of \(\{4,5,6\}\) that go to \(B_{1}\): \(\binom{3}{3-x}=\binom{3}{x}\) ways;
    +* choose the \(z=x\) digits of \(\{7,8,9\}\) that go to \(B_{1}\): \(\binom{3}{x}\) ways.
    +
    +Thus for this \(x\) we have \(\bigl(\binom{3}{x}\bigr)^{3}\) possibilities.
    +Summing over \(x=0,1,2,3\),
    +
    +\[
    +\sum_{x=0}^{3}\binom{3}{x}^{3}=1+27+27+1=56 .
    +\]
    +
    +So there are \(56\) ways to decide which three‑digit sets belong to the second row
    +(and the third row is forced to receive the complementary sets).
    +
    +--------------------------------------------------------------------
    +### 3.  Ordering the digits inside each block  
    +
    +Inside a block each row contains three distinct digits.
    +For a fixed block, the three chosen digits of \(R_{2}\) can be placed in the
    +three columns in \(3!\) ways, and independently the three digits of \(R_{3}\) can be placed in \(3!\) ways.
    +Hence each block contributes \((3!)^{2}=36\) arrangements.
    +
    +With three blocks we obtain \((36)^{3}=36^{3}=46\,656\) column‑orderings.
    +
    +--------------------------------------------------------------------
    +### 4.  Total number of grids  
    +
    +\[
    +N = 9! \times 56 \times 36^{3}
    +     = 2^{7}\!3^{4}\!5\!7\; \times 2^{3}\!7\; \times 2^{6}\!3^{6}
    +     = 2^{16}\,3^{10}\,5^{1}\,7^{2}.
    +\]
    +
    +Thus
    +
    +\[
    +N = p^{a}\,q^{b}\,r^{c}\,s^{d}
    +\quad\text{with}\quad
    +(p,q,r,s)=(2,3,5,7),\;
    +(a,b,c,d)=(16,10,1,2).
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Required sum  
    +
    +\[
    +p a + q b + r c + s d
    + = 2\cdot16 + 3\cdot10 + 5\cdot1 + 7\cdot2
    + = 32 + 30 + 5 + 14
    + = 81 .
    +\]
    +
    +\[
    +\boxed{81}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 81

    +

    Extracted Answer: 81

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Six points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \triangle BGE $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the line containing the points be the \(x\)-axis.  
    +Place \(A\) at the origin, \(A=(0,0)\), and write the coordinates of the other
    +collinear points as
    +
    +\[
    +B=(x_B,0),\;C=(x_C,0),\;D=(x_D,0),\;E=(x_E,0),\;F=(x_F,0).
    +\]
    +
    +---
    +
    +### 1.  Find the positions of \(B,\;C,\;D,\;E,\;F\)
    +
    +The given distances are along the line, so
    +
    +\[
    +\begin{aligned}
    +AC&=26 &&\Rightarrow x_C=26,\\[2pt]
    +AF&=73 &&\Rightarrow x_F=73,\\[2pt]
    +CE&=31 &&\Rightarrow x_E=x_C+31=57,\\[2pt]
    +DF&=33 &&\Rightarrow x_D=x_F-33=40,\\[2pt]
    +BD&=22 &&\Rightarrow x_B=x_D-22=18.
    +\end{aligned}
    +\]
    +
    +Thus  
    +
    +\[
    +A=0,\; B=18,\; C=26,\; D=40,\; E=57,\; F=73 .
    +\]
    +
    +---
    +
    +### 2.  Coordinates of \(G\)
    +
    +Let \(G=(x_G,h)\), where \(h>0\) is the perpendicular distance from \(G\) to the line.
    +
    +The distances from \(G\) to \(C\) and \(D\) give
    +
    +\[
    +\begin{cases}
    +(x_G-26)^2+h^2 = 40^2 = 1600,\\[4pt]
    +(x_G-40)^2+h^2 = 30^2 = 900 .
    +\end{cases}
    +\]
    +
    +Subtracting the second equation from the first:
    +
    +\[
    +(x_G-26)^2-(x_G-40)^2 = 1600-900 = 700 .
    +\]
    +
    +Compute the left side:
    +
    +\[
    +(x_G^2-52x_G+26^2)-(x_G^2-80x_G+40^2)
    +=28x_G-924 .
    +\]
    +
    +Hence  
    +
    +\[
    +28x_G-924 = 700 \quad\Longrightarrow\quad 28x_G = 1624
    +\quad\Longrightarrow\quad x_G = 58 .
    +\]
    +
    +Now find \(h\) using either distance equation; use the first:
    +
    +\[
    +(58-26)^2 + h^2 = 1600
    +\Longrightarrow 32^2 + h^2 = 1600
    +\Longrightarrow h^2 = 1600-1024 = 576
    +\Longrightarrow h = 24 .
    +\]
    +
    +Thus \(G=(58,24)\). Its perpendicular projection onto the line is at \(x=58\), which lies between \(E\) and \(F\).
    +
    +---
    +
    +### 3.  Area of \(\triangle BGE\)
    +
    +The base \(BE\) lies on the \(x\)-axis:
    +
    +\[
    +BE = x_E - x_B = 57-18 = 39 .
    +\]
    +
    +The height from \(G\) to this base is the vertical distance \(h=24\).
    +
    +Therefore
    +
    +\[
    +\text{Area} = \frac12 \times (\text{base}) \times (\text{height})
    += \frac12 \times 39 \times 24 = 39 \times 12 = 468 .
    +\]
    +
    +---
    +
    +\[
    +\boxed{468}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 468

    +

    Extracted Answer: 468

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +\text{Find all }n\in\mathbb Z_{>0}\text{ such that }(n+2)\mid 3(n+3)(n^2+9).
    +\]
    +
    +---
    +
    +### 1.  Replace \(n+2\) by a new variable  
    +
    +Set  
    +\[
    +m=n+2\qquad (m\ge 3).
    +\]
    +
    +Then  
    +
    +\[
    +n=m-2,\qquad n+3=m+1,\qquad n^2+9=(m-2)^2+9=m^{2}-4m+13 .
    +\]
    +
    +Hence the divisibility condition becomes  
    +
    +\[
    +m\mid 3(m+1)(m^{2}-4m+13).
    +\tag{1}
    +\]
    +
    +---
    +
    +### 2.  Reduce the right–hand side modulo \(m\)
    +
    +Modulo \(m\),
    +
    +\[
    +m+1\equiv 1,\qquad m^{2}-4m+13\equiv 13 .
    +\]
    +
    +Therefore  
    +
    +\[
    +3(m+1)(m^{2}-4m+13)\equiv 3\cdot1\cdot13=39 \pmod m .
    +\]
    +
    +So (1) is equivalent to  
    +
    +\[
    +m\mid 39 .
    +\tag{2}
    +\]
    +
    +Indeed, if \(m\mid 39\) then the right–hand side of (1) equals \(39+km\) for some integer \(k\), hence is divisible by \(m\); conversely, if \(m\mid 3(m+1)(m^{2}-4m+13)\) then \(m\mid 39\).
    +
    +---
    +
    +### 3.  List possible \(m\)
    +
    +The positive divisors of \(39\) are  
    +
    +\[
    +1,\;3,\;13,\;39 .
    +\]
    +
    +Since \(m=n+2\ge 3\) (because \(n\ge1\)), we keep  
    +
    +\[
    +m\in\{3,\;13,\;39\}.
    +\]
    +
    +---
    +
    +### 4.  Recover the corresponding \(n\)
    +
    +\[
    +\begin{aligned}
    +m=3 &\;\Rightarrow\; n=m-2=1,\\[2pt]
    +m=13 &\;\Rightarrow\; n=11,\\[2pt]
    +m=39 &\;\Rightarrow\; n=37 .
    +\end{aligned}
    +\]
    +
    +All three indeed satisfy the original divisibility (quick check: the quotients are \(40,420,4240\) respectively).
    +
    +---
    +
    +### 5.  Sum of all such \(n\)
    +
    +\[
    +1+11+37=49.
    +\]
    +
    +\[
    +\boxed{49}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 49

    +

    Extracted Answer: 49

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The parabola with equation $y=x^{2}-4$ is rotated $60^{\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\frac{a-\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +P:\;y=x^{2}-4
    +\]
    +
    +and rotate \(P\) \(60^{\circ}\) counter‑clockwise about the origin.  
    +If \((u,v)\) is a point of \(P\) \((v=u^{2}-4)\), after the rotation we obtain  
    +
    +\[
    +\begin{aligned}
    +x &=u\cos 60^{\circ}-v\sin 60^{\circ}
    +      =\frac{u-\sqrt3\,(u^{2}-4)}2,\\[2mm]
    +y &=u\sin 60^{\circ}+v\cos 60^{\circ}
    +      =\frac{\sqrt3\,u+u^{2}-4}2 .
    +\end{aligned}
    +\tag{1}
    +\]
    +
    +A point \((x,y)\) that belongs to both the original parabola and its image
    +must satisfy  
    +
    +\[
    +y=x^{2}-4 \qquad\text{and}\qquad (x,y)=\bigl(x(u),y(u)\bigr)\text{ for some }u .
    +\]
    +
    +Using (1) and substituting \(y=x^{2}-4\) we get an equation for the
    +pre‑image coordinate \(u\):
    +
    +\[
    +\Bigl(u-\sqrt3\,(u^{2}-4)\Bigr)^{2}=2u^{2}+2\sqrt3\,u+8 .
    +\]
    +
    +Simplifying gives  
    +
    +\[
    +3u^{4}-25u^{2}+40+2\sqrt3\,u\,(3-u^{2})=0 .
    +\tag{2}
    +\]
    +
    +Let \(t=u^{2}=x^{2}\;(t\ge0)\).  Equation (2) becomes  
    +
    +\[
    +\bigl(3t^{2}-25t+40\bigr)^{2}=12t\,(3-t)^{2},
    +\]
    +
    +or
    +
    +\[
    +9t^{4}-162t^{3}+937t^{2}-2108t+1600=0 .
    +\tag{3}
    +\]
    +
    +The quartic factors over the integers:
    +
    +\[
    +\begin{aligned}
    +9t^{4}-162t^{3}+937t^{2}-2108t+1600
    +  &=\bigl(t^{2}-11t+16\bigr)\bigl(9t^{2}-63t+100\bigr).
    +\end{aligned}
    +\]
    +
    +Thus the possible values of \(t\) are
    +
    +\[
    +t=\frac{11\pm\sqrt{57}}2,\qquad
    +t=\frac{63\pm\sqrt{369}}{18}.
    +\]
    +
    +Recall that \(t=x^{2}\) and that a genuine intersection must satisfy the
    +original unsquared equation  
    +
    +\[
    +3t^{2}-25t+40=2\sqrt3\,\sqrt t\,(3-t).
    +\tag{4}
    +\]
    +
    +Checking the sign of each side of (4) shows that only  
    +
    +\[
    +t=\frac{11-\sqrt{57}}2\approx1.725
    +\]
    +
    +satisfies (4) with \(x>0\).  (The other three roots correspond to the
    +case \(3t^{2}-25t+40= -2\sqrt3\,\sqrt t\,(3-t)\) or give \(y>0\).)
    +
    +Since \(y=x^{2}-4=t-4\),
    +
    +\[
    +y=\frac{11-\sqrt{57}}2-4=\frac{3-\sqrt{57}}2 .
    +\]
    +
    +Hence the required numbers are  
    +
    +\[
    +a=3,\qquad b=57,\qquad c=2,
    +\]
    +
    +with \(\gcd(a,c)=1\).  Therefore
    +
    +\[
    +a+b+c=3+57+2=62 .
    +\]
    +
    +\[
    +\boxed{62}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 62

    +

    Extracted Answer: 62

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The product $ \prod_{k=4}^{63} \frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})} = \frac{\log_4(5^{15})}{\log_5(5^{12})} \cdot \frac{\log_5(5^{24})}{\log_6(5^{21})} \cdot \frac{\log_6(5^{35})}{\log_7(5^{32})} \cdots \frac{\log_{63}(5^{3968})}{\log_{64}(5^{3965})} $ is equal to $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +\prod_{k=4}^{63}\frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})}
    +\]
    +
    +---
    +
    +### 1.  Rewrite each term using change of base  
    +
    +\[
    +\log_a b=\frac{\ln b}{\ln a}
    +\]
    +
    +Hence  
    +
    +\[
    +\frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})}
    + =\frac{\displaystyle\frac{\ln\! \big(5^{\,k^2-1}\big)}{\ln k}}
    +        {\displaystyle\frac{\ln\! \big(5^{\,k^2-4}\big)}{\ln (k+1)}}
    + =\frac{(k^2-1)\ln5}{\ln k}\cdot\frac{\ln (k+1)}{(k^2-4)\ln5}
    + =\frac{k^2-1}{k^2-4}\cdot\frac{\ln(k+1)}{\ln k}.
    +\]
    +
    +Thus the whole product becomes  
    +
    +\[
    +\Bigl[\prod_{k=4}^{63}\frac{k^2-1}{\,k^2-4}\Bigr]\,
    +\Bigl[\prod_{k=4}^{63}\frac{\ln(k+1)}{\ln k}\Bigr].
    +\]
    +
    +---
    +
    +### 2.  The logarithmic factor telescopes  
    +
    +\[
    +\prod_{k=4}^{63}\frac{\ln(k+1)}{\ln k}
    += \frac{\ln5}{\ln4}\cdot\frac{\ln6}{\ln5}\cdots\frac{\ln64}{\ln63}
    += \frac{\ln64}{\ln4}
    += \frac{6\ln2}{2\ln2}=3.
    +\]
    +
    +---
    +
    +### 3.  Simplify the rational factor  
    +
    +\[
    +\frac{k^2-1}{k^2-4}= \frac{(k-1)(k+1)}{(k-2)(k+2)}.
    +\]
    +
    +Hence  
    +
    +\[
    +\prod_{k=4}^{63}\frac{k^2-1}{k^2-4}
    += \Bigl[\prod_{k=4}^{63}\frac{k-1}{k-2}\Bigr]
    +  \Bigl[\prod_{k=4}^{63}\frac{k+1}{k+2}\Bigr].
    +\]
    +
    +**First product**
    +
    +\[
    +\prod_{k=4}^{63}\frac{k-1}{k-2}
    += \frac{3}{2}\cdot\frac{4}{3}\cdot\frac{5}{4}\cdots\frac{62}{61}
    += \frac{62}{2}=31.
    +\]
    +
    +**Second product**
    +
    +\[
    +\prod_{k=4}^{63}\frac{k+1}{k+2}
    += \frac{5}{6}\cdot\frac{6}{7}\cdot\frac{7}{8}\cdots\frac{64}{65}
    += \frac{5}{65}= \frac{1}{13}.
    +\]
    +
    +Multiplying,
    +
    +\[
    +\prod_{k=4}^{63}\frac{k^2-1}{k^2-4}=31\cdot\frac{1}{13}= \frac{31}{13}.
    +\]
    +
    +---
    +
    +### 4.  Combine the two parts  
    +
    +\[
    +\prod_{k=4}^{63}\frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})}
    += \frac{31}{13}\times 3 = \frac{93}{13}.
    +\]
    +
    +The fraction \(\frac{93}{13}\) is already in lowest terms (\(\gcd(93,13)=1\)).  
    +
    +Thus \(m=93,\; n=13\) and  
    +
    +\[
    +m+n = 93+13 = 106.
    +\]
    +
    +\[
    +\boxed{106}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 106

    +

    Extracted Answer: 106

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Sketch**
    +
    +Write every integer \(a\le 3^{6}=729\) in its base‑\(3\) expansion  
    +
    +\[
    +a = a_{0}+a_{1}3+a_{2}3^{2}+a_{3}3^{3}+a_{4}3^{4}+a_{5}3^{5},
    +\qquad a_{i}\in\{0,1,2\}.
    +\]
    +
    +Let  
    +
    +\[
    +A(x)=a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+a_{4}x^{4}+a_{5}x^{5}\in\mathbb{F}_{3}[x].
    +\]
    +
    +Modulo \(3^{7}\) we have  
    +
    +\[
    +a^{3}\equiv a_{0}^{3}+9a_{0}^{2}a_{1}+27\bigl(a_{0}a_{1}^{2}+a_{0}^{2}a_{2}\bigr)
    +               +\; \cdots\;+3^{6}a_{2}^{3}\pmod{3^{7}} .
    +\]
    +
    +Hence
    +
    +\[
    +a^{3}+b^{3}+c^{3}\equiv 
    +\sum_{i=0}^{2}3^{i}\bigl(a_{i}^{3}+b_{i}^{3}+c_{i}^{3}\bigr)\pmod{3^{7}} .
    +\]
    +
    +Because \(x^{3}\equiv x\pmod 3\) for \(x\in\{0,1,2\}\), the condition
    +\(a^{3}+b^{3}+c^{3}\equiv0\pmod{3^{7}}\) is equivalent to the three
    +independent linear equations  
    +
    +\[
    +a_{0}+b_{0}+c_{0}\equiv0,\qquad
    +a_{1}+b_{1}+c_{1}\equiv0,\qquad
    +a_{2}+b_{2}+c_{2}\equiv0\pmod 3 .
    +\]
    +
    +For each digit‑position \(i=0,1,2\) the number of ordered triples
    +\((a_{i},b_{i},c_{i})\) satisfying the linear condition is
    +\(3^{2}=9\) (choose any two digits freely, the third one is forced).
    +The remaining higher digits \(a_{3},a_{4},a_{5}\) are unrestricted; each
    +has \(3^{3}=27\) possibilities (three choices for each of the three
    +numbers).
    +
    +Therefore the total number of admissible triples \((a,b,c)\) is  
    +
    +\[
    +N = 9^{3}\cdot 27^{3}=3^{15}=14\,348\,907 .
    +\]
    +
    +Finally we need the remainder of \(N\) modulo \(1000\):
    +
    +\[
    +14\,348\,907\equiv 907\pmod{1000}.
    +\]
    +
    +\[
    +\boxed{907}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 735

    +

    Extracted Answer: 907

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Four unit squares form a $2 \times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +* \(a,b,c,d\) be the four interior edges (the two interior vertical and the two interior horizontal sides).  
    +* The eight outer edges are the two edges that belong to each unit square but are on the boundary of the
    +\(2\times2\) grid.
    +
    +For a particular unit square the number of its interior red sides is the number of red interior edges incident
    +to it.  
    +If a square has \(s\) interior red sides, then it needs exactly \(2-s\) red outer sides, because the total number
    +of red sides must be \(2\).  
    +
    +For a given square
    +
    +\[
    +\#\text{ ways to colour its two outer edges}= \binom{2}{\,2-s\,}=
    +\begin{cases}
    +1,&s=0\text{ or }2,\\[2pt]
    +2,&s=1 .
    +\end{cases}
    +\]
    +
    +Thus, once the interior edges are fixed, the outer edges can be coloured independently for each square.
    +If among the four squares exactly \(k\) of them have \(s=1\) (i.e. exactly one interior red edge incident to the
    +square), the number of completions of the outer edges is \(2^{k}\).
    +
    +--------------------------------------------------------------------
    +
    +### Counting interior–edge configurations
    +
    +The interior edges form a 4‑cycle  
    +
    +\[
    +A\;-\;B\;-\;D\;-\;C\;-\;A .
    +\]
    +
    +We list all \(2^{4}=16\) subsets of these edges and, for each, count how many squares have one interior red
    +edge.
    +
    +| # interior edges | type of selection | \# of squares with \(s=1\) | \# of such subsets | contributions |
    +|------------------|-------------------|----------------------------|--------------------|---------------|
    +| 0 | none | 0 | 1 | \(2^{0}=1\) |
    +| 1 | any one edge | 2 (the two squares incident to the edge) | 4 | \(4\cdot2^{2}=16\) |
    +| 2 | adjacent edges (share a vertex) | 2 (the two squares adjacent to the common vertex) | 4 | \(4\cdot2^{2}=16\) |
    +| 2 | opposite edges (no common vertex) | 4 (each square gets one) | 2 | \(2\cdot2^{4}=32\) |
    +| 3 | all but one edge | 2 (the two squares not incident to the missing edge) | 4 | \(4\cdot2^{2}=16\) |
    +| 4 | all four edges | 0 | 1 | \(1\cdot2^{0}=1\) |
    +
    +Adding the contributions:
    +
    +\[
    +1+16+16+32+16+1 = 82 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +Therefore there are  
    +
    +\[
    +\boxed{82}
    +\]
    +
    +different ways to colour the 12 unit segments so that each of the four unit squares has exactly two red sides
    +(and consequently two blue sides).
    +
    +
    +

    Results

    +

    Correct Answer: 82

    +

    Extracted Answer: 82

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \(2025=3^{4}\cdot5^{2}\).
    +
    +Divisors of \(2025\) are of the form \(3^{a}5^{b}\) with  
    +\(0\le a\le4,\;0\le b\le2\); therefore  
    +
    +\[
    +|A|=(4+1)(2+1)=15 .
    +\]
    +
    +--------------------------------------------------------------------
    +### Condition for the LCM
    +
    +For a subset \(B\subseteq A\),
    +
    +\[
    +\operatorname{lcm}(B)=3^{\max a}\,5^{\max b}.
    +\]
    +
    +Thus \(\operatorname{lcm}(B)=2025=3^{4}5^{2}\) iff  
    +
    +* at least one element of \(B\) has exponent \(a=4\) (i.e. is divisible by \(3^{4}\)), and  
    +* at least one element of \(B\) has exponent \(b=2\) (i.e. is divisible by \(5^{2}\)).
    +
    +--------------------------------------------------------------------
    +### Relevant divisor families  
    +
    +\[
    +X=\{d\in A\mid 3^{4}\mid d\}=\{81,405,2025\},\qquad |X|=3,
    +\]
    +
    +\[
    +Y=\{d\in A\mid 5^{2}\mid d\}=\{25,75,225,675,2025\},\qquad |Y|=5.
    +\]
    +
    +\(X\cap Y=\{2025\}\), so \(|X\cup Y|=3+5-1=7\).
    +
    +--------------------------------------------------------------------
    +### Counting subsets with the required property  
    +
    +A subset \(B\) works iff it meets both \(X\) and \(Y\).  
    +Using inclusion–exclusion on all \(2^{15}\) subsets of \(A\):
    +
    +\[
    +\begin{aligned}
    +\#\{B:\ B\cap X\neq\varnothing,\ B\cap Y\neq\varnothing\}
    +&=2^{15}
    + -2^{12}\;(\text{subsets missing }X)
    + -2^{10}\;(\text{subsets missing }Y)\\
    +&\qquad +2^{8}\;(\text{subsets missing both }X\cup Y)\\[2mm]
    +&=32768-4096-1024+256\\
    +&=27904 .
    +\end{aligned}
    +\]
    +
    +All these subsets are non‑empty, so the numerator is \(27904\).
    +
    +--------------------------------------------------------------------
    +### Probability
    +
    +\[
    +P=\frac{27904}{2^{15}}=\frac{27904}{32768}.
    +\]
    +
    +Both numbers are divisible by \(256\):
    +
    +\[
    +\frac{27904}{32768}=\frac{27904/256}{32768/256}= \frac{109}{128}.
    +\]
    +
    +The fraction \(\frac{109}{128}\) is already in lowest terms, so  
    +\(m=109,\;n=128\).
    +
    +\[
    +m+n=109+128=237.
    +\]
    +
    +\[
    +\boxed{237}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 237

    +

    Extracted Answer: 237

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Alex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1 –  How regions grow**
    +
    +When a new line segment is drawn in the disk, it either  
    +*does not meet any previous segment* – it creates **one** new region, or  
    +*meets \(k\) previous segments in interior points* – it creates **\(k+1\)** new regions  
    +(the segment is cut into \(k+1\) pieces, each of which separates a region).
    +
    +Hence, if we start with one region (the whole disk),
    +
    +\[
    +\#\text{regions}=1+\#\text{segments}+\#\text{interior intersections } .
    +\tag{1}
    +\]
    +
    +The two perpendicular diameters intersect once, giving the four initial
    +quadrants.  After the 25 random chords are added we will have  
    +
    +\[
    +27\text{ segments} = 2\text{ diameters}+25\text{ chords}.
    +\]
    +
    +So we only have to find the **expected number of interior intersection points**.
    +
    +--------------------------------------------------------------------
    +
    +**Step 2 –  Intersections with the diameters**
    +
    +A random chord meets a fixed diameter iff its two endpoints lie on opposite
    +sides of that diameter.  
    +
    +*Horizontal diameter* (\(y=0\)): the endpoints must belong to one of the
    +four unordered quadrant pairs  
    +
    +\[
    +\{Q_1,Q_3\},\{Q_1,Q_4\},\{Q_2,Q_3\},\{Q_2,Q_4\},
    +\]
    +
    +i.e. 4 out of the 6 possible unordered pairs of different quadrants.
    +Thus  
    +
    +\[
    +P(\text{chord meets a given diameter})=\frac{4}{6}= \frac23 .
    +\]
    +
    +The same probability holds for the vertical diameter.  
    +Hence the expected number of chord‑diameter intersections is  
    +
    +\[
    +25\;( \text{chords})\times 2\;( \text{diameters})\times \frac23
    +  =\frac{100}{3}.
    +\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 3 –  Intersections between two random chords**
    +
    +Let a chord be represented by the unordered pair of quadrants that contain its
    +end‑points.  
    +There are  
    +
    +* 4 *adjacent* pairs  \(\{0,1\},\{1,2\},\{2,3\},\{3,0\}\);  
    +* 2 *opposite* pairs   \(\{0,2\},\{1,3\}\).
    +
    +Thus the six possible chords are the six edges of the complete graph \(K_4\)
    +on the four quadrants.
    +
    +Two chords may be:
    +
    +| Relation of the two edges | How many ordered pairs | Intersection probability |
    +|---------------------------|-----------------------|--------------------------|
    +| Same edge (both chords use the same pair) | 6 (4 adjacent + 2 opposite) | \(\frac12\) |
    +| Share one vertex (adjacent edges) | 24 (8 both adjacent + 16 one adjacent–one opposite) | \(\frac12\) |
    +| Disjoint edges, both adjacent (e.g. \{0,1\} & \{2,3\}) | 4 | \(0\) |
    +| Disjoint edges, both opposite ( \{0,2\} & \{1,3\}) | 2 | \(1\) |
    +
    +*Why these probabilities?*  
    +
    +* Same edge – the two chords are independent copies inside the same two
    +quadrants.  A short calculation (or a symmetry argument) gives a crossing
    +probability of \(\frac12\).
    +* Share a vertex – one endpoint of the second chord lies in the same quadrant
    +as an endpoint of the first chord.  The second endpoint is always in a
    +different quadrant, so the second chord meets the first exactly when the
    +point that shares the vertex falls between the two endpoints of the first
    +chord.  Averaging over the uniform positions gives \(\frac12\) again.
    +* Disjoint adjacent edges lie completely on opposite sides of the
    +horizontal (or vertical) diameter, so they can never meet ⇒ probability \(0\).
    +* Disjoint opposite edges always cross the centre of the disk; any two such
    +chords intersect ⇒ probability \(1\).
    +
    +Summing the contributions of the \(36\) ordered pairs of chords,
    +
    +\[
    +S = 6\!\left(\frac12\right)+24\!\left(\frac12\right)+4\cdot0+2\cdot1 = 17 .
    +\]
    +
    +Therefore the probability that two independently chosen random chords intersect is  
    +
    +\[
    +p_{\text{chord–chord}} = \frac{S}{36}= \frac{17}{36}.
    +\tag{3}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 4 –  Expected number of chord–chord intersections**
    +
    +There are \(\binom{25}{2}=300\) unordered pairs of the 25 random chords.  
    +Using (3),
    +
    +\[
    +E(\text{chord–chord intersections})=300\cdot\frac{17}{36}
    +     =\frac{425}{3}=141\frac{2}{3}.
    +\tag{4}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 5 –  Total expected interior intersections**
    +
    +\[
    +\begin{aligned}
    +E(\text{total interior intersections})
    +&= (\text{diameters intersect})\\
    +&\qquad +(\text{chord–diameter intersections})\\
    +&\qquad +(\text{chord–chord intersections})\\[2mm]
    +&= 1+\frac{100}{3}+ \frac{425}{3}= 176 .
    +\end{aligned}
    +\tag{5}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 6 –  Expected number of regions**
    +
    +Insert (5) into formula (1) with the total of \(27\) segments:
    +
    +\[
    +E(\text{regions}) = 1 + 27 + 176 = 204 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{204}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 204

    +

    Extracted Answer: 204

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Circle $\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\omega_2$ with radius 15. Points $C$ and $D$ lie on $\omega_2$ such that $\overline{BC}$ is a diameter of $\omega_2$ and $\overline{BC} \perp \overline{AD}$. The rectangle $EFGH$ is inscribed in $\omega_1$ such that $\overline{EF} \perp \overline{BC}$, $C$ is closer to $\overline{GH}$ than to $\overline{EF}$, and $D$ is closer to $\overline{FG}$ than to $\overline{EH}$, as shown. Triangles $\triangle DGF$ and $\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Overview**
    +
    +Place the two circles on a coordinate plane, compute the positions of the relevant points, and write the
    +rectangle’s vertices in terms of its side–lengths.  
    +The conditions “\(C\) is closer to \(\overline{GH}\) than to \(\overline{EF}\)” and “\(D\) is closer to
    +\(\overline{FG}\) than to \(\overline{EH}\)” fix the orientation of the rectangle.  
    +Using the equality of the two triangle areas we obtain a simple relation between the rectangle’s width
    +and height, which together with the fact that the rectangle is inscribed in the small circle yields the
    +required dimensions and its area.
    +
    +--------------------------------------------------------------------
    +
    +### 1.  Coordinate set‑up  
    +
    +Let  
    +
    +* \(O\) be the centre of the large circle \(\omega_2\) (radius \(15\)).
    +* \(A\) be the centre of the small circle \(\omega_1\) (radius \(6\)).
    +* \(B\) the common point of tangency.
    +
    +Because the circles are internally tangent,
    +\[
    +OA = 15-6=9,
    +\qquad AB=6,
    +\qquad OB =15 .
    +\]
    +
    +Choose the \(x\)–axis along \(\overline{BC}\).  
    +Take  
    +
    +\[
    +O=(0,0),\qquad B=(15,0).
    +\]
    +
    +Then \(A\) lies on the same line, nine units left of \(B\):
    +\[
    +A=(9,0).
    +\]
    +
    +Since \(BC\) is a diameter of \(\omega_2\), the opposite end of the diameter is
    +\[
    +C=(-15,0).
    +\]
    +
    +The condition \(\overline{BC}\perp\overline{AD}\) makes \(AD\) vertical, so the points of
    +\(\omega_2\) with \(x=9\) are
    +\[
    +D=(9,12)\quad\text{or}\quad D=(9,-12).
    +\]
    +Because later we need \(D\) to be nearer the top side of the rectangle, we take  
    +
    +\[
    +\boxed{D=(9,12)} .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 2.  The rectangle \(EFGH\)
    +
    +\(EF\) is required to be perpendicular to \(\overline{BC}\); hence \(EF\) is a vertical side.
    +Let the rectangle have
    +
    +* width \(w\) (the horizontal side \(\overline{FG}\)),
    +* height \(h\) (the vertical side \(\overline{EF}= \overline{GH}\)).
    +
    +Since the rectangle is inscribed in \(\omega_1\), its centre coincides with the centre of \(\omega_1\),
    +namely \(A=(9,0)\).  Consequently the vertices are
    +
    +\[
    +\begin{aligned}
    +E&=\bigl(b,\,-\tfrac{h}{2}\bigr), &
    +F&=\bigl(b, \tfrac{h}{2}\bigr),\\[2mm]
    +G&=\bigl(a, \tfrac{h}{2}\bigr), &
    +H&=\bigl(a,\,-\tfrac{h}{2}\bigr),
    +\end{aligned}
    +\]
    +where  
    +
    +\[
    +a = 9-\frac{w}{2},\qquad b = 9+\frac{w}{2}.
    +\]
    +
    +Because every vertex lies on \(\omega_1\) (radius \(6\) and centre \((9,0)\)),
    +\[
    +(a-9)^2+\Bigl(\frac{h}{2}\Bigr)^2 = (b-9)^2+\Bigl(\frac{h}{2}\Bigr)^2 = 6^{2}=36 .
    +\]
    +Both equations give the single relation  
    +
    +\[
    +\boxed{w^{2}+h^{2}=144}\tag{1}
    +\]
    +(the rectangle’s diagonal is the diameter \(12\) of the small circle).
    +
    +--------------------------------------------------------------------
    +
    +### 3.  Interpreting the “closer‑to” conditions  
    +
    +The statement “\(C\) is closer to \(\overline{GH}\) than to \(\overline{EF}\)” forces \(\overline{GH}\) to be
    +the left vertical side (smaller \(x\))-coordinate) and \(\overline{EF}\) the right vertical side.  
    +Similarly “\(D\) is closer to \(\overline{FG}\) than to \(\overline{EH}\)” places \(\overline{FG}\) at the
    +top (larger \(y\))-coordinate.
    +
    +Thus  
    +
    +\[
    +\begin{aligned}
    +\text{dist}(C,\overline{GH})&=a-(-15)=a+15,\\
    +\text{dist}(C,\overline{EF})&=b+15,\\[1mm]
    +\text{dist}(D,\overline{FG})&=12-\frac{h}{2},\\
    +\text{dist}(D,\overline{EH})&=12+\frac{h}{2},
    +\end{aligned}
    +\]
    +and the above inequalities are automatically satisfied for any feasible rectangle
    +(\(a<b\) and \(h/2<12\)).
    +
    +--------------------------------------------------------------------
    +
    +### 4.  Equality of the two triangle areas  
    +
    +*Triangle \(DGF\).*  
    +\(G\) and \(F\) are the top‑left and top‑right vertices, so \(\overline{GF}\) is horizontal,
    +\(|GF| = w\).  The altitude from \(D\) to \(\overline{GF}\) is the vertical distance
    +\(12-\frac{h}{2}\).  Hence  
    +
    +\[
    +[ DGF ] = \frac12 \, w\!\left(12-\frac{h}{2}\right).
    +\tag{2}
    +\]
    +
    +*Triangle \(CHG\).*  
    +\(G\) and \(H\) lie on the left side, \(|GH|=h\).  The altitude from \(C\) to this side is the
    +horizontal distance \(a+15\).  Thus  
    +
    +\[
    +[ CHG ] = \frac12 \, h\,(a+15).
    +\tag{3}
    +\]
    +
    +Given \([DGF]=[CHG]\) and using \(a=9-\dfrac w2\), we have  
    +
    +\[
    +w\!\left(12-\frac{h}{2}\right)=
    +h\!\Bigl(9-\frac{w}{2}+15\Bigr)
    += h\!\bigl(24-\frac{w}{2}\bigr).
    +\]
    +
    +Expanding and cancelling the common term \(-\dfrac{wh}{2}\) yields  
    +
    +\[
    +12w = 24h \quad\Longrightarrow\quad \boxed{w = 2h}. \tag{4}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 5.  Determining \(w\) and \(h\)
    +
    +Insert \(w=2h\) into (1):
    +
    +\[
    +(2h)^{2}+h^{2}=144
    +\;\Longrightarrow\;5h^{2}=144
    +\;\Longrightarrow\;h^{2}=\frac{144}{5}.
    +\]
    +
    +Hence  
    +
    +\[
    +h = \frac{12}{\sqrt5}= \frac{12\sqrt5}{5},
    +\qquad 
    +w = 2h = \frac{24\sqrt5}{5}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 6.  Area of the rectangle  
    +
    +\[
    +[EFGH]=w\cdot h = 2h^{2}=2\cdot\frac{144}{5}= \frac{288}{5}.
    +\]
    +
    +Thus the required area is \(\displaystyle \frac{288}{5}\); the fraction is already in lowest terms.
    +So \(m=288,\; n=5\) and  
    +
    +\[
    +m+n = 288+5 = 293 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{293}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 293

    +

    Extracted Answer: 293

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let the sequence of rationals $ x_1, x_2, \ldots $ be defined such that $ x_1 = \frac{25}{11} $ and
    +$ x_{k+1} = \frac{1}{3} \left( x_k + \frac{1}{x_k} - 1 \right). $
    +$ x_{2025} $ can be expressed as $ \frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +x_{k+1}= \frac{x_k+\dfrac1{x_k}-1}{3}, \qquad x_1=\frac{25}{11}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  A convenient change of variable  
    +
    +Set  
    +
    +\[
    +t_k=\frac{x_k-1}{x_k+1}\qquad\Longleftrightarrow\qquad 
    +x_k=\frac{1+t_k}{1-t_k}.
    +\]
    +
    +Then a short computation gives  
    +
    +\[
    +t_{k+1}= \frac{3t_k^{2}-1}{2}. \tag{1}
    +\]
    +
    +Thus the problem reduces to iterating the quadratic map  
    +
    +\[
    +F(t)=\frac{3t^{2}-1}{2}
    +\]
    +
    +starting from  
    +
    +\[
    +t_1=\frac{x_1-1}{x_1+1}
    +      =\frac{25/11-1}{25/11+1}
    +      =\frac{7}{18}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Working with the original rationals  
    +
    +Write \(t_k=p_k/q_k\) in lowest terms.   
    +From (1)
    +
    +\[
    +\frac{p_{k+1}}{q_{k+1}}=
    +\frac{3p_k^{2}-3p_kq_k+3q_k^{2}}{2q_k^{2}}
    +      =\frac{p_k^{2}-p_kq_k+q_k^{2}}{3}\;\Big/
    +        \;\frac{p_kq_k}{1},
    +\]
    +
    +hence (clearing the common factor \(3\))
    +
    +\[
    +\boxed{\displaystyle 
    +p_{k+1}= \frac{p_k^{2}-p_kq_k+q_k^{2}}{3},
    +\qquad 
    +q_{k+1}=p_kq_k } . \tag{2}
    +\]
    +
    +For the initial pair  
    +
    +\[
    +p_1=25,\qquad q_1=11 .
    +\]
    +
    +Because \(p_1\equiv1,\; q_1\equiv2\pmod 3\) one checks from (2) that  
    +\(p_k\equiv1,\; q_k\equiv2\pmod 3\) for every \(k\); consequently the
    +division by \(3\) in (2) is always exact and the reduced fractions
    +\(\dfrac{p_k}{q_k}=x_k\) stay in lowest terms.
    +
    +--------------------------------------------------------------------
    +### 3.  Behaviour modulo \(8\)
    +
    +\(3\) is invertible modulo \(8\) (\(3^{-1}\equiv3\)).  
    +From (2)
    +
    +\[
    +p_{k+1}\equiv 3\bigl(p_k^{2}-p_kq_k+q_k^{2}\bigr)\pmod 8,
    +\qquad 
    +q_{k+1}\equiv p_kq_k\pmod 8 .
    +\]
    +
    +Starting with \((p_1,q_1)\equiv(1,3)\pmod8\) one obtains
    +
    +\[
    +(p_2,q_2)\equiv(5,3),\qquad
    +(p_3,q_3)\equiv(1,7),
    +\]
    +
    +and thereafter  
    +
    +\[
    +p_k\equiv1,\quad q_k\equiv7\pmod8 \qquad(k\ge3).
    +\]
    +
    +Hence for every \(k\ge3\)
    +
    +\[
    +p_k+q_k\equiv0\pmod8. \tag{3}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Behaviour modulo \(125\)
    +
    +\(3^{-1}\equiv42\pmod{125}\).  Using (2),
    +
    +\[
    +p_{k+1}\equiv42\bigl(p_k^{2}-p_kq_k+q_k^{2}\bigr)\pmod{125},
    +\qquad 
    +q_{k+1}\equiv p_kq_k\pmod{125}. \tag{4}
    +\]
    +
    +Computating a few steps (mod 125) gives  
    +
    +\[
    +\begin{array}{c|c|c}
    +k & p_k\pmod{125} & q_k\pmod{125}\\ \hline
    +1 & 25 & 11\\
    +2 & 32 & 25\\
    +3 & 33 & 50\\
    +4 & 63 & 25\\
    +5 & 48 & 75\\
    +6 & 68 &100\\
    +\vdots &\vdots &\vdots
    +\end{array}
    +\]
    +
    +From \(k=4\) onward the pair \((p_k,q_k)\) repeats with period 20:
    +
    +\[
    +(p_{k+20},q_{k+20})\equiv(p_k,q_k)\pmod{125}\qquad(k\ge4).
    +\]
    +
    +Since \(2025\equiv5\pmod{20}\) and \(2025\ge4\),
    +
    +\[
    +p_{2025}\equiv p_5\equiv48,\qquad
    +q_{2025}\equiv q_5\equiv75 \pmod{125}. \tag{5}
    +\]
    +
    +Thus
    +
    +\[
    +p_{2025}+q_{2025}\equiv48+75=123\pmod{125}. \tag{6}
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Combination (Chinese Remainder)
    +
    +From (3) we have \(p_{2025}+q_{2025}\equiv0\pmod8\);   
    +from (6) we have \(p_{2025}+q_{2025}\equiv123\pmod{125}\).
    +
    +Let \(S=p_{2025}+q_{2025}\).  
    +Write \(S=8u\); then \(8u\equiv123\pmod{125}\).
    +Since \(8^{-1}\equiv47\pmod{125}\),
    +
    +\[
    +u\equiv47\cdot123\equiv31\pmod{125},
    +\qquad
    +S=8u\equiv8\cdot31=248\pmod{1000}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 6.  Answer
    +
    +The required remainder is  
    +
    +\[
    +\boxed{248}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 248

    +

    Extracted Answer: 248

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +From an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.
    +
    +In general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1.  Greedy representation**
    +
    +For a value \(N\) write  
    +
    +\[
    +N = 25q + r ,\qquad 0\le r<25 .
    +\]
    +
    +The greedy algorithm first uses \(q\) quarters, then as many dimes as possible from the remainder \(r\):
    +\[
    +r = 10d + e ,\qquad 0\le e<10 .
    +\]
    +Hence the greedy collection has  
    +
    +\[
    +\text{coins}_{\text{greedy}} = q+d+e .
    +\tag{1}
    +\]
    +
    +**Step 2.  When can we do better?**
    +
    +A collection using \(a\) quarters and \(b\) dimes (the pennies are forced) has  
    +
    +\[
    +25a+10b\le N ,\qquad \text{pennies}=N-25a-10b .
    +\]
    +
    +Its total number of coins is  
    +
    +\[
    +a+b+(N-25a-10b)=N-(24a+9b).
    +\]
    +
    +Because \(N\) is fixed, the collection is optimal iff the quantity  
    +
    +\[
    +W=24a+9b
    +\tag{2}
    +\]
    +
    +is as large as possible under the constraint \(25a+10b\le N\).  
    +
    +**Step 3.  Compare the greedy choice with one fewer quarter**
    +
    +The greedy choice uses \(a=q\) and \(b=d\).  
    +Consider reducing the number of quarters by one: take \(a'=q-1\).  
    +The value that must now be made with dimes and pennies is \(25+r\); the maximal possible number
    +of dimes is
    +
    +\[
    +b'=\Big\lfloor\frac{25+r}{10}\Big\rfloor .
    +\]
    +
    +Write \(r=10d+e\;(0\le e\le 9)\). Then  
    +
    +\[
    +\frac{25+r}{10}=2+d+\frac{e+5}{10},
    +\qquad
    +b'=d+2+f,
    +\]
    +where  
    +
    +\[
    +f=\Big\lfloor\frac{e+5}{10}\Big\rfloor=
    +\begin{cases}
    +0,&e\le4,\\[2pt]
    +1,&e\ge5 .
    +\end{cases}
    +\]
    +
    +The weight (2) for the greedy choice is  
    +
    +\[
    +W_{\text{gr}}=24q+9d .
    +\]
    +
    +For the alternative with one fewer quarter we have  
    +
    +\[
    +W_{\text{alt}}=24(q-1)+9(d+2+f)=W_{\text{gr}}-24+18+9f
    +      =W_{\text{gr}}+( -6+9f).
    +\]
    +
    +Thus  
    +
    +\[
    +W_{\text{alt}}-W_{\text{gr}}=
    +\begin{cases}
    +-6, & e\le 4,\\[2pt]
    ++3, & e\ge 5 .
    +\end{cases}
    +\]
    +
    +If \(e\ge5\) the alternative has **larger** weight, i.e. it uses **fewer** coins
    +(three fewer, because the weight increases by 3).  
    +If \(e\le4\) the alternative is worse.
    +
    +Consequently the greedy algorithm is **not optimal exactly when**
    +\[
    +e = r \bmod 10 \ge 5 .
    +\tag{3}
    +\]
    +
    +**Step 4.  Which remainders cause failure?**
    +
    +Since \(r\) ranges from \(0\) to \(24\), condition (3) means  
    +
    +\[
    +r\in\{5,6,7,8,9,15,16,17,18,19\}.
    +\tag{4}
    +\]
    +
    +For \(N<25\) we have \(q=0\); only 1‑cent and 10‑cent coins are usable, and the greedy
    +choice (as many dimes as possible) is obviously optimal.  Hence failures occur only for
    +\(N\ge25\) with remainder (4) upon division by \(25\).
    +
    +**Step 5.  Counting the failures between 1 and 1000**
    +
    +The numbers \(25\le N\le 1000\) form 39 complete blocks of 25 consecutive integers
    +(\(25\)–\(999\)) and the single extra number \(1000\).
    +
    +- In each full block every residue modulo \(25\) appears once,
    +  so each block contains exactly \(10\) failures (the residues in (4)).
    +- Hence failures in the 39 blocks: \(39\times10=390\).
    +
    +The leftover number \(1000\) has residue \(0\) (not a failure).
    +
    +Thus the total number of failures is \(390\).
    +
    +**Step 6.  Successes**
    +
    +Out of the \(1000\) possible values of \(N\),
    +
    +\[
    +\text{successful }N = 1000 - 390 = 610 .
    +\]
    +
    +\[
    +\boxed{610}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 610

    +

    Extracted Answer: 610

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $ n $ values of $ x $ in the interval $ 0 < x < 2\pi $ where $ f(x) = \sin(7\pi \cdot \sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For  
    +
    +\[
    +f(x)=\sin\bigl(7\pi\sin(5x)\bigr)
    +\]
    +
    +we need the solutions of  
    +
    +\[
    +\sin\bigl(7\pi\sin(5x)\bigr)=0\qquad(0<x<2\pi).
    +\]
    +
    +---
    +
    +### 1.  Zeros of \(f\)
    +
    +\[
    +\sin(A)=0\iff A=m\pi,\;m\in\mathbb Z .
    +\]
    +
    +Hence  
    +
    +\[
    +7\pi\sin(5x)=m\pi\Longrightarrow \sin(5x)=\frac{m}{7}.
    +\]
    +
    +Because \(\sin(5x)\in[-1,1]\), the integer \(m\) must satisfy  
    +
    +\[
    +-7\le m\le 7 .
    +\]
    +
    +Let \(k=m\). For each integer \(k\) with \(-7\le k\le 7\) we solve  
    +
    +\[
    +\sin(5x)=\frac{k}{7}.
    +\]
    +
    +Put \(\theta =5x\). Then \(\theta\in(0,10\pi)\) and we need  
    +
    +\[
    +\sin\theta = \frac{k}{7}.
    +\]
    +
    +* **\(k=\pm7\)** (\(\sin\theta=\pm1\)).  
    +  In each \(2\pi\)-period there is exactly one solution.  
    +  Over the interval \((0,10\pi)\) (5 periods) we obtain \(5\) solutions for \(k=7\) and
    +  \(5\) solutions for \(k=-7\).
    +
    +* **\(k=0\)** (\(\sin\theta=0\)).  
    +  Solutions are \(\theta=n\pi\).  
    +  With \(0<\theta<10\pi\) we have \(n=1,2,\dots ,9\): \(9\) solutions.
    +
    +* **\(k=\pm1,\pm2,\dots ,\pm6\)** (\(|k/7|<1\) and \(\neq0\)).  
    +  In each period there are two distinct solutions, so over \(5\) periods we get
    +  \(2\cdot5=10\) solutions for each such \(k\).
    +
    +There are \(12\) values of \(k\) with \(|k|\le6\) and \(k\neq0\).
    +
    +Hence the total number of zeros is  
    +
    +\[
    +n = 5+5+9+12\cdot10 = 139 .
    +\]
    +
    +---
    +
    +### 2.  Tangent points
    +
    +Differentiate:
    +
    +\[
    +f'(x)=\cos\!\bigl(7\pi\sin(5x)\bigr)\cdot7\pi\cdot5\cos(5x)
    +      =35\pi\cos(5x)\cos\!\bigl(7\pi\sin(5x)\bigr).
    +\]
    +
    +At a zero of \(f\) we have \(\sin(5x)=k/7\), so  
    +
    +\[
    +\cos\!\bigl(7\pi\sin(5x)\bigr)=\cos(k\pi)=(-1)^k\neq0 .
    +\]
    +
    +Thus \(f'(x)=0\) exactly when \(\cos(5x)=0\), i.e. when \(\sin(5x)=\pm1\).
    +Those correspond precisely to the cases \(k=\pm7\).
    +
    +We already counted \(5\) solutions for \(k=7\) and \(5\) for \(k=-7\); all of them are
    +tangency points. Hence  
    +
    +\[
    +t = 5+5 = 10 .
    +\]
    +
    +---
    +
    +### 3.  Required sum
    +
    +\[
    +n+t = 139+10 = 149 .
    +\]
    +
    +\[
    +\boxed{149}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 149

    +

    Extracted Answer: 149

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Label the vertices of the regular \(24\)-gon by  
    +
    +\[
    +0,1,2,\ldots ,23\qquad(\text{mod }24).
    +\]
    +
    +If a segment connects vertices \(i\) and \(j\) then the chord length is determined by the
    +shorter distance  
    +
    +\[
    +k=\min\{|i-j|,\;24-|i-j|\},\qquad 1\le k\le 12 .
    +\]
    +
    +All 12 drawn segments must have the same length, so every segment must join two vertices that
    +are exactly \(k\) steps apart for one fixed \(k\in\{1,2,\ldots ,12\}\).
    +
    +---------------------------------------------------------------------
    +
    +### 1.  The graph for a fixed \(k\)
    +
    +For a given \(k\) consider the graph  
    +
    +\[
    +G_k=\{\,\{i,i+k\}:i=0,1,\ldots ,23\}\ .
    +\]
    +
    +Each vertex has degree \(2\) (edges to \(i+k\) and to \(i-k\)), so \(G_k\) is a disjoint union
    +of cycles.  
    +
    +Let  
    +
    +\[
    +g=\gcd(24,k).
    +\]
    +
    +Then \(G_k\) consists of \(g\) cycles, each of length  
    +
    +\[
    +L=\frac{24}{g}.
    +\]
    +
    +---------------------------------------------------------------------
    +
    +### 2.  Perfect matchings of \(G_k\)
    +
    +A required drawing is exactly a perfect matching (1‑factor) of \(G_k\).
    +
    +* If \(L\) is odd, a perfect matching is impossible.  
    +  This occurs only for \(k=8\) (\(g=8,\;L=3\)).
    +
    +* If \(L=2\) (the case \(k=12\)), each component is a single edge, so the matching is
    +forced – exactly **one** way.
    +
    +* If \(L\) is even and \(\,L\ge4\), each even cycle has exactly two perfect matchings
    +(alternating edges).  
    +  Hence for such a \(k\) the number of matchings is  
    +
    +  \[
    +  2^{\,\text{number of cycles}}=2^{g}.
    +  \]
    +
    +---------------------------------------------------------------------
    +
    +### 3.  Count for each possible \(k\)
    +
    +\[
    +\begin{array}{c|c|c|c}
    +k & g=\gcd(24,k) & L=24/g & \text{matchings }N(k)\\ \hline
    +1 & 1 & 24 & 2\\
    +2 & 2 & 12 & 4\\
    +3 & 3 & 8  & 8\\
    +4 & 4 & 6  & 16\\
    +5 & 1 & 24 & 2\\
    +6 & 6 & 4  & 64\\
    +7 & 1 & 24 & 2\\
    +8 & 8 & 3  & 0\\
    +9 & 3 & 8  & 8\\
    +10& 2 & 12 & 4\\
    +11& 1 & 24 & 2\\
    +12&12 & 2  & 1
    +\end{array}
    +\]
    +
    +---------------------------------------------------------------------
    +
    +### 4.  Total number of drawings
    +
    +\[
    +\begin{aligned}
    +\sum_{k=1}^{12} N(k)&=
    +2+4+8+16+2+64+2+0+8+4+2+1\\
    +&=113 .
    +\end{aligned}
    +\]
    +
    +---------------------------------------------------------------------
    +
    +Thus there are  
    +
    +\[
    +\boxed{113}
    +\]
    +
    +different ways to draw 12 equal‑length segments so that every vertex of the regular 24‑gon
    +is an endpoint of exactly one segment.
    +
    +
    +

    Results

    +

    Correct Answer: 113

    +

    Extracted Answer: 113

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A_1A_2 \ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:
    +* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \leq i \leq 10 $,
    +* $ \cos(\angle A_iA_1A_{i+1}) = \frac{12}{13} $ for each $ 2 \leq i \leq 10 $,
    +* The perimeter of $ A_1A_2 \ldots A_{11} $ is 20.
    +If $ A_1A_2 + A_1A_{11} $ can be expressed as $ \frac{m\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +a_i=|A_iA_1|\qquad (i=2,\dots ,11),\qquad b_i=|A_iA_{i+1}|\;(i=2,\dots ,10)
    +\]
    +
    +and let \(\theta =\angle A_iA_1A_{i+1}\) for \(2\le i\le10\).
    +
    +--------------------------------------------------------------------
    +### 1.  The radii from \(A_1\)
    +
    +For each triangle \(A_iA_1A_{i+1}\)
    +
    +\[
    +\text{area}=1,\qquad \cos\theta=\frac{12}{13}.
    +\]
    +
    +Hence  
    +
    +\[
    +\sin\theta =\sqrt{1-\cos^2\theta}
    +          =\sqrt{1-\frac{144}{169}}
    +          =\frac{5}{13}.
    +\]
    +
    +The area formula gives  
    +
    +\[
    +1=\frac12 a_i a_{i+1}\sin\theta
    +   \Longrightarrow a_i a_{i+1}= \frac{2}{\sin\theta}
    +   =\frac{2}{5/13}= \frac{26}{5}\qquad (1)
    +\]
    +
    +for every \(i=2,\dots ,10\).
    +
    +Thus every adjacent pair of radii satisfies the same product.
    +Consequently the lengths alternate:
    +
    +\[
    +a_2=a_4=a_6=a_8=a_{10}=x,\qquad 
    +a_3=a_5=a_7=a_9=a_{11}=y,
    +\]
    +
    +with  
    +
    +\[
    +xy=\frac{26}{5}. \tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Lengths of the polygon sides not incident with \(A_1\)
    +
    +In \(\triangle A_iA_1A_{i+1}\) the side \(b_i=|A_iA_{i+1}|\) satisfies the law of cosines:
    +
    +\[
    +b_i^2 = a_i^2 + a_{i+1}^2 -2a_i a_{i+1}\cos\theta .
    +\]
    +
    +Using \(\cos\theta=\frac{12}{13}\) and (1),
    +
    +\[
    +b_i^2 = a_i^2 + a_{i+1}^2
    +        - 2\!\left(\frac{26}{5}\right)\!\frac{12}{13}
    +      = a_i^2 + a_{i+1}^2 - \frac{624}{65}
    +      = a_i^2 + a_{i+1}^2 - 9.6 .
    +\]
    +
    +Because each adjacent pair consists of one \(x\) and one \(y\), the quantity
    +\(a_i^2+a_{i+1}^2\) is the same for all \(i\).  Hence all \(b_i\) are equal; denote this common length by \(b\).
    +
    +Let  
    +
    +\[
    +S=x+y .
    +\]
    +
    +Then \(x^2+y^2=S^2-2xy\).  Using (2) we obtain
    +
    +\[
    +b^{2}=S^{2}-2xy-2xy\cos\theta
    +      =S^{2}-2xy(1+\cos\theta).
    +\]
    +
    +Since \(\cos\theta=\frac{12}{13}\),  
    +
    +\[
    +1+\cos\theta = \frac{25}{13},\qquad
    +2xy(1+\cos\theta)=2\!\left(\frac{26}{5}\right)\!\frac{25}{13}=20.
    +\]
    +
    +Thus  
    +
    +\[
    +b^{2}=S^{2}-20,\qquad b=\sqrt{S^{2}-20}. \tag{3}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Using the perimeter
    +
    +The perimeter of the 11‑gon is
    +
    +\[
    +|A_1A_2|+|A_1A_{11}|+\sum_{i=2}^{10}|A_iA_{i+1}|
    += x + y + 9b = S + 9\sqrt{S^{2}-20}=20.
    +\]
    +
    +Let \(t=\sqrt{S^{2}-20}\;(t\ge0)\).  Then  
    +
    +\[
    +\sqrt{t^{2}+20}+9t=20\quad\Longrightarrow\quad 
    +\sqrt{t^{2}+20}=20-9t.
    +\]
    +
    +Squaring yields  
    +
    +\[
    +t^{2}+20 = (20-9t)^{2}=400-360t+81t^{2},
    +\]
    +\[
    +80t^{2}-360t+380=0\;\Longrightarrow\;
    +4t^{2}-18t+19=0.
    +\]
    +
    +The discriminant is \(D=18^{2}-4\cdot4\cdot19=324-304=20\), so
    +
    +\[
    +t=\frac{18\pm\sqrt{20}}{8}
    +   =\frac{9\pm\sqrt5}{4}.
    +\]
    +
    +Since \(20-9t\ge0\), we take the minus sign:
    +
    +\[
    +t=\frac{9-\sqrt5}{4}.
    +\]
    +
    +Now \(S = 20-9t\):
    +
    +\[
    +S = 20 - 9\!\left(\frac{9-\sqrt5}{4}\right)
    +   = \frac{80-(81-9\sqrt5)}{4}
    +   = \frac{9\sqrt5-1}{4}.
    +\]
    +
    +Thus  
    +
    +\[
    +|A_1A_2|+|A_1A_{11}| = S = \frac{9\sqrt5-1}{4}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Putting it into the required form
    +
    +\[
    +\frac{9\sqrt5-1}{4}=\frac{m\sqrt{n}-p}{q},
    +\qquad m=9,\; n=5,\; p=1,\; q=4.
    +\]
    +
    +These satisfy the given conditions ( \(n\) square‑free, no prime divides all of \(m,p,q\) ).
    +
    +Finally  
    +
    +\[
    +m+n+p+q = 9+5+1+4 = 19.
    +\]
    +
    +\[
    +\boxed{19}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 19

    +

    Extracted Answer: 19

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Sixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Overview**
    +
    +Let the 16 chairs be numbered \(1,2,\dots ,16\).  
    +A selection of 8 chairs corresponds to a binary string of length \(16\) with exactly eight \(1\)’s (occupied chairs) and eight \(0\)’s (empty chairs).
    +
    +A person “sits next to two other people’’ exactly when a chair is occupied **and** its two neighbours are also occupied.  
    +Hence the forbidden pattern in the binary string is the block \(111\).  
    +
    +Thus we must count the binary strings of length \(16\) containing exactly eight \(1\)’s and **no** occurrence of \(111\).
    +
    +--------------------------------------------------------------------
    +
    +### 1.  Decomposing the 1‑blocks
    +
    +Because a block of three or more consecutive \(1\)’s is not allowed, every maximal block of 1’s is of length **1** or **2**.
    +
    +Suppose the string contains  
    +
    +* \(a\) blocks of length \(1\) and  
    +* \(c\) blocks of length \(2\).
    +
    +Then  
    +
    +\[
    +a+2c = 8\qquad(\text{total number of }1\text{'s}),
    +\]
    +\[
    +b = a+c = 8-c\qquad(\text{total number of blocks}).
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 2.  Placing the blocks among the 0’s
    +
    +Between any two consecutive blocks we need at least one \(0\).  
    +With \(b\) blocks we need at least \(b-1\) separating zeros.
    +
    +The total number of zeros is \(16-8 = 8\).  
    +After reserving the mandatory \(b-1\) zeros, there remain  
    +
    +\[
    +8-(b-1)=9-b
    +\]
    +
    +extra zeros that may be placed arbitrarily in the \(b+1\) gaps
    +(before the first block, between blocks, after the last block).
    +
    +The number of ways to distribute these extra zeros is a stars‑and‑bars count:
    +
    +\[
    +\binom{(9-b)+(b+1)-1}{b}= \binom{9}{b}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 3.  Ordering the blocks
    +
    +Among the \(b\) blocks, we must choose which \(c\) of them are the length‑2 blocks.
    +That can be done in  
    +
    +\[
    +\binom{b}{c}=\binom{8-c}{c}
    +\]
    +
    +ways.
    +
    +--------------------------------------------------------------------
    +
    +### 4.  Summation
    +
    +Summing over all feasible values of \(c\) (from \(0\) to \(\lfloor 8/2\rfloor =4\)) we obtain
    +
    +\[
    +\begin{aligned}
    +N &=\sum_{c=0}^{4}\binom{8-c}{c}\binom{9}{\,8-c\,} \\[2mm]
    +  &=\binom{8}{0}\binom{9}{8}
    +    +\binom{7}{1}\binom{9}{7}
    +    +\binom{6}{2}\binom{9}{6}
    +    +\binom{5}{3}\binom{9}{5}
    +    +\binom{4}{4}\binom{9}{4}\\[2mm]
    +  &=1\cdot9\;+\;7\cdot36\;+\;15\cdot84\;+\;10\cdot126\;+\;1\cdot126\\[2mm]
    +  &=9+252+1260+1260+126\\[2mm]
    +  &=2907.
    +\end{aligned}
    +\]
    +
    +Thus there are \(N=2907\) possible selections of 8 chairs satisfying the condition.
    +
    +--------------------------------------------------------------------
    +
    +### 5.  Required remainder
    +
    +\[
    +N \bmod 1000 = 2907 \bmod 1000 = 907.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{907}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 907

    +

    Extracted Answer: 907

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    In base \(b\) the numbers  
    +
    +\[
    +17_b = 1\cdot b + 7 = b+7 ,\qquad  
    +97_b = 9\cdot b + 7 .
    +\]
    +
    +We need bases \(b>9\) (so that the digits \(7\) and \(9\) are allowed) such that  
    +
    +\[
    +b+7 \mid 9b+7 .
    +\]
    +
    +---
    +
    +### Reduce the divisibility condition
    +
    +If \(b+7\) divides \(9b+7\), then it also divides any integer linear combination of these two numbers.  
    +Consider  
    +
    +\[
    +9(b+7) - (9b+7) = 9b+63 - 9b - 7 = 56 .
    +\]
    +
    +Hence  
    +
    +\[
    +b+7 \mid 56 .
    +\]
    +
    +Conversely, if \(b+7\) divides \(56\) then
    +
    +\[
    +9b+7 = 9(b+7) - 56
    +\]
    +
    +is also a multiple of \(b+7\). Thus the condition is equivalent to  
    +
    +\[
    +b+7 \text{ is a positive divisor of } 56 .
    +\]
    +
    +---
    +
    +### Find admissible divisors
    +
    +The positive divisors of \(56\) are  
    +
    +\[
    +1,\;2,\;4,\;7,\;8,\;14,\;28,\;56 .
    +\]
    +
    +Since \(b>9\), we have \(b+7>16\). The only divisors of \(56\) exceeding \(16\) are \(28\) and \(56\).
    +
    +\[
    +\begin{aligned}
    +b+7 &= 28 &\implies&\; b = 21,\\[2mm]
    +b+7 &= 56 &\implies&\; b = 49 .
    +\end{aligned}
    +\]
    +
    +Both satisfy \(b>9\) and the original divisibility:
    +\[
    +\begin{aligned}
    +b=21:&\quad 17_{21}=28,\; 97_{21}=196=28\cdot7;\\
    +b=49:&\quad 17_{49}=56,\; 97_{49}=448=56\cdot8.
    +\end{aligned}
    +\]
    +
    +No other bases work.
    +
    +---
    +
    +### Sum of all such bases
    +
    +\[
    +21+49 = 70 .
    +\]
    +
    +\[
    +\boxed{70}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 70

    +

    Extracted Answer: 70

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ \triangle ABC $ be a right triangle with $ \angle A = 90^\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \sqrt{3} $ for some positive integer $ n $. Find $ n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +A=(0,0),\qquad B=(b,0),\qquad C=(0,c),\qquad b^2+c^2=BC^2=38^2=1444 .
    +\]
    +
    +Put  
    +
    +\[
    +K=(x_k ,y_k),\qquad L=(x_l ,y_l).
    +\]
    +
    +The given distances give  
    +
    +\[
    +\begin{aligned}
    +&AK=AL=BK=CL=KL=14,\\
    +&x_k^2+y_k^2=196,\quad (x_k-b)^2+y_k^2=196,\\[2mm]
    +&x_l^2+y_l^2=196,\quad x_l^2+(y_l-c)^2=196,\\[2mm]
    +&(x_k-x_l)^2+(y_k-y_l)^2=196 .
    +\end{aligned}
    +\]
    +
    +From the first two equations  
    +
    +\[
    +b=2x_k,\qquad y_k=\sqrt{196-x_k^2}.
    +\]
    +
    +From the next two  
    +
    +\[
    +c=2y_l,\qquad x_l=\sqrt{196-y_l^2}.
    +\]
    +
    +Thus  
    +
    +\[
    +K=(b/2,\;\sqrt{196-b^{2}/4}),\qquad 
    +L=(\sqrt{196-c^{2}/4},\;c/2).
    +\]
    +
    +Since \(AK=AL=KL=14\), the triangle \(AKL\) is equilateral; hence
    +the angle \(\angle KAL=60^\circ\).  Write
    +
    +\[
    +K=14(\cos\alpha,\sin\alpha),\qquad  
    +L=14(\cos(\alpha+60^\circ),\sin(\alpha+60^\circ))
    +\]
    +
    +for some \(\alpha\) with \(0^\circ<\alpha<30^\circ\).
    +Comparing with the expressions for \(K\) and \(L\) gives  
    +
    +\[
    +b=28\cos\alpha,\qquad c=28\sin(\alpha+60^\circ).
    +\]
    +
    +The hypotenuse length yields
    +
    +\[
    +b^{2}+c^{2}=28^{2}\bigl(\cos^{2}\alpha+\sin^{2}(\alpha+60^\circ)\bigr)=38^{2}=1444,
    +\]
    +
    +so  
    +
    +\[
    +\cos^{2}\alpha+\sin^{2}(\alpha+60^\circ)=\frac{361}{196}.
    +\tag{1}
    +\]
    +
    +From (1) we obtain, after using \(\sin^{2}\theta= \tfrac12(1-\cos2\theta)\),
    +
    +\[
    +\sqrt3\sin(2\alpha+60^\circ)=\frac{165}{98},
    +\qquad\Longrightarrow\qquad
    +\sin(2\alpha+60^\circ)=\frac{165}{98\sqrt3}.
    +\tag{2}
    +\]
    +
    +Now compute the required area.
    +
    +*Area of \(\triangle ABC\)*  
    +
    +\[
    +[ABC]=\tfrac12bc=\tfrac12\,(28\cos\alpha)(28\sin(\alpha+60^\circ))
    +      =392\cos\alpha\sin(\alpha+60^\circ).
    +\tag{3}
    +\]
    +
    +*Area of \(\triangle AKB\)*  
    +
    +The altitude from \(K\) to \(AB\) is \(y_k=14\sin\alpha\), and \(AB=28\cos\alpha\); thus  
    +
    +\[
    +[AKB]=\tfrac12\,(28\cos\alpha)(14\sin\alpha)=98\sin2\alpha .
    +\tag{4}
    +\]
    +
    +*Area of \(\triangle ALC\)*  
    +
    +Analogously  
    +
    +\[
    +[ALC]=\tfrac12\,(28\sin(\alpha+60^\circ))(14\cos(\alpha+60^\circ))
    +      =98\sin\bigl(2\alpha+120^\circ\bigr).
    +\tag{5}
    +\]
    +
    +*Area of the equilateral \(\triangle AKL\)*  
    +
    +\[
    +[AKL]=\frac{\sqrt3}{4}\cdot14^{2}=49\sqrt3.
    +\tag{6}
    +\]
    +
    +Hence  
    +
    +\[
    +\begin{aligned}
    +[BKLC]&=[ABC]-[AKB]-[ALC]-[AKL] \\[2mm]
    +&=392\cos\alpha\sin(\alpha+60^\circ)
    +   -98\sin2\alpha-98\sin(2\alpha+120^\circ)-49\sqrt3 .
    +\end{aligned}
    +\]
    +
    +Using \(\sin(\alpha+60^\circ)=\tfrac12\sin\alpha+\tfrac{\sqrt3}{2}\cos\alpha\) and
    +simplifying, the expression reduces to  
    +
    +\[
    +[BKLC]=49\Bigl(\sin2\alpha+\sqrt3\bigl(1+\cos2\alpha\bigr)\Bigr).
    +\tag{7}
    +\]
    +
    +From (2),
    +
    +\[
    +\sin2\alpha+\sqrt3\cos2\alpha
    +    =2\sin(2\alpha+60^\circ)=\frac{165}{49\sqrt3}.
    +\]
    +
    +Insert this into (7):
    +
    +\[
    +\begin{aligned}
    +[BKLC]&=49\Bigl(\frac{165}{49\sqrt3}+\sqrt3\Bigr)
    +       =\frac{165}{\sqrt3}+49\sqrt3\\[2mm]
    +      &=\frac{165\sqrt3}{3}+49\sqrt3
    +       =55\sqrt3+49\sqrt3=104\sqrt3.
    +\end{aligned}
    +\]
    +
    +Thus the area of quadrilateral \(BKLC\) equals \(104\sqrt3\).
    +
    +\[
    +\boxed{104}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 104

    +

    Extracted Answer: 104

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Suppose $ \triangle ABC $ has angles $ \angle BAC = 84^\circ $, $ \angle ABC = 60^\circ $, and $ \angle ACB = 36^\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \overline{BC} $, $ \overline{AC} $, and $ \overline{AB} $, respectively. The circumcircle of $ \triangle DEF $ intersects $ \overline{BD} $, $ \overline{AE} $, and $ \overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \triangle DEF $ into six minor arcs, as shown. Find $ \widehat{DE} + 2 \cdot \widehat{HJ} + 3 \cdot \widehat{FG} $, where the arcs are measured in degrees.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +* \(A,B,C\) be the vertices of the acute triangle with  
    +\(\angle A=84^{\circ},\ \angle B=60^{\circ},\ \angle C=36^{\circ}\);
    +* \(D,E,F\) the midpoints of \(BC,CA,AB\);
    +* \(G,H,J\) the second intersections of the nine‑point circle with
    +\(BC,CA,AB\) respectively.
    +
    +The circumcircle of \(\triangle DEF\) is the nine‑point circle of \(\triangle ABC\).
    +Hence \(G,H,J\) are the three feet of the altitudes of \(\triangle ABC\);  
    +they form the orthic triangle \(G\!H\!J\).
    +
    +--------------------------------------------------------------------
    +### 1.  Arc \(\widehat{DE}\)
    +
    +On the nine‑point circle the vectors from its centre \(N\) to the
    +midpoints are  
    +
    +\[
    +ND=-\frac{\mathbf a}{2},\qquad NE=-\frac{\mathbf b}{2},
    +\]
    +
    +where \(\mathbf a,\mathbf b,\mathbf c\) are the unit vectors of the
    +circumcircle of \(\triangle ABC\).  Consequently
    +
    +\[
    +\widehat{DE}= \angle(-\mathbf a,-\mathbf b)=\angle(\mathbf a,\mathbf b)
    +          =2\angle ACB=2C = 2\cdot36^{\circ}=72^{\circ}.
    +\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Arc \(\widehat{HJ}\)
    +
    +\(H\) and \(J\) are the feet of the altitudes from \(B\) and \(C\);
    +they are vertices of the orthic triangle \(G\!H\!J\).
    +For an acute triangle the angles of its orthic triangle are  
    +
    +\[
    +\angle G =180^{\circ}-2A,\qquad 
    +\angle H =180^{\circ}-2B,\qquad 
    +\angle J =180^{\circ}-2C .
    +\]
    +
    +With \(A=84^{\circ},B=60^{\circ},C=36^{\circ}\),
    +
    +\[
    +\angle G =12^{\circ},\quad
    +\angle H =60^{\circ},\quad
    +\angle J =108^{\circ}.
    +\]
    +
    +Since the nine‑point circle is the circumcircle of
    +\(\triangle G\!H\!J\), the central arc opposite a vertex equals twice the
    +opposite interior angle.  Hence
    +
    +\[
    +\widehat{HJ}= \widehat{B'C'} = 2\angle G
    +            =2\bigl(180^{\circ}-2A\bigr)=360^{\circ}-4A
    +            =360^{\circ}-4\cdot84^{\circ}=24^{\circ}.
    +\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Arc \(\widehat{FG}\)
    +
    +The points \(D,E,F\) are the midpoints of the sides; they satisfy  
    +
    +\[
    +\angle N D F =\angle(-\mathbf a,-\mathbf c)=120^{\circ},
    +\]
    +
    +so the minor arc \(\widehat{DF}\) of the nine‑point circle measures
    +\(120^{\circ}\).  The arc \(\widehat{DF}\) is the sum of the two
    +consecutive arcs \(\widehat{DG}\) and \(\widehat{GF}\).
    +
    +The central arc \(\widehat{DG}\) equals the angle between the
    +vectors \(ND\) (direction \(-\mathbf a\)) and \(NG\) (direction of the
    +foot from \(A\) onto \(BC\)).
    +A short angle chase using the orthic triangle gives
    +
    +\[
    +\widehat{DG}=48^{\circ}.
    +\]
    +
    +Therefore
    +
    +\[
    +\widehat{FG}= \widehat{DF}-\widehat{DG}=120^{\circ}-48^{\circ}=72^{\circ}.
    +\tag{3}
    +\]
    +
    +(One can also obtain \(\widehat{FG}=72^{\circ}\) directly from the fact
    +that the chord \(FJ\) subtends the angle \(60^{\circ}\) at the centre,
    +so the complementary chord \(FG\) subtends \(72^{\circ}\).)
    +
    +--------------------------------------------------------------------
    +### 4.  Required sum
    +
    +From (1)–(3),
    +
    +\[
    +\begin{aligned}
    +\widehat{DE}+2\widehat{HJ}+3\widehat{FG}
    +&= 72^{\circ}+2\cdot24^{\circ}+3\cdot72^{\circ}\\[2mm]
    +&= 72^{\circ}+48^{\circ}+216^{\circ}\\
    +&= 336^{\circ}.
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{336}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 336

    +

    Extracted Answer: 336

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The players are distinct, so an assignment of flavors is a function from the nine players to the three flavors.  
    +Let  
    +
    +\[
    +c=\#\text{chocolate},\qquad v=\#\text{vanilla},\qquad s=\#\text{strawberry}.
    +\]
    +
    +We need  
    +
    +\[
    +c+v+s=9,\qquad c>v>s\ge 1 .
    +\]
    +
    +---
    +
    +### 1.  Find all possible triples \((c,v,s)\).
    +
    +Write \(s=a\), \(v=a+d\), \(c=a+d+e\) with \(a,d,e\ge1\).  
    +Then  
    +
    +\[
    +a+(a+d)+(a+d+e)=9\Longrightarrow 3a+2d+e=9 .
    +\]
    +
    +Searching integer solutions with \(a,d,e\ge1\) gives only three possibilities:
    +
    +* \(a=1,d=1,e=4\) → \((c,v,s)=(6,2,1)\)
    +* \(a=1,d=2,e=2\) → \((c,v,s)=(5,3,1)\)
    +* \(a=2,d=1,e=1\) → \((c,v,s)=(4,3,2)\)
    +
    +No other triples satisfy \(c>v>s\) and sum to 9.
    +
    +---
    +
    +### 2.  Count assignments for each triple.
    +
    +For a fixed triple \((c,v,s)\) the number of assignments equals the multinomial coefficient  
    +
    +\[
    +\frac{9!}{c!\,v!\,s!}.
    +\]
    +
    +\[
    +\begin{aligned}
    +(6,2,1)&:\ \frac{9!}{6!\,2!\,1!}= \frac{362880}{720\cdot2}=252,\\[2mm]
    +(5,3,1)&:\ \frac{9!}{5!\,3!\,1!}= \frac{362880}{120\cdot6}=504,\\[2mm]
    +(4,3,2)&:\ \frac{9!}{4!\,3!\,2!}= \frac{362880}{24\cdot6\cdot2}=1260.
    +\end{aligned}
    +\]
    +
    +---
    +
    +### 3.  Total number of assignments.
    +
    +\[
    +N=252+504+1260=2016.
    +\]
    +
    +---
    +
    +### 4.  Remainder modulo \(1000\).
    +
    +\[
    +2016\equiv 16 \pmod{1000}.
    +\]
    +
    +---
    +
    +\[
    +\boxed{16}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 16

    +

    Extracted Answer: 16

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    First factor the quadratic form.
    +
    +\[
    +12x^{2}-xy-6y^{2}= (4x-3y)(3x+2y)
    +\]
    +
    +Hence  
    +
    +\[
    +(4x-3y)(3x+2y)=0\Longrightarrow 
    +\begin{cases}
    +4x-3y=0\\[2mm]
    +\text{or}\\[2mm]
    +3x+2y=0
    +\end{cases}
    +\]
    +
    +---
    +
    +### 1.  Solutions of \(4x-3y=0\)
    +
    +\(4x=3y\Rightarrow y=\dfrac{4}{3}x\).  
    +Since \(x,y\) are integers, \(x\) must be a multiple of \(3\): set \(x=3k\), then  
    +
    +\[
    +y=4k,\qquad k\in\mathbb Z .
    +\]
    +
    +Both coordinates must satisfy \(-100\le x,y\le100\):
    +
    +\[
    +|3k|\le100,\qquad|4k|\le100\Longrightarrow |k|\le \Big\lfloor\frac{100}{4}\Big\rfloor =25 .
    +\]
    +
    +Thus \(k=-25,-24,\dots ,25\):  \(51\) integer pairs.
    +
    +---
    +
    +### 2.  Solutions of \(3x+2y=0\)
    +
    +\(3x=-2y\Rightarrow y=-\dfrac{3}{2}x\).  
    +For integers we need \(x\) even: write \(x=2m\), then  
    +
    +\[
    +y=-3m,\qquad m\in\mathbb Z .
    +\]
    +
    +Again \(-100\le x,y\le100\) gives  
    +
    +\[
    +|2m|\le100,\qquad|3m|\le100\Longrightarrow |m|\le\Big\lfloor\frac{100}{3}\Big\rfloor =33 .
    +\]
    +
    +Thus \(m=-33,-32,\dots ,33\):  \(67\) integer pairs.
    +
    +---
    +
    +### 3.  Remove double counting
    +
    +The two families intersect only at \((0,0)\) (when \(k=m=0\)).  
    +Hence the total number of distinct ordered pairs is  
    +
    +\[
    +51+67-1=117 .
    +\]
    +
    +\[
    +\boxed{117}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 117

    +

    Extracted Answer: 117

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are exactly three positive real numbers $ k $ such that the function
    +$ f(x) = \frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $
    +defined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The function  
    +
    +\[
    +f(x)=\frac{(x-18)(x-72)(x-98)(x-k)}{x}\qquad (x>0)
    +\]
    +
    +has zeros at \(x=18,\;72,\;98,\;k\) and  
    +\(\displaystyle \lim_{x\to0^+}f(x)=\lim_{x\to\infty}f(x)=+\infty\).
    +Hence \(f\) is positive near the ends and negative on each of the two
    +intervals bounded by the smallest two zeros and by the largest two zeros.
    +Consequently \(f\) has exactly two local minima (one in each negative
    +interval).
    +
    +Let the common minimal value be \(m<0\).  At a minimum the graph of
    +\(y=f(x)\) is tangent to the horizontal line \(y=m\); therefore the
    +equation  
    +
    +\[
    +f(x)=m\quad\Longleftrightarrow\quad (x-18)(x-72)(x-98)(x-k)-mx=0
    +\]
    +
    +must have a **double root** at each minimum.  Thus the quartic polynomial
    +must be a perfect square of a quadratic:
    +
    +\[
    +(x-18)(x-72)(x-98)(x-k)-mx=(x^{2}-Sx+P)^{2},
    +\]
    +where \(S,P,m\) are constants.
    +
    +Expanding and equating coefficients with  
    +
    +\[
    +N(x)-mx=x^{4}-(188+k)x^{3}+(10116+188k)x^{2}-(127008+10116k+m)x+127008k
    +\]
    +
    +gives  
    +
    +\[
    +\begin{cases}
    +S=\dfrac{188+k}{2},\\[4pt]
    +S^{2}+2P=10116+188k,\\[4pt]
    +m=2SP-(127008+10116k),\\[4pt]
    +P^{2}=127008\,k .
    +\end{cases}
    +\]
    +
    +From \(P^{2}=127008k\) set \(t=\sqrt{2k}>0\); then  
    +
    +\[
    +P=252t,\qquad k=\dfrac{t^{2}}{2},
    +\quad S=\frac{188+k}{2}=94+\frac{t^{2}}{4}.
    +\]
    +
    +Substituting these into \(S^{2}+2P=10116+188k\) yields an equation in
    +\(t\):
    +
    +\[
    +\frac{(188+k)^{2}}{4}+504\sqrt{2k}=10116+188k
    +\Longrightarrow
    +t^{4}-752t^{2}+8064t-20480=0 .
    +\]
    +
    +Factoring,
    +
    +\[
    +t^{4}-752t^{2}+8064t-20480=(t-4)(t-8)(t-20)(t+32)=0 .
    +\]
    +
    +Since \(t>0\), we obtain  
    +
    +\[
    +t=4,\;8,\;20\quad\Longrightarrow\quad 
    +k=\frac{t^{2}}{2}=8,\;32,\;200 .
    +\]
    +
    +For each of these \(k\) one computes \(\Delta=S^{2}-4P>0\), so the
    +quadratic \(x^{2}-Sx+P\) has two distinct real roots.  They lie exactly in
    +the two negative intervals, giving two distinct points where \(f\) attains
    +the value \(m\).  Moreover \(m<0\), while all zeros of \(f\) are at
    +\(0\), so these are the global minima.  
    +No other positive \(k\) satisfies the required condition.
    +
    +Hence the three admissible values of \(k\) are \(8,\;32,\;200\), and their
    +sum is
    +
    +\[
    +8+32+200 = 240.
    +\]
    +
    +\[
    +\boxed{240}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 240

    +

    Extracted Answer: 240

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +An isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \neq s$. Find $r^{2}+s^{2}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For a quadrilateral that has an incircle (a **tangential quadrilateral**)  
    +
    +\[
    +\text{area}=r_{\text{in}}\cdot\frac{\text{perimeter}}2 .
    +\tag{1}
    +\]
    +
    +---
    +
    +### 1.  Using the given area
    +
    +Let the parallel sides be \(r\) and \(s\) \((r\neq s)\) and the equal legs be \(\ell\).
    +The incircle radius is \(r_{\text{in}}=3\) and the area is \(72\).
    +
    +From (1),
    +
    +\[
    +72=3\cdot\frac{r+s+2\ell}{2}\Longrightarrow
    +r+s+2\ell=48.
    +\tag{2}
    +\]
    +
    +---
    +
    +### 2.  Pitot’s theorem
    +
    +A tangential quadrilateral satisfies Pitot’s theorem: the sum of opposite sides are equal.  
    +Thus for our isosceles trapezoid  
    +
    +\[
    +r+s= \ell+\ell =2\ell \Longrightarrow \ell=\frac{r+s}{2}.
    +\tag{3}
    +\]
    +
    +Substituting (3) into (2),
    +
    +\[
    +r+s+2\Bigl(\frac{r+s}{2}\Bigr)=48\Longrightarrow 2(r+s)=48
    +\Longrightarrow r+s=24.
    +\tag{4}
    +\]
    +
    +Hence each leg is  
    +
    +\[
    +\ell=\frac{r+s}{2}=12.
    +\]
    +
    +---
    +
    +### 3.  Height of the trapezoid
    +
    +A circle tangent to two parallel lines must have its centre midway between them, so the distance (the height \(h\)) between the bases equals twice the radius:
    +
    +\[
    +h=2\cdot3=6.
    +\]
    +
    +The area of a trapezoid is also  
    +
    +\[
    +\text{Area}= \frac{r+s}{2}\,h = \frac{24}{2}\cdot6 = 72,
    +\]
    +
    +which checks with the given data.
    +
    +---
    +
    +### 4.  Relating the legs, height, and bases  
    +
    +In an isosceles trapezoid the leg \(\ell\) together with the height \(h\) and half the difference of the bases forms a right triangle:
    +
    +\[
    +\ell^{2}=h^{2}+\Bigl(\frac{s-r}{2}\Bigr)^{2}.
    +\]
    +
    +Plugging \(\ell=12\) and \(h=6\),
    +
    +\[
    +12^{2}=6^{2}+\Bigl(\frac{s-r}{2}\Bigr)^{2}
    +\Longrightarrow 144=36+\frac{(s-r)^{2}}{4}
    +\Longrightarrow (s-r)^{2}=432.
    +\]
    +
    +Thus  
    +
    +\[
    +s-r= \sqrt{432}=12\sqrt3 .
    +\tag{5}
    +\]
    +
    +---
    +
    +### 5.  Solving for \(r\) and \(s\)
    +
    +From (4) and (5):
    +
    +\[
    +\begin{cases}
    +s+r = 24,\\[2pt]
    +s-r = 12\sqrt3,
    +\end{cases}
    +\qquad\Longrightarrow\qquad
    +s = 12+6\sqrt3,\;\; r = 12-6\sqrt3.
    +\]
    +
    +---
    +
    +### 6.  Computing \(r^{2}+s^{2}\)
    +
    +\[
    +r^{2}+s^{2}= (12-6\sqrt3)^{2}+(12+6\sqrt3)^{2}
    += (252-144\sqrt3)+(252+144\sqrt3)=504.
    +\]
    +
    +(Alternatively, using \((r+s)^{2}=r^{2}+s^{2}+2rs\) and \(rs=36\) from \((s+r)^{2}-(s-r)^{2}=4rs\) also gives \(r^{2}+s^{2}=504\).)
    +
    +\[
    +\boxed{504}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 504

    +

    Extracted Answer: 504

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are exactly three positive real numbers $ k $ such that the function
    +$ f(x) = \frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $
    +defined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +\boxed{240}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 240

    +

    Extracted Answer: 240

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The number must be divisible by \(22=2\cdot 11\).
    +
    +---
    +
    +### 1.  Divisibility by \(2\)
    +
    +The last digit (the 8‑th digit) must be even, i.e. one of \(2,4,6,8\).
    +
    +---
    +
    +### 2.  Divisibility by \(11\)
    +
    +For an 8‑digit number \(d_1d_2\ldots d_8\)
    +
    +\[
    +d_1-d_2+d_3-d_4+d_5-d_6+d_7-d_8\equiv0\pmod{11}.
    +\]
    +
    +Let  
    +
    +\[
    +S_{\text{odd}}=d_1+d_3+d_5+d_7,\qquad  
    +S_{\text{even}}=d_2+d_4+d_6+d_8 .
    +\]
    +
    +Then the condition becomes  
    +
    +\[
    +S_{\text{odd}}-S_{\text{even}}\equiv0\pmod{11}.
    +\]
    +
    +Since the digits \(1,2,\dots ,8\) are used exactly once,  
    +
    +\[
    +S_{\text{odd}}+S_{\text{even}}=1+2+\cdots +8=36 .
    +\]
    +
    +Hence  
    +
    +\[
    +2S_{\text{even}}\equiv36\pmod{11}\Longrightarrow2S_{\text{even}}\equiv3\pmod{11}
    +\]
    +\[
    +\Longrightarrow S_{\text{even}}\equiv3\cdot 6\equiv18\equiv7\pmod{11}.
    +\]
    +
    +The possible values for a sum of four distinct digits from \(\{1,\ldots ,8\}\) lie between \(10\) and \(26\); the only value congruent to \(7\pmod{11}\) in this interval is \(18\).  
    +Thus we must have  
    +
    +\[
    +S_{\text{even}}=18\qquad\text{and}\qquad S_{\text{odd}}=18 .
    +\]
    +
    +---
    +
    +### 3.  Choosing the four digits that go to even positions
    +
    +We need all 4‑element subsets of \(\{1,2,3,4,5,6,7,8\}\) whose sum is \(18\).
    +
    +Listing them:
    +
    +\[
    +\begin{aligned}
    +&\{1,2,7,8\},\; \{1,3,6,8\},\; \{1,4,5,8\},\; \{1,4,6,7\},\\
    +&\{2,3,5,8\},\; \{2,3,6,7\},\; \{2,4,5,7\},\; \{3,4,5,6\}.
    +\end{aligned}
    +\]
    +
    +There are **8** such subsets.  
    +Each of them contains exactly two even digits (the evens are \(2,4,6,8\)).
    +
    +---
    +
    +### 4.  Arranging the digits
    +
    +For a fixed subset \(S\) (the digits that occupy the even positions 2,4,6,8):
    +
    +* The last position (position 8) must be even.  
    +  Since \(S\) has exactly two evens, we have \(2\) choices for the digit that goes to position 8.
    +* The remaining three digits of \(S\) can be placed in positions 2,4,6 in any order: \(3! = 6\) ways.
    +
    +Hence the even positions can be filled in \(2\cdot6 = 12\) ways.
    +
    +The four digits not in \(S\) occupy the odd positions \(1,3,5,7\) and may be arranged arbitrarily:
    +\(4! = 24\) ways.
    +
    +Thus each subset contributes  
    +
    +\[
    +12 \times 24 = 288
    +\]
    +
    +different 8‑digit numbers.
    +
    +With 8 admissible subsets, the total number of 8‑digit numbers divisible by 22 is  
    +
    +\[
    +N = 8 \times 288 = 2304.
    +\]
    +
    +---
    +
    +### 5.  Required difference
    +
    +\[
    +N-2025 = 2304-2025 = 279.
    +\]
    +
    +\[
    +\boxed{279}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 279

    +

    Extracted Answer: 279

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let the sequence of rationals $ x_1, x_2, \ldots $ be defined such that $ x_1 = \frac{25}{11} $ and
    +$ x_{k+1} = \frac{1}{3} \left( x_k + \frac{1}{x_k} - 1 \right). $
    +$ x_{2025} $ can be expressed as $ \frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +x_{k+1}=\frac{x_k+\dfrac1{x_k}-1}{3}
    +      =\frac{x_k^2-x_k+1}{3x_k}\qquad (k\ge 1),\qquad 
    +x_1=\frac{25}{11}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  A convenient change of variable  
    +
    +Put  
    +
    +\[
    +y_k=\frac{x_k-1}{x_k+1}\qquad\Longleftrightarrow\qquad 
    +x_k=\frac{1+y_k}{1-y_k}.
    +\]
    +
    +Then  
    +
    +\[
    +y_{k+1}= \frac{x_{k+1}-1}{x_{k+1}+1}
    +        =\frac{3y_k^{2}-1}{2}.
    +\tag{1}
    +\]
    +
    +Indeed,
    +\[
    +\frac{x_k+1/x_k-1}{3}= \frac{1+y_k}{1-y_k}
    +        \Longrightarrow
    +y_{k+1}= \frac{3y_k^{2}-1}{2}.
    +\]
    +
    +From \(x_1=25/11\) we obtain
    +
    +\[
    +y_1=\frac{25/11-1}{25/11+1}= \frac{14/11}{36/11}= \frac{7}{18}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Removing the common factor  
    +
    +Write \(y_k =\dfrac{a_k}{b_k}\) with \(\gcd(a_k,b_k)=1\).
    +From (1)
    +
    +\[
    +\frac{a_{k+1}}{b_{k+1}}=\frac{3a_k^{2}-b_k^{2}}{2b_k^{2}} .
    +\]
    +
    +Because \(b_k\) is always a multiple of \(3\), the fraction can be reduced by the
    +factor \(3\) and we obtain the **integer** recurrences
    +
    +\[
    +\boxed{\;
    +\begin{aligned}
    +a_{k+1}&=\frac{3a_k^{2}-b_k^{2}}{3},\\[2mm]
    +b_{k+1}&=\frac{2b_k^{2}}{3},
    +\end{aligned}\qquad a_1=7,\;b_1=18.}
    +\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Closed form for \(b_k\)
    +
    +From the second line of (2)
    +
    +\[
    +b_{k+1}=\frac{2}{3}b_k^{2}, \qquad b_1=18.
    +\]
    +
    +Induction gives  
    +
    +\[
    +\boxed{\,b_k=2^{\,2^{\,k}-1}\;3^{\,2^{\,k-1}+1}\,}\qquad(k\ge1).   \tag{3}
    +\]
    +
    +Check: \(b_1=2^{2-1}3^{1+1}=2\cdot 9=18\).
    +
    +--------------------------------------------------------------------
    +### 4.  The reduced form of \(x_k\)
    +
    +Since \(x_k=\dfrac{1+y_k}{1-y_k}\) and \(y_k=a_k/b_k\),
    +
    +\[
    +x_k=\frac{a_k+b_k}{\,b_k-a_k\,}.
    +\]
    +
    +Thus the reduced numerator and denominator are  
    +
    +\[
    +m_k=a_k+b_k,\qquad n_k=b_k-a_k,
    +\]
    +
    +and
    +
    +\[
    +m_k+n_k=2b_k. \tag{4}
    +\]
    +
    +Consequently we only need \(2b_{2025}\pmod{1000}\).
    +
    +--------------------------------------------------------------------
    +### 5.  Computing \(2b_{2025}\pmod{1000}\)
    +
    +From (3)
    +
    +\[
    +2b_{2025}=2\cdot
    +2^{\,2^{2025}-1}\;3^{\,2^{2024}+1}
    +=2^{\,2^{2025}}\;3^{\,2^{2024}+1}.
    +\]
    +
    +Work modulo \(1000=8\cdot125\).
    +
    +*Modulo \(8\):*  
    +\(2^{\,2^{2025}}\) is a multiple of \(8\) (the exponent is \(\ge3\)), so the product is
    +\(0\pmod 8\).
    +
    +*Modulo \(125\):*  
    +Both bases are invertible, so we may reduce the exponents modulo \(\varphi(125)=100\).
    +
    +\[
    +\begin{aligned}
    +2^{2025}\pmod{100}&\equiv 32,\\
    +2^{2024}\pmod{100}&\equiv 16,
    +\end{aligned}
    +\qquad\Longrightarrow\qquad
    +\begin{aligned}
    +2^{\,2^{2025}} &\equiv 2^{32}\pmod{125},\\
    +3^{\,2^{2024}+1}&\equiv 3^{17}\pmod{125}.
    +\end{aligned}
    +\]
    +
    +\[
    +2^{32}\equiv46\pmod{125},\qquad 
    +3^{17}\equiv38\pmod{125}.
    +\]
    +
    +Hence  
    +
    +\[
    +2^{\,2^{2025}}3^{\,2^{2024}+1}\equiv46\cdot38\equiv123\pmod{125}.
    +\]
    +
    +*Chinese remainder:*  Find \(N\) with  
    +
    +\[
    +N\equiv0\pmod8,\qquad N\equiv123\pmod{125}.
    +\]
    +
    +Writing \(N=125a+123\) and testing \(a=0,\dots,7\) gives \(a=1\) as the solution,
    +so \(N=125\cdot1+123=248\).
    +
    +Thus  
    +
    +\[
    +2b_{2025}\equiv 248\pmod{1000}.
    +\]
    +
    +By (4) this is exactly \((m+n)\pmod{1000}\).
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{248}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 248

    +

    Extracted Answer: 248

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\sqrt{-1}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +z=x+yi .
    +\]
    +
    +The first equation  
    +
    +\[
    +|25+20i-z|=5
    +\]
    +
    +represents the circle  
    +
    +\[
    +(x-25)^2+(y-20)^2=5^2        \tag{1}
    +\]
    +
    +centered at \(C=(25,20)\) with radius \(r=5\).
    +
    +---
    +
    +### Locus of the second equation  
    +
    +\[
    +|z-4-k|=|z-3i-k|
    +\]
    +
    +means that the distance from \(z\) to the point  
    +
    +\[
    +A=(4+k,0)
    +\]
    +
    +equals its distance to the point  
    +
    +\[
    +B=(k,3).
    +\]
    +
    +Hence the set of all such \(z\) is the **perpendicular bisector** of the segment \(AB\).
    +
    +- Midpoint of \(AB\):
    +  \[
    +  M=\Bigl(\frac{4+k+k}{2},\frac{0+3}{2}\Bigr)=(2+k,\tfrac32).
    +  \]
    +
    +- Slope of \(AB\):
    +  \[
    +  m_{AB}= \frac{3-0}{k-(4+k)}=\frac{3}{-4}=-\frac34 .
    +  \]
    +
    +- Slope of the perpendicular bisector:
    +  \[
    +  m_{L}= \frac{4}{3}.
    +  \]
    +
    +Thus the line \(L_k\) (the perpendicular bisector) has equation  
    +
    +\[
    +y-\frac32=\frac43\Bigl(x-(2+k)\Bigr).
    +\]
    +
    +Writing it in the form \(Ax+By+C=0\),
    +
    +\[
    +8x-6y-(8k+7)=0\qquad\Longleftrightarrow\qquad 8x-6y=8k+7. \tag{2}
    +\]
    +
    +---
    +
    +### Tangency condition  
    +
    +The system has exactly one solution \(z\) iff the line \(L_k\) is **tangent** to the circle \((1)\); i.e. the distance from the centre \(C\) to the line equals the radius \(5\).
    +
    +Distance from \(C=(25,20)\) to line \((2)\):
    +
    +\[
    +d=\frac{|\,8\cdot25-6\cdot20-(8k+7)\,|}{\sqrt{8^{2}+(-6)^{2}}}
    +   =\frac{|200-120-8k-7|}{10}
    +   =\frac{|73-8k|}{10}.
    +\]
    +
    +Set \(d=5\):
    +
    +\[
    +\frac{|73-8k|}{10}=5 \Longrightarrow |73-8k|=50.
    +\]
    +
    +Hence  
    +
    +\[
    +73-8k=50 \quad\text{or}\quad 73-8k=-50,
    +\]
    +
    +which give  
    +
    +\[
    +k=\frac{23}{8},\qquad k=\frac{123}{8}.
    +\]
    +
    +Both values indeed make the line tangent (the discriminant of the combined equations becomes zero), so each yields exactly one complex solution \(z\).
    +
    +---
    +
    +### Sum of all possible \(k\)
    +
    +\[
    +\frac{23}{8}+\frac{123}{8}= \frac{146}{8}= \frac{73}{4}.
    +\]
    +
    +Write \(\frac{73}{4}\) as \(\frac{m}{n}\) with \(\gcd(m,n)=1\): \(m=73,\; n=4\).
    +
    +\[
    +m+n=73+4=77.
    +\]
    +
    +\[
    +\boxed{77}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 77

    +

    Extracted Answer: 77

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 27 cells of a $3\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. 
    + | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | 
    + | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | 
    + | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | 
    + The number of different ways to fill such a grid can be written as $p^a\cdot q^b\cdot r^c\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\cdot a+q\cdot b+r\cdot c+s\cdot d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The grid has three rows and three \(3\times3\) blocks.  
    +Each row must contain the numbers \(1,\dots ,9\) once, and each block must also contain every number once.
    +
    +---
    +
    +### 1.  Fix the first row  
    +
    +Because the numbers are distinct, we may fix the first row to be  
    +
    +\[
    +(1,2,3,4,5,6,7,8,9)
    +\]
    +
    +and later multiply the count by the \(9!\) possible permutations of this row.
    +
    +---
    +
    +### 2.  What must the other two rows contain?
    +
    +* Block 1 (columns 1–3): row 1 already has \(\{1,2,3\}\); thus rows 2–3 must contain the six numbers \(\{4,5,6,7,8,9\}\).
    +
    +* Block 2 (columns 4–6): rows 2–3 must contain \(\{1,2,3,7,8,9\}\).
    +
    +* Block 3 (columns 7–9): rows 2–3 must contain \(\{1,2,3,4,5,6\}\).
    +
    +Each of rows 2 and 3 must be a permutation of \(\{1,\dots ,9\}\).
    +
    +Hence for each number \(m\) (which appears in two of the three blocks) we must decide in which of those two blocks it will be placed in row 2 (the other occurrence will go to row 3).  
    +
    +The numbers are grouped as
    +
    +\[
    +\begin{aligned}
    +&\{1,2,3\}\ \text{appear in blocks }2\text{ and }3,\\
    +&\{4,5,6\}\ \text{appear in blocks }1\text{ and }3,\\
    +&\{7,8,9\}\ \text{appear in blocks }1\text{ and }2.
    +\end{aligned}
    +\]
    +
    +Let  
    +
    +* \(x\) = how many of \(\{1,2,3\}\) go to block 2 (the rest go to block 3);
    +* \(y\) = how many of \(\{4,5,6\}\) go to block 1 (the rest go to block 3);
    +* \(z\) = how many of \(\{7,8,9\}\) go to block 1 (the rest go to block 2).
    +
    +Because each block must receive exactly three numbers for row 2 we obtain  
    +
    +\[
    +\begin{cases}
    +y+z=3 &(\text{block }1)\\
    +x+(3-z)=3 &(\text{block }2)\\
    +(3-x)+(3-y)=3 &(\text{block }3)
    +\end{cases}
    +\Longrightarrow x=z,\quad y=3-x .
    +\]
    +
    +Thus \(x\) can be \(0,1,2,3\).  
    +For a given \(x\),
    +
    +* choose \(x\) of the three numbers \(\{1,2,3\}\) to go to block 2: \(\binom{3}{x}\) ways;
    +* choose \(y=3-x\) of \(\{4,5,6\}\) to go to block 1: \(\binom{3}{3-x}=\binom{3}{x}\) ways;
    +* choose \(z=x\) of \(\{7,8,9\}\) to go to block 1: \(\binom{3}{x}\) ways.
    +
    +Hence the number of ways to decide **which numbers** belong to row 2 in each block is  
    +
    +\[
    +\sum_{x=0}^{3}\binom{3}{x}^3=1^3+3^3+3^3+1^3=56 .
    +\]
    +
    +---
    +
    +### 3.  Placing the chosen numbers in the cells  
    +
    +Within each block, row 2 has three cells and row 3 three cells.  
    +The three numbers assigned to row 2 can be arranged in those three cells in \(3!\) ways, and similarly for row 3.  
    +
    +Thus for each block there are \(3!\times3! = 36\) placements, and for the three blocks
    +
    +\[
    +36^3 = 46656
    +\]
    +
    +placements.
    +
    +Consequently, with the first row fixed,
    +
    +\[
    +\text{# grids} = 56 \times 36^3 = 56 \times 46656 = 2\,612\,736 .
    +\]
    +
    +---
    +
    +### 4.  Restore the first row  
    +
    +The first row could be any permutation of the numbers \(1\)–\(9\); there are \(9! = 362880\) possibilities.
    +
    +\[
    +N = 2\,612\,736 \times 362\,880 = 948\,109\,639\,680 .
    +\]
    +
    +---
    +
    +### 5.  Prime factorisation  
    +
    +\[
    +\begin{aligned}
    +56 &= 2^3 \cdot 7,\\[2pt]
    +36^3 &= (2^2 3^2)^3 = 2^6 \cdot 3^6,\\[2pt]
    +9! &= 2^7 \cdot 3^4 \cdot 5 \cdot 7 .
    +\end{aligned}
    +\]
    +
    +Multiplying:
    +
    +\[
    +N = 2^{3+6+7}\, 3^{6+4}\, 5^{1}\, 7^{1+1}
    +   = 2^{16} \cdot 3^{10} \cdot 5^{1} \cdot 7^{2}.
    +\]
    +
    +Thus we have the representation  
    +
    +\[
    +N = p^{a}\, q^{b}\, r^{c}\, s^{d}
    +\]
    +
    +with distinct primes  
    +
    +\[
    +p=2,\ a=16;\qquad q=3,\ b=10;\qquad r=5,\ c=1;\qquad s=7,\ d=2 .
    +\]
    +
    +---
    +
    +### 6.  Compute \(p a + q b + r c + s d\)
    +
    +\[
    +\begin{aligned}
    +p a + q b + r c + s d &= 2\cdot16 + 3\cdot10 + 5\cdot1 + 7\cdot2\\
    +&= 32 + 30 + 5 + 14\\
    +&= 81.
    +\end{aligned}
    +\]
    +
    +\[
    +\boxed{81}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 81

    +

    Extracted Answer: 81

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The parabola with equation $y=x^{2}-4$ is rotated $60^{\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\frac{a-\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +y=x^{2}-4\qquad (1)
    +\]
    +
    +and rotate the whole plane \(60^{\circ}\) counter‑clockwise about the origin.
    +For a point \((u,v)\) on the original parabola, the image after the rotation is  
    +
    +\[
    +(x,y)=\bigl(u\cos60^\circ -v\sin60^\circ,\;u\sin60^\circ+v\cos60^\circ\bigr)
    +     =\Bigl(\frac12u-\frac{\sqrt3}{2}v,\;\frac{\sqrt3}{2}u+\frac12v\Bigr). \tag{2}
    +\]
    +
    +Because \((u,v)\) lies on the original curve, \(v=u^{2}-4\).
    +Substituting this into (2) gives a parametric description of the rotated curve:
    +
    +\[
    +\begin{cases}
    +x= -\frac{\sqrt3}{2}u^{2}+\frac12u+2\sqrt3,\\[2mm]
    +y= \frac{\sqrt3}{2}u+\frac12u^{2}-2 .
    +\end{cases} \tag{3}
    +\]
    +
    +The intersection points of the original parabola and its image satisfy both
    +\(y=x^{2}-4\) and (3).  Using (3) we replace \(x\) and \(y\) in \(y=x^{2}-4\):
    +
    +\[
    +\frac{\sqrt3}{2}u+\frac12u^{2}-2=
    +\Bigl(-\frac{\sqrt3}{2}u^{2}+\frac12u+2\sqrt3\Bigr)^{2}-4 .
    +\]
    +
    +After expanding and simplifying we obtain the quartic equation for \(u\)
    +
    +\[
    +3u^{4}-2\sqrt3\,u^{3}-25u^{2}+6\sqrt3\,u+40=0. \tag{4}
    +\]
    +
    +Because the coefficients involve \(\sqrt3\) it is natural to try a factorisation
    +into quadratics with linear terms that are multiples of \(\sqrt3\).  Indeed,
    +
    +\[
    +3u^{4}-2\sqrt3\,u^{3}-25u^{2}+6\sqrt3\,u+40
    +  =(3u^{2}+\sqrt3\,u-10)(u^{2}-\sqrt3\,u-4). \tag{5}
    +\]
    +
    +Thus the possible values of \(u\) are the roots of  
    +
    +\[
    +\begin{cases}
    +3u^{2}+\sqrt3\,u-10=0,\\[1mm]
    +u^{2}-\sqrt3\,u-4=0.
    +\end{cases}
    +\]
    +
    +Solving,
    +
    +\[
    +\begin{aligned}
    +u&=\frac{-\sqrt3\pm\sqrt{123}}{6},\\[1mm]
    +u&=\frac{\sqrt3\pm\sqrt{19}}{2}.
    +\end{aligned}
    +\]
    +
    +Plug each value into (3) to obtain the corresponding point \((x,y)\).
    +
    +\[
    +\begin{array}{c|c|c}
    +u & x & y\\ \hline
    +\displaystyle\frac{-\sqrt3+\sqrt{123}}6 & 2.136\ldots & 0.566\ldots\\[2mm]
    +\displaystyle\frac{-\sqrt3-\sqrt{123}}6 & -1.561\ldots & -1.568\ldots\\[2mm]
    +\displaystyle\frac{\sqrt3+\sqrt{19}}2 & -3.046\ldots & 5.276\ldots\\[2mm]
    +\displaystyle\frac{\sqrt3-\sqrt{19}}2 & 1.313\ldots & -2.275\ldots
    +\end{array}
    +\]
    +
    +Only the last point lies in the fourth quadrant \((x>0,\;y<0)\).  
    +Hence the required intersection point is obtained from  
    +
    +\[
    +u=\frac{\sqrt3-\sqrt{19}}2 .
    +\]
    +
    +Its \(y\)-coordinate is, using (3),
    +
    +\[
    +\begin{aligned}
    +y&=\frac{\sqrt3}{2}u+\frac12u^{2}-2\\
    +  &=\frac{\sqrt3}{2}\cdot\frac{\sqrt3-\sqrt{19}}2
    +    +\frac12\Bigl(\frac{\sqrt3-\sqrt{19}}2\Bigr)^{2}-2\\[1mm]
    +  &=\frac{3-\sqrt{57}}4+\frac{11-\sqrt{57}}4-2\\[1mm]
    +  &=\frac{3-\sqrt{57}}2 .
    +\end{aligned}
    +\]
    +
    +Thus  
    +
    +\[
    +y=\frac{a-\sqrt b}{c}\qquad\text{with}\quad a=3,\;b=57,\;c=2.
    +\]
    +
    +Since \(\gcd(3,2)=1\) the representation is in lowest terms.  Therefore
    +
    +\[
    +a+b+c = 3+57+2 = 62.
    +\]
    +
    +\[
    +\boxed{62}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 62

    +

    Extracted Answer: 62

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +On $\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution.**  
    +
    +Put \(A=(0,0)\) and let \(AB\) be the \(x\)-axis.  
    +Since  
    +
    +\[
    +AD=4,\qquad DE=16,\qquad EB=8,
    +\]
    +
    +we have  
    +
    +\[
    +A=(0,0),\;D=(4,0),\;E=(20,0),\;B=(28,0),\qquad AB=28 .
    +\]
    +
    +Let \(C=(x,y)\) with \(y>0\).  
    +Because \(AF=13,\;FG=52,\;GC=26\),
    +
    +\[
    +AC=13+52+26=91,\qquad 
    +\frac{AF}{AC}=\frac{13}{91}=\frac17 ,\qquad 
    +\frac{AG}{AC}=\frac{13+52}{91}= \frac{65}{91}= \frac57 .
    +\]
    +
    +Hence  
    +
    +\[
    +F=\Bigl(\frac{x}{7},\frac{y}{7}\Bigr),\qquad 
    +G=\Bigl(\frac{5x}{7},\frac{5y}{7}\Bigr).
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Height of \(\triangle ABC\)
    +
    +The quadrilateral \(DEGF\) has vertices  
    +
    +\[
    +D(4,0),\;E(20,0),\;G\Bigl(\frac{5x}{7},\frac{5y}{7}\Bigr),\;F\Bigl(\frac{x}{7},\frac{y}{7}\Bigr).
    +\]
    +
    +Its area by the shoelace formula is  
    +
    +\[
    +\begin{aligned}
    +[DEGF]
    +&=\frac12\Bigl|
    +\bigl(4\cdot0+20\cdot\frac{5y}{7}
    ++\frac{5x}{7}\cdot\frac{y}{7}+ \frac{x}{7}\cdot0\bigr) \\
    +&\qquad\ -\bigl(0\cdot20+0\cdot\frac{5x}{7}
    ++\frac{5y}{7}\cdot\frac{x}{7}+ \frac{y}{7}\cdot4\bigr)\Bigr| \\
    +&=\frac{624}{91}\,y .
    +\end{aligned}
    +\]
    +
    +We are given \([DEGF]=288\), so  
    +
    +\[
    +\frac{624}{91}\,y=288\Longrightarrow y=42 .
    +\]
    +
    +Therefore the height of \(\triangle ABC\) above \(AB\) is \(y=42\) and  
    +
    +\[
    +[ABC]=\frac12\cdot AB\cdot y=\frac12\cdot28\cdot42=588 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Points \(M\) and \(N\)
    +
    +\(M\) is the reflection of \(D\) across \(F\); thus \(F\) is the midpoint of
    +\(DM\):
    +
    +\[
    +M=2F-D=\Bigl(\frac{2x}{7}-4,\; \frac{2y}{7}\Bigr)=\Bigl(\frac{2x}{7}-4,12\Bigr).
    +\]
    +
    +\(N\) is the reflection of \(G\) across \(E\); hence
    +
    +\[
    +N=2E-G=\Bigl(40-\frac{5x}{7},\; -\frac{5y}{7}\Bigr)=\Bigl(40-\frac{5x}{7},-30\Bigr).
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Area of the heptagon \(AFNBCEM\)
    +
    +List the vertices in the given order:
    +
    +\[
    +\begin{array}{c|c}
    +\text{vertex}&(x,y)\\ \hline
    +A&(0,0)\\
    +F&\bigl(\frac{x}{7},\frac{y}{7}\bigr)\\
    +N&\bigl(40-\frac{5x}{7},-30\bigr)\\
    +B&(28,0)\\
    +C&(x,y)\\
    +E&(20,0)\\
    +M&\bigl(\frac{2x}{7}-4,12\bigr)
    +\end{array}
    +\]
    +
    +Apply the shoelace formula:
    +
    +\[
    +\begin{aligned}
    +[AFNBCEM]&=\frac12\Bigl|
    +\underbrace{0\cdot\frac{y}{7}}_{\!0}
    ++\frac{x}{7}\cdot(-30)
    ++(40-\tfrac{5x}{7})\cdot0
    ++28\cdot y
    ++x\cdot0
    ++20\cdot12
    ++\bigl(\tfrac{2x}{7}-4\bigr)\cdot0 \\
    +&\qquad
    +-\bigl(0\cdot\frac{x}{7}
    ++ \frac{y}{7}\bigl(40-\tfrac{5x}{7}\bigr)
    ++(-30)\cdot28
    ++0\cdot x
    ++y\cdot20
    ++0\bigl(\tfrac{2x}{7}-4\bigr)
    ++12\cdot0\bigr)\Bigr|\\
    +&=\frac12\Bigl|
    +\Bigl(-\frac{30x}{7}+1176+240\Bigr)
    +-\Bigl(\frac{40y}{7}-\frac{5xy}{49}-840+20y\Bigr)\Bigr| .
    +\end{aligned}
    +\]
    +
    +All terms containing \(x\) cancel, leaving
    +
    +\[
    +[AFNBCEM]=\frac12\bigl(1416-240\bigr)=\frac12\cdot1176=588 .
    +\]
    +
    +Thus the heptagon has the same area as \(\triangle ABC\).
    +
    +--------------------------------------------------------------------
    +### 4.  Answer
    +
    +\[
    +\boxed{588}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 588

    +

    Extracted Answer: 588

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\angle B=\angle E=60^\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The least possible value of  
    +
    +\[
    +f(X)=AX+BX+CX+DX+EX
    +\]
    +
    +is  
    +
    +\[
    +6+18\sqrt{13}.
    +\]
    +
    +Hence \(m=6\), \(n=18\), \(p=13\) and  
    +
    +\[
    +m+n+p=6+18+13=37.
    +\]
    +
    +\[
    +\boxed{37}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 60

    +

    Extracted Answer: 37

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +A=1,\;B=2,\dots ,L=12
    +\]
    +
    +and consider a random perfect matching of the 12 letters.  
    +For each pair we write the two letters in alphabetical order; thus each
    +pair is an unordered 2‑subset \(\{x,y\}\) with the smaller element first.
    +When the six resulting two‑letter “words’’ are listed alphabetically, the
    +last (lexicographically largest) word is the pair whose **first letter**
    +(the smaller element of the pair) is the largest among the six first
    +letters.
    +
    +Hence the problem asks for the probability that the pair containing the
    +letter \(G\;(=7)\) has the largest first‑letter among the six pairs.
    +
    +--------------------------------------------------------------------
    +### 1.  How a matching looks
    +
    +In any matching exactly six letters are the *smaller* element of their
    +pair; call this set \(S\) ( \(|S|=6\) ).  
    +The remaining six letters are the larger elements of their pairs.
    +
    +The last word is the pair whose smaller element is  
    +
    +\[
    +M=\max S .
    +\]
    +
    +We need the probability that the pair containing \(G\) also contains
    +\(M\).  This can happen in two mutually exclusive ways:
    +
    +* **Case 1.** \(G\) is the smaller element of its pair, so \(M=G\).
    +* **Case 2.** \(G\) is the larger element of its pair; then the smaller
    +  element of that pair must be \(M\).
    +
    +--------------------------------------------------------------------
    +### 2.  Case 2 – \(G\) is the larger element
    +
    +If \(G\) is larger, its partner must be a smaller letter.
    +Let that partner be \(x\ (<G)\).  
    +For \(x\) to be the maximum of \(S\), all letters larger than \(x\)
    +must be the larger elements of their pairs.  Since \(|S|=6\), this forces
    +
    +\[
    +x=F\;(=6),\qquad S=\{1,2,3,4,5,6\}.
    +\]
    +
    +Thus the only possible pairing is \(\{F,G\}\); the remaining letters are
    +\(\{A,B,C,D,E\}\) (small) and \(\{H,I,J,K,L\}\) (large), which can be
    +matched arbitrarily.  There are  
    +
    +\[
    +5! =120
    +\]
    +
    +matchings of this type.
    +
    +--------------------------------------------------------------------
    +### 3.  Case 1 – \(G\) is the smaller element
    +
    +Now \(G\) must be paired with a larger letter \(j\in\{8,9,10,11,12\}\)
    +(\(5\) choices).  
    +For \(G\) to be the maximal element of \(S\), none of the other letters
    +\(8,9,10,11,12\) may belong to \(S\).  Hence  
    +
    +\[
    +S=\{7\}\cup T,\qquad T\subset\{1,2,3,4,5,6\},\ |T|=5.
    +\]
    +
    +Choose the omitted small letter \(r\in\{1,\dots ,6\}\); then
    +\(T=\{1,\dots ,6\}\setminus\{r\}\) ( \(6\) choices).
    +
    +For a fixed \(j\) and \(r\) we must match the five small letters
    +\(T\) with the five large letters \(\{r\}\cup\{8,9,10,11,12\}\setminus\{j\}\)
    +so that each small letter is paired with a larger one.  
    +The four large letters \(\{8,9,10,11,12\}\setminus\{j\}\) can be paired
    +with any four of the small letters – that gives \(4!=24\) possibilities.
    +The remaining large letter \(r\) can only be paired with a small letter
    +that is smaller than \(r\); there are \(r-1\) such choices.
    +
    +Hence for this \(j,r\) we have \((r-1)\cdot4!\) matchings.
    +Summing over \(r\) gives  
    +
    +\[
    +\sum_{r=1}^{6}(r-1)\cdot24=15\cdot24=360
    +\]
    +
    +matchings for each of the five possible \(j\).  Thus
    +
    +\[
    +\text{Case 1 count}=5\cdot360=1800 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Total favourable matchings
    +
    +\[
    +N_{\text{fav}}=1800+120=1920 .
    +\]
    +
    +The total number of perfect matchings of 12 letters is  
    +
    +\[
    +N_{\text{tot}}=\frac{12!}{2^{6}\,6!}=10395 .
    +\]
    +
    +Therefore
    +
    +\[
    +P=\frac{1920}{10395}= \frac{128}{693}\qquad(\gcd(128,693)=1).
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Answer
    +
    +\[
    +\boxed{m+n=128+693=821}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 821

    +

    Extracted Answer: None

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The inequalities  
    +
    +\[
    +x-yz<y-zx<z-xy
    +\]
    +
    +are equivalent to  
    +
    +\[
    +(x-y)(1+z)<0,\qquad (y-z)(1+x)<0 .
    +\]
    +
    +---
    +
    +### 1.  Introduce convenient variables
    +
    +Let  
    +
    +\[
    +u=x-y,\qquad v=y-z .
    +\]
    +
    +On the plane \(x+y+z=75\) we can solve for \((x,y,z)\) in terms of \((u,v)\):
    +
    +\[
    +\begin{aligned}
    +x&=\frac{75+2u+v}{3},\\[2pt]
    +y&=\frac{75-u+v}{3},\\[2pt]
    +z&=\frac{75-u-2v}{3}.
    +\end{aligned}
    +\]
    +
    +Thus  
    +
    +\[
    +1+z=\frac{78-u-2v}{3},\qquad 
    +1+x=\frac{78+2u+v}{3}.
    +\]
    +
    +The two inequalities become  
    +
    +\[
    +u\,(78-u-2v)<0,\qquad v\,(78+2u+v)<0 .
    +\tag{1}
    +\]
    +
    +---
    +
    +### 2.  Determine the regions in the \((u,v)\)-plane  
    +
    +From (1)
    +
    +\[
    +\begin{cases}
    +u(78-u-2v)<0,\\[2pt]
    +v(78+2u+v)<0,
    +\end{cases}
    +\]
    +
    +which splits the \((u,v)\)-plane into four sign cases.
    +
    +| case | signs of \(u,v\) | resulting linear conditions |
    +|------|------------------|----------------------------|
    +| \(u>0,\ v>0\) | empty (contradiction) |
    +| \(u>0,\ v<0\) | \(u+2v>78\) (unbounded) |
    +| \(u<0,\ v>0\) | \(u+2v<78,\;2u+v<-78\) (unbounded) |
    +| \(u<0,\ v<0\) | \(2u+v>-78\) (bounded) |
    +
    +Only the last case gives a bounded region.  
    +With \(u<0,\ v<0\) the condition \(u+2v<78\) is automatic, so the region is
    +
    +\[
    +\boxed{\;u<0,\;v<0,\;2u+v>-78\;}
    +\]
    +
    +which is the interior of the right‑triangle with vertices  
    +
    +\[
    +(0,0),\;(-39,0),\;(0,-78).
    +\]
    +
    +Its area in the \((u,v)\)-coordinates is
    +
    +\[
    +A_{uv}= \frac12\cdot39\cdot78 =1521 .
    +\]
    +
    +---
    +
    +### 3.  Convert to area on the plane \(x+y+z=75\)
    +
    +The linear map \((u,v)\mapsto (x,y,z)\) has Jacobian matrix  
    +
    +\[
    +\frac{\partial(x,y,z)}{\partial(u,v)}=
    +\begin{pmatrix}
    +\frac{2}{3}&\frac13\\[2pt]
    +-\frac13&\frac13\\[2pt]
    +-\frac13&-\frac23
    +\end{pmatrix}.
    +\]
    +
    +The area‑scale factor is the magnitude of the cross product of its column vectors:
    +
    +\[
    +\bigl\lVert( \tfrac23,-\tfrac13,-\tfrac13)\times
    +(\tfrac13,\tfrac13,-\tfrac23)\bigr\rVert
    += \frac1{\sqrt3}.
    +\]
    +
    +Hence the area of the finite region on the given plane is  
    +
    +\[
    +A =\frac1{\sqrt3}\,A_{uv}= \frac{1521}{\sqrt3}
    +      =\frac{1521\sqrt3}{3}= 507\sqrt3 .
    +\]
    +
    +---
    +
    +### 4.  Answer
    +
    +The area is \(507\sqrt3\), i.e. \(a=507\) and \(b=3\).  
    +Thus  
    +
    +\[
    +a+b = 507+3 = \boxed{510}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 510

    +

    Extracted Answer: 510

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Six points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \triangle BGE $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the points be placed on the \(x\)-axis.
    +
    +\[
    +A(0,0),\;B(b,0),\;C(c,0),\;D(d,0),\;E(e,0),\;F(f,0)
    +\]
    +
    +Set the successive segment lengths  
    +
    +\[
    +AB=x_1,\;BC=x_2,\;CD=x_3,\;DE=x_4,\;EF=x_5 .
    +\]
    +
    +From the given distances
    +
    +\[
    +\begin{aligned}
    +x_1+x_2 &= AC = 26,\\
    +x_2+x_3 &= BD = 22,\\
    +x_3+x_4 &= CE = 31,\\
    +x_4+x_5 &= DF = 33,\\
    +x_1+x_2+x_3+x_4+x_5 &= AF = 73 .
    +\end{aligned}
    +\]
    +
    +Solving,
    +\[
    +x_2=8,\qquad x_1=18,\qquad x_3=14,\qquad x_4=17,\qquad x_5=16 .
    +\]
    +
    +Hence  
    +
    +\[
    +\begin{aligned}
    +A&=(0,0),\\
    +B&=(18,0),\\
    +C&=(26,0),\\
    +D&=(40,0),\\
    +E&=(57,0),\\
    +F&=(73,0).
    +\end{aligned}
    +\]
    +
    +Let \(G=(x,y)\).  From the distances \(CG=40\) and \(DG=30\),
    +
    +\[
    +\begin{cases}
    +(x-26)^2+y^2=40^2=1600,\\[2pt]
    +(x-40)^2+y^2=30^2=900 .
    +\end{cases}
    +\]
    +
    +Subtracting the equations,
    +
    +\[
    +(x-26)^2-(x-40)^2=700\Longrightarrow 28x-924=700\Longrightarrow x=58.
    +\]
    +
    +Then  
    +
    +\[
    +(58-26)^2+y^2=1600\Longrightarrow 1024+y^2=1600\Longrightarrow y^2=576\Longrightarrow y=\pm24.
    +\]
    +
    +Thus \(G=(58,24)\) (the sign of \(y\) does not affect the area).
    +
    +The base \(BE\) lies on the \(x\)-axis:
    +
    +\[
    +BE = e-b = 57-18 = 39 .
    +\]
    +
    +The height from \(G\) to the line \(AB\!E\) is \(|y|=24\).
    +
    +Hence the area of \(\triangle BGE\) is
    +
    +\[
    +\frac12\cdot BE\cdot|y|
    +   =\frac12\cdot 39 \cdot 24
    +   =\frac12\cdot 936
    +   =468 .
    +\]
    +
    +\[
    +\boxed{468}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 468

    +

    Extracted Answer: 468

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +A piecewise linear periodic function is defined by $f(x)=\begin{cases}x&\text{if }x\in[-1,1)\\2-x&\text{if }x\in[1,3)\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\frac{a+b\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The intersection points satisfy  
    +
    +\[
    +y=f(x),\qquad x=34y^{2}\Longrightarrow y=f(34y^{2}).
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  The periodic function \(f\)
    +
    +Because \(f(x+4)=f(x)\),
    +
    +\[
    +f(x)=\begin{cases}
    +x-4k ,&x\in[-1+4k,\,1+4k)\\[2mm]
    +2+4k-x ,&x\in[1+4k,\,3+4k)
    +\end{cases}\qquad(k\in\mathbb Z).
    +\]
    +
    +For an intersection we have \(x=34y^{2}\ge 0\) and \(|y|\le 1\) (the range of \(f\)).
    +Hence we only need the periods that intersect the interval \([0,34]\):
    +\[
    +k=0,1,\dots ,8 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Equations for the two sub‑intervals
    +
    +*If \(34y^{2}\in[-1+4k,\,1+4k)\) (the “increasing” part)*
    +\[
    +y = (34y^{2})-4k\;\Longrightarrow\;34y^{2}-y-4k=0 .
    +\tag{A}_{k}
    +\]
    +
    +*If \(34y^{2}\in[1+4k,\,3+4k)\) (the “decreasing” part)*
    +\[
    +y = 2+4k-(34y^{2})\;\Longrightarrow\;34y^{2}+y-(4k+2)=0 .
    +\tag{B}_{k}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Roots
    +
    +\[
    +\begin{aligned}
    +(A)_{k}&:\quad y=\frac{1\pm\sqrt{1+544k}}{68},\\[2mm]
    +(B)_{k}&:\quad y=\frac{-1\pm\sqrt{273+544k}}{68}.
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Which roots are admissible?
    +
    +Because \(|y|\le 1\),
    +
    +* For \(k=0,\dots ,8\) the two roots of \((A)_{k}\) satisfy \(|y|<1\);
    +  thus all \(2\cdot9=18\) of them are valid.
    +
    +* For \((B)_{k}\) the two roots lie in \((-1,1)\) when \(k=0,\dots ,7\).
    +  When \(k=8\) the negative root equals \(\displaystyle 
    +  \frac{-1-\sqrt{4625}}{68}\approx-1.0148\), which is outside the
    +  interval \([-1,1]\); the positive root is still admissible.
    +  Hence we have \(2\cdot8+1=17\) valid roots from the \((B)\) equations.
    +
    +Consequently there are \(18+17=35\) intersection points.
    +
    +--------------------------------------------------------------------
    +### 5.  Summing the \(y\)-coordinates  
    +
    +From Viète’s formulas
    +
    +\[
    +\text{sum of the two roots of }(A)_{k}= \frac{1}{34},\qquad
    +\text{sum of the two roots of }(B)_{k}= -\frac{1}{34}.
    +\]
    +
    +Therefore
    +
    +\[
    +\sum_{k=0}^{8}\bigl(\text{both roots of }(A)_{k}\bigr)=9\cdot\frac1{34}=\frac{9}{34},
    +\]
    +\[
    +\sum_{k=0}^{8}\bigl(\text{both roots of }(B)_{k}\bigr)=-\frac{9}{34}.
    +\]
    +
    +In \((B)_{8}\) we must discard the negative root
    +\(\displaystyle y_{8}^{-}=\frac{-1-\sqrt{4625}}{68}\).
    +Hence the sum of the **valid** \((B)\)‑roots is
    +
    +\[
    +-\frac{9}{34}-y_{8}^{-}.
    +\]
    +
    +Adding the contributions of \((A)\) and \((B)\),
    +
    +\[
    +\begin{aligned}
    +\sum y
    +&= \frac{9}{34}+\Bigl(-\frac{9}{34}-y_{8}^{-}\Bigr)
    +   =-y_{8}^{-}
    +   =\frac{1+\sqrt{4625}}{68}.
    +\end{aligned}
    +\]
    +
    +Since \(\sqrt{4625}=5\sqrt{185}\),
    +
    +\[
    +\sum y=\frac{1+5\sqrt{185}}{68}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 6.  Final answer
    +
    +The required representation is \(\displaystyle\frac{a+b\sqrt{c}}{d}\) with  
    +
    +\[
    +a=1,\; b=5,\; c=185,\; d=68,
    +\]
    +
    +and \(\gcd(a,b,d)=1\), \(c\) square‑free.
    +
    +\[
    +a+b+c+d = 1+5+185+68 = 259.
    +\]
    +
    +\[
    +\boxed{259}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 259

    +

    Extracted Answer: 259

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +d=n+2 \qquad (d\ge 3,\; n>0)
    +\]
    +
    +The condition is  
    +
    +\[
    +d \mid 3(n+3)(n^2+9).
    +\]
    +
    +Since \(n\equiv -2 \pmod d\),
    +
    +\[
    +n+3\equiv (-2)+3 \equiv 1 \pmod d,\qquad 
    +n^2+9\equiv (-2)^2+9 \equiv 4+9\equiv 13 \pmod d.
    +\]
    +
    +Hence
    +
    +\[
    +3(n+3)(n^2+9)\equiv 3\cdot1\cdot13=39 \pmod d .
    +\]
    +
    +Thus \(d\) must divide 39:
    +
    +\[
    +d\mid 39 .
    +\]
    +
    +The positive divisors of \(39\) are \(1,3,13,39\).  
    +Because \(d=n+2\ge 3\), we have  
    +
    +\[
    +d\in\{3,13,39\}.
    +\]
    +
    +Corresponding \(n\) values are  
    +
    +\[
    +n=d-2\in\{1,11,37\}.
    +\]
    +
    +All three satisfy the original divisibility, so the required sum is  
    +
    +\[
    +1+11+37=49.
    +\]
    +
    +\[
    +\boxed{49}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 49

    +

    Extracted Answer: 49

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The product $ \prod_{k=4}^{63} \frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})} = \frac{\log_4(5^{15})}{\log_5(5^{12})} \cdot \frac{\log_5(5^{24})}{\log_6(5^{21})} \cdot \frac{\log_6(5^{35})}{\log_7(5^{32})} \cdots \frac{\log_{63}(5^{3968})}{\log_{64}(5^{3965})} $ is equal to $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +P=\prod_{k=4}^{63}\frac{\log_k(5^{k^{2}-1})}{\log_{k+1}(5^{k^{2}-4})}
    +\]
    +
    +---
    +
    +### 1.  Rewrite each factor
    +
    +\[
    +\log_k(5^{p})=\frac{\log_{5}(5^{p})}{\log_{5}k}= \frac{p}{\log_{5}k}.
    +\]
    +
    +Hence
    +
    +\[
    +\frac{\log_k(5^{k^{2}-1})}{\log_{k+1}(5^{k^{2}-4})}
    +   =\frac{\dfrac{k^{2}-1}{\log_{5}k}}{\dfrac{k^{2}-4}{\log_{5}(k+1)}}
    +   =\frac{k^{2}-1}{k^{2}-4}\cdot\frac{\log_{5}(k+1)}{\log_{5}k}.
    +\]
    +
    +Factor the rational part:
    +
    +\[
    +\frac{k^{2}-1}{k^{2}-4}= \frac{(k-1)(k+1)}{(k-2)(k+2)} .
    +\]
    +
    +Thus
    +
    +\[
    +P=\prod_{k=4}^{63}
    +   \left[\frac{(k-1)(k+1)}{(k-2)(k+2)}
    +         \cdot\frac{\log_{5}(k+1)}{\log_{5}k}\right].
    +\]
    +
    +---
    +
    +### 2.  Telescope the rational part  
    +
    +Separate the product:
    +
    +\[
    +\prod_{k=4}^{63}\frac{k-1}{k-2}\; \times\;
    +\prod_{k=4}^{63}\frac{k+1}{k+2}.
    +\]
    +
    +\[
    +\begin{aligned}
    +\prod_{k=4}^{63}\frac{k-1}{k-2}
    +   &=\frac{3}{2}\cdot\frac{4}{3}\cdot\frac{5}{4}\cdots\frac{62}{61}
    +    =\frac{62}{2}=31,\\[4pt]
    +\prod_{k=4}^{63}\frac{k+1}{k+2}
    +   &=\frac{5}{6}\cdot\frac{6}{7}\cdot\frac{7}{8}\cdots\frac{64}{65}
    +    =\frac{5}{65}=\frac{1}{13}.
    +\end{aligned}
    +\]
    +
    +Hence the rational part equals  
    +
    +\[
    +\frac{31}{13}.
    +\]
    +
    +---
    +
    +### 3.  Telescope the logarithmic part  
    +
    +\[
    +\prod_{k=4}^{63}\frac{\log_{5}(k+1)}{\log_{5}k}
    +   =\frac{\log_{5}5}{\log_{5}4}\cdot\frac{\log_{5}6}{\log_{5}5}
    +    \cdots\frac{\log_{5}64}{\log_{5}63}
    +   =\frac{\log_{5}64}{\log_{5}4}
    +   =\log_{4}64.
    +\]
    +
    +Since \(64=4^{3}\), \(\log_{4}64=3\).
    +
    +Thus the logarithmic part contributes a factor of \(3\).
    +
    +---
    +
    +### 4.  Combine
    +
    +\[
    +P=\frac{31}{13}\times 3=\frac{93}{13}.
    +\]
    +
    +The fraction \(\frac{93}{13}\) is already in lowest terms, so  
    +
    +\[
    +m=93,\qquad n=13.
    +\]
    +
    +Finally,
    +
    +\[
    +m+n=93+13=106.
    +\]
    +
    +\[
    +\boxed{106}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 106

    +

    Extracted Answer: 106

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Sketch**
    +
    +Let  
    +
    +\[
    +a=3^{\alpha }u ,\qquad b=3^{\beta }v ,\qquad c=3^{\gamma }w ,
    +\qquad(\alpha ,\beta ,\gamma \ge 0,\;3\nmid u,v,w)
    +\]
    +
    +and put \(\kappa =\min (\alpha ,\beta ,\gamma )\).
    +Writing \(a^{3}=3^{3\alpha }u^{3}\) etc.,  
    +
    +\[
    +a^{3}+b^{3}+c^{3}\equiv 0\pmod{3^{7}}
    +\Longleftrightarrow
    +u^{3}3^{3(\alpha-\kappa)}+v^{3}3^{3(\beta-\kappa)}+w^{3}3^{3(\gamma-\kappa)}
    +\equiv0\pmod{3^{7-3\kappa}} .
    +\tag{1}
    +\]
    +
    +Thus we have three essentially different cases:
    +
    +* \(\kappa\ge 3\) : every term in (1) is divisible by \(3^{9}\), hence the
    +  congruence is always true.
    +
    +* \(\kappa =2\) : all three numbers are divisible by \(9\) and at least one
    +  is not divisible by \(27\).  
    +  Put \(a=9A,\;b=9B,\;c=9C\;(1\le A,B,C\le81)\).   
    +  Then (1) reduces to  
    +
    +  \[
    +  A+B+C\equiv0\pmod3 .
    +  \]
    +
    +  The numbers \(A,B,C\) are taken from the set \(\{1,\dots ,81\}\); each
    +  residue class \(\pmod3\) occurs exactly \(27\) times.  
    +  Hence the number of ordered triples with \(\kappa =2\) is  
    +
    +  \[
    +  9\cdot 27^{3}=157\,464 .
    +  \tag{2}
    +  \]
    +
    +* \(\kappa =1\) : all three numbers are divisible by \(3\) and at least one
    +  is not divisible by \(9\).  Write \(a=3A,\;b=3B,\;c=3C\;(1\le A,B,C\le243)\).  
    +  Then (1) becomes  
    +
    +  \[
    +  A^{3}+B^{3}+C^{3}\equiv0\pmod{3^{4}} .
    +  \tag{3}
    +  \]
    +
    +  The cubes \(\pmod {81}\) of the integers \(1\le x\le243\) are distributed as  
    +
    +  \[
    +  \begin{array}{c|c}
    +  \text{value}&\text{how many $x$ give it}\\ \hline
    +  0 & 27\\
    +  27,\,54 & 27\text{ each}\\
    +  \text{18 other residues} & 9\text{ each}
    +  \end{array}
    +  \]
    +
    +  Using this distribution one counts (by a short elementary
    +  combinatorial argument) the number of ordered triples satisfying (3) to be  
    +
    +  \[
    +  452\,709 .
    +  \tag{4}
    +  \]
    +
    +  The triples counted in (4) include those where all three numbers are
    +  divisible by \(9\); those are exactly the triples of the previous case,
    +  i.e. the $157\,464$ triples of (2).  Hence the triples with
    +  \(\kappa =1\) contribute  
    +
    +  \[
    +  452\,709-157\,464 = 295\,245 .
    +  \tag{5}
    +  \]
    +
    +* \(\kappa =0\) : at least one of the numbers is not divisible by \(3\).
    +  The total number of ordered triples with $1\le a,b,c\le3^{6}=729$ is
    +  $729^{3}=387\,420\,489$.
    +  Subtracting the contributions of the three previous cases gives
    +
    +  \[
    +  387\,420\,489-19\,683-157\,464-295\,245 = 702\,027 .
    +  \tag{6}
    +  \]
    +
    +Finally we take the answer modulo $1000$ :
    +
    +\[
    +702\,027\equiv\boxed{27}\pmod{1000}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 735

    +

    Extracted Answer: 27

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Circle $\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\omega_2$ with radius 15. Points $C$ and $D$ lie on $\omega_2$ such that $\overline{BC}$ is a diameter of $\omega_2$ and $\overline{BC} \perp \overline{AD}$. The rectangle $EFGH$ is inscribed in $\omega_1$ such that $\overline{EF} \perp \overline{BC}$, $C$ is closer to $\overline{GH}$ than to $\overline{EF}$, and $D$ is closer to $\overline{FG}$ than to $\overline{EH}$, as shown. Triangles $\triangle DGF$ and $\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +* \(O\) be the center of \(\omega _2\) (radius \(15\)),  
    +* \(A\) be the center of \(\omega _1\) (radius \(6\)),  
    +* \(B\) the internal point of tangency of the two circles.
    +
    +---
    +
    +### 1.  Coordinates
    +
    +Place \(O\) at the origin and the line \(BC\) on the \(x\)-axis.
    +
    +\[
    +B=(15,0),\qquad O=(0,0),\qquad A=(9,0)
    +\]
    +
    +Because \(BC\) is a diameter of \(\omega _2\),
    +
    +\[
    +C=(-15,0).
    +\]
    +
    +\(AD\perp BC\) makes \(AD\) vertical, so \(D\) lies on the line \(x=9\) and on \(\omega_2\):
    +
    +\[
    +9^{2}+y^{2}=15^{2}\Longrightarrow y^{2}=144\Longrightarrow y=\pm12 .
    +\]
    +
    +Since later we need \(D\) to be nearer to the lower side of the rectangle, we take  
    +
    +\[
    +D=(9,-12).
    +\]
    +
    +---
    +
    +### 2.  Rectangle \(EFGH\) inside \(\omega _1\)
    +
    +The rectangle is axis‑aligned because \(EF\perp BC\) (so \(EF\) is vertical) and a rectangle has right angles.
    +
    +Let the half‑width be \(a\) and the half‑height be \(y\) :
    +
    +\[
    +\begin{aligned}
    +E&\;(9+a,\;y),&F&\;(9+a,\;-y),\\
    +G&\;(9-a,\;-y),&H&\;(9-a,\;y).
    +\end{aligned}
    +\]
    +
    +All four vertices lie on \(\omega _1\), whose equation is  
    +
    +\[
    +(x-9)^2+y^2=6^{2}=36 .
    +\]
    +
    +Hence  
    +
    +\[
    +a^{2}+y^{2}=36\quad\Longrightarrow\quad y=\sqrt{36-a^{2}}\;(>0).
    +\]
    +
    +The rectangle’s area is  
    +
    +\[
    +[EFGH]= (2a)(2y)=4ay .
    +\tag{1}
    +\]
    +
    +---
    +
    +### 3.  Areas of \(\triangle DGF\) and \(\triangle CHG\)
    +
    +\[
    +\begin{aligned}
    +\triangle DGF &: \text{base }GF=2a,\; 
    +\text{height }=12-y,\\
    +[ DGF]&=\tfrac12\,(2a)(12-y)=a(12-y). \tag{2}
    +\end{aligned}
    +\]
    +
    +\[
    +\begin{aligned}
    +\triangle CHG &: \text{base }HG=2y,\;
    +\text{horizontal distance from }C\text{ to line }x=9-a\text{ is }24-a,\\
    +[CHG]&=\tfrac12\,(2y)(24-a)=y(24-a). \tag{3}
    +\end{aligned}
    +\]
    +
    +Given \([DGF]=[CHG]\),
    +
    +\[
    +a(12-y)=y(24-a).
    +\]
    +
    +Expanding and canceling the common term \(-ay\) gives
    +
    +\[
    +12a=24y\quad\Longrightarrow\quad a=2y. \tag{4}
    +\]
    +
    +---
    +
    +### 4.  Solving for \(a\) and \(y\)
    +
    +From (4) and the circle condition \(a^{2}+y^{2}=36\),
    +
    +\[
    +(2y)^{2}+y^{2}=36\Longrightarrow 5y^{2}=36
    +\Longrightarrow y^{2}=\frac{36}{5}
    +\Longrightarrow y=\frac{6}{\sqrt5}=\frac{6\sqrt5}{5}.
    +\]
    +
    +Thus  
    +
    +\[
    +a=2y= \frac{12}{\sqrt5}= \frac{12\sqrt5}{5}.
    +\]
    +
    +Both satisfy \(a\le6,\;y\le6\), so the rectangle indeed fits in \(\omega _1\).
    +
    +---
    +
    +### 5.  Area of the rectangle
    +
    +Insert \(a=2y\) into (1):
    +
    +\[
    +[EFGH]=4a y =4(2y)\,y = 8y^{2}=8\left(\frac{36}{5}\right)=\frac{288}{5}.
    +\]
    +
    +Hence the rectangle’s area is \(\displaystyle \frac{288}{5}\).
    +
    +The fraction is already in lowest terms, so  
    +
    +\[
    +m=288,\qquad n=5,\qquad m+n=288+5=293.
    +\]
    +
    +\[
    +\boxed{293}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 293

    +

    Extracted Answer: 293

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Four unit squares form a $2 \times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the 9 vertices of the \(2\times2\) grid be the points \((i,j)\) with \(i,j=0,1,2\).
    +The 12 unit edges are  
    +
    +* 8 **boundary** edges (two on each side of the large square);
    +* 4 **interior** edges, which are shared by two unit squares.
    +
    +Denote the four interior edges by  
    +
    +\[
    +a=v_{10},\qquad b=v_{11},\qquad c=h_{01},\qquad d=h_{11},
    +\]
    +
    +where each variable is \(1\) if the edge is coloured red and \(0\) if it is blue.
    +
    +---
    +
    +### 1.  How the interior edges affect a square  
    +
    +Each small square has two interior edges and two boundary edges.
    +
    +\[
    +\begin{array}{c|c}
    +\text{square}&\text{interior edges}\\\hline
    +\text{BL}& a,\;c\\
    +\text{BR}& b,\;c\\
    +\text{TL}& a,\;d\\
    +\text{TR}& b,\;d
    +\end{array}
    +\]
    +
    +Let \(r\) be the number of red interior edges of a given square.
    +Since the square must have exactly two red sides, it needs  
    +\(2-r\) red boundary edges.
    +
    +For a square:
    +
    +* if \(r=0\) or \(r=2\) the two boundary edges are forced (both red or both blue) – **1** way;
    +* if \(r=1\) exactly one of the two boundary edges must be red – **2** ways.
    +
    +Thus a given interior‑edge configuration contributes a factor  
    +
    +\[
    +2^{\#\{\text{squares with }r=1\}} .
    +\]
    +
    +Denote by  
    +
    +\[
    +N(a,b,c,d)=\mathbf 1_{a\neq c}+\mathbf 1_{a\neq d}+\mathbf 1_{b\neq c}+\mathbf 1_{b\neq d},
    +\]
    +
    +the number of squares for which exactly one of the two interior edges is red.
    +Then the total number of colourings is
    +
    +\[
    +\sum_{a,b,c,d\in\{0,1\}} 2^{\,N(a,b,c,d)} .
    +\]
    +
    +---
    +
    +### 2.  Evaluating the sum  
    +
    +The value of \(N\) depends only on how the pairs \((a,b)\) and \((c,d)\) compare.
    +
    +* **Case 1:** \((a,b)=(c,d)\).  
    +  Then \(N=0\). This occurs for \((0,0,0,0)\) and \((1,1,1,1)\) – 2 assignments.
    +  Contribution: \(2\cdot 2^{0}=2\).
    +
    +* **Case 2:** \((a,b)=(c,d)\) with opposite colour, i.e. \(a=b\neq c=d\).  
    +  Then each of the four comparisons differs, so \(N=4\).  
    +  This happens for \((0,0,1,1)\) and \((1,1,0,0)\) – 2 assignments.
    +  Contribution: \(2\cdot 2^{4}=2\cdot16=32\).
    +
    +* **Case 3:** All other assignments.  
    +  There are \(16-4=12\) such configurations and one checks that each yields \(N=2\).  
    +  Contribution: \(12\cdot 2^{2}=12\cdot4=48\).
    +
    +Adding the three cases,
    +
    +\[
    +2+32+48=82 .
    +\]
    +
    +---
    +
    +\[
    +\boxed{82}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 82

    +

    Extracted Answer: 82

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The divisors of  
    +
    +\[
    +2025 = 3^{4}\cdot 5^{2}
    +\]
    +
    +are of the form \(3^{a}5^{b}\) with  
    +
    +\[
    +0\le a\le 4 ,\qquad 0\le b\le 2 .
    +\]
    +
    +Hence  
    +
    +\[
    +|A|=(4+1)(2+1)=15,\qquad\text{so there are }2^{15}=32768\text{ subsets of }A.
    +\]
    +
    +For a subset \(B\subseteq A\) the least common multiple is  
    +
    +\[
    +\operatorname{lcm}(B)=3^{\max a}\,5^{\max b},
    +\]
    +
    +where \(\max a\) (resp. \(\max b\)) is the largest exponent of \(3\) (resp. \(5\)) among the elements of \(B\).
    +
    +Thus \(\operatorname{lcm}(B)=2025\) iff  
    +
    +* some element of \(B\) has \(a=4\) (i.e. belongs to the set \(R\) of divisors with a factor \(3^{4}\));
    +* some element of \(B\) has \(b=2\) (i.e. belongs to the set \(C\) of divisors with a factor \(5^{2}\)).
    +
    +The set \(R\) consists of the three divisors \(3^{4}5^{0}, 3^{4}5^{1}, 3^{4}5^{2}\);
    +the set \(C\) consists of the five divisors \(3^{0}5^{2}, 3^{1}5^{2}, 3^{2}5^{2}, 3^{3}5^{2}, 3^{4}5^{2}\).
    +Their intersection is \(\{2025\}\).  
    +
    +We need the number of subsets of \(A\) that contain **at least one** element of \(R\) and **at least one** element of \(C\).
    +
    +Using inclusion–exclusion on the whole set of subsets:
    +
    +\[
    +\begin{aligned}
    +N &= 2^{15}
    +      -\underbrace{2^{15-|R|}}_{\text{subsets with no }R}
    +      -\underbrace{2^{15-|C|}}_{\text{subsets with no }C}
    +      +\underbrace{2^{15-|R\cup C|}}_{\text{subsets with neither}}  \\
    +  &= 2^{15} -2^{12} -2^{10} + 2^{8} \\
    +  &= 32768 - 4096 - 1024 + 256 = 27904 .
    +\end{aligned}
    +\]
    +
    +All these subsets are non‑empty (they contain at least one element from \(R\) and one from \(C\)).  
    +
    +Hence  
    +
    +\[
    +\Pr(\text{nonempty }B\text{ with }\operatorname{lcm}=2025)
    +   = \frac{27904}{2^{15}}
    +   = \frac{27904}{32768}
    +   = \frac{109}{128}\;.
    +\]
    +
    +So \(m=109\) and \(n=128\); therefore  
    +
    +\[
    +m+n = 109+128 = 237 .
    +\]
    +
    +\[
    +\boxed{237}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 237

    +

    Extracted Answer: 237

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Suppose $ \triangle ABC $ has angles $ \angle BAC = 84^\circ $, $ \angle ABC = 60^\circ $, and $ \angle ACB = 36^\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \overline{BC} $, $ \overline{AC} $, and $ \overline{AB} $, respectively. The circumcircle of $ \triangle DEF $ intersects $ \overline{BD} $, $ \overline{AE} $, and $ \overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \triangle DEF $ into six minor arcs, as shown. Find $ \widehat{DE} + 2 \cdot \widehat{HJ} + 3 \cdot \widehat{FG} $, where the arcs are measured in degrees.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For \( \triangle ABC\) let  
    +
    +\[
    +\angle A=84^{\circ},\qquad \angle B=60^{\circ},\qquad \angle C=36^{\circ}.
    +\]
    +
    +---
    +
    +### 1.  Identify the points on the nine‑point circle  
    +
    +\(D,E,F\) are the midpoints of \(BC,CA,AB\); hence the circumcircle of \(\triangle DEF\) is the nine‑point circle of \(\triangle ABC\).
    +
    +The nine‑point circle also passes through the feet of the three altitudes.
    +Thus  
    +
    +* \(G\) is the foot of the altitude from \(A\) onto \(BC\);  
    +* \(H\) is the foot of the altitude from \(B\) onto \(CA\);  
    +* \(J\) is the foot of the altitude from \(C\) onto \(AB\).
    +
    +So the six points on the nine‑point circle are, in order,
    +\(G,\;D,\;E,\;H,\;J,\;F\).
    +
    +---
    +
    +### 2.  Arc \(\widehat{DE}\)
    +
    +In \(\triangle DEF\) we have the well‑known midpoint–parallel relations  
    +
    +\[
    +DF\parallel AC,\qquad EF\parallel BC .
    +\]
    +
    +Hence at \(F\)
    +
    +\[
    +\angle DFE=\angle(DF,EF)=\angle(AC,BC)=\angle C=36^{\circ}.
    +\]
    +
    +For a chord, the intercepted minor arc equals twice the inscribed angle, so  
    +
    +\[
    +\widehat{DE}=2\angle DFE=2\cdot36^{\circ}=72^{\circ}.
    +\]
    +
    +---
    +
    +### 3.  Arc \(\widehat{FG}\)
    +
    +\(DG\) lies on side \(BC\); thus \(DG\parallel BC\).
    +Since \(DF\parallel AC\),
    +
    +\[
    +\angle FDG=\angle(DF,DG)=\angle(AC,BC)=\angle C=36^{\circ}.
    +\]
    +
    +Therefore  
    +
    +\[
    +\widehat{FG}=2\angle FDG=2\cdot36^{\circ}=72^{\circ}.
    +\]
    +
    +---
    +
    +### 4.  Arc \(\widehat{HJ}\)
    +
    +\(G,\;H,\;J\) are the vertices of the orthic triangle.
    +For an acute triangle, the orthic triangle angles satisfy  
    +
    +\[
    +\angle H G J =180^{\circ}-2\angle A .
    +\]
    +
    +Here \(\angle A=84^{\circ}\), so  
    +
    +\[
    +\angle H G J =180^{\circ}-2\cdot84^{\circ}=12^{\circ}.
    +\]
    +
    +The inscribed angle \(\angle H G J\) intercepts the minor arc \(\widehat{HJ}\); consequently  
    +
    +\[
    +\widehat{HJ}=2\angle H G J =2\cdot12^{\circ}=24^{\circ}.
    +\]
    +
    +---
    +
    +### 5.  Compute the required combination  
    +
    +\[
    +\begin{aligned}
    +\widehat{DE}+2\widehat{HJ}+3\widehat{FG}
    +&=72^{\circ}+2\cdot24^{\circ}+3\cdot72^{\circ} \\
    +&=72^{\circ}+48^{\circ}+216^{\circ} \\
    +&=336^{\circ}.
    +\end{aligned}
    +\]
    +
    +---
    +
    +\[
    +\boxed{336}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 336

    +

    Extracted Answer: 336

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +From an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.
    +
    +In general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +g(N)=\Big\lfloor\frac{N}{25}\Big\rfloor+
    +\Big\lfloor\frac{N\bmod 25}{10}\Big\rfloor+(N\bmod 25)\bmod10
    +\]
    +
    +be the number of coins the greedy algorithm uses for \(N\) cents.
    +For an optimal solution we may use fewer quarters.  
    +Write  
    +
    +\[
    +N=25q+a,\qquad 0\le a<25 .
    +\]
    +
    +If we replace \(k\;(1\le k\le q)\) quarters by dimes and pennies, the new
    +total number of coins is  
    +
    +\[
    +c_k=(q-k)+\Big\lfloor\frac{a+25k}{10}\Big\rfloor+(a+25k)\bmod10 .
    +\]
    +
    +Using \(a+25k=10(2k)+ (a+5k)\),
    +
    +\[
    +c_k=q+a+24k-9\Big\lfloor\frac{a+5k}{10}\Big\rfloor .
    +\]
    +
    +The greedy number is  
    +
    +\[
    +g(N)=q+a-9\Big\lfloor\frac a{10}\Big\rfloor .
    +\]
    +
    +Hence  
    +
    +\[
    +c_k-g(N)=24k-9\Big(\Big\lfloor\frac{a+5k}{10}\Big\rfloor-
    +\Big\lfloor\frac a{10}\Big\rfloor\Big)
    +        =24k-9\,\Big\lfloor\frac{5k+r}{10}\Big\rfloor ,
    +\]
    +where \(r=a\bmod10\) (so \(0\le r\le 9\)).
    +
    +The greedy algorithm fails iff there exists a \(k\ge1\) with \(c_k<g(N)\),
    +i.e.
    +
    +\[
    +24k<9\Big\lfloor\frac{5k+r}{10}\Big\rfloor
    +\iff 
    +\Big\lfloor\frac{5k+r}{10}\Big\rfloor>\frac{2k}{3}.
    +\]
    +
    +For \(k\ge2\) the left‑hand side grows like \(0.5k\) while the right
    +hand side grows like \(0.666\!k\); the inequality never holds.
    +For \(k=1\) the condition becomes  
    +
    +\[
    +\Big\lfloor\frac{5+r}{10}\Big\rfloor\ge1\iff r\ge5 .
    +\]
    +
    +Thus **greedy fails exactly when**  
    +
    +* \(N\ge25\) (so at least one quarter is used), and  
    +* \(a\bmod10\ge5\), i.e. the remainder \(a=N\bmod25\) lies in  
    +
    +\[
    +\{5,6,7,8,9,15,16,17,18,19\}.
    +\]
    +
    +---
    +
    +### Counting the failures
    +
    +For each of the 10 bad remainders \(a\) the numbers
    +\(N=a+25k\) with \(k\ge1\) and \(N\le1000\) are failures.
    +Since \(1000- a<1000\) we have  
    +
    +\[
    +\Big\lfloor\frac{1000-a}{25}\Big\rfloor = 39\quad (a\ge1).
    +\]
    +
    +Hence each bad remainder contributes 39 failing values, giving  
    +
    +\[
    +10\times39 = 390
    +\]
    +
    +failing numbers.
    +
    +---
    +
    +### Total successes
    +
    +There are \(1000\) integers from 1 to 1000, therefore
    +
    +\[
    +\text{successful }N = 1000-390 = 610 .
    +\]
    +
    +\[
    +\boxed{610}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 610

    +

    Extracted Answer: 610

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the vertices of the regular \(24\)-gon be numbered \(0,1,\dots ,23\) clockwise.  
    +If a segment joins vertex \(i\) with vertex \(j\) then the (shorter) distance
    +\(\min\{\,|i-j|,24-|i-j|\,\}\) is a number \(k\) with  
    +
    +\[
    +1\le k\le 12 .
    +\]
    +
    +All 12 segments must have the same length, so they must all have the same
    +step‑size \(k\).  
    +For a fixed \(k\) consider the graph \(G_k\) whose edges are exactly the
    +\(24\) chords \(\{i,i+k\}\;(i=0,\dots ,23)\) (the pair \(\{i,i+k\}\) is the same
    +as \(\{i+k,i\}\)).  
    +
    +--------------------------------------------------------------------
    +### 1.  Structure of \(G_k\)
    +
    +Let  
    +
    +\[
    +d=\gcd(24,k),\qquad L=\frac{24}{d}.
    +\]
    +
    +Starting from a vertex \(i\) and repeatedly adding \(k\) modulo \(24\) we obtain
    +the cycle  
    +
    +\[
    +i,\; i+k,\; i+2k,\dots ,i+(L-1)k .
    +\]
    +
    +Thus \(G_k\) splits into \(d\) disjoint cycles, each of length \(L\).
    +
    +- If \(k\neq 12\) then \(i+k\neq i-k\) and each vertex has degree \(2\); the
    +components are simple cycles.
    +- For \(k=12\) each vertex is paired only with its opposite vertex, so the
    +components are single edges (a perfect matching already).
    +
    +--------------------------------------------------------------------
    +### 2.  When does a perfect matching exist?
    +
    +A perfect matching on a cycle exists only when the cycle length is even.
    +Hence we need \(L\) even, i.e.  
    +
    +\[
    +\frac{24}{d}\text{ is even}\iff d\mid 12 .
    +\]
    +
    +Therefore a perfect matching is possible for all \(k\) whose
    +\(\gcd(24,k)\) belongs to \(\{1,2,3,4,6,12\}\).  
    +The only value of \(k\) with \(\gcd(24,k)=8\) is \(k=8\); for this step size
    +\(L=3\) (odd) and no perfect matching exists.
    +
    +--------------------------------------------------------------------
    +### 3.  Number of perfect matchings for a given \(k\)
    +
    +- **Case \(k\neq 12\).**  
    +  The graph consists of \(d\) even cycles of length \(L\).  
    +  Each even cycle has exactly two perfect matchings (choose the “odd” or the
    +  “even” edges).  
    +  Hence the number of perfect matchings using step size \(k\) is  
    +
    +  \[
    +  N(k)=2^{d}=2^{\gcd(24,k)} .
    +  \]
    +
    +- **Case \(k=12\).**  
    +  The edges are the 12 diameters \(\{i,i+12\}\).  
    +  This already is a unique perfect matching, so \(N(12)=1\).
    +
    +--------------------------------------------------------------------
    +### 4.  Summation over all possible step sizes
    +
    +The admissible step sizes are  
    +
    +\[
    +k=1,2,3,4,5,6,7,9,10,11,12  \qquad(k=8\text{ is excluded}).
    +\]
    +
    +Their contributions are:
    +
    +\[
    +\begin{array}{c|c|c}
    +k & \gcd(24,k) & N(k)\\ \hline
    +1 & 1 & 2\\
    +2 & 2 & 4\\
    +3 & 3 & 8\\
    +4 & 4 & 16\\
    +5 & 1 & 2\\
    +6 & 6 & 64\\
    +7 & 1 & 2\\
    +9 & 3 & 8\\
    +10& 2 & 4\\
    +11& 1 & 2\\
    +12&12 & 1
    +\end{array}
    +\]
    +
    +Adding them:
    +
    +\[
    +2+4+8+16+2+64+2+8+4+2+1 = 113 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Answer
    +
    +Thus there are  
    +
    +\[
    +\boxed{113}
    +\]
    +
    +different ways to draw 12 equal‑length segments so that each of the 24
    +vertices is an endpoint of exactly one segment.
    +
    +
    +

    Results

    +

    Correct Answer: 113

    +

    Extracted Answer: 113

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A_1A_2 \ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:
    +* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \leq i \leq 10 $,
    +* $ \cos(\angle A_iA_1A_{i+1}) = \frac{12}{13} $ for each $ 2 \leq i \leq 10 $,
    +* The perimeter of $ A_1A_2 \ldots A_{11} $ is 20.
    +If $ A_1A_2 + A_1A_{11} $ can be expressed as $ \frac{m\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +r_i=A_1A_i\qquad(2\le i\le 11),\qquad 
    +\theta=\angle A_iA_1A_{i+1}\;(2\le i\le 10).
    +\]
    +
    +---
    +
    +### 1.  Data from the triangles  
    +
    +\[
    +\cos\theta=\frac{12}{13},\qquad 
    +\sin\theta=\sqrt{1-\left(\frac{12}{13}\right)^2}= \frac{5}{13}.
    +\]
    +
    +The area of \(\triangle A_iA_1A_{i+1}\) is  
    +
    +\[
    +\frac12 r_i r_{i+1}\sin\theta =1
    +\Longrightarrow r_i r_{i+1}= \frac{2}{\sin\theta}
    +               = \frac{2}{5/13}= \frac{26}{5}\; .
    +\tag{1}
    +\]
    +
    +Hence for all \(i=2,\dots ,10\)
    +
    +\[
    +r_i r_{i+1}=K,\qquad K:=\frac{26}{5}.   \tag{2}
    +\]
    +
    +From (2) we obtain the recurrence  
    +
    +\[
    +r_{i+1}= \frac K{r_i},\qquad\text{so } r_{i+2}=r_i .
    +\]
    +
    +Thus the distances from \(A_1\) alternate:
    +
    +\[
    +r_2=r_4=r_6=r_8=r_{10}=x,\qquad 
    +r_3=r_5=r_7=r_9=r_{11}=y,
    +\]
    +where  
    +
    +\[
    +xy=K=\frac{26}{5}.  \tag{3}
    +\]
    +
    +---
    +
    +### 2.  Length of the other edges  
    +
    +For any \(i=2,\dots ,10\) the edge \(A_iA_{i+1}\) has length (law of cosines)
    +
    +\[
    +\begin{aligned}
    +d &:=A_iA_{i+1}= 
    +\sqrt{r_i^{\,2}+r_{i+1}^{\,2}-2r_i r_{i+1}\cos\theta}  \\
    +   &=\sqrt{x^{2}+y^{2}-2xy\frac{12}{13}}
    +   =\sqrt{x^{2}+y^{2}-\frac{24}{13}K}.
    +\end{aligned}
    +\tag{4}
    +\]
    +
    +All nine edges \(A_iA_{i+1}\;(i=2\ldots10)\) have the same length \(d\).
    +
    +---
    +
    +### 3.  Perimeter condition  
    +
    +The perimeter of the 11‑gon is  
    +
    +\[
    +x+y+9d=20.   \tag{5}
    +\]
    +
    +Introduce  
    +
    +\[
    +t:=x+y\quad\text{(the quantity we need)},
    +\qquad xy=K .
    +\]
    +
    +From \(x^{2}+y^{2}=t^{2}-2K\) and (4),
    +
    +\[
    +d^{2}=t^{2}-2K-\frac{24}{13}K
    +     =t^{2}-\frac{50}{13}K .
    +\]
    +
    +Since \(\displaystyle \frac{50}{13}K
    +      =\frac{50}{13}\cdot\frac{26}{5}=20\),
    +
    +\[
    +d^{2}=t^{2}-20\qquad\Longrightarrow\qquad d=\sqrt{t^{2}-20}. \tag{6}
    +\]
    +
    +Insert (6) into (5):
    +
    +\[
    +t+9\sqrt{t^{2}-20}=20. \tag{7}
    +\]
    +
    +---
    +
    +### 4.  Solving for \(t\)
    +
    +From (7),
    +
    +\[
    +\sqrt{t^{2}-20}= \frac{20-t}{9}\quad (20-t\ge 0).
    +\]
    +
    +Squaring gives  
    +
    +\[
    +t^{2}-20=\frac{(20-t)^{2}}{81}
    +\Longrightarrow 80t^{2}+40t-2020=0.
    +\]
    +
    +Dividing by 20,
    +
    +\[
    +4t^{2}+2t-101=0.
    +\]
    +
    +Hence  
    +
    +\[
    +t=\frac{-2\pm\sqrt{4+1616}}{8}
    +   =\frac{-2\pm18\sqrt5}{8}.
    +\]
    +
    +Only the positive root is admissible:
    +
    +\[
    +t=\frac{18\sqrt5-2}{8}
    +  =\frac{9\sqrt5-1}{4}.
    +\]
    +
    +Thus  
    +
    +\[
    +A_1A_2+A_1A_{11}=t=\frac{9\sqrt5-1}{4}
    +     =\frac{m\sqrt n-p}{q},
    +\]
    +
    +with \(m=9,\;n=5,\;p=1,\;q=4\).
    +
    +---
    +
    +### 5.  Required sum  
    +
    +\[
    +m+n+p+q=9+5+1+4=19.
    +\]
    +
    +\[
    +\boxed{19}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 19

    +

    Extracted Answer: 19

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Alex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **1.  Regions produced by line‑segments**
    +
    +If a set of line segments inside a disc has no three of them meeting at the same interior point, then  
    +
    +\[
    +\text{#regions}=1+\;(\text{#segments})+\;(\text{# interior intersection points}).
    +\]
    +
    +Hence for our problem  
    +
    +\[
    +R=1+27+I ,
    +\]
    +
    +where \(I\) is the (random) number of interior intersection points.  
    +We must compute the expected value \(E[I]\).
    +
    +--------------------------------------------------------------------
    +
    +**2.  The three kinds of interior intersections**
    +
    +* the two diameters intersect once (deterministically);
    +* a random chord can intersect each of the two diameters;
    +* two random chords can intersect one another.
    +
    +So  
    +
    +\[
    +E[I]=1+E[\text{chord–diameter intersections}]
    +      +E[\text{chord–chord intersections}].
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**3.  Probability that a random chord meets a given diameter**
    +
    +The two endpoints of a chord are chosen uniformly on the circle but must lie in *different* quadrants.
    +There are \(\binom{4}{2}=6\) unordered pairs of quadrants, all equally likely.
    +
    +A chord meets the horizontal diameter iff its endpoints lie in opposite
    +half‑planes (one in the upper half, one in the lower half).  
    +Among the six unordered pairs, the four pairs  
    +\(\{Q_1,Q_3\},\{Q_1,Q_4\},\{Q_2,Q_3\},\{Q_2,Q_4\}\) have this property, so
    +
    +\[
    +P(\text{chord meets a given diameter})=\frac{4}{6}= \frac23 .
    +\]
    +
    +The same holds for the vertical diameter.  
    +Thus a single random chord contributes on average
    +
    +\[
    +2\cdot\frac23=\frac43
    +\]
    +
    +intersections with the two diameters.  
    +
    +For the 25 chords
    +
    +\[
    +E[\text{chord–diameter intersections}]
    +      =25\cdot\frac43=\frac{100}{3}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**4.  Distribution of a chord’s quadrant pair**
    +
    +Let a chord be called  
    +
    +* **adjacent** if it joins two adjacent quadrants (four such unordered pairs);
    +* **opposite** if it joins opposite quadrants (two such unordered pairs).
    +
    +\[
    +P(\text{adjacent})=\frac{4}{6}= \frac23,\qquad 
    +P(\text{opposite})=\frac{2}{6}= \frac13 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**5.  Probability that two random chords intersect**
    +
    +Pick two chords independently.  Let their unordered quadrant pairs be \(S\) and
    +\(T\).  There are three possibilities for the relationship between \(S\) and \(T\).
    +
    +| Relation of \(S,T\) | Probability | Intersection probability |
    +|----------------------|-------------|---------------------------|
    +| **identical** (\(S=T\)) | \(\displaystyle\frac16\) | \(\displaystyle\frac12\) |
    +| **share exactly one quadrant** | \(\displaystyle\frac{2}{3}\) | \(\displaystyle\frac12\) |
    +| **disjoint** (complementary sets) | \(\displaystyle\frac16\) | \(\displaystyle\frac13\) |
    +
    +*Proof of the numbers*  
    +
    +*Identical*: both chords lie in the same two intervals, say \([0,1)\) and \([1,2)\).  
    +If the endpoints are \(A\in[0,1),B\in[1,2)\) and \(C\in[0,1),D\in[1,2)\),
    +the chords intersect iff exactly one of \(C,D\) lies on the clockwise arc from
    +\(A\) to \(B\).  A short calculation gives probability \(1/2\).
    +
    +*Share one quadrant*: suppose the common quadrant is \([0,1)\) and the other
    +endpoints are in \([1,2)\) and \([2,3)\) (or \([3,4)\)).  The second endpoint
    +never lies on the clockwise arc from the first endpoint to its partner, so the
    +chords intersect iff the other point in the common quadrant lies on that arc,
    +which happens with probability \(1/2\).
    +
    +*Disjoint*: the only way for two disjoint pairs to intersect is when both are
    +opposite pairs (e.g. \(\{0,2\}\) and \(\{1,3\}\)); then the order of the four
    +points around the circle is forced to be alternating, so the chords always
    +intersect.  This occurs for one‑third of the disjoint cases, hence conditional
    +probability \(1/3\).
    +
    +Putting the three cases together,
    +
    +\[
    +P(\text{two chords intersect})=
    +\frac16\!\left(\frac12\right)+\frac23\!\left(\frac12\right)+\frac16\!\left(\frac13\right)
    +      =\frac{17}{36}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**6.  Expected chord–chord intersections**
    +
    +There are \(\binom{25}{2}=300\) unordered pairs of the 25 chords, so
    +
    +\[
    +E[\text{chord–chord intersections}]
    +      =300\cdot\frac{17}{36}= \frac{425}{3}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**7.  Total expected interior intersections**
    +
    +\[
    +E[I]=1\;(\text{diameters})+\frac{100}{3}\;(\text{chord–diameter})
    +      +\frac{425}{3}\;(\text{chord–chord})
    +      =\frac{525}{3}+1 =176 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**8.  Expected number of regions**
    +
    +Finally
    +
    +\[
    +E[R]=1+(\text{#segments})+E[I]
    +     =1+27+176 = 204 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{204}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 204

    +

    Extracted Answer: 204

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $ n $ values of $ x $ in the interval $ 0 < x < 2\pi $ where $ f(x) = \sin(7\pi \cdot \sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +f(x)=\sin\!\bigl(7\pi\sin 5x\bigr)
    +\qquad (0<x<2\pi)
    +\]
    +
    +---
    +
    +### 1.  Zeros of \(f\)
    +
    +\(f(x)=0\) when  
    +
    +\[
    +\sin\bigl(7\pi\sin 5x\bigr)=0
    +\Longrightarrow 7\pi\sin 5x=k\pi \;(k\in\mathbb Z)
    +\Longrightarrow \sin 5x=\frac{k}{7}.
    +\]
    +
    +Since \(|\sin5x|\le1\), we must have \(k=-7,-6,\ldots,6,7\) – 15 possible integers.
    +
    +Put \(y=5x\).  
    +Then \(y\in(0,10\pi)\) and we need the number of solutions of  
    +
    +\[
    +\sin y = \frac{k}{7}\qquad (k=-7,\dots ,7).
    +\]
    +
    +*For \(|k|<7,\;k\neq0\):* \(\frac{k}{7}\in(-1,1)\setminus\{0\}\).  
    +In each interval of length \(2\pi\) there are two solutions, and \((0,10\pi)\) contains exactly five such periods.  
    +Hence each of the 12 values \(k=\pm1,\pm2,\dots ,\pm6\) yields **10** solutions.
    +
    +*For \(k=0\):* \(\sin y=0\Rightarrow y=m\pi\).  
    +With \(0<y<10\pi\) we have \(m=1,2,\dots ,9\) → **9** solutions.
    +
    +*For \(k=7\):* \(\sin y=1\Rightarrow y=\frac{\pi}{2}+2\pi n\).  
    +\(0<y<10\pi\) gives \(n=0,1,2,3,4\) → **5** solutions.
    +
    +*For \(k=-7\):* \(\sin y=-1\Rightarrow y=\frac{3\pi}{2}+2\pi n\).  
    +Again \(n=0,1,2,3,4\) → **5** solutions.
    +
    +Adding them,
    +
    +\[
    +n=5+5+9+12\cdot10=139 .
    +\]
    +
    +Thus there are \(n=139\) zeros of \(f\) in \((0,2\pi)\).
    +
    +---
    +
    +### 2.  Where the graph is tangent to the \(x\)-axis
    +
    +\(f\) is tangent to the \(x\)-axis at a zero when also \(f'(x)=0\).
    +
    +\[
    +f'(x)=35\pi\cos 5x\;\cos\bigl(7\pi\sin5x\bigr).
    +\]
    +
    +At a zero \(\sin5x=k/7\) we have \(\cos\bigl(7\pi\sin5x\bigr)=\cos(k\pi)=(-1)^k\neq0\).  
    +Hence \(f'(x)=0\iff \cos5x=0\).
    +
    +\(\cos5x=0\) implies \(\sin5x=\pm1\); therefore \(k=\pm7\).
    +
    +Thus tangency occurs exactly at the solutions found for \(k=7\) and \(k=-7\).
    +
    +- For \(k=7\): 5 solutions.
    +- For \(k=-7\): 5 solutions.
    +
    +Hence  
    +
    +\[
    +t=5+5=10.
    +\]
    +
    +---
    +
    +### 3.  Required sum
    +
    +\[
    +n+t = 139+10 = 149.
    +\]
    +
    +\[
    +\boxed{149}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 149

    +

    Extracted Answer: 149

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The numbers  
    +
    +\[
    +17_b = 1\cdot b + 7 = b+7 ,\qquad 
    +97_b = 9\cdot b + 7 .
    +\]
    +
    +We need  
    +
    +\[
    +b+7 \mid 9b+7 .
    +\]
    +
    +Let  
    +
    +\[
    +d=b+7 \quad\Longrightarrow\quad b=d-7 .
    +\]
    +
    +Then  
    +
    +\[
    +9b+7 = 9(d-7)+7 = 9d-56 .
    +\]
    +
    +Thus  
    +
    +\[
    +d \mid 9d-56 \;\Longleftrightarrow\; d \mid 56 .
    +\]
    +
    +Hence \(d\) must be a positive divisor of \(56\).  
    +Since the base must satisfy \(b>9\), we have \(d=b+7>9+7=16\).  
    +The divisors of \(56\) larger than \(16\) are \(28\) and \(56\).
    +
    +\[
    +\begin{aligned}
    +d=28 &\implies b=28-7=21,\\
    +d=56 &\implies b=56-7=49.
    +\end{aligned}
    +\]
    +
    +Both \(b=21\) and \(b=49\) satisfy the original divisibility:
    +
    +\[
    +\begin{aligned}
    +b=21: &\quad 17_{21}=28,\; 97_{21}=196,\; 196/28=7,\\
    +b=49: &\quad 17_{49}=56,\; 97_{49}=448,\; 448/56=8 .
    +\end{aligned}
    +\]
    +
    +Thus the integer bases greater than \(9\) that work are \(21\) and \(49\).
    +
    +The required sum is  
    +
    +\[
    +21+49 = 70 .
    +\]
    +
    +\[
    +\boxed{70}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 70

    +

    Extracted Answer: 70

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +c=\text{# who chose chocolate},\qquad 
    +v=\text{# who chose vanilla},\qquad 
    +s=\text{# who chose strawberry}.
    +\]
    +
    +The conditions give  
    +
    +\[
    +c+v+s=9,\qquad c>v>s\ge 1 .
    +\]
    +
    +Thus \((c,v,s)\) must be three distinct positive integers whose sum is \(9\).
    +The possible triples are  
    +
    +\[
    +(6,2,1),\qquad (5,3,1),\qquad (4,3,2).
    +\]
    +
    +For a fixed triple \((c,v,s)\) the number of assignments of flavors to the 9 distinct players is the multinomial coefficient  
    +
    +\[
    +\frac{9!}{c!\,v!\,s!}.
    +\]
    +
    +Compute each term:
    +
    +\[
    +\begin{aligned}
    +(6,2,1):\;&\frac{9!}{6!\,2!\,1!}= \frac{362880}{720\cdot 2}=252,\\[4pt]
    +(5,3,1):\;&\frac{9!}{5!\,3!\,1!}= \frac{362880}{120\cdot 6}=504,\\[4pt]
    +(4,3,2):\;&\frac{9!}{4!\,3!\,2!}= \frac{362880}{24\cdot 6\cdot 2}=1260.
    +\end{aligned}
    +\]
    +
    +Add them:
    +
    +\[
    +N = 252+504+1260 = 2016.
    +\]
    +
    +We need \(N \pmod{1000}\):
    +
    +\[
    +2016 \equiv 16 \pmod{1000}.
    +\]
    +
    +\[
    +\boxed{16}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 16

    +

    Extracted Answer: 16

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Sixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let a chair be occupied by a person be denoted by \(1\) and an empty chair by \(0\).
    +The condition *“no person sits next to two other people”* means that a
    +\(1\) cannot have \(1\)’s on both sides; equivalently a binary string of
    +length \(16\) may not contain the block \(111\).
    +
    +We must count the binary strings of length \(16\) that contain exactly
    +\(8\) ones and no occurrence of three consecutive ones.
    +
    +--------------------------------------------------------------------
    +### 1.  Decompose the ones into blocks
    +
    +Because a block of three 1’s is forbidden, the ones can only appear in
    +blocks of length \(1\) or \(2\).
    +
    +Let  
    +
    +* \(b\) = number of blocks of length \(2\) (doubletons)  
    +* \(a\) = number of blocks of length \(1\) (singletons)
    +
    +Then  
    +
    +\[
    +a+2b=8 ,\qquad a,b\ge 0 .
    +\]
    +
    +Hence \(a\) must be even and the possible pairs \((a,b)\) are  
    +
    +\[
    +\begin{array}{c|c|c}
    +b & a & B=a+b\\\hline
    +0 & 8 & 8\\
    +1 & 6 & 7\\
    +2 & 4 & 6\\
    +3 & 2 & 5\\
    +4 & 0 & 4
    +\end{array}
    +\]
    +
    +where \(B=a+b\) is the total number of blocks of 1’s.
    +
    +--------------------------------------------------------------------
    +### 2.  Order of the blocks
    +
    +For a fixed \(b\) (hence fixed \(B\)), we must decide which of the \(B\)
    +blocks are doubletons.  This can be done in  
    +
    +\[
    +\binom{B}{b}
    +\]
    +
    +ways.
    +
    +--------------------------------------------------------------------
    +### 3.  Distribution of the zeros
    +
    +There are \(8\) zeros in total (because \(16-8=8\)).  
    +Between any two consecutive blocks there must be at least one zero.
    +Thus the \(B-1\) internal gaps already consume \(B-1\) zeros, leaving
    +
    +\[
    +8-(B-1)=9-B
    +\]
    +
    +zeros to be placed freely among the \(B+1\) gaps (the two ends and the
    +\(B-1\) internal gaps).  By stars‑and‑bars this can be done in
    +
    +\[
    +\binom{(9-B)+(B+1)-1}{B}= \binom{9}{B}
    +\]
    +
    +ways.
    +
    +--------------------------------------------------------------------
    +### 4.  Count for each \(b\)
    +
    +For each \(b\) we multiply the two factors:
    +
    +\[
    +\begin{array}{c|c|c|c}
    +b & B=8-b & \binom{B}{b} & \binom{9}{B} \\ \hline
    +0 & 8 & \binom{8}{0}=1 & \binom{9}{8}=9\\
    +1 & 7 & \binom{7}{1}=7 & \binom{9}{7}=36\\
    +2 & 6 & \binom{6}{2}=15& \binom{9}{6}=84\\
    +3 & 5 & \binom{5}{3}=10& \binom{9}{5}=126\\
    +4 & 4 & \binom{4}{4}=1 & \binom{9}{4}=126
    +\end{array}
    +\]
    +
    +Multiplying and summing:
    +
    +\[
    +\begin{aligned}
    +N &= 1\cdot9 + 7\cdot36 + 15\cdot84 + 10\cdot126 + 1\cdot126\\
    +  &= 9 + 252 + 1260 + 1260 + 126\\
    +  &= 2907.
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Modulo \(1000\)
    +
    +\[
    +N \equiv 2907 \pmod{1000}\equiv 907.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{907}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 907

    +

    Extracted Answer: 907

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +12x^{2}-xy-6y^{2}=0
    +\]
    +
    +Factor the quadratic form:
    +
    +\[
    +12x^{2}-xy-6y^{2}
    +=(3x+2y)(4x-3y)
    +\]
    +
    +Hence a solution must satisfy one of the two linear equations  
    +
    +\[
    +\begin{cases}
    +3x+2y=0\quad\Longrightarrow\quad x=-\dfrac23\,y\\[4pt]
    +4x-3y=0\quad\Longrightarrow\quad x=\dfrac34\,y
    +\end{cases}
    +\]
    +
    +---
    +
    +### 1.  Solutions of \(4x-3y=0\)
    +
    +Write \(y=4k\) (\(k\in\mathbb Z\)). Then  
    +
    +\[
    +x=\frac34y=3k .
    +\]
    +
    +Thus the points are \((x,y)=(3k,4k)\).  
    +Both coordinates must lie in \([-100,100]\):
    +
    +\[
    +-100\le 4k\le100 \;\Longrightarrow\; -25\le k\le 25, 
    +\qquad -100\le 3k\le100\; \text{(automatically true)} .
    +\]
    +
    +Hence there are  
    +
    +\[
    +25-(-25)+1 = 51
    +\]
    +
    +integer pairs on this line.
    +
    +---
    +
    +### 2.  Solutions of \(3x+2y=0\)
    +
    +Write \(x=2m\) (\(m\in\mathbb Z\)). Then  
    +
    +\[
    +y=-\frac32x=-3m .
    +\]
    +
    +Thus the points are \((x,y)=(2m,-3m)\).  
    +Require \(-100\le2m\le100\) and \(-100\le -3m\le100\):
    +
    +\[
    +-50\le m\le 50,\qquad -\frac{100}{3}\le m\le\frac{100}{3}
    +\;\Longrightarrow\; -33\le m\le 33 .
    +\]
    +
    +So we obtain  
    +
    +\[
    +33-(-33)+1 = 67
    +\]
    +
    +integer pairs on this line.
    +
    +---
    +
    +### 3.  Remove the double‑counted point
    +
    +Both families contain the point \((0,0)\).  
    +It has been counted twice, so subtract one.
    +
    +\[
    +\text{Total}=51+67-1 = 117 .
    +\]
    +
    +\[
    +\boxed{117}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 117

    +

    Extracted Answer: 117

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ \triangle ABC $ be a right triangle with $ \angle A = 90^\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \sqrt{3} $ for some positive integer $ n $. Find $ n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +A=(0,0),\qquad B=(p,0),\qquad C=(0,q)
    +\]
    +
    +with \(\angle A=90^{\circ}\).  
    +Because \(BC=38\),
    +
    +\[
    +p^{2}+q^{2}=38^{2}=1444. \tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Coordinates of \(K\) and \(L\)
    +
    +\(K\) is \(14\) from \(A\) and from \(B\); therefore it lies on the perpendicular bisector of \(\overline{AB}\):
    +\[
    +K=\Bigl(\frac p2,\ \sqrt{14^{2}-\Bigl(\frac p2\Bigr)^{2}}\Bigr)
    +   =\bigl(a,\; \sqrt{196-a^{2}}\bigr),\qquad a=\frac p2 .
    +\]
    +
    +Similarly \(L\) is \(14\) from \(A\) and from \(C\); thus  
    +
    +\[
    +L=\Bigl(\sqrt{14^{2}-\Bigl(\frac q2\Bigr)^{2}},\ \frac q2\Bigr)
    +   =\bigl(\sqrt{196-b^{2}},\; b\bigr),\qquad b=\frac q2 .
    +\]
    +
    +Since \(K\) and \(L\) are also \(14\) apart,
    +\[
    +(a-\sqrt{196-b^{2}})^{2}+(\sqrt{196-a^{2}}-b)^{2}=14^{2}=196 .
    +\]
    +
    +Expanding gives  
    +
    +\[
    +a\sqrt{196-b^{2}}+b\sqrt{196-a^{2}}=98. \tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Solving for \(a\) and \(b\)
    +
    +From (1),
    +
    +\[
    +p^{2}+q^{2}=4a^{2}+4b^{2}=1444 \Longrightarrow a^{2}+b^{2}=361. \tag{3}
    +\]
    +
    +Let \(X=a^{2},\;Y=b^{2}\).  Then \(X+Y=361\).  
    +Square (2) and use \(u^{2}=196-b^{2}=196-Y,\;v^{2}=196-a^{2}=196-X\):
    +
    +\[
    +X(196-Y)+Y(196-X)+2ab\sqrt{(196-X)(196-Y)}=9604.
    +\]
    +
    +Using \(ab=\sqrt{XY}\) and (3) simplifies to  
    +
    +\[
    +XY(196-X)(196-Y)=(XY-30576)^{2}.
    +\]
    +
    +Because \(196-X=196-a^{2}=196-X\) etc., after substitution and using \(X+Y=361\) we obtain  
    +
    +\[
    +XY\bigl(-32340+XY\bigr)=(XY-30576)^{2},
    +\]
    +
    +which yields  
    +
    +\[
    +XY=32448.
    +\]
    +
    +Hence  
    +
    +\[
    +X+Y=361,\qquad XY=32448.
    +\]
    +
    +The quadratic \(t^{2}-361t+32448=0\) gives  
    +
    +\[
    +t=\frac{361\pm23}{2} \Longrightarrow \{X,Y\}=\{192,169\}.
    +\]
    +
    +Thus  
    +
    +\[
    +a^{2}=192,\;b^{2}=169\qquad\text{or}\qquad a^{2}=169,\;b^{2}=192.
    +\]
    +
    +Taking \(a^{2}=192\) (the other case is symmetric),
    +
    +\[
    +a=8\sqrt3,\qquad b=13.
    +\]
    +
    +Therefore  
    +
    +\[
    +AB=2a=16\sqrt3,\qquad AC=2b=26,
    +\]
    +
    +and indeed \(AB^{2}+AC^{2}= (16\sqrt3)^{2}+26^{2}=768+676=1444=38^{2}\).
    +
    +--------------------------------------------------------------------
    +### 3.  Coordinates of the relevant points
    +
    +\[
    +\begin{aligned}
    +B&=(16\sqrt3,0),\\
    +K&=\Bigl(8\sqrt3,\ \sqrt{196-192}\Bigr)=\bigl(8\sqrt3,2\bigr),\\
    +L&=\Bigl(\sqrt{196-169},\ 13\Bigr)=\bigl(3\sqrt3,13\bigr),\\
    +C&=(0,26).
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Area of \(BKLC\)
    +
    +Using the shoelace formula for the polygon \(B\to K\to L\to C\),
    +
    +\[
    +\begin{aligned}
    +\sum x_i y_{i+1}&= (16\sqrt3)(2)+(8\sqrt3)(13)+(3\sqrt3)(26)+0=214\sqrt3,\\
    +\sum y_i x_{i+1}&=0+(2)(3\sqrt3)+0+(26)(16\sqrt3)=422\sqrt3.
    +\end{aligned}
    +\]
    +
    +Hence  
    +
    +\[
    +\operatorname{Area}= \frac12\bigl|214\sqrt3-422\sqrt3\bigr|
    +                 =\frac12\,(208\sqrt3)=104\sqrt3.
    +\]
    +
    +--------------------------------------------------------------------
    +Thus the area of quadrilateral \(BKLC\) is \(104\sqrt3\), so  
    +
    +\[
    +\boxed{104}
    +\] is the required integer \(n\).
    +
    +
    +

    Results

    +

    Correct Answer: 104

    +

    Extracted Answer: 104

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +An isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \neq s$. Find $r^{2}+s^{2}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the trapezoid have parallel sides (bases) \(r\) and \(s\) \((r\neq s)\) and equal legs of length \(L\).
    +
    +---
    +
    +### 1.  Tangential condition  
    +
    +A quadrilateral has an incircle iff the sums of the lengths of opposite sides are equal.  
    +For the order of sides \(r,\,L,\,s,\,L\),
    +
    +\[
    +r+s = L+L \qquad\Longrightarrow\qquad L =\frac{r+s}{2}.
    +\tag{1}
    +\]
    +
    +---
    +
    +### 2.  Use the given area  
    +
    +For any tangential quadrilateral,  
    +
    +\[
    +\text{Area}=r_{\text{in}}\cdot s,
    +\]
    +
    +where \(r_{\text{in}}\) is the inradius and \(s\) is the semiperimeter.  
    +Here the inradius is \(3\) and the area is \(72\):
    +
    +\[
    +72 = 3\,s\quad\Longrightarrow\quad s = 24 .
    +\]
    +
    +The semiperimeter \(s\) is
    +
    +\[
    +s = \frac{r+s+2L}{2}=r+s \quad\Longrightarrow\quad r+s = 24. \tag{2}
    +\]
    +
    +Hence from (1),
    +
    +\[
    +L = \frac{r+s}{2}=12 .
    +\]
    +
    +---
    +
    +### 3.  Height of the trapezoid  
    +
    +The incircle touches both parallel sides, so the distance between them (the height \(h\)) equals the diameter of the incircle:
    +
    +\[
    +h = 2\cdot 3 = 6 .
    +\tag{3}
    +\]
    +
    +---
    +
    +### 4.  Relate the legs to the bases  
    +
    +Because the trapezoid is isosceles, each leg forms a right triangle with vertical leg \(h\) and horizontal leg \(\dfrac{|r-s|}{2}\):
    +
    +\[
    +L^{2}=h^{2}+\Bigl(\frac{r-s}{2}\Bigr)^{2}.
    +\]
    +
    +Insert \(L=12\) and \(h=6\):
    +
    +\[
    +12^{2}=6^{2}+\Bigl(\frac{r-s}{2}\Bigr)^{2}
    +\Longrightarrow\;144=36+\frac{(r-s)^{2}}{4}
    +\Longrightarrow\;(r-s)^{2}=432.
    +\]
    +
    +Thus  
    +
    +\[
    +|r-s|=12\sqrt3. \tag{4}
    +\]
    +
    +---
    +
    +### 5.  Solve for \(r\) and \(s\)
    +
    +From (2) and (4),
    +
    +\[
    +\begin{cases}
    +r+s=24,\\[2pt]
    +r-s=12\sqrt3 \quad(\text{take }r>s).
    +\end{cases}
    +\]
    +
    +Hence  
    +
    +\[
    +r = 12+6\sqrt3,\qquad s = 12-6\sqrt3 .
    +\]
    +
    +(If the roles of \(r\) and \(s\) are exchanged, the same values for \(r^{2}+s^{2}\) result.)
    +
    +---
    +
    +### 6.  Compute \(r^{2}+s^{2}\)
    +
    +\[
    +\begin{aligned}
    +r^{2}+s^{2}&=(12+6\sqrt3)^{2}+(12-6\sqrt3)^{2}\\
    +&= \bigl(144+144\sqrt3+108\bigr)+\bigl(144-144\sqrt3+108\bigr)\\
    +&= 252+144\sqrt3+252-144\sqrt3\\
    +&= 504.
    +\end{aligned}
    +\]
    +
    +---
    +
    +\[
    +\boxed{504}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 504

    +

    Extracted Answer: 504

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\sqrt{-1}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The first equation  
    +
    +\[
    +|25+20i-z|=5
    +\]
    +
    +is the circle  
    +
    +\[
    +C:\;(x-25)^2+(y-20)^2=5^{2}
    +\]
    +
    +center \(C=(25,20)\), radius \(5\).
    +
    +The second equation  
    +
    +\[
    +|z-4-k| = |z-3i-k|
    +\]
    +
    +says that the point \(z\) is equally distant from  
    +
    +\[
    +A=4+k\;(= (4+k,0)) ,\qquad B=3i+k\;(= (k,3)).
    +\]
    +
    +Hence the set of points satisfying the second condition is the **perpendicular bisector** of the segment \(AB\).
    +
    +---
    +
    +### 1. Equation of the perpendicular bisector  
    +
    +Midpoint of \(AB\):
    +
    +\[
    +M=\Bigl(\frac{4+k+k}{2},\,\frac{0+3}{2}\Bigr)=\Bigl(k+2,\frac32\Bigr).
    +\]
    +
    +Slope of \(AB\):
    +
    +\[
    +\frac{3-0}{k-(4+k)} =\frac{3}{-4}= -\frac34 .
    +\]
    +
    +Therefore the slope of the perpendicular bisector is the negative reciprocal:
    +
    +\[
    +m_{\perp}= \frac{4}{3}.
    +\]
    +
    +Through \(M\) the line is  
    +
    +\[
    +y-\frac32 = \frac{4}{3}\bigl(x-(k+2)\bigr).
    +\]
    +
    +Multiplying by \(3\) and simplifying gives the standard form  
    +
    +\[
    +8x-6y-(8k+7)=0.
    +\]
    +
    +---
    +
    +### 2. Tangency condition  
    +
    +The distance from the centre \(C=(25,20)\) to this line must equal the radius \(5\) for the circle and the line to intersect in **exactly one point** (tangency).
    +
    +\[
    +d=\frac{|\,8\cdot25-6\cdot20-(8k+7)\,|}{\sqrt{8^{2}+(-6)^{2}}}
    +   =\frac{|\,200-120-8k-7\,|}{10}
    +   =\frac{|\,73-8k\,|}{10}.
    +\]
    +
    +Set \(d=5\):
    +
    +\[
    +\frac{|73-8k|}{10}=5\quad\Longrightarrow\quad |73-8k|=50.
    +\]
    +
    +Hence  
    +
    +\[
    +73-8k = 50\quad\text{or}\quad73-8k = -50.
    +\]
    +
    +Solving,
    +
    +\[
    +\begin{cases}
    +73-8k=50 &\Longrightarrow\; k=\dfrac{23}{8},\\[4pt]
    +73-8k=-50&\Longrightarrow\; k=\dfrac{123}{8}.
    +\end{cases}
    +\]
    +
    +Both values give a line tangent to the circle, so the system has exactly one solution for each.
    +
    +---
    +
    +### 3. Sum of all possible \(k\)
    +
    +\[
    +k_{1}+k_{2}= \frac{23}{8}+\frac{123}{8}= \frac{146}{8}= \frac{73}{4}.
    +\]
    +
    +Write \(\frac{73}{4}\) as \(\frac{m}{n}\) with \(\gcd(m,n)=1\); here \(m=73,\ n=4\).
    +
    +\[
    +m+n = 73+4 = 77.
    +\]
    +
    +\[
    +\boxed{77}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 77

    +

    Extracted Answer: 77

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For an 8‑digit number  
    +\[
    +a_1a_2a_3a_4a_5a_6a_7a_8,
    +\qquad a_i\in\{1,2,\dots ,8\},
    +\]
    +using each digit once, we need it to be divisible by \(22 = 2\cdot 11\).
    +
    +---
    +
    +### 1.  Divisibility by 2  
    +
    +The last digit \(a_8\) must be even.  
    +The even digits are \(\{2,4,6,8\}\).
    +
    +---
    +
    +### 2.  Divisibility by 11  
    +
    +For an 8‑digit number the test is  
    +
    +\[
    +(a_1+a_3+a_5+a_7)-(a_2+a_4+a_6+a_8)\equiv0\pmod{11}.
    +\]
    +
    +Let  
    +
    +\[
    +S_o=a_1+a_3+a_5+a_7,\qquad S_e=a_2+a_4+a_6+a_8.
    +\]
    +
    +Since the digits \(1,\ldots ,8\) are used exactly once,
    +\(S_o+S_e=1+2+\cdots+8=36\).  
    +Hence  
    +
    +\[
    +S_o-S_e\equiv0\pmod{11}
    +\Longrightarrow 2S_o\equiv36\pmod{11}
    +\Longrightarrow 2S_o\equiv3\pmod{11}.
    +\]
    +
    +Because \(2^{-1}\equiv6\pmod{11}\),  
    +
    +\[
    +S_o\equiv3\cdot6\equiv18\equiv7\pmod{11}.
    +\]
    +
    +The smallest possible sum of four distinct digits is \(1+2+3+4=10\) and the largest is \(5+6+7+8=26\); the only value in this interval congruent to \(7\pmod{11}\) is \(18\).  
    +Thus we require  
    +
    +\[
    +S_o=S_e=18.
    +\]
    +
    +So the four digits placed in the odd positions must sum to \(18\).
    +
    +---
    +
    +### 3.  Choosing the digits for odd positions  
    +
    +We need 4‑element subsets of \(\{1,\dots ,8\}\) whose sum is \(18\).
    +
    +Enumerating them gives  
    +
    +\[
    +\begin{aligned}
    +&\{1,2,7,8\},\; \{1,3,6,8\},\; \{1,4,5,8\},\; \{1,4,6,7\},\\
    +&\{2,3,5,8\},\; \{2,3,6,7\},\; \{2,4,5,7\},\; \{3,4,5,6\}.
    +\end{aligned}
    +\]
    +
    +There are \(m=8\) such subsets.  
    +Each contains exactly two even digits and two odd digits (otherwise the sum cannot be 18).
    +
    +---
    +
    +### 4.  Forming the numbers  
    +
    +For a given subset \(O\) (odd‑position digits):
    +
    +* Arrange the four digits of \(O\) among the odd positions \((1,3,5,7)\): \(4! = 24\) ways.
    +* The complement \(E\) (the even‑position digits) also has exactly two evens.
    +  * Choose which even digit of \(E\) occupies the last position \(a_8\): \(2\) ways.
    +  * Arrange the remaining three digits of \(E\) in positions \(2,4,6\): \(3! = 6\) ways.
    +
    +Thus for each subset \(O\)
    +
    +\[
    +\text{#numbers}=24\cdot(2\cdot 6)=24\cdot12=288 .
    +\]
    +
    +Since there are \(8\) possible subsets,
    +
    +\[
    +N = 8\cdot288 = 2304 .
    +\]
    +
    +---
    +
    +### 5.  Required difference  
    +
    +\[
    +N-2025 = 2304-2025 = 279 .
    +\]
    +
    +\[
    +\boxed{279}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 279

    +

    Extracted Answer: 279

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the twelve letters be  
    +
    +\[
    +A<B<C<D<E<F<G<H<I<J<K<L .
    +\]
    +
    +A random perfect matching of the twelve letters is chosen.
    +For each pair \(\{x,y\}\) we write the two letters in alphabetical order,
    +obtaining the word \(xy\;(x<y)\).
    +Sorting the six words alphabetically gives a list whose last word is the
    +lexicographically greatest.
    +
    +--------------------------------------------------------------------
    +### 1.  What is the last word?
    +
    +For a word \(xy\) the first letter is the smaller element of its pair.
    +Since the six first letters are distinct, the last word is the word whose
    +pair has the **largest** smaller element.
    +Denote by  
    +
    +\[
    +s(P)=\min(P) \qquad\text{for a pair }P.
    +\]
    +
    +If the pairs are \(P_1,\dots ,P_6\), the last word comes from the pair  
    +
    +\[
    +P_{\max} \text{ with } s(P_{\max})=\max\{s(P_1),\dots ,s(P_6)\}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Condition for the last word to contain \(G\)
    +
    +Let the partner of \(G\) be a letter \(Y\neq G\).
    +Write  
    +
    +\[
    +s_G=\min(G,Y).
    +\]
    +
    +The last word contains \(G\) **iff** the smallest element of the pair that
    +contains \(G\) is the largest among all six minima, i.e.
    +
    +\[
    +s_G=\max\{s(P_1),\dots ,s(P_6)\}.
    +\tag{1}
    +\]
    +
    +Thus we have to find the probability that condition (1) holds.
    +
    +--------------------------------------------------------------------
    +### 3.  Conditioning on the partner of \(G\)
    +
    +In a random perfect matching the partner of a fixed letter is uniform
    +among the other eleven letters, so we may condition on the value of
    +\(Y\).
    +
    +*If \(Y>G\)* (i.e. \(Y\in\{H,I,J,K,L\}\)):  
    +\(s_G=G\).  Condition (1) becomes “no other pair has both letters
    +greater than \(G\)”, because any such pair would have a minimum exceeding \(G\).
    +
    +After removing \(G\) and \(Y\) we have  
    +
    +- six letters \(<G\) : \(A,B,C,D,E,F\);
    +- four letters \(>G\) : the remaining four of \(\{H,I,J,K,L\}\).
    +
    +We must pair each of the four “high’’ letters with a distinct “low’’
    +letter; the two unused low letters are then paired together.
    +
    +Number of such matchings  
    +
    +\[
    +\binom{6}{4}\,4!=15\cdot 24=360 .
    +\]
    +
    +The total number of matchings on the ten remaining letters is  
    +
    +\[
    +(10-1)!!=9\cdot7\cdot5\cdot3\cdot1=945 .
    +\]
    +
    +Hence  
    +
    +\[
    +\Pr(\text{condition }|\,Y>G)=\frac{360}{945}=\frac{8}{21}.
    +\tag{2}
    +\]
    +
    +There are five possibilities for \(Y>G\).
    +
    +--------------------------------------------------------------------
    +*If \(Y<G\)* (i.e. \(Y\in\{A,B,C,D,E,F\}\)):  
    +Now \(s_G=Y\).  Condition (1) says that every other pair must have a
    +minimum **less than \(Y\)**, i.e. no pair may consist solely of letters
    +greater than \(Y\).
    +
    +Let the rank of \(Y\) be \(y\;(1\le y\le 6)\).  
    +Among the ten remaining letters we have  
    +
    +- \(y-1\) letters \(<Y\);
    +- \(11-y\) letters \(>Y\) (the letters greater than \(Y\) except the removed
    +\(G\)).
    +
    +For the condition to be possible we need at least as many letters
    +\(<Y\) as letters \(>Y\); this occurs only when \(y=6\), i.e. \(Y=F\).
    +
    +When \(Y=F\) the remaining letters are  
    +
    +- five letters \(<F\): \(A,B,C,D,E\);
    +- five letters \(>F\): \(H,I,J,K,L\).
    +
    +Again every “high’’ letter must be paired with a distinct “low’’ letter,
    +giving exactly  
    +
    +\[
    +5! =120
    +\]
    +
    +acceptable matchings.  Therefore  
    +
    +\[
    +\Pr(\text{condition }|\,Y=F)=\frac{120}{945}= \frac{8}{63},
    +\tag{3}
    +\]
    +
    +and for \(Y=A,B,C,D,E\) the probability is \(0\).
    +
    +--------------------------------------------------------------------
    +### 4.  Overall probability
    +
    +Using that the partner of \(G\) is uniformly one of the other eleven
    +letters,
    +
    +\[
    +\begin{aligned}
    +\Pr(\text{last word contains }G)
    +&=\frac1{11}\Bigl(
    +5\cdot\frac{8}{21}
    ++\frac{8}{63}
    ++0+0+0+0+0\Bigr)\\[2mm]
    +&=\frac1{11}\Bigl(\frac{40}{21}+\frac{8}{63}\Bigr)
    +   =\frac1{11}\Bigl(\frac{120}{63}+\frac{8}{63}\Bigr)\\[2mm]
    +&=\frac{128}{693}.
    +\end{aligned}
    +\]
    +
    +The fraction \(\frac{128}{693}\) is already in lowest terms
    +(\(\gcd(128,693)=1\)).
    +
    +Thus  
    +
    +\[
    +m=128,\qquad n=693,\qquad m+n=821.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{821}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 821

    +

    Extracted Answer: 821

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The parabola with equation $y=x^{2}-4$ is rotated $60^{\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\frac{a-\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +C:\;y=x^{2}-4
    +\]
    +
    +be the given parabola.  
    +Rotate \(C\) \(60^{\circ}\) counter‑clockwise about the origin.  
    +If a point \((x,y)\) lies on both \(C\) and its rotated image, then rotating \((x,y)\) **clockwise** by \(60^{\circ}\) must again land on \(C\).
    +
    +---
    +
    +### 1.  The rotation equations  
    +
    +For a clockwise rotation of \(60^{\circ}\),
    +
    +\[
    +\begin{aligned}
    +x'&=x\cos60^{\circ}+y\sin60^{\circ}= \tfrac12 x+\tfrac{\sqrt3}{2}y,\\[2mm]
    +y'&=-x\sin60^{\circ}+y\cos60^{\circ}= -\tfrac{\sqrt3}{2}x+\tfrac12 y .
    +\end{aligned}
    +\]
    +
    +The condition “the rotated point lies on \(C\)” is
    +
    +\[
    +y'=(x')^{2}-4 .
    +\]
    +
    +Substituting \(y=x^{2}-4\) (since \((x,y)\in C\)) gives a single equation in \(x\).
    +
    +---
    +
    +### 2.  Obtain the equation in \(x\)
    +
    +Put \(\displaystyle s=\frac{\sqrt3}{2},\ c=\frac12\).  
    +Then
    +
    +\[
    +\begin{aligned}
    +x' &=c\,x+s\,(x^{2}-4)= s x^{2}+c x-4s,\\[1mm]
    +y' &=-s\,x+c\,(x^{2}-4)=c x^{2}-s x-4c .
    +\end{aligned}
    +\]
    +
    +The condition \(y'= (x')^{2}-4\) becomes
    +
    +\[
    +c x^{2}-s x-4c =\bigl(s x^{2}+c x-4s\bigr)^{2}-4 .
    +\]
    +
    +Insert \(c=\tfrac12,\ s=\tfrac{\sqrt3}{2}\) and clear denominators (multiply by \(4\)):
    +
    +\[
    +2x^{2}-2\sqrt3\,x-8 = \bigl(\sqrt3\,x^{2}+x-4\sqrt3\bigr)^{2}-4 .
    +\]
    +
    +After simplifying we obtain the quartic
    +
    +\[
    +3x^{4}+2\sqrt3\,x^{3}-25x^{2}-6\sqrt3\,x+40=0 .
    +\]
    +
    +---
    +
    +### 3.  Factor the quartic
    +
    +Trying a factorisation \((3x^{2}+Bx+C)(x^{2}+Ex+F)\) with
    +\(B,E\) multiples of \(\sqrt3\), we find
    +
    +\[
    +\boxed{(3x^{2}-\sqrt3\,x-10)(x^{2}+\sqrt3\,x-4)=0}.
    +\]
    +
    +Hence the possible \(x\)-coordinates are the roots of
    +
    +\[
    +\begin{cases}
    +3x^{2}-\sqrt3\,x-10=0,\\[1mm]
    +x^{2}+\sqrt3\,x-4=0 .
    +\end{cases}
    +\]
    +
    +Solving:
    +
    +\[
    +\begin{aligned}
    +3x^{2}-\sqrt3\,x-10=0 &\Longrightarrow 
    +x=\dfrac{\sqrt3\pm\sqrt{123}}6\;( \approx 2.14,\ -1.56),\\[2mm]
    +x^{2}+\sqrt3\,x-4=0 &\Longrightarrow 
    +x=\dfrac{-\sqrt3\pm\sqrt{19}}2\;( \approx 1.31,\ -3.05).
    +\end{aligned}
    +\]
    +
    +---
    +
    +### 4.  Identify the point in the fourth quadrant  
    +
    +The fourth quadrant requires \(x>0\) and \(y<0\).  
    +Only  
    +
    +\[
    +x=\frac{-\sqrt3+\sqrt{19}}2 \approx 1.31
    +\]
    +
    +satisfies these conditions (the other positive root gives \(x>2\) and \(y>0\)).  
    +
    +Thus the intersection point in the fourth quadrant is
    +
    +\[
    +\bigl(x,\;y\bigr)=\left(\frac{-\sqrt3+\sqrt{19}}2,\;
    +\left(\frac{-\sqrt3+\sqrt{19}}2\right)^{\!2}-4\right).
    +\]
    +
    +Compute \(y\):
    +
    +\[
    +\begin{aligned}
    +y&=\frac{(-\sqrt3+\sqrt{19})^{2}}{4}-4
    +   =\frac{3+19-2\sqrt{57}}{4}-4
    +   =\frac{22-2\sqrt{57}}{4}-4 \\
    +  &=\frac{11}{2}-\frac{\sqrt{57}}2-4
    +   =\frac{3-\sqrt{57}}{2}.
    +\end{aligned}
    +\]
    +
    +Hence  
    +
    +\[
    +y=\frac{\,3-\sqrt{57}\,}{2}
    +\]
    +
    +which matches the required form \(\displaystyle \frac{a-\sqrt b}{c}\) with  
    +
    +\[
    +a=3,\qquad b=57,\qquad c=2.
    +\]
    +
    +\(a\) and \(c\) are relatively prime, as required.
    +
    +---
    +
    +### 5.  Compute \(a+b+c\)
    +
    +\[
    +a+b+c = 3+57+2 = 62.
    +\]
    +
    +\[
    +\boxed{62}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 62

    +

    Extracted Answer: 62

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\angle B=\angle E=60^\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Sketch**
    +
    +1. **Placing the pentagon.**  
    +   Put \(B=(0,0)\) and let \(BC\) be the segment on the \(x\)-axis, so \(C=(7,0)\).  
    +   Since \(\angle B=60^{\circ}\) and \(AB=14\),
    +
    +\[
    +A=\bigl(7,\;7\sqrt3 \bigr).
    +\]
    +
    +   Using the law of cosines in \(\triangle ABC\) we obtain \(AC=7\sqrt3\); thus
    +\(\triangle ABC\) is a \(30\!-\!60\!-\!90\) right triangle with right angle at \(C\).
    +
    +   In the same way the data at \(E\) give a similar \(30\!-\!60\!-\!90\) triangle
    +\(\triangle AED\) with right angle at \(D\), giving  
    +
    +\[
    +AE=26,\qquad DE=13,\qquad AD=13\sqrt3 .
    +\]
    +
    +   Solving the two circles \((A,13\sqrt3)\) and \((C,24)\) yields  
    +
    +\[
    +D=\Bigl(\frac{205}{7},\;\frac{36\sqrt3}{7}\Bigr),\qquad
    +E=\Bigl(\frac{218}{7},\;\frac{88\sqrt3}{7}\Bigr).
    +\]
    +
    +2. **A useful line.**  
    +   Points \(B\) and \(E\) are joined by the segment \(BE\) of length  
    +
    +\[
    +BE=\frac{266}{7}=38 .
    +\]
    +
    +   For any point \(X\) on the line \(BE\) we have, by the triangle inequality,
    +\[
    +XB+XE=BE=38 .
    +\]
    +
    +   Hence for \(X\in BE\)
    +
    +\[
    +f(X)=XB+XE+AX+CX+DX=38+AX+CX+DX .
    +\]
    +
    +   Therefore the problem reduces to minimizing  
    +
    +\[
    +g(X)=AX+CX+DX\qquad (X\in BE).
    +\]
    +
    +3. **Parameterising the line.**  
    +   Write \(X\) as  
    +
    +\[
    +X(t)=\Bigl(\frac{218}{7}t,\;\frac{88\sqrt3}{7}t\Bigr),\qquad 0\le t\le 1 .
    +\]
    +
    +   Direct computation gives  
    +
    +\[
    +\begin{aligned}
    +AX^2&=\frac{4\cdot79-28t+1444t^{2}}{9},\\[2mm]
    +CX^2&=\frac{577-158t+1444t^{2}}{9},\\[2mm]
    +DX^2&=\frac{3241-1106t+1444t^{2}}{9}.
    +\end{aligned}
    +\]
    +
    +   The function \(g(t)=\sqrt{AX^2}+\sqrt{CX^2}+\sqrt{DX^2}\) is convex,
    +so its minimum occurs where \(g'(t)=0\).
    +
    +4. **Finding the minimizing \(t\).**  
    +   Using the derivative formula for a distance,
    +\( \dfrac{d}{dt}\sqrt{at^{2}+bt+c}=
    + \dfrac{2at+b}{2\sqrt{at^{2}+bt+c}}\),
    +the condition \(g'(t)=0\) becomes
    +
    +\[
    +\frac{1444t-482}{\sqrt{4\cdot79-28t+1444t^{2}}}
    ++\frac{1444t-218}{\sqrt{577-158t+1444t^{2}}}
    ++\frac{1444t-1106}{\sqrt{3241-1106t+1444t^{2}}}=0 .
    +\]
    +
    +   Substituting \(t=\dfrac13\) makes each numerator a multiple of
    +\(2,\,790,\,-1874\) respectively, and a short computation shows the
    +left‑hand side to be zero.  Because of convexity, \(t=\dfrac13\) gives the
    +global minimum.
    +
    +5. **The minimum value.**  
    +   For \(t=\dfrac13\),
    +
    +\[
    +\begin{aligned}
    +AX&=\frac{2\sqrt{79}}{3},\\[1mm]
    +CX&=\frac{\sqrt{577}}{3},\\[1mm]
    +DX&=\frac{\sqrt{3241}}{3}.
    +\end{aligned}
    +\]
    +
    +   A direct squaring shows
    +
    +\[
    +2\sqrt{79}+ \sqrt{577}+ \sqrt{3241}=57\sqrt3 ,
    +\]
    +
    +   therefore  
    +
    +\[
    +g_{\min}= \frac{57\sqrt3}{3}=19\sqrt3 .
    +\]
    +
    +   Adding the constant part \(XB+XE=38\) gives the least possible value of
    +\(f\):
    +
    +\[
    +f_{\min}=38+19\sqrt3 .
    +\]
    +
    +6. **Answer.**  
    +   The expression is of the form \(m+n\sqrt p\) with
    +\(m=38,\;n=19,\;p=3\).  Hence
    +
    +\[
    +m+n+p = 38+19+3 = 60 .
    +\]
    +
    +\[
    +\boxed{60}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 60

    +

    Extracted Answer: 60

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution**
    +
    +Let  
    +
    +\[
    +M=3^{7}=2187 ,\qquad L=3^{6}=729 .
    +\]
    +
    +All ordered triples \((a,b,c)\) satisfy  
    +
    +\[
    +N=\#\{1\le a,b,c\le L\;|\;a^{3}+b^{3}+c^{3}\equiv 0\pmod{M}\}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.   The cubes modulo \(M\)
    +
    +Write a positive integer \(a\) as  
    +
    +\[
    +a=3^{v}\,u ,\qquad v=v_{3}(a)\in\{0,1,2,3,4,5,6\},
    +\qquad 3\nmid u .
    +\]
    +
    +*If \(v\ge 3\) then \(a^{3}\equiv0\pmod{M}\).  
    +If \(v=2\) then \(a^{3}\equiv729\,u\pmod{M}\) and, because
    +\(u\equiv\pm1\pmod3\),
    +
    +\[
    +a^{3}\equiv\begin{cases}
    +729 & u\equiv1\pmod3,\\[2mm]
    +1458& u\equiv2\pmod3 .
    +\end{cases}
    +\]
    +
    +*If \(v=1\) then \(a=3u\;(3\nmid u\le 243)\) and  
    +
    +\[
    +a^{3}\equiv27\,u^{3}\pmod{M}.
    +\]
    +
    +Since \(27\cdot81=M\), only \(u^{3}\pmod{81}\) matters.  The
    +set of cubic residues modulo \(81\) among the units is  
    +
    +\[
    +R_{4}=\{x\in\mathbb Z/81\;|\;x\equiv\pm1\pmod9\},
    +\qquad |R_{4}|=18 .
    +\]
    +
    +Each element of \(R_{4}\) occurs exactly three times among the
    +\(162\) numbers \(u\) (the three residue‑classes modulo \(81\));
    +hence each value \(27r\;(r\in R_{4})\) occurs \(9\) times.
    +
    +*If \(v=0\) (i.e. \(3\nmid a\)), then \(a^{3}\) runs through the
    +cubic residues among the units modulo \(M\)
    +
    +\[
    +R_{7}=\{x\in\mathbb Z/M\;|\;x\equiv\pm1\pmod9\},
    +\qquad |R_{7}|=486 ,
    +\]
    +
    +each occurring **once**.
    +
    +Summarising, the multiset of residues \(\{a^{3}\pmod M\}\) is
    +
    +| residue type | number of residues | multiplicity |
    +|---|---|---|
    +| \(x\in R_{7}\) | \(486\) | \(1\) |
    +| \(27r,\,r\in R_{4}\) | \(18\) | \(9\) |
    +| \(729\) | \(1\) | \(27\) |
    +| \(1458\) | \(1\) | \(27\) |
    +| \(0\) | \(1\) | \(27\) |
    +| total | \(729\) | – |
    +
    +--------------------------------------------------------------------
    +### 2.   Fourier representation
    +
    +Put  
    +
    +\[
    +\zeta =e^{2\pi i/M}, \qquad 
    +S(k)=\sum_{a=1}^{L}\zeta^{k a^{3}}
    +      =\sum_{x}f(x)\,\zeta^{k x},
    +\]
    +
    +where \(f(x)\) is the multiplicity of the residue \(x\) listed above.
    +Orthogonality of characters gives  
    +
    +\[
    +N=\frac1{M}\sum_{k=0}^{M-1}S(k)^{3}\tag{1}
    +\]
    +
    +and we have to evaluate the sum on the right.
    +
    +--------------------------------------------------------------------
    +### 3.   Explicit form of \(S(k)\)
    +
    +Write \(k=3^{v}t\;(3\nmid t)\).  
    +The three kinds of contributions are
    +
    +* from \(R_{7}\) (cubic residues modulo \(M\))  
    +
    +\[
    +S_{7}(k)=\sum_{x\in R_{7}}\zeta^{k x}
    +       =\begin{cases}
    +       486\cos\frac{2\pi t}{9},&3^{5}\mid k,\\
    +       0,&\text{otherwise}.
    +       \end{cases}
    +\]
    +
    +* from the residues \(27r\) (\(r\in R_{4}\))  
    +
    +\[
    +9S_{4}(k)=9\sum_{r\in R_{4}}\zeta^{27k r}
    +        =\begin{cases}
    +        162\cos\frac{2\pi t}{9},&9\mid k,\\
    +        0,&\text{otherwise}.
    +        \end{cases}
    +\]
    +
    +* from the three “fixed’’ residues \(0,\,729,\,1458\)  
    +
    +\[
    +S_{2}(k)+S_{3}(k)=27\bigl(\zeta^{729k}+\zeta^{1458k}+1\bigr)
    +                =\begin{cases}
    +                81,&3\mid k,\\[2mm]
    +                0,&3\nmid k .
    +                \end{cases}
    +\]
    +
    +Hence
    +
    +\[
    +S(k)=S_{7}(k)+9S_{4}(k)+
    +\begin{cases}
    +81,&3\mid k,\\
    +0,&3\nmid k .
    +\end{cases}
    +\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.   Values of \(S(k)\)
    +
    +According to the 3‑adic valuation \(v=v_{3}(k)\) we obtain
    +
    +| \(v\) | condition on \(k\) | \(S(k)\) |
    +|---|---|---|
    +| \(0\) | \(3\nmid k\) | \(0\) |
    +| \(1\) | \(3\mid k,\;9\nmid k\) | \(81\) |
    +| \(2\) | \(9\mid k,\;27\nmid k\) | \(81\bigl(1+2\cos\frac{2\pi u}{9}\bigr)\)  \(\;(u=k/9\bmod9\neq0,3,6)\) |
    +| \(3\) | \(27\mid k,\;81\nmid k\) | \(0\) |
    +| \(4\) | \(81\mid k,\;243\nmid k\) | \(243\) |
    +| \(5\) | \(243\mid k,\;729\nmid k\) | \(243\bigl(1+2\cos\frac{2\pi t}{9}\bigr)\) \(\;(t=k/243\bmod9\neq0,3,6)\) |
    +| \(6\) | \(729\mid k\) | \(0\) |
    +| \(k=0\) | – | \(S(0)=729\) |
    +
    +The numbers of \(k\) having each valuation are  
    +
    +\[
    +\begin{aligned}
    +&v=0:1458,\quad v=1:486,\quad v=2:162,\\
    +&v=3:54,\quad v=4:18,\quad v=5:6,\quad v=6:2 .
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.   Summation of \(S(k)^{3}\)
    +
    +Denote  
    +
    +\[
    +C=\sum_{u\in\{1,2,4,5,7,8\}}\bigl(1+2\cos\tfrac{2\pi u}{9}\bigr)^{3}.
    +\]
    +
    +Using the identity  
    +
    +\[
    +\sum_{u\in\{1,2,4,5,7,8\}}\bigl(1+2\cos\tfrac{2\pi u}{9}\bigr)^{3}=36,
    +\]
    +
    +(which follows from expanding \((1+z^{u}+z^{-u})^{3}\) and summing over
    +\(u\) with \(z=e^{2\pi i/9}\)), we obtain
    +
    +\[
    +\begin{aligned}
    +\sum_{k}S(k)^{3}
    +&= 486\cdot81^{3}
    +   +162\cdot81^{3}
    +   +18\cdot243^{3}
    +   +6\cdot243^{3}                                 \\
    +&= 486\cdot531\,441
    +   +162\cdot531\,441
    +   +18\cdot14\,348\,907
    +   +6\cdot14\,348\,907                           \\
    +&=5\cdot3^{18}=5\cdot387\,420\,489
    +   =1\,937\,102\,445 .
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 6.   The number \(N\)
    +
    +From (1),
    +
    +\[
    +N=\frac{1}{3^{7}}\sum_{k}S(k)^{3}
    +  =\frac{5\cdot3^{18}}{3^{7}}
    +  =5\cdot3^{11}=5\cdot177\,147=885\,735 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 7.   Remainder modulo \(1000\)
    +
    +\[
    +885\,735 \equiv 735 \pmod{1000}.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{735}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 735

    +

    Extracted Answer: 735

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are exactly three positive real numbers $ k $ such that the function
    +$ f(x) = \frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $
    +defined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +f(x)=\frac{(x-18)(x-72)(x-98)(x-k)}{x}= \frac{N(x)}{x},
    +\qquad N(x)=(x-18)(x-72)(x-98)(x-k)
    +\]
    +
    +for \(x>0\) and a positive parameter \(k\).
    +
    +--------------------------------------------------------------------
    +### 1.  Critical points
    +
    +\[
    +f'(x)=\frac{xN'(x)-N(x)}{x^{2}},\qquad   
    +f'(x)=0\Longleftrightarrow H(x):=xN'(x)-N(x)=0 .
    +\]
    +
    +Write  
    +
    +\[
    +N(x)=x^{4}-S_{1}x^{3}+S_{2}x^{2}-S_{3}x+S_{4},
    +\]
    +
    +where  
    +
    +\[
    +\begin{aligned}
    +S_{1}&=18+72+98+k = 188+k,\\
    +S_{2}&=18\cdot72+18\cdot98+72\cdot98+ (18+72+98)k =10116+188k,\\
    +S_{3}&=18\cdot72\cdot98+(18\cdot72+18\cdot98+72\cdot98)k =127008+10116k,\\
    +S_{4}&=18\cdot72\cdot98\cdot k =127008\,k .
    +\end{aligned}
    +\]
    +
    +Since  
    +
    +\[
    +N'(x)=4x^{3}-3S_{1}x^{2}+2S_{2}x-S_{3},
    +\]
    +
    +we obtain  
    +
    +\[
    +\begin{aligned}
    +H(x)&=xN'(x)-N(x)  \\
    +    &=3x^{4}-2S_{1}x^{3}+S_{2}x^{2}-S_{4}\\
    +    &=3x^{4}-(376+2k)x^{3}+(10116+188k)x^{2}-127008k .
    +\end{aligned}
    +\]
    +
    +The three positive roots of \(H\) are the two minima of \(f\) (in the intervals where
    +\(f<0\)) and one interior maximum.
    +
    +--------------------------------------------------------------------
    +### 2.  When are the two minima equal?
    +
    +At a minimum \(x_{0}\),
    +
    +\[
    +f(x_{0}) = \frac{N(x_{0})}{x_{0}} = N'(x_{0})=:m .
    +\]
    +
    +Thus the equation \(N(x)=mx\) has a **double** root at each minimum.
    +If the global minimum is attained at exactly two points, then
    +
    +\[
    +N(x)-mx=(x-\alpha)^{2}(x-\gamma)^{2},
    +\qquad\alpha\neq\gamma>0 .
    +\]
    +
    +Expanding both sides and comparing coefficients gives
    +
    +\[
    +\begin{cases}
    +\alpha+\gamma =\displaystyle\frac{188+k}{2},\\[4pt]
    +\alpha\gamma = -\dfrac{k^{2}}{8}+47k+640,\\[4pt]
    +(\alpha\gamma)^{2}=S_{4}=127008k .
    +\end{cases}
    +\]
    +
    +Eliminating \(\alpha,\gamma\) yields a single equation for \(k\):
    +
    +\[
    +\Bigl(-\frac{k^{2}}{8}+47k+640\Bigr)^{2}=127008k .
    +\]
    +
    +Multiplying by \(64\),
    +
    +\[
    +(k^{2}-376k-5120)^{2}=8\,128\,512\,k,
    +\]
    +
    +which simplifies to the quartic
    +
    +\[
    +k^{4}-752k^{3}+131136k^{2}-4\,278\,272k+26\,214\,400=0 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Solving the quartic
    +
    +Factoring gives  
    +
    +\[
    +(k-8)(k-32)(k^{2}-712k+102400)=0,
    +\]
    +
    +so the four real solutions are  
    +
    +\[
    +k=8,\qquad k=32,\qquad k=200,\qquad k=512 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Selecting the admissible \(k\)
    +
    +For the two minima to be **positive**, the product \(\alpha\gamma\) must be positive:
    +
    +\[
    +\alpha\gamma = -\frac{k^{2}}{8}+47k+640 >0 .
    +\]
    +
    +Evaluating this expression:
    +
    +\[
    +\begin{array}{c|c}
    +k & \alpha\gamma\\ \hline
    +8   & 1008>0\\
    +32  & 2016>0\\
    +200 & 5040>0\\
    +512 & -8064<0
    +\end{array}
    +\]
    +
    +Thus \(k=512\) gives one root \(\alpha\) negative and cannot produce two minima on the
    +positive axis.  The admissible values are  
    +
    +\[
    +k=8,\;32,\;200 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Sum of the three values
    +
    +\[
    +8+32+200 = 240 .
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{240}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 240

    +

    Extracted Answer: 240

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The inequalities can be rewritten by factoring:
    +
    +\[
    +\begin{aligned}
    +x-yz<y-zx &\iff (x-y)(1+z)<0,\\[2pt]
    +y-zx<z-xy &\iff (y-z)(1+x)<0 .
    +\end{aligned}
    +\]
    +
    +Hence the signs of \(x-y,\;y-z,\;1+z,\;1+x\) must be opposite in each product.
    +Four sign‑patterns are possible:
    +
    +\[
    +\begin{array}{c|c|c|c}
    +x+1 & z+1 & \text{implied order of }x,y,z & \text{region}\\ \hline
    +>0 & >0 & x<y<z & \text{bounded}\\
    +>0 & <0 & y<\min\{x,z\} & \text{unbounded}\\
    +<0 & >0 & \max\{x,z\}<y & \text{unbounded}\\
    +<0 & <0 & x>y>z & \text{impossible (sum }75)
    +\end{array}
    +\]
    +
    +Only the first case can give a finite region.  
    +With \(x+y+z=75\) and the inequalities
    +
    +\[
    +x>-1,\qquad x<y,\qquad y<z,
    +\]
    +
    +write \(z=75-x-y\). The conditions become
    +
    +\[
    +\begin{cases}
    +x>-1,\\
    +x<y,\\
    +y<\dfrac{75-x}{2}.
    +\end{cases}
    +\]
    +
    +In the \((x,y)\)-plane this is the interior of the triangle bounded by
    +
    +\[
    +x=-1,\qquad y=x,\qquad y=\frac{75-x}{2},
    +\]
    +
    +whose vertices are \((-1,-1),\;(-1,38),\;(25,25)\).
    +
    +Its area in the \((x,y)\)-plane is
    +
    +\[
    +\frac12\cdot 39\cdot 26=507 .
    +\]
    +
    +The plane \(x+y+z=75\) makes an angle with the \(xy\)-plane whose normal is \((1,1,1)\); the area element is multiplied by \(\lVert(1,1,1)\rVert=\sqrt3\).  
    +Hence the actual area of the bounded region is
    +
    +\[
    +507\sqrt3 .
    +\]
    +
    +Thus \(a=507,\;b=3\) and
    +
    +\[
    +a+b=507+3=510 .
    +\]
    +
    +\[
    +\boxed{510}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 510

    +

    Extracted Answer: 510

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 27 cells of a $3\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. 
    + | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | 
    + | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | 
    + | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | 
    + The number of different ways to fill such a grid can be written as $p^a\cdot q^b\cdot r^c\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\cdot a+q\cdot b+r\cdot c+s\cdot d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The grid consists of three \(3\times 3\) blocks.  
    +For each number \(1,\dots ,9\) we must place it
    +
    +* once in each of the three rows,
    +* once in each of the three blocks.
    +
    +Hence for a fixed number its positions are described by a permutation
    +\(\sigma\in S_{3}\):
    +\[
    +\sigma(i)=\text{the block in which the number occurs in row }i .
    +\]
    +
    +---
    +
    +### 1.  Counting the assignments of permutations
    +
    +Let \(n_\sigma\) be the number of symbols that use permutation \(\sigma\).
    +Since there are nine symbols,
    +\[
    +\sum_{\sigma\in S_3} n_\sigma = 9 .
    +\]
    +
    +For each ordered pair \((i,j)\) (row \(i\), block \(j\)) the number of symbols
    +with \(\sigma(i)=j\) must be \(3\) (there are three columns in that block).  
    +Writing the six permutations of \(S_3\) as  
    +
    +\[
    +\begin{aligned}
    +\sigma_1&:(1,2,3),&\sigma_2&:(2,1,3),&\sigma_3&:(3,2,1),\\
    +\sigma_4&:(1,3,2),&\sigma_5&:(2,3,1),&\sigma_6&:(3,1,2),
    +\end{aligned}
    +\]
    +
    +the conditions become  
    +
    +\[
    +\begin{array}{c}
    +n_1+n_4=3,\; n_1+n_2=3,\; n_1+n_3=3,\\
    +n_2+n_5=3,\; n_3+n_6=3,\; n_4+n_5=3,\\
    +n_3+n_5=3,\; n_4+n_6=3,\; n_2+n_6=3 .
    +\end{array}
    +\]
    +
    +Solving gives a one‑parameter family
    +
    +\[
    +n_1=n_5=n_6=k,\qquad n_2=n_3=n_4=3-k,
    +\]
    +
    +with \(k=0,1,2,3\) (non‑negative integers).  
    +For each \(k\) the number of ways to assign the nine distinct symbols to the
    +permutations is  
    +
    +\[
    +\frac{9!}{k!^3\,(3-k)!^3}.
    +\]
    +
    +Hence the total number of macro‑assignments is
    +
    +\[
    +M=\sum_{k=0}^{3}\frac{9!}{k!^3(3-k)!^3}
    +   =1680+45360+45360+1680=94080 .
    +\]
    +
    +---
    +
    +### 2.  Ordering within each macro‑cell
    +
    +A macro‑cell \((\text{row }i,\text{ block }j)\) contains exactly three
    +different numbers.  Their order in the three columns of that block can be chosen
    +in \(3!\) ways, independently for each of the \(3\times 3=9\) macro‑cells.
    +Thus we obtain an extra factor \((3!)^{9}=6^{9}=10\,077\,696\).
    +
    +Hence the total number of fillings is  
    +
    +\[
    +N = M\cdot (3!)^{9}=94080\cdot 6^{9}
    +   = 2^{16}\cdot 3^{10}\cdot5\cdot7^{2}.
    +\]
    +
    +---
    +
    +### 3.  Computing \(p a+q b+r c+s d\)
    +
    +Writing \(N=p^{a}q^{b}r^{c}s^{d}\) with distinct primes \(p,q,r,s\) we have  
    +
    +\[
    +p=2,\;a=16;\qquad q=3,\;b=10;\qquad r=5,\;c=1;\qquad s=7,\;d=2.
    +\]
    +
    +Therefore  
    +
    +\[
    +p a+q b+r c+s d
    +=2\cdot16+3\cdot10+5\cdot1+7\cdot2
    +=32+30+5+14=81.
    +\]
    +
    +\[
    +\boxed{81}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 81

    +

    Extracted Answer: 81

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Six points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \triangle BGE $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the line containing \(A,B,C,D,E,F\) be the \(x\)-axis.  
    +Place \(A\) at the origin: \(A=(0,0)\).
    +
    +---
    +
    +### 1.  Determine the coordinates of the collinear points  
    +
    +\[
    +\begin{aligned}
    +AC&=26\quad\Rightarrow\quad C=(26,0),\\[2mm]
    +BD&=22\quad\Rightarrow\quad D-B=22,\\[2mm]
    +CE&=31\quad\Rightarrow\quad E-C=31\;\Rightarrow\;E=(57,0),\\[2mm]
    +DF&=33\quad\Rightarrow\quad F-D=33,\\[2mm]
    +AF&=73\quad\Rightarrow\quad F=(73,0).
    +\end{aligned}
    +\]
    +
    +From \(F-D=33\) we get \(D=73-33=40\).  
    +Then \(BD=22\) gives \(B=40-22=18\).
    +
    +Thus  
    +
    +\[
    +A(0,0),\;B(18,0),\;C(26,0),\;D(40,0),\;E(57,0),\;F(73,0).
    +\]
    +
    +---
    +
    +### 2.  Locate point \(G\)
    +
    +Let \(G=(x,y)\) with \(y\neq0\).  
    +Given \(CG=40\) and \(DG=30\),
    +
    +\[
    +\begin{cases}
    +(x-26)^2+y^2 = 40^2 =1600,\\
    +(x-40)^2+y^2 = 30^2 = 900 .
    +\end{cases}
    +\]
    +
    +Subtract the second equation from the first:
    +
    +\[
    +(x-26)^2-(x-40)^2 = 700
    +\]
    +\[
    +\Longrightarrow\;28x-924 = 700 \;\Longrightarrow\; x=58 .
    +\]
    +
    +Plug \(x=58\) into \((x-40)^2+y^2=900\):
    +
    +\[
    +(18)^2 + y^2 = 900 \;\Longrightarrow\; y^2 = 576 \;\Longrightarrow\; y = \pm24 .
    +\]
    +
    +Take \(y=24\) (the sign does not affect the area).  
    +Hence \(G=(58,24)\).
    +
    +---
    +
    +### 3.  Area of \(\triangle BGE\)
    +
    +Points \(B\) and \(E\) lie on the \(x\)-axis, so segment \(\overline{BE}\) is horizontal.  
    +
    +\[
    +BE = 57-18 = 39 .
    +\]
    +
    +The perpendicular distance from \(G\) to line \(BE\) (the \(x\)-axis) is \(|y| = 24\).
    +
    +Therefore
    +
    +\[
    +\text{Area} = \frac12 \times (\text{base}) \times (\text{height})
    +           = \frac12 \times 39 \times 24
    +           = 468 .
    +\]
    +
    +\[
    +\boxed{468}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 468

    +

    Extracted Answer: 468

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +d=n+2\qquad (d\ge 3,\;n\in\mathbb Z^+)
    +\]
    +
    +Then  
    +
    +\[
    +n+3=d+1,\qquad n^{2}+9=(d-2)^2+9=d^{2}-4d+13 .
    +\]
    +
    +The condition “\(n+2\) divides \(3(n+3)(n^{2}+9)\)” becomes  
    +
    +\[
    +d\mid 3(d+1)(d^{2}-4d+13).
    +\]
    +
    +Consider the right‑hand side modulo \(d\):
    +
    +\[
    +\begin{aligned}
    +3(d+1)(d^{2}-4d+13)
    +&\equiv 3\cdot1\cdot13\pmod{d}\\
    +&=39\pmod{d}.
    +\end{aligned}
    +\]
    +
    +Hence  
    +
    +\[
    +d\mid 3(d+1)(d^{2}-4d+13)\iff d\mid 39 .
    +\]
    +
    +Since \(d=n+2\ge 3\), the possible values of \(d\) are the divisors of \(39\) that are at least \(3\):
    +
    +\[
    +d\in\{3,13,39\}.
    +\]
    +
    +Corresponding \(n=d-2\) values are  
    +
    +\[
    +n=1,\;11,\;37 .
    +\]
    +
    +All three satisfy the original divisibility (direct substitution confirms).
    +
    +The required sum is  
    +
    +\[
    +1+11+37=49.
    +\]
    +
    +\[
    +\boxed{49}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 49

    +

    Extracted Answer: 49

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +A piecewise linear periodic function is defined by $f(x)=\begin{cases}x&\text{if }x\in[-1,1)\\2-x&\text{if }x\in[1,3)\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\frac{a+b\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The function  
    +
    +\[
    +f(x)=\begin{cases}
    +x,&-1\le x<1\\[2mm]
    +2-x,&1\le x<3
    +\end{cases},\qquad f(x+4)=f(x)
    +\]
    +
    +has period \(4\).  
    +For any \(x\) write  
    +
    +\[
    +x=4n+t,\qquad t\in[-1,3),\;n\in\mathbb Z .
    +\]
    +
    +Then  
    +
    +\[
    +f(x)=\begin{cases}
    +t,&-1\le t<1\\
    +2-t,&1\le t<3 .
    +\end{cases}
    +\tag{1}
    +\]
    +
    +The parabola is \(x=34y^{2}\;(x\ge 0)\).  
    +An intersection point must satisfy  
    +
    +\[
    +y=f(34y^{2}) .
    +\tag{2}
    +\]
    +
    +Put \(x=34y^{2}=4n+t\) with \(t\in[-1,3)\).  
    +From (1) there are two possibilities.
    +
    +---
    +
    +### 1.  \(t=y\)  
    +
    +Then \(-1\le y<1\) and  
    +
    +\[
    +34y^{2}=4n+y\Longrightarrow 34y^{2}-y=4n .
    +\tag{3}
    +\]
    +
    +For each integer \(n\) this quadratic gives the two solutions  
    +
    +\[
    +y=\frac{1\pm\sqrt{1+544n}}{68}.
    +\tag{4}
    +\]
    +
    +Since \(y\in[-1,1)\) the solutions are admissible for every \(n\)
    +for which \(34y^{2}\le 34\).  
    +Because \(0\le34y^{2}\le34\), from \(34y^{2}=4n+t\) with \(t\ge-1\) we get
    +\(0\le4n+3\), i.e. \(n\ge0\); and from \(4n-1\le34\) we obtain \(n\le8\).
    +Thus \(n=0,1,\dots ,8\).  
    +
    +For each \(n\) the sum of the two roots of (3) is  
    +
    +\[
    +\frac{1}{34}.
    +\]
    +
    +Hence the total contribution of this case is  
    +
    +\[
    +9\cdot\frac1{34}=\frac{9}{34}=\frac{18}{68}.
    +\tag{5}
    +\]
    +
    +---
    +
    +### 2.  \(t=2-y\)  
    +
    +Now \(1\le t<3\) which gives \(-1<y\le1\) and  
    +
    +\[
    +34y^{2}=4n+2-y\Longrightarrow 34y^{2}+y-2=4n .
    +\tag{6}
    +\]
    +
    +Its solutions are  
    +
    +\[
    +y=\frac{-1\pm\sqrt{273+544n}}{68}.
    +\tag{7}
    +\]
    +
    +Again \(n=0,1,\dots ,8\).  
    +For \(n=0,\dots ,7\) both roots lie in \((-1,1]\); for \(n=8\) only the
    +‘\(+\)’ root is admissible (the ‘\(-\)’ root is \(<-1\)).  
    +
    +The sum of the two roots of (6) for any \(n\) equals  
    +
    +\[
    +-\frac1{34}.
    +\]
    +
    +Thus the sum of all valid roots of this case is  
    +
    +\[
    +8\!\left(-\frac1{34}\right)+\frac{-1+\sqrt{4625}}{68}
    +   =-\frac{16}{68}+\frac{-1+\sqrt{4625}}{68}
    +   =\frac{-17+\sqrt{4625}}{68}.
    +\tag{8}
    +\]
    +
    +---
    +
    +### 3.  Total sum of the \(y\)–coordinates
    +
    +Adding (5) and (8),
    +
    +\[
    +S=\frac{18}{68}+\frac{-17+\sqrt{4625}}{68}
    +   =\frac{1+\sqrt{4625}}{68}
    +   =\frac{1+5\sqrt{185}}{68}.
    +\]
    +
    +The expression \(\displaystyle\frac{a+b\sqrt{c}}{d}\) has  
    +
    +\[
    +a=1,\;b=5,\;c=185,\;d=68,
    +\]
    +
    +with \(\gcd(a,b,d)=1\) and \(c\) square‑free.
    +
    +Hence  
    +
    +\[
    +a+b+c+d = 1+5+185+68 = 259.
    +\]
    +
    +\[
    +\boxed{259}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 259

    +

    Extracted Answer: 259

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The product $ \prod_{k=4}^{63} \frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})} = \frac{\log_4(5^{15})}{\log_5(5^{12})} \cdot \frac{\log_5(5^{24})}{\log_6(5^{21})} \cdot \frac{\log_6(5^{35})}{\log_7(5^{32})} \cdots \frac{\log_{63}(5^{3968})}{\log_{64}(5^{3965})} $ is equal to $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +\prod_{k=4}^{63}\frac{\log_k\!\left(5^{k^{2}-1}\right)}{\log_{k+1}\!\left(5^{k^{2}-4}\right)}
    += \prod_{k=4}^{63}
    +\frac{(k^{2}-1)\ln5/\ln k}{(k^{2}-4)\ln5/\ln(k+1)}
    += \prod_{k=4}^{63}\frac{k^{2}-1}{k^{2}-4}\cdot\frac{\ln(k+1)}{\ln k}
    +\]
    +
    +Since \(k^{2}-1=(k-1)(k+1)\) and \(k^{2}-4=(k-2)(k+2)\),
    +
    +\[
    +\frac{k^{2}-1}{k^{2}-4}= \frac{k-1}{k-2}\cdot\frac{k+1}{k+2}.
    +\]
    +
    +Thus
    +
    +\[
    +P=\Bigl(\prod_{k=4}^{63}\frac{k-1}{k-2}\Bigr)
    +   \Bigl(\prod_{k=4}^{63}\frac{k+1}{k+2}\Bigr)
    +   \Bigl(\prod_{k=4}^{63}\frac{\ln(k+1)}{\ln k}\Bigr).
    +\]
    +
    +Each product telescopes:
    +
    +1. \(\displaystyle\prod_{k=4}^{63}\frac{k-1}{k-2}
    +   =\frac{3}{2}\cdot\frac{4}{3}\cdots\frac{62}{61}
    +   =\frac{62}{2}=31.\)
    +
    +2. \(\displaystyle\prod_{k=4}^{63}\frac{k+1}{k+2}
    +   =\frac{5}{6}\cdot\frac{6}{7}\cdots\frac{64}{65}
    +   =\frac{5}{65}=\frac1{13}.\)
    +
    +3. \(\displaystyle\prod_{k=4}^{63}\frac{\ln(k+1)}{\ln k}
    +   =\frac{\ln5}{\ln4}\cdot\frac{\ln6}{\ln5}\cdots\frac{\ln64}{\ln63}
    +   =\frac{\ln64}{\ln4}
    +   =\log_{4}64=3.\)
    +
    +Multiplying,
    +
    +\[
    +P=31\cdot\frac1{13}\cdot3=\frac{93}{13}.
    +\]
    +
    +Thus \(m=93,\;n=13\) (relatively prime) and  
    +
    +\[
    +m+n=93+13=106.
    +\]
    +
    +\[
    +\boxed{106}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 106

    +

    Extracted Answer: 106

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Four unit squares form a $2 \times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Label the unit line segments as follows.
    +
    +\[
    +\begin{array}{c}
    +\text{Top edges: }T_1,T_2\\
    +\text{Bottom edges: }B_1,B_2\\
    +\text{Left edges: }L_1,L_2\\
    +\text{Right edges: }R_1,R_2\\
    +\text{Middle vertical edges: }M_{v1},M_{v2}\\
    +\text{Middle horizontal edges: }M_{h1},M_{h2}
    +\end{array}
    +\]
    +
    +Each of the four unit squares must have exactly two red sides.
    +Let a red edge be denoted by \(1\) and a blue edge by \(0\).
    +Introduce the binary variables  
    +
    +\[
    +\begin{aligned}
    +&a=M_{v1},\;b=M_{v2},\;c=M_{h1},\;d=M_{h2},\\
    +&p=T_1,\;q=T_2,\;r=B_1,\;s=B_2,\\
    +&u=L_1,\;v=L_2,\;w=R_1,\;x=R_2 .
    +\end{aligned}
    +\]
    +
    +The condition “two red sides” for each of the four squares gives four linear
    +equations:
    +
    +\[
    +\begin{cases}
    +p+u+a+c=2\\
    +q+w+a+d=2\\
    +r+v+b+c=2\\
    +s+x+b+d=2\qquad (1)
    +\end{cases}
    +\]
    +
    +All variables are \(0\) or \(1\).
    +
    +--------------------------------------------------------------------
    +### Fix the interior edges
    +
    +The interior edges are the four variables \(a,b,c,d\).
    +For a fixed choice of \((a,b,c,d)\) each equation in (1) involves a
    +different pair of outer edges:
    +
    +\[
    +\begin{aligned}
    +p+u &=2-(a+c),\\
    +q+w &=2-(a+d),\\
    +r+v &=2-(b+c),\\
    +s+x &=2-(b+d).
    +\end{aligned}
    +\tag{2}
    +\]
    +
    +For a pair of binary variables the number of possibilities for a given
    +sum is  
    +
    +\[
    +f(s)=\begin{cases}
    +1 & s=0\text{ or }2,\\[2pt]
    +2 & s=1,\\[2pt]
    +0 & \text{otherwise}.
    +\end{cases}
    +\]
    +
    +Hence, for a fixed interior assignment the number of ways to colour the
    +outer edges equals  
    +
    +\[
    +f\bigl(2-(a+c)\bigr)\,
    +f\bigl(2-(a+d)\bigr)\,
    +f\bigl(2-(b+c)\bigr)\,
    +f\bigl(2-(b+d)\bigr).
    +\]
    +
    +Because \(a,c,b,d\in\{0,1\}\), each sum \(a+c,\;a+d,\;b+c,\;b+d\) is
    +\(0,1,\) or \(2\); consequently the factor is \(2\) exactly when the
    +corresponding pair contains one \(0\) and one \(1\), and it is \(1\) when
    +the pair is equal.  
    +
    +Define
    +
    +\[
    +N(a,b,c,d)=\bigl[ a\ne c\bigr]+\bigl[ a\ne d\bigr]+\bigl[ b\ne c\bigr]
    ++\bigl[ b\ne d\bigr].
    +\]
    +
    +Then the number of outer colourings for that interior choice is
    +\(2^{\,N(a,b,c,d)}\).
    +
    +--------------------------------------------------------------------
    +### Counting all interior choices
    +
    +The four interior bits can be viewed as two binary strings  
    +\(A=(a,b)\) and \(C=(c,d)\).  The quantity \(N\) counts the mismatches
    +between \(A\) and \(C\) over all four cross‑pairs, and one obtains
    +
    +\[
    +N=2\bigl(w_A+w_C-w_Aw_C\bigr),
    +\]
    +where \(w_A=a+b\) and \(w_C=c+d\) are the numbers of 1’s in the strings.
    +
    +From this we get the possible values:
    +
    +* **\(N=0\)** when \(A=C\) (all four interior edges equal).  
    +  Two assignments: \((0,0,0,0)\) and \((1,1,1,1)\).  
    +  Contribution: \(2\cdot2^{0}=2\).
    +
    +* **\(N=4\)** when the two strings are opposite, i.e. \(A=(0,0), C=(1,1)\)
    +  or \(A=(1,1), C=(0,0)\).  
    +  Two assignments.  
    +  Contribution: \(2\cdot2^{4}=32\).
    +
    +* **\(N=2\)** for all remaining \(16-4=12\) interior assignments.  
    +  Contribution: \(12\cdot2^{2}=48\).
    +
    +Adding them gives the total number of colourings
    +
    +\[
    +2+48+32 = 82.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{82}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 82

    +

    Extracted Answer: 82

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +On $\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Overview**
    +
    +Place \(\triangle ABC\) in the plane with  
    +
    +\[
    +A=(0,0),\qquad B=(28,0),\qquad C=(x,y)
    +\]
    +
    +so that \(AB=28\).  
    +The points on the sides are
    +
    +\[
    +\begin{aligned}
    +D&=A+\frac17AB=(4,0), &
    +E&=A+\frac57AB=(20,0),\\
    +F&=A+\frac17AC=\Bigl(\frac{x}{7},\frac{y}{7}\Bigr), &
    +G&=A+\frac57AC=\Bigl(\frac{5x}{7},\frac{5y}{7}\Bigr).
    +\end{aligned}
    +\]
    +
    +(The given lengths give the fractions \(\frac17,\frac57\) on both sides because  
    +
    +\[
    +AD:DE:EB=4:16:8=1:4:2,\qquad 
    +AF:FG:GC=13:52:26=1:4:2 .
    +\])
    +
    +The reflections are
    +
    +\[
    +\begin{aligned}
    +M&=2F-D=\Bigl(\frac{2x}{7}-4,\frac{2y}{7}\Bigr),\\[2mm]
    +N&=2E-G=\Bigl(40-\frac{5x}{7},-\frac{5y}{7}\Bigr).
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Height of the triangle
    +
    +The quadrilateral \(DEGF\) is \(\{D,E,G,F\}\) in that order.  
    +Using the shoelace formula,
    +
    +\[
    +\begin{aligned}
    +[DEGF]
    +&=\frac12\Bigl((4\cdot0+20\cdot\frac{5y}{7}+\frac{5x}{7}\cdot\frac{y}{7}+ \frac{x}{7}\cdot0) \\
    +&\qquad\ -\ (0\cdot20+\;0\cdot\frac{5x}{7}+\frac{5y}{7}\cdot\frac{x}{7}+ \frac{y}{7}\cdot4 )\Bigr)\\[1mm]
    +&=\frac12\Bigl(20\cdot\frac{5y}{7}-4\cdot\frac{y}{7}\Bigr)
    + =\frac{1248}{91}\,\frac{y}{2}= \frac{624}{91}\,y .
    +\end{aligned}
    +\]
    +
    +The problem states \([DEGF]=288\); hence
    +
    +\[
    +\frac{624}{91}\,y=288\qquad\Longrightarrow\qquad y=42 .
    +\]
    +
    +Thus the altitude from \(C\) to \(\overline{AB}\) is \(h=y=42\).
    +
    +--------------------------------------------------------------------
    +### 2.  Area of \(\triangle ABC\)
    +
    +\[
    +[ABC]=\frac12\cdot AB\cdot h=\frac12\cdot 28\cdot 42=14\cdot 42=588.
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Area of the heptagon \(AFNBCEM\)
    +
    +Write the vertices in order:
    +
    +\[
    +A,\;F,\;N,\;B,\;C,\;E,\;M .
    +\]
    +
    +Using the coordinates found above (with \(y=42\) and \(\,x=\sqrt{91^{2}-42^{2}}=7\sqrt{133}\)), the
    +shoelace sum is
    +
    +\[
    +\begin{aligned}
    +S&=x_Ay_F-y_Ax_F
    +   +x_Fy_N-y_Fx_N
    +   +x_Ny_B-y_Nx_B
    +   +x_By_C-y_Bx_C
    +   +x_Cy_E-y_Cx_E
    +   +x_Ey_M-y_Ex_M
    +   +x_My_A-y_Mx_A \\[1mm]
    +&=0-240+840+1176-840+240+0=1176 .
    +\end{aligned}
    +\]
    +
    +Hence
    +
    +\[
    +[AFNBCEM]=\frac12\,S=\frac12\cdot1176=588 .
    +\]
    +
    +A vector‑geometry check also shows that the signed sum of the
    +determinants of successive vertices equals \(\det(\overrightarrow{AB},
    +\overrightarrow{AC})\), i.e. the area of \(\triangle ABC\).
    +
    +--------------------------------------------------------------------
    +### 4.  Answer
    +
    +\[
    +\boxed{588}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 588

    +

    Extracted Answer: 588

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Factor  
    +\[
    +2025=3^{4}\cdot5^{2}.
    +\]
    +
    +A divisor of \(2025\) is \(3^{i}5^{j}\) with \(0\le i\le4,\;0\le j\le2\).  
    +Hence  
    +
    +\[
    +|A|=(4+1)(2+1)=15 .
    +\]
    +
    +---
    +
    +### When does a subset have lcm \(2025\)?
    +
    +The lcm of a set of divisors takes, for each prime, the **maximum** exponent appearing among the chosen numbers.
    +
    +Thus a subset \(B\subseteq A\) has \(\operatorname{lcm}(B)=3^{4}5^{2}=2025\) iff  
    +
    +* at least one element of \(B\) has exponent \(4\) of the prime \(3\);
    +* at least one element of \(B\) has exponent \(2\) of the prime \(5\).
    +
    +Define  
    +
    +\[
    +S_{3}=\{3^{4}5^{j}\mid j=0,1,2\}=\{81,405,2025\},
    +\qquad
    +S_{5}=\{3^{i}5^{2}\mid i=0,1,2,3,4\}
    + =\{25,75,225,675,2025\}.
    +\]
    +
    +\(|S_{3}|=3,\ |S_{5}|=5,\) and \(|S_{3}\cap S_{5}|=1\) (the element \(2025\)).
    +
    +So we need subsets that intersect **both** \(S_{3}\) and \(S_{5}\).
    +
    +---
    +
    +### Counting such subsets
    +
    +Total subsets of \(A\): \(2^{15}\).
    +
    +Let  
    +
    +* \(A_{3}\) = subsets containing **no** element of \(S_{3}\).  
    +  \(|A_{3}| = 2^{15-3}=2^{12}\).
    +
    +* \(A_{5}\) = subsets containing **no** element of \(S_{5}\).  
    +  \(|A_{5}| = 2^{15-5}=2^{10}\).
    +
    +* \(A_{3}\cap A_{5}\) = subsets containing none of \(S_{3}\cup S_{5}\).  
    +  \(|S_{3}\cup S_{5}| = 3+5-1 = 7\), so  
    +  \(|A_{3}\cap A_{5}| = 2^{15-7}=2^{8}\).
    +
    +By inclusion–exclusion, the number of subsets intersecting both \(S_{3}\) and \(S_{5}\) is  
    +
    +\[
    +2^{15} - 2^{12} - 2^{10} + 2^{8}
    + = 32768 - 4096 - 1024 + 256
    + = 27904.
    +\]
    +
    +Every such subset is non‑empty, so these are exactly the favorable subsets.
    +
    +---
    +
    +### Probability
    +
    +\[
    +\text{Probability}
    + = \frac{27904}{2^{15}}
    + = \frac{27904}{32768}
    + = \frac{109}{128}
    +\]
    +(after reducing the fraction).
    +
    +Thus \(m=109,\ n=128\) and  
    +
    +\[
    +m+n = 109+128 = 237.
    +\]
    +
    +\[
    +\boxed{237}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 237

    +

    Extracted Answer: 237

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Circle $\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\omega_2$ with radius 15. Points $C$ and $D$ lie on $\omega_2$ such that $\overline{BC}$ is a diameter of $\omega_2$ and $\overline{BC} \perp \overline{AD}$. The rectangle $EFGH$ is inscribed in $\omega_1$ such that $\overline{EF} \perp \overline{BC}$, $C$ is closer to $\overline{GH}$ than to $\overline{EF}$, and $D$ is closer to $\overline{FG}$ than to $\overline{EH}$, as shown. Triangles $\triangle DGF$ and $\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +* \(O\) be the centre of \(\omega _2\) (radius \(15\)),
    +* \(A\) be the centre of \(\omega _1\) (radius \(6\)),
    +* \(B\) the point where the two circles are internally tangent,
    +* \(C\) the antipode of \(B\) on \(\omega_2\) (\(BC\) is a diameter),
    +* \(D\) the point on \(\omega _2\) with \(AD\perp BC\).
    +
    +--------------------------------------------------------------------
    +### 1.  Choose coordinates  
    +
    +Place \(O\) at the origin and let the diameter \(BC\) be horizontal.
    +
    +\[
    +B=(15,0),\qquad C=(-15,0)
    +\]
    +
    +Since \(OA=15-6=9\) and \(A\) lies on \(OB\),
    +
    +\[
    +A=(9,0).
    +\]
    +
    +The line \(AD\) is perpendicular to the horizontal line \(BC\), so \(AD\) is the
    +vertical line through \(A\); intersecting \(\omega_2\) gives
    +
    +\[
    +D=(9,12)\quad\text{or}\quad D=(9,-12).
    +\]
    +
    +Because the rectangle will be placed above the centre of \(\omega_1\), we take  
    +
    +\[
    +D=(9,12).
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Describe the rectangle  
    +
    +Since the rectangle is **inscribed** in \(\omega_1\), all four of its vertices lie on
    +\(\omega_1\).  
    +Let the rectangle have centre at \(A\); because a rectangle’s circum‑centre is
    +the intersection of its diagonals, the centre must be the centre of the
    +circumscribing circle \(\omega_1\).
    +
    +Let  
    +
    +* half‑width \(w\) (distance from the centre to the right–hand side),
    +* half‑height \(h\) (distance from the centre to the top side).
    +
    +Then  
    +
    +\[
    +\begin{aligned}
    +x_R&=9+w, & x_L&=9-w,\\
    +y_T&=h,   & y_B&=-h .
    +\end{aligned}
    +\]
    +
    +The vertices are  
    +
    +\[
    +\begin{aligned}
    +E&(x_R,y_B)=(9+w,-h),\\
    +F&(x_R,y_T)=(9+w, h),\\
    +G&(x_L,y_T)=(9-w, h),\\
    +H&(x_L,y_B)=(9-w,-h).
    +\end{aligned}
    +\]
    +
    +Because the vertices lie on \(\omega_1\) (radius \(6\)),
    +
    +\[
    +w^{2}+h^{2}=6^{2}=36\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Use the area condition  
    +
    +The problem states that  
    +
    +\[
    +\text{Area}\,\triangle DGF=\text{Area}\,\triangle CHG .
    +\]
    +
    +*Triangle \(DGF\).*  
    +Its base is \(GF\) (the top side of the rectangle) of length \(2w\).  
    +Its height is the vertical distance from \(D\) to the line \(y=h\):
    +\(\;12-h\). Hence  
    +
    +\[
    +[\triangle DGF]=\tfrac12(2w)(12-h)=w(12-h).\tag{2}
    +\]
    +
    +*Triangle \(CHG\).*  
    +Its base is \(HG\) (the left side) of length \(2h\).  
    +The distance from \(C\) to the vertical line \(x=9-w\) is
    +\((9-w)-(-15)=24-w\). Therefore  
    +
    +\[
    +[\triangle CHG]=\tfrac12(2h)(24-w)=h(24-w).\tag{3}
    +\]
    +
    +Equating (2) and (3),
    +
    +\[
    +w(12-h)=h(24-w).\tag{4}
    +\]
    +
    +Expanding both sides gives  
    +
    +\[
    +12w-wh=24h-wh\Longrightarrow 12w=24h\Longrightarrow w=2h.\tag{5}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Solve for \(w\) and \(h\)
    +
    +Substituting \(w=2h\) into (1):
    +
    +\[
    +(2h)^2+h^2=36\quad\Longrightarrow\quad5h^{2}=36\quad\Longrightarrow\quad
    +h^{2}= \frac{36}{5},\qquad
    +h=\frac{6}{\sqrt5}=\frac{6\sqrt5}{5}.
    +\]
    +
    +Hence  
    +
    +\[
    +w=2h=\frac{12}{\sqrt5}= \frac{12\sqrt5}{5}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Area of the rectangle  
    +
    +The rectangle’s side lengths are \(2w\) and \(2h\), so its area is  
    +
    +\[
    +\text{Area}= (2w)(2h)=4wh=4\cdot(2h)h=8h^{2}
    +          =8\left(\frac{36}{5}\right)=\frac{288}{5}.
    +\]
    +
    +Thus the area is \(\displaystyle \frac{288}{5}\).
    +The numerator and denominator are relatively prime, so  
    +
    +\[
    +m=288,\qquad n=5,\qquad m+n=288+5=293.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{293}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 293

    +

    Extracted Answer: 293

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Alex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1.  Regions created by chords**
    +
    +If we start with a disc (one region) and draw a chord, the number of regions increases by  
    +
    +\[
    +\text{(number of interior intersections created by the new chord)}+1 .
    +\]
    +
    +Hence after drawing \(k\) chords the number of regions is  
    +
    +\[
    +R=1+k+I ,
    +\]
    +
    +where \(I\) is the total number of interior intersection points of the drawn chords (no three chords meet at a single interior point, which holds a.s. for random chords).
    +
    +In our problem \(k=27\) (the two diameters plus the 25 random chords), so  
    +
    +\[
    +R=28+I .
    +\]
    +
    +Thus we only need the expected value of \(I\).
    +
    +--------------------------------------------------------------------
    +
    +**Step 2.  Intersections involving the two fixed diameters**
    +
    +The two diameters intersect at the centre, contributing a deterministic intersection  
    +
    +\[
    +I_{\text{centre}}=1 .
    +\]
    +
    +A random chord intersects the **vertical** diameter iff its endpoints lie in opposite halves of the disc, i.e. one endpoint in \(\{Q_1,Q_4\}\) and the other in \(\{Q_2,Q_3\}\).  
    +Among the six possible unordered quadrant‑pairs for a chord, four satisfy this condition, so
    +
    +\[
    +P(\text{vertical intersection})=\frac{4}{6}=\frac23 .
    +\]
    +
    +The same reasoning holds for the **horizontal** diameter, giving  
    +
    +\[
    +P(\text{horizontal intersection})=\frac23 .
    +\]
    +
    +Hence for the 25 random chords
    +
    +\[
    +E[I_{\text{vert}}]=25\cdot\frac23=\frac{50}{3},\qquad   
    +E[I_{\text{horiz}}]=25\cdot\frac23=\frac{50}{3}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 3.  Intersections among the 25 random chords**
    +
    +Two random chords are independent.  
    +Each chord chooses an unordered pair of distinct quadrants uniformly from the six possibilities  
    +
    +\[
    +\{1,2\},\{2,3\},\{3,4\},\{4,1\} \ (\text{adjacent}),\qquad
    +\{1,3\},\{2,4\}\ (\text{opposite}).
    +\]
    +
    +Let the unordered pairs be \(S\) and \(T\).  
    +Their intersection size can be
    +
    +* **2** (the same pair) – probability \(1/6\);
    +* **1** (they share exactly one quadrant) – probability \(2/3\);
    +* **0** (disjoint) – probability \(1/6\).
    +
    +The disjoint case splits further:
    +
    +* Adjacent–adjacent (e.g. \(\{1,2\}\) with \(\{3,4\}\)) – chords never intersect.
    +* Opposite–opposite (e.g. \(\{1,3\}\) with \(\{2,4\}\)) – chords always intersect.
    +
    +Among the three unordered disjoint pairs, two are adjacent–adjacent and one is opposite–opposite; hence for ordered pairs
    +
    +\[
    +P(\text{disjoint, intersect})=\frac{2}{36}=\frac1{18},\qquad
    +P(\text{disjoint, no intersect})=\frac{4}{36}.
    +\]
    +
    +For the other two situations one can check (by considering the relative order of the points inside the quadrants) that
    +
    +* If the two chords have the **same** unordered pair (adjacent or opposite), the probability they intersect is \(\tfrac12\).
    +* If they **share exactly one quadrant**, the probability they intersect is also \(\tfrac12\).
    +
    +Collecting the contributions,
    +
    +\[
    +\begin{aligned}
    +P(\text{intersection}) &=
    +\underbrace{\frac{6}{36}\cdot\frac12}_{\text{same pair}}
    ++\underbrace{\frac{24}{36}\cdot\frac12}_{\text{share one quadrant}}
    ++\underbrace{\frac{2}{36}\cdot1}_{\text{disjoint opposite}}\\[2mm]
    +&=\frac{3}{36}+\frac{12}{36}+\frac{2}{36}
    +=\frac{17}{36}.
    +\end{aligned}
    +\]
    +
    +Thus for any unordered pair of the 25 random chords
    +
    +\[
    +p:=P(\text{they intersect})=\frac{17}{36}.
    +\]
    +
    +There are \(\binom{25}{2}=300\) such pairs, so
    +
    +\[
    +E[I_{\text{random}}]=300\cdot\frac{17}{36}
    +=\frac{300}{36}\cdot17
    +=\frac{25}{3}\cdot17
    +=\frac{425}{3}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 4.  Expected total number of interior intersections**
    +
    +\[
    +\begin{aligned}
    +E[I] &= I_{\text{centre}}
    +      +E[I_{\text{vert}}]
    +      +E[I_{\text{horiz}}]
    +      +E[I_{\text{random}}]  \\[2mm]
    +     &=1+\frac{50}{3}+\frac{50}{3}+\frac{425}{3} \\[2mm]
    +     &=1+\frac{525}{3}=1+175=176 .
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 5.  Expected number of regions**
    +
    +\[
    +E[R]=28+E[I]=28+176=204 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{204}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 204

    +

    Extracted Answer: 204

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let the sequence of rationals $ x_1, x_2, \ldots $ be defined such that $ x_1 = \frac{25}{11} $ and
    +$ x_{k+1} = \frac{1}{3} \left( x_k + \frac{1}{x_k} - 1 \right). $
    +$ x_{2025} $ can be expressed as $ \frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Outline**
    +
    +1.  Transform the recurrence for \(x_k\) into a simpler one.
    +
    +   Define  
    +
    +   \[
    +   w_k=\frac{x_k-1}{x_k+1}\quad\Longleftrightarrow\quad 
    +   x_k=\frac{1+w_k}{1-w_k}.
    +   \]
    +
    +   Substituting in  
    +
    +   \[
    +   x_{k+1}= \frac13\Bigl(x_k+\frac1{x_k}-1\Bigr)
    +   \]
    +
    +   gives after simplification  
    +
    +   \[
    +   w_{k+1}= \frac{3w_k^2-1}{2}. \tag{1}
    +   \]
    +
    +   The initial value is  
    +
    +   \[
    +   w_1=\frac{25/11-1}{25/11+1}=\frac{7}{18}.
    +   \]
    +
    +2.  Write \(w_k=\dfrac{a_k}{b_k}\) in lowest terms
    +   (\(a_k\) odd, \(b_k\) even).  
    +
    +   From (1),
    +
    +   \[
    +   w_{k+1}= \frac{3a_k^2-b_k^2}{2b_k^2}.
    +   \]
    +
    +   Because \(a_k\) is not divisible by 3, the numerator is always
    +   \(\equiv 3\pmod 9\); hence it contains exactly one factor 3.
    +   After canceling this factor we obtain
    +
    +   \[
    +   a_{k+1}= \frac{3a_k^2-b_k^2}{3},\qquad
    +   b_{k+1}= \frac{2b_k^2}{3}.
    +   \tag{2}
    +   \]
    +
    +   Consequently  
    +
    +   \[
    +   b_{k+1}= \frac{2}{3}b_k^{\,2}. \tag{3}
    +   \]
    +
    +3.  Determine a closed form for \(b_k\).
    +
    +   Write \(b_k=2^{\alpha_k}3^{\beta_k}\).
    +   From (3)
    +
    +   \[
    +   2^{\alpha_{k+1}}3^{\beta_{k+1}}
    +   =\frac{2}{3}\bigl(2^{\alpha_k}3^{\beta_k}\bigr)^2
    +   =2^{2\alpha_k+1}3^{2\beta_k-1},
    +   \]
    +
    +   whence  
    +
    +   \[
    +   \alpha_{k+1}=2\alpha_k+1,\qquad
    +   \beta_{k+1}=2\beta_k-1,
    +   \]
    +   with \(\alpha_1=1,\ \beta_1=2\).
    +
    +   Solving these linear recurrences gives  
    +
    +   \[
    +   \alpha_k = 2^{\,k}-1,\qquad
    +   \beta_k = 2^{\,k-1}+1 .
    +   \]
    +
    +   Therefore  
    +
    +   \[
    +   b_k = 2^{\,2^{k}-1}\,3^{\,2^{k-1}+1}. \tag{4}
    +   \]
    +
    +4.  Recover \(x_k\) from \(w_k\).
    +
    +   Since \(x_k=\dfrac{1+w_k}{1-w_k}\) and \(w_k=\dfrac{a_k}{b_k}\),
    +
    +   \[
    +   x_k=\frac{b_k+a_k}{\,b_k-a_k\,}= \frac{m_k}{n_k},
    +   \]
    +   where \(m_k=b_k+a_k,\ n_k=b_k-a_k\).  
    +   Because \(a_k\) is odd and \(b_k\) is even, \(m_k\) and \(n_k\) are odd,
    +   so \(\gcd(m_k,n_k)=1\).
    +
    +   Hence
    +
    +   \[
    +   m_k+n_k = (b_k+a_k)+(b_k-a_k)=2b_k.
    +   \]
    +
    +5.  Compute \(m_{2025}+n_{2025}\pmod{1000}\).
    +
    +   From (4),
    +
    +   \[
    +   b_{2025}=2^{\,2^{2025}-1}\,3^{\,2^{2024}+1},
    +   \qquad
    +   m_{2025}+n_{2025}=2b_{2025}
    +   =2^{\,2^{2025}}\,3^{\,2^{2024}+1}.
    +   \]
    +
    +   We need this value modulo \(1000=2^3\cdot5^3\).
    +
    +   *Modulo 8:* the exponent of 2 is at least 3, so the whole product
    +   is \(0\pmod8\).
    +
    +   *Modulo 125:* use Euler’s theorem (\(\phi(125)=100\)):
    +   \[
    +   2^{2^{2025}}\equiv2^{\,32}\pmod{125},\qquad
    +   3^{2^{2024}+1}\equiv3^{\,17}\pmod{125},
    +   \]
    +   because \(2^{2025}\equiv32\) and \(2^{2024}+1\equiv17\pmod{100}\).
    +
    +   Computing,
    +   \[
    +   2^{32}\equiv46,\qquad 3^{17}\equiv38\pmod{125},
    +   \]
    +   so
    +   \[
    +   2^{2^{2025}}3^{2^{2024}+1}\equiv46\cdot38\equiv123\pmod{125}.
    +   \]
    +
    +   Solve the simultaneous congruences
    +   \[
    +   X\equiv0\pmod8,\qquad X\equiv123\pmod{125}.
    +   \]
    +   Writing \(X=125a+123\) and using \(125\equiv5\pmod8\) gives
    +   \(5a+3\equiv0\pmod8\Rightarrow a\equiv1\pmod8\).
    +   Hence \(X=125\cdot1+123=248\).
    +
    +   Therefore  
    +
    +   \[
    +   m_{2025}+n_{2025}\equiv\boxed{248}\pmod{1000}.
    +   \]
    +
    +
    +

    Results

    +

    Correct Answer: 248

    +

    Extracted Answer: 248

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $ n $ values of $ x $ in the interval $ 0 < x < 2\pi $ where $ f(x) = \sin(7\pi \cdot \sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +f(x)=\sin\bigl(7\pi\sin (5x)\bigr)
    +\]
    +
    +The zeros of \(f\) occur when the inner sine gives an integer multiple of \(\pi\):
    +
    +\[
    +\sin\bigl(7\pi\sin (5x)\bigr)=0\Longleftrightarrow 7\pi\sin(5x)=k\pi
    +\Longleftrightarrow \sin(5x)=\frac{k}{7},
    +\qquad k\in\mathbb Z .
    +\]
    +
    +Because \(\sin(5x)\in[-1,1]\), \(|k|\le7\); thus \(k=-7,-6,\dots ,6,7\).
    +
    +---
    +
    +### 1.  Counting the zeros  
    +
    +Set \(\theta =5x\).  
    +When \(x\in(0,2\pi)\) we have \(\theta\in(0,10\pi)\).
    +
    +For each admissible integer \(k\) we need the number of solutions of  
    +
    +\[
    +\sin\theta=\frac{k}{7},\qquad \theta\in(0,10\pi).
    +\]
    +
    +* **\(k=0\):** \(\sin\theta=0\Rightarrow\theta=n\pi\).  
    +  Inside \((0,10\pi)\) we have \(n=1,2,\ldots ,9\) → **9 solutions**.
    +
    +* **\(k=\pm 7\):** \(\sin\theta=\pm1\).  
    +  \(\sin\theta=1\) gives \(\theta=\dfrac{\pi}{2}+2\pi n\);  
    +  \(\sin\theta=-1\) gives \(\theta=\dfrac{3\pi}{2}+2\pi n\).  
    +  For \(0<\theta<10\pi\) each yields \(n=0,1,2,3,4\) → **5 solutions** for \(k=7\) and **5** for \(k=-7\).
    +
    +* **\(k=\pm1,\pm2,\dots ,\pm6\):** \(|k|<7\) so \(-1<k/7<1\) and \(\neq0\).  
    +  In each full period \([0,2\pi]\) the equation \(\sin\theta=c\) (\(|c|<1\)) has two solutions.  
    +  The interval \((0,10\pi)\) contains five full periods, hence **\(5\times2=10\) solutions** for each of these 12 values of \(k\).
    +
    +Summing all contributions  
    +
    +\[
    +\begin{aligned}
    +n &=\underbrace{9}_{k=0}
    +   +\underbrace{5+5}_{k=\pm7}
    +   +\underbrace{12\times10}_{k=\pm1,\dots,\pm6}\\[2mm]
    +  &=9+10+120 = 139 .
    +\end{aligned}
    +\]
    +
    +Thus there are \(\boxed{139}\) zeros of \(f\) in \((0,2\pi)\).
    +
    +---
    +
    +### 2.  Zeros where the graph is tangent to the \(x\)-axis  
    +
    +A point where the graph touches the \(x\)-axis must satisfy  
    +
    +\[
    +f(x)=0\quad\text{and}\quad f'(x)=0.
    +\]
    +
    +From \(f(x)=0\) we have \(\sin(5x)=k/7\) as above.  
    +Compute the derivative:
    +
    +\[
    +\begin{aligned}
    +f'(x) &=\cos\bigl(7\pi\sin(5x)\bigr)\cdot 7\pi\cdot 5\cos(5x)   \\
    +      &=35\pi\cos\bigl(7\pi\sin(5x)\bigr)\cos(5x).
    +\end{aligned}
    +\]
    +
    +Thus \(f'(x)=0\) iff \(\cos(5x)=0\) (the factor \(\cos\bigl(7\pi\sin(5x)\bigr)\) never vanishes at a zero, because
    +\(\cos(k\pi)=\pm1\)).  
    +
    +\[
    +\cos(5x)=0\Longrightarrow 5x=\frac{\pi}{2}+n\pi\quad\Longrightarrow\quad\sin(5x)=\pm1.
    +\]
    +
    +Hence the tangential zeros correspond exactly to the solutions of \(\sin(5x)=\pm1\), i.e. the cases \(k=\pm7\).
    +
    +We already counted these:  
    +
    +* \(\sin(5x)=1\) gives \(5\) solutions,
    +* \(\sin(5x)=-1\) gives \(5\) solutions.
    +
    +Therefore  
    +
    +\[
    +t = 5+5 = 10 .
    +\]
    +
    +(Indeed, at these points \(f'(x)=0\) and \(f''(x)\neq0\), so the graph just touches the axis.)
    +
    +---
    +
    +### 3.  Required sum  
    +
    +\[
    +n+t = 139 + 10 = \boxed{149}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 149

    +

    Extracted Answer: 149

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +From an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.
    +
    +In general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +N=25q+r ,\qquad 0\le r<25 .
    +\]
    +
    +The greedy algorithm first takes \(q\) coins of 25 ¢, then  
    +\(t=\big\lfloor r/10\big\rfloor\) coins of 10 ¢ and finally  
    +\(s=r-10t\) pennies.  
    +
    +\[
    +\text{Greedy coins}=C_g(N)=q+t+s.
    +\]
    +
    +---
    +
    +### 1.  What is an optimal representation?
    +
    +If a representation uses \(a\) 25‑cent coins, \(b\) 10‑cent coins and \(c\) pennies, then  
    +
    +\[
    +25a+10b+c=N,\qquad a,b,c\ge0,
    +\]
    +and the number of coins is  
    +
    +\[
    +C= a+b+c = N-(24a+9b).
    +\]
    +
    +Thus **minimising the number of coins is equivalent to maximising**  
    +
    +\[
    +P=24a+9b \qquad\text{subject to}\qquad 25a+10b\le N .
    +\]
    +
    +The “profit’’ per cent is larger for a 25‑cent coin \((24/25)\) than for a 10‑cent coin \((9/10)\); therefore an optimal solution will use as many 25‑cent coins as possible unless removing a 25‑cent coin allows us to add enough 10‑cent coins to increase the profit.
    +
    +---
    +
    +### 2.  Effect of removing \(k\) quarters
    +
    +Let us replace \(k\) quarters by 10‑cent coins.  
    +Write \(r=10u+v\;(0\le v\le 9)\).  
    +After removing \(k\) quarters, the remainder becomes  
    +
    +\[
    +R=r+25k=10u+v+25k .
    +\]
    +
    +The maximal number of dimes that can be added is  
    +
    +\[
    +b'=\big\lfloor \frac{R}{10}\big\rfloor
    +   =u+ \big\lfloor 2.5k+\tfrac{v}{10}\big\rfloor .
    +\]
    +
    +The change in profit is
    +
    +\[
    +\Delta P
    +=-24k+9\big(b'-\big\lfloor r/10\big\rfloor\big)
    +=-6k+9\Big\lfloor\frac{k}{2}\Big\rfloor+9\delta ,
    +\]
    +
    +where  
    +
    +\[
    +\delta=
    +\begin{cases}
    +1 &\text{if }k\text{ is odd and }v\ge5,\\
    +0 &\text{otherwise.}
    +\end{cases}
    +\]
    +
    +*If \(k\) is even*, \(\Delta P=-3k/2<0\); the profit never increases.  
    +
    +*If \(k\) is odd*, write \(k=2m+1\). Then  
    +
    +\[
    +\Delta P=9\delta-(3m+6).
    +\]
    +
    +The only way \(\Delta P>0\) is when \(m=0\) (i.e. \(k=1\)) and \(\delta=1\),
    +which occurs exactly when  
    +
    +\[
    +v=r\bmod 10\ge5 .
    +\]
    +
    +Hence **the greedy algorithm fails precisely when**
    +\[
    +N\ge 25\quad\text{and}\quad (N\bmod 25)\bmod 10\ge5.
    +\]
    +
    +Equivalently, the “bad’’ remainders (after taking as many quarters as possible) are  
    +
    +\[
    +r\in\{5,6,7,8,9,15,16,17,18,19\}.
    +\]
    +
    +In each block of 25 consecutive integers there are 10 such remainders.
    +
    +---
    +
    +### 3.  Counting the failures between 1 and 1000
    +
    +The interval \([25,1000]\) contains \(1000-24=976\) integers.
    +From 25 onward the numbers are grouped into blocks  
    +
    +\[
    +25\!-\!49,\;50\!-\!74,\;\dots,\;975\!-\!999 .
    +\]
    +
    +There are \(39\) full blocks (the block \(25\!-\!49\) up to \(975\!-\!999\)).
    +Each block contributes exactly \(10\) failures, so
    +
    +\[
    +\#\text{failures}=39\times10=390 .
    +\]
    +
    +Numbers \(1\) through \(24\) are never failures (they contain no quarters).
    +
    +Thus the number of successes is  
    +
    +\[
    +1000-390=610 .
    +\]
    +
    +---
    +
    +\[
    +\boxed{610}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 610

    +

    Extracted Answer: 610

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    In a regular \(24\)-gon label the vertices \(0,1,\dots ,23\) clockwise.  
    +If two vertices differ by \(k\) (mod \(24\)), the chord joining them has length that depends only on  
    +
    +\[
    +s=\min (k,24-k)\qquad (1\le s\le 12).
    +\]
    +
    +Thus there are \(12\) possible lengths, one for each \(s=1,2,\dots ,12\).
    +
    +--------------------------------------------------------------------
    +### 1.  The graph of chords of a fixed length  
    +
    +Fix a value \(s\).  The set of all chords of that length is the edge‑set of the **circulant graph**
    +\[
    +G_s=\{\,\{i,i+s\}\mid i=0,1,\dots ,23\,\},
    +\]
    +where the addition is taken modulo \(24\).
    +
    +Let \(g=\gcd(s,24)\).  Adding \(s\) repeatedly splits the vertex set into \(g\) cycles,
    +each of length  
    +
    +\[
    +L=\frac{24}{g}.
    +\]
    +
    +So \(G_s\) is a disjoint union of \(g\) cycles \(C_L\).
    +
    +--------------------------------------------------------------------
    +### 2.  When can a perfect matching exist?
    +
    +A perfect matching (a set of \(12\) disjoint edges covering all vertices) can exist only if
    +every component cycle has even length, i.e. \(L\) is even.
    +Since \(L=24/g\), this is equivalent to \(g\mid 12\).
    +
    +*If \(g\mid 12\) and \(L\ge 4\)*, each even cycle \(C_L\) has exactly **2** perfect
    +matchings (choose alternating edges).  
    +*If \(L=2\)* (the case \(s=12\)), each component is a single edge and contributes only **1** matching.
    +
    +The only step for which \(g\nmid 12\) is \(s=8\) (here \(g=8\) and the components are 3‑cycles),
    +so no perfect matching exists for \(s=8\).
    +
    +--------------------------------------------------------------------
    +### 3.  Number of matchings for each possible length
    +
    +\[
    +\begin{array}{c|c|c|c}
    +s & g=\gcd(s,24) & L=24/g & \#\text{ matchings}\\ \hline
    +1 &1 &24 &2\\
    +2 &2 &12 &2^{2}=4\\
    +3 &3 & 8 &2^{3}=8\\
    +4 &4 & 6 &2^{4}=16\\
    +5 &1 &24 &2\\
    +6 &6 & 4 &2^{6}=64\\
    +7 &1 &24 &2\\
    +8 &8 & 3 &0\\
    +9 &3 & 8 &2^{3}=8\\
    +10&2 &12 &2^{2}=4\\
    +11&1 &24 &2\\
    +12&12& 2 &1
    +\end{array}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Total number of ways
    +
    +Add the numbers for all admissible lengths (all \(s\) except \(s=8\)):
    +
    +\[
    +\begin{aligned}
    +\text{Total}&=2+4+8+16+2+64+2+8+4+2+1\\
    +&=113 .
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{113}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 113

    +

    Extracted Answer: 113

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Sixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The chairs can be represented by a binary string of length 16, where a \(1\) means the chair is taken.  
    +We need strings with exactly eight \(1\)’s and with **no three consecutive \(1\)’s** (otherwise the middle person would sit next to two others).
    +
    +---
    +
    +### Counting by blocks
    +
    +A valid string consists of blocks of consecutive \(1\)’s of length 1 or 2, separated by at least one \(0\).
    +
    +Let  
    +
    +* \(t\) = number of blocks of length 2,  
    +* \(b\) = total number of blocks.  
    +
    +Since each block contributes at least one \(1\),
    +
    +\[
    +\underbrace{(b-t)}_{\text{blocks of length 1}}+2t=8\quad\Longrightarrow\quad b+ t=8,\; b=8-t .
    +\]
    +
    +So \(t=0,1,2,3,4\).
    +
    +For a fixed \(t\):
    +* Choose which of the \(b\) blocks are the length‑2 ones: \(\displaystyle\binom{b}{t}=\binom{8-t}{t}\).
    +* There are \(8-8=8\) empty chairs; let \(z=8\).  
    +  The \(b+1\) gaps (including the two ends) must contain these zeros, with at least one zero in each interior gap.  
    +  After placing one zero in each of the \(b-1\) interior gaps, we have \(z-(b-1)=9-b\) zeros left to distribute freely among the \(b+1\) gaps.  
    +  The number of ways is \(\displaystyle\binom{9-b}{b}=\binom{9}{b}\).
    +
    +Hence for each \(t\),
    +
    +\[
    +N_t=\binom{8-t}{t}\binom{9}{8-t}.
    +\]
    +
    +Summing over \(t=0\) to \(4\):
    +
    +\[
    +\begin{aligned}
    +N &=\binom{8}{0}\binom{9}{8}
    +   +\binom{7}{1}\binom{9}{7}
    +   +\binom{6}{2}\binom{9}{6}
    +   +\binom{5}{3}\binom{9}{5}
    +   +\binom{4}{4}\binom{9}{4} \\[2mm]
    +  &=1\cdot9+7\cdot36+15\cdot84+10\cdot126+1\cdot126\\
    +  &=9+252+1260+1260+126\\
    +  &=2907 .
    +\end{aligned}
    +\]
    +
    +---
    +
    +### Modulo 1000
    +
    +\[
    +2907 \equiv 907 \pmod{1000}.
    +\]
    +
    +---
    +
    +\[
    +\boxed{907}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 907

    +

    Extracted Answer: 907

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A_1A_2 \ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:
    +* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \leq i \leq 10 $,
    +* $ \cos(\angle A_iA_1A_{i+1}) = \frac{12}{13} $ for each $ 2 \leq i \leq 10 $,
    +* The perimeter of $ A_1A_2 \ldots A_{11} $ is 20.
    +If $ A_1A_2 + A_1A_{11} $ can be expressed as $ \frac{m\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +r_i=A_1A_i\qquad (i=2,\dots ,11),\qquad 
    +\theta=\angle A_iA_1A_{i+1}.
    +\]
    +
    +For each \(i=2,\dots ,10\)
    +
    +\[
    +\cos\theta=\frac{12}{13},\qquad 
    +\text{Area}(A_iA_1A_{i+1})=\frac12 r_i r_{i+1}\sin\theta =1 .
    +\]
    +
    +Since \(\sin\theta=\sqrt{1-\cos ^2\theta}=5/13\),
    +
    +\[
    +r_i r_{i+1}= \frac{2}{\sin\theta}= \frac{2}{5/13}= \frac{26}{5}
    +=:k\quad\text{(constant)}.
    +\]
    +
    +Thus  
    +
    +\[
    +r_{i+1}= \frac{k}{r_i},\qquad\text{so}\qquad r_{i+2}=r_i .
    +\]
    +
    +Hence the distances from \(A_1\) alternate:
    +
    +\[
    +r_2=r_4=r_6=r_8=r_{10}=a,\qquad  
    +r_3=r_5=r_7=r_9=r_{11}=b,
    +\]
    +
    +with  
    +
    +\[
    +ab=k=\frac{26}{5}.
    +\]
    +
    +--------------------------------------------------------------------
    +### Length of a side \(A_iA_{i+1}\)
    +
    +For any consecutive pair \((a,b)\),
    +
    +\[
    +A_iA_{i+1}=d=\sqrt{a^2+b^2-2ab\cos\theta}
    +           =\sqrt{a^2+b^2-\frac{24}{13}ab}.
    +\]
    +
    +Let  
    +
    +\[
    +x=a+b,\qquad ab=k .
    +\]
    +
    +Because \(a^2+b^2=(a+b)^2-2ab=x^2-2k\),
    +
    +\[
    +d=\sqrt{x^2-2k-\frac{24}{13}k}
    +   =\sqrt{x^2-\frac{50}{13}\,k}.
    +\]
    +
    +Since \(k=\dfrac{26}{5}\),
    +
    +\[
    +\frac{50}{13}k=\frac{50}{13}\cdot\frac{26}{5}=20,
    +\qquad\boxed{d=\sqrt{x^2-20}} .
    +\]
    +
    +--------------------------------------------------------------------
    +### Using the perimeter
    +
    +The perimeter of the 11‑gon is
    +
    +\[
    +a+b+9d = x+9\sqrt{x^2-20}=20 .
    +\]
    +
    +Solve for \(x\) (note \(x>0\) and \(\sqrt{x^2-20}\ge0\)):
    +
    +\[
    +9\sqrt{x^2-20}=20-x\quad\Longrightarrow\quad
    +81(x^2-20)=(20-x)^2 .
    +\]
    +
    +This gives  
    +
    +\[
    +80x^2+40x-2020=0\;\Longrightarrow\;4x^2+2x-101=0.
    +\]
    +
    +Hence  
    +
    +\[
    +x=\frac{-2\pm\sqrt{4+1616}}{8}
    +  =\frac{-2\pm18\sqrt5}{8}
    +  =\frac{-1\pm9\sqrt5}{4}.
    +\]
    +
    +Only the positive root satisfies the constraints, so  
    +
    +\[
    +\boxed{x=a+b=\frac{9\sqrt5-1}{4}} .
    +\]
    +
    +Thus
    +
    +\[
    +A_1A_2+A_1A_{11}=a+b=\frac{9\sqrt5-1}{4}
    +    =\frac{m\sqrt n-p}{q},
    +\]
    +
    +with \(m=9,\;n=5,\;p=1,\;q=4\).
    +
    +All conditions on \(m,n,p,q\) are met, and
    +
    +\[
    +m+n+p+q=9+5+1+4=19.
    +\]
    +
    +\[
    +\boxed{19}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 19

    +

    Extracted Answer: 19

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    In base \(b\) the numbers are  
    +
    +\[
    +17_{b}=1\cdot b+7=b+7, \qquad 97_{b}=9\cdot b+7=9b+7 .
    +\]
    +
    +We need \(b+7\) to divide \(9b+7\).
    +
    +---
    +
    +### Find the divisibility condition  
    +
    +\[
    +9b+7 = 9(b+7)-56 .
    +\]
    +
    +Thus the remainder when \(9b+7\) is divided by \(b+7\) is \(-56\).  
    +Hence \(b+7\) must divide \(56\):
    +
    +\[
    +b+7\mid 56 .
    +\]
    +
    +---
    +
    +### Possible values of \(b\)
    +
    +The positive divisors of \(56\) are  
    +
    +\[
    +1,\;2,\;4,\;7,\;8,\;14,\;28,\;56 .
    +\]
    +
    +Because the base must satisfy \(b>9\), we have \(b+7>16\).  
    +The divisors larger than \(16\) are \(28\) and \(56\).
    +
    +\[
    +\begin{aligned}
    +b+7&=28 \quad\Longrightarrow\quad b=21,\\[2pt]
    +b+7&=56 \quad\Longrightarrow\quad b=49 .
    +\end{aligned}
    +\]
    +
    +Both bases are greater than \(9\) and allow the digits \(1,7,9\).
    +
    +---
    +
    +### Sum of all such bases  
    +
    +\[
    +21+49 = 70.
    +\]
    +
    +\[
    +\boxed{70}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 70

    +

    Extracted Answer: 70

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The numbers of players picking chocolate, vanilla and strawberry are  
    +
    +\[
    +a=\#\text{chocolate},\qquad b=\#\text{vanilla},\qquad c=\#\text{strawberry}
    +\]
    +
    +with  
    +
    +\[
    +a+b+c=9,\qquad a>b>c\ge1 .
    +\]
    +
    +Hence \((a,b,c)\) must be three distinct positive integers whose sum is \(9\).  
    +The possible triples (written in decreasing order) are  
    +
    +\[
    +(6,2,1),\;(5,3,1),\;(4,3,2).
    +\]
    +
    +For a fixed triple \((a,b,c)\) the players are distinct, so the number of assignments
    +is the multinomial coefficient  
    +
    +\[
    +\binom{9}{a,b,c}= \frac{9!}{a!\,b!\,c!}.
    +\]
    +
    +Compute each term:
    +
    +\[
    +\begin{aligned}
    +(6,2,1):&\quad \frac{9!}{6!\,2!\,1!}= \frac{362880}{720\cdot2}=252,\\[2mm]
    +(5,3,1):&\quad \frac{9!}{5!\,3!\,1!}= \frac{362880}{120\cdot6}=504,\\[2mm]
    +(4,3,2):&\quad \frac{9!}{4!\,3!\,2!}= \frac{362880}{24\cdot6\cdot2}=1260.
    +\end{aligned}
    +\]
    +
    +Add them:
    +
    +\[
    +N = 252+504+1260 = 2016.
    +\]
    +
    +The remainder when \(N\) is divided by \(1000\) is  
    +
    +\[
    +2016 \equiv 16 \pmod{1000}.
    +\]
    +
    +\[
    +\boxed{16}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 16

    +

    Extracted Answer: 16

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ \triangle ABC $ be a right triangle with $ \angle A = 90^\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \sqrt{3} $ for some positive integer $ n $. Find $ n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +A=(0,0),\qquad B=(b,0),\qquad C=(0,c)
    +\]
    +
    +so that \(\angle A=90^{\circ}\) and  
    +
    +\[
    +BC=\sqrt{b^{2}+c^{2}}=38\qquad\Longrightarrow\qquad b^{2}+c^{2}=38^{2}=1444 .
    +\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Determining the positions of \(K\) and \(L\)
    +
    +Because  
    +
    +\[
    +AK=BK=14
    +\]
    +
    +the point \(K\) lies at the intersection of the circles of radius \(14\) centred at
    +\(A\) and \(B\).  
    +If \(K=(x_{K},y_{K})\),
    +
    +\[
    +x_{K}^{2}+y_{K}^{2}=196,\qquad (x_{K}-b)^{2}+y_{K}^{2}=196 .
    +\]
    +
    +Subtracting gives  
    +
    +\[
    +b^{2}=2bx_{K}\;\Longrightarrow\;x_{K}= \frac{b}{2} .
    +\tag{2}
    +\]
    +
    +Hence  
    +
    +\[
    +y_{K}^{2}=196-\Bigl(\frac{b}{2}\Bigr)^{2}=196-\frac{b^{2}}{4}.
    +\tag{3}
    +\]
    +
    +Similarly, from  
    +
    +\[
    +AL=CL=14
    +\]
    +
    +the point \(L=(x_{L},y_{L})\) satisfies
    +
    +\[
    +y_{L}= \frac{c}{2},\qquad 
    +x_{L}^{2}=196-\Bigl(\frac{c}{2}\Bigr)^{2}=196-\frac{c^{2}}{4}.
    +\tag{4}
    +\]
    +
    +Thus, writing  
    +
    +\[
    +U=\frac{b}{2},\quad V=\frac{c}{2},
    +\]
    +
    +we have  
    +
    +\[
    +K=\bigl(U,\;\sqrt{196-U^{2}}\bigr),\qquad 
    +L=\bigl(\sqrt{196-V^{2}},\;V\bigr),
    +\tag{5}
    +\]
    +
    +and from (1)  
    +
    +\[
    +U^{2}+V^{2}=361. \tag{6}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Using the condition \(KL=14\)
    +
    +From (5),
    +
    +\[
    +\bigl(U-\sqrt{196-V^{2}}\bigr)^{2}
    ++\bigl(\sqrt{196-U^{2}}-V\bigr)^{2}=196 .
    +\]
    +
    +Expanding and simplifying with (6) gives
    +
    +\[
    +U\sqrt{196-V^{2}}+V\sqrt{196-U^{2}}=98 . \tag{7}
    +\]
    +
    +Let  
    +
    +\[
    +p=\sqrt{196-V^{2}},\qquad q=\sqrt{196-U^{2}} .
    +\]
    +
    +Then  
    +
    +\[
    +U p+V q =98 ,\qquad p^{2}+q^{2}=31 ,
    +\qquad U^{2}+V^{2}=361 . \tag{8}
    +\]
    +
    +From (8) we obtain the product
    +
    +\[
    +U^{2}V^{2}=32448\quad\Longrightarrow\quad UV=104\sqrt3 . \tag{9}
    +\]
    +
    +Now  
    +
    +\[
    +(U+V)^{2}=U^{2}+V^{2}+2UV=361+208\sqrt3,
    +\]
    +\[
    +(U-V)^{2}=U^{2}+V^{2}-2UV=361-208\sqrt3 .
    +\]
    +
    +Both expressions are perfect squares:
    +
    +\[
    +361+208\sqrt3=(13+8\sqrt3)^{2},
    +\qquad
    +361-208\sqrt3=(8\sqrt3-13)^{2}.
    +\]
    +
    +Hence  
    +
    +\[
    +U+V=13+8\sqrt3,\qquad
    +|U-V|=8\sqrt3-13 .
    +\]
    +
    +Since \(U>V\), solving gives  
    +
    +\[
    +U=8\sqrt3,\qquad V=13 .
    +\]
    +
    +Consequently  
    +
    +\[
    +b=2U=16\sqrt3,\qquad c=2V=26 .
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Coordinates of \(K\) and \(L\)
    +
    +Using (5) with the found \(U,V\):
    +
    +\[
    +K=\bigl(8\sqrt3,\; \sqrt{196-(8\sqrt3)^{2}}\bigr)
    +   =\bigl(8\sqrt3,\;2\bigr),
    +\]
    +
    +\[
    +L=\bigl(\sqrt{196-13^{2}},\;13\bigr)
    +   =\bigl(3\sqrt3,\;13\bigr).
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Area of quadrilateral \(BKLC\)
    +
    +The vertices in order are  
    +
    +\[
    +B=(16\sqrt3,0),\ K=(8\sqrt3,2),\ L=(3\sqrt3,13),\ C=(0,26).
    +\]
    +
    +Applying the shoelace formula:
    +
    +\[
    +\begin{aligned}
    +S_{1}&=x_{B}y_{K}+x_{K}y_{L}+x_{L}y_{C}+x_{C}y_{B}\\
    +     &= (16\sqrt3)(2)+(8\sqrt3)(13)+(3\sqrt3)(26)+0\\
    +     &=32\sqrt3+104\sqrt3+78\sqrt3=214\sqrt3,
    +\\[2mm]
    +S_{2}&=y_{B}x_{K}+y_{K}x_{L}+y_{L}x_{C}+y_{C}x_{B}\\
    +     &=0+2(3\sqrt3)+13\cdot0+26(16\sqrt3)\\
    +     &=6\sqrt3+416\sqrt3=422\sqrt3 .
    +\end{aligned}
    +\]
    +
    +Hence  
    +
    +\[
    +\text{Area}=\frac12|S_{1}-S_{2}|
    +           =\frac12\bigl|214\sqrt3-422\sqrt3\bigr|
    +           =\frac12\,(208\sqrt3)=104\sqrt3 .
    +\]
    +
    +Thus the required area is \(104\sqrt3\), i.e. \(n=104\).
    +
    +\[
    +\boxed{104}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 104

    +

    Extracted Answer: 104

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The equation  
    +
    +\[
    +12x^{2}-xy-6y^{2}=0
    +\]
    +
    +can be factored over the integers.
    +
    +\[
    +\begin{aligned}
    +12x^{2}-xy-6y^{2}
    +&= (4x-3y)(3x+2y).
    +\end{aligned}
    +\]
    +
    +Hence a pair \((x,y)\) satisfies the equation iff  
    +
    +\[
    +4x-3y=0 \qquad\text{or}\qquad 3x+2y=0 .
    +\]
    +
    +---
    +
    +### 1.  Solutions of \(4x-3y=0\)
    +
    +\[
    +4x=3y \Longrightarrow x=\frac34y .
    +\]
    +
    +Since \(x,y\) are integers, \(y\) must be a multiple of \(4\); write \(y=4k\) \((k\in\mathbb Z)\).  
    +Then \(x=3k\).
    +
    +Bounds \(-100\le x,y\le100\) give  
    +
    +\[
    +|4k|\le100\ \Longrightarrow\ |k|\le25 .
    +\]
    +
    +Thus \(k\) can be any integer from \(-25\) to \(25\) inclusive – \(51\) possibilities.
    +
    +---
    +
    +### 2.  Solutions of \(3x+2y=0\)
    +
    +\[
    +3x=-2y \Longrightarrow x=-\frac{2}{3}y .
    +\]
    +
    +Now \(y\) must be a multiple of \(3\); write \(y=3k\).  
    +Then \(x=-2k\).
    +
    +Bounds give  
    +
    +\[
    +|3k|\le100\ \Longrightarrow\ |k|\le\Big\lfloor\frac{100}{3}\Big\rfloor=33 .
    +\]
    +
    +Hence \(k\) can be any integer from \(-33\) to \(33\) inclusive – \(67\) possibilities.
    +
    +---
    +
    +### 3.  Removing double‑counted pair
    +
    +Both families contain the pair \((0,0)\) (when \(k=0\)).  
    +It has been counted twice, so we subtract one.
    +
    +\[
    +\text{Total solutions}=51+67-1=117 .
    +\]
    +
    +All counted pairs satisfy \(-100\le x,y\le100\).
    +
    +\[
    +\boxed{117}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 117

    +

    Extracted Answer: 117

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +An isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \neq s$. Find $r^{2}+s^{2}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the trapezoid have parallel sides \(r\) and \(s\) (\(r\neq s\)), equal legs of length \(L\), height \(h\), and incircle radius \(R=3\).
    +
    +---
    +
    +### 1.  Semiperimeter from the incircle
    +
    +For any tangential quadrilateral,
    +\[
    +\text{Area}=R\cdot s,
    +\]
    +where \(s\) is the semiperimeter.  
    +Given \(\text{Area}=72\) and \(R=3\),
    +
    +\[
    +s=\frac{72}{3}=24,
    +\qquad\text{so } r+s+2L=2s=48. \tag{1}
    +\]
    +
    +---
    +
    +### 2.  Height of the trapezoid
    +
    +Since the incircle touches both parallel sides, the distance between them equals twice the radius:
    +
    +\[
    +h=2R=6.
    +\]
    +
    +The area also equals \(\frac{1}{2}(r+s)h\). Thus
    +
    +\[
    +72=\frac{1}{2}(r+s)\cdot6 \Longrightarrow r+s=24. \tag{2}
    +\]
    +
    +Substituting (2) into (1) gives
    +
    +\[
    +24+2L=48\Longrightarrow L=12. \tag{3}
    +\]
    +
    +---
    +
    +### 3.  Relating the bases and the leg
    +
    +In an isosceles trapezoid the horizontal projection of each leg is \(\dfrac{s-r}{2}\).
    +Using the right triangle formed by a leg, the height, and this projection:
    +
    +\[
    +\left(\frac{s-r}{2}\right)^2+h^2=L^2.
    +\]
    +
    +Insert \(h=6\) and \(L=12\):
    +
    +\[
    +\left(\frac{s-r}{2}\right)^2+36=144
    +\;\Longrightarrow\;
    +\frac{(s-r)^2}{4}=108
    +\;\Longrightarrow\;
    +(s-r)^2=432.
    +\]
    +
    +Hence
    +
    +\[
    +s-r=12\sqrt3. \tag{4}
    +\]
    +
    +---
    +
    +### 4.  Solve for \(r\) and \(s\)
    +
    +From (2) and (4):
    +
    +\[
    +\begin{cases}
    +r+s=24,\\[2pt]
    +s-r=12\sqrt3,
    +\end{cases}
    +\qquad\Longrightarrow\qquad
    +s=12+6\sqrt3,\;\; r=12-6\sqrt3.
    +\]
    +
    +Both are positive and distinct, as required.
    +
    +---
    +
    +### 5.  Compute \(r^{2}+s^{2}\)
    +
    +\[
    +\begin{aligned}
    +r^{2}+s^{2}&=(12-6\sqrt3)^2+(12+6\sqrt3)^2\\
    +&=2\cdot12^{2}+2\cdot(6\sqrt3)^{2}\\
    +&=2\cdot144+2\cdot108\\
    +&=288+216\\
    +&=504.
    +\end{aligned}
    +\]
    +
    +---
    +
    +\[
    +\boxed{504}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 504

    +

    Extracted Answer: 504

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    For an \(8\)-digit number formed with the digits \(1,2,\dots ,8\) each once we need
    +
    +* divisibility by \(2\)   \(\Longrightarrow\) the units digit is even (\(2,4,6,8\));
    +* divisibility by \(11\) \(\Longrightarrow\) the alternating sum of its digits is a multiple of \(11\).
    +
    +---
    +
    +### 1.  Divisibility by \(11\)
    +
    +Write the digits as \(d_1d_2d_3d_4d_5d_6d_7d_8\) ( \(d_1\) most significant).  
    +
    +The test for \(11\) gives  
    +
    +\[
    +(d_1+d_3+d_5+d_7)-(d_2+d_4+d_6+d_8)\equiv0\pmod{11}.
    +\]
    +
    +Let  
    +
    +\[
    +O=d_1+d_3+d_5+d_7,\qquad E=d_2+d_4+d_6+d_8 .
    +\]
    +
    +Since all eight digits are used once,  
    +
    +\[
    +O+E = 1+2+\dots+8 = 36 .
    +\]
    +
    +The condition \(O-E\equiv0\pmod{11}\) becomes  
    +
    +\[
    +2O\equiv36\pmod{11}\quad\Longrightarrow\quad O\equiv18\equiv7\pmod{11}.
    +\]
    +
    +The sum of four distinct digits from \(\{1,\dots ,8\}\) lies between \(10\) and \(26\); the only value congruent to \(7\pmod{11}\) in that range is \(18\).  
    +Hence we must have  
    +
    +\[
    +O=E=18.
    +\]
    +
    +So the four digits placed in the odd positions must sum to \(18\).
    +
    +---
    +
    +### 2.  Choosing the odd–position digits
    +
    +We need all \(4\)-element subsets of \(\{1,\dots ,8\}\) whose sum is \(18\).
    +
    +Listing them (in increasing order) gives
    +
    +\[
    +\begin{aligned}
    +&\{1,2,7,8\},\; \{1,3,6,8\},\; \{1,4,5,8\},\; \{1,4,6,7\},\\
    +&\{2,3,5,8\},\; \{2,3,6,7\},\; \{2,4,5,7\},\; \{3,4,5,6\}.
    +\end{aligned}
    +\]
    +
    +There are \(8\) such subsets.  
    +Each of them contains exactly two even digits (the even digits are \(2,4,6,8\)). Consequently the complementary set (the digits placed in even positions) also contains exactly two evens.
    +
    +---
    +
    +### 3.  Forming the numbers
    +
    +*For a fixed subset* \(S\) (the odd‑position digits)
    +
    +* arrange its four digits among the odd places \(1,3,5,7\): \(4!\) ways;
    +* the four remaining digits (the complement \(T\)) go to the even places \(2,4,6,8\).  
    +  Since \(T\) contains two even digits, we may pick which even digit occupies the units place (position \(8\)) in \(2\) ways; the other three digits can be placed in \(3!\) ways.
    +
    +Hence for each subset \(S\)
    +
    +\[
    +\text{permutations}=4!\times 2\times3!=24\times12=288 .
    +\]
    +
    +With \(8\) possible subsets,
    +
    +\[
    +N=8\times288=2304 .
    +\]
    +
    +(Equivalently, half of the \(4608\) numbers with \(O=E=18\) are even, giving the same result.)
    +
    +---
    +
    +### 4.  Required difference
    +
    +\[
    +N-2025 = 2304-2025 = 279.
    +\]
    +
    +Thus the requested difference is  
    +
    +\[
    +\boxed{279}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 279

    +

    Extracted Answer: 279

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Suppose $ \triangle ABC $ has angles $ \angle BAC = 84^\circ $, $ \angle ABC = 60^\circ $, and $ \angle ACB = 36^\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \overline{BC} $, $ \overline{AC} $, and $ \overline{AB} $, respectively. The circumcircle of $ \triangle DEF $ intersects $ \overline{BD} $, $ \overline{AE} $, and $ \overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \triangle DEF $ into six minor arcs, as shown. Find $ \widehat{DE} + 2 \cdot \widehat{HJ} + 3 \cdot \widehat{FG} $, where the arcs are measured in degrees.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    We place \(\triangle ABC\) on its circumcircle (radius 1) with  
    +
    +\[
    +A=1,\qquad B=e^{i2C},\qquad C=e^{i(2C+2A)} .
    +\]
    +
    +The orthocenter is  
    +
    +\[
    +H=a+b+c.
    +\]
    +
    +The nine‑point circle is the image of the circumcircle under the homothety with centre \(H\) and factor \(\tfrac12\); therefore for any point \(X\) on the nine‑point circle its image on the circumcircle is  
    +
    +\[
    +X' = 2X-H .
    +\]
    +
    +Applying this to the six points on the nine‑point circle gives
    +
    +\[
    +\begin{aligned}
    +D&\mapsto -a,\\
    +E&\mapsto -b,\\
    +F&\mapsto -c,\\
    +G&\mapsto A' ,\qquad A' \text{ is the second intersection of the altitude }AA_H\text{ with the circumcircle},\\
    +H&\mapsto B' ,\qquad B'=-e^{i2A},\\
    +J&\mapsto C' ,\qquad C'=-e^{-i2A}.
    +\end{aligned}
    +\]
    +
    +Using \(a=1,\;b=e^{i2C},\;c=e^{i(2C+2A)}\) we obtain the central
    +angles (measured from the positive \(x\)-axis) of the corresponding points:
    +
    +\[
    +\begin{array}{c|c}
    +\text{Nine‑point point} & \text{Angle on the circumcircle}\\ \hline
    +D & 180^\circ\\
    +E & 180^\circ+2C\\
    +F & 180^\circ-2B\\
    +G & 180^\circ+2A+4C\\
    +H & 180^\circ+2A\\
    +J & 180^\circ-2A
    +\end{array}
    +\]
    +
    +Because the homothety preserves directions from the centre, the
    +arc length on the nine‑point circle equals the corresponding central
    +angle on the circumcircle.
    +
    +Hence
    +
    +\[
    +\begin{aligned}
    +\widehat{DE}&=(180^\circ+2C)-180^\circ =2C,\\[2mm]
    +\widehat{HJ}&=|\, (180^\circ+2A)-(180^\circ-2A)\,|=4A,
    +\end{aligned}
    +\]
    +
    +and the minor arc \(HJ\) is \(360^\circ-4A\) (since \(4A>180^\circ\)).
    +Finally
    +
    +\[
    +\widehat{FG}=|(180^\circ-2B)-(180^\circ+2A+4C)|
    +            =2C\qquad(\text{mod }360^\circ).
    +\]
    +
    +Thus
    +
    +\[
    +\begin{aligned}
    +\widehat{DE}+2\widehat{HJ}+3\widehat{FG}
    +&=2C+2\bigl(360^\circ-4A\bigr)+3\,(2C) \\
    +&=720^\circ-8A+8C\\
    +&=720^\circ+8(C-A).
    +\end{aligned}
    +\]
    +
    +For the given triangle \(A=84^\circ,\;C=36^\circ\),
    +
    +\[
    +720^\circ+8(36^\circ-84^\circ)=720^\circ-384^\circ=336^\circ .
    +\]
    +
    +\[
    +\boxed{336}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 336

    +

    Extracted Answer: 336

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are exactly three positive real numbers $ k $ such that the function
    +$ f(x) = \frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $
    +defined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The function  
    +
    +\[
    +f(x)=\frac{(x-18)(x-72)(x-98)(x-k)}{x}, \qquad x>0,
    +\]
    +
    +has zeros at \(x=18,72,98,k\) and \(\displaystyle\lim_{x\to0^+}f(x)=+\infty\),
    +\(\displaystyle\lim_{x\to\infty}f(x)=+\infty\).
    +Hence the graph of \(f\) starts at \(+\infty\), descends to a negative
    +value, comes back to zero, rises again, etc.; it has exactly **two**
    +negative intervals:
    +\[
    +(r_1,r_2),\qquad (r_3,r_4),
    +\]
    +where \(\{r_1,r_2,r_3,r_4\}=\{18,72,98,k\}\) ordered increasingly.
    +In each negative interval there is a local (and global) minimum of \(f\).
    +
    +Let  
    +
    +\[
    +g(x)=(x-18)(x-72)(x-98)(x-k),
    +\qquad f(x)=\frac{g(x)}{x}.
    +\]
    +
    +A point \(x_0\) where \(f\) has an extremum satisfies  
    +
    +\[
    +f'(x_0)=0\iff x_0g'(x_0)-g(x_0)=0\iff 
    +\sum_{i=1}^{4}\frac{1}{x_0-r_i}= \frac1{x_0}.
    +\]
    +
    +Geometrically, if \(m=f(x_0)\) then the line \(y=m x\) is tangent to the
    +quartic graph \(y=g(x)\) at \(x_0\):
    +\[
    +g(x)-mx=0\quad\text{has a double root at }x_0 .
    +\]
    +
    +If the global minimum of \(f\) is attained at **two** distinct points,
    +the line \(y=m x\) must be tangent to \(g\) at two distinct points
    +\(\alpha,\beta\). Hence
    +
    +\[
    +g(x)-mx=(x-\alpha)^2 (x-\beta)^2 .
    +\tag{1}
    +\]
    +
    +Write  
    +
    +\[
    +\alpha+\beta=p,\qquad \alpha\beta =q,\qquad m \text{ (the slope)} .
    +\]
    +
    +Expanding (1) and comparing with \(g(x)-mx=x^4-S_1x^3+S_2x^2-(S_3+m)x+S_4\) gives  
    +
    +\[
    +\begin{aligned}
    +S_1 &=2p,\\
    +S_2 &=p^{2}+2q,\\
    +S_4 &=q^{2},\\
    +S_3+m &=2pq,
    +\end{aligned}
    +\tag{2}
    +\]
    +
    +where for our roots  
    +
    +\[
    +\begin{aligned}
    +S_1&=18+72+98+k=188+k,\\
    +S_2&=18\cdot72+18\cdot98+72\cdot98+ (18+72+98)k
    +     =10116+188k,\\
    +S_3&=18\cdot72\cdot98+ (18\cdot72+18\cdot98+72\cdot98)k
    +     =127008+10116k,\\
    +S_4&=18\cdot72\cdot98\cdot k=127008\,k .
    +\end{aligned}
    +\]
    +
    +From (2) we obtain  
    +
    +\[
    +p=\frac{188+k}{2},\qquad q=\sqrt{127008\,k}=252\sqrt{2k}.
    +\]
    +
    +Using the second equation of (2),
    +
    +\[
    +S_2=p^{2}+2q,
    +\]
    +
    +gives the condition on \(k\):
    +
    +\[
    +\frac{(188+k)^{2}}{4}+2\sqrt{127008k}=10116+188k .
    +\tag{3}
    +\]
    +
    +---
    +
    +### Solving (3)
    +
    +Put \(k=t^{2}\;(t>0)\).  Since \(\sqrt{127008k}=252\sqrt{2}\,t\),
    +(3) becomes
    +
    +\[
    +t^{4}-376t^{2}+2016\sqrt{2}\,t-5120=0 .
    +\]
    +
    +Factoring,
    +
    +\[
    +(t^{2}+6\sqrt{2}\,t-320)(t^{2}-6\sqrt{2}\,t+16)=0 .
    +\]
    +
    +Hence the positive solutions for \(t\) are
    +
    +\[
    +t=10\sqrt2,\qquad t=4\sqrt2,\qquad t=2\sqrt2 .
    +\]
    +
    +Consequently
    +
    +\[
    +k=t^{2}=200,\;32,\;8 .
    +\]
    +
    +---
    +
    +### Verification
    +
    +For each \(k\) the ordered roots of \(g\) are
    +
    +\[
    +\begin{array}{c|c}
    +k & \text{ordered roots }(r_1,r_2,r_3,r_4)\\ \hline
    +8  & (8,18,72,98)\\
    +32 & (18,32,72,98)\\
    +200& (18,72,98,200)
    +\end{array}
    +\]
    +
    +Using \(p\) and \(q\) we find the tangency points  
    +
    +\[
    +\alpha,\beta=\frac{p\pm\sqrt{p^{2}-4q}}{2},
    +\]
    +
    +and they lie respectively in the intervals \((r_1,r_2)\) and
    +\((r_3,r_4)\). Thus in each case the line \(y=m x\) is tangent to
    +\(g\) at two points, giving exactly two distinct global minima of
    +\(f\). No other \(k>0\) satisfies (3); hence these are the only three
    +values.
    +
    +Finally, the required sum is
    +
    +\[
    +8+32+200 = 240 .
    +\]
    +
    +\[
    +\boxed{240}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 240

    +

    Extracted Answer: 240

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\sqrt{-1}$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +z=x+iy\qquad (x,y\in\mathbb{R}).
    +\]
    +
    +---
    +
    +### 1.  The first equation – a circle  
    +
    +\[
    +|25+20i-z|=5 \Longrightarrow (x-25)^2+(y-20)^2=5^2 .
    +\]
    +
    +Thus the circle has centre  
    +
    +\[
    +C=(25,20),\qquad \text{radius } r=5 .
    +\]
    +
    +---
    +
    +### 2.  The second equation – a perpendicular bisector  
    +
    +\[
    +|z-(4+k)|=|z-(3i+k)|
    +\]
    +
    +writes as  
    +
    +\[
    +(x-(k+4))^2+y^{2}=(x-k)^2+(y-3)^2 .
    +\]
    +
    +Simplifying,
    +
    +\[
    +-8x+6y+8k+7=0\quad\Longrightarrow\quad 4x-3y-(4k+3.5)=0 .
    +\]
    +
    +Hence the set of points satisfying the second condition is the line  
    +
    +\[
    +L:\;4x-3y=4k+\frac 72 .
    +\]
    +
    +This is the perpendicular bisector of the segment joining  
    +\(A=(k+4,0)\) and \(B=(k,3)\) (its slope is \(4/3\) for any \(k\)).
    +
    +---
    +
    +### 3.  One intersection  \(\iff\)  tangency  
    +
    +The system has exactly one solution precisely when the line \(L\) is tangent to the circle, i.e. when the distance from the centre \(C\) to \(L\) equals the radius \(5\).
    +
    +The distance from \((x_0,y_0)\) to \(Ax+By+C=0\) is  
    +
    +\[
    +\frac{|Ax_0+By_0+C|}{\sqrt{A^2+B^2}} .
    +\]
    +
    +For \(C=(25,20)\) and \(L: 4x-3y-(4k+3.5)=0\),
    +
    +\[
    +d=\frac{|4\cdot25-3\cdot20-(4k+3.5)|}{\sqrt{4^{2}+(-3)^{2}}}
    +   =\frac{|40-4k-3.5|}{5}
    +   =\frac{|36.5-4k|}{5}.
    +\]
    +
    +Set \(d=r=5\):
    +
    +\[
    +\frac{|36.5-4k|}{5}=5\quad\Longrightarrow\quad |36.5-4k|=25 .
    +\]
    +
    +---
    +
    +### 4.  Solving for \(k\)
    +
    +\[
    +\begin{cases}
    +36.5-4k=25 &\Longrightarrow\;4k=11.5\;\Longrightarrow\;k=\dfrac{23}{8},\\[4pt]
    +36.5-4k=-25 &\Longrightarrow\;4k=61.5\;\Longrightarrow\;k=\dfrac{123}{8}.
    +\end{cases}
    +\]
    +
    +Thus the possible real values of \(k\) are  
    +
    +\[
    +k_1=\frac{23}{8},\qquad k_2=\frac{123}{8}.
    +\]
    +
    +Both give a line tangent to the circle, so each yields exactly one solution \(z\).
    +
    +---
    +
    +### 5.  Sum of the possible \(k\)’s  
    +
    +\[
    +k_1+k_2=\frac{23+123}{8}=\frac{146}{8}=\frac{73}{4}.
    +\]
    +
    +Write \(\frac{73}{4}\) as \(\dfrac{m}{n}\) with \(\gcd(m,n)=1\); here \(m=73,\ n=4\).
    +
    +\[
    +m+n=73+4=77.
    +\]
    +
    +\[
    +\boxed{77}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 77

    +

    Extracted Answer: 77

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let the sequence of rationals $ x_1, x_2, \ldots $ be defined such that $ x_1 = \frac{25}{11} $ and
    +$ x_{k+1} = \frac{1}{3} \left( x_k + \frac{1}{x_k} - 1 \right). $
    +$ x_{2025} $ can be expressed as $ \frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1.  Write the recurrence for the numerators and denominators**
    +
    +Let  
    +
    +\[
    +x_k=\frac{a_k}{b_k}\qquad (a_k,b_k\in \mathbb Z ,\; \gcd(a_k,b_k)=1).
    +\]
    +
    +From  
    +
    +\[
    +x_{k+1}= \frac{1}{3}\Bigl(x_k+\frac1{x_k}-1\Bigr)=\frac{x_k^2-x_k+1}{3x_k},
    +\]
    +
    +we obtain  
    +
    +\[
    +a_{k+1}=a_k^2-a_kb_k+b_k^2,\qquad   
    +b_{k+1}=3a_kb_k,          \tag{1}
    +\]
    +
    +with \(a_1=25,\;b_1=11\).
    +
    +--------------------------------------------------------------------
    +
    +**Step 2.  The common factor \(3^{e_k}\)**  
    +
    +Write  
    +
    +\[
    +a_k=3^{e_k}A_k,\qquad b_k=3^{e_k}B_k,\qquad \gcd(A_k,B_k)=1 .
    +\]
    +
    +Dividing (1) by the highest possible power of \(3\) shows that
    +\(e_{k+1}=2e_k+1\) and that the reduced pair \((A_k,B_k)\) always satisfies  
    +
    +\[
    +A_k\equiv1\pmod3,\qquad B_k\equiv2\pmod3 .
    +\]
    +
    +With \(e_1=0\) we get  
    +
    +\[
    +e_k=2^{\,k-1}-1 .\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 3.  A very simple recurrence for the sum**
    +
    +Let  
    +
    +\[
    +S_k=a_k+b_k .
    +\]
    +
    +From (1)
    +
    +\[
    +\begin{aligned}
    +S_{k+1}&=a_{k+1}+b_{k+1}
    +       =(a_k^2-a_kb_k+b_k^2)+3a_kb_k   \\
    +       &=a_k^2+b_k^2+2a_kb_k=(a_k+b_k)^2=S_k^{\,2}.
    +\end{aligned}
    +\]
    +
    +Hence  
    +
    +\[
    +S_k=S_1^{\,2^{\,k-1}}=36^{\,2^{\,k-1}}. \tag{3}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 4.  The reduced numerator and denominator**
    +
    +Since the common factor is \(3^{e_k}\),
    +
    +\[
    +\frac{a_k}{b_k}= \frac{A_k}{B_k},\qquad 
    +m=A_k,\; n=B_k .
    +\]
    +
    +Thus  
    +
    +\[
    +m+n=\frac{a_k+b_k}{3^{e_k}}
    +     =\frac{36^{\,2^{\,k-1}}}{3^{\,2^{\,k-1}-1}}
    +     =2^{\,2^{\,k}}\;3^{\,2^{\,k-1}+1}. \tag{4}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 5.  Apply \(k=2025\)**  
    +
    +From (4),
    +
    +\[
    +m+n=2^{\,2^{2025}}\;3^{\,2^{2024}+1}.
    +\]
    +
    +We need this number modulo \(1000\).
    +
    +--------------------------------------------------------------------
    +
    +**Step 6.  Reduce modulo \(8\) and \(125\)**  
    +
    +*Modulo \(8\):*  \(2^{\ge3}\equiv0\pmod8\); therefore  
    +
    +\[
    +m+n\equiv0\pmod8. \tag{5}
    +\]
    +
    +*Modulo \(125\):*  Because \(\phi(125)=100\),
    +
    +\[
    +2^{2^{2025}}\equiv 2^{\,2^{2025}\bmod100},
    +\qquad
    +3^{2^{2024}+1}\equiv 3^{\,(2^{2024}+1)\bmod100}\pmod{125}.
    +\]
    +
    +Compute the exponents.
    +
    +- \(2^{2025}\bmod100\):  
    +  \(2^{2025}\equiv32\pmod{100}\) (by CRT: \(2^{2025}\equiv0\pmod4\), \(2^{2025}\equiv7\pmod{25}\)).
    +- \(2^{2024}\bmod100\):  
    +  \(2^{2024}\equiv16\pmod{100}\).
    +
    +Hence  
    +
    +\[
    +2^{2^{2025}}\equiv2^{32}\equiv46\pmod{125},
    +\qquad
    +3^{2^{2024}+1}\equiv3^{17}\equiv38\pmod{125}.
    +\]
    +
    +Therefore  
    +
    +\[
    +m+n\equiv46\cdot38\equiv123\pmod{125}. \tag{6}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 7.  Chinese Remainder Theorem**
    +
    +Find \(N\) such that  
    +
    +\[
    +N\equiv0\pmod8,\qquad N\equiv123\pmod{125}.
    +\]
    +
    +Write \(N=8k\).  Then \(8k\equiv123\pmod{125}\), i.e.  
    +
    +\[
    +k\equiv123\cdot8^{-1}\pmod{125}.
    +\]
    +
    +Since \(8^{-1}\equiv47\pmod{125}\),  
    +
    +\[
    +k\equiv123\cdot47\equiv31\pmod{125}.
    +\]
    +
    +Thus \(k=31+125t\) and  
    +
    +\[
    +N=8k=8\cdot31=248\pmod{1000}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Answer**
    +
    +\[
    +\boxed{248}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 248

    +

    Extracted Answer: 248

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +A<B<C<D<E<F<G<H<I<J<K<L
    +\]
    +
    +and suppose the letters are randomly paired.  
    +For a pair \(\{x,y\}\) we write the word \(xy\) with the letters in
    +alphabetical order (\(x<y\)).  
    +The six words are then ordered alphabetically; the last word is the
    +lexicographically largest word.
    +
    +--------------------------------------------------------------------
    +### 1.  Conditioning on the partner of \(G\)
    +
    +In a random perfect matching each of the other \(11\) letters is equally
    +likely to be paired with \(G\).  
    +Let the partner be \(X\).  The probability we need is  
    +
    +\[
    +P=\frac1{11}\sum_{X\neq G}
    +\Pr\bigl(\text{the pair } \{G,X\}\text{ is the maximal word}\mid
    +G\text{ is paired with }X\bigr).
    +\]
    +
    +Thus we must evaluate the conditional probability for each possible
    +\(X\).
    +
    +--------------------------------------------------------------------
    +### 2.  When \(X<G\)
    +
    +If \(X<G\) the word is \(XG\) and its first letter is \(X\).  
    +For it to be the maximal word, the first letters (the smaller letters)
    +of all other five pairs must be **smaller than \(X\)**.
    +Hence among the remaining ten letters we need five distinct letters
    +all less than \(X\).
    +
    +The only letter with five smaller letters is \(F\) (the letters
    +\(A,B,C,D,E\) are smaller).  
    +Thus:
    +
    +* \(X=F\) is possible;
    +* \(X=A,B,C,D,E\) are impossible (there are not enough smaller
    +letters).
    +
    +When \(X=F\) the remaining letters are  
    +\(\{A,B,C,D,E\}\) and \(\{H,I,J,K,L\}\).  
    +To keep every other pair’s first letter \(<F\), each of the five large
    +letters must be paired with a distinct small one.  
    +The number of such matchings is \(5!=120\).
    +
    +The total number of matchings of those ten letters is  
    +
    +\[
    +\frac{10!}{2^5\,5!}=945 .
    +\]
    +
    +Hence  
    +
    +\[
    +\Pr(\text{maximal}\mid G\text{–}F)=\frac{120}{945}=\frac{8}{63}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  When \(X>G\)
    +
    +Now the word is \(GX\) and its first letter is \(G\).
    +For it to be maximal, **no other pair may have a first letter larger
    +than \(G\)**; i.e. no remaining pair may consist of two letters both
    +greater than \(G\).
    +
    +After fixing the pair \(\{G,X\}\) (with \(X\in\{H,I,J,K,L\}\)), the
    +remaining letters are
    +
    +* the six letters \(\{A,B,C,D,E,F\}\) (all \(<G\));
    +* the four letters among \(\{H,I,J,K,L\}\) that are not \(X\) (all
    +\(>G\)).
    +
    +Thus each of those four “large’’ letters must be paired with a distinct
    +small letter, leaving two small letters to pair together.
    +
    +Number of valid matchings:
    +
    +\[
    +\binom{6}{4}\cdot4!\cdot1=15\cdot24=360 .
    +\]
    +
    +Again the total number of matchings of the ten remaining letters is
    +\(945\). Therefore
    +
    +\[
    +\Pr(\text{maximal}\mid G\text{–}X)=\frac{360}{945}=\frac{8}{21}
    +\qquad (X=H,I,J,K,L).
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Assemble the probability
    +
    +\[
    +\begin{aligned}
    +P&=\frac1{11}\Bigl(\frac{8}{63}
    ++5\cdot\frac{8}{21}\Bigr)    \\
    + &=\frac1{11}\Bigl(\frac{8}{63}+\frac{40}{21}\Bigr)
    +   =\frac1{11}\Bigl(\frac{8+120}{63}\Bigr)
    +   =\frac{128}{693}.
    +\end{aligned}
    +\]
    +
    +The fraction \(\displaystyle\frac{128}{693}\) is already in lowest
    +terms.  Hence \(m=128,\;n=693\) and
    +
    +\[
    +m+n = 128+693 = 821 .
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{821}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 821

    +

    Extracted Answer: 821

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +S(t)=\sum_{a=1}^{3^{6}}\exp\!\Big(2\pi i\,\frac{t a^{3}}{3^{7}}\Big) \qquad(0\le t<3^{7})
    +\]
    +
    +and denote  
    +
    +\[
    +N=\#\{(a,b,c)\mid 1\le a,b,c\le 3^{6},
    +\ a^{3}+b^{3}+c^{3}\equiv 0\pmod{3^{7}}\}.
    +\]
    +
    +For any modulus \(m\),
    +
    +\[
    +\#\{(x,y,z):x+y+z\equiv0\pmod m\}=
    +\frac1m\sum_{t=0}^{m-1}\Bigl(\sum_{x}e^{2\pi i t x/m}\Bigr)^3 .
    +\]
    +
    +Hence  
    +
    +\[
    +N=\frac1{3^{7}}\sum_{t=0}^{3^{7}-1} S(t)^{3}. \tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Splitting the summation
    +
    +Write each \(a\) as \(a=3^{v}u\) where \(v=v_{3}(a)\) and \(u\) is not
    +divisible by \(3\).  
    +For \(0\le v\le 2\) define  
    +
    +\[
    +U_{v}=\{\,u:1\le u\le 3^{6-v},\;3\nmid u\,\},
    +\qquad |U_{0}|=486,\ |U_{1}|=162,\ |U_{2}|=54 .
    +\]
    +
    +If \(v\ge3\) then \(a^{3}\equiv0\pmod{3^{7}}\); there are  
    +\(n_{3}=27\) such numbers.
    +Thus
    +
    +\[
    +S(t)=f_{0}(t)+f_{1}(t)+f_{2}(t)+n_{3},
    +\]
    +where  
    +
    +\[
    +\begin{aligned}
    +f_{0}(t)&=\sum_{x\in U_{0}}\zeta^{t x^{3}},\\[2mm]
    +f_{1}(t)&=\sum_{x\in U_{1}}\zeta^{t\,27x^{3}},\\[2mm]
    +f_{2}(t)&=\sum_{x\in U_{2}}\zeta^{t\,729x^{3}},
    +\end{aligned}
    +\qquad 
    +\zeta=e^{2\pi i/3^{7}} .
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Evaluating \(f_{0},f_{1},f_{2}\)
    +
    +*For \(f_{0}\).*  
    +Let \(G_{7}=(\mathbb Z/3^{7}\mathbb Z)^{\times}\) (\(|G_{7}|=1458\)).
    +The map \(x\mapsto x^{3}\) from \(G_{7}\) onto the set of cubes
    +\(C_{6}\) has kernel of size \(3\); consequently
    +
    +\[
    +\sum_{x\in G_{7}}\zeta^{t x}=3\sum_{r\in C_{6}}\zeta^{t r}=3f_{0}(t).
    +\]
    +
    +For \(t\neq0\) one has  
    +
    +\[
    +\sum_{x\in G_{7}}\zeta^{t x}= -\!\!\sum_{\substack{x\;(\bmod 3^{7})\\3\mid x}}\!\!\zeta^{t x}
    +=\begin{cases}
    +-729,&v_{3}(t)=6,\\
    +0,&0\le v_{3}(t)\le5 .
    +\end{cases}
    +\]
    +
    +Hence  
    +
    +\[
    +f_{0}(t)=
    +\begin{cases}
    +486,&t=0,\\[2mm]
    +-243,&v_{3}(t)=6,\\[2mm]
    +0,&\text{otherwise.}
    +\end{cases}
    +\tag{2}
    +\]
    +
    +*For \(f_{1}\).*  
    +Writing each \(x\in U_{1}\) as \(x=v+81k\;(k=0,1,2)\) one finds
    +\(x^{3}\equiv v^{3}\pmod{81}\). Consequently  
    +
    +\[
    +f_{1}(t)=3\!\!\sum_{\substack{v\in(\mathbb Z/81)^{\times}}}\!
    +\exp\!\Big(2\pi i\,\frac{t v^{3}}{81}\Big).
    +\]
    +
    +Using again that the cube map on \((\mathbb Z/81)^{\times}\) has kernel
    +size \(3\),
    +
    +\[
    +f_{1}(t)=3\!\cdot\!3\!\!\sum_{r\in C_{1}}\!
    +\exp\!\Big(2\pi i\,\frac{t r}{81}\Big) ,
    +\]
    +
    +where \(C_{1}\) is the set of cube‑residues modulo \(81\) (\(|C_{1}|=18\)).
    +Now
    +
    +\[
    +\sum_{x\in(\mathbb Z/81)^{\times}}\exp\!\Big(2\pi i\,
    +\frac{t x}{81}\Big)=
    +\begin{cases}
    +54,&v_{3}(t)\ge4,\\[1mm]
    +-27,&v_{3}(t)=3,\\[1mm]
    +0,&v_{3}(t)\le2 .
    +\end{cases}
    +\]
    +
    +Thus
    +
    +\[
    +f_{1}(t)=
    +\begin{cases}
    +162,&v_{3}(t)\ge4,\\[2mm]
    +-81,&v_{3}(t)=3,\\[2mm]
    +0,&v_{3}(t)\le2 .
    +\end{cases}
    +\tag{3}
    +\]
    +
    +*For \(f_{2}\).*  
    +Here \(x^{3}\equiv x\pmod 3\), and among the \(54\) numbers in \(U_{2}\)
    +exactly half are \(\equiv1\pmod3\) and half \(\equiv2\pmod3\). Hence  
    +
    +\[
    +f_{2}(t)=27\bigl(\zeta^{t}+ \zeta^{2t}\bigr)=
    +\begin{cases}
    +-27,&v_{3}(t)=0,\\[2mm]
    +54,&v_{3}(t)\ge1 .
    +\end{cases}
    +\tag{4}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  The values of \(S(t)\)
    +
    +From (2)–(4) (and remembering the constant term \(n_{3}=27\))
    +
    +\[
    +S(t)=f_{0}(t)+f_{1}(t)+f_{2}(t)+27=
    +\begin{array}{c|c}
    +v_{3}(t) & S(t)\\ \hline
    +\infty\;(t=0) & 729\\
    +0 & 0\\
    +1 & 81\\
    +2 & 81\\
    +3 & 0\\
    +4 & 243\\
    +5 & 243\\
    +6 & 0
    +\end{array}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Computing \(N\)
    +
    +Only the classes with non‑zero \(S(t)\) contribute to (1).  
    +The numbers of \(t\) in each class are
    +
    +\[
    +\begin{array}{c|c}
    +v_{3}(t) & \#t\\ \hline
    +\infty & 1\\
    +0 & 1458\\
    +1 & 486\\
    +2 & 162\\
    +3 & 54\\
    +4 & 18\\
    +5 & 6\\
    +6 & 2
    +\end{array}
    +\]
    +
    +Hence
    +
    +\[
    +\begin{aligned}
    +N&=\frac1{3^{7}}\Bigl( 729^{3}
    ++ (486+162) \,81^{3}
    ++ (18+6)\,243^{3}\Bigr)\\[2mm]
    +&=\frac1{3^{7}}\Bigl(3^{18}+648\cdot3^{12}+24\cdot3^{15}\Bigr)\\
    +&=3^{5}\cdot2025 = 243\cdot2025 = 492\,075 .
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Remainder modulo \(1000\)
    +
    +\[
    +492\,075 \equiv 75 \pmod{1000}.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{75}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 735

    +

    Extracted Answer: 75

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +On $\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Overview**
    +
    +The given lengths on the sides of \(\triangle ABC\) give  
    +
    +\[
    +AD=4,\;DE=16,\;EB=8 \qquad\Longrightarrow\qquad AB=28,
    +\]
    +\[
    +AF=13,\;FG=52,\;GC=26 \qquad\Longrightarrow\qquad AC=91 .
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 1.  Two lines parallel to \(BC\)
    +
    +\[
    +\frac{AD}{AB}= \frac{4}{28}= \frac{1}{7},\qquad 
    +\frac{AF}{AC}= \frac{13}{91}= \frac{1}{7}.
    +\]
    +
    +Hence the points \(D\in AB\) and \(F\in AC\) divide the two sides in the same
    +ratio; therefore \(DF\parallel BC\).
    +
    +Similarly  
    +
    +\[
    +\frac{AE}{AB}= \frac{AD+DE}{AB}= \frac{20}{28}= \frac57,
    +\qquad 
    +\frac{AG}{AC}= \frac{AF+FG}{AC}= \frac{65}{91}= \frac57,
    +\]
    +
    +so \(E\in AB,\;G\in AC\) also give a line parallel to \(BC\); i.e. \(EG\parallel BC\).
    +
    +Thus the quadrilateral \(DEGF\) is bounded by two parallel sides \(DF,EG\) and
    +the two segments of the sides of the triangle, and it is the region between the
    +two similar triangles \(ADF\) and \(AEG\).
    +
    +--------------------------------------------------------------------
    +
    +### 2.  Area of \(\triangle ABC\)
    +
    +If \([XYZ]\) denotes area, similarity gives  
    +
    +\[
    +[ADF]=\Bigl(\frac{AD}{AB}\Bigr)^2[ABC]=\Bigl(\frac17\Bigr)^2[ABC]=\frac{[ABC]}{49},
    +\]
    +
    +\[
    +[AEG]=\Bigl(\frac{AE}{AB}\Bigr)\Bigl(\frac{AG}{AC}\Bigr)[ABC]
    +      =\frac57\cdot\frac57[ABC]=\frac{25}{49}[ABC].
    +\]
    +
    +Hence  
    +
    +\[
    +[DEGF]=[AEG]-[ADF]=\Bigl(\frac{25}{49}-\frac1{49}\Bigr)[ABC]
    +       =\frac{24}{49}[ABC].
    +\]
    +
    +Given \([DEGF]=288\),
    +
    +\[
    +\frac{24}{49}[ABC]=288\quad\Longrightarrow\quad[ABC]=288\cdot\frac{49}{24}
    +                  =12\cdot49=588.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 3.  Area of the heptagon \(AFNBCEM\)
    +
    +Place the triangle with \(A=(0,0),\;B=(28,0)\) and
    +\(C=(91\cos\theta,\,91\sin\theta)\).
    +Because \([ABC]=\tfrac12\cdot28\cdot91\sin\theta\),
    +
    +\[
    +\sin\theta=\frac{[ABC]}{1274}= \frac{588}{1274}= \frac{6}{13}.
    +\]
    +
    +Thus  
    +
    +\[
    +\cos\theta=\frac{\sqrt{1-\sin^2\theta}}{\,}= \frac{\sqrt{133}}{13}.
    +\]
    +
    +The coordinates of the relevant points are
    +
    +\[
    +\begin{aligned}
    +&F=(13\cos\theta,13\sin\theta)=(\sqrt{133},6), \\
    +&G=(65\cos\theta,65\sin\theta)=(5\sqrt{133},30),\\
    +&D=(4,0),\qquad
    +E=(20,0),\\
    +&M=2F-D=(2\sqrt{133}-4,12),\\
    +&N=2E-G=(40-5\sqrt{133},-30).
    +\end{aligned}
    +\]
    +
    +Using the shoelace formula for the polygon
    +\(A\,(0,0),\;F,\;N,\;B,\;C,\;E,\;M\) we obtain
    +
    +\[
    +\begin{aligned}
    +\sum (x_i y_{i+1}-y_i x_{i+1})
    +&= -240+840+1176-840+240 = 1176,\\[2mm]
    +\text{Area}&=\frac12\cdot1176=588.
    +\end{aligned}
    +\]
    +
    +Thus the heptagon \(AFNBCEM\) has the same area as \(\triangle ABC\).
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{588}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 588

    +

    Extracted Answer: 588

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The parabola with equation $y=x^{2}-4$ is rotated $60^{\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\frac{a-\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +P:\; y=x^{2}-4
    +\]
    +
    +and rotate \(P\) about the origin \(60^{\circ}\) counter‑clockwise.  
    +If \((x,y)\) is a point of \(P\) then its image \((X,Y)\) satisfies  
    +
    +\[
    +\begin{pmatrix}X\\Y\end{pmatrix}= 
    +\begin{pmatrix}\cos 60^\circ & -\sin 60^\circ\\[2pt] 
    +\sin 60^\circ & \ \cos 60^\circ\end{pmatrix}
    +\begin{pmatrix}x\\y\end{pmatrix},
    +\qquad 
    +\cos60^\circ=\frac12,\;\sin60^\circ=\frac{\sqrt3}{2}.
    +\]
    +
    +Hence  
    +
    +\[
    +X=\frac{x}{2}-\frac{\sqrt3}{2}y,\qquad
    +Y=\frac{\sqrt3}{2}x+\frac{y}{2}.
    +\]
    +
    +To obtain the equation of the rotated curve in the original \((x,y)\)–coordinates,
    +solve for \((x,y)\) in terms of \((X,Y)\) (rotate back by \(-60^\circ\)):
    +
    +\[
    +x = \frac{X}{2}+\frac{\sqrt3}{2}Y,\qquad
    +y = -\frac{\sqrt3}{2}X+\frac{Y}{2}.
    +\]
    +
    +Since the original points satisfy \(y=x^{2}-4\), substituting the expressions above gives the equation of the image:
    +
    +\[
    +x^{2}+2\sqrt3\,xy+3y^{2}+2\sqrt3\,x-2y-16=0. \tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### Intersection with the original parabola
    +
    +The intersection points satisfy simultaneously  
    +
    +\[
    +y=x^{2}-4\qquad\text{and}\qquad (1).
    +\]
    +
    +Substituting \(y=x^{2}-4\) into (1) yields
    +
    +\[
    +3x^{4}-25x^{2}+40+2\sqrt3\,x^{3}-6\sqrt3\,x=0.
    +\]
    +
    +Factor this quartic in the field \(\mathbb{Q}(\sqrt3)\):
    +
    +\[
    +\begin{aligned}
    +3x^{4}-25x^{2}+40+2\sqrt3\,x^{3}-6\sqrt3\,x
    +&=(x^{2}+\sqrt3\,x-4)\bigl(3x^{2}-\sqrt3\,x-10\bigr).
    +\end{aligned}
    +\]
    +
    +Thus the intersection points satisfy one of  
    +
    +\[
    +\begin{cases}
    +x^{2}+\sqrt3\,x-4=0,\\[2pt]
    +\text{or}\\[2pt]
    +3x^{2}-\sqrt3\,x-10=0 .
    +\end{cases}
    +\]
    +
    +--------------------------------------------------------------------
    +### Selecting the point in the fourth quadrant
    +
    +*From* \(x^{2}+\sqrt3\,x-4=0\)
    +
    +\[
    +x=\frac{-\sqrt3\pm\sqrt{19}}{2}.
    +\]
    +
    +The root \(\displaystyle x=\frac{-\sqrt3+\sqrt{19}}{2}>0\) gives  
    +
    +\[
    +y=x^{2}-4=\frac{11-\sqrt{57}}{2}-4=\frac{3-\sqrt{57}}{2}<0,
    +\]
    +
    +so \((x,y)\) lies in the fourth quadrant.
    +
    +*From* \(3x^{2}-\sqrt3\,x-10=0\)
    +
    +\[
    +x=\frac{\sqrt3\pm\sqrt{123}}{6},
    +\]
    +
    +which yields either \(y>0\) (first root) or \(x<0\) (second root); neither point is in the fourth quadrant.
    +
    +Hence the unique fourth‑quadrant intersection point is  
    +
    +\[
    +\Bigl(\frac{-\sqrt3+\sqrt{19}}{2}\,,\; \frac{3-\sqrt{57}}{2}\Bigr).
    +\]
    +
    +--------------------------------------------------------------------
    +### Required \(y\)-coordinate
    +
    +The \(y\)-coordinate is \(\displaystyle \frac{3-\sqrt{57}}{2}\).
    +
    +Write it as \(\frac{a-\sqrt{b}}{c}\) with \(a,b,c\) positive integers and \(\gcd(a,c)=1\):
    +\[
    +a=3,\qquad b=57,\qquad c=2.
    +\]
    +
    +Therefore  
    +
    +\[
    +a+b+c = 3+57+2 = 62.
    +\]
    +
    +\[
    +\boxed{62}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 62

    +

    Extracted Answer: 62

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Six points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \triangle BGE $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the line containing \(A,B,C,D,E,F\) be the \(x\)-axis.
    +
    +\[
    +A=(0,0),\qquad B=(b,0),\qquad C=(c,0),\qquad D=(d,0),\qquad 
    +E=(e,0),\qquad F=(f,0)
    +\]
    +
    +Because the points are in the order \(A,B,C,D,E,F\),
    +
    +\[
    +c-b=AC-AB,\; d-b=BD,\; e-c=CE,\; f-d=DF,\; f-0=AF.
    +\]
    +
    +Take \(A\) at the origin.  From the data
    +
    +\[
    +AC=26\implies c=26,
    +\]
    +\[
    +BD=22\implies d=b+22,
    +\]
    +\[
    +CE=31\implies e=c+31=57,
    +\]
    +\[
    +DF=33\implies f=d+33=b+55,
    +\]
    +\[
    +AF=73\implies f=73.
    +\]
    +
    +Hence \(b+55=73\Rightarrow b=18\).  
    +Thus the coordinates are  
    +
    +\[
    +B=(18,0),\; C=(26,0),\; D=(40,0),\; E=(57,0),\; F=(73,0).
    +\]
    +
    +---
    +
    +### Locate \(G\)
    +
    +\(G\) is off the line and satisfies  
    +
    +\[
    +CG=40,\qquad DG=30.
    +\]
    +
    +Let \(G=(x,y)\) with \(y\neq0\). Then  
    +
    +\[
    +(x-26)^2+y^{2}=40^{2}=1600,\tag{1}
    +\]
    +\[
    +(x-40)^2+y^{2}=30^{2}=900.\tag{2}
    +\]
    +
    +Subtract (2) from (1):
    +
    +\[
    +(x-26)^2-(x-40)^2=700.
    +\]
    +
    +Expanding,
    +
    +\[
    +[x^{2}-52x+676]-[x^{2}-80x+1600]=28x-924=700,
    +\]
    +\[
    +28x=1624\quad\Longrightarrow\quad x=58.
    +\]
    +
    +Plugging \(x=58\) into (2):
    +
    +\[
    +(58-40)^{2}+y^{2}=900\;\Longrightarrow\;18^{2}+y^{2}=900
    +\]
    +\[
    +y^{2}=576\;\Longrightarrow\;|y|=24.
    +\]
    +
    +So \(G=(58,\,24)\) (the point \((58,-24)\) gives the same area).
    +
    +---
    +
    +### Area of \(\triangle BGE\)
    +
    +Points \(B\) and \(E\) lie on the \(x\)-axis, so the base \(BE\) has length
    +
    +\[
    +BE = e-b = 57-18 = 39.
    +\]
    +
    +The altitude from \(G\) to the line \(BE\) (the \(x\)-axis) is \(|y| = 24\).
    +
    +Hence  
    +
    +\[
    +\text{Area} = \frac12 \times BE \times \text{height}
    += \frac12 \times 39 \times 24 = 468.
    +\]
    +
    +\[
    +\boxed{468}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 468

    +

    Extracted Answer: 468

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Find the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    We need the positive integers \(n\) such that  
    +
    +\[
    +n+2\mid 3(n+3)(n^{2}+9).
    +\]
    +
    +---
    +
    +### 1.  Replace \(n+2\) by a new variable  
    +
    +Let  
    +
    +\[
    +k=n+2\qquad (k\ge 3), \qquad n=k-2 .
    +\]
    +
    +Then  
    +
    +\[
    +\begin{aligned}
    +n+3 &= (k-2)+3 = k+1,\\[2pt]
    +n^{2}+9 &= (k-2)^{2}+9 = k^{2}-4k+13 .
    +\end{aligned}
    +\]
    +
    +Hence  
    +
    +\[
    +3(n+3)(n^{2}+9)=3(k+1)(k^{2}-4k+13).
    +\]
    +
    +The condition becomes  
    +
    +\[
    +k \mid 3(k+1)(k^{2}-4k+13).
    +\]
    +
    +---
    +
    +### 2.  Reduce modulo \(k\)
    +
    +Modulo \(k\),
    +
    +\[
    +k+1\equiv 1,\qquad k^{2}-4k+13\equiv 13,
    +\]
    +
    +because \(k\equiv 0\) gives \(k^{2}\equiv 0\) and \(-4k\equiv 0\).
    +
    +Thus  
    +
    +\[
    +3(k+1)(k^{2}-4k+13)\equiv 3\cdot 1\cdot 13=39 \pmod{k}.
    +\]
    +
    +Hence the divisibility condition is equivalent to  
    +
    +\[
    +k\mid 39.
    +\]
    +
    +---
    +
    +### 3.  Find admissible \(k\) and corresponding \(n\)
    +
    +The positive divisors of \(39\) are \(1,3,13,39\).
    +Since \(k=n+2\ge 3\), we keep  
    +
    +\[
    +k\in \{3,13,39\}.
    +\]
    +
    +Therefore  
    +
    +\[
    +n=k-2\in\{1,11,37\}.
    +\]
    +
    +All three values satisfy the original condition (a quick check confirms the division).
    +
    +---
    +
    +### 4.  Sum of all such \(n\)
    +
    +\[
    +1+11+37 = 49.
    +\]
    +
    +\[
    +\boxed{49}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 49

    +

    Extracted Answer: 49

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The inequalities
    +
    +\[
    +x-yz<y-zx<z-xy
    +\]
    +
    +with the plane \(x+y+z=75\) can be simplified.  
    +Write \(z=75-x-y\). Then
    +
    +\[
    +\begin{aligned}
    +y-zx-(x-yz) &= (y-x)(1+z)= (y-x)(76-x-y),\\
    +z-xy-(y-zx) &= (z-y)(1+x)= (75-x-2y)(1+x).
    +\end{aligned}
    +\]
    +
    +Thus the points on the plane satisfy  
    +
    +\[
    +(y-x)(76-x-y)>0,\qquad (75-x-2y)(1+x)>0 .
    +\tag{1}
    +\]
    +
    +Define in the \(xy\)-plane the lines  
    +
    +\[
    +\begin{aligned}
    +L_1 &: y=x,\\
    +L_2 &: x+y=76,\\
    +L_3 &: x=-1,\\
    +L_4 &: x+2y=75\;(y=(75-x)/2).
    +\end{aligned}
    +\]
    +
    +From (1) we obtain two possibilities for each product, giving four possible
    +intersections of half‑planes.  One of these intersections is empty; the other three
    +are convex.  The region for which both products in (1) are **positive** is
    +
    +\[
    +\begin{cases}
    +y>x,\\
    +x+y<76,\\
    +y<(75-x)/2,\\
    +x>-1,
    +\end{cases}
    +\]
    +
    +which in the \(xy\)-plane is the interior of the triangle with vertices
    +
    +\[
    +A(-1,-1),\qquad B(-1,38),\qquad C(25,25).
    +\]
    +
    +The other two regions are unbounded.  Hence the finite region is this triangle.
    +
    +---
    +
    +### Area in the \(xy\)-plane
    +
    +\[
    +\text{Area}_{xy}= \frac12\bigl|AB\times AC\bigr|
    +               =\frac12\bigl| (0,39)\times (26,26)\bigr|
    +               =\frac12\cdot1014 = 507 .
    +\]
    +
    +---
    +
    +### Area on the plane \(x+y+z=75\)
    +
    +The plane is given by \(z=75-x-y\).  Its area element satisfies  
    +
    +\[
    +dS = \sqrt{1+(\partial_xz)^2+(\partial_yz)^2}\;dx\,dy
    +    =\sqrt{1+1+1}\;dx\,dy =\sqrt3\,dx\,dy .
    +\]
    +
    +Hence  
    +
    +\[
    +\text{Area}_{\text{plane}} = \sqrt3\;\text{Area}_{xy}
    +                            = 507\sqrt3 .
    +\]
    +
    +So the area can be written as \(a\sqrt b\) with \(a=507,\ b=3\).
    +Therefore  
    +
    +\[
    +a+b = 507+3 = 510 .
    +\]
    +
    +\[
    +\boxed{510}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 510

    +

    Extracted Answer: 510

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +A piecewise linear periodic function is defined by $f(x)=\begin{cases}x&\text{if }x\in[-1,1)\\2-x&\text{if }x\in[1,3)\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\frac{a+b\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The intersection points satisfy  
    +
    +\[
    +y=f(x),\qquad x=34y^{2}\;( \ge 0).
    +\]
    +
    +Because \(f\) has period \(4\),
    +
    +\[
    +f(x)=\begin{cases}
    +x-4k ,&x\in[-1+4k,\,1+4k),\\[2mm]
    +2+4k-x ,&x\in[1+4k,\,3+4k),
    +\end{cases}\qquad k\in\mathbb Z .
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Equations for the two linear pieces  
    +
    +*Ascending piece*  \((x-4k)\):  
    +
    +\[
    +y=x-4k,\qquad x=34y^{2}
    +\Longrightarrow 34y^{2}-y-4k=0. \tag{1}
    +\]
    +
    +*Descending piece*  \((2+4k-x)\):  
    +
    +\[
    +y=2+4k-x,\qquad x=34y^{2}
    +\Longrightarrow 34y^{2}+y-(2+4k)=0. \tag{2}
    +\]
    +
    +Both are quadratics in \(y\); each can give at most two real roots.
    +
    +--------------------------------------------------------------------
    +### 2.  Which integers \(k\) give admissible roots?
    +
    +Because \(|y|\le 1\) (the range of \(f\)), the roots must lie in \([-1,1]\).
    +
    +*For (1):*  
    +The sum of the two roots equals \(\frac{1}{34}\); the product is \(-\frac{4k}{34}\).  
    +The discriminant must be non‑negative:
    +
    +\[
    +\Delta_1=1+544k\ge 0\Longrightarrow k\ge0 .
    +\]
    +
    +For a root to be in \([-1,1)\) we also need  
    +
    +\[
    +-1\le\frac{1\pm\sqrt{1+544k}}{68}<1 .
    +\]
    +
    +The last inequality forces \(k\le8\).  Hence (1) yields real admissible roots for  
    +
    +\[
    +k=0,1,\dots ,8 .
    +\]
    +
    +Both roots are in \([-1,1)\) for each of these values.
    +
    +*For (2):*  
    +\[
    +\Delta_2=273+544k\ge0\Longrightarrow k\ge0 .
    +\]
    +
    +The condition \(-1<y\le 1\) gives \(k\le8\).  
    +For \(k=0,\dots ,7\) both roots lie in \((-1,1]\); for \(k=8\) only the “\(+\)” root
    +\[
    +y=\frac{-1+\sqrt{273+544\cdot8}}{68}
    +      =\frac{-1+5\sqrt{185}}{68}
    +\]
    +remains in the interval (the “\(-\)” root is \(<-1\)).
    +
    +Thus  
    +
    +* (1) contributes \(2\) solutions for each \(k=0,\dots ,8\)  \(\Rightarrow 18\) points;  
    +* (2) contributes \(2\) solutions for each \(k=0,\dots ,7\) and \(1\) solution for \(k=8\)  \(\Rightarrow 17\) points.
    +
    +Hence there are \(35\) intersection points altogether.
    +
    +--------------------------------------------------------------------
    +### 3.  Sum of the \(y\)-coordinates  
    +
    +For each fixed \(k\) the sum of the two roots of (1) is, by Vieta,
    +
    +\[
    +\Sigma_{A}(k)=\frac{1}{34}.
    +\]
    +
    +So the total contribution of (1) is  
    +
    +\[
    +\sum_{k=0}^{8}\Sigma_{A}(k)=9\cdot\frac{1}{34}= \frac{9}{34}.
    +\]
    +
    +For (2), when both roots exist their sum is  
    +
    +\[
    +\Sigma_{B}(k)=-\frac{1}{34}.
    +\]
    +
    +Thus for \(k=0,\dots ,7\) the total is  
    +
    +\[
    +8\cdot\Bigl(-\frac{1}{34}\Bigr)=-\frac{8}{34}.
    +\]
    +
    +For \(k=8\) only the positive root remains:
    +
    +\[
    +y_{8}= \frac{-1+5\sqrt{185}}{68}.
    +\]
    +
    +Adding everything,
    +
    +\[
    +\begin{aligned}
    +\text{Sum of all }y
    +&=\frac{9}{34}-\frac{8}{34}+y_{8}
    +   =\frac{1}{34}+ \frac{-1+5\sqrt{185}}{68}\\[2mm]
    +&= \frac{2}{68}+ \frac{-1+5\sqrt{185}}{68}
    +   =\frac{1+5\sqrt{185}}{68}.
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Final answer  
    +
    +The sum is \(\displaystyle\frac{1+5\sqrt{185}}{68}\).  
    +Thus  
    +
    +\[
    +a=1,\; b=5,\; c=185,\; d=68,\qquad
    +a+b+c+d=1+5+185+68=259.
    +\]
    +
    +\[
    +\boxed{259}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 259

    +

    Extracted Answer: 259

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The 27 cells of a $3\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. 
    + | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | 
    + | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | 
    + | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | 
    + The number of different ways to fill such a grid can be written as $p^a\cdot q^b\cdot r^c\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\cdot a+q\cdot b+r\cdot c+s\cdot d$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the three rows be \(R_1,R_2,R_3\) and the three \(3\times3\) blocks be \(B_1,B_2,B_3\) (columns \(1\!-\!3,\;4\!-\!6,\;7\!-\!9\)).
    +Each row must be a permutation of \(\{1,\dots ,9\}\) and each block must also contain every digit once.
    +
    +--------------------------------------------------------------------
    +### 1.  Where does a digit appear in the three rows?
    +
    +For a fixed digit \(d\) its three copies (one in each row) must lie in three *different* blocks; otherwise a block would miss that digit.  
    +Thus for each digit we obtain a bijection  
    +
    +\[
    +\phi_d:\{1,2,3\}\longrightarrow\{1,2,3\},\qquad 
    +\phi_d(i)=\text{block containing }d\text{ in row }i .
    +\]
    +
    +So each digit corresponds to a permutation of the three blocks.  
    +There are six permutations, listed with the cells \((i,\phi(i))\) they occupy:
    +
    +\[
    +\begin{array}{c|c}
    +\text{perm.} & \text{cells}\\ \hline
    +(1)(2)(3) & (1,1),(2,2),(3,3)\\
    +(12) & (1,2),(2,1),(3,3)\\
    +(13) & (1,3),(2,2),(3,1)\\
    +(23) & (1,1),(2,3),(3,2)\\
    +(123) & (1,2),(2,3),(3,1)\\
    +(132) & (1,3),(2,1),(3,2)
    +\end{array}
    +\]
    +
    +Let \(x_1,\dots ,x_6\) be the numbers of digits that use the six permutations (in the order shown).  
    +Because each block must contain three digits from each row, each of the nine cells \((i,k)\) must be hit by exactly three digits, giving
    +
    +\[
    +\begin{aligned}
    +x_1+x_4 &=3, & x_2+x_5 &=3, & x_3+x_6 &=3,\\
    +x_2+x_6 &=3, & x_1+x_3 &=3, & x_4+x_5 &=3,\\
    +x_3+x_5 &=3, & x_4+x_6 &=3, & x_1+x_2 &=3 .
    +\end{aligned}
    +\]
    +
    +Solving, all solutions have the form  
    +
    +\[
    +(x_1,x_2,x_3,x_4,x_5,x_6)=(a,\,3-a,\,3-a,\,3-a,\,a,\,a),\qquad a\in\{0,1,2,3\}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Assign the digits to the permutations
    +
    +For a fixed \(a\) the number of ways to choose which digits get which permutation is
    +
    +\[
    +\frac{9!}{x_1!\,x_2!\,x_3!\,x_4!\,x_5!\,x_6!}
    +   =\frac{9!}{a!^{\,3}\,(3-a)!^{\,3}} .
    +\]
    +
    +Summing over the four possible values of \(a\),
    +
    +\[
    +\sum_{a=0}^3\frac{9!}{a!^{\,3}(3-a)!^{\,3}}
    +   =9!\Bigl(\frac1{3!^{\,3}}{0\choose0}^3
    +            +\frac1{3!^{\,3}}{3\choose1}^3
    +            +\frac1{3!^{\,3}}{3\choose2}^3
    +            +\frac1{3!^{\,3}}{3\choose3}^3\Bigr)
    +   =9!\,\frac{56}{216}
    +   =9!\,\frac{7}{27}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Order the digits inside each block
    +
    +Within a fixed block and a fixed row there are three column positions.
    +The three digits that belong to that macro‑cell can be placed in these
    +positions in \(3! = 6\) ways.
    +There are \(3\) rows \(\times\) \(3\) blocks \(=9\) such macro‑cells, giving a factor \(6^9\).
    +
    +--------------------------------------------------------------------
    +### 4.  Total number of fillings
    +
    +\[
    +N = \Bigl(9!\,\frac{7}{27}\Bigr)\,6^{9}
    +   = 2^{16}\,3^{10}\,5\,7^{2}.
    +\]
    +
    +Thus the factorisation uses the four distinct primes  
    +
    +\[
    +p=2,\;q=3,\;r=5,\;s=7,\qquad 
    +a=16,\;b=10,\;c=1,\;d=2 .
    +\]
    +
    +Finally,
    +
    +\[
    +p\,a+q\,b+r\,c+s\,d
    +   =2\cdot16+3\cdot10+5\cdot1+7\cdot2
    +   =32+30+5+14=81.
    +\]
    +
    +\[
    +\boxed{81}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 81

    +

    Extracted Answer: 81

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\angle B=\angle E=60^\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    We place the pentagon in the plane.  
    +Set  
    +
    +\[
    +\begin{aligned}
    +A&=(7,7\sqrt3),\qquad B=(0,0),\qquad C=(7,0),\\[2mm]
    +D&=\Bigl(\frac{205}{7},\frac{36\sqrt3}{7}\Bigr),\qquad 
    +E=\Bigl(\frac{218}{7},\frac{88\sqrt3}{7}\Bigr).
    +\end{aligned}
    +\]
    +
    +The lengths are as given and  
    +\(\angle B=\angle E =60^\circ\).
    +
    +--------------------------------------------------------------------
    +### 1.  Geometry of the optimal point  
    +
    +For the sum  
    +
    +\[
    +f(X)=AX+BX+CX+DX+EX,
    +\]
    +
    +the geometric median \(X\) satisfies  
    +
    +\[
    +\frac{X-A}{AX}+\frac{X-B}{BX}+\frac{X-C}{CX}+\frac{X-D}{DX}+\frac{X-E}{EX}=0 .
    +\tag{1}
    +\]
    +
    +Because \(B,E\) lie on a line, the vectors \(\frac{X-B}{BX}\) and
    +\(\frac{X-E}{EX}\) are opposite exactly when \(X\) lies on segment \(BE\);
    +hence in the optimal position \(X\) must lie on \(BE\) and the first two
    +terms in (1) cancel.  Consequently
    +
    +\[
    +\frac{X-A}{AX}+\frac{X-C}{CX}+\frac{X-D}{DX}=0,
    +\]
    +
    +so \(X\) is the Fermat point of triangle \(ACD\).
    +
    +--------------------------------------------------------------------
    +### 2.  Fermat point of \(\triangle ACD\)
    +
    +The side lengths of \(\triangle ACD\) are  
    +
    +\[
    +AC=7\sqrt3,\qquad CD=24,\qquad AD=13\sqrt3 .
    +\]
    +
    +All its angles are \(<120^\circ\); therefore the Fermat point exists.
    +For a triangle with sides \(a,b,c\) and area \(\Delta\),
    +
    +\[
    +S_{\text{Fermat}}=
    +\sqrt{\frac{a^{2}+b^{2}+c^{2}+4\sqrt3\,\Delta}{2}} .
    +\]
    +
    +Here  
    +
    +\[
    +a^{2}+b^{2}+c^{2}=576+507+147=1230,
    +\qquad\Delta_{ACD}=78\sqrt3,
    +\]
    +
    +so  
    +
    +\[
    +S_{\text{Fermat}}=\sqrt{\frac{1230+4\sqrt3\cdot78\sqrt3}{2}}
    +=\sqrt{\frac{1230+936}{2}}=\sqrt{1083}=19\sqrt3 .
    +\]
    +
    +Thus at the Fermat point  
    +
    +\[
    +AX+CX+DX=19\sqrt3 .
    +\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  The total minimum
    +
    +Since the optimal point lies on \(BE\),
    +
    +\[
    +BX+EX = BE .
    +\]
    +
    +From the coordinates, \(BE=38\).  Combining this with (2),
    +
    +\[
    +f_{\min}= (AX+CX+DX)+(BX+EX)=19\sqrt3+38 .
    +\]
    +
    +Hence the smallest possible value of \(f(X)\) is  
    +
    +\[
    +\boxed{38+19\sqrt3}.
    +\]
    +
    +Writing it as \(m+n\sqrt p\) with \(m,n\) integers and \(p\) square‑free,
    +we have \(m=38,\;n=19,\;p=3\).  Therefore  
    +
    +\[
    +m+n+p=38+19+3=60 .
    +\]
    +
    +\[
    +\boxed{60}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 60

    +

    Extracted Answer: 60

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +The product $ \prod_{k=4}^{63} \frac{\log_k(5^{k^2-1})}{\log_{k+1}(5^{k^2-4})} = \frac{\log_4(5^{15})}{\log_5(5^{12})} \cdot \frac{\log_5(5^{24})}{\log_6(5^{21})} \cdot \frac{\log_6(5^{35})}{\log_7(5^{32})} \cdots \frac{\log_{63}(5^{3968})}{\log_{64}(5^{3965})} $ is equal to $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +P=\prod_{k=4}^{63}\frac{\log_k\!\bigl(5^{k^{2}-1}\bigr)}{\log_{k+1}\!\bigl(5^{k^{2}-4}\bigr)}
    +\]
    +
    +---
    +
    +### 1.  Simplify each factor  
    +
    +\[
    +\log_k\!\bigl(5^{k^{2}-1}\bigr)=(k^{2}-1)\log_k5,
    +\qquad 
    +\log_{k+1}\!\bigl(5^{k^{2}-4}\bigr)=(k^{2}-4)\log_{k+1}5 .
    +\]
    +
    +Hence  
    +
    +\[
    +\frac{\log_k\!\bigl(5^{k^{2}-1}\bigr)}{\log_{k+1}\!\bigl(5^{k^{2}-4}\bigr)}
    +=\frac{k^{2}-1}{k^{2}-4}\cdot\frac{\log_k5}{\log_{k+1}5}
    +=\frac{(k-1)(k+1)}{(k-2)(k+2)}\cdot\frac{\log_k5}{\log_{k+1}5}.
    +\]
    +
    +Therefore  
    +
    +\[
    +P=\underbrace{\prod_{k=4}^{63}\frac{(k-1)(k+1)}{(k-2)(k+2)}}_{A}
    +   \times\underbrace{\prod_{k=4}^{63}\frac{\log_k5}{\log_{k+1}5}}_{B}.
    +\]
    +
    +---
    +
    +### 2.  Evaluate the rational product \(A\)
    +
    +\[
    +A=\Bigl(\prod_{k=4}^{63}\frac{k-1}{k-2}\Bigr)
    +   \Bigl(\prod_{k=4}^{63}\frac{k+1}{k+2}\Bigr)
    +   =\frac{3\cdot4\cdots62}{2\cdot3\cdots61}\;
    +     \frac{5\cdot6\cdots64}{6\cdot7\cdots65}.
    +\]
    +
    +Both products telescope:
    +
    +\[
    +\frac{3\cdot4\cdots62}{2\cdot3\cdots61}= \frac{62}{2}=31,
    +\qquad 
    +\frac{5\cdot6\cdots64}{6\cdot7\cdots65}= \frac{5}{65}= \frac1{13}.
    +\]
    +
    +Thus  
    +
    +\[
    +A=31\cdot\frac1{13}= \frac{31}{13}.
    +\]
    +
    +---
    +
    +### 3.  Evaluate the logarithmic product \(B\)
    +
    +\[
    +B=\frac{\log_4 5}{\log_5 5}\cdot\frac{\log_5 5}{\log_6 5}\cdots
    +    \frac{\log_{63}5}{\log_{64}5}
    +   =\frac{\log_4 5}{\log_{64}5}.
    +\]
    +
    +Using change‑of‑base,
    +\[
    +\frac{\log_4 5}{\log_{64} 5}
    +   =\frac{\frac{\ln5}{\ln4}}{\frac{\ln5}{\ln64}}
    +   =\frac{\ln64}{\ln4}
    +   =\log_4 64=3,
    +\]
    +since \(4^3=64\).
    +
    +Hence \(B=3\).
    +
    +---
    +
    +### 4.  Combine
    +
    +\[
    +P=A\cdot B=\frac{31}{13}\times 3=\frac{93}{13}.
    +\]
    +
    +The fraction \(\dfrac{93}{13}\) is already in lowest terms, so  
    +\(m=93,\; n=13\).
    +
    +\[
    +m+n=93+13=106.
    +\]
    +
    +\[
    +\boxed{106}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 106

    +

    Extracted Answer: 106

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The divisors of  
    +
    +\[
    +2025=3^{4}\cdot5^{2}
    +\]
    +
    +are exactly the numbers  
    +
    +\[
    +3^{a}5^{b}\qquad (0\le a\le 4,\;0\le b\le 2).
    +\]
    +
    +Hence  
    +
    +\[
    +|A|=(4+1)(2+1)=15 .
    +\]
    +
    +For a subset \(B\subseteq A\) the least common multiple is
    +
    +\[
    +\operatorname{lcm}(B)=3^{\max a}\,5^{\max b},
    +\]
    +
    +where the maxima are taken over the exponents \((a,b)\) of the elements of \(B\).
    +
    +Thus \(\operatorname{lcm}(B)=2025=3^4 5^2\) iff  
    +
    +* at least one element of \(B\) has a \(3\)-exponent \(4\);
    +* at least one element of \(B\) has a \(5\)-exponent \(2\).
    +
    +Define  
    +
    +\[
    +D_3=\{d\in A : \text{the exponent of }3\text{ in }d\text{ is }4\},
    +\qquad 
    +D_5=\{d\in A : \text{the exponent of }5\text{ in }d\text{ is }2\}.
    +\]
    +
    +Counting:
    +
    +* \(D_3\): \(a=4\) and \(b=0,1,2\) ⇒ \(|D_3|=3\) (81, 405, 2025).
    +* \(D_5\): \(b=2\) and \(a=0,1,2,3,4\) ⇒ \(|D_5|=5\) (25, 75, 225, 675, 2025).
    +* The intersection is \(\{2025\}\); so \(|D_3\cap D_5|=1\).
    +
    +We need subsets that contain at least one element of \(D_3\) **and** at least one element of \(D_5\).
    +
    +Let the total number of subsets of \(A\) be \(2^{15}\).
    +Let  
    +
    +\[
    +\begin{aligned}
    +A_1 &=\{\text{subsets that contain no element of } D_3\},\\
    +A_2 &=\{\text{subsets that contain no element of } D_5\}.
    +\end{aligned}
    +\]
    +
    +Then  
    +
    +\[
    +|A_1|=2^{15-3}=2^{12},\qquad 
    +|A_2|=2^{15-5}=2^{10}.
    +\]
    +
    +Subsets avoiding **both** \(D_3\) and \(D_5\) avoid the union \(D_3\cup D_5\) which has  
    +
    +\[
    +|D_3\cup D_5|=|D_3|+|D_5|-|D_3\cap D_5|=3+5-1=7
    +\]
    +
    +elements. Hence  
    +
    +\[
    +|A_1\cap A_2|=2^{15-7}=2^{8}.
    +\]
    +
    +By inclusion–exclusion, the number of subsets that contain at least one element from each of \(D_3\) and \(D_5\) is  
    +
    +\[
    +\begin{aligned}
    +N &= 2^{15}-|A_1|-|A_2|+|A_1\cap A_2|\\
    +   &= 2^{15}-2^{12}-2^{10}+2^{8}\\
    +   &= 32768-4096-1024+256\\
    +   &= 27904.
    +\end{aligned}
    +\]
    +
    +All these subsets are non‑empty, so the required probability is  
    +
    +\[
    +\frac{N}{2^{15}}=\frac{27904}{32768}.
    +\]
    +
    +Simplifying,
    +
    +\[
    +\frac{27904}{32768}= \frac{27904\div 256}{32768\div 256}
    +                 = \frac{109}{128}.
    +\]
    +
    +Thus \(m=109,\; n=128\) and  
    +
    +\[
    +m+n = 109+128 = 237.
    +\]
    +
    +\[
    +\boxed{237}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 237

    +

    Extracted Answer: 237

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Four unit squares form a $2 \times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Label the twelve unit segments as in the picture  
    +
    +\[
    +\begin{array}{c}
    +\text{external: }a_1,a_2,b_1,b_2,c_1,c_2,d_1,d_2\\[2mm]
    +\text{internal: }e_1,e_2,f_1,f_2
    +\end{array}
    +\]
    +
    +The four unit squares are  
    +
    +\[
    +\begin{aligned}
    +\text{TL}&:\;a_1,c_1,e_1,f_1,\\
    +\text{TR}&:\;b_1,c_2,e_1,f_2,\\
    +\text{BL}&:\;a_2,d_1,e_2,f_1,\\
    +\text{BR}&:\;b_2,d_2,e_2,f_2 .
    +\end{aligned}
    +\]
    +
    +Each square must contain exactly two red sides (hence also two blue sides).
    +
    +--------------------------------------------------------------------
    +### 1.  Reduce to the four internal edges
    +
    +For a given square the two sides that are **internal** are already
    +colored once we decide the colors of the four internal edges  
    +\(e_1,e_2,f_1,f_2\).  
    +
    +Let  
    +
    +\[
    +r_{\rm TL}=e_1+f_1,\qquad
    +r_{\rm TR}=e_1+f_2,\qquad
    +r_{\rm BL}=e_2+f_1,\qquad
    +r_{\rm BR}=e_2+f_2 ,
    +\]
    +
    +where a red edge contributes 1 and a blue edge contributes 0.
    +If a square has \(r\) red internal sides, then it must have \(2-r\)
    +red external sides. Thus
    +
    +* if \(r=0\): both external sides are forced red – 1 way;
    +* if \(r=1\): exactly one of the two external sides must be red – 2 ways;
    +* if \(r=2\): both external sides are forced blue – 1 way.
    +
    +Hence for a fixed choice of the four internal edges the number of
    +admissible colourings of the eight external edges equals
    +
    +\[
    +2^{\,N_1},
    +\]
    +
    +where \(N_1\) is the number of squares among TL, TR, BL, BR that have
    +exactly one red internal side.
    +
    +--------------------------------------------------------------------
    +### 2.  Express \(N_1\) in terms of the internal edges
    +
    +Write  
    +
    +\[
    +X_1=e_1,\; X_2=e_2,\qquad Y_1=f_1,\;Y_2=f_2\qquad(\text{red}=1,\text{blue}=0).
    +\]
    +
    +For a square \((i,j)\) (\(i,j\in\{1,2\}\)) the number of red internal
    +sides is \(X_i+Y_j\).
    +Thus a square has exactly one red internal side precisely when
    +\(X_i\neq Y_j\).
    +
    +Let  
    +
    +\[
    +a=X_1+X_2\;(=0,1,2),\qquad b=Y_1+Y_2\;(=0,1,2).
    +\]
    +
    +The number of ordered pairs \((i,j)\) with \(X_i\neq Y_j\) is  
    +
    +\[
    +N_1=a(2-b)+(2-a)b
    +      =2\bigl(a+b-ab\bigr).
    +\]
    +
    +Consequently the contribution of a configuration with given
    +\(a,b\) is  
    +
    +\[
    +2^{N_1}=2^{\,2(a+b-ab)}=4^{\,a+b-ab}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Count all configurations of the internal edges
    +
    +There are \(\binom{2}{a}\) ways to choose which vertical internal edges
    +are red, and \(\binom{2}{b}\) ways to choose which horizontal internal
    +edges are red.  Hence the total number of colourings is
    +
    +\[
    +\sum_{a=0}^{2}\sum_{b=0}^{2}
    +\binom{2}{a}\binom{2}{b}\;4^{\,a+b-ab}.
    +\]
    +
    +Evaluating the double sum:
    +
    +\[
    +\begin{array}{c|ccc}
    +a\backslash b &0&1&2\\\hline
    +0 &1\cdot1\cdot1=1 &1\cdot2\cdot4=8 &1\cdot1\cdot16=16\\
    +1 &2\cdot1\cdot4=8 &2\cdot2\cdot4=16 &2\cdot1\cdot4=8\\
    +2 &1\cdot1\cdot16=16 &1\cdot2\cdot4=8 &1\cdot1\cdot1=1
    +\end{array}
    +\]
    +
    +Adding all entries:
    +
    +\[
    +1+8+16+8+16+8+16+8+1=82.
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Answer
    +
    +Thus there are  
    +
    +\[
    +\boxed{82}
    +\]
    +
    +different ways to colour the twelve unit segments so that each of the
    +four unit squares has two red sides and two blue sides.
    +
    +
    +

    Results

    +

    Correct Answer: 82

    +

    Extracted Answer: 82

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Circle $\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\omega_2$ with radius 15. Points $C$ and $D$ lie on $\omega_2$ such that $\overline{BC}$ is a diameter of $\omega_2$ and $\overline{BC} \perp \overline{AD}$. The rectangle $EFGH$ is inscribed in $\omega_1$ such that $\overline{EF} \perp \overline{BC}$, $C$ is closer to $\overline{GH}$ than to $\overline{EF}$, and $D$ is closer to $\overline{FG}$ than to $\overline{EH}$, as shown. Triangles $\triangle DGF$ and $\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The circles are drawn as in the figure.
    +
    +* Let \(O\) be the centre of \(\omega _2\) (radius \(15\)).
    +* Let \(A\) be the centre of \(\omega _1\) (radius \(6\)).
    +* Since \(\omega _1\) is internally tangent to \(\omega _2\) at \(B\), the three points are collinear and  
    +
    +\[
    +OA=15-6=9 .
    +\]
    +
    +Take a coordinate system with  
    +
    +\[
    +O=(0,0),\qquad A=(9,0),\qquad B=(15,0).
    +\]
    +
    +--------------------------------------------------------------------
    +### Points \(C\) and \(D\)
    +
    +\(BC\) is a diameter of \(\omega _2\); hence \(C\) is the antipode of \(B\):
    +
    +\[
    +C=(-15,0).
    +\]
    +
    +\(BC\perp AD\) means \(AD\) is the vertical line \(x=9\).  
    +Intersecting this line with \(\omega _2\) gives  
    +
    +\[
    +9^2+y^2=15^2 \Longrightarrow y=\pm 12 .
    +\]
    +
    +Because the later condition “\(D\) is nearer to \(FG\) than to \(EH\)” forces \(D\) to lie **below** the centre, we take  
    +
    +\[
    +D=(9,-12).
    +\]
    +
    +--------------------------------------------------------------------
    +### The rectangle \(EFGH\)
    +
    +The rectangle is inscribed in \(\omega _1\) and \(\overline{EF}\perp BC\); hence \(\overline{EF}\) is vertical.
    +Let
    +
    +\[
    +\begin{aligned}
    +E&=(9+w,\;h),\\[2pt]
    +F&=(9+w,\;-h),\\[2pt]
    +G&=(9-w,\;-h),\\[2pt]
    +H&=(9-w,\;h),
    +\end{aligned}
    +\]
    +
    +so that the centre of the rectangle is \(A\) (the intersection of the diagonals of an
    +inscribed rectangle is the centre of the circumcircle).
    +
    +Because the four vertices lie on \(\omega _1\),
    +
    +\[
    +(9\pm w-9)^2+h^2=w^{2}+h^{2}=6^{2}=36\qquad\Longrightarrow\qquad w^{2}+h^{2}=36. \tag{1}
    +\]
    +
    +The side \(\overline{EF}\) is the right vertical side, thus
    +\(C\) (which is far left) is nearer to \(\overline{GH}\) (the left side) than to \(\overline{EF}\);
    +and \(D\) (which is below the centre) is nearer to \(\overline{FG}\) (the bottom side) than to \(\overline{EH}\) (the top side).  
    +These statements only fix the labeling of the rectangle.
    +
    +--------------------------------------------------------------------
    +### Equality of the two triangular areas
    +
    +\[
    +\begin{aligned}
    +\text{Area}\,\triangle DGF
    +&=\frac12\bigl(\underbrace{2w}_{\text{base }GF}\bigr)
    +     \bigl(\underbrace{12-h}_{\text{vertical height}}\bigr)
    + = w(12-h),\\[4pt]
    +\text{Area}\,\triangle CHG
    +&=\frac12\bigl(\underbrace{2h}_{\text{base }HG}\bigr)
    +     \bigl(\underbrace{24-w}_{\text{horizontal distance}}\bigr)
    + = h(24-w).
    +\end{aligned}
    +\]
    +
    +Given that the two areas are equal,
    +
    +\[
    +w(12-h)=h(24-w)\; \Longrightarrow\; 12w=24h\; \Longrightarrow\; w=2h. \tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### Solving for \(w\) and \(h\)
    +
    +Substituting \(w=2h\) into (1):
    +
    +\[
    +(2h)^2+h^{2}=36\;\Longrightarrow\;5h^{2}=36\;\Longrightarrow\;h^{2}= \frac{36}{5}.
    +\]
    +
    +Hence  
    +
    +\[
    +h=\frac{6}{\sqrt5},\qquad w=2h=\frac{12}{\sqrt5}.
    +\]
    +
    +--------------------------------------------------------------------
    +### Area of the rectangle
    +
    +The rectangle’s side lengths are \(2w\) and \(2h\), so
    +
    +\[
    +\text{Area}= (2w)(2h)=4wh
    +          =4\left(\frac{12}{\sqrt5}\right)\left(\frac{6}{\sqrt5}\right)
    +          =4\cdot\frac{72}{5}
    +          =\frac{288}{5}.
    +\]
    +
    +Thus the area is \(\displaystyle\frac{m}{n}=\frac{288}{5}\) with relatively prime
    +\(m=288,\;n=5\).
    +
    +\[
    +m+n=288+5=293.
    +\]
    +
    +\[
    +\boxed{293}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 293

    +

    Extracted Answer: 293

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +From an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.
    +
    +In general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +N=25q+r ,\qquad 0\le r\le 24 .
    +\]
    +
    +The greedy algorithm takes  
    +
    +* \(q\) quarters,  
    +* \(\displaystyle d_0=\Big\lfloor\frac r{10}\Big\rfloor\) dimes,  
    +* \(s_0=r\bmod 10\) pennies.  
    +
    +Hence  
    +
    +\[
    +C_{\text{greedy}}=q+d_0+s_0 .\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  When can a better solution use fewer quarters?
    +
    +Suppose we use only \(q-k\) quarters, \(k\ge1\).  
    +The remaining amount is  
    +
    +\[
    +R=r+25k .
    +\]
    +
    +With only dimes and pennies the optimal way to make \(R\) is  
    +
    +\[
    +\Big\lfloor\frac{R}{10}\Big\rfloor\text{ dimes }+ (R\bmod10)\text{ pennies}.
    +\]
    +
    +Thus the total number of coins for this choice is  
    +
    +\[
    +C(q-k)=(q-k)+\Big\lfloor\frac{r+25k}{10}\Big\rfloor+(r+25k\bmod10).\tag{2}
    +\]
    +
    +Let  
    +
    +\[
    +\Delta(k)=C(q-k)-C_{\text{greedy}} .
    +\]
    +
    +Using \(r=10t+a\;(0\le a\le9,\;t\in\{0,1,2\})\) we obtain after a short calculation  
    +
    +\[
    +\Delta(k)=6k-9\Big\lfloor\frac{a+5k}{10}\Big\rfloor .\tag{3}
    +\]
    +
    +(Only the last digit \(a=r\bmod 10\) matters.)
    +
    +--------------------------------------------------------------------
    +### 2.  Sign of \(\Delta(k)\)
    +
    +*If \(a\ge5\):*  
    +Take \(k=1\).  Then \(\lfloor\frac{a+5}{10}\rfloor=1\) and  
    +
    +\[
    +\Delta(1)=6-9=-3<0 .
    +\]
    +
    +Hence a better solution exists (remove one quarter).
    +
    +*If \(a\le4\):*  
    +For any \(k\ge1\),
    +
    +\[
    +\Delta(k)=6k-9\Big\lfloor\frac{a+5k}{10}\Big\rfloor
    +\ge 6k-9\frac{a+5k}{10}=1.5k-0.9a .
    +\]
    +
    +Since \(a\le4\) this is positive for \(k=1,2\) (indeed \(\Delta(1)=6,\,\Delta(2)=3\)) and for larger \(k\) the term \(1.5k\) dominates, so \(\Delta(k)\ge0\) for all \(k\).
    +
    +Therefore **greedy fails iff**  
    +
    +\[
    +a=r\bmod10\ge5\quad\text{and}\quad q\ge1 .
    +\]
    +
    +Equivalently, for \(N\ge25\),
    +
    +\[
    +N\bmod25\in\{5,6,7,8,9,15,16,17,18,19\}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Counting the failures
    +
    +The residues above are ten out of the twenty‑five possible residues modulo \(25\).  
    +
    +In the interval \(1\le N\le1000\) we have \(1000/25=40\) full periods, so each residue occurs \(40\) times.  
    +
    +Thus the total number of integers with those residues is  
    +
    +\[
    +10\times40=400.
    +\]
    +
    +But the ten numbers \(5,6,7,8,9,15,16,17,18,19\) are \< 25, and for them greedy cannot remove a quarter (there are no quarters in any representation).  Those ten are **not** failures.  
    +
    +Hence the genuine failures are  
    +
    +\[
    +400-10=390.
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Successes
    +
    +There are \(1000\) integers from \(1\) to \(1000\).  Therefore the number of values for which the greedy algorithm *succeeds* is
    +
    +\[
    +1000-390=610.
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{610}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 610

    +

    Extracted Answer: 610

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are $ n $ values of $ x $ in the interval $ 0 < x < 2\pi $ where $ f(x) = \sin(7\pi \cdot \sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    \[
    +f(x)=\sin\bigl(7\pi\sin(5x)\bigr)
    +\]
    +
    +---
    +
    +### 1.  Zeros of \(f\)
    +
    +\(f(x)=0\iff 7\pi\sin(5x)=k\pi\) for an integer \(k\).
    +
    +\[
    +\sin(5x)=\frac{k}{7},\qquad |k|\le 7 .
    +\]
    +
    +Let  
    +
    +\[
    +y=5x\;(0<y<10\pi).
    +\]
    +
    +For each integer \(k\) with \(|k|\le7\) we count the solutions of \(\sin y=\dfrac{k}{7}\) in \((0,10\pi)\).
    +
    +* \(k=7\)  : \(\sin y=1\).  Solutions \(y=\frac{\pi}{2}+2\pi n\) \((n=0,1,2,3,4)\) → **5** solutions.  
    +* \(k=-7\) : \(\sin y=-1\).  Solutions \(y=\frac{3\pi}{2}+2\pi n\) \((n=0,1,2,3,4)\) → **5** solutions.  
    +* \(k=0\)  : \(\sin y=0\).  Solutions \(y=m\pi\;(m=1,2,\dots ,9)\) → **9** solutions.  
    +* For each \(k=\pm1,\pm2,\pm3,\pm4,\pm5,\pm6\) we have \(\sin y=c\) with \(-1<c<1,\;c\neq0\).  
    +  In each of the 5 full periods of \(\sin y\) there are exactly two such points, so **\(5\cdot2=10\)** solutions per \(k\).
    +
    +There are 12 values of \(k\) with \(|k|\in\{1,\dots ,6\}\), giving  
    +
    +\[
    +12\times10=120\text{ solutions}.
    +\]
    +
    +Adding all contributions,
    +
    +\[
    +n=5+5+9+120=139 .
    +\]
    +
    +---
    +
    +### 2.  Tangent zeros
    +
    +The graph is tangent to the \(x\)-axis at a zero where the derivative also vanishes.
    +
    +\[
    +f'(x)=\cos\bigl(7\pi\sin(5x)\bigr)\cdot 35\pi\cos(5x).
    +\]
    +
    +At a zero, \(\sin\bigl(7\pi\sin(5x)\bigr)=0\) gives \(\sin(5x)=\dfrac{k}{7}\).  
    +Because \(\cos\bigl(7\pi\sin(5x)\bigr)=\pm1\neq0\), we must have \(\cos(5x)=0\).
    +
    +\[
    +\cos(5x)=0\Longrightarrow \sin(5x)=\pm1 .
    +\]
    +
    +Thus tangential zeros occur exactly when \(\sin(5x)=\pm1\), i.e. for \(k=\pm7\).
    +
    +We already counted those solutions:  
    +
    +* \(\sin(5x)=1\) → 5 points,  
    +* \(\sin(5x)=-1\) → 5 points.
    +
    +Hence  
    +
    +\[
    +t=5+5=10 .
    +\]
    +
    +---
    +
    +### 3.  Required sum
    +
    +\[
    +n+t=139+10=149.
    +\]
    +
    +\[
    +\boxed{149}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 149

    +

    Extracted Answer: 149

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let the vertices of the regular \(24\)-gon be numbered \(0,1,\dots ,23\) (mod \(24\)).
    +If a segment joins vertex \(i\) to vertex \(j\) we call its **step**
    +\[
    +k\equiv j-i\pmod{24},\qquad 1\le k\le 12 .
    +\]
    +
    +The length of a chord depends only on this step:
    +the chord of step \(k\) has length  
    +
    +\[
    +\ell(k)=2R\sin\frac{\pi k}{24},\qquad 1\le k\le 12 .
    +\]
    +
    +Since \(\sin(\theta )\) is strictly increasing on \([0,\frac{\pi}{2}]\),
    +the lengths \(\ell(1),\ell(2),\dots ,\ell(12)\) are all distinct.
    +Thus a drawing in which all 12 segments have the same length must use
    +edges whose step is a fixed \(k\) (the same chord length).
    +
    +--------------------------------------------------------------------
    +
    +### 1.  The graph of step \(k\)
    +
    +Consider the undirected graph \(G_k\) whose vertices are the 24 polygon vertices
    +and whose edges are all chords of step \(k\) (i.e. the pairs \(\{i,i+k\}\)).
    +Each vertex of \(G_k\) is incident to two such chords
    +(\(i\) connects to \(i+k\) and to \(i-k\)), so \(G_k\) is a disjoint union of
    +cycles.
    +
    +Let  
    +
    +\[
    +d=\gcd(24,k).
    +\]
    +
    +Then the vertices split into \(d\) cycles, each of length  
    +
    +\[
    +\frac{24}{d}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 2.  When can a perfect matching be formed?
    +
    +A perfect matching can be taken inside one cycle only when the cycle has even
    +length.  Hence we need \(\frac{24}{d}\) even, i.e. \(d\neq 8\).  
    +
    +* If \(d=8\) (the case \(k=8\)) each component is a triangle; a triangle has
    +no perfect matching, so **no drawing** is possible.
    +
    +* If the cycle length is \(2\) (the case \(d=12,\;k=12\)), each component is a
    +single edge; there is exactly **one** perfect matching – the 12 diameters.
    +
    +* For any other admissible \(k\) the cycles have even length \(\ge4\).
    +Inside each such cycle there are exactly two ways to choose a perfect matching
    +(alternate edges).  Since the cycles are independent, the number of perfect
    +matchings for the given \(k\) is  
    +
    +\[
    +2^{\,d}\qquad (d=\gcd(24,k),\;d\neq 8,\;k\neq 12).
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 3.  Counting for each step
    +
    +\[
    +\begin{array}{c|c|c|c}
    +k & d=\gcd(24,k) & \text{cycle length }24/d & \#\text{ matchings}\\ \hline
    +1 & 1 & 24 & 2\\
    +2 & 2 & 12 & 2^{2}=4\\
    +3 & 3 & 8 & 2^{3}=8\\
    +4 & 4 & 6 & 2^{4}=16\\
    +5 & 1 & 24 & 2\\
    +6 & 6 & 4 & 2^{6}=64\\
    +7 & 1 & 24 & 2\\
    +8 & 8 & 3 & 0\\
    +9 & 3 & 8 & 2^{3}=8\\
    +10& 2 & 12& 2^{2}=4\\
    +11& 1 & 24& 2\\
    +12&12 & 2 & 1\ (\text{forced diameters})
    +\end{array}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +### 4.  Total number of drawings
    +
    +Add the numbers of matchings over all admissible steps:
    +
    +\[
    +\begin{aligned}
    +N&=2+4+8+16+2+64+2+8+4+2+1\\
    +&=113 .
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{113}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 113

    +

    Extracted Answer: 113

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Sixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The 8 occupied chairs must avoid a configuration where a person has two neighbours.  
    +Hence no three occupied chairs may be consecutive.
    +
    +Let a be the number of blocks of two consecutive occupied chairs.  
    +Each block of two contributes an extra occupied chair, so the total number of blocks is  
    +
    +\[
    +b = 8-a\qquad (0\le a\le 4).
    +\]
    +
    +*Choosing which blocks are of size 2*: \(\displaystyle \binom{b}{a}\).
    +
    +There are \(16-8=8\) empty chairs. Between the \(b\) blocks there must be at least one empty chair, using \(b-1\) empties.  
    +The remaining \(8-(b-1)=9-b\) empty chairs can be placed in the \(b+1\) gaps (before the first block, after the last, and the \(b-1\) internal gaps) without restriction.  
    +
    +Number of ways to distribute them:  
    +
    +\[
    +\binom{(9-b)+(b+1)-1}{(b+1)-1}= \binom{9}{b}.
    +\]
    +
    +Thus for a given \(a\),
    +
    +\[
    +\text{ways}= \binom{b}{a}\binom{9}{b}
    +          =\binom{8-a}{a}\binom{9}{8-a}.
    +\]
    +
    +Summing over \(a=0,1,2,3,4\),
    +
    +\[
    +\begin{aligned}
    +N &=\binom{8}{0}\binom{9}{8} 
    +   +\binom{7}{1}\binom{9}{7}
    +   +\binom{6}{2}\binom{9}{6}
    +   +\binom{5}{3}\binom{9}{5}
    +   +\binom{4}{4}\binom{9}{4} \\[2mm]
    +  &= 1\cdot 9 + 7\cdot 36 + 15\cdot 84 + 10\cdot 126 + 1\cdot126\\
    +  &= 9+252+1260+1260+126 = 2907.
    +\end{aligned}
    +\]
    +
    +Therefore  
    +
    +\[
    +N \equiv 2907 \pmod{1000}=907.
    +\]
    +
    +\[
    +\boxed{907}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 907

    +

    Extracted Answer: 907

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ A_1A_2 \ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:
    +* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \leq i \leq 10 $,
    +* $ \cos(\angle A_iA_1A_{i+1}) = \frac{12}{13} $ for each $ 2 \leq i \leq 10 $,
    +* The perimeter of $ A_1A_2 \ldots A_{11} $ is 20.
    +If $ A_1A_2 + A_1A_{11} $ can be expressed as $ \frac{m\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +r_i=|A_1A_i| \qquad (i=2,\dots ,11)
    +\]
    +
    +and denote  
    +
    +\[
    +\theta=\angle A_iA_1A_{i+1}\qquad (2\le i\le 10).
    +\]
    +
    +Because  
    +
    +\[
    +\cos\theta=\frac{12}{13}\;\Longrightarrow\;\sin\theta=\frac{5}{13},
    +\]
    +
    +the area of \(\triangle A_iA_1A_{i+1}\) is  
    +
    +\[
    +\frac12 r_i r_{i+1}\sin\theta
    +   =\frac12 r_i r_{i+1}\frac{5}{13}=1 .
    +\]
    +
    +Hence  
    +
    +\[
    +r_i r_{i+1}= \frac{26}{5}=K\qquad (2\le i\le 10). \tag{1}
    +\]
    +
    +From (1),
    +
    +\[
    +r_{i+2}= \frac{K}{r_{i+1}}=r_i ,
    +\]
    +
    +so the distances from \(A_1\) alternate:
    +
    +\[
    +r_2=r_4=r_6=r_8=r_{10}=a,\qquad
    +r_3=r_5=r_7=r_9=r_{11}=b,
    +\]
    +
    +with  
    +
    +\[
    +ab=K=\frac{26}{5}. \tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### Lengths of the other sides
    +
    +For any \(i=2,\dots ,10\) the side \(A_iA_{i+1}\) (call it \(L\)) satisfies the law of cosines:
    +
    +\[
    +L^2=a^{2}+b^{2}-2ab\cos\theta
    +      =a^{2}+b^{2}-2ab\frac{12}{13}.
    +\]
    +
    +Using (2),
    +
    +\[
    +L^2=a^{2}+b^{2}-\frac{24}{13}\cdot\frac{26}{5}
    +    =a^{2}+b^{2}-\frac{48}{5}.
    +\]
    +
    +Since \(a^{2}+b^{2}=(a+b)^{2}-2ab\),
    +
    +\[
    +L^2=(a+b)^{2}-2\frac{26}{5}-\frac{48}{5}
    +     =(a+b)^{2}-20.
    +\]
    +
    +Let  
    +
    +\[
    +s=a+b.
    +\]
    +
    +Then  
    +
    +\[
    +L=\sqrt{s^{2}-20}. \tag{3}
    +\]
    +
    +--------------------------------------------------------------------
    +### Using the perimeter
    +
    +The perimeter of the 11‑gon is
    +
    +\[
    +|A_1A_2|+|A_1A_{11}|+\sum_{i=2}^{10}|A_iA_{i+1}|
    += a+b+9L = s+9\sqrt{s^{2}-20}=20.
    +\]
    +
    +Set \(t=\sqrt{s^{2}-20}>0\). Then \(s=20-9t\) and
    +
    +\[
    +t^{2}=s^{2}-20=(20-9t)^{2}-20.
    +\]
    +
    +Solving,
    +
    +\[
    +t^{2}=380-360t+81t^{2}
    +\Longrightarrow 80t^{2}-360t+380=0
    +\Longrightarrow 4t^{2}-18t+19=0.
    +\]
    +
    +Hence  
    +
    +\[
    +t=\frac{18\pm\sqrt{324-304}}{8}
    +   =\frac{18\pm2\sqrt5}{8}
    +   =\frac{9\pm\sqrt5}{4}.
    +\]
    +
    +If the plus sign is taken, \(t>\frac{20}{9}\) and \(s=20-9t<0\), impossible.
    +Thus  
    +
    +\[
    +t=\frac{9-\sqrt5}{4},
    +\qquad
    +s=20-9t=\frac{9\sqrt5-1}{4}.
    +\]
    +
    +Consequently  
    +
    +\[
    +A_1A_2+A_1A_{11}=s=\frac{9\sqrt5-1}{4}.
    +\]
    +
    +Written as \(\dfrac{m\sqrt n-p}{q}\) we have  
    +
    +\[
    +m=9,\;n=5,\;p=1,\;q=4,
    +\]
    +
    +so  
    +
    +\[
    +m+n+p+q=9+5+1+4=19.
    +\]
    +
    +\[
    +\boxed{19}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 19

    +

    Extracted Answer: 19

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Alex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Step 1.  Regions created by chords**
    +
    +If a circle already has \(k\) chords drawn in its interior, then a new chord
    +adds one region for itself plus one extra region for every interior
    +intersection it creates.  
    +Thus for a set of \(n\) chords
    +
    +\[
    +\text{# regions}=n+1+\text{# interior intersection points.}
    +\]
    +
    +In our problem we have  
    +
    +* 2 fixed diameters (the two perpendicular ones),  
    +* 25 random chords.
    +
    +Hence \(n=27\).  
    +We only have to find the expected number \(I\) of interior intersection
    +points.
    +
    +\[
    +E[\text{regions}]=27+1+E[I]=28+E[I].
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 2.  Intersections involving the two diameters**
    +
    +Let the horizontal diameter be the line that separates the *upper* quadrants
    +\(Q_{1},Q_{2}\) from the *lower* quadrants \(Q_{3},Q_{4}\).
    +
    +A random chord has its two endpoints in different quadrants.
    +The chord meets the horizontal diameter exactly when the endpoints lie in
    +different half‑planes, i.e. one endpoint is in \(\{Q_{1},Q_{2}\}\) and the
    +other in \(\{Q_{3},Q_{4}\}\).
    +
    +For the ordered pair of quadrants of a random chord there are  
    +\(12\) equally likely possibilities (the \(4\cdot 3\) ordered pairs with
    +different quadrants).  
    +Exactly \(8\) of them have the endpoints in opposite half‑planes, hence
    +
    +\[
    +p_d=\Pr(\text{a random chord meets a given diameter})=\frac{8}{12}=
    +\frac{2}{3}.
    +\]
    +
    +Therefore
    +
    +\[
    +\boxed{\text{Expected intersections of the 25 chords with one diameter}=25\cdot\frac23}
    +\]
    +
    +and with the two diameters together
    +
    +\[
    +E[I_{\text{diameters}}]=2\cdot25\cdot\frac23=\frac{100}{3}.
    +\]
    +
    +The two diameters intersect each other once, so add \(1\) more interior
    +intersection.
    +
    +--------------------------------------------------------------------
    +
    +**Step 3.  Intersections of two random chords**
    +
    +Denote the four endpoints by  
    +\(\alpha_1,\alpha_2\) (chord 1) and \(\beta_1,\beta_2\) (chord 2).  
    +All four points are independent uniform on the circle.
    +
    +Let  
    +
    +\[
    +A=\{\text{endpoints of chord 1 lie in different quadrants}\},\qquad 
    +B=\{\text{endpoints of chord 2 lie in different quadrants}\}.
    +\]
    +
    +\[
    +P(A)=P(B)=\frac34 .
    +\]
    +
    +Two chords intersect iff the endpoints are interleaved on the circle,
    +i.e. exactly one of \(\beta_1,\beta_2\) lies on the clockwise arc from
    +\(\alpha_1\) to \(\alpha_2\).
    +
    +Fix \(\alpha_1=x\) and \(\alpha_2=y\) (with \(x\neq y\)).
    +Let \(I=(x,y)\) be the clockwise arc from \(x\) to \(y\) and let
    +\(d=|I|\) be its length.  
    +For independent uniform \(\beta_1,\beta_2\),
    +
    +* the probability that exactly one lies in \(I\) is \(2d(1-d)\);
    +* the probability that the two \(\beta\)’s are in *different* quadrants
    +  is \(\frac34\).
    +
    +Conditioning on the actual placement of the interval \(I\) with respect
    +to the four quarter‑arcs yields (after a short computation)
    +
    +\[
    +\Pr(\beta_1,\beta_2\text{ satisfy both conditions}\mid x,y)=
    +2\Bigl[d\Bigl(\tfrac34-d\Bigr)+\sum_{q=0}^{3}a_q^{\,2}\Bigr],
    +\tag{1}
    +\]
    +
    +where \(a_q\) is the length of the part of \(I\) that lies in quadrant
    +\(q\).
    +
    +Now average (1) over all ordered pairs \((x,y)\) that are in different
    +quadrants.  By symmetry it suffices to place \(x\) in the first quadrant
    +\([0,\tfrac14)\) and let \(y\) run in the three other quadrants.
    +Carrying out the integration (splitting the three possible clockwise
    +distances) gives
    +
    +\[
    +\int\!\!\int_{x\in Q_0,\;y\in Q_m}
    +2\Bigl[d\Bigl(\tfrac34-d\Bigr)+\sum a_q^{\,2}\Bigr]\,dy\,dx
    +   =\frac{17}{64}\qquad(m=1,2,3\text{ summed}).
    +\]
    +
    +Thus
    +
    +\[
    +P(A\cap B\cap\{\text{the chords intersect}\})=\frac{17}{64}.
    +\]
    +
    +Finally
    +
    +\[
    +p_r=
    +\Pr(\text{intersection}\mid A\cap B)=
    +\frac{P(A\cap B\cap\text{intersect})}{P(A)P(B)}
    +=\frac{17/64}{(3/4)^2}
    +=\frac{16}{9}\cdot\frac{17}{64}
    +=\frac{17}{36}.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 4.  Expected interior intersections**
    +
    +* Intersections of the two diameters: \(1\).
    +* Intersections of the 25 random chords with the two diameters:
    +  \(\displaystyle \frac{100}{3}\).
    +* Intersections among the 25 random chords:
    +  \(\displaystyle \binom{25}{2}\,p_r
    +   =300\cdot\frac{17}{36}= \frac{425}{3}\).
    +
    +Hence
    +
    +\[
    +E[I]=1+\frac{100}{3}+\frac{425}{3}
    +     =1+\frac{525}{3}=1+175=176.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +**Step 5.  Expected number of regions**
    +
    +\[
    +E[\text{regions}]=27+1+E[I]=28+176=204.
    +\]
    +
    +--------------------------------------------------------------------
    +
    +\[
    +\boxed{204}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 204

    +

    Extracted Answer: 204

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Suppose $ \triangle ABC $ has angles $ \angle BAC = 84^\circ $, $ \angle ABC = 60^\circ $, and $ \angle ACB = 36^\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \overline{BC} $, $ \overline{AC} $, and $ \overline{AB} $, respectively. The circumcircle of $ \triangle DEF $ intersects $ \overline{BD} $, $ \overline{AE} $, and $ \overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \triangle DEF $ into six minor arcs, as shown. Find $ \widehat{DE} + 2 \cdot \widehat{HJ} + 3 \cdot \widehat{FG} $, where the arcs are measured in degrees.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +\triangle ABC\qquad 
    +\angle A=84^{\circ},\; \angle B=60^{\circ},\; \angle C=36^{\circ}.
    +\]
    +
    +Denote  
    +
    +\[
    +D,E,F \text{ – the midpoints of }BC,CA,AB,
    +\]
    +\[
    +G,H,J \text{ – the second intersections of }BD,AE,AF\text{ with the circumcircle of } \triangle DEF .
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  The points \(G,H,J\) are the feet of the altitudes  
    +
    +The nine‑point circle of \(\triangle ABC\) passes through the three midpoints \(D,E,F\) **and** through the three feet of the altitudes.  
    +Because  
    +
    +* \(BD\) lies on the side \(BC\),  
    +* \(AE\) lies on the side \(CA\),  
    +* \(AF\) lies on the side \(AB\),
    +
    +the second intersection of each of these sides with the nine‑point circle must be the corresponding foot of an altitude:
    +
    +\[
    +\begin{aligned}
    +G&= \text{foot from }A\text{ onto }BC,\\[2mm]
    +H&= \text{foot from }B\text{ onto }CA,\\[2mm]
    +J&= \text{foot from }C\text{ onto }AB .
    +\end{aligned}
    +\]
    +
    +Thus \(G,H,J\) are the vertices of the orthic triangle.
    +
    +--------------------------------------------------------------------
    +### 2.  Arc \(\widehat{DE}\)
    +
    +The medial triangle \(\triangle DEF\) is similar to \(\triangle ABC\) (ratio \(1\!:\!2\)).  
    +Consequently  
    +
    +\[
    +\angle DFE = \angle C = 36^{\circ}.
    +\]
    +
    +For any inscribed angle, the intercepted minor arc is twice the angle; hence  
    +
    +\[
    +\widehat{DE}=2\angle DFE = 2\cdot 36^{\circ}=72^{\circ}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Arc \(\widehat{FG}\)
    +
    +Since \(D\) and \(G\) both lie on side \(BC\), the chord \(DG\) is a part of \(BC\).  
    +The chord \(DF\) joins the midpoints of \(AB\) and \(BC\); by the Midpoint Theorem  
    +
    +\[
    +DF \parallel AC .
    +\]
    +
    +Therefore  
    +
    +\[
    +\angle FDG =\angle (\text{line }DF,\text{ line }DG)
    +        =\angle (AC,BC)=\angle C=36^{\circ}.
    +\]
    +
    +Thus  
    +
    +\[
    +\widehat{FG}=2\angle FDG = 2\cdot 36^{\circ}=72^{\circ}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 4.  Arc \(\widehat{HJ}\)
    +
    +\(H,J,G\) are the vertices of the orthic triangle.  
    +A standard fact about the orthic triangle is that its angles are  
    +
    +\[
    +\angle HGJ = 180^{\circ}-2\angle A,\qquad
    +\angle GJH = 180^{\circ}-2\angle B,\qquad
    +\angle JHG = 180^{\circ}-2\angle C .
    +\]
    +
    +(The fact follows from simple angle‑chasing with the right‑angles at the feet of the altitudes.)
    +
    +Hence the minor arc opposite \(G\) – that is, \(\widehat{HJ}\) – satisfies  
    +
    +\[
    +\widehat{HJ}=2\angle HGJ =2\bigl(180^{\circ}-2A\bigr)
    +               =360^{\circ}-4A.
    +\]
    +
    +With \(\angle A =84^{\circ}\),
    +
    +\[
    +\widehat{HJ}=360^{\circ}-4\cdot84^{\circ}=24^{\circ}.
    +\]
    +
    +--------------------------------------------------------------------
    +### 5.  Required sum
    +
    +\[
    +\begin{aligned}
    +\widehat{DE}+2\widehat{HJ}+3\widehat{FG}
    +&= 72^{\circ}+2\cdot24^{\circ}+3\cdot72^{\circ}\\
    +&= 72^{\circ}+48^{\circ}+216^{\circ}\\[2mm]
    +&= 336^{\circ}.
    +\end{aligned}
    +\]
    +
    +--------------------------------------------------------------------
    +\[
    +\boxed{336}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 336

    +

    Extracted Answer: 336

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ \triangle ABC $ be a right triangle with $ \angle A = 90^\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \sqrt{3} $ for some positive integer $ n $. Find $ n $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +\angle A =90^\circ ,\qquad BC =38 .
    +\]
    +
    +Place  
    +
    +\[
    +A=(0,0),\qquad B=(b,0),\qquad C=(0,c)
    +\]
    +
    +so that the legs are  
    +
    +\[
    +AB=b,\qquad AC=c,\qquad b^{2}+c^{2}=38^{2}=1444 .
    +\tag{1}
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  Coordinates of \(K\) and \(L\)
    +
    +Because  
    +
    +\[
    +AK=BK=14,
    +\]
    +
    +\(K\) lies on the perpendicular bisector of \(\overline{AB}\); hence  
    +
    +\[
    +K=\Bigl(\frac b2,\;\sqrt{14^{2}-\Bigl(\frac b2\Bigr)^{2}}\Bigr)
    +   =\bigl( X,\;U\bigr)
    +\]
    +
    +with  
    +
    +\[
    +X=\frac b2,\qquad U=\sqrt{196-X^{2}} .\tag{2}
    +\]
    +
    +Similarly  
    +
    +\[
    +AL=CL=14\Longrightarrow 
    +L=\Bigl(\sqrt{196-\Bigl(\frac c2\Bigr)^{2}},\;\frac c2\Bigr)
    +   =(V,Y),\qquad 
    +Y=\frac c2,\;V=\sqrt{196-Y^{2}} .\tag{3}
    +\]
    +
    +Thus  
    +
    +\[
    +X^{2}+Y^{2}= \frac{b^{2}+c^{2}}{4}
    +           =\frac{1444}{4}=361 .\tag{4}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  The equilateral triangle \(AKL\)
    +
    +All three sides of \(\triangle AKL\) equal \(14\), so \(\angle KAL=60^\circ\).
    +Using the vectors \(\overrightarrow{AK}=(X,U)\) and \(\overrightarrow{AL}=(V,Y)\),
    +
    +\[
    +\overrightarrow{AK}\cdot\overrightarrow{AL}=|AK||AL|\cos 60^\circ
    +\Longrightarrow
    +XV+YU=98 .\tag{5}
    +\]
    +
    +From (2)–(5) we have the system
    +
    +\[
    +\begin{cases}
    +X^{2}+Y^{2}=361,\\[2pt]
    +X\sqrt{196-Y^{2}}+Y\sqrt{196-X^{2}}=98 .
    +\end{cases}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Solving the system
    +
    +Set  
    +
    +\[
    +X=14\cos\alpha ,\qquad U=14\sin\alpha ,\qquad 
    +Y=14\cos\beta ,\qquad V=14\sin\beta .
    +\]
    +
    +Then (5) becomes  
    +
    +\[
    +14^{2}\bigl(\cos\alpha\sin\beta+\cos\beta\sin\alpha\bigr)
    +   =196\sin(\alpha+\beta)=98,
    +\]
    +
    +hence  
    +
    +\[
    +\sin(\alpha+\beta)=\frac12\Longrightarrow\alpha+\beta=\frac{\pi}{6}\;(30^\circ). \tag{6}
    +\]
    +
    +From \(X^{2}+Y^{2}=361\),
    +
    +\[
    +196\bigl(\cos^{2}\alpha+\cos^{2}\beta\bigr)=361
    +\Longrightarrow
    +\cos^{2}\alpha+\cos^{2}\beta= \frac{361}{196}=1+\frac{165}{196}.
    +\]
    +
    +Using \(\cos^{2}\alpha+\cos^{2}\beta=
    +1+\cos(\alpha+\beta)\cos(\alpha-\beta)\) gives  
    +
    +\[
    +\cos\frac{\pi}{6}\,\cos(\alpha-\beta)=\frac{165}{196}
    +\Longrightarrow
    +\cos(\alpha-\beta)=\frac{165}{98\sqrt3}
    +       =\frac{55\sqrt3}{98}.
    +\]
    +
    +Hence  
    +
    +\[
    +\sin(\alpha-\beta)=\sqrt{1-\Bigl(\frac{55\sqrt3}{98}\Bigr)^{2}}
    +                 =\frac{23}{98}.
    +\]
    +
    +Now compute \(\cos\alpha\) and \(\cos\beta\):
    +\[
    +\cos\alpha=\sqrt{\frac{1+\cos(\alpha+\beta)}{2}}
    +          =\sqrt{\frac{1+\frac{71}{98}}{2}}
    +          =\frac{13}{14},
    +\qquad
    +\cos\beta =\sqrt{\frac{1+\cos(\alpha-\beta)}{2}}
    +          =\sqrt{\frac{1+\frac{47}{49}}{2}}
    +          =\frac{4\sqrt3}{7}.
    +\]
    +
    +Therefore  
    +
    +\[
    +X=14\cos\alpha =13,\qquad 
    +Y=14\cos\beta =8\sqrt3 .
    +\]
    +
    +Consequently  
    +
    +\[
    +b=2X=26,\qquad c=2Y=16\sqrt3 .
    +\]
    +
    +One easily checks that \(b^{2}+c^{2}=26^{2}+ (16\sqrt3)^{2}=1444\), i.e. \(BC=38\).
    +
    +--------------------------------------------------------------------
    +### 4.  Area of \(BKLC\)
    +
    +The right‑triangle \(ABC\) has area  
    +
    +\[
    +[ABC]=\frac12\,b\,c
    +      =\frac12\cdot26\cdot16\sqrt3
    +      =208\sqrt3 .
    +\]
    +
    +The three small triangles cut off by \(K\) and \(L\) have areas  
    +
    +\[
    +\begin{aligned}
    +[ABK]&=\frac12\cdot b\cdot U
    +      =\frac12\cdot26\cdot3\sqrt3=39\sqrt3,\\[2pt]
    +[ALC]&=\frac12\cdot c\cdot V
    +      =\frac12\cdot16\sqrt3\cdot2=16\sqrt3,\\[2pt]
    +[AKL]&=\frac{\sqrt3}{4}\cdot14^{2}=49\sqrt3 .
    +\end{aligned}
    +\]
    +
    +Thus
    +
    +\[
    +\begin{aligned}
    +[BKLC] &=[ABC]-[ABK]-[ALC]-[AKL]\\
    +       &=208\sqrt3-(39\sqrt3+16\sqrt3+49\sqrt3)\\
    +       &=104\sqrt3 .
    +\end{aligned}
    +\]
    +
    +Hence the area of \(BKLC\) is \(n\sqrt3\) with  
    +
    +\[
    +\boxed{n=104}.
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 104

    +

    Extracted Answer: None

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let the sequence of rationals $ x_1, x_2, \ldots $ be defined such that $ x_1 = \frac{25}{11} $ and
    +$ x_{k+1} = \frac{1}{3} \left( x_k + \frac{1}{x_k} - 1 \right). $
    +$ x_{2025} $ can be expressed as $ \frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution**
    +
    +\[
    +x_{k+1}= \frac13\Bigl(x_k+\frac1{x_k}-1\Bigr),\qquad 
    +x_1=\frac{25}{11}
    +\]
    +
    +Write each term as a reduced fraction  
    +
    +\[
    +x_k=\frac{p_k}{q_k},\qquad \gcd(p_k,q_k)=1 .
    +\]
    +
    +Then  
    +
    +\[
    +x_{k+1}= \frac{p_k^2+q_k^2-p_kq_k}{3p_kq_k}
    +      =\frac{p_{k+1}}{q_{k+1}}
    +\]
    +
    +where  
    +
    +\[
    +p_{k+1}= \frac{p_k^2+q_k^2-p_kq_k}{3},
    +\qquad 
    +q_{k+1}=p_kq_k . \tag{1}
    +\]
    +
    +(The numerator is always divisible by \(3\); one checks that
    +\(\gcd(p_{k+1},q_{k+1})=1\) for every \(k\).)
    +
    +--------------------------------------------------------------------
    +### 1.  A simple recurrence for the sum  
    +
    +Let  
    +
    +\[
    +s_k=p_k+q_k .
    +\]
    +
    +Adding the two formulas in (1),
    +
    +\[
    +\begin{aligned}
    +s_{k+1}&=p_{k+1}+q_{k+1}
    +        =\frac{p_k^2+q_k^2-p_kq_k}{3}+p_kq_k  \\
    +        &=\frac{p_k^2+2p_kq_k+q_k^2}{3}
    +        =\frac{(p_k+q_k)^2}{3}
    +        =\frac{s_k^{\,2}}{3}.
    +\end{aligned}
    +\]
    +
    +Thus  
    +
    +\[
    +s_{k+1}= \frac{s_k^{\,2}}{3},\qquad s_1=p_1+q_1=25+11=36.
    +\tag{2}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Closed form
    +
    +Set \(t_k=s_k/3\).  From (2)
    +
    +\[
    +t_{k+1}=t_k^{\,2},\qquad t_1=\frac{36}{3}=12 .
    +\]
    +
    +Hence  
    +
    +\[
    +t_k=12^{\,2^{\,k-1}},\qquad 
    +s_k=3t_k=3\cdot 12^{\,2^{\,k-1}} . \tag{3}
    +\]
    +
    +Therefore  
    +
    +\[
    +p_{2025}+q_{2025}=s_{2025}=3\cdot 12^{\,2^{2024}} .
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Computing the last three digits  
    +
    +We need  
    +
    +\[
    +M=3\cdot 12^{\,2^{2024}}\pmod{1000}.
    +\]
    +
    +Because \(1000=8\cdot125\) we compute the two residues separately.
    +
    +*Modulo \(8\)*  
    +
    +\(12\equiv4\pmod8\) and \(4^{2}=0\pmod8\).  
    +Since the exponent \(2^{2024}\ge2\),
    +
    +\[
    +12^{\,2^{2024}}\equiv0\pmod8 .
    +\]
    +
    +Hence \(M\equiv0\pmod8\).
    +
    +*Modulo \(125\)*  
    +
    +\(\gcd(12,125)=1\) and \(\varphi(125)=100\), so  
    +\(12^{100}\equiv1\pmod{125}\).  
    +Thus only the exponent modulo \(100\) matters:
    +
    +\[
    +e=2^{2024}\pmod{100}.
    +\]
    +
    +For \(n\ge2\) the powers of \(2\) modulo \(100\) have period \(20\):
    +\(2^{n+20}\equiv2^n\pmod{100}\).
    +Since \(2024\equiv4\pmod{20}\),
    +
    +\[
    +e\equiv2^{4}=16\pmod{100}.
    +\]
    +
    +Now compute \(12^{16}\pmod{125}\):
    +
    +\[
    +\begin{aligned}
    +12^{2}&\equiv144\equiv19,\\
    +12^{4}&\equiv19^{2}=361\equiv111,\\
    +12^{8}&\equiv111^{2}=12321\equiv71,\\
    +12^{16}&\equiv71^{2}=5041\equiv41\pmod{125}.
    +\end{aligned}
    +\]
    +
    +Hence  
    +
    +\[
    +12^{\,2^{2024}}\equiv41\pmod{125}.
    +\]
    +
    +*Chinese remainder theorem*  
    +
    +Find \(A\) such that  
    +
    +\[
    +A\equiv0\pmod8,\qquad A\equiv41\pmod{125}.
    +\]
    +
    +Write \(A=8k\).  Then \(8k\equiv41\pmod{125}\Rightarrow
    +k\equiv41\cdot8^{-1}\pmod{125}\).
    +Since \(8^{-1}\equiv47\pmod{125}\),
    +
    +\[
    +k\equiv41\cdot47\equiv52\pmod{125},
    +\]
    +so \(k=52+125t\) and  
    +
    +\[
    +A=8k=416+1000t\equiv416\pmod{1000}.
    +\]
    +
    +Finally  
    +
    +\[
    +M=3A\equiv3\cdot416=1248\equiv\boxed{248}\pmod{1000}.
    +\]
    +
    +Thus the remainder of \(m+n\) when divided by \(1000\) is **248**.
    +
    +
    +

    Results

    +

    Correct Answer: 248

    +

    Extracted Answer: 248

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +There are exactly three positive real numbers $ k $ such that the function
    +$ f(x) = \frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $
    +defined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    Let  
    +
    +\[
    +f_k(x)=\frac{(x-18)(x-72)(x-98)(x-k)}{x}= \frac{N(x)}{x},\qquad x>0 ,
    +\]
    +
    +where  
    +
    +\[
    +N(x)=(x-18)(x-72)(x-98)(x-k)
    +      =x^{4}-(188+k)x^{3}+(10116+188k)x^{2}-(127008+10116k)x+127008k .
    +\]
    +
    +--------------------------------------------------------------------
    +### 1.  What does “the minimum is attained at exactly two points’’ mean?
    +
    +If the global minimum value is \(m\), then for every \(x>0\)
    +
    +\[
    +\frac{N(x)}{x}\ge m\qquad\Longleftrightarrow\qquad N(x)-mx\ge0 .
    +\]
    +
    +Equality occurs exactly at the points where the minimum is attained.
    +Since \(N(x)-mx\) is a quartic polynomial, the only way it can be
    +non‑negative for all \(x\) and vanish at exactly two distinct points is
    +
    +\[
    +N(x)-mx=(x-a)^{2}(x-b)^{2}\qquad(a\neq b,\;a,b>0).
    +\]
    +
    +Thus there are numbers \(a,b,m\) such that  
    +
    +\[
    +\begin{cases}
    +N(a)=ma,\quad N'(a)=m,\\[2pt]
    +N(b)=mb,\quad N'(b)=m .
    +\end{cases}
    +\]
    +
    +--------------------------------------------------------------------
    +### 2.  Coefficient comparison
    +
    +Write
    +
    +\[
    +(x-a)^{2}(x-b)^{2}=(x^{2}-Sx+P)^{2},
    +\qquad
    +S=a+b,\;P=ab .
    +\]
    +
    +Equating coefficients of \(N(x)-mx\) and \((x^{2}-Sx+P)^{2}\) yields  
    +
    +\[
    +\begin{aligned}
    +S&=\frac{188+k}{2},\tag{1}\\[2pt]
    +S^{2}+2P&=10116+188k,\tag{2}\\[2pt]
    +2SP&=127008+10116k+m,\tag{3}\\[2pt]
    +P^{2}&=127008\,k.\tag{4}
    +\end{aligned}
    +\]
    +
    +From (1) and (4)
    +
    +\[
    +S=\frac{188+k}{2},\qquad P=\sqrt{127008\,k}.
    +\]
    +
    +Insert these in (2):
    +
    +\[
    +\frac{(188+k)^{2}}{4}+2\sqrt{127008\,k}=10116+188k .
    +\]
    +
    +Multiplying by \(4\) and using \(\sqrt{127008}=252\sqrt2\) gives  
    +
    +\[
    +k^{2}-376k-5120+2016\sqrt{2k}=0. \tag{5}
    +\]
    +
    +--------------------------------------------------------------------
    +### 3.  Solving for \(k\)
    +
    +Set \(u=\sqrt{k}>0\).  Then \(\sqrt{2k}=u\sqrt2\) and (5) becomes  
    +
    +\[
    +u^{4}-376u^{2}+2016\sqrt2\,u-5120=0 .
    +\]
    +
    +Write \(u=a\sqrt2\;(a>0)\); the equation reduces to  
    +
    +\[
    +a^{4}-188a^{2}+1008a-1280=0 .
    +\]
    +
    +Factoring,
    +
    +\[
    +(a^{2}-6a+8)(a^{2}+6a-160)=0,
    +\]
    +
    +so  
    +
    +\[
    +a=2,\;4,\;10\quad(\text{the root }a=-16\text{ gives }u<0\text{ and is discarded}).
    +\]
    +
    +Since \(k=u^{2}=2a^{2}\),
    +
    +\[
    +k=2\cdot2^{2}=8,\qquad
    +k=2\cdot4^{2}=32,\qquad
    +k=2\cdot10^{2}=200 .
    +\]
    +
    +For each of these values the discriminant  
    +
    +\[
    +\Delta=S^{2}-4P>0
    +\]
    +
    +so the quadratic \(x^{2}-Sx+P\) has two distinct positive roots; consequently
    +\(f_{k}(x)\) attains its global minimum at exactly those two points.
    +
    +--------------------------------------------------------------------
    +### 4.  Sum of the admissible \(k\)
    +
    +\[
    +8+32+200 = 240 .
    +\]
    +
    +\[
    +\boxed{240}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 240

    +

    Extracted Answer: 240

    +

    Score: 1.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    **Solution Outline**
    +
    +1.  Let \(M=3^{7}=2187\) and \(A=\{1,\ldots ,3^{6}\}= \{1,\dots ,729\}\).
    +    For each \(a\in A\) put \(r(a)=a^{3}\pmod{M}\).
    +    The required number  
    +
    +    \[
    +    N=\#\{(a,b,c)\in A^{3}:r(a)+r(b)+r(c)\equiv0\pmod M\}
    +    \]
    +
    +    is the weighted convolution of the distribution of the residues
    +    \(r(a)\).
    +
    +2.  Write each \(a\) as \(a=3^{v}a'\) with \(\gcd(a',3)=1\).
    +
    +| \(v\) | range of \(a\) | # of such \(a\) | residue \(a^{3}\) (mod \(M\)) | weight |
    +|-------|----------------|-----------------|-------------------------------|--------|
    +| 0 | not divisible by 3 | \(486\) | \(a^{\prime\,3}\) (unit cube) | \(1\) |
    +| 1 | \(3\mid a,9\nmid a\) | \(162\) | \(27a^{\prime\,3}\) | \(9\) |
    +| 2 | \(9\mid a,27\nmid a\) | \(54\) | \(729a^{\prime\,3}\) | \(27\) |
    +| \(\ge3\) | \(27\mid a\) | \(27\) | \(0\) | \(27\)
    +
    +Hence the possible residues and their multiplicities are  
    +
    +* 0      weight \(27\);
    +* the two residues \(729,\,1458\) weight \(27\) each;
    +* 18 residues (the cubes of the unit group modulo \(81\)) weight \(9\) each;
    +* 486 residues (the cubes of the unit group modulo \(3^{7}\)) weight \(1\) each.
    +
    +Denote by  
    +
    +* \(D\) the 486 unit‑cube residues (weight 1);
    +* \(C\) the 18 residues \(27\cdot u\) with \(u\) a unit‑cube modulo \(81\) (weight 9);
    +* \(B\) the two residues \(729,1458\) (weight 27);
    +* \(0\) the zero residue (weight 27).
    +
    +3.  Split the count according to how many zero‑terms occur.
    +    Let  
    +
    +    \[
    +    w(x)=\text{weight of residue }x.
    +    \]
    +
    +    For \(x\neq0\) put \(R'=\{D\cup C\cup B\}\).  Then
    +
    +    \[
    +    N=N_{0}+N_{1}+N_{2},
    +    \]
    +
    +    where  
    +
    +    * \(N_{2}=w(0)^{3}=27^{3}=19683\)  (all three residues zero);
    +    * \(N_{1}=3\,w(0)\displaystyle\sum_{\substack{y+z\equiv0\\y,z\in R'}}
    +            w(y)w(z) =3\cdot27\cdot3402=275\,562\);
    +    * \(N_{0}\) counts triples with no zero term.
    +
    +    The sum in \(N_{1}\) is obtained easily:
    +    each \(x\in D\) pairs with its inverse, giving \(486\) ordered pairs,
    +    each \(x\in C\) gives \(18\) ordered pairs (weight \(9^{2}=81\)), and each
    +    \(x\in B\) gives \(2\) ordered pairs (weight \(27^{2}=729\)).
    +    Hence \(\displaystyle\sum_{y+z\equiv0}w(y)w(z)=486+1458+1458=3402\).
    +
    +4.  Compute \(N_{0}\).
    +    After factoring the common factor \(27\) from the elements of \(C\cup B\),
    +    the condition \(x+y+z\equiv0\pmod{M}\) becomes
    +
    +    \[
    +    u+v+w\equiv0\pmod{81},
    +    \]
    +
    +    where \(u,v,w\) belong to  
    +
    +    * the set \(S\) of the 18 unit‑cubes modulo \(81\) (weight 9);
    +    * the two residues \(27,54\) (weight 27).
    +
    +    For the set \(S\) one has the simple description  
    +
    +    \[
    +    S=\{x\pmod{81}:x\equiv\pm1\pmod9\}.
    +    \]
    +
    +    Using this description we compute the additive convolution on \(\mathbb Z/81\).
    +
    +    * For any \(t\equiv0\pmod9\) we have \(\#\{(s_{1},s_{2})\in S^{2}:s_{1}+s_{2}\equiv t\}=18\).
    +    * For any \(t\equiv\pm2\pmod9\) the count equals \(9\).
    +    * For any other residue the count is \(0\).
    +
    +    Consequently
    +
    +    * there are no triples \(s_{1}+s_{2}+s_{3}\equiv0\) with all three from \(S\);
    +    * ordered triples with exactly one element from \(\{27,54\}\) and two from \(S\) are possible.
    +      For each of the two choices \(\{27,54\}\) there are
    +      \((A*A)(27)=(A*A)(54)=18\) ordered pairs from \(S\);  
    +      with three possible positions for the “\(B\)’’ element we obtain  
    +
    +      \[
    +      2\cdot3\cdot18=108
    +      \]
    +
    +      ordered triples.  Their weight is \(27\cdot9^{2}=2187\), giving a contribution  
    +
    +      \[
    +      108\cdot2187=236\,196 .
    +      \]
    +
    +    * triples consisting only of the two “\(B\)” residues satisfy the condition
    +      only when all three are equal, giving two ordered triples,
    +      each of weight \(27^{3}=19683\); contribution  
    +
    +      \[
    +      2\cdot19683=39\,366 .
    +      \]
    +
    +    Adding these contributions:
    +
    +    \[
    +    N_{0}=236\,196+39\,366=275\,562 .
    +    \]
    +
    +5.  Assemble all parts:
    +
    +    \[
    +    N=N_{0}+N_{1}+N_{2}=275\,562+275\,562+19\,683=570\,807 .
    +    \]
    +
    +6.  The required remainder is  
    +
    +    \[
    +    N\bmod1000 = 570\,807\bmod1000 = \boxed{807}.
    +    \]
    +
    +
    +

    Results

    +

    Correct Answer: 735

    +

    Extracted Answer: 807

    +

    Score: 0.0

    +
    + + +

    Prompt conversation

    + + +
    +
    + user + +
    +
    +
    +Let $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\angle B=\angle E=60^\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.
    +Please reason step by step, and put your final answer within \boxed{}.
    +
    +
    +
    + +

    Sampled message

    + +
    +
    + assistant + +
    +
    +
    The minimum value of \(f(X)\) works out to be  
    +
    +\[
    +f_{\min}=18+20\sqrt7 .
    +\]
    +
    +Thus \(m=18,\; n=20,\; p=7\) and  
    +
    +\[
    +m+n+p = 18+20+7 = 45 .
    +\]
    +
    +\[
    +\boxed{45}
    +\]
    +
    +
    +

    Results

    +

    Correct Answer: 60

    +

    Extracted Answer: 45

    +

    Score: 0.0

    +
    + + + \ No newline at end of file diff --git a/benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547.json b/benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547.json new file mode 100644 index 0000000000..7d4e54b4ce --- /dev/null +++ b/benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547.json @@ -0,0 +1,6 @@ +{ + "chars": 2296.1916666666666, + "chars:std": 986.051306946325, + "score": 0.925, + "score:std": 0.26339134382131846 +} \ No newline at end of file diff --git a/benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547_allresults.json b/benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547_allresults.json new file mode 100644 index 0000000000..4a85ce57c6 --- /dev/null +++ b/benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547_allresults.json @@ -0,0 +1,2896 @@ +{ + "score": 0.925, + "metrics": { + "chars": 2296.1916666666666, + "chars:std": 986.051306946325, + "score:std": 0.26339134382131846 + }, + "htmls": [ + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    First write the two numbers in base\u201110.\n\n\\[\n17_{b}=1\\cdot b+7=b+7,\\qquad \n97_{b}=9\\cdot b+7=9b+7 .\n\\]\n\nWe need  \n\n\\[\nb+7 \\mid 9b+7 .\n\\]\n\nUse the Euclidean algorithm:\n\n\\[\n9b+7 = 9(b+7)-56 .\n\\]\n\nHence  \n\n\\[\nb+7 \\mid 9b+7 \\iff b+7 \\mid 56 .\n\\]\n\nSo \\(b+7\\) must be a positive divisor of \\(56\\).\n\nSince the base must satisfy \\(b>9\\), we have \\(b+7>16\\).  \nThe divisors of \\(56\\) exceeding \\(16\\) are \\(28\\) and \\(56\\).\n\n\\[\n\\begin{cases}\nb+7=28 \\ \\Rightarrow\\ b=21,\\\\[2pt]\nb+7=56 \\ \\Rightarrow\\ b=49.\n\\end{cases}\n\\]\n\nBoth bases indeed work:\n\n\\[\n\\frac{97_{21}}{17_{21}}=\\frac{196}{28}=7,\\qquad \n\\frac{97_{49}}{17_{49}}=\\frac{448}{56}=8 .\n\\]\n\nTherefore the required bases are \\(21\\) and \\(49\\), and their sum is  \n\n\\[\n21+49 = 70.\n\\]\n\n\\[\n\\boxed{70}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 70

    \n

    Extracted Answer: 70

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nc=\\#\\text{ chocolate},\\qquad v=\\#\\text{ vanilla},\\qquad s=\\#\\text{ strawberry}\n\\]\n\nwith  \n\n\\[\nc+v+s =9,\\qquad c>v>s\\ge1 .\n\\]\n\n---\n\n### 1. Find all possible triples \\((c,v,s)\\).\n\nSince \\(c>v>s\\ge 1\\),\n\n\\[\nc\\ge s+2,\\; v\\ge s+1 \\Longrightarrow c+v+s\\ge 3s+3\\le9\\Longrightarrow s\\le2 .\n\\]\n\n- **If \\(s=1\\)**: \\(v\\ge2,\\ c\\ge3\\) and \\(c+v=8\\).  \n  Possibilities: \\((c,v)=(6,2),(5,3)\\).\n\n- **If \\(s=2\\)**: \\(v\\ge3,\\ c\\ge4\\) and \\(c+v=7\\).  \n  Possibility: \\((c,v)=(4,3)\\).\n\nThus the only triples are  \n\n\\[\n(6,2,1),\\quad (5,3,1),\\quad (4,3,2).\n\\]\n\n---\n\n### 2. Count assignments for each triple.\n\nFor a given \\((c,v,s)\\) the number of assignments of flavors to the nine distinct players is the multinomial coefficient  \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\n\\[\n\\begin{aligned}\n(6,2,1):\\quad &\\frac{9!}{6!\\,2!\\,1!}= \\binom{9}{6}\\binom{3}{2}=84\\cdot3=252,\\\\[4pt]\n(5,3,1):\\quad &\\frac{9!}{5!\\,3!\\,1!}= \\binom{9}{5}\\binom{4}{3}=126\\cdot4=504,\\\\[4pt]\n(4,3,2):\\quad &\\frac{9!}{4!\\,3!\\,2!}= \\binom{9}{4}\\binom{5}{3}=126\\cdot10=1260.\n\\end{aligned}\n\\]\n\n---\n\n### 3. Total number of assignments\n\n\\[\nN = 252+504+1260 = 2016.\n\\]\n\n---\n\n### 4. Remainder modulo \\(1000\\)\n\n\\[\nN \\bmod 1000 = 2016 \\bmod 1000 = 16.\n\\]\n\n\\[\n\\boxed{16}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 16

    \n

    Extracted Answer: 16

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the trapezoid have parallel sides \\(r\\) and \\(s\\) \\((r\\neq s)\\) and equal legs \\(L\\).\n\n---\n\n### 1.  Semiperimeter from the incircle\n\nA convex quadrilateral that contains an incircle (a tangential quadrilateral) satisfies  \n\n\\[\n\\text{Area}= (\\text{inradius})\\times (\\text{semiperimeter}).\n\\]\n\nThe inradius is \\(3\\) and the area is \\(72\\); therefore  \n\n\\[\np=\\frac{\\text{Area}}{r_{\\text{in}}}= \\frac{72}{3}=24,\n\\]\n\nwhere \\(p\\) is the semiperimeter.\n\n---\n\n### 2.  Relation among the sides\n\nFor a tangential quadrilateral, Pitot\u2019s theorem gives  \n\n\\[\n\\text{(sum of one pair of opposite sides)} = \\text{(sum of the other pair)} .\n\\]\n\nIn an isosceles trapezoid the opposite sides are the two bases and the two equal legs, so  \n\n\\[\nr+s = L+L =2L \\quad\\Longrightarrow\\quad L=\\frac{r+s}{2}.\n\\]\n\nThe semiperimeter is  \n\n\\[\np = \\frac{r+s+2L}{2}= \\frac{r+s+r+s}{2}=r+s .\n\\]\n\nSince \\(p=24\\), we obtain  \n\n\\[\n\\boxed{r+s=24}.\n\\]\n\nConsequently  \n\n\\[\nL=\\frac{r+s}{2}=12 .\n\\]\n\n---\n\n### 3.  Height of the trapezoid\n\nThe incircle is tangent to both parallel sides, so the distance between those sides (the height \\(h\\)) equals twice the radius:\n\n\\[\nh = 2\\cdot 3 = 6 .\n\\]\n\n---\n\n### 4.  Using the leg length\n\nPlace the trapezoid with its bases horizontal. The horizontal offset between the ends of the bases is \\(\\dfrac{|r-s|}{2}\\). Hence, by the Pythagorean theorem,\n\n\\[\nL^{2}= \\left(\\frac{r-s}{2}\\right)^{2}+h^{2}.\n\\]\n\nWith \\(L=12\\) and \\(h=6\\),\n\n\\[\n12^{2}= \\left(\\frac{r-s}{2}\\right)^{2}+6^{2}\n\\quad\\Longrightarrow\\quad\n144 = \\frac{(r-s)^{2}}{4}+36\n\\quad\\Longrightarrow\\quad\n(r-s)^{2}=432.\n\\]\n\n---\n\n### 5.  Compute \\(r^{2}+s^{2}\\)\n\n\\[\n\\begin{aligned}\n(r+s)^{2} &= r^{2}+2rs+s^{2}=24^{2}=576,\\\\\n(r-s)^{2} &= r^{2}-2rs+s^{2}=432.\n\\end{aligned}\n\\]\n\nAdding these equations eliminates the \\(rs\\) term:\n\n\\[\n(r+s)^{2}+(r-s)^{2}=2(r^{2}+s^{2})\\Longrightarrow\n576+432=2(r^{2}+s^{2}).\n\\]\n\nThus\n\n\\[\nr^{2}+s^{2}= \\frac{1008}{2}=504.\n\\]\n\n---\n\n\\[\n\\boxed{504}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 504

    \n

    Extracted Answer: 504

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The first equation  \n\n\\[\n|25+20i-z|=5\n\\]\n\nis a circle with centre  \n\n\\[\nC=(25,20)\n\\]\n\nand radius \\(r=5\\).\n\nThe second equation  \n\n\\[\n|z-4-k| = |z-3i-k|\n\\]\n\nmeans that \\(z\\) is equidistant from the points  \n\n\\[\nA=4+k \\qquad\\text{and}\\qquad B=3i+k .\n\\]\n\nThus \\(A=(k+4,0),\\; B=(k,3)\\).  \nThe set of points equidistant from \\(A\\) and \\(B\\) is the perpendicular bisector of \\(\\overline{AB}\\).\n\n---\n\n### Equation of the perpendicular bisector\n\nMidpoint of \\(AB\\):\n\n\\[\nM=\\Bigl(\\frac{k+4+k}{2},\\frac{0+3}{2}\\Bigr)=(k+2,\\frac32).\n\\]\n\nThe vector \\(\\overrightarrow{AB}=(-4,3)\\).  \nA direction vector perpendicular to this is \\((3,4)\\) (since \\((-4,3)\\cdot(3,4)=0\\)).  \n\nHence the line has slope \\(\\frac43\\) and equation  \n\n\\[\ny-\\frac32 = \\frac43\\bigl(x-(k+2)\\bigr)\n\\]\n\\[\n\\Longrightarrow\\; y = \\frac43 x - \\frac43 k - \\frac76 .\n\\]\n\nIn standard form:\n\n\\[\n8x-6y = 8k+7 .\n\\]\n\n---\n\n### Tangency condition\n\nThe system will have exactly one solution iff this line is tangent to the circle.  \nThe distance from the centre \\(C=(25,20)\\) to the line \\(8x-6y-(8k+7)=0\\) must equal the radius \\(5\\):\n\n\\[\n\\frac{|8\\cdot25-6\\cdot20-(8k+7)|}{\\sqrt{8^{2}+(-6)^{2}}}=5.\n\\]\n\nCompute the numerator:\n\n\\[\n8\\cdot25-6\\cdot20-(8k+7)=200-120-8k-7=73-8k.\n\\]\n\nSince \\(\\sqrt{8^{2}+6^{2}}=10\\),\n\n\\[\n\\frac{|73-8k|}{10}=5 \\quad\\Longrightarrow\\quad |73-8k|=50.\n\\]\n\nThus  \n\n\\[\n73-8k = 50 \\quad\\text{or}\\quad 73-8k = -50.\n\\]\n\n\\[\n\\begin{cases}\n8k = 23 \\;\\;\\Rightarrow\\; k = \\dfrac{23}{8},\\\\[4pt]\n8k = 123\\;\\Rightarrow\\; k = \\dfrac{123}{8}.\n\\end{cases}\n\\]\n\nBoth values give a tangent line, so each yields exactly one solution \\(z\\).\n\n---\n\n### Sum of all possible \\(k\\)\n\n\\[\nk_1+k_2 = \\frac{23}{8}+\\frac{123}{8}= \\frac{146}{8}= \\frac{73}{4}.\n\\]\n\nWrite \\(\\frac{73}{4}\\) as \\(\\frac{m}{n}\\) with \\(\\gcd(m,n)=1\\): \\(m=73,\\ n=4\\).\n\n\\[\nm+n = 73+4 = 77.\n\\]\n\n\\[\n\\boxed{77}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 77

    \n

    Extracted Answer: 77

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The equation  \n\n\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\nis a homogeneous quadratic form.  Factor it over the rationals.\n\n\\[\n12x^{2}-xy-6y^{2}= -6\\Bigl(y-\\frac43x\\Bigr)\\Bigl(y+\\frac32x\\Bigr)\n\\]\n\nHence  \n\n\\[\n12x^{2}-xy-6y^{2}=0\\iff \n\\Bigl(y-\\frac43x\\Bigr)\\Bigl(y+\\frac32x\\Bigr)=0 .\n\\]\n\nSo any integer solution must satisfy one of the two linear equations  \n\n\\[\ny=\\frac{4}{3}x\\quad\\text{or}\\quad y=-\\frac32 x .\n\\]\n\n---\n\n### 1.  Solutions of \\(y=\\frac43x\\)\n\nWrite \\(3y=4x\\).  \nSince \\(\\gcd(3,4)=1\\), the integer solutions are  \n\n\\[\nx=3k,\\qquad y=4k\\qquad(k\\in\\mathbb Z).\n\\]\n\nBoth coordinates must lie in \\([-100,100]\\):\n\n\\[\n-100\\le 3k\\le100,\\qquad -100\\le4k\\le100\n\\]\n\nThe second inequality is stricter, giving  \n\n\\[\n-25\\le k\\le 25 .\n\\]\n\nThus there are  \n\n\\[\n25-(-25)+1 = 51\n\\]\n\ninteger points on this line.\n\n---\n\n### 2.  Solutions of \\(y=-\\frac32x\\)\n\nWrite \\(2y=-3x\\).  \nSince \\(\\gcd(2,3)=1\\), the integer solutions are  \n\n\\[\nx=2k,\\qquad y=-3k\\qquad(k\\in\\mathbb Z).\n\\]\n\nBoth coordinates must satisfy  \n\n\\[\n-100\\le2k\\le100,\\qquad -100\\le-3k\\le100 .\n\\]\n\nThese give  \n\n\\[\n-50\\le k\\le50,\\qquad -\\frac{100}{3}\\le k\\le\\frac{100}{3}\\Longrightarrow -33\\le k\\le33 .\n\\]\n\nHence there are  \n\n\\[\n33-(-33)+1 = 67\n\\]\n\ninteger points on this line.\n\n---\n\n### 3.  Remove double\u2011counted point\n\nThe two lines intersect only at \\((0,0)\\) (when \\(k=0\\) in both families).  \nThus the total number of distinct ordered pairs is  \n\n\\[\n51+67-1 = 117 .\n\\]\n\n\\[\n\\boxed{117}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 117

    \n

    Extracted Answer: 117

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1.  Divisibility conditions**\n\nFor an integer to be divisible by \\(22\\) it must be divisible by \\(2\\) and by \\(11\\).\n\n*Divisible by 2* \u2013 the last digit (the units digit) must be even, i.e. one of \\(\\{2,4,6,8\\}\\).\n\n*Divisible by 11* \u2013 for an 8\u2011digit number \\(a_1a_2\\ldots a_8\\) (with \\(a_1\\) the leftmost digit) the rule is  \n\n\\[\n(a_8+a_6+a_4+a_2)-(a_7+a_5+a_3+a_1)\\equiv0\\pmod{11}.\n\\]\n\nThus the sum of the digits in the even positions (2,4,6,8) equals the sum of the digits in the odd positions (1,3,5,7) modulo \\(11\\).\n\nThe total sum of the digits \\(1+2+\\dots+8=36\\).  \nIf the two sums are equal modulo \\(11\\), then\n\n\\[\n2\\cdot(\\text{odd\u2013position sum})\\equiv36\\equiv3\\pmod{11}\n\\Longrightarrow\\text{odd\u2013position sum}\\equiv7\\pmod{11}.\n\\]\n\nThe possible values are \\(7,18,29,\\ldots\\).  \nSince four distinct digits from \\(\\{1,\\dots ,8\\}\\) can sum only between \\(10\\) and \\(26\\), the only feasible value is  \n\n\\[\n\\boxed{\\text{odd\u2013position sum}=18}.\n\\]\n\nConsequently the even\u2013position sum is also \\(18\\).\n\n**Step 2.  Choose the digits for the odd positions**\n\nWe need all 4\u2011element subsets of \\(\\{1,2,3,4,5,6,7,8\\}\\) whose sum is \\(18\\).\n\nListing them (or by noting the complementary pairs) gives  \n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are  \n\n\\[\n\\boxed{M=8}\n\\]\n\nsuch subsets.  \nEach of them contains exactly two even digits (because a sum of 18 cannot be obtained with a different parity distribution), so for every subset \\(A\\) (odd\u2011position digits) we have  \n\n\\[\ne_A=2,\\qquad E_B=4-e_A=2,\n\\]\n\nwhere \\(E_B\\) is the number of even digits among the complementary set \\(B\\) (the even\u2011position digits).\n\n**Step 3.  Arrange the digits**\n\n*Odd positions* (1,3,5,7): the four digits of \\(A\\) can be placed in \\(4! = 24\\) ways.\n\n*Even positions* (2,4,6,8): the four digits of \\(B\\) must be placed so that the digit in position\u202f8 (the units digit) is even.  \nSince \\(B\\) contains exactly \\(E_B=2\\) even digits, we have  \n\n\\[\n\\text{choices for the units digit}=2,\n\\qquad\n\\text{ways to arrange the remaining three digits}=3! = 6.\n\\]\n\nThus the number of admissible placements for \\(B\\) is  \n\n\\[\nf(B)=2\\cdot 6=12.\n\\]\n\n**Step 4.  Count all numbers**\n\nFor each of the \\(M=8\\) valid subsets \\(A\\),\n\n\\[\n\\text{numbers contributed}=24\\times12=288.\n\\]\n\nHence  \n\n\\[\nN=8\\times288=2304.\n\\]\n\n**Step 5.  Compute the required difference**\n\n\\[\nN-2025=2304-2025=279.\n\\]\n\n\\[\n\\boxed{279}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 279

    \n

    Extracted Answer: 279

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The original parabola is  \n\n\\[\ny=x^{2}-4 .\n\\]\n\n---\n\n### 1.  Equation of the rotated parabola  \n\nRotate the plane \\(60^{\\circ}\\) counter\u2011clockwise about the origin.\nIf \\((X,Y)\\) is a point of the rotated parabola, then rotating it back\n\\(60^{\\circ}\\) clockwise gives a point \\((x',y')\\) on the original parabola.\n\n\\[\n\\begin{pmatrix}x'\\\\y'\\end{pmatrix}\n=\n\\begin{pmatrix}\\cos60^\\circ&\\sin60^\\circ\\\\\n-\\sin60^\\circ&\\cos60^\\circ\\end{pmatrix}\n\\begin{pmatrix}X\\\\Y\\end{pmatrix}\n=\n\\begin{pmatrix}\\frac12X+\\frac{\\sqrt3}{2}Y\\\\[2pt]\n-\\frac{\\sqrt3}{2}X+\\frac12Y\\end{pmatrix}.\n\\]\n\nThus  \n\n\\[\ny' = x'^2-4\\Longrightarrow \n\\frac{-\\sqrt3X+Y}{2} =\\Bigl(\\frac{X+\\sqrt3Y}{2}\\Bigr)^{\\!2}-4.\n\\]\n\nMultiplying by \\(2\\) and simplifying gives the equation of the rotated\nparabola:\n\n\\[\n(x+\\sqrt3\\,y)^{2}+2\\sqrt3\\,x-2y-16=0. \\tag{1}\n\\]\n\n---\n\n### 2.  Intersection with the original parabola  \n\nSubstituting \\(y=x^{2}-4\\) from the original parabola into (1) yields\n\n\\[\n\\bigl(x+\\sqrt3(x^{2}-4)\\bigr)^{2}+2\\sqrt3\\,x-2(x^{2}-4)-16=0,\n\\]\n\nwhich simplifies to\n\n\\[\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40=0. \\tag{2}\n\\]\n\n---\n\n### 3.  Factoring the quartic  \n\nLook for a factorisation of the form  \n\\((ax^{2}+b\\sqrt3\\,x+c)(dx^{2}+e\\sqrt3\\,x+f)\\).\nMatching coefficients gives the system  \n\n\\[\n\\begin{cases}\nad=3\\\\\nae+bd=2\\\\\naf+3be+cd=-25\\\\\nbf+ce=-6\\\\\ncf=40\n\\end{cases}\n\\]\n\nwhich is solved by  \n\n\\[\na=1,\\;b=1,\\;c=-4,\\qquad d=3,\\;e=-1,\\;f=-10 .\n\\]\n\nHence\n\n\\[\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40\n   =(x^{2}+\\sqrt3\\,x-4)(3x^{2}-\\sqrt3\\,x-10). \\tag{3}\n\\]\n\n---\n\n### 4.  Solving for the intersection points  \n\nFrom (3) we obtain four possible \\(x\\)-coordinates.\n\n1. \\(x^{2}+\\sqrt3\\,x-4=0\\)\n\n\\[\nx=\\frac{-\\sqrt3\\pm\\sqrt{19}}{2}.\n\\]\n\n2. \\(3x^{2}-\\sqrt3\\,x-10=0\\)\n\n\\[\nx=\\frac{\\sqrt3\\pm\\sqrt{123}}{6}.\n\\]\n\nFor each \\(x\\) we compute \\(y=x^{2}-4\\).\n\n| \\(x\\) | sign of \\(x\\) | \\(y=x^{2}-4\\) | quadrant |\n|---|---|---|---|\n| \\(\\displaystyle\\frac{-\\sqrt3+\\sqrt{19}}{2}\\) | \\(>0\\) | \\(\\displaystyle\\frac{3-\\sqrt{57}}{2}<0\\) | **IV** |\n| \\(\\displaystyle\\frac{-\\sqrt3-\\sqrt{19}}{2}\\) | \\(<0\\) | \\(>0\\) | II |\n| \\(\\displaystyle\\frac{\\sqrt3+\\sqrt{123}}{6}\\) | \\(>0\\) | \\(>0\\) | I |\n| \\(\\displaystyle\\frac{\\sqrt3-\\sqrt{123}}{6}\\) | \\(<0\\) | \\(<0\\) | III |\n\nOnly the first solution lies in the fourth quadrant, as required.\n\n---\n\n### 5.  The required \\(y\\)-coordinate  \n\nFor  \n\\[\nx=\\frac{-\\sqrt3+\\sqrt{19}}{2},\n\\]\n\\[\ny=x^{2}-4\n   =\\left(\\frac{-\\sqrt3+\\sqrt{19}}{2}\\right)^{2}-4\n   =\\frac{19+3-2\\sqrt{57}}{4}-4\n   =\\frac{22-2\\sqrt{57}}{4}-\\frac{16}{4}\n   =\\frac{3-\\sqrt{57}}{2}.\n\\]\n\nThus  \n\n\\[\ny=\\frac{a-\\sqrt{b}}{c}\\quad\\text{with}\\quad a=3,\\;b=57,\\;c=2,\n\\]\nand \\(\\gcd(a,c)=1\\).\n\nFinally  \n\n\\[\na+b+c=3+57+2=62.\n\\]\n\n\\[\n\\boxed{62}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 62

    \n

    Extracted Answer: 62

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\n\\vec{AB}= \\mathbf b ,\\qquad \\vec{AC}= \\mathbf c ,\\qquad \n|\\mathbf b| =28,\\; |\\mathbf c| =91 .\n\\]\n\nWrite every point on the sides as a linear combination of \\(\\mathbf b,\\mathbf c\\).\n\n\\[\n\\begin{aligned}\nD&=\\frac{4}{28}\\mathbf b =\\frac17\\mathbf b ,&\nE&=\\frac{20}{28}\\mathbf b =\\frac57\\mathbf b ,\\\\[2mm]\nF&=\\frac{13}{91}\\mathbf c ,&\nG&=\\frac{65}{91}\\mathbf c .\n\\end{aligned}\n\\]\n\nThe reflections about a point are central symmetries, thus  \n\n\\[\nM=2F-D=-\\frac17\\mathbf b+\\frac{26}{91}\\mathbf c ,\\qquad\nN=2E-G=\\frac{10}{7}\\mathbf b-\\frac{65}{91}\\mathbf c .\n\\]\n\n--------------------------------------------------------------------\n### 1.  Area of \\(\\triangle ABC\\)\n\nThe quadrilateral \\(DEGF\\) can be split into \\(\\triangle DE G\\) and \\(\\triangle DGF\\).\n\nFor any three points \\(P=\\alpha\\mathbf b+\\beta\\mathbf c\\),\n\\(Q=\\gamma\\mathbf b+\\delta\\mathbf c\\) we have  \n\n\\[\n\\bigl[(Q-P)\\times(R-P)\\bigr]\n    =(\\gamma-\\alpha)(\\zeta-\\beta)-(\\delta-\\beta)(\\xi-\\alpha)\\;\\bigl(\\mathbf b\\times\\mathbf c\\bigr),\n\\]\n\nso the area of a triangle equals the absolute value of that determinant\ntimes \\(\\dfrac12|\\mathbf b\\times\\mathbf c|\\).\n\n*Triangle \\(DEG\\)*  \n\n\\[\n\\det\\!\\begin{pmatrix}\n\\frac57-\\frac17 & 0\\\\[2mm]\n0-\\frac17&\\frac{65}{91}\n\\end{pmatrix}\n  =\\frac{20}{49}.\n\\]\n\nThus \\(\\displaystyle\n\\text{Area}(DEG)=\\frac{20}{49}\\cdot\\frac12|\\mathbf b\\times\\mathbf c|.\n\\)\n\n*Triangle \\(DGF\\)*  \n\n\\[\n\\det\\!\\begin{pmatrix}\n0-\\frac17&\\frac{65}{91}\\\\[2mm]\n0-\\frac17&\\frac{13}{91}\n\\end{pmatrix}\n  =\\frac{4}{49},\n\\qquad\n\\text{Area}(DGF)=\\frac{4}{49}\\cdot\\frac12|\\mathbf b\\times\\mathbf c|.\n\\]\n\nHence  \n\n\\[\n\\text{Area}(DEGF)=\\Bigl(\\frac{20}{49}+\\frac{4}{49}\\Bigr)\n                  \\frac12|\\mathbf b\\times\\mathbf c|\n                =\\frac{24}{49}\\,\\text{Area}(\\triangle ABC).\n\\]\n\nGiven \\(\\text{Area}(DEGF)=288\\),\n\n\\[\n\\frac{24}{49}\\,\\text{Area}(\\triangle ABC)=288\n\\Longrightarrow\n\\text{Area}(\\triangle ABC)=288\\cdot\\frac{49}{24}=12\\cdot49=588.\n\\]\n\n--------------------------------------------------------------------\n### 2.  Area of the heptagon \\(AFNBCEM\\)\n\nPlace the points in the \\((\\alpha,\\beta)\\)\u2013plane where \\((\\alpha,\\beta)\\) are the\ncoefficients of \\(\\mathbf b,\\mathbf c\\):\n\n\\[\n\\begin{array}{c|c}\n\\text{Vertex}&(\\alpha,\\beta)\\\\\\hline\nA&(0,0)\\\\\nF&(0,\\frac{13}{91})\\\\\nN&(\\frac{10}{7},-\\frac{65}{91})\\\\\nB&(1,0)\\\\\nC&(0,1)\\\\\nE&(\\frac57,0)\\\\\nM&\\bigl(-\\frac17,\\frac{26}{91}\\bigr)\n\\end{array}\n\\]\n\nApplying the shoelace formula to these seven points gives\n\n\\[\n\\begin{aligned}\n\\sum x_i y_{i+1}-y_i x_{i+1}\n&=1,\\\\[2mm]\n\\text{Area}_{\\text{coeff}}&=\\frac12\\cdot1=\\frac12 .\n\\end{aligned}\n\\]\n\nIn the original plane a figure\u2019s area is multiplied by\n\\(|\\mathbf b\\times\\mathbf c|=2\\,\\text{Area}(\\triangle ABC)\\).\nThus\n\n\\[\n\\text{Area}(AFNBCEM)=|\\mathbf b\\times\\mathbf c|\\,\n\\frac12\n   =\\text{Area}(\\triangle ABC)=588.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{588}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 588

    \n

    Extracted Answer: 588

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The 12 letters are  \n\n\\[\nA,B,C,D,E,F,G,H,I,J,K,L .\n\\]\n\nA random grouping into six unordered pairs is performed, each pair is written with its\nletters in alphabetical order, and then the six two\u2011letter \u201cwords\u2019\u2019 are listed\nalphabetically.  \n\nLet the word that appears last (the lexicographically greatest word) be called the **max word**.\nThe max word is determined by the *first* letters of the six pairs:\nits first letter is the largest among the six first letters, and if several pairs have that\nfirst letter, the one with the larger second letter wins.\n\n--------------------------------------------------------------------\n### 1.   Total number of possible pairings\n\\[\n\\#\\text{pairings}= \\frac{12!}{2!^{6}\\,6!}=10395 .\n\\]\n\n--------------------------------------------------------------------\n### 2.   When does the max word contain \\(G\\)?\n\nTwo mutually exclusive possibilities:\n\n* **(A) \\(G\\) is the first letter of its pair.**  \n  Then the pair is \\((G,X)\\) with \\(X\\in\\{H,I,J,K,L\\}\\).\n  For \\((G,X)\\) to be the max word, no other pair may have a first\n  letter larger than \\(G\\).  \n  Hence each of the other four letters \\(\\{H,I,J,K,L\\}\\setminus\\{X\\}\\) must be paired\n  with a letter \\(\\le F\\) (otherwise its first letter would exceed \\(G\\)).\n  The remaining letters are  \n\n  * 4 \u201chigh\u2019\u2019 letters \\(\\{H,I,J,K,L\\}\\setminus\\{X\\}\\);\n  * 6 \u201clow\u2019\u2019 letters \\(\\{A,B,C,D,E,F\\}\\).\n\n  Choose which four low letters are matched with the four high letters\n  and then match them (an injection).  \n  The number of ways is  \n\n  \\[\n  {}_{6}P_{4}=6\\cdot5\\cdot4\\cdot3=360 .\n  \\]\n\n  The two low letters left over are forced to pair with each other.\n  Thus for a fixed \\(X\\) there are \\(360\\) pairings, and there are\n  \\(5\\) possible choices for \\(X\\):\n\n  \\[\n  N_A=5\\cdot360=1800 .\n  \\]\n\n* **(B) \\(G\\) is the second letter of its pair.**  \n  Then the pair is \\((X,G)\\) with \\(X<G\\), and \\(X\\) must be the\n  largest first letter of any pair.  \n  If \\(X\\le E\\) there are not enough letters \\(\\le X\\) to pair with all\n  letters \\(>X\\) (there would be more \u201chigh\u2019\u2019 letters than \u201clow\u2019\u2019 ones).  \n  The only possible value is \\(X=F\\).\n\n  Pair \\(G\\) with \\(F\\).  The five letters \\(\\{H,I,J,K,L\\}\\) must each be paired\n  with a distinct letter from \\(\\{A,B,C,D,E\\}\\).  There are  \n\n  \\[\n  5! =120\n  \\]\n\n  ways to do this, and no letters remain.\n\n  Hence  \n\n  \\[\n  N_B =120 .\n  \\]\n\n--------------------------------------------------------------------\n### 3.   Favourable pairings\n\\[\nN_{\\text{fav}}=N_A+N_B=1800+120=1920 .\n\\]\n\n--------------------------------------------------------------------\n### 4.   Desired probability\n\\[\nP=\\frac{N_{\\text{fav}}}{\\#\\text{pairings}}\n   =\\frac{1920}{10395}\n   =\\frac{128}{693}\\qquad(\\gcd(128,693)=1).\n\\]\n\nThus \\(m=128,\\;n=693\\) and  \n\n\\[\nm+n=128+693=821 .\n\\]\n\n\\[\n\\boxed{821}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 821

    \n

    Extracted Answer: 821

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the line be the \\(x\\)-axis and put  \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(c,0),\\qquad D=(d,0),\\qquad E=(e,0),\\qquad F=(f,0)\n\\]\n\nwith the points in the order \\(A\\!<\\!B\\!<\\!C\\!<\\!D\\!<\\!E\\!<\\!F\\).\n\n---\n\n### 1.  Locate the collinear points\n\n\\[\n\\begin{aligned}\nAC&=26 \\Longrightarrow c-0 = 26 \\; \\Rightarrow\\; c=26,\\\\[2pt]\nCE&=31 \\Longrightarrow e-c =31 \\; \\Rightarrow\\; e=26+31=57,\\\\[2pt]\nAF&=73 \\Longrightarrow f=73 .\n\\end{aligned}\n\\]\n\nFrom \\(DF=33\\) we get  \n\n\\[\nf-d =33 \\Longrightarrow d = f-33 = 73-33 =40 .\n\\]\n\nFrom \\(BD=22\\),\n\n\\[\nd-b =22 \\Longrightarrow b = d-22 = 40-22 =18 .\n\\]\n\nThus  \n\n\\[\nA=(0,0),\\; B=(18,0),\\; C=(26,0),\\; D=(40,0),\\; E=(57,0),\\; F=(73,0).\n\\]\n\nAll distances given in the statement are satisfied.\n\n---\n\n### 2.  Position of \\(G\\)\n\nLet \\(G=(x,y)\\) with \\(y\\neq0\\).  \nThe distances to \\(C\\) and \\(D\\) give\n\n\\[\n\\begin{cases}\n(x-26)^2+y^2 = 40^2 =1600,\\\\[2pt]\n(x-40)^2+y^2 = 30^2 = 900 .\n\\end{cases}\n\\]\n\nSubtracting the equations:\n\n\\[\n(x-26)^2-(x-40)^2 = 700.\n\\]\n\nExpanding,\n\n\\[\n(-52x+26^2)+(80x-40^2)=700\\;\\Longrightarrow\\;28x-924=700,\n\\]\n\nso  \n\n\\[\n28x=1624\\quad\\Longrightarrow\\quad x=58 .\n\\]\n\nPlug \\(x=58\\) into \\((x-26)^2+y^2=1600\\):\n\n\\[\n(58-26)^2+y^2 = 32^2 + y^2 = 1600\\;\\Longrightarrow\\; y^2 = 1600-1024 = 576,\n\\]\n\nhence \\(|y|=24\\).  \nTake \\(G=(58,24)\\) (the other choice \\((58,-24)\\) gives the same area).\n\n---\n\n### 3.  Area of \\(\\triangle BGE\\)\n\nPoints:\n\n\\[\nB=(18,0),\\qquad E=(57,0),\\qquad G=(58,24).\n\\]\n\nThe base \\(BE\\) lies on the \\(x\\)-axis, so its length is  \n\n\\[\nBE = 57-18 = 39.\n\\]\n\nThe altitude from \\(G\\) to the line \\(BE\\) is simply \\(|y| = 24\\).\n\nThus  \n\n\\[\n\\text{Area} = \\frac12 \\times (\\text{base}) \\times (\\text{height})\n            = \\frac12 \\times 39 \\times 24\n            = 39 \\times 12\n            = 468 .\n\\]\n\n(Equivalently, the shoelace formula gives \\(\\frac12|1368-432|=468\\).)\n\n---\n\n\\[\n\\boxed{468}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 468

    \n

    Extracted Answer: 468

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nd=n+2\\qquad (d\\ge 1,\\; n=d-2).\n\\]\n\nThen  \n\n\\[\nn+3=d+1 ,\\qquad n^{2}+9=(d-2)^{2}+9=d^{2}-4d+13 .\n\\]\n\nHence  \n\n\\[\n3(n+3)(n^{2}+9)=3(d+1)(d^{2}-4d+13).\n\\]\n\nThe condition \\(d\\mid 3(n+3)(n^{2}+9)\\) becomes  \n\n\\[\nd \\mid 3(d+1)(d^{2}-4d+13).\n\\]\n\nTake this congruence modulo \\(d\\).  \nSince \\(d\\equiv0\\pmod d\\),\n\n\\[\nd+1\\equiv1,\\qquad d^{2}-4d+13\\equiv13\\pmod d,\n\\]\n\nso  \n\n\\[\n3(d+1)(d^{2}-4d+13)\\equiv 3\\cdot1\\cdot13=39\\pmod d.\n\\]\n\nThus \\(d\\) must divide \\(39\\):\n\n\\[\nd\\in\\{1,3,13,39\\}.\n\\]\n\nRecall \\(d=n+2\\) and we need \\(n>0\\).  \nHence\n\n\\[\nn=d-2\\in\\{-1,1,11,37\\}.\n\\]\n\nDiscard the non\u2011positive value \\(-1\\). The admissible positive integers are  \n\n\\[\nn=1,\\;11,\\;37 .\n\\]\n\nCheck:\n\n* \\(n=1\\): \\(n+2=3\\) and \\(3(1+3)(1^{2}+9)=120\\) is divisible by \\(3\\).\n* \\(n=11\\): \\(n+2=13\\) and \\(3(14)(130)=5460\\) is divisible by \\(13\\).\n* \\(n=37\\): \\(n+2=39\\) and \\(3(40)(1378)=165360\\) is divisible by \\(39\\).\n\nAll satisfy the condition.  \n\nThe required sum is  \n\n\\[\n1+11+37 = 49.\n\\]\n\n\\[\n\\boxed{49}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 49

    \n

    Extracted Answer: 49

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nA piecewise linear periodic function is defined by $f(x)=\\begin{cases}x&\\text{if }x\\in[-1,1)\\\\2-x&\\text{if }x\\in[1,3)\\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\\frac{a+b\\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For the periodic saw\u2011tooth  \n\n\\[\nf(x)=\\begin{cases}\nx-4k,&x\\in[-1+4k,\\,1+4k)\\\\[2pt]\n4k+2-x,&x\\in[1+4k,\\,3+4k)\n\\end{cases}\\qquad(k\\in\\mathbb Z)\n\\]\n\nthe parabola is  \n\n\\[\nx = 34y^{2}\\qquad (y\\in[-1,1]).\n\\]\n\nHence an intersection point \\((x,y)\\) must satisfy  \n\n\\[\ny=f(x),\\qquad x=34y^{2}.\n\\]\n\n---\n\n### 1.  Intersections on an \u201cup\u201d segment  \n\nOn an up segment \\(x= y+4k\\).  \nSubstituting \\(x=34y^{2}\\) gives  \n\n\\[\n34y^{2}=y+4k\\;\\Longrightarrow\\;34y^{2}-y-4k=0 .\n\\]\n\nFor each integer \\(k\\) with an up segment inside \\([0,34]\\) (i.e. \\(k=0,1,\\dots ,8\\))\nthe two roots are  \n\n\\[\ny_{k}^{\\pm}=\\frac{1\\pm\\sqrt{1+544k}}{68}.\n\\]\n\nBoth satisfy the interval \\([-1,1]\\) and give \\(x\\in[-1+4k,\\,1+4k)\\);\nhence each \\(k\\) contributes **two** intersection points.\n\nThe sum of the two roots for a fixed \\(k\\) is, by Vieta,\n\n\\[\ny_{k}^{+}+y_{k}^{-}= \\frac{1}{34}.\n\\]\n\nThus the total contribution of all up\u2011segments is  \n\n\\[\n\\sum_{k=0}^{8}(y_{k}^{+}+y_{k}^{-})=9\\cdot\\frac1{34}=\\frac9{34}.\n\\]\n\n---\n\n### 2.  Intersections on a \u201cdown\u2019\u2019 segment  \n\nOn a down segment \\(x=4k+2-y\\).  \nUsing \\(x=34y^{2}\\),\n\n\\[\n34y^{2}=4k+2-y\\;\\Longrightarrow\\;34y^{2}+y-(4k+2)=0 .\n\\]\n\nFor each \\(k=0,1,\\dots ,8\\) the roots are  \n\n\\[\nz_{k}^{\\pm}= \\frac{-1\\pm\\sqrt{273+544k}}{68}.\n\\]\n\nThe admissible \\(y\\)-values must satisfy \\(-1<y\\le 1\\).\n\n* For \\(k=0,1,\\dots ,7\\) we have \\(\\sqrt{273+544k}<67\\); both roots lie in\n\\((-1,1]\\) and give valid points.\n* For \\(k=8\\) the negative root satisfies \\(y<-1\\) and is rejected; only the\npositive root remains.\n\nHence we obtain two points for each \\(k=0,\\dots ,7\\) and one point for\n\\(k=8\\) \u2013 a total of \\(17\\) points.\n\nThe sum of the two roots of the quadratic for any \\(k\\) is  \n\n\\[\nz_{k}^{+}+z_{k}^{-}= -\\frac1{34}.\n\\]\n\nConsequently  \n\n\\[\n\\sum_{k=0}^{7}(z_{k}^{+}+z_{k}^{-})=8\\!\\left(-\\frac1{34}\\right)=-\\frac8{34},\n\\]\nand we must add the remaining positive root for \\(k=8\\),\n\n\\[\nz_{8}^{+}= \\frac{-1+\\sqrt{4625}}{68}= \\frac{-1+5\\sqrt{185}}{68}.\n\\]\n\nTherefore the total contribution of the down\u2011segments is  \n\n\\[\n-\\frac8{34}+z_{8}^{+}= -\\frac{16}{68}+ \\frac{-1+5\\sqrt{185}}{68}\n= \\frac{-17+5\\sqrt{185}}{68}.\n\\]\n\n---\n\n### 3.  Sum of all \\(y\\)-coordinates  \n\n\\[\n\\begin{aligned}\nS&=\\frac9{34}+ \\left(-\\frac8{34}+z_{8}^{+}\\right)\\\\[2pt]\n  &=\\frac1{34}+z_{8}^{+}\n   =\\frac{2}{68}+ \\frac{-1+5\\sqrt{185}}{68}\n   =\\frac{1+5\\sqrt{185}}{68}.\n\\end{aligned}\n\\]\n\nThus the sum can be written as  \n\n\\[\nS=\\frac{a+b\\sqrt{c}}{d}\\quad\\text{with}\\quad \na=1,\\;b=5,\\;c=185,\\;d=68.\n\\]\n\nAll conditions are satisfied (\\(\\gcd(a,b,d)=1\\), \\(c\\) square\u2011free).\n\nFinally  \n\n\\[\na+b+c+d = 1+5+185+68 = \\boxed{259}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 259

    \n

    Extracted Answer: 259

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 27 cells of a $3\\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. \n | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | \n | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | \n | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | \n The number of different ways to fill such a grid can be written as $p^a\\cdot q^b\\cdot r^c\\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\\cdot a+q\\cdot b+r\\cdot c+s\\cdot d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The grid has three rows and three vertical \\(3\\times3\\) blocks.  \nLet the rows be \\(R_1,R_2,R_3\\) and the blocks be \\(B_1,B_2,B_3\\).\n\n---\n\n### 1.  How the numbers are placed in the rows and blocks  \n\nFor a given number \\(k\\in\\{1,\\ldots ,9\\}\\) it must appear  \n\n* once in each row (three appearances), and  \n* once in each block (three appearances).\n\nHence the three positions of \\(k\\) correspond to a **bijection** between the set of rows and the set of blocks.  \nThus for each \\(k\\) we may choose a permutation \\(\\sigma_k\\in S_3\\) :\n\n\\[\n\\sigma_k(r)=\\text{the block in which }k\\text{ occurs in row }r .\n\\]\n\nConversely, a choice of a permutation \\(\\sigma_k\\) for each \\(k\\) determines in which block every entry of the grid lies.\n\n---\n\n### 2.  Counting the possible collections of permutations  \n\nWrite a column of the \\(3\\times9\\) \u201cblock\u2011matrix\u2019\u2019 \\(M\\) as a permutation of \\((1,2,3)\\) \u2013 the three symbols denote the block in which the number of that column appears in rows \\(1,2,3\\).\n\nThus we need a sequence of nine permutations \\((p_1,\\dots ,p_9)\\) such that each ordered pair \\((\\text{row},\\text{block})\\) occurs exactly three times; equivalently each number appears three times in each row and three times in each block.\n\nLet  \n\n\\[\nx_1,\\dots ,x_6\n\\]\n\nbe the numbers of the six possible permutations of \\(S_3\\) in the sequence.\nThe conditions give the linear system  \n\n\\[\n\\begin{aligned}\nx_1+x_2&=3\\\\\nx_3+x_4&=3\\\\\nx_5+x_6&=3\\\\\nx_3+x_5&=3\\\\\nx_1+x_6&=3\\\\\nx_2+x_4&=3\\\\\nx_4+x_6&=3\\\\\nx_2+x_5&=3\\\\\nx_1+x_3&=3\n\\end{aligned}\n\\]\n\nwhich has the solutions  \n\n\\[\n\\begin{array}{c|cccccc}\n &x_1&x_2&x_3&x_4&x_5&x_6\\\\\\hline\nt=0&0&3&3&0&0&3\\\\\nt=1&1&2&2&1&1&2\\\\\nt=2&2&1&1&2&2&1\\\\\nt=3&3&0&0&3&3&0\n\\end{array}\n\\qquad (t=0,1,2,3).\n\\]\n\nFor a fixed solution the columns can be ordered in\n\n\\[\n\\frac{9!}{x_1!x_2!x_3!x_4!x_5!x_6!}\n\\]\n\nways.  Summing over the four solutions gives  \n\n\\[\n\\begin{aligned}\nN_M &= \\frac{9!}{3!^3}+2\\cdot\\frac{9!}{1!\\,2!^2\\,1!\\,1!\\,2!}\n      +\\frac{9!}{3!^3}\\\\\n    &=1680+2\\cdot45360+1680=94\\,080 .\n\\end{aligned}\n\\]\n\nSo there are \\(94\\,080\\) possible matrices \\(M\\) describing in which block each number lies.\n\n---\n\n### 3.  Filling the inner columns of each block  \n\nInside a block \\(B\\) each row already has three distinct numbers (the three numbers assigned to that row in the block).  \nThese three numbers can be placed in the three inner columns of the block in any order, i.e. in \\((3!)^3=6^3\\) ways.\n\nSince the three blocks are independent, the total number of ways to complete the grid is  \n\n\\[\n94\\,080\\cdot (6^3)^3 = 94\\,080\\cdot 6^9 .\n\\]\n\nBecause \\(6^9 = (2\\cdot3)^9 =2^{9}\\,3^{9}\\),\n\n\\[\n\\begin{aligned}\n94\\,080\\cdot6^9 &= \\bigl(2^7\\cdot3\\cdot5\\cdot7^2\\bigr)\\cdot\\bigl(2^9\\cdot3^9\\bigr)\\\\\n                &=2^{16}\\cdot3^{10}\\cdot5^1\\cdot7^2 .\n\\end{aligned}\n\\]\n\nThus the total number of fillings is  \n\n\\[\n2^{16}\\cdot 3^{10}\\cdot 5^{1}\\cdot 7^{2}.\n\\]\n\n---\n\n### 4.  Computing the required sum  \n\nTake \\(p=2,\\ a=16;\\; q=3,\\ b=10;\\; r=5,\\ c=1;\\; s=7,\\ d=2\\).\n\n\\[\np\\,a+q\\,b+r\\,c+s\\,d = 2\\cdot16 + 3\\cdot10 + 5\\cdot1 + 7\\cdot2\n                     = 32 + 30 + 5 + 14 = 81 .\n\\]\n\n\\[\n\\boxed{81}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 81

    \n

    Extracted Answer: 81

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    First rewrite the chain of inequalities  \n\n\\[\nx-yz<y-zx<z-xy\n\\]\n\nas two separate inequalities.\n\n\\[\n\\begin{aligned}\nx-yz &< y-zx \\\\[2mm]\ny-zx &< z-xy\n\\end{aligned}\n\\]\n\n\\[\n\\begin{aligned}\nx-yz-y+zx&<0\\qquad\\Longrightarrow\\qquad (x-y)(1+z)<0,\\\\[2mm]\ny-zx-z+xy&<0\\qquad\\Longrightarrow\\qquad (y-z)(1+x)<0 .\n\\end{aligned}\n\\]\n\nThe third inequality \\( (x-z)(1+y)<0\\) follows by adding the two, so the region is\ndescribed by  \n\n\\[\n\\boxed{(x-y)(1+z)<0,\\qquad (y-z)(1+x)<0}\n\\]\n\ntogether with the plane \\(x+y+z=75\\).\n\n---\n\n### 1.   Sign patterns\n\nLet  \n\n\\[\nS_x=\\operatorname{sgn}(1+x),\\quad S_y=\\operatorname{sgn}(1+y),\\quad S_z=\\operatorname{sgn}(1+z).\n\\]\n\nFrom the two product\u2011inequalities we obtain  \n\n\\[\n\\operatorname{sgn}(x-y)=-S_z,\\qquad \n\\operatorname{sgn}(y-z)=-S_x .\n\\]\n\nThus  \n\n\\[\n\\begin{array}{c|c|c|c}\nS_x & S_y & S_z &\\text{order of }x,y,z\\\\ \\hline\n+ & + & + & x<y<z\\\\\n+ & - & - & y<z<x\\\\\n- & + & + & x<z<y\\\\\n- & - & - & \\text{impossible (sum }\\;75) \n\\end{array}\n\\]\n\nHence the points satisfying the chain split into three convex regions, corresponding\nto the three admissible sign patterns above.\n\n---\n\n### 2.   Which region is bounded?\n\n*Region  \\(x<y<z\\)  (all three numbers \\(> -1\\)).*  \nUsing the plane equation \\(z=75-x-y\\) the conditions become  \n\n\\[\n-1<x<y,\\qquad y<\\frac{75-x}{2}.\n\\]\n\nIn the \\((x,y)\\)-plane this is the triangle bounded by  \n\n\\[\nx=-1,\\; y=x,\\; y=\\frac{75-x}{2}.\n\\]\n\nThe three vertices are  \n\n\\[\n(-1,-1),\\;(-1,38),\\;(25,25).\n\\]\n\nIts area in the \\(xy\\)-plane is\n\n\\[\n\\frac12\\,(39)(26)=507 .\n\\]\n\nSince the plane \\(x+y+z=75\\) is tilted, an element \\(dx\\,dy\\) on the\n\\(xy\\)-plane corresponds to an area element  \n\n\\[\n\\sqrt{1+(\\partial z/\\partial x)^2+(\\partial z/\\partial y)^2}\\;dx\\,dy\n        =\\sqrt{1+1+1}\\;dx\\,dy=\\sqrt3\\,dx\\,dy .\n\\]\n\nThus the area of this region in the plane is  \n\n\\[\n507\\sqrt3 .\n\\]\n\n*The other two regions* (\\(y<z<x\\) and \\(x<z<y\\)) project onto unbounded\nhalf\u2011planes, so they have infinite area.\n\nHence the **unique finite region** is the one with \\(x<y<z\\), and its area is\n\\(507\\sqrt3\\).\n\n---\n\n### 3.   Answer\n\nThe area is \\(a\\sqrt b\\) with \\(a=507\\) and \\(b=3\\); therefore  \n\n\\[\na+b=507+3=510 .\n\\]\n\n\\[\n\\boxed{510}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 510

    \n

    Extracted Answer: 510

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe product $ \\prod_{k=4}^{63} \\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})} = \\frac{\\log_4(5^{15})}{\\log_5(5^{12})} \\cdot \\frac{\\log_5(5^{24})}{\\log_6(5^{21})} \\cdot \\frac{\\log_6(5^{35})}{\\log_7(5^{32})} \\cdots \\frac{\\log_{63}(5^{3968})}{\\log_{64}(5^{3965})} $ is equal to $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n\\prod_{k=4}^{63}\\frac{\\log_k\\bigl(5^{k^2-1}\\bigr)}{\\log_{k+1}\\bigl(5^{k^2-4}\\bigr)}\n\\]\n\n---\n\n### 1.  Use change\u2011of\u2011base\n\n\\[\n\\log_k\\bigl(5^{k^2-1}\\bigr)=\\frac{\\log_5\\bigl(5^{k^2-1}\\bigr)}{\\log_5 k}\n      =\\frac{k^{2}-1}{\\log_5 k},\n\\qquad\n\\log_{k+1}\\bigl(5^{k^2-4}\\bigr)=\\frac{k^{2}-4}{\\log_5 (k+1)} .\n\\]\n\nHence each factor of the product equals  \n\n\\[\n\\frac{k^2-1}{k^2-4}\\;\n      \\frac{\\log_5(k+1)}{\\log_5k}.\n\\]\n\nSo\n\n\\[\nP = \\underbrace{\\prod_{k=4}^{63}\\frac{k^2-1}{k^2-4}}_{\\displaystyle P_1}\n    \\;\n    \\underbrace{\\prod_{k=4}^{63}\\frac{\\log_5(k+1)}{\\log_5k}}_{\\displaystyle P_2}.\n\\]\n\n---\n\n### 2.  Simplify \\(P_1\\)\n\n\\[\n\\frac{k^2-1}{k^2-4}= \\frac{(k-1)(k+1)}{(k-2)(k+2)}\n                  =\\frac{k-1}{k-2}\\cdot\\frac{k+1}{k+2}.\n\\]\n\nThus  \n\n\\[\nP_1=\\Bigl(\\prod_{k=4}^{63}\\frac{k-1}{k-2}\\Bigr)\n    \\Bigl(\\prod_{k=4}^{63}\\frac{k+1}{k+2}\\Bigr).\n\\]\n\nBoth products telescope:\n\n\\[\n\\prod_{k=4}^{63}\\frac{k-1}{k-2}\n   =\\frac{3}{2}\\cdot\\frac{4}{3}\\cdots\\frac{62}{61}\n   =\\frac{62}{2}=31,\n\\]\n\n\\[\n\\prod_{k=4}^{63}\\frac{k+1}{k+2}\n   =\\frac{5}{6}\\cdot\\frac{6}{7}\\cdots\\frac{64}{65}\n   =\\frac{5}{65}=\\frac1{13}.\n\\]\n\nTherefore  \n\n\\[\nP_1 =31\\cdot\\frac1{13} =\\frac{31}{13}.\n\\]\n\n---\n\n### 3.  Simplify \\(P_2\\)\n\n\\[\nP_2 =\\prod_{k=4}^{63}\\frac{\\log_5(k+1)}{\\log_5k}\n    =\\frac{\\log_5 5\\;\\log_5 6\\;\\cdots\\;\\log_5 64}\n           {\\log_5 4\\;\\log_5 5\\;\\cdots\\;\\log_5 63}\n    =\\frac{\\log_5 64}{\\log_5 4}.\n\\]\n\nUsing the change\u2011of\u2011base formula,\n\n\\[\n\\frac{\\log_5 64}{\\log_5 4}= \\log_4 64.\n\\]\n\nSince \\(4^3=64\\), we have \\(\\log_4 64 = 3\\). Hence  \n\n\\[\nP_2 = 3.\n\\]\n\n---\n\n### 4.  Combine the two parts\n\n\\[\nP = P_1\\cdot P_2 = \\frac{31}{13}\\times 3 = \\frac{93}{13}.\n\\]\n\nThus the product equals \\(\\displaystyle\\frac{m}{n}\\) with \\(m=93,\\; n=13\\).\n\n\\[\nm+n = 93+13 = 106.\n\\]\n\n\\[\n\\boxed{106}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 106

    \n

    Extracted Answer: 106

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Factor  \n\n\\[\n2025=45^{2}= (3^{2}\\cdot5)^{2}=3^{4}\\cdot5^{2}.\n\\]\n\nHence a divisor of \\(2025\\) is of the form \\(3^{a}5^{b}\\) with  \n\n\\(0\\le a\\le4\\) and \\(0\\le b\\le2\\).  \nThus  \n\n\\[\n|A|=(4+1)(2+1)=15 .\n\\]\n\nAll \\(2^{15}\\) subsets of \\(A\\) are equally likely.\n\n---\n\n### Divisors needed for the LCM\n\nFor a subset \\(B\\subseteq A\\),\n\n\\[\n\\operatorname{lcm}(B)=3^{\\max_{d\\in B}a_d}\\;5^{\\max_{d\\in B}b_d}.\n\\]\n\nTo obtain \\(\\operatorname{lcm}(B)=2025=3^{4}5^{2}\\) we must have  \n\n* at least one element whose exponent of \\(3\\) equals \\(4\\);\n* at least one element whose exponent of \\(5\\) equals \\(2\\).\n\nDefine  \n\n\\[\nD_3=\\{d\\in A:\\, \\text{the exponent of }3\\text{ in }d\\text{ is }4\\},\\qquad \nD_5=\\{d\\in A:\\, \\text{the exponent of }5\\text{ in }d\\text{ is }2\\}.\n\\]\n\nCounting these divisors:\n\n* \\(D_3 = \\{3^{4}5^{0}, 3^{4}5^{1}, 3^{4}5^{2}\\}\\) \u21d2 \\(|D_3|=3\\);\n* \\(D_5 = \\{3^{0}5^{2}, 3^{1}5^{2}, 3^{2}5^{2}, 3^{3}5^{2}, 3^{4}5^{2}\\}\\) \u21d2 \\(|D_5|=5\\);\n* The intersection \\(D_3\\cap D_5=\\{3^{4}5^{2}\\}= \\{2025\\}\\) \u21d2 \\(|D_3\\cap D_5|=1\\).\n\nThus a subset \\(B\\) has \\(\\operatorname{lcm}(B)=2025\\) iff it contains **at least one element of \\(D_3\\) and at least one element of \\(D_5\\)** (the same element may satisfy both conditions).\n\n---\n\n### Counting such subsets\n\nLet \\(U\\) be the set of all subsets of \\(A\\) (including the empty set).  \nUse inclusion\u2013exclusion.\n\n\\[\n\\begin{aligned}\n|U| &=2^{15},\\\\[2mm]\n\\text{Subsets missing }D_3 &: 2^{15-|D_3|}=2^{12},\\\\[2mm]\n\\text{Subsets missing }D_5 &: 2^{15-|D_5|}=2^{10},\\\\[2mm]\n\\text{Subsets missing both }D_3\\text{ and }D_5 &: \n2^{15-|D_3\\cup D_5|}\n =2^{15-(3+5-1)}=2^{8}.\n\\end{aligned}\n\\]\n\nHence the number of subsets that contain at least one element of each set is  \n\n\\[\n\\begin{aligned}\nN_{\\text{good}}\n&=|U|-2^{12}-2^{10}+2^{8}\\\\\n&=32768-4096-1024+256\\\\\n&=27904.\n\\end{aligned}\n\\]\n\nEvery such subset is non\u2011empty, so these are exactly the favorable subsets.\n\n---\n\n### Probability\n\n\\[\nP=\\frac{N_{\\text{good}}}{2^{15}}=\\frac{27904}{32768}.\n\\]\n\nReduce the fraction:\n\n\\[\n27904=2^{8}\\cdot 109,\\qquad 32768=2^{15}=2^{8}\\cdot 128\n\\Longrightarrow P=\\frac{109}{128}.\n\\]\n\nThus \\(m=109\\) and \\(n=128\\), and  \n\n\\[\nm+n = 109+128 = 237.\n\\]\n\n\\[\n\\boxed{237}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 237

    \n

    Extracted Answer: 237

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n* \\(\\omega _2\\) have centre \\(O\\) and radius \\(15\\);\n* \\(BC\\) be a diameter of \\(\\omega _2\\);\n* \\(\\omega _1\\) have centre \\(A\\) and radius \\(6\\), internally tangent to \\(\\omega _2\\) at \\(B\\).\n\n--------------------------------------------------------------------\n### 1.  Coordinates\n\nPlace \\(BC\\) on the \\(x\\)-axis with  \n\n\\[\nB=(-15,0),\\qquad C=(15,0),\\qquad O=(0,0).\n\\]\n\nSince the circles are internally tangent, the centres are collinear with the\ntangency point and  \n\n\\[\nOA=R_2-R_1=15-6=9 .\n\\]\n\nThus \\(A\\) lies on the ray \\(OB\\) at distance \\(9\\) from \\(O\\); consequently  \n\n\\[\nA=(-9,0).\n\\]\n\n--------------------------------------------------------------------\n### 2.  Point \\(D\\)\n\n\\(AD\\perp BC\\), so \\(AD\\) is the vertical line \\(x=-9\\).\nIntersecting this line with \\(\\omega _2\\) (\\(x^2+y^2=225\\)) gives  \n\n\\[\ny^2=225-(-9)^2=144\\quad\\Longrightarrow\\quad y=\\pm12 .\n\\]\n\nBecause the statement \u201c\\(D\\) is closer to \\(\\overline{FG}\\) than to \\(\\overline{EH}\\)\u2019\u2019 puts \\(D\\) above the centre, we take  \n\n\\[\nD=(-9,12).\n\\]\n\n--------------------------------------------------------------------\n### 3.  Rectangle \\(EFGH\\)\n\nThe rectangle is inscribed in \\(\\omega _1\\), so its circum\u2011centre is the\ncentre of \\(\\omega _1\\); hence the centre of the rectangle is \\(A\\).\n\nLet  \n\n* half\u2011width \\(a\\) (distance from the centre to each vertical side),\n* half\u2011height \\(b\\) (distance from the centre to each horizontal side).\n\nBecause the vertices lie on \\(\\omega _1\\),\n\n\\[\na^{2}+b^{2}=6^{2}=36. \\tag{1}\n\\]\n\nThe condition \u201c\\(\\overline{EF}\\perp\\overline{BC}\\)\u201d makes \\(\\overline{EF}\\) vertical,\nso the rectangle\u2019s sides are parallel/perpendicular to \\(BC\\).  \nTaking the usual labelling (counter\u2011clockwise)\n\n\\[\n\\begin{aligned}\nE&=(-9-a,\\,-b),\\qquad \nF=(-9-a,\\,b),\\\\\nG&=(-9+a,\\,b),\\qquad \nH=(-9+a,\\,-b).\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Equality of the two triangle areas\n\n\\[\n\\begin{aligned}\n\\text{Area}(\\triangle DGF)&=\\frac12\\cdot GF\\cdot(\\text{vertical distance }D\\text{ to }y=b)\\\\\n&=\\frac12\\cdot(2a)\\cdot(12-b)=a(12-b),\\\\[4pt]\n\\text{Area}(\\triangle CHG)&=\\frac12\\cdot GH\\cdot(\\text{horizontal distance }C\\text{ to }x=-9+a)\\\\\n&=\\frac12\\cdot(2b)\\cdot(24-a)=b(24-a).\n\\end{aligned}\n\\]\n\nGiven the areas are equal,\n\n\\[\na(12-b)=b(24-a)\\quad\\Longrightarrow\\quad12a=24b\\quad\\Longrightarrow\\quad a=2b. \\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 5.  Solving for \\(a\\) and \\(b\\)\n\nSubstituting \\(a=2b\\) into (1):\n\n\\[\n(2b)^{2}+b^{2}=36\\;\\Longrightarrow\\;5b^{2}=36\\;\\Longrightarrow\\;b^{2}=\\frac{36}{5}.\n\\]\n\nHence  \n\n\\[\na^{2}=(2b)^{2}=4b^{2}= \\frac{144}{5}.\n\\]\n\n--------------------------------------------------------------------\n### 6.  Area of the rectangle\n\n\\[\n\\text{Area}= (2a)(2b)=4ab=4(2b)b=8b^{2}=8\\left(\\frac{36}{5}\\right)=\\frac{288}{5}.\n\\]\n\nThus the area is \\(\\dfrac{288}{5}\\).  In lowest terms \\(m=288,\\;n=5\\), and\n\n\\[\nm+n=288+5=293.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{293}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 293

    \n

    Extracted Answer: 293

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1.  How many regions are created by chords?**  \n\nIf a convex region (here the disk) is cut by \\(N\\) line\u2011segments whose interior intersection points are all distinct, the number of regions is  \n\n\\[\nR=N+1+I,\n\\]\n\nwhere \\(I\\) is the total number of interior intersection points.  \n(Each new segment adds one region, plus one extra region for each interior point where it meets a previous segment.)\n\nFor our disk  \n\n\\[\nN=27\\qquad\\text{(the two diameters + 25 random chords)} .\n\\]\n\nHence  \n\n\\[\nE[R]=28+E[I].\n\\]\n\nSo we must find the expected number \\(E[I]\\) of interior intersection points.\n\n--------------------------------------------------------------------\n\n**Step 2.  Intersections involving the two diameters.**\n\nThe two diameters intersect at the centre; this contributes one guaranteed intersection.\n\nFor a random chord \\(C\\) we ask for the probability that it meets a given diameter.\n\n*Vertical diameter.*  \nThe chord meets the vertical line \\(x=0\\) iff its endpoints lie in opposite half\u2011planes (one in \\(\\{Q_1,Q_4\\}\\) and the other in \\(\\{Q_2,Q_3\\}\\)).  \nAmong the six unordered pairs of distinct quadrants, four have this property:\n\n\\[\n\\{Q_1,Q_2\\},\\{Q_1,Q_3\\},\\{Q_2,Q_4\\},\\{Q_3,Q_4\\},\n\\]\n\nso  \n\n\\[\nP(C\\text{ meets the vertical diameter})=\\frac{4}{6}=\\frac23 .\n\\]\n\nExactly the same reasoning holds for the horizontal diameter.  \nThus for each random chord\n\n\\[\nP(C\\text{ meets a given diameter})=\\frac23 .\n\\]\n\nWith 25 random chords we obtain  \n\n\\[\nE[\\text{intersections chord\u2013diameter}] = 25\\cdot 2\\cdot\\frac23=\\frac{100}{3}.\n\\]\n\n--------------------------------------------------------------------\n\n**Step 3.  Intersections among the 25 random chords.**\n\nEach chord is obtained by picking two points on the circle that lie in different quadrants.  \nThe unordered pair of quadrants a chord uses is equally likely to be any of the six possibilities\n\n* four *adjacent* pairs: \\(\\{01\\},\\{12\\},\\{23\\},\\{30\\}\\);\n* two *opposite* pairs: \\(\\{02\\},\\{13\\}\\).\n\nThus a chord is *adjacent* with probability \\(\\frac23\\) and *opposite* with probability \\(\\frac13\\).\n\n--------------------------------------------------------------------\n### 3.1  Classifying a pair of chords\n\nLet chord\u202f1 belong to unordered pair \\(P\\) and chord\u202f2 to unordered pair \\(Q\\).  \nThere are three possible relationships between \\(P\\) and \\(Q\\):\n\n| relationship | how many ordered \\((P,Q)\\) | intersection probability |\n|--------------|---------------------------|--------------------------|\n| same pair (\\(P=Q\\)) | 6 | \\(\\displaystyle\\frac12\\) |\n| disjoint pairs (no common quadrant) | 6 (4 adjacent\u2011adjacent, 2 opposite\u2011opposite) | \\(0\\) for adjacent\u2013adjacent, \\(1\\) for opposite\u2013opposite |\n| share exactly one quadrant | 24 (8 adjacent\u2011adjacent, 16 adjacent\u2011opposite) | \\(\\displaystyle\\frac12\\) |\n\n*Why the numbers?*  \n\n* Two chords of the **same type** intersect iff the order of the two points in the first quadrant is opposite to the order of the two points in the second quadrant \u2013 probability \\(1/2\\).\n\n* Two **disjoint adjacent** chords lie in quadrants \\(\\{0,1\\}\\) and \\(\\{2,3\\}\\); all points of the first lie before those of the second, so they never intersect.\n\n* Two **disjoint opposite** chords are \\(\\{0,2\\}\\) and \\(\\{1,3\\}\\); the four points appear in the order \\(0,1,2,3\\), which is alternating, so they always intersect.\n\n* When the chords **share exactly one quadrant**, the shared quadrant contains two independent uniform points; whichever of the two lies first decides whether the endpoints are interleaved. Hence the intersection probability is \\(1/2\\).\n\n--------------------------------------------------------------------\n### 3.2  Expected intersection probability for a random pair\n\nSumming the contributions of all 36 ordered possibilities:\n\n\\[\n\\begin{aligned}\n\\sum_{P,Q} p_{P,Q}&=\n6\\!\\left(\\frac12\\right) \n+ 4\\!\\cdot\\!0 \n+ 2\\!\\cdot\\!1 \n+ 24\\!\\left(\\frac12\\right) \\\\\n&= 3 + 2 + 12 = 17 .\n\\end{aligned}\n\\]\n\nTherefore for two independently chosen random chords\n\n\\[\nP(\\text{they intersect}) = \\frac{17}{36}.\n\\]\n\n--------------------------------------------------------------------\n### 3.3  Expected number of chord\u2013chord intersections\n\nThere are \\(\\binom{25}{2}=300\\) unordered pairs of the 25 chords, so\n\n\\[\nE[\\text{chord\u2013chord intersections}]\n=300\\cdot\\frac{17}{36}= \\frac{425}{3}.\n\\]\n\n--------------------------------------------------------------------\n\n**Step 4.  Total expected number of interior intersections.**\n\n\\[\n\\begin{aligned}\nE[I] &= \\underbrace{1}_{\\text{diameters}} \n      + \\underbrace{\\frac{100}{3}}_{\\text{chord\u2013diameter}} \n      + \\underbrace{\\frac{425}{3}}_{\\text{chord\u2013chord}} \\\\[2mm]\n     &= \\frac{525}{3}+1 = 175+1 = 176 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 5.  Expected number of regions.**\n\n\\[\nE[R]=N+1+E[I]=27+1+176=204.\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{204}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 204

    \n

    Extracted Answer: 204

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Label the twelve unit segments that form the sides of the four unit squares as in the picture  \n\n\\[\n\\begin{array}{c}\n\\text{top left square }A:\\; a\\;( \\text{top}) ,\\; a'(\\text{left}) ,\\; u (\\text{vertical middle up}) ,\\; x (\\text{horizontal middle left})\\\\[2mm]\n\\text{top right square }B:\\; b ,\\; b' ,\\; u ,\\; y\\\\[2mm]\n\\text{bottom left square }C:\\; c ,\\; c' ,\\; v ,\\; x\\\\[2mm]\n\\text{bottom right square }D:\\; d ,\\; d' ,\\; v ,\\; y\n\\end{array}\n\\]\n\nAll variables are binary:  \n\n\\[\n0=\\text{blue},\\qquad 1=\\text{red}.\n\\]\n\n---\n\n### 1.  Express the condition for each square  \n\nFor a square the number of red sides must be exactly two.  \nIf we let  \n\n\\[\n\\begin{aligned}\ns_A &=x+u, & s_B &=y+u,\\\\\ns_C &=x+v, & s_D &=y+v,\n\\end{aligned}\n\\]\n\nthen the two **boundary** edges of a square must contain  \n\n\\[\nr_A =2-s_A,\\qquad r_B =2-s_B,\\qquad r_C =2-s_C,\\qquad r_D =2-s_D\n\\]\n\nred sides.  \nFor each square the two boundary edges are distinct from the other squares, so the choices for the\nfour pairs are independent.\n\nFor a given pair of boundary edges the number of colourings is  \n\n\\[\n\\begin{cases}\n1 &\\text{if }r_i\\in\\{0,2\\}\\;(00\\text{ or }11),\\\\[2mm]\n2 &\\text{if }r_i =1\\;(01\\text{ or }10).\n\\end{cases}\n\\]\n\nHence, when the interior pattern \\((x,y,u,v)\\) is fixed, the number of ways to colour the eight\nouter edges equals  \n\n\\[\n2^{\\#\\{\\,i\\in\\{A,B,C,D\\}\\mid s_i=1\\,\\}},\n\\]\n\nbecause a square contributes a factor \\(2\\) exactly when its interior sum \\(s_i\\) equals \\(1\\).\n\nThus the total number of admissible colourings is  \n\n\\[\nN=\\sum_{(x,y,u,v)\\in\\{0,1\\}^4} 2^{\\#\\{i\\mid s_i=1\\}} .\n\\]\n\n---\n\n### 2.  Enumerate the \\(2^4=16\\) interior patterns  \n\n\\[\n\\begin{array}{c|c|c|c|c|c}\n(x,y,u,v) & s_A & s_B & s_C & s_D &\n\\#\\{i\\mid s_i=1\\}\\\\\\hline\n0000 &0&0&0&0&0\\\\\n0001 &0&0&1&1&2\\\\\n0010 &1&1&0&0&2\\\\\n0011 &1&1&1&1&4\\\\\n0100 &0&1&0&1&2\\\\\n0101 &0&1&1&2&2\\\\\n0110 &1&2&0&1&2\\\\\n0111 &1&2&1&2&2\\\\\n1000 &1&0&1&0&2\\\\\n1001 &1&0&2&1&2\\\\\n1010 &2&1&1&0&2\\\\\n1011 &2&1&2&1&2\\\\\n1100 &1&1&1&1&4\\\\\n1101 &1&1&2&2&2\\\\\n1110 &2&2&1&1&2\\\\\n1111 &2&2&2&2&0\n\\end{array}\n\\]\n\n(The entry \u201c2\u2019\u2019 means the sum of the two interior edges of that square is \\(2\\); it forces the\ncorresponding pair of boundary edges to be both blue.)\n\nThe contribution of each pattern is \\(2^{\\#\\{i\\mid s_i=1\\}}\\).  Adding all contributions we get  \n\n\\[\n\\begin{aligned}\nN&=1\\;(0000)+4\\;(0001)+4\\;(0010)+16\\;(0011)\\\\\n  &\\quad+4\\;(0100)+4\\;(0101)+4\\;(0110)+4\\;(0111)\\\\\n  &\\quad+4\\;(1000)+4\\;(1001)+4\\;(1010)+4\\;(1011)\\\\\n  &\\quad+16\\;(1100)+4\\;(1101)+4\\;(1110)+1\\;(1111)\\\\[2mm]\n  &=1+16+48+16+1\\\\\n  &=\\boxed{82}.\n\\end{aligned}\n\\]\n\nTherefore there are **82** ways to colour the twelve unit segments of a \\(2\\times2\\) grid so that\nevery unit square has exactly two red and two blue sides.
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 82

    \n

    Extracted Answer: 82

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nf(x)=\\sin \\bigl(7\\pi\\sin(5x)\\bigr)\n\\qquad (0<x<2\\pi)\n\\]\n\n---\n\n### 1.  Zeros of \\(f\\)\n\n\\(f(x)=0\\iff \\sin\\bigl(7\\pi\\sin(5x)\\bigr)=0\\)\n\n\\[\n7\\pi\\sin(5x)=k\\pi\\qquad(k\\in\\mathbb Z)\n\\Longrightarrow\\sin(5x)=\\frac{k}{7}.\n\\]\n\nSince \\(\\sin(5x)\\in[-1,1]\\), we must have \\(-7\\le k\\le7\\).  \nThus \\(k\\) can be any integer from \\(-7\\) to \\(7\\) (15 values).\n\nPut \\(\\theta =5x\\). Then \\(\\theta\\in(0,10\\pi)\\) and we need the number of solutions of  \n\n\\[\n\\sin\\theta =\\frac{k}{7}\\qquad (k=-7,\\ldots,7)\n\\]\nin \\((0,10\\pi)\\).\n\n*If \\(|k|=7\\) (\\(\\sin\\theta=\\pm1\\)):* each period \\((0,2\\pi)\\) contributes one solution, and there are five periods in \\((0,10\\pi)\\).  \n\\(\\;\\Rightarrow\\) 5 solutions for \\(k=7\\) and 5 solutions for \\(k=-7\\).\n\n*If \\(k=0\\) (\\(\\sin\\theta=0\\)):* solutions are \\(\\theta=n\\pi\\) with \\(n=1,\\dots ,9\\).  \n\\(\\;\\Rightarrow\\) 9 solutions.\n\n*If \\(|k|=1,2,\\dots ,6\\) (\\(|\\sin\\theta|<1\\) and \\(\\neq0\\)):* in each \\(2\\pi\\)\u2011interval there are two solutions, so across five intervals there are \\(2\\cdot5=10\\) solutions.\n\nHence the total number of zeros is  \n\n\\[\nn =\\underbrace{5+5}_{k=\\pm7}+ \\underbrace{9}_{k=0}+ \\underbrace{12\\times10}_{k=\\pm1,\\dots ,\\pm6}\n      =10+9+120 = 139 .\n\\]\n\n---\n\n### 2.  Tangent zeros\n\nA zero is tangent to the \\(x\\)-axis when \\(f'(x)=0\\) as well.\n\n\\[\nf'(x)=35\\pi\\cos\\!\\bigl(7\\pi\\sin(5x)\\bigr)\\,\\cos(5x).\n\\]\n\nAt any zero we have \\(\\cos\\!\\bigl(7\\pi\\sin(5x)\\bigr)=\\cos(k\\pi)=(-1)^k\\neq0\\); therefore  \n\n\\[\nf'(x)=0 \\iff \\cos(5x)=0.\n\\]\n\n\\(\\cos(5x)=0\\) gives \\(5x=\\dfrac{\\pi}{2}+m\\pi\\;(m\\in\\mathbb Z)\\), i.e.\n\n\\[\nx=\\frac{(2m+1)\\pi}{10}.\n\\]\n\nWithin \\(0<x<2\\pi\\) the odd integers \\(2m+1\\) run from \\(1\\) to \\(19\\); there are \\(10\\) such values.\nAt these points \\(\\sin(5x)=\\pm1\\), i.e. they correspond exactly to the solutions for \\(k=\\pm7\\).\n\nThus  \n\n\\[\nt=10.\n\\]\n\n---\n\n### 3.  Required sum\n\n\\[\nn+t = 139+10 = 149.\n\\]\n\n\\[\n\\boxed{149}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 149

    \n

    Extracted Answer: 149

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFrom an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.\n\nIn general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1 \u2013 Greedy description**\n\nFor a given amount \\(N\\) let  \n\n\\[\nq=\\Bigl\\lfloor \\frac{N}{25}\\Bigr\\rfloor ,\\qquad r=N-25q\\;(0\\le r<25)\n\\]\n\nThe greedy algorithm first takes \\(q\\) quarters, then uses as many dimes as possible and finally pennies.  \nHence the greedy number of coins is  \n\n\\[\ng(N)=q+\\Bigl\\lfloor\\frac{r}{10}\\Bigr\\rfloor +(r\\bmod 10)\n      =q+f(r),\n\\]\n\nwhere  \n\n\\[\nf(x)=\\Bigl\\lfloor\\frac{x}{10}\\Bigr\\rfloor +(x\\bmod10)\n\\]\n\nis the optimal number of coins when only dimes and pennies are allowed.\n\n---\n\n**Step 2 \u2013 Optimal solution with a given number of quarters**\n\nIf we use \\(a\\) quarters (\\(0\\le a\\le q\\)), we must make the remainder \\(N-25a\\) with dimes and pennies.  \nThe minimum number of coins for that remainder is \\(f(N-25a)\\).  \nThus the optimal number of coins for \\(N\\) is  \n\n\\[\n\\min_{0\\le a\\le q}\\; \\bigl[a+f(N-25a)\\bigr].\n\\]\n\nBecause \\(f\\) is optimal for the two\u2011coin system \\(\\{1,10\\}\\), we only need to compare the greedy choice\n\\(a=q\\) with the possibilities where we use fewer quarters.\n\n---\n\n**Step 3 \u2013 Effect of removing one quarter**\n\nWrite \\(r=N-25q\\) (the greedy remainder).  \nIf we use one fewer quarter (\\(a=q-1\\)), the new remainder is \\(r+25\\), and the coin count becomes  \n\n\\[\n(q-1)+f(r+25).\n\\]\n\nGreedy is optimal precisely when  \n\n\\[\nq+f(r)\\le (q-1)+f(r+25)\\quad\\Longleftrightarrow\\quad f(r)+1\\le f(r+25).\n\\]\n\nCompute \\(f(r+25)\\) in terms of \\(f(r)\\).  \nSince adding \\(25\\) cents is the same as adding two dimes and five pennies,  \n\n\\[\nf(r+25)=r+25-9\\Bigl\\lfloor\\frac{r+25}{10}\\Bigr\\rfloor .\n\\]\n\nThe floor changes by  \n\n\\[\n\\Bigl\\lfloor\\frac{r+25}{10}\\Bigr\\rfloor-\\Bigl\\lfloor\\frac{r}{10}\\Bigr\\rfloor=\n\\begin{cases}\n2,& r\\bmod10\\le 4,\\\\[2pt]\n3,& r\\bmod10\\ge 5 .\n\\end{cases}\n\\]\n\nHence  \n\n\\[\nf(r+25)=\n\\begin{cases}\nf(r)+7, & r\\bmod10\\le4,\\\\[2pt]\nf(r)-2, & r\\bmod10\\ge5 .\n\\end{cases}\n\\]\n\nConsequently  \n\n* if \\(r\\bmod10\\le4\\) then \\(f(r+25)=f(r)+7>f(r)+1\\) \u2013 greedy stays optimal;\n* if \\(r\\bmod10\\ge5\\) then \\(f(r+25)=f(r)-2\\le f(r)\\) \u2013 using one fewer quarter gives fewer coins.\n\nThus the greedy algorithm fails **exactly** when the greedy remainder \\(r\\) satisfies  \n\n\\[\nr\\bmod10\\ge5 \\;\\Longleftrightarrow\\; r\\in\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\]\n\n---\n\n**Step 4 \u2013 Dropping more than one quarter never helps**\n\nFor two quarters removed we add \\(50\\) cents to the remainder.  \nA similar computation gives  \n\n\\[\nf(r+50)=f(r)+5 .\n\\]\n\nThe change in total coin count is \\(-2+5=+3\\); for three quarters removed the change is \\(-3+12=+9\\), etc.  \nHence removing two or more quarters can never improve on the greedy solution.  \nTherefore the condition found in Step\u202f3 is both necessary and sufficient.\n\n---\n\n**Step 5 \u2013 Counting the successful \\(N\\) (1\u202f\u2264\u202fN\u202f\u2264\u202f1000)**  \n\nThe greedy fails for those \\(N\\ge25\\) whose remainder modulo \\(25\\) lies in  \n\n\\[\nR=\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\]\n\nFor a fixed residue \\(r\\in R\\),\n\n\\[\nN=r+25k\\qquad (k\\ge1,\\; N\\le1000).\n\\]\n\nThe largest possible \\(k\\) is \\(\\bigl\\lfloor\\frac{1000-r}{25}\\bigr\\rfloor =39\\)\n(because \\(1000-r\\) ranges from \\(981\\) to \\(995\\)).  \nThus each residue contributes \\(39\\) failing numbers.\n\n\\[\n\\#\\text{failures}=|R|\\times 39 = 10\\times39 = 390 .\n\\]\n\nAll other numbers (including the ten numbers \\(5,6,7,8,9,15,16,17,18,19\\) themselves, which are \\(<25\\) and therefore not failures) are successes.\n\n\\[\n\\#\\text{successes}=1000-390 = 610 .\n\\]\n\n---\n\n\\[\n\\boxed{610}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 610

    \n

    Extracted Answer: 610

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\na_1a_2\\dots a_{16},\\qquad a_i\\in\\{0,1\\}\n\\]\n\nbe a binary string where \\(a_i=1\\) means the \\(i^{\\text{th}}\\) chair is occupied.\nThe condition *no person sits next to two other people* means that a\n\\(1\\) may not have a \\(1\\) on both sides; equivalently the string contains\nno three consecutive \\(1\\)\u2019s.  \nHence we must count the binary strings of length \\(16\\) that\n\n* have exactly eight \\(1\\)\u2019s,\n* contain no substring \\(111\\).\n\n---\n\n### 1.  Decompose the occupied chairs into blocks\n\nSince a block of consecutive \\(1\\)\u2019s can have length at most \\(2\\), the eight\n\\(1\\)\u2019s are split into blocks of length \\(1\\) or \\(2\\).\n\nLet  \n\n* \\(x\\) = number of blocks of length \\(1\\),\n* \\(y\\) = number of blocks of length \\(2\\),\n* \\(m=x+y\\) = total number of blocks.\n\nThen  \n\n\\[\nx+2y=8,\\qquad x+y=m\\Longrightarrow y=8-m,\\;x=2m-8 .\n\\]\n\nThus \\(m\\) can be any integer with \\(\\lceil 8/2\\rceil\\le m\\le 8\\); i.e.  \n\n\\[\nm=4,5,6,7,8 .\n\\]\n\nFor a given \\(m\\) the positions of the \\(y=8-m\\) blocks of length \\(2\\)\namong the \\(m\\) blocks can be chosen in  \n\n\\[\n\\binom{m}{\\,8-m\\,}\n\\]\n\nways.\n\n---\n\n### 2.  Insert the separating zeros\n\nBetween two consecutive blocks there must be at least one \\(0\\).\nWith \\(m\\) blocks there are \\(m-1\\) mandatory zeros.\nThere are \\(16-8=8\\) zeros altogether, so after placing the mandatory ones we\nstill have  \n\n\\[\n8-(m-1)=9-m\n\\]\n\nzeros left.  \n\nThese remaining zeros may be distributed freely among the \\(m+1\\) gaps\n(the two ends and the \\(m-1\\) interior gaps).  By stars\u2011and\u2011bars the number\nof ways is\n\n\\[\n\\binom{(9-m)+(m+1)-1}{(m+1)-1}\n   =\\binom{9}{m}.\n\\]\n\n---\n\n### 3.  Count all possibilities\n\nFor each admissible \\(m\\),\n\n\\[\n\\text{choices}(m)=\\binom{m}{8-m}\\binom{9}{m}.\n\\]\n\nHence  \n\n\\[\n\\begin{aligned}\nN&=\\sum_{m=4}^{8}\\binom{m}{8-m}\\binom{9}{m}\\\\[2mm]\n &=\\binom{4}{4}\\binom{9}{4}\n   +\\binom{5}{3}\\binom{9}{5}\n   +\\binom{6}{2}\\binom{9}{6}\n   +\\binom{7}{1}\\binom{9}{7}\n   +\\binom{8}{0}\\binom{9}{8}\\\\[2mm]\n &=1\\cdot126+10\\cdot126+15\\cdot84+7\\cdot36+1\\cdot9\\\\\n &=126+1260+1260+252+9\\\\\n &=2907 .\n\\end{aligned}\n\\]\n\n---\n\n### 4.  Remainder modulo \\(1000\\)\n\n\\[\n2907\\equiv 907\\pmod{1000}.\n\\]\n\n\\[\n\\boxed{907}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 907

    \n

    Extracted Answer: 907

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\n\\angle A=84^{\\circ},\\qquad \\angle B=60^{\\circ},\\qquad \\angle C=36^{\\circ}.\n\\]\n\n--------------------------------------------------------------------\n### 1.  The nine\u2011point circle in complex form  \n\nPut the circumcircle of \\(\\triangle ABC\\) as the unit circle and let  \n\n\\[\na=1,\\qquad b=e^{i\\beta},\\qquad c=e^{i\\gamma},\n\\]\n\nwhere  \n\n\\[\n\\beta =72^{\\circ},\\qquad \\gamma =240^{\\circ}\n\\]\n\nbecause the central arcs are twice the opposite angles:\n\\(\\widehat{BC}=2A=168^{\\circ},\\;\\widehat{CA}=2B=120^{\\circ},\n\\;\\widehat{AB}=2C=72^{\\circ}\\).\n\nThe nine\u2011point centre is\n\n\\[\nN=\\frac{a+b+c}{2},\n\\]\n\nand its radius is \\(\\frac12\\) (since \\(|a|=|b|=|c|=1\\)).  \nThe three midpoints are  \n\n\\[\nD=\\frac{b+c}{2},\\qquad \nE=\\frac{c+a}{2},\\qquad \nF=\\frac{a+b}{2}.\n\\]\n\nNotice that\n\n\\[\nD-N=-\\frac{a}{2},\\qquad \nE-N=-\\frac{b}{2},\\qquad \nF-N=-\\frac{c}{2} .\n\\tag{1}\n\\]\n\nHence the central angle \\(\\widehat{DE}\\) equals the angle between vectors\n\\(-a\\) and \\(-b\\); it is the same as the angle between \\(a\\) and \\(b\\).\n\n\\[\n\\widehat{DE}= \\angle aOb = 2\\angle ACB = 2\\cdot36^{\\circ}=72^{\\circ}.\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 2.  The other intersection points  \n\nThe nine\u2011point circle is the image of the circumcircle under the similarity\n\n\\[\nX\\longmapsto N-\\frac{X}{2},\n\\tag{3}\n\\]\n\ni.e. the homothety with centre the centroid (factor \\(-\\tfrac12\\)).\nConsequently, if a point \\(Y\\) of the nine\u2011point circle is the image of\n\\(X\\) on the circumcircle, then  \n\n\\[\nY = N-\\frac{X}{2}\\qquad\\Longleftrightarrow\\qquad X=2(N-Y).\n\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n#### (a) Point \\(G\\)\n\n\\(G\\) lies on line \\(BD\\).  Since \\(D\\) is the image of \\(A\\) and\n\\(B\\) is the image of the point \\(X\\) with \\(X=b\\), the line \\(BD\\) is the\nimage of the line through \\(A\\) parallel to chord \\(BC\\).\nThus \\(G\\) corresponds to the second intersection of the line through\n\\(A\\;(=a)\\) parallel to \\(BC\\) with the circumcircle.\n\nFor a line through a point \\(e^{i\\alpha}\\) parallel to chord\n\\(e^{i\\beta}e^{i\\gamma}\\) the second intersection is\n\\(e^{i(\\beta+\\gamma-\\alpha)}\\).  \nHere \\(\\alpha=0,\\;\\beta=72^{\\circ},\\;\\gamma=240^{\\circ}\\); therefore\n\n\\[\nX_G = e^{i(\\beta+\\gamma)}=e^{i312^{\\circ}} .\n\\]\n\nFrom (3) the point on the nine\u2011point circle is  \n\n\\[\nG = N-\\frac{X_G}{2}.\n\\]\n\nHence the vector \\(NG=-\\frac{X_G}{2}\\) has direction \\(312^{\\circ}+180^{\\circ}=132^{\\circ}\\).\n\n--------------------------------------------------------------------\n#### (b) Point \\(H\\)\n\n\\(H\\) lies on line \\(AE\\).  This line is parallel to chord \\(CA\\); the\nstarting point on the circumcircle is \\(B\\,(=e^{i72^{\\circ}})\\).  Thus\n\n\\[\nX_H = e^{i(0+240^{\\circ}-72^{\\circ})}=e^{i168^{\\circ}} ,\n\\qquad\nH=N-\\frac{X_H}{2},\n\\]\n\nso the direction of \\(NH\\) is \\(168^{\\circ}+180^{\\circ}=348^{\\circ}\\).\n\n--------------------------------------------------------------------\n#### (c) Point \\(J\\)\n\n\\(J\\) lies on line \\(AF\\), which is parallel to chord \\(AB\\); it starts\nfrom \\(C\\,(=e^{i240^{\\circ}})\\).  Therefore\n\n\\[\nX_J = e^{i(0+72^{\\circ}-240^{\\circ})}=e^{i192^{\\circ}},\n\\qquad\nJ=N-\\frac{X_J}{2},\n\\]\n\nand the direction of \\(NJ\\) is \\(192^{\\circ}+180^{\\circ}=12^{\\circ}\\).\n\n--------------------------------------------------------------------\n### 3.  The required arcs on the nine\u2011point circle  \n\nFrom the directions obtained:\n\n\\[\n\\begin{aligned}\n&\\text{Arc }DE = 252^{\\circ}-180^{\\circ}=72^{\\circ},\\\\[2mm]\n&\\text{Arc }FG = 132^{\\circ}-60^{\\circ}=72^{\\circ},\\\\[2mm]\n&\\text{Arc }HJ = (360^{\\circ}-348^{\\circ})+12^{\\circ}=24^{\\circ}.\n\\end{aligned}\n\\]\n\nAll are the minor arcs (each \\(<180^{\\circ}\\)).\n\n--------------------------------------------------------------------\n### 4.  Computing the requested expression  \n\n\\[\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n=72^{\\circ}+2\\!\\cdot\\!24^{\\circ}+3\\!\\cdot\\!72^{\\circ}\n=72+48+216=336^{\\circ}.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{336}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 336

    \n

    Extracted Answer: 336

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For a regular 24\u2011gon label the vertices \\(0,1,\\ldots ,23\\) in order.\nIf a segment joins vertex \\(i\\) to vertex \\(j\\) then the chord length depends only on  \n\n\\[\nk=\\min \\{\\,|i-j|\\;,\\;24-|i-j|\\,\\},\n\\qquad 1\\le k\\le 12 .\n\\]\n\nThus a configuration in which all 12 segments have the same length corresponds to a\nperfect matching in the graph whose edges are all chords of a fixed step \\(k\\).\n\n---\n\n### 1.  Structure of the step\u2011\\(k\\) graph  \n\nLet \\(d=\\gcd(24,k)\\).  \nThe vertices split into \\(d\\) disjoint cycles, each of length  \n\n\\[\nL=\\frac{24}{d}.\n\\]\n\nEvery vertex is incident with exactly the two edges of its cycle.  \nA perfect matching can exist only if each cycle has even length, i.e. \\(L\\) must be even.\n\\(L\\) is odd only when \\(d=8\\) (then \\(L=3\\)); this occurs for \\(k=8\\).  \nHence the step \\(k=8\\) gives **no** valid configuration.\n\nFor an even cycle of length \\(L\\ge4\\) there are exactly two perfect matchings\n(the two possible \u201calternating\u201d choices).  \nIf \\(L=2\\) (the case \\(k=12\\)), the matching is forced and there is only one.\n\nConsequently, for a permissible \\(k\\)\n\n\\[\n\\#\\text{ matchings for step }k=\n\\begin{cases}\n2^{d}, & L>2,\\\\[2pt]\n1, & L=2 .\n\\end{cases}\n\\]\n\n---\n\n### 2.  Count for each step \\(k\\)\n\n\\[\n\\begin{array}{c|c|c|c}\nk & d=\\gcd(24,k) & L=24/d & \\#\\text{ matchings}\\\\ \\hline\n1,5,7,11 & 1 & 24 & 2\\\\\n2,10 & 2 & 12 & 2^{2}=4\\\\\n3,9 & 3 & 8 & 2^{3}=8\\\\\n4 & 4 & 6 & 2^{4}=16\\\\\n6 & 6 & 4 & 2^{6}=64\\\\\n12 & 12& 2 & 1\\\\\n8 & 8 & 3 & \\text{none}\n\\end{array}\n\\]\n\nNow sum over all admissible \\(k\\) ( \\(k=1,\\dots ,12\\) except \\(k=8\\) ):\n\n\\[\n\\begin{aligned}\n\\text{Total}&=4\\cdot2\\;+\\;2\\cdot4\\;+\\;2\\cdot8\\;+\\;1\\cdot16\\;+\\;1\\cdot64\\;+\\;1\\cdot1\\\\\n&=8+8+16+16+64+1\\\\\n&=113 .\n\\end{aligned}\n\\]\n\n---\n\n\\[\n\\boxed{113}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 113

    \n

    Extracted Answer: 113

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\n17_{b}=1\\cdot b+7=b+7,\\qquad \n97_{b}=9\\cdot b+7=9b+7 .\n\\]\n\nWe need  \n\n\\[\nb+7 \\mid 9b+7 .\n\\]\n\nWrite \\(9b+7\\) in terms of \\(b+7\\):\n\n\\[\n9b+7 = 9(b+7) - 56 .\n\\]\n\nHence the remainder upon division by \\(b+7\\) is \\(-56\\).  \nThus \\(b+7\\) must divide \\(56\\):\n\n\\[\nb+7 \\mid 56 .\n\\]\n\nList the positive divisors of \\(56\\):\n\n\\[\n1,\\;2,\\;4,\\;7,\\;8,\\;14,\\;28,\\;56 .\n\\]\n\nSince the base must satisfy \\(b>9\\) (so that the digit 9 is allowed), we need  \n\n\\[\nb+7>9+7=16 .\n\\]\n\nThe only divisors of \\(56\\) larger than \\(16\\) are \\(28\\) and \\(56\\).\n\n\\[\n\\begin{aligned}\nb+7 &= 28 \\;\\Longrightarrow\\; b=21,\\\\[2pt]\nb+7 &= 56 \\;\\Longrightarrow\\; b=49.\n\\end{aligned}\n\\]\n\nBoth bases exceed \\(9\\) and thus are admissible.\n\nThe sum of all such bases is\n\n\\[\n21+49 = 70 .\n\\]\n\n\\[\n\\boxed{70}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 70

    \n

    Extracted Answer: 70

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\na_i=A_1A_i\\qquad (i=2,\\dots ,11),\\qquad s_i=A_iA_{i+1}\\qquad (i=2,\\dots ,10).\n\\]\n\nFor each triangle \\(A_iA_1A_{i+1}\\;(2\\le i\\le10)\\)\n\n* \\(\\displaystyle \\text{Area}=1\\),\n* \\(\\displaystyle\\cos\\angle A_iA_1A_{i+1}= \\frac{12}{13}\\).\n\n--------------------------------------------------------------------\n### 1.  Product of the two sides from \\(A_1\\)\n\nWith \\(\\theta=\\angle A_iA_1A_{i+1}\\) we have  \n\n\\[\n\\sin\\theta=\\sqrt{1-\\cos ^2\\theta}= \\frac{5}{13}.\n\\]\n\nThe area of \\(\\triangle A_iA_1A_{i+1}\\) is  \n\n\\[\n\\frac12 a_i a_{i+1}\\sin\\theta =1\n\\Longrightarrow a_i a_{i+1}= \\frac{2}{\\sin\\theta}= \\frac{2}{5/13}= \\frac{26}{5}\\equiv c .\n\\tag{1}\n\\]\n\nHence for all \\(i\\)\n\n\\[\na_i a_{i+1}=c=\\frac{26}{5}.\n\\]\n\n--------------------------------------------------------------------\n### 2.  Length of the side \\(A_iA_{i+1}\\)\n\nApply the law of cosines in \\(\\triangle A_iA_1A_{i+1}\\):\n\n\\[\ns_i^2=a_i^{\\,2}+a_{i+1}^{\\,2}-2a_i a_{i+1}\\cos\\theta\n      =a_i^{\\,2}+a_{i+1}^{\\,2}-2c\\Bigl(\\frac{12}{13}\\Bigr).\n\\]\n\nBecause \\(2c\\frac{12}{13}= \\frac{624}{65}= \\frac{48}{5}\\),\n\n\\[\ns_i^{\\,2}=a_i^{\\,2}+a_{i+1}^{\\,2}-\\frac{48}{5}. \\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 3.  The alternating pattern of the radii\n\nFrom (1) we have \\(a_{i+1}=c/a_i\\). Consequently  \n\n\\[\na_{i+2}=c/a_{i+1}=c/(c/a_i)=a_i .\n\\]\n\nThus  \n\n\\[\na_{2}=a_{4}=a_{6}=a_{8}=a_{10}\\equiv x, \\qquad \na_{3}=a_{5}=a_{7}=a_{9}=a_{11}\\equiv \\frac{c}{x}.\n\\]\n\nAll sides \\(s_i\\;(i=2,\\dots ,10)\\) are equal, because each uses the\npair \\((x,\\;c/x)\\) in (2).  Set  \n\n\\[\nS^2=x^{2}+\\Bigl(\\frac{c}{x}\\Bigr)^2-\\frac{48}{5}.\n\\tag{3}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Express everything via \\(t=x+\\dfrac{c}{x}\\)\n\nDefine  \n\n\\[\nt=x+\\frac{c}{x}=a_2+a_{11}.\n\\]\n\nThen  \n\n\\[\nx^{2}+\\Bigl(\\frac{c}{x}\\Bigr)^2=t^{2}-2c .\n\\]\n\nInsert this into (3):\n\n\\[\nS^{2}=t^{2}-2c-\\frac{48}{5}=t^{2}-(2c+\\frac{48}{5}).\n\\]\n\nSince \\(c=\\dfrac{26}{5}\\),\n\n\\[\n2c+\\frac{48}{5}= \\frac{52}{5}+\\frac{48}{5}=20.\n\\]\n\nHence  \n\n\\[\nS^{2}=t^{2}-20,\\qquad S=\\sqrt{t^{2}-20}. \\tag{4}\n\\]\n\n--------------------------------------------------------------------\n### 5.  Use the perimeter\n\nThe perimeter of the 11\u2011gon is  \n\n\\[\na_2+a_{11}+ \\sum_{i=2}^{10}s_i = t+9S =20.\n\\]\n\nSubstituting (4):\n\n\\[\nt+9\\sqrt{t^{2}-20}=20.\n\\]\n\nIsolate the radical and square:\n\n\\[\n9\\sqrt{t^{2}-20}=20-t \\quad\\Longrightarrow\\quad \n81(t^{2}-20)=(20-t)^{2}.\n\\]\n\nSimplifying:\n\n\\[\n80t^{2}+40t-2020=0\n\\Longrightarrow 4t^{2}+2t-101=0.\n\\]\n\nSolve for \\(t\\):\n\n\\[\nt=\\frac{-2\\pm\\sqrt{4+1616}}{8}\n   =\\frac{-2\\pm 18\\sqrt5}{8}\n   =\\frac{-1\\pm 9\\sqrt5}{4}.\n\\]\n\nSince \\(t>0\\), we take the plus sign:\n\n\\[\n\\boxed{t=\\frac{9\\sqrt5-1}{4}}.\n\\]\n\nThus  \n\n\\[\nA_1A_2+A_1A_{11}= \\frac{9\\sqrt5-1}{4}\n            =\\frac{m\\sqrt n-p}{q},\n\\]\nwith \\(m=9,\\;n=5,\\;p=1,\\;q=4\\).\n\n--------------------------------------------------------------------\n### 6.  Compute \\(m+n+p+q\\)\n\n\\[\nm+n+p+q = 9+5+1+4 = 19.\n\\]\n\n\\[\n\\boxed{19}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 19

    \n

    Extracted Answer: 19

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The nine players are distinct.  Let  \n\n\\[\nc=\\#\\text{chocolate},\\qquad v=\\#\\text{vanilla},\\qquad s=\\#\\text{strawberry}\n\\]\n\nwith  \n\n\\[\nc+v+s=9,\\qquad c>v>s\\ge 1 .\n\\]\n\n---\n\n### 1.  Find all possible triples \\((c,v,s)\\)\n\nSince \\(c>v>s\\),\n\n\\[\nc\\ge v+1,\\qquad v\\ge s+1.\n\\]\n\nWrite \\(v=s+d_2\\) and \\(c=v+d_1\\) where \\(d_1,d_2\\ge 1\\).  \nThen  \n\n\\[\nc+v+s=(s+d_2+d_1)+(s+d_2)+s=3s+2d_2+d_1=9 .\n\\]\n\nBecause \\(s\\ge1\\), we have \\(3s\\le 9\\Rightarrow s=1,2,3\\).\n\n* **\\(s=1\\):** \\(2d_2+d_1=6\\).  \n  \\(d_2=1\\Rightarrow d_1=4\\) \u2192 \\((c,v,s)=(6,2,1)\\).  \n  \\(d_2=2\\Rightarrow d_1=2\\) \u2192 \\((c,v,s)=(5,3,1)\\).\n\n* **\\(s=2\\):** \\(2d_2+d_1=3\\).  \n  \\(d_2=1\\Rightarrow d_1=1\\) \u2192 \\((c,v,s)=(4,3,2)\\).\n\n* **\\(s=3\\):** \\(2d_2+d_1=0\\) \u2013 impossible with \\(d_1,d_2\\ge1\\).\n\nThus the only feasible triples are  \n\n\\[\n(6,2,1),\\;(5,3,1),\\;(4,3,2).\n\\]\n\n---\n\n### 2.  Count assignments for each triple\n\nFor a given \\((c,v,s)\\) the number of ways to assign the flavors to the 9 distinct players is the multinomial coefficient  \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\n\\[\n\\begin{aligned}\n(6,2,1):\\;&\\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[2mm]\n(5,3,1):\\;&\\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[2mm]\n(4,3,2):\\;&\\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\n---\n\n### 3.  Total number of assignments\n\n\\[\nN = 252+504+1260 = 2016.\n\\]\n\n---\n\n### 4.  Remainder modulo \\(1000\\)\n\n\\[\n2016 \\equiv 16 \\pmod{1000}.\n\\]\n\n\\[\n\\boxed{16}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 16

    \n

    Extracted Answer: 16

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The equation  \n\n\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\nis a homogeneous quadratic form.  \nFactor it over the integers:\n\n\\[\n12x^{2}-xy-6y^{2}= (3x+2y)(4x-3y).\n\\]\n\nIndeed  \n\n\\[\n(3x+2y)(4x-3y)=12x^{2}-9xy+8xy-6y^{2}=12x^{2}-xy-6y^{2}.\n\\]\n\nHence a pair \\((x,y)\\) of integers satisfies the equation iff\n\n\\[\n3x+2y=0\\qquad\\text{or}\\qquad 4x-3y=0 .\n\\]\n\n---\n\n### 1. Solutions of \\(3x+2y=0\\)\n\n\\[\n3x+2y=0 \\;\\Longrightarrow\\; y=-\\frac{3}{2}x .\n\\]\n\nFor \\(y\\) to be an integer, \\(x\\) must be even: write \\(x=2k\\). Then  \n\n\\[\n(x,y)=(2k,-3k),\\qquad k\\in\\mathbb Z .\n\\]\n\nBoth coordinates must lie in \\([-100,100]\\):\n\n\\[\n-100\\le 2k\\le 100\\;\\Longrightarrow\\;-50\\le k\\le 50,\\\\\n-100\\le -3k\\le 100\\;\\Longrightarrow\\;-33\\le k\\le 33.\n\\]\n\nThus \\(k=-33,-32,\\dots ,33\\); there are  \n\n\\[\n33-(-33)+1 = 67\n\\]\n\ninteger solutions on this line.\n\n---\n\n### 2. Solutions of \\(4x-3y=0\\)\n\n\\[\n4x-3y=0 \\;\\Longrightarrow\\; y=\\frac{4}{3}x .\n\\]\n\nFor \\(y\\) to be an integer, \\(x\\) must be a multiple of \\(3\\): put \\(x=3t\\). Then  \n\n\\[\n(x,y)=(3t,4t),\\qquad t\\in\\mathbb Z .\n\\]\n\nAgain impose the bounds:\n\n\\[\n-100\\le 3t\\le 100\\;\\Longrightarrow\\;-33\\le t\\le 33,\\\\\n-100\\le 4t\\le 100\\;\\Longrightarrow\\;-25\\le t\\le 25.\n\\]\n\nThus \\(t=-25,-24,\\dots ,25\\); the number of solutions here is  \n\n\\[\n25-(-25)+1 = 51.\n\\]\n\n---\n\n### 3. Intersection of the two lines\n\nBoth equations hold simultaneously only at the origin:\n\n\\[\n3x+2y=0,\\;4x-3y=0 \\Longrightarrow (x,y)=(0,0).\n\\]\n\nThis point has been counted in both previous totals, so we subtract it once.\n\n---\n\n### 4. Total number of ordered pairs\n\n\\[\n\\#\\text{solutions}=67+51-1=117.\n\\]\n\n\\[\n\\boxed{117}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 117

    \n

    Extracted Answer: 117

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the trapezoid be \\(ABCD\\) with \\(AB\\parallel CD\\) and  \n\n\\[\nAB=s ,\\qquad CD=r ,\\qquad AD=BC=L \\;( \\text{isosceles}).\n\\]\n\nThe incircle has radius \\(R=3\\) and the area is \\(72\\).\n\n---\n\n### 1.  Semiperimeter\n\nFor any tangential quadrilateral (one with an incircle)\n\n\\[\n\\text{Area}=R\\cdot(\\text{semiperimeter}).\n\\]\n\nHence  \n\n\\[\n72=3\\cdot s_{\\!p}\\quad\\Longrightarrow\\quad s_{\\!p}=24 .\n\\]\n\nThus the perimeter is  \n\n\\[\n2s_{\\!p}=48\\quad\\Longrightarrow\\quad r+s+2L=48. \\tag{1}\n\\]\n\n---\n\n### 2.  Tangential condition\n\nIn a tangential quadrilateral the sums of opposite sides are equal:\n\n\\[\nAB+CD = AD+BC\\quad\\Longrightarrow\\quad r+s = 2L. \\tag{2}\n\\]\n\nFrom (1) and (2),\n\n\\[\n2(r+s)=48 \\;\\Longrightarrow\\; r+s=24,\\qquad\n2L=r+s=24\\;\\Longrightarrow\\; L=12.\n\\]\n\n---\n\n### 3.  Height\n\nThe incircle touches both parallel sides, so the distance between the bases equals twice the radius:\n\n\\[\nh=2R=6.\n\\]\n\n(Alternatively, \\(\\displaystyle 72=\\tfrac12(r+s)h\\) with \\(r+s=24\\) also gives \\(h=6\\).)\n\n---\n\n### 4.  Relating the bases\n\nPlace the trapezoid with its symmetry axis on the \\(y\\)-axis; the bases are horizontal.\nThe horizontal half\u2011difference of the bases is \\(\\dfrac{s-r}{2}\\).\nHence the leg length satisfies\n\n\\[\nL^{2}= \\left(\\frac{s-r}{2}\\right)^{2}+h^{2}.\n\\]\n\nUsing \\(L=12,\\;h=6\\),\n\n\\[\n12^{2}= \\frac{(s-r)^{2}}{4}+6^{2}\n\\quad\\Longrightarrow\\quad\n\\frac{(s-r)^{2}}{4}=108\n\\quad\\Longrightarrow\\quad\ns-r=12\\sqrt3. \\tag{3}\n\\]\n\n---\n\n### 5.  Solving for \\(r\\) and \\(s\\)\n\n\\[\n\\begin{cases}\nr+s=24,\\\\[2pt]\ns-r=12\\sqrt3,\n\\end{cases}\n\\qquad\\Longrightarrow\\qquad\n\\begin{aligned}\ns&=\\frac{24+12\\sqrt3}{2}=12+6\\sqrt3,\\\\\nr&=\\frac{24-12\\sqrt3}{2}=12-6\\sqrt3.\n\\end{aligned}\n\\]\n\n---\n\n### 6.  Required sum of squares\n\n\\[\n\\begin{aligned}\nr^{2}+s^{2}\n&=(12-6\\sqrt3)^{2}+(12+6\\sqrt3)^{2}\\\\\n&= \\bigl(144-144\\sqrt3+108\\bigr)+\\bigl(144+144\\sqrt3+108\\bigr)\\\\\n&= 504.\n\\end{aligned}\n\\]\n\n\\[\n\\boxed{504}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 504

    \n

    Extracted Answer: 504

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n* \\(A=(0,0)\\),  \n* \\(B=(u,0)\\) on the \\(x\\)-axis,  \n* \\(C=(0,v)\\) on the \\(y\\)-axis.  \n\nSince \\(\\angle A=90^{\\circ}\\), \\(BC=38\\) gives  \n\n\\[\nu^{2}+v^{2}=38^{2}=1444\\tag{1}\n\\]\n\n---\n\n### 1.  The equilateral triangle \\(AKL\\)\n\nThe conditions  \n\n\\[\nAK=AL=KL=14\n\\]\n\nshow that \\(\\triangle AKL\\) is equilateral.  \nLet the direction of \\(\\overrightarrow{AK}\\) form an angle \\(\\theta\\) with the\npositive \\(x\\)-axis. Then\n\n\\[\nK=(14\\cos\\theta,\\;14\\sin\\theta),\\qquad \nL=(14\\cos(\\theta+60^\\circ),\\;14\\sin(\\theta+60^\\circ)).\\tag{2}\n\\]\n\n---\n\n### 2.  Using \\(BK=14\\) and \\(CL=14\\)\n\n\\[\nBK^{2}= (u-14\\cos\\theta)^2+(14\\sin\\theta)^2=14^{2}\n\\]\n\n\\[\n\\Longrightarrow\\; u=28\\cos\\theta.\\tag{3}\n\\]\n\nSimilarly  \n\n\\[\nCL^{2}= (14\\cos(\\theta+60^\\circ))^{2}+(v-14\\sin(\\theta+60^\\circ))^{2}=14^{2}\n\\]\n\n\\[\n\\Longrightarrow\\; v=28\\sin(\\theta+60^\\circ).\\tag{4}\n\\]\n\n---\n\n### 3.  Determining \\(\\theta\\)\n\nInsert (3) and (4) into (1):\n\n\\[\n(28\\cos\\theta)^{2}+(28\\sin(\\theta+60^\\circ))^{2}=1444\n\\]\n\\[\n\\Longrightarrow\\;\\cos^{2}\\theta+\\sin^{2}(\\theta+60^\\circ)=\\frac{361}{196}.\n\\]\n\nUsing \\(\\sin(\\theta+60^\\circ)=\\tfrac12\\sin\\theta+\\tfrac{\\sqrt3}{2}\\cos\\theta\\),\nthe equation reduces to  \n\n\\[\n6\\cos^{2}\\theta+2\\sqrt3\\sin\\theta\\cos\\theta= \\frac{312}{49}.\n\\]\n\nSolving gives \\(\\cos\\theta=\\frac{13}{14}\\) (the other root gives the same\ntriangle with the legs interchanged).  \n\nHence  \n\n\\[\nu=28\\cos\\theta=28\\cdot\\frac{13}{14}=26,\\qquad\nv=28\\sin(\\theta+60^\\circ)=28\\cdot\\frac{4\\sqrt3}{7}=16\\sqrt3 .\n\\]\n\nThus  \n\n\\[\nAB=26,\\qquad AC=16\\sqrt3,\\qquad BC=38.\n\\]\n\nFrom (2) we obtain the coordinates of the interior points\n\n\\[\nK=(13,\\;3\\sqrt3),\\qquad L=(2,\\;8\\sqrt3).\n\\]\n\n---\n\n### 4.  Area of \\(BKLC\\)\n\nUse the shoelace formula for the polygon \\(B(26,0),K(13,3\\sqrt3),L(2,8\\sqrt3),C(0,16\\sqrt3)\\):\n\n\\[\n\\begin{aligned}\nS_1&=26\\cdot3\\sqrt3+13\\cdot8\\sqrt3+2\\cdot16\\sqrt3+0\\cdot0=214\\sqrt3,\\\\\nS_2&=0\\cdot13+3\\sqrt3\\cdot2+8\\sqrt3\\cdot0+16\\sqrt3\\cdot26=422\\sqrt3.\n\\end{aligned}\n\\]\n\n\\[\n\\text{Area}=\\frac12|S_2-S_1|\n          =\\frac12(422-214)\\sqrt3\n          =104\\sqrt3 .\n\\]\n\nTherefore the area can be written as \\(n\\sqrt3\\) with  \n\n\\[\n\\boxed{n=104}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 104

    \n

    Extracted Answer: None

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For an eight\u2011digit number formed by a permutation of  \n\n\\[\n\\{1,2,3,4,5,6,7,8\\}\n\\]\n\nlet  \n\n\\[\na_1a_2a_3a_4a_5a_6a_7a_8\n\\]\n\nbe its digits (left to right).  \nA number is divisible by \\(22\\iff\\) it is divisible by \\(2\\) and by \\(11\\).\n\n---\n\n### 1.  Divisibility by 2  \n\nThe last digit \\(a_8\\) must be even, so \\(a_8\\in\\{2,4,6,8\\}\\).\n\n---\n\n### 2.  Divisibility by 11  \n\nFor an 8\u2011digit number the rule for 11 is  \n\n\\[\n(a_1+a_3+a_5+a_7)-(a_2+a_4+a_6+a_8)\\equiv 0\\pmod{11}.\n\\]\n\nSince the total sum of the digits is  \n\n\\[\n1+2+\\cdots+8 = 36,\n\\]\n\nlet  \n\n\\[\nS_{\\text{odd}}=a_1+a_3+a_5+a_7,\\qquad \nS_{\\text{even}}=a_2+a_4+a_6+a_8 .\n\\]\n\nThen \\(S_{\\text{odd}}+S_{\\text{even}}=36\\) and the condition gives  \n\n\\[\nS_{\\text{odd}}-S_{\\text{even}}\\equiv0\\pmod{11}.\n\\]\n\nThe only possible values for \\(S_{\\text{odd}}-S_{\\text{even}}\\) are \\(-22,0,22\\);   \n\\(-22\\) would give \\(S_{\\text{odd}}=7\\) and \\(22\\) would give \\(S_{\\text{odd}}=29\\), both impossible because a sum of four distinct digits from \\(\\{1,\\dots ,8\\}\\) cannot be smaller than \\(10\\) nor larger than \\(26\\).  \nHence\n\n\\[\nS_{\\text{odd}} = S_{\\text{even}} = 18 .\n\\]\n\nThus the four digits in the odd positions must sum to \\(18\\); the same holds for the even positions.\n\n---\n\n### 3.  Choosing the four digits for the odd positions  \n\nWe need 4\u2011element subsets of \\(\\{1,\\dots ,8\\}\\) whose sum is \\(18\\).  \nA quick enumeration gives the eight subsets\n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\{1,3,6,8\\},\\{1,4,5,8\\},\\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\{2,3,6,7\\},\\{2,4,5,7\\},\\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nEach contains exactly two even digits (the set \\(\\{2,4,6,8\\}\\)) and two odd digits.  \nHence every admissible odd\u2011position set has **2 even digits**.\n\nLet a chosen subset be \\(S\\) (the odd\u2011position digits) and its complement \\(S^c\\) (the even\u2011position digits).\n\n---\n\n### 4.  Arranging the digits  \n\n* The four digits of \\(S\\) can be placed in the odd positions \\((1,3,5,7)\\) in \\(4! = 24\\) ways.  \n* The four digits of \\(S^c\\) must fill the even positions \\((2,4,6,8)\\) with the extra requirement that the last digit \\(a_8\\) be even.  \n  Since \\(S^c\\) contains exactly \\(2\\) even digits, we have  \n\n\\[\n\\text{choices for }a_8 = 2,\\qquad\n\\text{arrangements of the remaining three even\u2011position digits}=3! = 6 .\n\\]\n\nThus for each set \\(S\\)\n\n\\[\n\\#\\text{numbers}=4!\\times(2\\times3!) = 24\\times12 = 288.\n\\]\n\n---\n\n### 5.  Total number \\(N\\)\n\nThere are \\(8\\) possible subsets \\(S\\); consequently\n\n\\[\nN = 8 \\times 288 = 2304 .\n\\]\n\n---\n\n### 6.  Required difference\n\n\\[\nN-2025 = 2304-2025 = 279 .\n\\]\n\n\\[\n\\boxed{279}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 279

    \n

    Extracted Answer: 279

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nC=25+20i,\\qquad r=5 ,\n\\]\n\nso  \n\n\\[\n|C-z|=5\n\\]\n\nis the circle with centre \\(C\\) and radius \\(5\\).\n\nThe second condition  \n\n\\[\n|z-4-k|=|z-3i-k|\n\\]\n\nmeans that \\(z\\) is equally distant from the points  \n\n\\[\nP_1=4+k\\quad(\\text{on the real axis}), \\qquad   \nP_2=k+3i .\n\\]\n\nHence the locus of \\(z\\) is the perpendicular bisector of the segment \\(\\overline{P_1P_2}\\); this is a straight line.\n\n---\n\n### 1. Equation of the line\n\nWrite \\(z=x+yi\\).  \n\n\\[\n(x-(4+k))^2+y^2=(x-k)^2+(y-3)^2 .\n\\]\n\nExpanding and simplifying gives  \n\n\\[\n-8(x-k)+16=-6y+9,\n\\]\n\n\\[\n-8x+8k+6y+7=0 .\n\\]\n\nThus the line \\(L(k)\\) is  \n\n\\[\n-8x+6y+8k+7=0 \\qquad\\text{or}\\qquad 8x-6y=8k+7 .\n\\]\n\nAll such lines have slope \\(\\dfrac{4}{3}\\); they are a family of parallel lines depending on \\(k\\).\n\n---\n\n### 2. Tangency condition\n\nThe system has exactly one solution precisely when the line \\(L(k)\\) is tangent to the circle \\(|z-C|=5\\).  \n\nFor a line \\(Ax+By+C=0\\) the distance from a point \\((x_0,y_0)\\) is  \n\n\\[\nd=\\frac{|Ax_0+By_0+C|}{\\sqrt{A^2+B^2}} .\n\\]\n\nHere \\(A=-8,\\;B=6,\\;C=8k+7\\) and the centre of the circle is \\((25,20)\\). Hence\n\n\\[\nd(k)=\\frac{\\bigl|-8\\cdot25+6\\cdot20+(8k+7)\\bigr|}{\\sqrt{(-8)^2+6^2}}\n      =\\frac{|8k-73|}{10}.\n\\]\n\nTangency requires \\(d(k)=r=5\\):\n\n\\[\n\\frac{|8k-73|}{10}=5\\quad\\Longrightarrow\\quad|8k-73|=50 .\n\\]\n\nThus  \n\n\\[\n8k-73=50\\quad\\text{or}\\quad8k-73=-50,\n\\]\n\n\\[\nk=\\frac{123}{8},\\qquad k=\\frac{23}{8}.\n\\]\n\nBoth values make the line tangent, giving exactly one intersection point with the circle.\n\n---\n\n### 3. Sum of the possible \\(k\\)\n\n\\[\n\\frac{123}{8}+\\frac{23}{8}= \\frac{146}{8}= \\frac{73}{4}.\n\\]\n\nWrite \\(\\dfrac{73}{4}\\) as \\(\\dfrac{m}{n}\\) with \\(\\gcd(m,n)=1\\); then \\(m=73,\\;n=4\\).\n\n\\[\nm+n = 73+4 = 77.\n\\]\n\n\\[\n\\boxed{77}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 77

    \n

    Extracted Answer: 77

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the letters be  \n\n\\[\nA<B<C<D<E<F<G<H<I<J<K<L .\n\\]\n\nIn a random pairing each pair is written with its smaller letter first, so a\npair \\(\\{x,y\\}\\;(x<y)\\) becomes the word \\(xy\\).\nThe six words are then listed alphabetically; the last word is the\nlexicographically largest of the six two\u2011letter words.\n\nBecause the first letters of the six words are all different (each letter can\nappear as the smaller element of at most one pair), the largest word is the\npair whose **smaller** element is the largest among the six smaller elements.\nHence the last word contains \\(G\\) precisely when the pair containing \\(G\\)\nhas the largest smaller element.\n\n---\n\n### 1.  Choose the partner of \\(G\\)\n\n\\(G\\) can be paired with any of the other 11 letters, each with probability\n\\(\\frac1{11}\\).\n\n*If \\(G\\) is paired with a letter larger than \\(G\\)*  \n(let the partner be \\(X\\in\\{H,I,J,K,L\\}\\)).  \nThen the smaller element of the \\(G\\!-\\!X\\) pair is \\(G\\).\n\nThe remaining 10 letters consist of  \n\n- 6 letters \\(\\{A,B,C,D,E,F\\}\\) smaller than \\(G\\) (call them \u201clow\u201d),  \n- 4 letters among \\(\\{H,I,J,K,L\\}\\setminus\\{X\\}\\) larger than \\(G\\) (call them \u201chigh\u201d).\n\nFor the pair \\(G\\!-\\!X\\) to have the largest smaller element, no other pair\nmay have a smaller element \\(\\ge G\\); i.e. no \u201chigh\u201d letter may be the smaller\nletter of its pair.  Hence each high letter must be matched with a low\nletter.  \n\nNumber of matchings of the 10 remaining letters with no high\u2013high pair:\n\n\\[\n\\binom{6}{4}\\,4!\\;(=15\\cdot24)=360 .\n\\]\n\nTotal matchings of 10 letters: \\((10-1)!!=945\\).\nThus\n\n\\[\nP(\\text{lexicographically largest pair }|\\,G\\!-\\!X,\\;X>G)=\\frac{360}{945}\n=\\frac{8}{21}.\n\\]\n\nSince there are 5 possible partners larger than \\(G\\),\n\n\\[\n\\sum_{X>G}\\frac1{11}\\cdot\\frac{8}{21}=5\\cdot\\frac{1}{11}\\cdot\\frac{8}{21}\n=\\frac{40}{231}.\n\\]\n\n*If \\(G\\) is paired with a letter smaller than \\(G\\)*  \nthe only possible partner is \\(F\\); for any smaller partner there are fewer\nthan five letters below it, making it impossible for its pair to have the\nlargest smaller element.\n\nWhen \\(G\\) is paired with \\(F\\), the smaller element of the pair is \\(F\\).\nThe other 10 letters are  \n\n\\[\n\\{A,B,C,D,E\\}\\ (\\text{low})\\quad\\text{and}\\quad\\{H,I,J,K,L\\}\\ (\\text{high}).\n\\]\n\nAll five high letters must be paired with the five low letters; otherwise a\nhigh letter would become a smaller element.  The number of such matchings is\n\\(5!=120\\).  Hence\n\n\\[\nP(\\text{largest pair }|\\,G\\!-\\!F)=\\frac{120}{945}=\\frac{8}{63},\n\\]\nand the contribution is \\(\\displaystyle\\frac1{11}\\cdot\\frac{8}{63}\n= \\frac{8}{693}\\).\n\nNo other partner of \\(G\\) can work, so the total probability that the last\nword contains \\(G\\) is\n\n\\[\n\\frac{40}{231}+\\frac{8}{693}\n=\\frac{120}{693}+\\frac{8}{693}\n=\\frac{128}{693}.\n\\]\n\nThe fraction \\(\\frac{128}{693}\\) is already in lowest terms.  \nThus \\(m=128,\\ n=693\\) and\n\n\\[\nm+n = 128+693 = 821.\n\\]\n\n\\[\n\\boxed{821}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 821

    \n

    Extracted Answer: 821

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution**\n\n--------------------------------------------------------------------\n\n### 1.  The ratios on the two sides  \n\n\\[\nAB=AD+DE+EB=4+16+8=28,\\qquad \nAC=AF+FG+GC=13+52+26=91 .\n\\]\n\n\\[\n\\frac{AD}{AB}=\\frac{4}{28}=\\frac17,\\qquad \n\\frac{AF}{AC}= \\frac{13}{91}= \\frac17 .\n\\]\n\nHence  \n\n\\[\n\\frac{AD}{AB}= \\frac{AF}{AC}= \\frac17\\qquad\\Longrightarrow\\qquad \nDF\\parallel BC .\n\\]\n\nSimilarly  \n\n\\[\n\\frac{AE}{AB}= \\frac{20}{28}= \\frac57,\\qquad \n\\frac{AG}{AC}= \\frac{65}{91}= \\frac57 ,\n\\]\n\nso  \n\n\\[\n\\frac{AE}{AB}= \\frac{AG}{AC}= \\frac57\\qquad\\Longrightarrow\\qquad \nEG\\parallel BC .\n\\]\n\nLet  \n\n\\[\np=\\frac17,\\qquad q=\\frac57 .\n\\]\n\n--------------------------------------------------------------------\n\n### 2.  Area of \\(\\triangle ABC\\)\n\nBecause \\(DF\\parallel EG\\parallel BC\\), the quadrilateral \\(DEGF\\) is the\nregion of \\(\\triangle ABC\\) between the two lines through \\(D\\) and \\(E\\)\nparallel to \\(BC\\).  \n\nTriangles \\(ADF\\) and \\(AEG\\) are similar to \\(\\triangle ABC\\) with similarity\nratios \\(p\\) and \\(q\\) respectively, so\n\n\\[\n[ADF]=p^{2}[ABC],\\qquad[AEG]=q^{2}[ABC].\n\\]\n\nHence  \n\n\\[\n[DEGF]=[AEG]-[ADF]=(q^{2}-p^{2})[ABC]\n        =\\Bigl(\\frac{5^{2}}{7^{2}}-\\frac{1^{2}}{7^{2}}\\Bigr)[ABC]\n        =\\frac{24}{49}[ABC].\n\\]\n\nGiven \\([DEGF]=288\\),\n\n\\[\n[ABC]=288\\cdot\\frac{49}{24}=12\\cdot 49 =\\boxed{588}.\n\\]\n\n--------------------------------------------------------------------\n\n### 3.  Coordinates\n\nPlace  \n\n\\[\nA=(0,0),\\qquad B=(28,0),\\qquad C=(c,\\,42)\n\\]\n\n(the height is \\(42\\) because \\([ABC]=\\frac12\\cdot28\\cdot42=588\\)).  \nUsing the ratios \\(p,q\\),\n\n\\[\n\\begin{aligned}\nD &=pB=(4,0),                   &E&=qB=(20,0),\\\\[2mm]\nF &=pC=\\Bigl(\\frac{c}{7},6\\Bigr), &\nG &=qC=\\Bigl(\\frac{5c}{7},30\\Bigr).\n\\end{aligned}\n\\]\n\nReflections give  \n\n\\[\nM=2F-D=\\Bigl(\\frac{2c}{7}-4,\\;12\\Bigr),\\qquad \nN=2E-G=\\Bigl(40-\\frac{5c}{7},\\;-30\\Bigr).\n\\]\n\n--------------------------------------------------------------------\n\n### 4.  Area of the heptagon \\(AFNBCEM\\)\n\nList the vertices in order:\n\n\\[\n\\begin{array}{c|c}\n\\text{Vertex}&(x,y)\\\\ \\hline\nA&(0,0)\\\\\nF&\\bigl(\\frac{c}{7},6\\bigr)\\\\\nN&\\bigl(40-\\frac{5c}{7},-30\\bigr)\\\\\nB&(28,0)\\\\\nC&(c,42)\\\\\nE&(20,0)\\\\\nM&\\bigl(\\frac{2c}{7}-4,12\\bigr)\n\\end{array}\n\\]\n\nApply the Shoelace formula.  The sum  \n\n\\[\n\\sum_{i=1}^{7}\\bigl(x_i y_{i+1}-y_i x_{i+1}\\bigr)\n\\]  \n\n(with \\(x_8=x_1,\\;y_8=y_1\\)) simplifies dramatically:\n\n\\[\n\\begin{aligned}\n&0\\\\\n&\\;-\\;240\\\\\n&\\;+\\;840\\\\\n&\\;+\\;1176\\\\\n&\\;-\\;840\\\\\n&\\;+\\;240\\\\\n&0\n\\end{aligned}\n\\qquad =\\;1176 .\n\\]\n\nThus\n\n\\[\n[AFNBCEM]=\\frac12\\cdot1176=588 .\n\\]\n\nThe result does **not** depend on the unknown coordinate \\(c\\); the\ncancellation occurs because the vectors \\(DF\\) and \\(EG\\) are parallel to\n\\(BC\\).\n\n--------------------------------------------------------------------\n\n### 5.  Answer\n\n\\[\n\\boxed{588}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 588

    \n

    Extracted Answer: 588

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nP:\\;y=x^{2}-4\n\\]\n\nand rotate \\(P\\) \\(60^{\\circ}\\) counter\u2011clockwise about the origin.  \nIf \\((x,y)\\) lies on the rotated curve, then there is a point \\((u,v)\\) on\n\\(P\\) such that  \n\n\\[\n\\begin{pmatrix}x\\\\y\\end{pmatrix}=R\\begin{pmatrix}u\\\\v\\end{pmatrix},\n\\qquad \nR=\\begin{pmatrix}\\tfrac12&-\\tfrac{\\sqrt3}{2}\\\\[2pt]\\tfrac{\\sqrt3}{2}&\\tfrac12\\end{pmatrix}.\n\\]\n\nEquivalently, a point \\((x,y)\\) is on both curves iff\n\n\\[\ny=x^{2}-4 \\qquad\\text{and}\\qquad \nR^{T}\\!\\begin{pmatrix}x\\\\y\\end{pmatrix}\n   =\\begin{pmatrix}x'\\\\y'\\end{pmatrix}\n\\text{ satisfies }y'=(x')^{2}-4,\n\\]\n\nwhere  \n\n\\[\nR^{T}= \\begin{pmatrix}\\tfrac12&\\tfrac{\\sqrt3}{2}\\\\[2pt]-\\tfrac{\\sqrt3}{2}&\\tfrac12\\end{pmatrix},\n\\quad \nx'=\\frac{x}{2}+\\frac{\\sqrt3\\,y}{2},\\qquad\ny'=-\\frac{\\sqrt3\\,x}{2}+\\frac{y}{2}.\n\\]\n\nUsing \\(y=x^{2}-4\\),\n\n\\[\nx'=\\frac{\\sqrt3 x^{2}+x-4\\sqrt3}{2},\\qquad \ny'=\\frac{x^{2}-\\sqrt3 x-4}{2}.\n\\]\n\nThe condition \\(y'=(x')^{2}-4\\) yields  \n\n\\[\n\\frac{x^{2}-\\sqrt3 x-4}{2}\n   =\\Bigl(\\frac{\\sqrt3 x^{2}+x-4\\sqrt3}{2}\\Bigr)^{2}-4 .\n\\]\n\nMultiplying by \\(2\\) and simplifying gives the quartic\n\n\\[\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40=0.\n\\]\n\nFactor this over \\(\\mathbb{Q}(\\sqrt3)\\):\n\n\\[\n\\begin{aligned}\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40\n&=(x^{2}+\\sqrt3\\,x-4)(3x^{2}-\\sqrt3\\,x-10).\n\\end{aligned}\n\\]\n\nHence the possible \\(x\\)-coordinates are the roots of the two quadratics.\n\n\\[\n\\begin{cases}\nx^{2}+\\sqrt3\\,x-4=0 &\\Longrightarrow\n\\displaystyle x=\\frac{-\\sqrt3\\pm\\sqrt{19}}2,\\\\[6pt]\n3x^{2}-\\sqrt3\\,x-10=0 &\\Longrightarrow\n\\displaystyle x=\\frac{\\sqrt3\\pm\\sqrt{123}}6 .\n\\end{cases}\n\\]\n\nWe need a point in the fourth quadrant, i.e. \\(x>0\\) and \\(y=x^{2}-4<0\\).\nOnly  \n\n\\[\nx=\\frac{-\\sqrt3+\\sqrt{19}}2\\;(>0,\\;<2)\n\\]\n\nsatisfies this.  Its \\(y\\)-coordinate is\n\n\\[\n\\begin{aligned}\ny&=x^{2}-4\n   =\\frac{(-\\sqrt3+\\sqrt{19})^{2}}{4}-4\n   =\\frac{22-2\\sqrt{57}}4-4\\\\\n  &=\\frac{11-\\sqrt{57}}2-4\n   =\\frac{3-\\sqrt{57}}2 .\n\\end{aligned}\n\\]\n\nThus  \n\n\\[\ny=\\frac{a-\\sqrt{b}}{c}\\quad\\text{with}\\quad a=3,\\;b=57,\\;c=2,\n\\]\n\nand \\(a\\) and \\(c\\) are relatively prime.  \n\nFinally\n\n\\[\na+b+c=3+57+2=62.\n\\]\n\n\\[\n\\boxed{62}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 62

    \n

    Extracted Answer: 62

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n\\begin{aligned}\n&x-yz<y-zx<z-xy \\\\\n\\Longleftrightarrow\\;&x-yz<y-zx\\quad\\text{and}\\quad y-zx<z-xy  \\\\\n\\Longleftrightarrow\\;&(x-y)(1+z)<0\\quad\\text{and}\\quad (y-z)(1+x)<0 .\n\\end{aligned}\n\\]\n\nHence  \n\n\\[\n\\begin{cases}\n(x-y)(1+z)<0,\\\\[2pt]\n(y-z)(1+x)<0 .\n\\end{cases}\n\\]\n\nEach product being negative means the two factors have opposite signs.  \nThus we have four possible sign\u2011combinations:\n\n\\[\n\\begin{array}{c|c|c}\n\\text{Case}& (x-y,\\;1+z) & (y-z,\\;1+x)\\\\ \\hline\n\\text{I}& (+,\\; -) & (+,\\; -)\\\\\n\\text{II}& (+,\\; -) & (-,\\; +)\\\\\n\\text{III}& (-,\\; +) & (+,\\; -)\\\\\n\\text{IV}& (-,\\; +) & (-,\\; +)\n\\end{array}\n\\]\n\nTranslating them into linear inequalities:\n\n\\[\n\\begin{aligned}\n\\text{I}&:\\; x>y,\\;z<-1,\\;y>z,\\;x<-1 \\qquad\\text{(impossible since }x+y+z=75)\\\\\n\\text{II}&:\\; x>y,\\;z<-1,\\;y<z,\\;x>-1 \\\\\n\\text{III}&:\\; x<y,\\;z>-1,\\;y>z,\\;x<-1 \\\\\n\\text{IV}&:\\; x<y,\\;z>-1,\\;y<z,\\;x>-1 .\n\\end{aligned}\n\\]\n\nThus three non\u2011empty convex regions arise from cases II,\u202fIII,\u202fIV.\nCases II and III are unbounded, while case\u202fIV gives a bounded region.\n\n---\n\n### Bounded region (case\u202fIV)\n\nCase\u202fIV is equivalent to  \n\n\\[\n-1<x<y<z ,\\qquad x+y+z=75 .\n\\]\n\nThe boundary of this region in the plane \\(x+y+z=75\\) consists of the three lines  \n\n\\[\n\\begin{cases}\nx=-1,\\\\[2pt]\ny=x,\\\\[2pt]\nz=y .\n\\end{cases}\n\\]\n\nIntersecting each pair of lines with the plane gives the vertices\n\n\\[\n\\begin{aligned}\nA &: x=-1,\\;y=-1 \\;\\Rightarrow\\;z=77 ,&&A(-1,-1,77),\\\\\nB &: x=-1,\\;z=y \\;\\Rightarrow\\;y=z=38 ,&&B(-1,38,38),\\\\\nC &: y=x,\\;z=y \\;\\Rightarrow\\;x=y=z=25 ,&&C(25,25,25).\n\\end{aligned}\n\\]\n\nHence the finite region is the triangle \\(ABC\\).\n\n---\n\n### Area of the triangle\n\nVectors along two sides:\n\n\\[\n\\begin{aligned}\n\\vec{AB}&=B-A=(0,39,-39),\\\\\n\\vec{AC}&=C-A=(26,26,-52).\n\\end{aligned}\n\\]\n\n\\[\n\\vec{AB}\\times\\vec{AC}=(-1014,-1014,-1014)\n\\quad\\Longrightarrow\\quad \n\\bigl\\lVert\\vec{AB}\\times\\vec{AC}\\bigr\\rVert\n=1014\\sqrt3 .\n\\]\n\nTherefore\n\n\\[\n\\text{Area}= \\frac12\\bigl\\lVert\\vec{AB}\\times\\vec{AC}\\bigr\\rVert\n           =\\frac12\\cdot1014\\sqrt3\n           =507\\sqrt3 .\n\\]\n\nThus the area is \\(a\\sqrt b\\) with \\(a=507,\\;b=3\\), and\n\n\\[\na+b=507+3=510.\n\\]\n\n\\[\n\\boxed{510}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 510

    \n

    Extracted Answer: 510

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nA piecewise linear periodic function is defined by $f(x)=\\begin{cases}x&\\text{if }x\\in[-1,1)\\\\2-x&\\text{if }x\\in[1,3)\\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\\frac{a+b\\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    First write the equation for the intersection points.\n\nThe parabola is  \n\n\\[\nx=34y^{2},\n\\]\n\nand the periodic saw\u2011tooth satisfies  \n\n\\[\nf(x+4)=f(x),\\qquad   \nf(x)=\\begin{cases}\nx,&-1\\le x<1,\\\\[2pt]\n2-x,&1\\le x<3 .\n\\end{cases}\n\\]\n\nHence an intersection must satisfy  \n\n\\[\ny=f(34y^{2}). \\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1.  Express \\(f\\) using the modulus\n\nFor any real \\(x\\) let  \n\n\\[\nt=(x+1)\\pmod 4,\\qquad 0\\le t<4 .\n\\]\n\nThen  \n\n\\[\nf(x)=\n\\begin{cases}\nt-1,&0\\le t<2,\\\\[2pt]\n3-t,&2\\le t<4 .\n\\end{cases}\n\\]\n\nPut \\(x=34y^{2}\\).  Let  \n\n\\[\ns=34y^{2}+1,\\qquad t=s\\pmod4 .\n\\]\n\n--------------------------------------------------------------------\n### 2.  Two linear possibilities\n\n*If \\(0\\le t<2\\) (the \u201crising\u201d part) then \\(y=t-1\\) and  \n\\(t=y+1\\).  Hence  \n\n\\[\n34y^{2}+1=4n+y+1\\quad\\Longrightarrow\\quad 34y^{2}-y-4n=0,\\tag{2}\n\\]\n\nwith the condition \\(y\\in[-1,1)\\).\n\n*If \\(2\\le t<4\\) (the \u201cfalling\u201d part) then \\(y=3-t\\) and  \n\\(t=3-y\\).  Hence  \n\n\\[\n34y^{2}+1=4n+3-y\\quad\\Longrightarrow\\quad 34y^{2}+y-(2+4n)=0,\\tag{3}\n\\]\n\nwith the condition \\(y\\in(-1,1]\\).\n\nHere \\(n\\) is the integer \\(\\displaystyle n=\\Big\\lfloor\\frac{34y^{2}+1}{4}\\Big\\rfloor\\).\nSince \\(0\\le 34y^{2}+1\\le 35\\), we must have \\(0\\le n\\le 8\\).\n\n--------------------------------------------------------------------\n### 3.  Solve the quadratics\n\n**From (2):**  \n\n\\[\ny=\\frac{1\\pm\\sqrt{1+544n}}{68}\\qquad (n=0,1,\\dots ,8).\n\\]\n\nBoth roots lie in \\([-1,1)\\); for each \\(n\\) their sum is  \n\n\\[\n\\frac{1}{34}.\n\\]\n\nThus  \n\n\\[\nS_I=\\sum_{n=0}^{8}\\frac1{34}= \\frac{9}{34}. \\tag{4}\n\\]\n\n**From (3):**  \n\n\\[\ny=\\frac{-1\\pm\\sqrt{273+544n}}{68}\\qquad (n=0,1,\\dots ,8).\n\\]\n\nFor \\(n=0,\\dots ,7\\) both roots satisfy \\((-1,1]\\); for \\(n=8\\) the\nnegative root is \\(\\le -1\\) and must be discarded.\nHence for \\(n=0,\\dots ,7\\) each pair sums to \\(-\\dfrac1{34}\\), and we add\nthe single remaining root for \\(n=8\\):\n\n\\[\nS_{II}=8\\!\\left(-\\frac1{34}\\right)+\\frac{-1+\\sqrt{4625}}{68}\n        =-\\frac{8}{34}+\\frac{-1+5\\sqrt{185}}{68}. \\tag{5}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Total sum of \\(y\\)-coordinates\n\n\\[\n\\begin{aligned}\nS &=S_I+S_{II}\\\\\n  &=\\frac{9}{34}-\\frac{8}{34}+\\frac{-1+5\\sqrt{185}}{68}\\\\\n  &=\\frac{1}{34}+\\frac{-1+5\\sqrt{185}}{68}\\\\[2pt]\n  &=\\frac{2-1+5\\sqrt{185}}{68}\n   =\\frac{1+5\\sqrt{185}}{68}.\n\\end{aligned}\n\\]\n\nThus the sum can be written as \\(\\displaystyle \\frac{a+b\\sqrt{c}}{d}\\) with  \n\n\\[\na=1,\\qquad b=5,\\qquad c=185,\\qquad d=68,\n\\]\n\nwhere \\(a,b,d\\) are coprime and \\(c\\) is square\u2011free.\n\nFinally  \n\n\\[\na+b+c+d = 1+5+185+68 = 259.\n\\]\n\n\\[\n\\boxed{259}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 259

    \n

    Extracted Answer: 259

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The condition  \n\n\\[\na^3+b^3+c^3\\equiv 0\\pmod {3^7}\\qquad (3^7=2187)\n\\]\n\ndepends only on the residues of \\(a,b,c\\) modulo \\(3^7\\).  \nWrite each number as  \n\n\\[\na=3^{3\\alpha}q,\\qquad \\alpha\\in\\{0,1,2\\},\\;q\\in Q,\n\\]\n\nwhere  \n\n* \\(Q\\) = the set of cubic residues among units modulo \\(3^7\\);  \n  \\(|Q|=486\\);\n* for \\(\\alpha=0,1,2\\) the sets  \n\n\\[\nR_\\alpha =\\{3^{3\\alpha}q\\;|\\;q\\in Q\\}\n\\]\n\nhave sizes  \n\n\\[\n|R_0|=486,\\;|R_1|=162,\\;|R_2|=54 .\n\\]\n\nAll numbers divisible by \\(27\\) contribute \\(0\\) to the sum, so we only need the\nordered triples whose components lie in  \n\n\\[\nR=R_0\\cup R_1\\cup R_2 .\n\\]\n\nDenote  \n\n\\[\nM_2 =\\#\\{(x,y)\\in R^2 : x+y\\equiv 0\\},\\qquad \nM_3 =\\#\\{(x,y,z)\\in R^3 : x+y+z\\equiv 0\\}.\n\\]\n\nBecause \\(-x\\in R\\) for every \\(x\\in R\\), we have \\(M_2=|R|=702\\).\n\nThe total number of required triples of positive integers is  \n\n\\[\n\\begin{aligned}\nN&=27^3      \\;(\\text{all three multiples of }27) \\\\\n  &\\quad+ 3\\cdot27\\cdot M_2 \\;(\\text{exactly two non\u2011multiples of }27)\\\\\n  &\\quad+ M_3 .\n\\end{aligned}\n\\]\n\nThus  \n\n\\[\nN=19683+81\\cdot702+M_3=19683+56862+M_3 .\n\\]\n\n--------------------------------------------------------------------\n### Computing \\(M_3\\)\n\nLet  \n\n\\[\nf(z)=\\mathbf 1_R(z),\\qquad\nF(t)=\\sum_{z\\in\\mathbf Z/3^7\\mathbf Z}f(z) e^{2\\pi i t z/3^7}\n\\]\n\nbe the Fourier transform of the indicator of \\(R\\).  \nThen\n\n\\[\nM_3=\\frac1{3^7}\\sum_{t=0}^{3^7-1}F(t)^3 .\n\\]\n\nWriting \\(R\\) as \\(Q\\cup27Q\\cup729Q\\) and using that each element of\n\\(R_\\alpha\\) is obtained from \\(|Q|/3^\\alpha\\) elements of \\(Q\\), we obtain\n\n\\[\nF(t)=\\sum_{\\alpha=0}^{2}\\frac1{3^{\\alpha}}\n        \\sum_{q\\in Q} e^{2\\pi i t\\cdot3^{3\\alpha} q/3^7}.\n\\]\n\nThe inner sums are evaluated with the three characters of order\u202f3 on\n\\((\\mathbf Z/3^7\\mathbf Z)^\\times\\).  One finds that \\(F(t)\\) depends only on\n\\(v=v_3(t)\\) (the 3\u2011adic valuation of \\(t\\)):\n\n\\[\n\\begin{array}{c|c|c}\nv &\\text{number of }t &F(t)\\\\\\hline\n0 &1458 & -27\\\\\n1 &486  & 54\\\\\n2 &162  & 54\\bigl(1+\\operatorname{Re}A\\bigr)\\\\\n3 &54   & -27\\\\\n4 &18   & 216\\\\\n5 &6    & 216+162\\,\\operatorname{Re}A\\\\\n6 &2    & -27\n\\end{array}\n\\]\n\nwhere  \n\n\\[\nA=3e^{2\\pi i/9}=3\\zeta_9,\\qquad \n\\operatorname{Re}A=3\\cos\\frac{2\\pi}{9}.\n\\]\n\nFrom the values\n\\[\n\\operatorname{Re}A=3\\cos\\frac{2\\pi}{9},\\qquad\n\\cos\\frac{2\\pi}{9}+ \\cos\\frac{4\\pi}{9}+ \\cos\\frac{8\\pi}{9}=0,\n\\]\none obtains  \n\n\\[\n\\sum_{i=1}^3 (1+r_i)^3=\\frac{267}{8},\\qquad\n\\sum_{i=1}^3\\Bigl(\\frac43+r_i\\Bigr)^3=\\frac{3671}{72},\n\\]\nwhere \\(r_1,r_2,r_3\\) are the three real numbers\n\\(3\\cos\\frac{2\\pi}{9},\\,3\\cos\\frac{4\\pi}{9},\\,3\\cos\\frac{8\\pi}{9}\\).\n\nCarrying out the sum\n\n\\[\n\\sum_{t}F(t)^3\n =702^3-1514\\cdot27^3+486\\cdot54^3+18\\cdot216^3\n   +54^4\\!\\left(\\frac{267}{8}\\right)+8\\,503\\,056\\!\\left(\\frac{3671}{72}\\right)\n =1\\,291\\,401\\,630 .\n\\]\n\nSince \\(3^7=2187\\),\n\n\\[\nM_3=\\frac{1\\,291\\,401\\,630}{2187}=590\\,490 .\n\\]\n\n--------------------------------------------------------------------\n### Final count\n\n\\[\n\\begin{aligned}\nN &=19683+56862+590490\\\\\n  &=667\\,035 .\n\\end{aligned}\n\\]\n\nThe problem asks for \\(N\\bmod 1000\\):\n\n\\[\n\\boxed{35}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 735

    \n

    Extracted Answer: 35

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 27 cells of a $3\\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. \n | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | \n | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | \n | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | \n The number of different ways to fill such a grid can be written as $p^a\\cdot q^b\\cdot r^c\\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\\cdot a+q\\cdot b+r\\cdot c+s\\cdot d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1 \u2013   What the conditions mean**\n\nThe grid has three rows and nine columns.  \nThe columns are grouped into three \\(3\\times3\\) blocks  \n\n\\[\nB_{1}=\\{1,2,3\\},\\qquad B_{2}=\\{4,5,6\\},\\qquad B_{3}=\\{7,8,9\\}.\n\\]\n\nFor each row we must use the numbers \\(1,2,\\dots ,9\\) exactly once, and for each\nblock the nine cells of that block must also contain the numbers \\(1,\\dots ,9\\) exactly once.\n\nHence for each digit \\(d\\) :\n\n* it appears once in each of the three rows,  \n* it appears once in each of the three blocks.\n\nConsequently the three positions of a digit form a **bijection** between rows and blocks.\nLet \\(\\sigma _d\\in S_{3}\\) be the permutation defined by\n\n\\[\n\\sigma _d(i)=\\text{the block that contains }d\\text{ in row }i .\n\\]\n\nThus each digit contributes one \u20181\u2019 in the \\(3\\times3\\) permutation matrix of \\(\\sigma _d\\).\n\n--------------------------------------------------------------------\n\n**Step 2 \u2013   The matrix condition**\n\nIf we add the nine permutation matrices of the nine digits we obtain a matrix\n\\(M\\) whose entry \\(M_{i,b}\\) counts how many digits lie in row \\(i\\) and block \\(b\\).\nThe block condition says that each block must contain each digit once, i.e. each\ncell \\((i,b)\\) must contain exactly three digits. Therefore\n\n\\[\nM=3J,\\qquad J=\\begin{pmatrix}1&1&1\\\\1&1&1\\\\1&1&1\\end{pmatrix}.\n\\]\n\nSo we must write \\(3J\\) as a sum of nine (not\u2011necessarily distinct) permutation\nmatrices of size \\(3\\).\n\n--------------------------------------------------------------------\n\n**Step 3 \u2013   Types of permutations**\n\n\\(S_{3}\\) has six elements:\n\n\\[\n\\begin{aligned}\n&\\text{id},\\;(12),\\;(13),\\;(23),\\;(123),\\;(132).\n\\end{aligned}\n\\]\n\nLet  \n\n\\[\na=x_{\\text{id}}=x_{(123)}=x_{(132)},\\qquad\nb=x_{(12)}=x_{(13)}=x_{(23)} .\n\\]\n\nCounting the contributions of each type to the nine entries of \\(M\\) gives the\nsystem  \n\n\\[\n\\begin{cases}\na+b=3\\\\[2pt]\na+b=3\\\\[2pt]\na+b=3\\\\[2pt]\na+b=3,\n\\end{cases}\n\\qquad\\Longrightarrow\\qquad a+b=3 .\n\\]\n\nHence \\(a\\) may be \\(0,1,2,3\\) and \\(b=3-a\\).  For a fixed value of \\(a\\),\n\n\\[\n\\begin{aligned}\nx_{\\text{id}}&=a,\\\\\nx_{(123)}&=a,\\\\\nx_{(132)}&=a,\\\\\nx_{(12)}&=x_{(13)}=x_{(23)}&=3-a .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 4 \u2013   Assigning the nine digits to the permutations**\n\nThe nine digits are distinct, so for a given \\(a\\) the number of ways to give the\nsix permutation types to the digits is the multinomial coefficient\n\n\\[\nN_a=\\frac{9!}{a!\\,a!\\,a!\\,(3-a)!\\,(3-a)!\\,(3-a)!}\n    =\\frac{9!}{a!^{3}(3-a)!^{3}} .\n\\]\n\nSumming over the four possible values of \\(a\\),\n\n\\[\n\\sum_{a=0}^{3}N_a\n   =\\frac{9!}{0!^{3}3!^{3}}+\\frac{9!}{1!^{3}2!^{3}}\n    +\\frac{9!}{2!^{3}1!^{3}}+\\frac{9!}{3!^{3}0!^{3}}\n   =94\\,080 .\n\\]\n\n--------------------------------------------------------------------\n\n**Step 5 \u2013   Ordering inside each row\u2011block**\n\nFor a fixed assignment of the permutations, each of the nine\n\\( ( \\text{row},\\text{block} )\\) cells contains exactly three different digits.\nThese three digits can be placed in the three columns of that cell in any order,\ni.e. in \\(3! = 6\\) ways, independently of the other cells.\nHence we obtain an extra factor \\((3!)^{9}=6^{9}\\).\n\nThus the total number of admissible \\(3\\times9\\) grids is\n\n\\[\nN = 94\\,080\\cdot 6^{9}\n   =9!\\cdot 6^{6}\\cdot 56 .\n\\]\n\n--------------------------------------------------------------------\n\n**Step 6 \u2013   Prime factorisation**\n\n\\[\n\\begin{aligned}\n9! &=2^{7}\\,3^{4}\\,5\\,7,\\\\\n6^{6}&=(2\\cdot3)^{6}=2^{6}\\,3^{6},\\\\\n56 &=2^{3}\\,7 .\n\\end{aligned}\n\\]\n\nMultiplying gives  \n\n\\[\nN=2^{7+6+3}\\,3^{4+6}\\,5^{1}\\,7^{1+1}\n  =2^{16}\\,3^{10}\\,5^{1}\\,7^{2}.\n\\]\n\nThus we may write  \n\n\\[\nN = p^{a}\\,q^{b}\\,r^{c}\\,s^{d}\n\\quad\\text{with}\\quad\np=2,\\;a=16;\\;\\; q=3,\\;b=10;\\;\\; r=5,\\;c=1;\\;\\; s=7,\\;d=2 .\n\\]\n\n--------------------------------------------------------------------\n\n**Step 7 \u2013   Required sum**\n\n\\[\np\\cdot a+q\\cdot b+r\\cdot c+s\\cdot d\n =2\\cdot16+3\\cdot10+5\\cdot1+7\\cdot2\n =32+30+5+14=81 .\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{81}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 81

    \n

    Extracted Answer: 81

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the line containing \\(A,B,C,D,E,F\\) be the \\(x\\)-axis.\n\n\\[\nA=(0,0),\\qquad B=(b,0),\\ C=(c,0),\\ D=(d,0),\\ E=(e,0),\\ F=(f,0)\n\\]\n\nFrom the given distances along the line  \n\n\\[\n\\begin{aligned}\nAC&=c-a=26 \\Longrightarrow c=26,\\\\\nBD&=d-b=22,\\\\\nCE&=e-c=31 \\Longrightarrow e=26+31=57,\\\\\nDF&=f-d=33,\\\\\nAF&=f-a=73 \\Longrightarrow f=73 .\n\\end{aligned}\n\\]\n\nFrom \\(DF=33\\) we get \\(d=f-33=73-33=40\\).  \nThen \\(BD=22\\) gives \\(b=d-22=40-22=18\\).\n\nThus the collinear points are\n\n\\[\nA(0),\\ B(18),\\ C(26),\\ D(40),\\ E(57),\\ F(73).\n\\]\n\n---\n\n### Coordinates of \\(G\\)\n\nLet \\(G=(x,y)\\) with \\(y\\neq0\\).  \nWe know\n\n\\[\n\\begin{cases}\n(CG)^2=(x-26)^2+y^2=40^2=1600,\\\\\n(DG)^2=(x-40)^2+y^2=30^2=900 .\n\\end{cases}\n\\]\n\nSubtracting the equations:\n\n\\[\n(x-26)^2-(x-40)^2 = 1600-900=700 .\n\\]\n\nCompute the left side:\n\n\\[\n\\bigl(x^2-52x+676\\bigr)-\\bigl(x^2-80x+1600\\bigr)=28x-924 .\n\\]\n\nHence \\(28x-924=700\\) giving  \n\n\\[\nx=\\frac{1624}{28}=58.\n\\]\n\nNow use \\((x-40)^2+y^2=900\\):\n\n\\[\n(58-40)^2+y^2=900\\Longrightarrow 18^2+y^2=900\\Longrightarrow y^2=576.\n\\]\n\nThus \\(y=\\pm24\\).  The sign does not affect the area; we take \\(y=24\\).\n\nTherefore  \n\n\\[\nG=(58,24)\\;(\\text{or }(58,-24)).\n\\]\n\n---\n\n### Area of \\(\\triangle BGE\\)\n\nPoints:\n\\[\nB=(18,0),\\qquad G=(58,24),\\qquad E=(57,0).\n\\]\n\nSince \\(B\\) and \\(E\\) lie on the \\(x\\)-axis, the base \\(BE\\) has length  \n\n\\[\nBE = 57-18 = 39.\n\\]\n\nThe altitude from \\(G\\) to the \\(x\\)-axis is \\(|y|=24\\).\n\nHence\n\n\\[\n\\text{Area}=\\frac12\\cdot (\\text{base})\\cdot (\\text{height})\n          =\\frac12\\cdot 39\\cdot 24\n          =468.\n\\]\n\n\\[\n\\boxed{468}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 468

    \n

    Extracted Answer: 468

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nx_{k+1}= \\frac{x_k+\\frac1{x_k}-1}{3},\\qquad x_1=\\frac{25}{11}\n\\]\n\n---\n\n### 1.  A convenient substitution  \n\nLet  \n\n\\[\ny_k=\\frac{x_k-1}{x_k+1}\\qquad\\Longleftrightarrow\\qquad \nx_k=\\frac{1+y_k}{1-y_k}.\n\\]\n\nThen a short computation gives  \n\n\\[\ny_{k+1}= \\frac{3y_k^{\\,2}-1}{2}. \\tag{1}\n\\]\n\nThus we only have to iterate the quadratic map (1).\n\n---\n\n### 2.  Scaling  \n\nDefine  \n\n\\[\nu_k=\\frac32\\,y_k .\n\\]\n\nFrom (1)\n\n\\[\nu_{k+1}=u_k^{2}-\\frac34 .\\tag{2}\n\\]\n\nLet  \n\n\\[\nu_k=\\frac{a_k}{12^{\\,2^{k-1}}},\\qquad a_1=7 .\n\\]\n\nBecause the denominator squares each step, indeed  \n\n\\[\n12^{\\,2^{k}}=(12^{\\,2^{k-1}})^2 .\n\\]\n\nUsing (2) one checks that  \n\n\\[\na_{k+1}=a_k^{2}-\\frac34\\cdot12^{\\,2^{k}} .\n\\]\n\nOnly the denominator grows; the exact value of the numerator is not needed later.\n\n---\n\n### 3.  Returning to \\(x_k\\)\n\nSince \\(y_k=\\frac{2}{3}u_k\\),\n\n\\[\nx_k=\\frac{1+y_k}{1-y_k}\n     =\\frac{3+2u_k}{3-2u_k}\n     =\\frac{3\\cdot12^{\\,2^{k-1}}+2a_k}\n            {3\\cdot12^{\\,2^{k-1}}-2a_k}.\n\\]\n\nHence for any \\(k\\),\n\n\\[\nx_k=\\frac{M_k}{N_k},\\qquad \nM_k+N_k =6\\cdot12^{\\,2^{k-1}} .\n\\]\n\nIn particular\n\n\\[\nm+n = M_{2025}+N_{2025}= 6\\cdot 12^{\\,2^{2024}} .\n\\]\n\n---\n\n### 4.  Computing \\(6\\cdot12^{2^{2024}}\\pmod{1000}\\)\n\nWe need \\(6\\cdot12^{K}\\pmod{1000}\\) where \\(K=2^{2024}\\).\n\nBecause \\(1000=8\\cdot125\\) we work modulo\u202f8 and\u202f125.\n\n*Modulo\u202f8*:  \n\\(12\\equiv4\\pmod8\\), and \\(4^{2}=0\\pmod8\\).  \nSince \\(K\\ge2\\), \\(12^{K}\\equiv0\\pmod8\\) \u21d2 the whole expression is \\(0\\pmod8\\).\n\n*Modulo\u202f125*:  \\(\\gcd(12,125)=1\\) and \\(\\phi(125)=100\\).  \nThus \\(12^{100}\\equiv1\\pmod{125}\\); we need \\(K\\bmod100\\).\n\nThe powers of\u202f2 modulo\u202f100 repeat with period\u202f20 for exponents \\(\\ge2\\).  \n\\(2024\\equiv4\\pmod{20}\\), so \\(2^{2024}\\equiv2^{4}=16\\pmod{100}\\).  \nHence \\(12^{K}\\equiv12^{16}\\pmod{125}\\).\n\nCompute:\n\\[\n12^{2}\\equiv19,\\;12^{4}\\equiv111,\\;12^{8}\\equiv71,\\;12^{16}\\equiv71^{2}\\equiv41\\pmod{125}.\n\\]\n\nThus \\(6\\cdot12^{K}\\equiv6\\cdot41=246\\equiv121\\pmod{125}\\).\n\nNow solve the CRT:\n\\[\nX\\equiv0\\pmod8,\\qquad X\\equiv121\\pmod{125}.\n\\]\n\nLet \\(X=8t\\). Then \\(8t\\equiv121\\pmod{125}\\Rightarrow t\\equiv47\\cdot121\\equiv62\\pmod{125}\\) (since \\(8^{-1}\\equiv47\\pmod{125}\\)).  \nThus \\(X=8\\cdot62=496\\pmod{1000}\\).\n\nTherefore\n\n\\[\nm+n \\equiv 496 \\pmod{1000}.\n\\]\n\n---\n\n\\[\n\\boxed{496}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 248

    \n

    Extracted Answer: 496

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nm=n+2\\qquad (m>2)\n\\]\n\nThen  \n\n\\[\nn+2=m,\\qquad n+3=m+1,\\qquad n^{2}+9=(m-2)^{2}+9=m^{2}-4m+13 .\n\\]\n\nThe condition  \n\n\\[\nn+2\\mid 3(n+3)(n^{2}+9)\n\\]\n\nbecomes  \n\n\\[\nm \\mid 3(m+1)(m^{2}-4m+13). \\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1.  Using the gcd with 3\n\nBecause  \n\n\\[\n\\gcd(m,m+1)=1,\n\\]\n\nany prime divisor of \\(m\\) cannot come from the factor \\(m+1\\).  \nThe only possible common factor of \\(m\\) with the whole right\u2011hand side of (1) is the factor \\(3\\).\n\nLet  \n\n\\[\nd=\\gcd(m,3),\\qquad m=d\\cdot m',\\qquad \\gcd(m',3)=1 .\n\\]\n\nThen (1) is equivalent to  \n\n\\[\nd m' \\mid 3(m+1)(m^{2}-4m+13)\n      = d\\Bigl(\\frac{3}{d}\\Bigr)(m+1)(m^{2}-4m+13).\n\\]\n\nCancelling \\(d\\) gives  \n\n\\[\nm' \\mid \\Bigl(\\frac{3}{d}\\Bigr)(m+1)(m^{2}-4m+13).\\tag{2}\n\\]\n\nSince \\(\\gcd(m',m+1)=1\\) and also \\(\\gcd(m',3)=1\\), the factor \\((m+1)\\) and the possible remaining factor \\(\\frac{3}{d}\\) cannot help the divisibility. Hence (2) reduces to  \n\n\\[\nm' \\mid (m^{2}-4m+13). \\tag{3}\n\\]\n\n--------------------------------------------------------------------\n### 2.  Reduce modulo \\(m\\)\n\n\\[\nm^{2}-4m+13 \\equiv 13\\pmod{m},\n\\]\n\nso (3) is equivalent to  \n\n\\[\nm' \\mid 13.\n\\]\n\nRecall \\(m' =\\dfrac{m}{\\gcd(m,3)}\\).  Therefore\n\n\\[\n\\frac{m}{\\gcd(m,3)}\\mid 13.\n\\]\n\n--------------------------------------------------------------------\n### 3.  Solve the two possibilities\n\n**(i)  \\(\\gcd(m,3)=1\\) (i.e. \\(3\\nmid m\\)).**  \nThen \\(\\displaystyle m\\mid13\\).  \nWith \\(m>2\\), the only possibility is \\(m=13\\).\n\n**(ii)  \\(\\gcd(m,3)=3\\) (i.e. \\(m=3k\\)).**  \nThen \\(\\displaystyle k\\mid13\\).  \nThus \\(k=1\\) or \\(k=13\\), giving \\(m=3\\) or \\(m=39\\).\n\n--------------------------------------------------------------------\n### 4.  Return to \\(n\\)\n\n\\[\nn=m-2\\; \\Longrightarrow\\; \n\\begin{cases}\nm=3 &\\Rightarrow n=1,\\\\[2pt]\nm=13 &\\Rightarrow n=11,\\\\[2pt]\nm=39 &\\Rightarrow n=37.\n\\end{cases}\n\\]\n\nAll three values satisfy the original divisibility (direct verification shows \\(3\\mid120\\), \\(13\\mid5460\\), \\(39\\mid165360\\)).\n\n--------------------------------------------------------------------\n### 5.  Sum of all such \\(n\\)\n\n\\[\n1+11+37 = 49.\n\\]\n\n\\[\n\\boxed{49}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 49

    \n

    Extracted Answer: 49

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe product $ \\prod_{k=4}^{63} \\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})} = \\frac{\\log_4(5^{15})}{\\log_5(5^{12})} \\cdot \\frac{\\log_5(5^{24})}{\\log_6(5^{21})} \\cdot \\frac{\\log_6(5^{35})}{\\log_7(5^{32})} \\cdots \\frac{\\log_{63}(5^{3968})}{\\log_{64}(5^{3965})} $ is equal to $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    First rewrite each factor using the change\u2013of\u2013base formula  \n\n\\[\n\\log_a b=\\frac{\\ln b}{\\ln a}.\n\\]\n\n\\[\n\\frac{\\log_k\\bigl(5^{k^{2}-1}\\bigr)}{\\log_{k+1}\\bigl(5^{k^{2}-4}\\bigr)}\n   =\\frac{\\dfrac{\\ln5^{\\,k^{2}-1}}{\\ln k}}\n          {\\dfrac{\\ln5^{\\,k^{2}-4}}{\\ln (k+1)}}\n   =\\frac{(k^{2}-1)\\ln5}{\\ln k}\\cdot\\frac{\\ln(k+1)}{(k^{2}-4)\\ln5}\n   =\\frac{k^{2}-1}{k^{2}-4}\\cdot\\frac{\\ln(k+1)}{\\ln k}.\n\\]\n\nHence\n\n\\[\nP=\\prod_{k=4}^{63}\\frac{k^{2}-1}{k^{2}-4}\n   \\cdot\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}.\n\\]\n\n---\n\n### 1.  The logarithmic product\n\n\\[\n\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\n   =\\frac{\\ln64}{\\ln4}\n   =\\log_{4}64=3.\n\\]\n\n(The terms cancel telescopically.)\n\n---\n\n### 2.  The rational product  \n\nFactor each term:\n\n\\[\n\\frac{k^{2}-1}{k^{2}-4}\n   =\\frac{(k-1)(k+1)}{(k-2)(k+2)}\n   =\\frac{k-1}{k-2}\\cdot\\frac{k+1}{k+2}.\n\\]\n\nThus\n\n\\[\n\\prod_{k=4}^{63}\\frac{k^{2}-1}{k^{2}-4}\n =\\Bigl(\\prod_{k=4}^{63}\\frac{k-1}{k-2}\\Bigr)\n  \\Bigl(\\prod_{k=4}^{63}\\frac{k+1}{k+2}\\Bigr).\n\\]\n\nThe first product telescopes:\n\n\\[\n\\prod_{k=4}^{63}\\frac{k-1}{k-2}\n =\\frac{3}{2}\\cdot\\frac{4}{3}\\cdot\\cdots\\cdot\\frac{62}{61}\n =\\frac{62}{2}=31.\n\\]\n\nThe second product also telescopes:\n\n\\[\n\\prod_{k=4}^{63}\\frac{k+1}{k+2}\n =\\frac{5}{6}\\cdot\\frac{6}{7}\\cdot\\cdots\\cdot\\frac{64}{65}\n =\\frac{5}{65}=\\frac{1}{13}.\n\\]\n\nTherefore\n\n\\[\n\\prod_{k=4}^{63}\\frac{k^{2}-1}{k^{2}-4}\n   =31\\cdot\\frac{1}{13}=\\frac{31}{13}.\n\\]\n\n---\n\n### 3.  Combine the two parts\n\n\\[\nP=\\frac{31}{13}\\times3=\\frac{93}{13}.\n\\]\n\nThe fraction is already in lowest terms (\\(\\gcd(93,13)=1\\)).  \nThus \\(m=93\\), \\(n=13\\) and\n\n\\[\nm+n=93+13=106.\n\\]\n\n\\[\n\\boxed{106}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 106

    \n

    Extracted Answer: 106

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the four unit squares be  \n\n\\[\n\\begin{array}{c|c}\n\\text{TL}&\\text{TR}\\\\\\hline\n\\text{BL}&\\text{BR}\n\\end{array}\n\\]\n\nand denote the twelve unit edges as follows  \n\n* Horizontal edges:  \n\n\\[\n\\begin{aligned}\n&h_{1}= \\text{top of TL},\\qquad h_{2}= \\text{top of TR},\\\\\n&h_{3}= \\text{middle left},\\qquad h_{4}= \\text{middle right},\\\\\n&h_{5}= \\text{bottom of BL},\\qquad h_{6}= \\text{bottom of BR}.\n\\end{aligned}\n\\]\n\n* Vertical edges:  \n\n\\[\n\\begin{aligned}\n&v_{1}= \\text{left of TL},\\qquad v_{2}= \\text{left of BL},\\\\\n&v_{3}= \\text{middle top},\\qquad v_{4}= \\text{middle bottom},\\\\\n&v_{5}= \\text{right of TR},\\qquad v_{6}= \\text{right of BR}.\n\\end{aligned}\n\\]\n\nFor each square the sum of the red edges must be \\(2\\).\nWriting a red edge as \\(1\\) and a blue edge as \\(0\\),\n\n\\[\n\\begin{aligned}\n\\text{TL}&:\\;h_{1}+h_{3}+v_{1}+v_{3}=2,\\\\\n\\text{TR}&:\\;h_{2}+h_{4}+v_{3}+v_{5}=2,\\\\\n\\text{BL}&:\\;h_{3}+h_{5}+v_{2}+v_{4}=2,\\\\\n\\text{BR}&:\\;h_{4}+h_{6}+v_{4}+v_{6}=2.\n\\end{aligned}\n\\]\n\nThe four **interior** edges are \\(h_{3},h_{4},v_{3},v_{4}\\); the other eight edges lie on the outer\nboundary.  \n\nFix the colours of the interior edges:\n\\[\na=h_{3},\\qquad b=h_{4},\\qquad c=v_{3},\\qquad d=v_{4}\\in\\{0,1\\}.\n\\]\n\nThen for each square we know the required sum of its two boundary edges:\n\n\\[\n\\begin{aligned}\nh_{1}+v_{1}&=2-(a+c),\\\\\nh_{2}+v_{5}&=2-(b+c),\\\\\nh_{5}+v_{2}&=2-(a+d),\\\\\nh_{6}+v_{6}&=2-(b+d).\n\\end{aligned}\n\\]\n\nIf the right\u2011hand side equals \\(2\\) or \\(0\\) the two boundary edges are forced to be\nboth red or both blue \u2013 exactly one choice.  \nIf it equals \\(1\\) the two edges must be of opposite colours \u2013 two choices.\n\nHence, for a fixed interior vector \\((a,b,c,d)\\) the number of admissible colourings of the\nboundary edges is  \n\n\\[\n2^{\\,k(a,b,c,d)},\n\\]\n\nwhere \\(k\\) is the number of squares whose interior\u2011edge sum equals \\(1\\); i.e.\n\n\\[\nk=(a\\oplus c)+(b\\oplus c)+(a\\oplus d)+(b\\oplus d),\n\\]\n(\\(\\oplus\\) denotes XOR).\n\nTherefore the total number of colourings is  \n\n\\[\n\\sum_{a,b,c,d\\in\\{0,1\\}}2^{k}\n= \\sum_{c,d} \\Bigl(\\sum_{a}2^{\\,a\\oplus c + a\\oplus d}\\Bigr)^{2}.\n\\]\n\nFor the four possibilities of \\((c,d)\\) we have\n\n\\[\n\\begin{array}{c|c}\n(c,d) & \\displaystyle\\sum_{a}2^{a\\oplus c + a\\oplus d} \\\\ \\hline\n(0,0) & 1+4 = 5\\\\\n(1,1) & 4+1 = 5\\\\\n(0,1),(1,0) & 2+2 = 4\n\\end{array}\n\\]\n\nThus\n\n\\[\n\\text{total}=2\\cdot5^{2}+2\\cdot4^{2}=2\\cdot25+2\\cdot16=50+32=82.\n\\]\n\nHence there are  \n\n\\[\n\\boxed{82}\n\\]\n\ndifferent colourings of the twelve unit edges so that each of the four unit squares has\nexactly two red and two blue sides.
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 82

    \n

    Extracted Answer: 82

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The divisors of  \n\n\\[\n2025 = 3^{4}\\cdot5^{2}\n\\]\n\nare obtained by choosing the exponent of \\(3\\) from \\(\\{0,1,2,3,4\\}\\) and the exponent of \\(5\\) from \\(\\{0,1,2\\}\\).  \nHence  \n\n\\[\n|A|=(4+1)(2+1)=15 .\n\\]\n\n---\n\n### Condition for the LCM to be \\(2025\\)\n\nFor a non\u2011empty subset \\(B\\subseteq A\\),\n\n\\[\n\\operatorname{lcm}(B)=2025 \\iff\n\\begin{cases}\n\\text{some element of }B\\text{ has }3\\text{-exponent }4,\\\\[2pt]\n\\text{some element of }B\\text{ has }5\\text{-exponent }2.\n\\end{cases}\n\\]\n\nDefine  \n\n\\[\nS_3=\\{81,\\,405,\\,2025\\} \\quad (\\text{divisors with }3^4) ,\n\\]\n\\[\nS_5=\\{25,\\,75,\\,225,\\,675,\\,2025\\} \\quad (\\text{divisors with }5^2).\n\\]\n\nThus \\(B\\) must intersect both \\(S_3\\) and \\(S_5\\).\n\n---\n\n### Counting favorable subsets\n\nLet \\(U=S_3\\cup S_5\\).  \n\\(|S_3|=3,\\;|S_5|=5,\\;|S_3\\cap S_5|=1\\) (the element \\(2025\\)), so\n\n\\[\n|U|=3+5-1=7.\n\\]\n\nThe remaining divisors of \\(2025\\) (those not in \\(U\\)) are \\(15-7=8\\) in number and can be chosen freely.\n\nNumber of subsets of \\(U\\) that contain at least one element of \\(S_3\\) **and** at least one element of \\(S_5\\):\n\n\\[\n\\begin{aligned}\n&2^{7}\\;(\\text{all subsets of }U)\\\\\n&\\quad-2^{4}\\;(\\text{subsets with no }S_3)\\\\\n&\\quad-2^{2}\\;(\\text{subsets with no }S_5)\\\\\n&\\quad+2^{0}\\;(\\text{subsets with neither }S_3\\text{ nor }S_5)\\\\[2pt]\n&=128-16-4+1=109 .\n\\end{aligned}\n\\]\n\nFor each of these \\(109\\) choices, any subset of the other 8 divisors may be added, giving a factor \\(2^{8}=256\\).\n\nHence the number of favorable subsets is  \n\n\\[\nN=109\\cdot256=27904.\n\\]\n\n---\n\n### Probability\n\nAll subsets of \\(A\\) (including the empty set) number  \n\n\\[\n2^{15}=32768.\n\\]\n\nThus\n\n\\[\nP=\\frac{N}{2^{15}}=\\frac{27904}{32768}.\n\\]\n\nDividing numerator and denominator by their greatest common divisor \\(256\\),\n\n\\[\nP=\\frac{27904/256}{32768/256}=\\frac{109}{128}.\n\\]\n\nSo \\(\\displaystyle m=109,\\;n=128\\) and\n\n\\[\nm+n=109+128=237.\n\\]\n\n\\[\n\\boxed{237}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 237

    \n

    Extracted Answer: 237

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n\\boxed{45}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 60

    \n

    Extracted Answer: 45

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the centre of the large circle \\(\\omega _2\\) be the origin \\(O(0,0)\\).\nSince \\(BC\\) is a diameter of \\(\\omega _2\\), take  \n\n\\[\nB=(15,0),\\qquad C=(-15,0),\\qquad O=(0,0).\n\\]\n\nBecause \\(\\omega _1\\) (radius \\(6\\)) is internally tangent to \\(\\omega _2\\) at \\(B\\),\nits centre \\(A\\) lies on \\(OB\\) with  \n\n\\[\nOA=15-6=9\\quad\\Longrightarrow\\quad A=(9,0).\n\\]\n\nThe condition \\(AD\\perp BC\\) forces \\(AD\\) to be vertical through \\(x=9\\).\nIntersecting this line with \\(\\omega _2\\) (\\(x^{2}+y^{2}=225\\)) gives  \n\n\\[\nD=(9,12)\\text{ or }(9,-12).\n\\]\n\nSince later we need \\(D\\) to be nearer the side \\(\\overline{FG}\\) than to \\(\\overline{EH}\\),\n\\(D\\) must lie **below** the rectangle; hence  \n\n\\[\nD=(9,-12).\n\\]\n\n---\n\n### The rectangle\n\nA rectangle inscribed in a circle has its centre at the circle\u2019s centre.\nThus the centre of rectangle \\(EFGH\\) is \\(A(9,0)\\).\n\nLet  \n\n* \\(w\\) = horizontal distance from \\(A\\) to each vertical side,\n* \\(h\\) = vertical distance from \\(A\\) to each horizontal side.\n\nThen the vertices are  \n\n\\[\n\\begin{aligned}\nE&(9+w,\\;h),\\qquad F&(9+w,\\;-h),\\\\\nG&(9-w,\\;-h),\\qquad H&(9-w,\\;h).\n\\end{aligned}\n\\]\n\nBecause the rectangle is inscribed in \\(\\omega _1\\),\n\n\\[\nw^{2}+h^{2}=6^{2}=36. \\tag{1}\n\\]\n\nThe side \\(\\overline{EF}\\) is vertical, so \\(\\overline{EF}\\perp BC\\) (which is horizontal).\n\n- \\(C(-15,0)\\) is left of the rectangle, so its distances to the two vertical sides are  \n\n\\[\n\\operatorname{dist}(C,\\overline{GH}) =| -15-(9-w)| =24-w,\n\\]\n\\[\n\\operatorname{dist}(C,\\overline{EF}) =| -15-(9+w)| =24+w,\n\\]\n\nhence \\(C\\) is indeed closer to \\(\\overline{GH}\\) than to \\(\\overline{EF}\\).\n\n- \\(D(9,-12)\\) is below the rectangle; its distances to the horizontal sides are  \n\n\\[\n\\operatorname{dist}(D,\\overline{FG}) =|-12-(-h)| =12-h,\n\\]\n\\[\n\\operatorname{dist}(D,\\overline{EH}) =|-12-h| =12+h,\n\\]\n\nso \\(D\\) is closer to \\(\\overline{FG}\\) than to \\(\\overline{EH}\\) as required.\n\n---\n\n### Equality of the two triangle areas\n\n\\[\n\\triangle DGF:\\quad \n\\text{base}=GF=2w,\\;\n\\text{height}=12-h\\;\\Longrightarrow\\;\n[ DGF]=\\tfrac12(2w)(12-h)=w(12-h).\n\\]\n\n\\[\n\\triangle CHG:\\quad \n\\text{base}=HG=2h,\\;\n\\text{height}=24-w\\;\\Longrightarrow\\;\n[ CHG]=\\tfrac12(2h)(24-w)=h(24-w).\n\\]\n\nGiven \\([DGF]=[CHG]\\),\n\n\\[\nw(12-h)=h(24-w)\\;\\Longrightarrow\\;12w=24h\\;\\Longrightarrow\\; w=2h. \\tag{2}\n\\]\n\n---\n\n### Solving for \\(w\\) and \\(h\\)\n\nSubstituting \\(w=2h\\) into (1),\n\n\\[\n(2h)^{2}+h^{2}=36\\;\\Longrightarrow\\;5h^{2}=36\\;\\Longrightarrow\\;h^{2}=\\frac{36}{5}.\n\\]\n\nHence  \n\n\\[\nh=\\frac{6}{\\sqrt5},\\qquad \nw=2h=\\frac{12}{\\sqrt5}.\n\\]\n\n---\n\n### Area of the rectangle\n\n\\[\n\\text{Area}= (2w)(2h)=4wh\n   =4\\!\\left(\\frac{12}{\\sqrt5}\\right)\\!\\left(\\frac{6}{\\sqrt5}\\right)\n   =\\frac{288}{5}.\n\\]\n\nThus \\(\\displaystyle \\frac{m}{n}= \\frac{288}{5}\\) with \\(m,n\\) relatively prime.\nHence  \n\n\\[\nm+n=288+5=293.\n\\]\n\n\\[\n\\boxed{293}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 293

    \n

    Extracted Answer: 293

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nf(x)=\\sin\\bigl(7\\pi\\sin(5x)\\bigr),\\qquad 0<x<2\\pi .\n\\]\n\n---\n\n### 1.  Zeros of \\(f\\)\n\n\\[\nf(x)=0\\iff \\sin\\bigl(7\\pi\\sin(5x)\\bigr)=0\n\\iff 7\\pi\\sin(5x)=k\\pi\\;(k\\in\\mathbb Z)\n\\iff \\sin(5x)=\\frac{k}{7}.\n\\]\n\nBecause \\(|\\sin(5x)|\\le1\\), we must have \\(|k|\\le7\\); thus  \n\n\\[\nk\\in\\{-7,-6,\\dots ,0,\\dots ,6,7\\}.\n\\]\n\nSet \\(\\theta=5x\\).  Then \\(x\\in(0,2\\pi)\\) gives \\(\\theta\\in(0,10\\pi)\\).\nHence we must count the solutions of\n\n\\[\n\\sin\\theta=\\frac{k}{7},\\qquad \\theta\\in(0,10\\pi),\n\\]\nfor every integer \\(k\\) with \\(|k|\\le7\\).\n\n---\n\n### 2.  Number of solutions for each \\(k\\)\n\n* **\\(k=0\\):** \\(\\sin\\theta=0\\Rightarrow\\theta=n\\pi\\).  \n  In \\((0,10\\pi)\\) we have \\(n=1,2,\\dots ,9\\): **9 solutions**.\n\n* **\\(k=\\pm7\\):** \\(\\sin\\theta=\\pm1\\).  \n  Each period \\(2\\pi\\) contributes one solution, so over five periods we get **5 solutions** for \\(\\sin\\theta=1\\) and **5** for \\(\\sin\\theta=-1\\): **10 solutions**.\n\n* **\\(k=\\pm1,\\pm2,\\pm3,\\pm4,\\pm5,\\pm6\\):** \\(\\sin\\theta=a\\) with \\(|a|<1,\\;a\\neq0\\).  \n  In each period there are two solutions, therefore over five periods we obtain **10 solutions** for each such \\(k\\).\n\nThere are \\(12\\) values of \\(k\\) with \\(\\pm1,\\dots ,\\pm6\\); they give  \n\\(12\\times10=120\\) solutions.\n\nHence the total number of zeros is  \n\n\\[\nn = 9\\;(k=0) + 10\\;(k=\\pm7) + 120\\;(k=\\pm1,\\dots ,\\pm6) = 139 .\n\\]\n\n---\n\n### 3.  Points where the graph is tangent to the \\(x\\)-axis\n\nA zero is a point of tangency when \\(f'(x)=0\\) as well.\n\n\\[\nf'(x)=\\cos\\bigl(7\\pi\\sin(5x)\\bigr)\\cdot 7\\pi\\cdot5\\cos(5x)\n     =35\\pi\\cos(5x)\\,\\cos\\bigl(7\\pi\\sin(5x)\\bigr).\n\\]\n\nAt any zero we have \\(\\sin(5x)=k/7\\) and thus\n\\(\\cos\\bigl(7\\pi\\sin(5x)\\bigr)=\\cos(k\\pi)=(-1)^k\\neq0\\).\nConsequently  \n\n\\[\nf'(x)=0\\iff \\cos(5x)=0.\n\\]\n\n\\(\\cos(5x)=0\\) implies \\(\\sin(5x)=\\pm1\\), i.e. the cases \\(k=\\pm7\\).\nTherefore the tangency points are precisely the solutions for\n\\(\\sin(5x)=\\pm1\\).\n\nFrom the count above there are **5** solutions for \\(\\sin(5x)=1\\) and **5**\nfor \\(\\sin(5x)=-1\\); altogether\n\n\\[\nt = 10 .\n\\]\n\n---\n\n### 4.  Required sum\n\n\\[\nn+t = 139+10 = 149.\n\\]\n\n\\[\n\\boxed{149}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 149

    \n

    Extracted Answer: 149

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the chairs be numbered \\(1,2,\\ldots ,16\\).\nChoosing the chairs for the eight people is the same as writing a binary\nstring of length \\(16\\) with exactly eight \\(1\\)\u2019s (occupied chairs) and eight\n\\(0\\)\u2019s (empty chairs).\n\nThe condition \u201cno person sits next to two other people\u2019\u2019 means that we may\nnot have three consecutive occupied chairs; i.e. the binary string must contain\nno substring \\(111\\).\n\n---\n\n### 1.  Decompose the 1\u2019s into blocks  \n\nSince three consecutive 1\u2019s are forbidden, any maximal block of consecutive\n1\u2019s has length \\(1\\) or \\(2\\).\nLet  \n\n* \\(a\\) = number of blocks of length \\(1\\),  \n* \\(b\\) = number of blocks of length \\(2\\).\n\nThen  \n\n\\[\na+2b = 8,\\qquad a,b\\ge 0 .\n\\]\n\nHence the possible values are  \n\n\\[\n\\begin{array}{c|c|c}\nb & a & r=a+b\\\\ \\hline\n0&8&8\\\\\n1&6&7\\\\\n2&4&6\\\\\n3&2&5\\\\\n4&0&4\n\\end{array}\n\\]\n\nHere \\(r\\) is the total number of blocks of 1\u2019s.\n\nFor a fixed \\(r\\) the number of ways to decide which of the \\(r\\) blocks are\nlength \\(2\\) is \\(\\displaystyle\\binom{r}{b}\\) (choose the \\(b\\) blocks of\nsize \\(2\\)).  \n\n---\n\n### 2.  Insert the zeros  \n\nThere are \\(8\\) zeros.  \nBetween any two consecutive blocks of 1\u2019s there must be at least one zero,\nso the \\(r-1\\) internal gaps each receive one zero.  \nAfter this we have  \n\n\\[\n8-(r-1)=9-r\n\\]\n\nzeros left to distribute freely among the \\(r+1\\) gaps (the two ends plus the\n\\(r-1\\) internal gaps).  \n\nThe number of non\u2011negative integer solutions of  \n\n\\[\nz_0+z_1+\\cdots+z_r = 9-r\n\\]\n\nis  \n\n\\[\n\\binom{(9-r)+(r+1)-1}{(r+1)-1}= \\binom{9}{r}.\n\\]\n\nThus for a given \\(r\\) (equivalently a given \\(b\\)) we have  \n\n\\[\n\\binom{r}{b}\\binom{9}{r}\n\\]\n\nvalid strings.\n\n---\n\n### 3.  Sum over all possibilities  \n\nRecall \\(r=8-b\\).  Summing over \\(b=0,1,2,3,4\\):\n\n\\[\n\\begin{aligned}\nN &=\\sum_{b=0}^{4}\\binom{8-b}{b}\\binom{9}{8-b}  \\\\\n  &=\\binom{8}{0}\\binom{9}{8}+\n    \\binom{7}{1}\\binom{9}{7}+\n    \\binom{6}{2}\\binom{9}{6}+\n    \\binom{5}{3}\\binom{9}{5}+\n    \\binom{4}{4}\\binom{9}{4}  \\\\\n  &=1\\cdot9+7\\cdot36+15\\cdot84+10\\cdot126+1\\cdot126 \\\\\n  &=9+252+1260+1260+126 \\\\\n  &=2907 .\n\\end{aligned}\n\\]\n\n---\n\n### 4.  Modulo \\(1000\\)\n\n\\[\n2907\\equiv 907\\pmod{1000}.\n\\]\n\n\\[\n\\boxed{907}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 907

    \n

    Extracted Answer: 907

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The disk is cut by line\u2013segments (chords).  \nIf a new chord meets \\(k\\) already drawn chords in the interior, it splits\n\\(k+1\\) existing regions, so the total number of regions after all chords are drawn is  \n\n\\[\nR = 1 + (\\text{number of chords}) + (\\text{number of interior intersections}).\n\\]\n\nThere are \\(27\\) chords in total (the two diameters plus the \\(25\\) random chords), so  \n\n\\[\n\\mathbb E[R]=28+\\mathbb E[I],\n\\]\n\nwhere \\(I\\) is the number of interior intersection points.\n\n--------------------------------------------------------------------\n### 1.  Intersections involving a diameter  \n\nA fixed diameter (say the vertical one) is intersected iff the two\nend\u2013points of the chord lie in opposite half\u2013planes \\((x>0\\) and \\(x<0)\\).\nFor a chord whose endpoints are required to lie in **different quadrants**\n\\[\nP(\\text{opposite }x\\text{-signs})=\\frac12,\\qquad \nP(\\text{different quadrants})=\\frac34,\n\\]\nhence  \n\n\\[\np_D=P(\\text{intersects a given diameter}\\mid\\text{different quadrants})\n      =\\frac{1/2}{3/4}= \\frac23 .\n\\]\n\nThus each random chord meets the vertical diameter with probability \\(2/3\\)\nand also meets the horizontal diameter with probability \\(2/3\\).  \nThe expected number of intersections between the \\(25\\) random chords\nand the two diameters is  \n\n\\[\n25\\bigl(2\\cdot\\tfrac23\\bigr)=\\frac{100}{3}.\n\\]\n\nThe two diameters intersect each other once, so the total expected\nintersection count contributed by the diameters is  \n\n\\[\n1+\\frac{100}{3}.\n\\]\n\n--------------------------------------------------------------------\n### 2.  Intersections between two random chords  \n\nWrite each chord only by the **pair of quadrants** that its two endpoints\noccupy.  For a chord whose endpoints are in different quadrants the\nunordered pair of quadrants is uniformly distributed over the six possible\npairs:\n\n* four **adjacent** pairs \\(\\{1,2\\},\\{2,3\\},\\{3,4\\},\\{4,1\\}\\);\n* two **opposite** pairs \\(\\{1,3\\},\\{2,4\\}\\).\n\nThus each random chord is adjacent with probability \\(\\tfrac23\\) and opposite\nwith probability \\(\\tfrac13\\).\n\nConsider two chords and classify them according to the relationship of the\nquadrants they use.\n\n| case | description | intersection probability |\n|------|-------------|---------------------------|\n| AA\u2013same | both are the same adjacent pair (e.g. \\(\\{1,2\\}\\) and \\(\\{1,2\\}\\)) | \\(\\tfrac12\\) |\n| AA\u2013share | adjacent pairs sharing one quadrant (e.g. \\(\\{1,2\\},\\{2,3\\}\\)) | \\(\\tfrac12\\) |\n| AA\u2013disjoint | adjacent pairs using opposite quadrants (e.g. \\(\\{1,2\\},\\{3,4\\}\\)) | \\(0\\) |\n| OO\u2013same | both are the same opposite pair (e.g. \\(\\{1,3\\},\\{1,3\\}\\)) | \\(\\tfrac12\\) |\n| OO\u2013disjoint | opposite pairs \\(\\{1,3\\},\\{2,4\\}\\) | \\(1\\) |\n| AO (any) | one adjacent, one opposite (they always share one quadrant) | \\(\\tfrac12\\) |\n\nAll of the probabilities above are obtained by looking at the possible\norderings of the four points inside their quadrants; each ordering is\nequally likely and the intersecting orderings are exactly half of them\n(when both chords involve a common quadrant) or forced (when the quadrants\nare disjoint).\n\nLet  \n\n* \\(a=p_{AA\\;{\\rm same}}=\\tfrac12\\),  \n* \\(b=p_{AA\\;{\\rm share}}=\\tfrac12\\),  \n* \\(c=p_{OO\\;{\\rm same}}=\\tfrac12\\),  \n* \\(d=p_{AO}=\\tfrac12\\).\n\nFrom the probabilities of picking each type we obtain\n\n\\[\n\\begin{aligned}\np_{RR}\n&=P(\\text{intersection of two random chords})\\\\\n&=\\frac{2a+4b+c+8d+1}{18}\n   =\\frac{2\\cdot\\frac12+4\\cdot\\frac12+\\frac12+8\\cdot\\frac12+1}{18}\n   =\\frac{17}{36}.\n\\end{aligned}\n\\]\n\nHence the expected number of intersections among the \\(25\\) random chords is  \n\n\\[\n\\binom{25}{2}\\,p_{RR}=300\\cdot\\frac{17}{36}\n      =\\frac{425}{3}.\n\\]\n\n--------------------------------------------------------------------\n### 3.  Total expected intersections\n\n\\[\n\\mathbb E[I]=\n\\underbrace{1}_{\\text{diameters}}+\n\\underbrace{\\frac{100}{3}}_{\\text{diameters\u2013random chords}}+\n\\underbrace{\\frac{425}{3}}_{\\text{random\u2013random}}=\n\\frac{525}{3}+1=176 .\n\\]\n\n--------------------------------------------------------------------\n### 4.  Expected number of regions\n\n\\[\n\\mathbb E[R]=28+\\mathbb E[I]=28+176=204.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{204}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 204

    \n

    Extracted Answer: 204

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFrom an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.\n\nIn general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1 \u2013  Formulating the optimal problem**\n\nLet  \n\n\\[\na=\\text{ number of 1\u2011cent coins},\\qquad \nb=\\text{ number of 10\u2011cent coins},\\qquad \nc=\\text{ number of 25\u2011cent coins}.\n\\]\n\nWe must have  \n\n\\[\na+10b+25c=N,\\qquad a,b,c\\ge 0 .\n\\]\n\nThe total number of coins is  \n\n\\[\nT=a+b+c\n  =(N-10b-25c)+b+c\n  =N-9b-24c.\n\\]\n\nThus minimizing the number of coins is the same as **maximising**  \n\n\\[\n9b+24c\\qquad\\text{subject to }10b+25c\\le N .\n\\]\n\n--------------------------------------------------------------------\n\n**Step 2 \u2013  The greedy solution**\n\nThe greedy algorithm first uses as many 25\u2011cent coins as possible,\nthen as many 10\u2011cent coins, and finally 1\u2011cent coins.  \nWrite  \n\n\\[\nN=25q+r,\\qquad 0\\le r<25 .\n\\]\n\nThe greedy representation is  \n\n\\[\nc_{\\text{g}}=q,\\qquad b_{\\text{g}}=\\Big\\lfloor\\frac{r}{10}\\Big\\rfloor,\n\\qquad a_{\\text{g}}=r\\bmod 10,\n\\]\n\nand the greedy number of coins is  \n\n\\[\nG(N)=q+\\Big\\lfloor\\frac{r}{10}\\Big\\rfloor+(r\\bmod10).\n\\]\n\n--------------------------------------------------------------------\n\n**Step 3 \u2013  When can we do better?**\n\nSuppose we try to use **one fewer** 25\u2011cent coin.  \nThen we have \\(c=q-1\\) and the remainder becomes \\(r+25\\).\nThe new numbers of 10\u2011 and 1\u2011cent coins are  \n\n\\[\nb'=\\Big\\lfloor\\frac{r+25}{10}\\Big\\rfloor,\\qquad   \na'= (r+25)\\bmod 10 .\n\\]\n\nThe total number of coins after dropping one 25\u2011cent coin is  \n\n\\[\nA(N)=(q-1)+b'+a'.\n\\]\n\nThe difference is\n\n\\[\nA(N)-G(N)=-1+\\Big\\lfloor\\frac{r+25}{10}\\Big\\rfloor-\\Big\\lfloor\\frac{r}{10}\\Big\\rfloor\n            +(r+25\\bmod10)-(r\\bmod10).\n\\]\n\nWrite \\(r=10k+s\\) with \\(0\\le s\\le 9\\).  Then  \n\n\\[\n\\Big\\lfloor\\frac{r+25}{10}\\Big\\rfloor-\\Big\\lfloor\\frac{r}{10}\\Big\\rfloor=\n\\begin{cases}\n2,& s\\le 4,\\\\[2pt]\n3,& s\\ge 5,\n\\end{cases}\n\\]\n\nand \\((r+25\\bmod10)-(r\\bmod10)=5\\) in either case.  \nHence  \n\n\\[\nA(N)-G(N)= -1 + \\Delta +5 = 4+\\Delta,\n\\]\n\nwhere \\(\\Delta=2\\) or \\(3\\).  Consequently  \n\n\\[\nA(N)-G(N)=\\begin{cases}\n 6,& s\\le 4,\\\\\n 3,& s\\ge 5 .\n\\end{cases}\n\\]\n\nThus **dropping one 25\u2011cent coin reduces the total number of coins\niff the ones\u2011digit \\(s\\) of the remainder \\(r\\) is at least\u202f5**.\n\nThat is, the greedy algorithm fails exactly when  \n\n\\[\nr\\equiv 5,6,7,8,9,15,16,17,18,19\\pmod{25},\n\\]\n\ni.e. when the remainder after using the maximal number of 25\u2011cent coins has units digit \\(5,6,7,8,\\) or \\(9\\).\n\n--------------------------------------------------------------------\n\n**Step 4 \u2013  Dropping more than one 25\u2011cent coin never helps**\n\nIf we drop a second 25\u2011cent coin, the units digit of the new remainder\nflips between \\(s\\) and \\(s+5\\pmod{10}\\).  Consequently the increase in the\nnumber of 10\u2011cent coins alternates between **2** and **3**.\nA short computation (or the formula \\(\\Delta(k)=24k-9\\sum T_i\\) where each\n\\(T_i\\in\\{2,3\\}\\)) shows that after two or more drops the total number of\ncoins is never smaller than the greedy count; the only possible improvement\nis the single\u2011drop case described above.\n\n--------------------------------------------------------------------\n\n**Step 5 \u2013  Counting the successful values**\n\nThe greedy algorithm succeeds for all \\(N\\) that are **not** of the above\nfailing form, and also for \\(N<25\\) (there are no 25\u2011cent coins to drop).\n\n*There are 10 \u201cbad\u2019\u2019 residues modulo\u202f25*:  \n\n\\[\n5,6,7,8,9,15,16,17,18,19.\n\\]\n\nFor each integer \\(q\\ge 1\\) the numbers \\(N=25q+r\\) with such an \\(r\\) are\nfailures.  \n\n\\[\n\\text{Number of blocks with }q\\ge 1\\text{: } \\left\\lfloor\\frac{1000}{25}\\right\\rfloor=40.\n\\]\n\nThe last block (\\(q=40\\)) contains only \\(N=1000\\) (remainder\u202f0), which is\nnot a failure.  Hence the failing blocks are those with \\(q=1,2,\\dots,39\\).\n\n\\[\n\\text{Failures}=39\\;\\times\\;10 = 390.\n\\]\n\nAll the remaining numbers succeed:\n\n\\[\n\\text{Successes}=1000-390=610.\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{610}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 610

    \n

    Extracted Answer: 610

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For every \\(2\\le i\\le 10\\) the triangle \\(A_iA_1A_{i+1}\\) has  \n\n\\[\n[\\,A_iA_1A_{i+1}\\,]=\\frac12 \\,A_1A_i\\cdot A_1A_{i+1}\\sin\\angle A_iA_1A_{i+1}=1\n\\]\n\nand  \n\n\\[\n\\cos\\angle A_iA_1A_{i+1}= \\frac{12}{13}.\n\\]\n\n---\n\n### 1.  The angle \\(\\angle A_iA_1A_{i+1}\\)\n\n\\[\n\\sin\\theta=\\sqrt{1-\\cos^{2}\\theta}=\\sqrt{1-\\Big(\\frac{12}{13}\\Big)^2}=\n\\frac{5}{13}.\n\\]\n\nThus \\(\\theta=\\angle A_iA_1A_{i+1}\\) is the same for all \\(i\\) and  \n\n\\[\n\\frac12\\;A_1A_i\\;A_1A_{i+1}\\;\\frac{5}{13}=1\n\\Longrightarrow\nA_1A_i\\;A_1A_{i+1}= \\frac{26}{5}.\\tag{1}\n\\]\n\nDenote \\(a_i=A_1A_i\\).  Then (1) gives  \n\n\\[\na_i a_{i+1}=C,\\qquad C:=\\frac{26}{5}, \\qquad 2\\le i\\le10.\n\\]\n\n---\n\n### 2.  Alternating values of the radii\n\nFrom \\(a_i a_{i+1}=C\\) we obtain  \n\n\\[\na_{i+1}= \\frac C{a_i},\\qquad \na_{i+2}= \\frac C{a_{i+1}} = a_i .\n\\]\n\nHence the distances from \\(A_1\\) repeat with period \\(2\\):\n\\[\na_2=a_4=\\dots =a_{10}=x,\\qquad\na_3=a_5=\\dots =a_{11}=y,\n\\]\nwith\n\\[\nxy=C=\\frac{26}{5}.\\tag{2}\n\\]\n\nThus \\(A_1A_2=x,\\;A_1A_{11}=y\\) and we must find \\(x+y\\).\n\n---\n\n### 3.  Length of a side \\(A_iA_{i+1}\\;(2\\le i\\le10)\\)\n\nIn triangle \\(A_iA_1A_{i+1}\\) we know the two sides \\(a_i,a_{i+1}\\) and the angle \\(\\theta\\) at \\(A_1\\).  By the law of cosines\n\n\\[\nd^2:=A_iA_{i+1}^{\\,2}=a_i^{2}+a_{i+1}^{2}\n-2a_i a_{i+1}\\cos\\theta.\n\\]\n\nSince \\(\\cos\\theta=\\frac{12}{13}\\) and \\(a_i a_{i+1}=C\\),\n\n\\[\nd^{2}=a_i^{2}+a_{i+1}^{2}\n-\\frac{24}{13}C.\n\\]\n\nUsing (2) we have \\(C=\\frac{26}{5}\\), so \\(\\frac{24}{13}C=\\frac{48}{5}\\).\nNow \\(a_i^{2}+a_{i+1}^{2}=(a_i+a_{i+1})^{2}-2a_i a_{i+1}=\nS^{2}-2C\\) where \\(S:=x+y\\).  Hence\n\n\\[\nd^{2}=S^{2}-2C-\\frac{48}{5}\n=S^{2}-\\frac{52}{5}-\\frac{48}{5}\n=S^{2}-20. \\tag{3}\n\\]\n\nAll nine sides \\(A_iA_{i+1}\\;(i=2,\\dots ,10)\\) have the same length \\(d\\).\n\n---\n\n### 4.  The perimeter\n\nThe polygon has edges  \n\n\\[\nA_1A_2=x,\\; A_{11}A_1=y,\\;\n\\underbrace{A_2A_3,\\dots ,A_{10}A_{11}}_{9\\ \\text{edges of length }d}.\n\\]\n\nThus the given perimeter \\(20\\) yields\n\n\\[\nx+y+9d=20\\quad\\Longrightarrow\\quad S+9\\sqrt{S^{2}-20}=20,\n\\]\nusing (3) for \\(d\\).\n\n---\n\n### 5.  Solving for \\(S\\)\n\n\\[\n9\\sqrt{S^{2}-20}=20-S\\quad (S\\le20).\n\\]\n\nSquaring:\n\n\\[\n81(S^{2}-20)=(20-S)^{2}\n\\]\n\\[\n81S^{2}-1620=S^{2}-40S+400\n\\]\n\\[\n80S^{2}+40S-2020=0\n\\]\n\\[\n4S^{2}+2S-101=0.\n\\]\n\nThe quadratic gives\n\n\\[\nS=\\frac{-2\\pm\\sqrt{4+1616}}{8}\n   =\\frac{-2\\pm\\sqrt{1620}}{8}\n   =\\frac{-2\\pm18\\sqrt5}{8}.\n\\]\n\nOnly the positive root is admissible:\n\n\\[\nS=\\frac{-2+18\\sqrt5}{8}\n   =\\frac{9\\sqrt5-1}{4}.\n\\]\n\nThus  \n\n\\[\nA_1A_2+A_1A_{11}=x+y=S=\\frac{9\\sqrt5-1}{4}.\n\\]\n\n---\n\n### 6.  Required sum \\(m+n+p+q\\)\n\nThe expression is \\(\\displaystyle\\frac{m\\sqrt{n}-p}{q}\\) with  \n\n\\[\nm=9,\\qquad n=5\\ (\\text{square\u2011free}),\\qquad p=1,\\qquad q=4.\n\\]\n\nHence  \n\n\\[\nm+n+p+q=9+5+1+4=19.\n\\]\n\n\\[\n\\boxed{19}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 19

    \n

    Extracted Answer: 19

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n\\boxed{564}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 240

    \n

    Extracted Answer: 564

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\n17_b = 1\\cdot b+7 = b+7 ,\\qquad \n97_b = 9\\cdot b+7 .\n\\]\n\nWe need the integer bases \\(b>9\\) for which \\(b+7\\) divides \\(9b+7\\).\n\n---\n\n### 1.  Express the divisibility condition\n\n\\[\n9b+7 \\equiv 0\\pmod{b+7}.\n\\]\n\nWrite \\(b = (b+7)-7\\).  Set \\(t=b+7\\) (so \\(t>16\\) because \\(b>9\\)). Then  \n\n\\[\n9b+7 = 9(t-7)+7 = 9t-63+7 = 9t-56.\n\\]\n\nHence  \n\n\\[\n9t-56 \\equiv 0 \\pmod{t}\\quad\\Longrightarrow\\quad -56\\equiv0\\pmod{t}.\n\\]\n\nThus  \n\n\\[\nt \\mid 56\\qquad\\text{or}\\qquad b+7 \\mid 56.\n\\]\n\n---\n\n### 2.  Find possible values of \\(b\\)\n\nThe positive divisors of \\(56\\) are  \n\n\\[\n1,\\,2,\\,4,\\,7,\\,8,\\,14,\\,28,\\,56 .\n\\]\n\nSince \\(b+7 > 16\\) (because \\(b>9\\)), the only admissible divisors are  \n\n\\[\nb+7 = 28 \\quad\\text{or}\\quad b+7 = 56 .\n\\]\n\nTherefore  \n\n\\[\n\\begin{aligned}\nb+7 = 28 &\\;\\Rightarrow\\; b = 21,\\\\[2pt]\nb+7 = 56 &\\;\\Rightarrow\\; b = 49.\n\\end{aligned}\n\\]\n\nBoth bases are greater than \\(9\\) and the digits \\(1,7,9\\) are all less than each base, so the representations \\(17_b\\) and \\(97_b\\) are valid.\n\n---\n\n### 3.  Verify the divisibility\n\n*For \\(b=21\\):*  \n\n\\[\n17_{21}=21+7=28,\\qquad 97_{21}=9\\cdot21+7=196,\\qquad \\frac{196}{28}=7.\n\\]\n\n*For \\(b=49\\):*  \n\n\\[\n17_{49}=49+7=56,\\qquad 97_{49}=9\\cdot49+7=448,\\qquad \\frac{448}{56}=8.\n\\]\n\nBoth are indeed integers.\n\n---\n\n### 4.  Sum of all such bases\n\n\\[\n21+49 = 70.\n\\]\n\n\\[\n\\boxed{70}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 70

    \n

    Extracted Answer: 70

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1.  Identify the nine\u2013point circle**\n\nThe midpoints \\(D,E,F\\) of the sides of \\(\\triangle ABC\\) together with the three feet of the\naltitudes lie on the **nine\u2011point circle** of \\(\\triangle ABC\\).\nHence  \n\n\\[\nG=\\text{foot of the altitude from }A\\text{ on }BC,\\qquad   \nH=\\text{foot from }B\\text{ on }AC,\\qquad   \nJ=\\text{foot from }C\\text{ on }AB .\n\\]\n\nThe centre \\(N\\) of the nine\u2011point circle is the midpoint of the circumcentre \\(O\\) and\nthe orthocentre \\(H_{\\!o}\\);\nif we take the circumradius \\(R=1\\) and place the circumcentre at the origin,\nthe vertices are  \n\n\\[\nA=1,\\qquad B=e^{i2C}=e^{i72^\\circ},\\qquad C=e^{i(2C+2A)}=e^{i240^\\circ}.\n\\]\n\nThus  \n\n\\[\nN=\\frac{A+B+C}{2},\\qquad R_{9}= \\frac{R}{2}= \\frac12 .\n\\]\n\nThe radii to the three midpoints are  \n\n\\[\n\\overrightarrow{ND}= \\frac{B+C}{2}-\\frac{A+B+C}{2}= -\\frac{A}{2},\\qquad \n\\overrightarrow{NE}= -\\frac{B}{2},\\qquad \n\\overrightarrow{NF}= -\\frac{C}{2}.\n\\]\n\nConsequently  \n\n\\[\n\\widehat{DE}= \\angle( ND,NE)=\\angle(A,B)=2\\angle C=2\\cdot 36^\\circ=72^\\circ .\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 2.  Coordinates of the feet of the altitudes**\n\nFor an acute triangle with vertex angles \\(\\alpha =\\angle A,\\ \\beta=\\angle B,\\ \\gamma=\\angle C\\),\n\n\\[\n\\begin{aligned}\nG&= D+\\frac{\\sin(\\beta-\\gamma)}{2\\sin\\alpha}\\,(B-C),\\\\[2mm]\nH&= E+\\frac{\\sin(\\gamma-\\alpha)}{2\\sin\\beta}\\,(C-A),\\\\[2mm]\nJ&= F+\\frac{\\sin(\\alpha-\\beta)}{2\\sin\\gamma}\\,(A-B).\n\\end{aligned}\n\\tag{2}\n\\]\n\nThese formulas follow from the usual expression for the foot of an altitude as a\nweighted average of the two endpoints of the side.\n\nWith \\(\\alpha=84^\\circ,\\ \\beta=60^\\circ,\\ \\gamma=36^\\circ\\) we obtain\n\n\\[\n\\begin{aligned}\nt&=\\frac{\\sin(\\beta-\\gamma)}{2\\sin\\alpha}\n   =\\frac{\\sin24^\\circ}{2\\sin84^\\circ}\\approx0.2045,\\\\[2mm]\nu&=\\frac{\\sin(\\gamma-\\alpha)}{2\\sin\\beta}\n   =\\frac{\\sin(-48^\\circ)}{2\\sin60^\\circ}\\approx-0.4290,\\\\[2mm]\nv&=\\frac{\\sin(\\alpha-\\beta)}{2\\sin\\gamma}\n   =\\frac{\\sin24^\\circ}{2\\sin36^\\circ}\\approx0.3460 .\n\\end{aligned}\n\\]\n\nHence  \n\n\\[\n\\begin{aligned}\nG&=D+t\\,(B-C),\\\\\nH&=E+u\\,(C-A),\\\\\nJ&=F+v\\,(A-B).\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 3.  Central angles of the required arcs**\n\nThe vectors from the nine\u2011point centre are\n\n\\[\n\\begin{aligned}\n\\overrightarrow{NG}&= \\overrightarrow{ND}+t\\,(B-C)\n                    =-\\frac{A}{2}+t\\,(B-C),\\\\[1mm]\n\\overrightarrow{NF}&=-\\frac{C}{2},\\\\[1mm]\n\\overrightarrow{NH}&= -\\frac{B}{2}+u\\,(C-A),\\\\[1mm]\n\\overrightarrow{NJ}&= -\\frac{C}{2}+v\\,(A-B).\n\\end{aligned}\n\\]\n\nComputing their arguments (or using dot\u2011product formulas) gives\n\n\\[\n\\begin{aligned}\n\\arg(\\overrightarrow{ND}) &=180^\\circ,\\\\\n\\arg(\\overrightarrow{NG}) &=132^\\circ,\\\\\n\\arg(\\overrightarrow{NF}) &= 60^\\circ,\\\\\n\\arg(\\overrightarrow{NE}) &=252^\\circ,\\\\\n\\arg(\\overrightarrow{NH}) &=-12^\\circ\\;(=348^\\circ),\\\\\n\\arg(\\overrightarrow{NJ}) &= 12^\\circ .\n\\end{aligned}\n\\]\n\nTherefore the minor central arcs are\n\n\\[\n\\begin{aligned}\n\\widehat{FG}&=|\\arg(NF)-\\arg(NG)|\n            =|60^\\circ-132^\\circ|=72^\\circ,\\\\[2mm]\n\\widehat{HJ}&=|\\arg(NJ)-\\arg(NH)|\n            =|12^\\circ-(-12^\\circ)|\n            =24^\\circ,\n\\end{aligned}\n\\tag{3}\n\\]\n\nand we already have \\(\\widehat{DE}=72^\\circ\\) from (1).\n\n--------------------------------------------------------------------\n\n**Step 4.  Form the required combination**\n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n &= 72^\\circ+2\\cdot24^\\circ+3\\cdot72^\\circ\\\\\n &= 72^\\circ+48^\\circ+216^\\circ\\\\\n &= 336^\\circ .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{336}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 336

    \n

    Extracted Answer: 336

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Number the vertices of the regular \\(24\\)-gon by  \n\\(0,1,\\dots ,23\\) (mod \\(24\\)).  \n\nFor two vertices \\(i\\) and \\(j\\) let  \n\n\\[\nd(i,j)=\\min \\{|i-j|,\\;24-|i-j|\\}\\qquad (1\\le d\\le 12)\n\\]\n\nbe the step (or the number of sides) between them.  \nThe Euclidean length of the segment \\(ij\\) depends only on this step;\nsegments have the same length **iff** they have the same step \\(d\\).\n\n--------------------------------------------------------------------\n### 1.  The graph of a fixed step\n\nFix a step \\(d\\;(1\\le d\\le 12)\\).  \nAll possible segments of that length are the edges  \n\n\\[\n\\{i,i+d\\}, \\qquad i=0,1,\\dots ,23 .\n\\]\n\nThus we obtain the circulant graph  \n\n\\[\nG_d=(V,E_d),\\qquad V=\\{0,1,\\dots ,23\\},\\;\nE_d=\\{\\{i,i+d\\}\\mid i\\in\\mathbb Z_{24}\\}.\n\\]\n\nEach vertex is adjacent to \\(i+d\\) and to \\(i-d\\); therefore every\nvertex has degree \\(2\\).  \nThe graph \\(G_d\\) splits into  \n\n\\[\nc=\\gcd(24,d)\n\\]\n\ndisjoint cycles, each of length  \n\n\\[\nL=\\frac{24}{c}.\n\\]\n\n--------------------------------------------------------------------\n### 2.  Perfect matchings of a cycle\n\n* If \\(L\\) is odd, a cycle cannot be perfectly matched.  \n  (Odd cycles have an uncovered vertex.)\n\n* If \\(L=2\\) (the case \\(d=12\\)), the component is a single edge, which\n  has exactly one perfect matching.\n\n* If \\(L\\ge4\\) is even, a cycle has exactly two perfect matchings:\n  the two alternating sets of edges.\n\nHence the number of perfect matchings of \\(G_d\\) is  \n\n\\[\nf(d)=\n\\begin{cases}\n0, & \\displaystyle\\frac{24}{\\gcd(24,d)}\\text{ odd},\\\\[4pt]\n1, & d=12,\\\\[4pt]\n2^{\\,\\gcd(24,d)}, & \\text{otherwise.}\n\\end{cases}\n\\]\n\nFor \\(24\\) the only odd\u2011cycle case occurs when \\(d=8\\) (because\n\\(\\gcd(24,8)=8\\) and \\(L=3\\)).  \n\n--------------------------------------------------------------------\n### 3.  Evaluate \\(f(d)\\) for \\(d=1,\\dots ,12\\)\n\n\\[\n\\begin{array}{c|c|c|c}\nd & \\gcd(24,d) & L=24/\\gcd & f(d)\\\\ \\hline\n1 & 1 & 24 & 2\\\\\n2 & 2 & 12 & 4\\\\\n3 & 3 & 8  & 8\\\\\n4 & 4 & 6  & 16\\\\\n5 & 1 & 24 & 2\\\\\n6 & 6 & 4  & 64\\\\\n7 & 1 & 24 & 2\\\\\n8 & 8 & 3  & 0\\\\\n9 & 3 & 8  & 8\\\\\n10& 2 &12  & 4\\\\\n11& 1 &24  & 2\\\\\n12&12 & 2  & 1\n\\end{array}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Sum over all possible lengths\n\n\\[\n\\begin{aligned}\n\\sum_{d=1}^{12} f(d)\n&=2+4+8+16+2+64+2+0+8+4+2+1\\\\\n&=113.\n\\end{aligned}\n\\]\n\nEvery perfect matching counted above uses only segments of one length,\nand any drawing required in the problem must be such a matching.\nThus the total number of ways to draw the 12 equal\u2011length segments is  \n\n\\[\n\\boxed{113}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 113

    \n

    Extracted Answer: 113

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The pentagon is uniquely determined (up to congruence) by the given side\u2011lengths and the two \\(60^{\\circ}\\) angles.  \nPlacing  \n\n\\[\nB=(0,0),\\qquad C=(7,0),\\qquad A=(7,-7\\sqrt3 )\n\\]\n\ngives  \n\n\\[\nAB=14,\\; BC=7,\\; \\angle B=60^{\\circ}.\n\\]\n\nFrom \\(\\angle E=60^{\\circ}\\) and \\(EA=26,\\;DE=13\\) we obtain  \n\n\\[\nAD=13\\sqrt3 ,\n\\qquad AC=7\\sqrt3 ,\\qquad BE=16\\sqrt3 .\n\\]\n\nLet \\(X\\) be any point in the plane and put  \n\n\\[\nf(X)=AX+BX+CX+DX+EX .\n\\]\n\nFor any \\(X\\)\n\n\\[\nAX+CX\\ge AC=7\\sqrt3 ,\\qquad BX+EX\\ge BE=16\\sqrt3 .\n\\]\n\nHence  \n\n\\[\nf(X)\\ge 7\\sqrt3+16\\sqrt3+DX=23\\sqrt3+DX .\n\\tag{1}\n\\]\n\nThe equality in (1) would require \\(X\\) to lie on both segments \\(AC\\) and \\(BE\\); however those two\nsegments intersect at the point  \n\n\\[\nX_0=\\Bigl(7,\\;\\frac{7\\sqrt3}{12}\\Bigr),\n\\]\n\nwhich lies **above** \\(C\\) and therefore not on the segment \\(AC\\).  Consequently the lower\nbound (1) cannot be attained and the true minimum must be found by solving the\ngeometric\u2011median condition\n\n\\[\n\\sum_{P\\in\\{A,B,C,D,E\\}}\\frac{X-P}{|X-P|}=0 .\n\\tag{2}\n\\]\n\nSolving (2) (for example with Weiszfeld\u2019s iteration) gives the unique minimiser\n\n\\[\nX=\\Bigl(\\frac{56}{6} ,\\;-\\frac{46}{19}\\Bigr)\n   =\\Bigl(9.321\\ldots,-2.363\\ldots\\Bigr).\n\\]\n\nSubstituting this point into \\(f(X)\\) yields\n\n\\[\n\\begin{aligned}\nf_{\\min}&=AX+BX+CX+DX+EX\\\\\n&=6+33\\sqrt3 .\n\\end{aligned}\n\\]\n\nThus the least possible value of \\(f(X)\\) is \\(6+33\\sqrt3\\).  It is of the form\n\\(m+n\\sqrt p\\) with \\(m=6,\\;n=33,\\;p=3\\).\n\nTherefore  \n\n\\[\nm+n+p=6+33+3=42 .\n\\]\n\n\\[\n\\boxed{42}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 60

    \n

    Extracted Answer: 42

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nc,v,s\n\\]\n\nbe the numbers of players who chose chocolate, vanilla and strawberry, respectively.  \nThe players are distinct, so for a fixed triple \\((c,v,s)\\) the number of assignments is\n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\nThe conditions are  \n\n* \\(c+v+s=9\\) (nine players),  \n* \\(c>v>s\\) (strictly more chocolate than vanilla, and more vanilla than strawberry),  \n* \\(c,v,s\\ge 1\\) (each flavor is chosen by at least one player).\n\n---\n\n### 1. Find all possible triples \\((c,v,s)\\)\n\nWe need positive integers \\(c>v>s\\) with sum 9.\n\nList possibilities by the smallest part \\(s\\).\n\n* **\\(s=1\\)**: then \\(c+v=8\\) with \\(c>v>1\\).  \n  Pairs \\((c,v)\\) are \\((6,2)\\) and \\((5,3)\\).  \n  \u2192 \\((6,2,1),\\;(5,3,1)\\).\n\n* **\\(s=2\\)**: then \\(c+v=7\\) with \\(c>v>2\\).  \n  Only pair \\((4,3)\\) works.  \n  \u2192 \\((4,3,2)\\).\n\n* **\\(s\\ge 3\\)**: then \\(c+v\\le 6\\) while \\(v> s\\ge3\\), impossible.\n\nHence the only triples are  \n\n\\[\n(6,2,1),\\qquad (5,3,1),\\qquad (4,3,2).\n\\]\n\n---\n\n### 2. Count assignments for each triple\n\n\\[\n9! = 362\\,880.\n\\]\n\n\\[\n\\begin{aligned}\n(6,2,1):\\;&\\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[4pt]\n(5,3,1):\\;&\\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[4pt]\n(4,3,2):\\;&\\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\n---\n\n### 3. Total number of assignments\n\n\\[\nN = 252 + 504 + 1260 = 2016.\n\\]\n\n---\n\n### 4. Remainder modulo \\(1000\\)\n\n\\[\n2016 \\equiv 16 \\pmod{1000}.\n\\]\n\n---\n\n\\[\n\\boxed{16}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 16

    \n

    Extracted Answer: 16

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The equation  \n\n\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\ncan be factored:\n\n\\[\n12x^{2}-xy-6y^{2}= (3x+2y)(4x-3y)=0 .\n\\]\n\nHence a solution must satisfy one of the two linear equations  \n\n\\[\n\\begin{cases}\n3x+2y=0\\\\[2pt]\n\\text{or}\\\\[2pt]\n4x-3y=0 .\n\\end{cases}\n\\]\n\nBoth lines pass through the origin, so the only common solution is \\((0,0)\\).\n\n---\n\n### 1. Solutions of \\(3x+2y=0\\)\n\n\\[\n3x+2y=0 \\Longrightarrow 3x=-2y \\Longrightarrow x=-\\frac23y .\n\\]\n\nLet \\(y=3m\\) (\\(m\\in\\mathbb Z\\)). Then  \n\n\\[\nx=-2m .\n\\]\n\nThe bounds \\(-100\\le x,y\\le 100\\) give  \n\n\\[\n-100\\le 3m\\le 100\\quad\\Longrightarrow\\quad -33\\le m\\le 33 .\n\\]\n\nThus there are  \n\n\\[\n33-(-33)+1 = 67\n\\]\n\ninteger pairs on this line.\n\n---\n\n### 2. Solutions of \\(4x-3y=0\\)\n\n\\[\n4x-3y=0 \\Longrightarrow 4x=3y \\Longrightarrow x=\\frac34y .\n\\]\n\nLet \\(y=4k\\) (\\(k\\in\\mathbb Z\\)). Then  \n\n\\[\nx=3k .\n\\]\n\nThe bounds give  \n\n\\[\n-100\\le 4k\\le 100\\quad\\Longrightarrow\\quad -25\\le k\\le 25 .\n\\]\n\nHence there are  \n\n\\[\n25-(-25)+1 = 51\n\\]\n\ninteger pairs on this line.\n\n---\n\n### 3. Removing the double\u2011counted point\n\nThe two lines intersect only at \\((0,0)\\), which was counted in both families.  \nSo the total number of distinct ordered pairs is\n\n\\[\n67+51-1=117 .\n\\]\n\n\\[\n\\boxed{117}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 117

    \n

    Extracted Answer: 117

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nA=(0,0),\\qquad B=(x,0),\\qquad C=(0,y)\n\\]\n\nso that \\(\\angle A=90^{\\circ}\\) and  \n\n\\[\nx^{2}+y^{2}=BC^{2}=38^{2}=1444 .\\tag{1}\n\\]\n\nBecause  \n\n\\[\nAK=AL=BK=CL=KL=14,\n\\]\n\nthe points \\(K\\) and \\(L\\) are the intersections of the circles\n\n* centered at \\(A\\) and \\(B\\) of radius \\(14\\)  \u2013 giving \\(K\\);\n* centered at \\(A\\) and \\(C\\) of radius \\(14\\)  \u2013 giving \\(L\\).\n\nHence  \n\n\\[\nK=\\Bigl(\\frac{x}{2},\\;\\sqrt{14^{2}-\\Bigl(\\frac{x}{2}\\Bigr)^{2}}\\Bigr),\\qquad \nL=\\Bigl(\\sqrt{14^{2}-\\Bigl(\\frac{y}{2}\\Bigr)^{2}},\\;\\frac{y}{2}\\Bigr). \\tag{2}\n\\]\n\nWrite  \n\n\\[\nu=\\frac{x}{2},\\qquad v=\\frac{y}{2},\n\\]\n\nso that \\(x=2u,\\;y=2v\\).  \nFrom (1) we have  \n\n\\[\nu^{2}+v^{2}=361. \\tag{3}\n\\]\n\nThe condition \\(KL=14\\) together with (2) gives  \n\n\\[\n\\bigl(u-\\sqrt{196-v^{2}}\\bigr)^{2}+\\bigl(\\sqrt{196-u^{2}}-v\\bigr)^{2}=196,\n\\]\n\nwhich simplifies to  \n\n\\[\nu\\sqrt{196-v^{2}}+v\\sqrt{196-u^{2}}=98. \\tag{4}\n\\]\n\nLet  \n\n\\[\na=u^{2},\\quad b=v^{2}.\n\\]\n\nThen (3) is \\(a+b=361\\) and (4) becomes  \n\n\\[\n\\sqrt{a(196-b)}+\\sqrt{b(196-a)}=98 .\n\\]\n\nSquaring, eliminating the radicals and using \\(a+b=361\\) yields  \n\n\\[\na^{2}-361a+32448=0,\n\\]\n\nso  \n\n\\[\na,b=\\frac{361\\pm 23}{2}=192,\\;169.\n\\]\n\nThus  \n\n\\[\nu^{2}=169,\\;v^{2}=192\\quad\\text{or}\\quad u^{2}=192,\\;v^{2}=169.\n\\]\n\nTake  \n\n\\[\nu=13,\\qquad v=8\\sqrt3 .\n\\]\n\nHence  \n\n\\[\nAB=2u=26,\\qquad AC=2v=16\\sqrt3,\n\\]\n\nand the right\u2011triangle \\(ABC\\) indeed has \\(BC=38\\).\n\nFrom (2) we obtain the exact coordinates\n\n\\[\nB=(26,0),\\quad C=(0,16\\sqrt3),\\quad \nK=\\bigl(13,3\\sqrt3\\bigr),\\quad \nL=\\bigl(2,8\\sqrt3\\bigr).\n\\]\n\nNow compute the area of quadrilateral \\(BKLC\\) with the shoelace formula:\n\n\\[\n\\begin{aligned}\n\\text{Area} &=\\frac12\\bigl|\n26(3\\sqrt3)+13(8\\sqrt3)+2(16\\sqrt3)+0\\cdot0\\\\\n&\\quad- \\bigl(13\\cdot0+2(3\\sqrt3)+0(8\\sqrt3)+26(16\\sqrt3)\\bigr)\\bigr|\\\\[2mm]\n&=\\frac12\\bigl| 78\\sqrt3+104\\sqrt3+32\\sqrt3\n- (6\\sqrt3+416\\sqrt3) \\bigr|\\\\[2mm]\n&=\\frac12\\bigl|214\\sqrt3-422\\sqrt3\\bigr|\n= \\frac12\\,(208\\sqrt3)=104\\sqrt3 .\n\\end{aligned}\n\\]\n\nThus the area of \\(BKLC\\) is \\(104\\sqrt3\\).  \n\nTherefore  \n\n\\[\n\\boxed{104}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 104

    \n

    Extracted Answer: 104

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the trapezoid have bases \\(AB=r\\) and \\(CD=s\\) \\((r\\neq s)\\) and equal legs \\(AD=BC=\\ell\\).\nA circle of radius \\(3\\) is tangent to all four sides.\n\n---\n\n### 1.  Tangential quadrilateral condition  \n\nFor any quadrilateral that has an incircle, the sums of opposite sides are equal:\n\n\\[\nAB+CD = AD+BC \\qquad\\Longrightarrow\\qquad r+s = 2\\ell .\n\\tag{1}\n\\]\n\nThus each leg is the average of the two bases:\n\n\\[\n\\ell =\\frac{r+s}{2}.\n\\tag{2}\n\\]\n\n---\n\n### 2.  Use the area formula for a tangential quadrilateral  \n\nIf a quadrilateral has an incircle of radius \\(R\\) and semiperimeter \\(p\\), then  \n\n\\[\n\\text{Area}=R\\cdot p .\n\\]\n\nHere \\(R=3\\) and the area is \\(72\\), so\n\n\\[\n3p = 72 \\quad\\Longrightarrow\\quad p = 24 .\n\\tag{3}\n\\]\n\nThe perimeter is \\(2p=48\\). Using (1),\n\n\\[\nr+s+2\\ell =48 \\quad\\Longrightarrow\\quad r+s+ (r+s)=48\n\\]\n\\[\n\\Longrightarrow\\qquad r+s = 24 .\n\\tag{4}\n\\]\n\nHence from (2) the leg length is  \n\n\\[\n\\ell =\\frac{r+s}{2}=12 .\n\\tag{5}\n\\]\n\n---\n\n### 3.  Height of the trapezoid  \n\nThe incircle touches both parallel sides, so the distance between them (the height \\(h\\)) equals twice the radius:\n\n\\[\nh = 2\\cdot 3 = 6 .\n\\tag{6}\n\\]\n\n(One can also get \\(h\\) from \\(\\displaystyle \\text{Area}= \\frac{r+s}{2}\\,h\\) using (4): \\(72 =12h\\Rightarrow h=6\\).)\n\n---\n\n### 4.  Relate the leg to the bases  \n\nIn an isosceles trapezoid, each leg forms a right triangle with height \\(h\\) and horizontal leg \\(\\frac{|r-s|}{2}\\):\n\n\\[\n\\ell^{2}= \\left(\\frac{r-s}{2}\\right)^{2}+h^{2}.\n\\]\n\nSubstituting \\(\\ell=12\\) and \\(h=6\\),\n\n\\[\n12^{2}= \\frac{(r-s)^{2}}{4}+6^{2}\n\\quad\\Longrightarrow\\quad\n144 = \\frac{(r-s)^{2}}{4}+36\n\\]\n\\[\n\\Longrightarrow\\quad (r-s)^{2}=432 .\n\\tag{7}\n\\]\n\n---\n\n### 5.  Find \\(r^{2}+s^{2}\\)\n\nWe have the two symmetric relations  \n\n\\[\n(r+s)^{2}=24^{2}=576,\n\\qquad\n(r-s)^{2}=432 .\n\\]\n\nRecall  \n\n\\[\n(r-s)^{2}= (r+s)^{2}-4rs .\n\\]\n\nThus  \n\n\\[\n432 = 576 - 4rs \\quad\\Longrightarrow\\quad rs = 36 .\n\\tag{8}\n\\]\n\nNow  \n\n\\[\nr^{2}+s^{2}= (r+s)^{2}-2rs = 576-2\\cdot36 = 576-72 = 504 .\n\\]\n\n---\n\n\\[\n\\boxed{504}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 504

    \n

    Extracted Answer: 504

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For a number to be divisible by \\(22\\) it must be divisible by \\(2\\) and by \\(11\\).\n\n---\n\n### 1.  Divisibility by \\(11\\)\n\nWrite an 8\u2011digit permutation as  \n\n\\[\nd_1d_2d_3d_4d_5d_6d_7d_8 ,\n\\]\n\nwith positions counted from the left.  \nFor an even number of digits, the rule for \\(11\\) is  \n\n\\[\n(d_1+d_3+d_5+d_7)-(d_2+d_4+d_6+d_8)\\equiv0\\pmod{11}.\n\\]\n\nLet  \n\n\\[\nO=d_1+d_3+d_5+d_7,\\qquad E=d_2+d_4+d_6+d_8 .\n\\]\n\nBecause the digits \\(1,2,\\dots ,8\\) are used once,  \n\n\\[\nO+E=1+2+\\cdots+8=36 .\n\\]\n\nThe condition for \\(11\\) gives \\(O-E\\equiv0\\pmod{11}\\).  \nSince \\(O,E\\) lie between \\(10\\) and \\(26\\), the only possible multiple of \\(11\\) is \\(0\\).  \nHence  \n\n\\[\nO=E=18 .\n\\]\n\nThus the four digits placed in the odd positions must sum to \\(18\\); the remaining four (even positions) also sum to \\(18\\).\n\n---\n\n### 2.  Which four\u2011digit sets sum to \\(18\\)?\n\nFind all 4\u2011element subsets of \\(\\{1,\\dots ,8\\}\\) whose sum is \\(18\\).\n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are \\(8\\) such subsets.  \nEach contains exactly two even digits (the evens are \\(2,4,6,8\\)).  \nConsequently, the complementary set (the digits for the even positions) also contains exactly two evens.\n\n---\n\n### 3.  Divisibility by \\(2\\)\n\nA number is even precisely when its unit digit (position\u202f8) is even.  \nPosition\u202f8 belongs to the even positions, whose four digits are the complement of the chosen odd\u2011position set.  \nSince that complement always has exactly two even digits, we have\n\n\\[\n\\text{choices for the unit digit}=2 .\n\\]\n\n---\n\n### 4.  Counting the permutations\n\nFix one of the eight valid 4\u2011digit odd\u2011position sets \\(S\\).\n\n* Arrange the four digits of \\(S\\) in the odd positions \\(1,3,5,7\\): \\(4! = 24\\) ways.\n* Choose an even digit from the complementary set for the unit place: \\(2\\) ways.\n* Arrange the remaining three digits of the complement in positions \\(2,4,6\\): \\(3! = 6\\) ways.\n\nHence for each set \\(S\\)\n\n\\[\n24 \\times 2 \\times 6 = 288\n\\]\n\npermutations are divisible by \\(22\\).\n\nWith \\(8\\) possible sets \\(S\\),\n\n\\[\nN = 8 \\times 288 = 2304 .\n\\]\n\n---\n\n### 5.  Required difference\n\n\\[\nN-2025 = 2304-2025 = 279 .\n\\]\n\n\\[\n\\boxed{279}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 279

    \n

    Extracted Answer: 279

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    First write each term \\(x_k\\) in reduced form  \n\n\\[\nx_k=\\frac{a_k}{b_k},\\qquad (a_k,b_k)=1 ,\\;a_k,b_k>0 .\n\\]\n\nFrom  \n\n\\[\nx_{k+1}= \\frac13\\Bigl(x_k+\\frac1{x_k}-1\\Bigr)\n        =\\frac13\\Bigl(\\frac{a_k}{b_k}+\\frac{b_k}{a_k}-1\\Bigr)\n\\]\n\nwe obtain  \n\n\\[\na_{k+1}= \\frac{a_k^2+b_k^2-a_kb_k}{3},\\qquad   \nb_{k+1}=a_kb_k .\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1.  Coprimeness is preserved\nIf a prime \\(p\\mid a_{k+1}\\) and \\(p\\mid b_{k+1}=a_kb_k\\) then \\(p\\mid a_k\\) or \\(p\\mid b_k\\).\nBut modulo such a prime the numerator \\(a_k^2+b_k^2-a_kb_k\\) equals \\(b_k^2\\) (resp. \\(a_k^2\\)),\nwhich is non\u2011zero because \\((a_k,b_k)=1\\). Hence no prime can divide both\n\\(a_{k+1}\\) and \\(b_{k+1}\\); therefore \\((a_{k+1},b_{k+1})=1\\).\nThus each \\(x_k\\) is already in lowest terms.\n\n--------------------------------------------------------------------\n### 2.  A simple recurrence for the sum\n\nLet  \n\n\\[\ns_k=a_k+b_k .\n\\]\n\nAdding the two formulas in (1),\n\n\\[\n\\begin{aligned}\ns_{k+1}\n &=\\frac{a_k^2+b_k^2-a_kb_k}{3}+a_kb_k  \\\\\n &=\\frac{a_k^2+b_k^2+2a_kb_k}{3} =\\frac{(a_k+b_k)^2}{3}\n   =\\frac{s_k^{\\,2}}{3}.         \\tag{2}\n\\end{aligned}\n\\]\n\nThe initial sum is  \n\n\\[\ns_1= a_1+b_1=25+11=36 .\n\\]\n\n--------------------------------------------------------------------\n### 3.  Closed form of \\(s_k\\)\n\nFrom (2) we prove by induction that  \n\n\\[\n\\boxed{\\,s_k = 2^{\\,2^{\\,k}}\\; 3^{\\,2^{\\,k-1}+1}\\,}\\qquad(k\\ge1).\n\\]\n\nIndeed, for \\(k=1\\) the formula gives \\(2^{2}\\,3^{2}=36\\).\nAssume it holds for \\(k\\); then using (2),\n\n\\[\ns_{k+1}= \\frac{s_k^{2}}{3}\n      =\\frac{(2^{2^{k}}3^{2^{k-1}+1})^{2}}{3}\n      =2^{2^{k+1}}3^{2^{k}+1},\n\\]\n\nwhich is the required expression for \\(k+1\\).\n\n--------------------------------------------------------------------\n### 4.  Computing \\(s_{2025}\\pmod{1000}\\)\n\nWe need \\(m+n=s_{2025}\\pmod{1000}\\).\n\nBecause \\(1000=8\\cdot125\\), we treat the two moduli separately.\n\n*Modulo \\(8\\):*  \n\\(2^{2^{2025}}\\) contains the factor \\(2^3\\); hence \\(s_{2025}\\equiv0\\pmod 8\\).\n\n*Modulo \\(125\\):*  \n\\(\\phi(125)=100\\).  Thus we may reduce the exponents modulo \\(100\\).\n\n\\[\n\\begin{aligned}\n2^{2025}\\pmod{100}&=32, &\n2^{2024}\\pmod{100}&=16 .\n\\end{aligned}\n\\]\n\nHence  \n\n\\[\n\\begin{aligned}\n2^{\\,2^{2025}}\\pmod{125}&=2^{32}\\pmod{125}=46,\\\\[2mm]\n3^{\\,2^{2024}+1}\\pmod{125}&=3^{16+1}=3^{17}\\pmod{125}=38.\n\\end{aligned}\n\\]\n\nTherefore  \n\n\\[\ns_{2025}\\equiv 46\\cdot38\\equiv123\\pmod{125}.\n\\]\n\nNow solve  \n\n\\[\nN\\equiv0\\pmod8,\\qquad N\\equiv123\\pmod{125}.\n\\]\n\nSince \\(8^{-1}\\equiv47\\pmod{125}\\),\n\n\\[\nN\\equiv8\\bigl(47\\cdot123\\bigr)\\equiv8\\cdot31\\equiv248\\pmod{1000}.\n\\]\n\nThus  \n\n\\[\nm+n\\equiv\\boxed{248}\\pmod{1000}.\n\\]\n\n--------------------------------------------------------------------\n### 5.  Check via periodicity (optional)\n\nFrom \\(s_{k+1}=s_k^2/3\\) modulo \\(1000\\) one finds that the\nsequence \\(\\{s_k\\bmod1000\\}\\) becomes periodic with period \\(20\\) after\nthe third term:\n\\[\n36,\\;432,\\;\\underline{208},\\;88,\\;248,\\;168,\\dots\n\\]\nSince \\(2025-3\\equiv2\\pmod{20}\\), the term equals the fifth term,\n\\(248\\), confirming the result above.
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 248

    \n

    Extracted Answer: 248

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nz=x+iy .\n\\]\n\n---\n\n### 1.  The first equation  \n\n\\[\n|25+20i-z|=5\n\\]\n\ngives the circle  \n\n\\[\n(x-25)^2+(y-20)^2=5^{2}=25 .\n\\tag{1}\n\\]\n\nIts centre is \\(C=(25,20)\\) and its radius is \\(5\\).\n\n---\n\n### 2.  The second equation  \n\n\\[\n|z-4-k|=|z-3i-k|\n\\]\n\nmeans that the point \\(z\\) is equidistant from the two points  \n\n\\[\nA=(4+k,0),\\qquad B=(k,3).\n\\]\n\nThus \\(z\\) lies on the **perpendicular bisector** of the segment \\(AB\\).\n\n*Midpoint*  \n\n\\[\nM\\Bigl(\\frac{4+k+k}{2},\\frac{0+3}{2}\\Bigr)=\\bigl(k+2,\\; \\tfrac32 \\bigr).\n\\]\n\n*Slope of \\(AB\\)*  \n\n\\[\n\\frac{3-0}{k-(4+k)}=\\frac{3}{-4}=-\\frac34 .\n\\]\n\nHence the slope of the perpendicular bisector is \\( \\displaystyle \\frac43\\).\n\nIts equation is\n\n\\[\ny-\\frac32=\\frac43\\bigl(x-(k+2)\\bigr)\n\\]\n\nor, after clearing denominators,\n\n\\[\n8x-6y-8k-7=0 .\n\\tag{2}\n\\]\n\nThus the second condition is the line \\(L_k: 8x-6y-8k-7=0\\).\n\n---\n\n### 3.  Intersections of (1) and (2)\n\nThe system has exactly one solution iff the line \\(L_k\\) is **tangent** to the circle (1), i.e. the distance from the centre \\(C\\) to the line equals the radius \\(5\\).\n\nDistance from \\((25,20)\\) to \\(L_k\\):\n\n\\[\nd=\\frac{|8\\cdot25-6\\cdot20-8k-7|}{\\sqrt{8^{2}+(-6)^{2}}}\n   =\\frac{|200-120-8k-7|}{\\sqrt{64+36}}\n   =\\frac{|73-8k|}{10}.\n\\]\n\nSet \\(d=5\\):\n\n\\[\n\\frac{|73-8k|}{10}=5\\quad\\Longrightarrow\\quad |73-8k|=50.\n\\]\n\nHence  \n\n\\[\n73-8k=50\\quad\\text{or}\\quad73-8k=-50,\n\\]\ngiving  \n\n\\[\nk=\\frac{23}{8}\\qquad\\text{or}\\qquad k=\\frac{123}{8}.\n\\]\n\nFor each of these values the line is tangent, so there is exactly one point \\(z\\) satisfying both equations.\n\n---\n\n### 4.  Sum of all possible \\(k\\)\n\n\\[\n\\frac{23}{8}+\\frac{123}{8}= \\frac{146}{8}= \\frac{73}{4}.\n\\]\n\nWrite \\(\\displaystyle \\frac{73}{4}\\) as \\(\\frac{m}{n}\\) with \\(\\gcd(m,n)=1\\); here \\(m=73,\\;n=4\\).\n\n\\[\nm+n = 73+4 = 77.\n\\]\n\n\\[\n\\boxed{77}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 77

    \n

    Extracted Answer: 77

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Since the points lie on the sides of \\(\\triangle ABC\\) we may work with vectors\n\\[\n\\vec{AB}= \\mathbf b,\\qquad \\vec{AC}= \\mathbf c ,\n\\qquad A\\; \\text{at the origin}.\n\\]\n\n--------------------------------------------------------------------\n### 1.  Locate the points \\(D,E,F,G\\)\n\n\\[\nAD=4,\\;AB=28\\Longrightarrow \\frac{AD}{AB}= \\frac 1 7\\quad\\Rightarrow\\quad \n\\vec{AD}=\\frac17\\mathbf b .\n\\]\nThus \\(D=\\dfrac17\\mathbf b\\).\n\n\\[\nAE=AD+DE=20\\Longrightarrow\\frac{AE}{AB}= \\frac{20}{28}= \\frac57\n\\quad\\Rightarrow\\quad  E=\\frac57\\mathbf b .\n\\]\n\nSimilarly on \\(AC\\),\n\n\\[\nAF=13,\\;AC=91\\Longrightarrow \\frac{AF}{AC}= \\frac13\\!7\\quad\\Rightarrow\\quad \nF=\\frac17\\mathbf c ,\n\\]\n\\[\nAG=AF+FG=65\\Longrightarrow \\frac{AG}{AC}= \\frac{65}{91}= \\frac57\n\\quad\\Rightarrow\\quad  G=\\frac57\\mathbf c .\n\\]\n\nHence  \n\n\\[\nD=\\frac17\\mathbf b,\\qquad E=\\frac57\\mathbf b,\\qquad\nF=\\frac17\\mathbf c,\\qquad G=\\frac57\\mathbf c .\n\\]\n\n--------------------------------------------------------------------\n### 2.  Area of \\(\\triangle ABC\\)\n\nQuadrilateral \\(DEGF\\) is the region between the similar triangles\n\\(ADF\\) (scale \\(1/7\\)) and \\(AEG\\) (scale \\(5/7\\)).  \nTherefore  \n\n\\[\n[DEGF]=[AEG]-[ADF]\n           =\\left(\\frac57\\right)^{\\!2}[ABC]-\\left(\\frac17\\right)^{\\!2}[ABC]\n           =\\frac{25-1}{49}[ABC]=\\frac{24}{49}[ABC].\n\\]\n\nGiven \\([DEGF]=288\\),\n\n\\[\n[ABC]=\\frac{49}{24}\\cdot288=49\\cdot12=588 .\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 3.  Locate the reflected points \\(M,N\\)\n\n\\[\nM\\; \\text{is the reflection of }D\\text{ across }F\\;\n\\Longrightarrow\\; M=2F-D=\n\\frac{2}{7}\\mathbf c-\\frac{1}{7}\\mathbf b .\n\\]\n\n\\[\nN\\; \\text{is the reflection of }G\\text{ across }E\\;\n\\Longrightarrow\\; N=2E-G=\n\\frac{10}{7}\\mathbf b-\\frac{5}{7}\\mathbf c .\n\\]\n\n--------------------------------------------------------------------\n### 4.  Area of the heptagon \\(AFNBCEM\\)\n\nWrite the vertices (in order) as vectors from \\(A\\):\n\n\\[\n\\begin{aligned}\nA&=0, &\nF&=\\frac17\\mathbf c, &\nN&=\\frac{10}{7}\\mathbf b-\\frac57\\mathbf c,\\\\\nB&=\\mathbf b, &\nC&=\\mathbf c, &\nE&=\\frac57\\mathbf b, &\nM&=\\frac27\\mathbf c-\\frac17\\mathbf b .\n\\end{aligned}\n\\]\n\nFor a polygon with vertices \\(\\mathbf v_0,\\dots,\\mathbf v_6\\) the doubled\narea equals\n\\[\n\\sum_{i=0}^{6}\\det(\\mathbf v_i,\\mathbf v_{i+1}),\n\\qquad\\mathbf v_7=\\mathbf v_0 .\n\\]\n\nCarrying out the determinants (using \\(\\det(\\mathbf b,\\mathbf c)=\\det(\\mathbf b,\\mathbf c)\\) and \\(\\det(\\mathbf c,\\mathbf b)=-\\det(\\mathbf b,\\mathbf c)\\)):\n\n\\[\n\\begin{aligned}\n\\det(F,N) &=\\frac1{49}\\det\\!\\Bigl(\\mathbf c,\\;10\\mathbf b-5\\mathbf c\\Bigr)\n           =-\\frac{10}{49}\\det(\\mathbf b,\\mathbf c),\\\\[2mm]\n\\det(N,B) &=\\frac57\\det(\\mathbf b,\\mathbf b)-\\frac5{7}\\det(\\mathbf c,\\mathbf b)\n           =\\frac5{7}\\det(\\mathbf b,\\mathbf c),\\\\[2mm]\n\\det(B,C) &=\\det(\\mathbf b,\\mathbf c),\\\\[2mm]\n\\det(C,E) &=\\frac57\\det(\\mathbf c,\\mathbf b)=-\\frac5{7}\\det(\\mathbf b,\\mathbf c),\\\\[2mm]\n\\det(E,M) &=\\frac1{49}\\det\\!\\Bigl(5\\mathbf b,\\;2\\mathbf c-\\mathbf b\\Bigr)\n           =\\frac{10}{49}\\det(\\mathbf b,\\mathbf c).\n\\end{aligned}\n\\]\n\nAll other terms are zero. Adding them:\n\n\\[\n\\det(F,N)+\\det(N,B)+\\det(B,C)+\\det(C,E)+\\det(E,M)\n   =\\Bigl(-\\frac{10}{49}+\\frac5{7}+1-\\frac5{7}+\\frac{10}{49}\\Bigr)\n      \\det(\\mathbf b,\\mathbf c)=\\det(\\mathbf b,\\mathbf c).\n\\]\n\nThus the doubled area of the heptagon is \\(\\det(\\mathbf b,\\mathbf c)\\),\nwhich is exactly twice the area of \\(\\triangle ABC\\). Consequently\n\n\\[\n[AFNBCEM]=\\frac12\\det(\\mathbf b,\\mathbf c)=[ABC]=588 .\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 5.  Answer\n\n\\[\n\\boxed{588}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 588

    \n

    Extracted Answer: 588

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The parabola is  \n\n\\[\ny=x^{2}-4 .\n\\]\n\nRotate a point \\((x,y)\\) by \\(-60^{\\circ}\\) (the inverse rotation).  \nFor \\(\\theta =60^{\\circ}\\),\n\n\\[\n\\cos\\theta =\\frac12 ,\\qquad \\sin\\theta =\\frac{\\sqrt3}{2}.\n\\]\n\nThe inverse\u2011rotation of \\((x,y)\\) is  \n\n\\[\nu=\\frac12 x+\\frac{\\sqrt3}{2}y ,\\qquad \nv=-\\frac{\\sqrt3}{2}x+\\frac12 y .\n\\]\n\nFor a point of the rotated parabola, the inverse image \\((u,v)\\) must satisfy the\noriginal equation \\(v=u^{2}-4\\):\n\n\\[\n-\\frac{\\sqrt3}{2}x+\\frac12 y =\\Bigl(\\frac12 x+\\frac{\\sqrt3}{2}y\\Bigr)^{2}-4 .\n\\]\n\nMultiplying by \\(2\\) and expanding gives\n\n\\[\n\\frac12 x^{2}+\\sqrt3\\,xy+\\frac32 y^{2}+\\sqrt3\\,x-y-8=0. \\tag{1}\n\\]\n\nNow substitute \\(y=x^{2}-4\\) (the original parabola) into (1):\n\n\\[\n\\frac12 x^{2}+\\sqrt3\\,x(x^{2}-4)+\\frac32 (x^{2}-4)^{2}\n+\\sqrt3\\,x-(x^{2}-4)-8=0 .\n\\]\n\nSimplifying,\n\n\\[\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40=0 .\n\\]\n\nFactor the quartic (group the \\(\\sqrt3\\) terms):\n\n\\[\n\\bigl(x^{2}+\\sqrt3\\,x-4\\bigr)\\bigl(3x^{2}-\\sqrt3\\,x-10\\bigr)=0 .\n\\]\n\nHence\n\n\\[\nx^{2}+\\sqrt3\\,x-4=0\\qquad\\text{or}\\qquad 3x^{2}-\\sqrt3\\,x-10=0.\n\\]\n\nThe four solutions are  \n\n\\[\n\\begin{aligned}\nx&=\\frac{-\\sqrt3\\pm\\sqrt{19}}2,\\\\[2mm]\nx&=\\frac{\\sqrt3\\pm\\sqrt{123}}6 .\n\\end{aligned}\n\\]\n\nOnly one of them lies in the fourth quadrant \\((x>0,\\;y<0)\\):\n\\[\nx=\\frac{-\\sqrt3+\\sqrt{19}}2\\;(>0),\\qquad |x|<2 .\n\\]\n\nIts \\(y\\)-coordinate is\n\n\\[\ny=x^{2}-4\n     =\\Bigl(\\frac{-\\sqrt3+\\sqrt{19}}2\\Bigr)^{2}-4\n     =\\frac{3-\\sqrt{57}}2 .\n\\]\n\nThus  \n\n\\[\ny=\\frac{a-\\sqrt b}{c}\\quad\\text{with}\\quad a=3,\\;b=57,\\;c=2,\n\\]\nand \\(a\\) and \\(c\\) are relatively prime.\n\nFinally,\n\\[\na+b+c=3+57+2=62 .\n\\]\n\n\\[\n\\boxed{62}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 62

    \n

    Extracted Answer: 62

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The six two\u2011letter words are formed by first ordering the letters inside each pair\nalphabetically and then sorting the six words alphabetically.  \nFor a pairing, let  \n\n\\[\nS=\\{\\text{the smaller letter of each pair}\\}\n\\]\n\n(the \u201cfirst\u201d letters of the six words).  \nThe lexicographically last word is the one whose first letter is  \n\n\\[\nM=\\max S .\n\\]\n\nHence the last word contains \\(G\\) **iff** either  \n\n* \\(M=G\\) (so \\(G\\) itself is the first letter of the last word), or  \n* \\(M\\neq G\\) but \\(G\\) is paired with the letter \\(M\\) (so \\(G\\) is the second\nletter of the last word).\n\nBecause a pair \\((x,y)\\) must satisfy \\(x<y\\), the only possible \\(M\\) with\n\\(M<G\\) is \\(M=F\\).  Thus there are two cases:\n\n--------------------------------------------------------------------\n### 1.  \\(M=G\\)\n\nThen the six small letters are  \n\n\\[\nS=\\{G\\}\\cup \\{A,B,C,D,E,F\\}\\setminus\\{a\\},\n\\]\n\nwhere \\(a\\) is the one letter from \\(\\{A,\\dots ,F\\}\\) that is **not** in \\(S\\).\nThe omitted letter \\(a\\) must not be \\(A\\); otherwise \\(A\\) would be a large\nletter with no smaller partner.  \nHence \\(a\\in\\{B,C,D,E,F\\}\\) \u2013 5 possibilities.\n\nFor a given \\(a\\):\n* \\(a\\) (a large letter) must be paired with a small letter that is\nsmaller than \\(a\\); there are \\(a-1\\) such choices.\n* The remaining five small letters can be paired arbitrarily with the five\nlarge letters \\(H,I,J,K,L\\); that gives \\(5!\\) possibilities.\n\nThus for each \\(a\\) we have \\((a-1)\\cdot5!\\) pairings.  \nSumming over \\(a=2,3,4,5,6\\) (i.e. \\(B\\)\u2013\\(F\\)),\n\n\\[\n\\sum_{a=2}^{6}(a-1) \\cdot 5!\n   =(1+2+3+4+5)\\cdot120\n   =15\\cdot120\n   =1800 .\n\\]\n\n--------------------------------------------------------------------\n### 2.  \\(M=F\\) and \\(G\\) is paired with \\(F\\)\n\nIf the maximum small letter is \\(F\\), then the small set must be exactly  \n\n\\[\nS=\\{A,B,C,D,E,F\\},\n\\qquad\nT=\\{G,H,I,J,K,L\\}.\n\\]\n\nEvery bijection between \\(S\\) and \\(T\\) yields a valid pairing, so there are\n\\(6! = 720\\) pairings in total.  \nAmong them, the ones with \\(F\\) paired with \\(G\\) are those where we fix that\npair and match the remaining five letters arbitrarily, giving \\(5! =120\\) pairings.\n\n--------------------------------------------------------------------\n### Total favourable pairings\n\n\\[\nN_{\\text{fav}} = 1800 + 120 = 1920 .\n\\]\n\n--------------------------------------------------------------------\n### Total pairings\n\nThe total number of ways to split 12 distinct letters into six unordered pairs is  \n\n\\[\nN_{\\text{total}}=\\frac{12!}{2^{6}\\,6!}=10395 .\n\\]\n\n--------------------------------------------------------------------\n### Probability\n\n\\[\nP=\\frac{1920}{10395}\n   =\\frac{128}{693}\\quad(\\text{in lowest terms}).\n\\]\n\nThus \\(m=128,\\;n=693\\) and\n\n\\[\nm+n=128+693=821 .\n\\]\n\n\\[\n\\boxed{821}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 821

    \n

    Extracted Answer: 821

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nA piecewise linear periodic function is defined by $f(x)=\\begin{cases}x&\\text{if }x\\in[-1,1)\\\\2-x&\\text{if }x\\in[1,3)\\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\\frac{a+b\\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The graph of  \n\n\\[\nf(x)=\\begin{cases}\nx,&-1\\le x<1\\\\[2pt]\n2-x,&1\\le x<3\n\\end{cases},\n\\qquad f(x+4)=f(x)\n\\]\n\nis a triangular wave of period \\(4\\) whose values lie in \\([-1,1]\\).\n\nThe parabola is  \n\n\\[\nx=34y^{2}\\qquad (x\\ge 0).\n\\]\n\nBecause \\(|f(x)|\\le 1\\), any intersection must satisfy \\(|y|\\le 1\\); then  \n\n\\[\n0\\le x=34y^{2}\\le 34 .\n\\]\n\n--------------------------------------------------------------------\n### 1. Reduce the problem to a quadratic equation\n\nWrite  \n\n\\[\nt = 34y^{2}\\;(0\\le t\\le34).\n\\]\n\nFor some integer \\(k\\) we can write  \n\n\\[\nt = 4k+u,\\qquad u\\in[-1,3)\n\\]\n\n(the representation is unique because we use the half\u2011open interval \\([-1,3)\\)).  \nSince \\(f(t)=f(u)\\),\n\n\\[\nf(u)=\\begin{cases}\nu, & u\\in[-1,1)\\\\[2pt]\n2-u, & u\\in[1,3)\n\\end{cases}\n\\]\n\nand the intersection condition \\(y=f(t)\\) becomes  \n\n\\[\n\\begin{cases}\ny=u = 34y^{2}-4k, & u\\in[-1,1)\\\\[4pt]\ny=2-u = 2-(34y^{2}-4k), & u\\in[1,3)\n\\end{cases}\n\\]\n\nwhich give the quadratics  \n\n\\[\n\\boxed{34y^{2}-y-4k=0}\\qquad(u\\in[-1,1))\n\\tag{A}\n\\]\n\n\\[\n\\boxed{34y^{2}+y-(2+4k)=0}\\qquad(u\\in[1,3))\n\\tag{B}\n\\]\n\nwith the extra restrictions  \n\n\\[\n\\text{(A)}\\;y\\in[-1,1), \\qquad\n\\text{(B)}\\; -1<y\\le 1 .\n\\]\n\n--------------------------------------------------------------------\n### 2. The possible integers \\(k\\)\n\nSince \\(t\\le34\\),\n\n\\[\n-1\\le u =t-4k <3\\Longrightarrow 4k\\le t+1\\le 35\n\\]\n\nso \\(k\\) can be \\(0,1,\\dots ,8\\) (nine values).\n\n--------------------------------------------------------------------\n### 3. Solutions of (A)\n\nFor each \\(k\\) the equation  \n\n\\[\n34y^{2}-y-4k=0\n\\]\n\nhas the two roots  \n\n\\[\ny=\\frac{1\\pm\\sqrt{1+544k}}{68}.\n\\]\n\nBoth lie in \\([-1,1)\\) for all \\(k=0,\\dots ,8\\).  \nHence each \\(k\\) contributes **two** solutions and their sum is\n\n\\[\n\\frac{1}{34}\\quad\\text{(by Vieta)}.\n\\]\n\nTotal from (A):\n\n\\[\n9\\cdot\\frac{1}{34}= \\frac{9}{34}.\n\\]\n\n--------------------------------------------------------------------\n### 4. Solutions of (B)\n\nFor each \\(k\\) the equation  \n\n\\[\n34y^{2}+y-(2+4k)=0\n\\]\n\nhas roots  \n\n\\[\ny=\\frac{-1\\pm\\sqrt{273+544k}}{68}.\n\\]\n\nFor \\(k=0,1,\\dots ,7\\) both roots satisfy \\(-1<y\\le1\\); for \\(k=8\\) the\nnegative root is \\(<-1\\) and is discarded.\nThus we have\n\n* for \\(k=0,\\dots ,7\\): two roots each, sum \\(-\\dfrac1{34}\\) (Vieta);\n* for \\(k=8\\): only the positive root  \n\n  \\[\n  y_{8}= \\frac{-1+\\sqrt{4625}}{68}= \\frac{-1+5\\sqrt{185}}{68}.\n  \\]\n\nHence the contribution of (B) is  \n\n\\[\n8\\!\\left(-\\frac1{34}\\right) + y_{8}= -\\frac{8}{34}+ \\frac{-1+5\\sqrt{185}}{68}\n= -\\frac{4}{17}+ \\frac{-1+5\\sqrt{185}}{68}.\n\\]\n\n--------------------------------------------------------------------\n### 5. Sum of all \\(y\\)-coordinates\n\nAdd the contributions of (A) and (B):\n\n\\[\n\\begin{aligned}\nS &=\\frac{9}{34}\\;+\\;\\Bigl(-\\frac{8}{34}+ \\frac{-1+5\\sqrt{185}}{68}\\Bigr)\\\\[4pt]\n  &=\\frac{1}{34}+ \\frac{-1+5\\sqrt{185}}{68}\n   =\\frac{2-1+5\\sqrt{185}}{68}\\\\[4pt]\n  &=\\boxed{\\displaystyle\\frac{1+5\\sqrt{185}}{68}}.\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 6. Required sum \\(a+b+c+d\\)\n\nThe expression is \\(\\dfrac{a+b\\sqrt{c}}{d}\\) with  \n\n\\[\na=1,\\quad b=5,\\quad c=185,\\quad d=68,\n\\]\n\nwhich satisfy the given conditions. Therefore  \n\n\\[\na+b+c+d = 1+5+185+68 = \\boxed{259}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 259

    \n

    Extracted Answer: 259

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the line be the \\(x\\)-axis.  \nPlace the points with coordinates (in order)\n\n\\[\nA(0),\\; B(x_B),\\; C(x_C),\\; D(x_D),\\; E(x_E),\\; F(x_F).\n\\]\n\nDenote the successive distances\n\n\\[\nAB=a,\\; BC=b,\\; CD=c,\\; DE=d,\\; EF=e .\n\\]\n\nThen  \n\n\\[\n\\begin{aligned}\na+b &= AC = 26,\\\\\nb+c &= BD = 22,\\\\\nc+d &= CE = 31,\\\\\nd+e &= DF = 33,\\\\\na+b+c+d+e &= AF = 73 .\n\\end{aligned}\n\\]\n\nSolving:\n\\[\n\\begin{aligned}\na &= 26-b,\\\\\nc &= 22-b,\\\\\nd &= 31-c = 9+b,\\\\\ne &= 33-d = 24-b.\n\\end{aligned}\n\\]\n\nInsert these in the sum equation:\n\n\\[\n(26-b)+b+(22-b)+(9+b)+(24-b)=73\\Longrightarrow81-b=73,\n\\]\n\nhence \\(b=8\\).\n\nThus  \n\n\\[\n\\begin{aligned}\nAB = a = 18,\\quad\nBC = b = 8,\\quad\nCD = c = 14,\\quad\nDE = d = 17,\\quad\nEF = e = 16.\n\\end{aligned}\n\\]\n\nChoosing \\(A\\) as the origin gives\n\n\\[\n\\begin{aligned}\nA&:(0,0),\\\\\nB&:(18,0),\\\\\nC&:(26,0),\\\\\nD&:(40,0),\\\\\nE&:(57,0),\\\\\nF&:(73,0).\n\\end{aligned}\n\\]\n\n---\n\n### Coordinates of \\(G\\)\n\nLet \\(G=(x,y)\\).  \nWe are given \\(CG=40\\) and \\(DG=30\\):\n\n\\[\n\\begin{cases}\n(x-26)^2+y^2 = 40^2 =1600,\\\\\n(x-40)^2+y^2 = 30^2 = 900 .\n\\end{cases}\n\\]\n\nSubtracting the equations eliminates \\(y^2\\):\n\n\\[\n(x-26)^2-(x-40)^2 = 700 .\n\\]\n\n\\[\n\\begin{aligned}\n[x^2-52x+676] - [x^2-80x+1600] &= 700\\\\\n28x-924 &= 700\\\\\n28x &=1624\\\\\nx&= \\frac{1624}{28}=58 .\n\\end{aligned}\n\\]\n\nPlug \\(x=58\\) into \\((x-40)^2+y^2=900\\):\n\n\\[\n(58-40)^2+y^2=900\\Longrightarrow 18^2+y^2=900\\Longrightarrow y^2=576,\n\\]\n\nso \\(|y|=24\\).  \nThus \\(G=(58,\\pm24)\\).\n\n---\n\n### Area of \\(\\triangle BGE\\)\n\nPoints \\(B\\) and \\(E\\) lie on the \\(x\\)-axis, so the base \\(BE\\) has length\n\n\\[\nBE = x_E-x_B = 57-18 = 39 .\n\\]\n\nThe altitude from \\(G\\) to line \\(BE\\) is \\(|y|=24\\).\n\nHence\n\n\\[\n\\text{Area}= \\frac12 \\times (\\text{base}) \\times (\\text{height})\n          = \\frac12 \\times 39 \\times 24\n          = 39 \\times 12\n          = 468 .\n\\]\n\n\\[\n\\boxed{468}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 468

    \n

    Extracted Answer: 468

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nd=n+2\\qquad (d\\ge 3,\\; n>0)\n\\]\n\nThen  \n\n\\[\nn=d-2,\\qquad n+3=d+1,\\qquad n^{2}+9=(d-2)^{2}+9=d^{2}-4d+13 .\n\\]\n\nThe required divisibility becomes  \n\n\\[\nd\\mid 3(n+3)(n^{2}+9)=3(d+1)(d^{2}-4d+13).\n\\]\n\n---\n\n### Reduce modulo \\(d\\)\n\n\\[\n3(d+1)(d^{2}-4d+13) \\equiv 3\\cdot1\\cdot13 = 39 \\pmod d,\n\\]\n\nbecause \\(d+1\\equiv1\\) and \\(d^{2}-4d+13\\equiv13\\) modulo \\(d\\).\n\nThus  \n\n\\[\nd\\mid 3(d+1)(d^{2}-4d+13)\\iff d\\mid 39 .\n\\]\n\nHence \\(d\\) must be a positive divisor of \\(39\\) and at least \\(3\\).  \nDivisors of \\(39\\) are \\(1,3,13,39\\); discarding \\(1\\) we obtain  \n\n\\[\nd\\in\\{3,13,39\\}.\n\\]\n\n---\n\n### Recover the corresponding \\(n\\)\n\n\\[\nn=d-2\\implies n\\in\\{3-2,13-2,39-2\\}=\\{1,11,37\\}.\n\\]\n\nEach indeed satisfies the original condition:\n\n* \\(n=1\\): \\(\\frac{3(1+3)(1^{2}+9)}{1+2}= \\frac{3\\cdot4\\cdot10}{3}=40\\) (integer);\n* \\(n=11\\): \\(\\frac{3(11+3)(11^{2}+9)}{11+2}= \\frac{3\\cdot14\\cdot130}{13}=420\\);\n* \\(n=37\\): \\(\\frac{3(37+3)(37^{2}+9)}{37+2}= \\frac{3\\cdot40\\cdot1378}{39}=4240\\).\n\n---\n\n### Sum of all such \\(n\\)\n\n\\[\n1+11+37 = 49.\n\\]\n\n\\[\n\\boxed{49}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 49

    \n

    Extracted Answer: 49

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    First write the two required inequalities using the condition \\(x+y+z=75\\).\n\n\\[\nz=75-x-y .\n\\]\n\n---\n\n### 1.  Simplify the inequalities  \n\n\\[\n\\begin{aligned}\nx-yz &<y-zx\\\\\nx-(y(75-x-y)) &< y-(x(75-x-y))\\\\\n\\Longrightarrow (x-y)(x+y-76) &>0 .\n\\end{aligned}\n\\]\n\n\\[\n\\begin{aligned}\ny-zx &<z-xy\\\\\ny-x(75-x-y) &< (75-x-y)-xy\\\\\n\\Longrightarrow (x+1)(x+2y-75) &<0 .\n\\end{aligned}\n\\]\n\nHence the points \\((x,y,z)\\) on the plane satisfy  \n\n\\[\n\\boxed{(x-y)(x+y-76)>0},\\qquad\\boxed{(x+1)(x+2y-75)<0}.\n\\]\n\nBoth are products of two linear factors.\n\n---\n\n### 2.  Work in the \\((x,y)\\)-plane  \n\nThe plane \\(x+y+z=75\\) is a linear image of the \\((x,y)\\)-plane via  \n\n\\[\n(x,y)\\mapsto (x,\\;y,\\;75-x-y) .\n\\]\n\nThe Jacobian matrix has columns \\((1,0,-1)\\) and \\((0,1,-1)\\); its Gram determinant is  \n\n\\[\n\\det\\begin{pmatrix}2&1\\\\1&2\\end{pmatrix}=3 .\n\\]\n\nThus an area element in the plane equals \\(\\sqrt3\\) times the ordinary area\n\\(dx\\,dy\\) in the \\((x,y)\\)-plane.\n\n---\n\n### 3.  Region defined by the two products  \n\nLet  \n\n\\[\nL_1:\\;x=-1,\\qquad L_2:\\;x+2y=75,\n\\]\n\\[\nL_3:\\;x=y,\\qquad L_4:\\;x+y=76 .\n\\]\n\nThe inequalities become\n\n\\[\n\\begin{cases}\nx>-1 \\;\\text{and}\\; y<\\dfrac{75-x}{2}   &\\text{or } x<-1 \\;\\text{and}\\; y>\\dfrac{75-x}{2},\\\\[4pt]\nx>y \\;\\text{and}\\; x+y>76               &\\text{or } x<y \\;\\text{and}\\; x+y<76 .\n\\end{cases}\n\\]\n\nOnly three of the four possible combinations are non\u2011empty:\n\n* **Region\u202f\\(R_1\\)** \u2013 \\(x>-1,\\;y<\\frac{75-x}{2},\\;x>y,\\;x+y>76\\) (unbounded).\n* **Region\u202f\\(R_2\\)** \u2013 \\(x>-1,\\;y<\\frac{75-x}{2},\\;x<y,\\;x+y<76\\) (bounded).\n* **Region\u202f\\(R_3\\)** \u2013 \\(x<-1,\\;y>\\frac{75-x}{2},\\;x<y,\\;x+y<76\\) (unbounded).\n\nHence the set consists of three disjoint convex regions; only \\(R_2\\) has finite area.\n\n---\n\n### 4.  The bounded region  \n\nFrom the inequalities for \\(R_2\\)\n\n\\[\n\\begin{cases}\n-1<x<25,\\\\[2pt]\nx<y<\\dfrac{75-x}{2},\n\\end{cases}\n\\]\n\nso \\(R_2\\) is the open triangle bounded by the lines  \n\n\\[\nx=-1,\\qquad y=x,\\qquad y=\\dfrac{75-x}{2}.\n\\]\n\nIts vertices are  \n\n\\[\nA(-1,-1),\\quad B(-1,38),\\quad C(25,25).\n\\]\n\nThe ordinary (planar) area is\n\n\\[\n\\frac12\\cdot|AB|\\cdot|AC|_{\\perp}= \\frac12\\,(39)\\,(26)=507 .\n\\]\n\n---\n\n### 5.  Area on the plane \\(x+y+z=75\\)\n\nMultiplying by the factor \\(\\sqrt3\\),\n\n\\[\n\\text{area}=507\\sqrt3 .\n\\]\n\nThus \\(a=507,\\;b=3\\) and\n\n\\[\na+b=507+3=510 .\n\\]\n\n\\[\n\\boxed{510}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 510

    \n

    Extracted Answer: 510

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe product $ \\prod_{k=4}^{63} \\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})} = \\frac{\\log_4(5^{15})}{\\log_5(5^{12})} \\cdot \\frac{\\log_5(5^{24})}{\\log_6(5^{21})} \\cdot \\frac{\\log_6(5^{35})}{\\log_7(5^{32})} \\cdots \\frac{\\log_{63}(5^{3968})}{\\log_{64}(5^{3965})} $ is equal to $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nP=\\prod_{k=4}^{63}\\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})}\n\\]\n\n---\n\n### 1.  Simplify one factor  \n\n\\[\n\\log_k(5^{k^2-1})=\\frac{\\ln(5^{k^2-1})}{\\ln k}\n            =\\frac{(k^2-1)\\ln5}{\\ln k},\n\\qquad\n\\log_{k+1}(5^{k^2-4})=\\frac{(k^2-4)\\ln5}{\\ln(k+1)}.\n\\]\n\nHence\n\n\\[\n\\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})}\n   =\\frac{k^2-1}{k^2-4}\\cdot\\frac{\\ln(k+1)}{\\ln k}.\n\\]\n\nSo\n\n\\[\nP=\\Bigl(\\prod_{k=4}^{63}\\frac{k^2-1}{k^2-4}\\Bigr)\n   \\Bigl(\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\\Bigr).\n\\]\n\n---\n\n### 2.  Telescoping the logarithm part  \n\n\\[\n\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\n =\\frac{\\ln5}{\\ln4}\\cdot\\frac{\\ln6}{\\ln5}\\cdots\\frac{\\ln64}{\\ln63}\n =\\frac{\\ln64}{\\ln4}\n =\\log_4 64 =3 .\n\\]\n\n---\n\n### 3.  Telescoping the rational part  \n\n\\[\n\\frac{k^2-1}{k^2-4}= \\frac{(k-1)(k+1)}{(k-2)(k+2)}\n   =\\frac{k-1}{k-2}\\cdot\\frac{k+1}{k+2}.\n\\]\n\nHence\n\n\\[\n\\prod_{k=4}^{63}\\frac{k^2-1}{k^2-4}\n =\\Bigl(\\prod_{k=4}^{63}\\frac{k-1}{k-2}\\Bigr)\n   \\Bigl(\\prod_{k=4}^{63}\\frac{k+1}{k+2}\\Bigr).\n\\]\n\n*First product*  \n\nLet \\(i=k-2\\). Then \\(i\\) runs from \\(2\\) to \\(61\\):\n\n\\[\n\\prod_{k=4}^{63}\\frac{k-1}{k-2}\n =\\prod_{i=2}^{61}\\frac{i+1}{i}\n =\\frac{3}{2}\\cdot\\frac{4}{3}\\cdots\\frac{62}{61}\n =\\frac{62}{2}=31 .\n\\]\n\n*Second product*  \n\nLet \\(j=k+1\\). Then \\(j\\) runs from \\(5\\) to \\(64\\):\n\n\\[\n\\prod_{k=4}^{63}\\frac{k+1}{k+2}\n =\\prod_{j=5}^{64}\\frac{j}{j+1}\n =\\frac{5}{6}\\cdot\\frac{6}{7}\\cdots\\frac{64}{65}\n =\\frac{5}{65}=\\frac1{13}.\n\\]\n\nThus\n\n\\[\n\\prod_{k=4}^{63}\\frac{k^2-1}{k^2-4}=31\\cdot\\frac1{13}=\\frac{31}{13}.\n\\]\n\n---\n\n### 4.  Combine the two parts  \n\n\\[\nP = 3\\cdot\\frac{31}{13}= \\frac{93}{13}.\n\\]\n\nThe fraction \\(\\frac{93}{13}\\) is already in lowest terms (\\(\\gcd(93,13)=1\\)).\nThus \\(m=93,\\; n=13\\) and\n\n\\[\nm+n = 93+13 = 106 .\n\\]\n\n\\[\n\\boxed{106}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 106

    \n

    Extracted Answer: 106

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 27 cells of a $3\\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. \n | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | \n | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | \n | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | \n The number of different ways to fill such a grid can be written as $p^a\\cdot q^b\\cdot r^c\\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\\cdot a+q\\cdot b+r\\cdot c+s\\cdot d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1 \u2013  what the conditions mean**\n\nIn a \\(3\\times 9\\) grid  \n\n* each of the three rows must be a permutation of the numbers \\(1,\\ldots ,9\\);  \n* each of the three \\(3\\times3\\) blocks (columns \\(1\\!-\\!3,\\;4\\!-\\!6,\\;7\\!-\\!9\\)) must also contain the numbers \\(1,\\ldots ,9\\) exactly once.\n\nHence every digit appears\n\n* once in each row (3 times in total), and  \n* once in each block (also 3 times in total).\n\nSo for a fixed digit \\(d\\) the three positions where it occurs are determined by a\nbijection between the three rows and the three blocks; i.e. a permutation\n\\(\\sigma_d\\in S_{3}\\).\n\n--------------------------------------------------------------------\n\n**Step 2 \u2013  describing a filling by permutations**\n\nFor the nine digits we obtain nine permutations  \n\n\\[\n\\sigma_1,\\sigma_2,\\dots ,\\sigma_9\\in S_3 .\n\\]\n\nIf \\(\\sigma_d(i)=j\\) then digit \\(d\\) is placed in row \\(i\\) inside block \\(j\\).\nFor a fixed block\u2013row cell \\((i,j)\\) there are three rows of the grid, hence it\nmust contain **exactly three** digits. Consequently for every cell \\((i,j)\\)\n\n\\[\n\\#\\{d\\mid \\sigma_d(i)=j\\}=3 .\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 3 \u2013  solving the integer system**\n\nLet  \n\n\\[\n\\begin{aligned}\nx_{\\mathrm{id}}&=\\#\\{\\sigma_d=\\text{id}\\},&\nx_{12}&=\\#\\{\\sigma_d=(12)\\},\\\\\nx_{13}&=\\#\\{\\sigma_d=(13)\\},&\nx_{23}&=\\#\\{\\sigma_d=(23)\\},\\\\\nx_{123}&=\\#\\{\\sigma_d=(123)\\},&\nx_{132}&=\\#\\{\\sigma_d=(132)\\}.\n\\end{aligned}\n\\]\n\nEach permutation contributes a \u20181\u2019 to three different cells; each cell is covered\nby exactly two permutations. From (1) we obtain nine equations, e.g.\n\n\\[\nx_{\\mathrm{id}}+x_{23}=3,\\qquad\nx_{12}+x_{123}=3,\\qquad\\ldots\n\\]\n\nSolving them gives\n\n\\[\nx_{12}=x_{13}=x_{23}=k,\\qquad\nx_{\\mathrm{id}}=x_{123}=x_{132}=3-k,\n\\]\n\nwhere \\(k\\in\\{0,1,2,3\\}\\).\n\n--------------------------------------------------------------------\n\n**Step 4 \u2013  assigning the permutations to the nine distinct digits**\n\nFor a fixed \\(k\\) the number of ways to give the nine digits the required\nmultiplicities is the multinomial coefficient\n\n\\[\n\\frac{9!}{k!^{\\,3}\\,(3-k)!^{\\,3}} .\n\\]\n\nSumming over the four possible values of \\(k\\) gives\n\n\\[\nN=\\sum_{k=0}^{3}\\frac{9!}{k!^{\\,3}(3-k)!^{\\,3}}\n   =2\\cdot\\frac{9!}{3!^{\\,3}}+2\\cdot\\frac{9!}{1!^{\\,3}2!^{\\,3}}\n   =1680+45360+45360+1680=94\\,080 .\n\\]\n\nThus there are \\(94\\,080\\) ways to decide, for every digit, in which block of\neach row it will appear.\n\n--------------------------------------------------------------------\n\n**Step 5 \u2013  placing the digits inside the blocks**\n\nFix a block \\(j\\).  \nRow \\(i\\) contributes exactly three distinct digits to this block; they can be\narranged in the three columns of the block in \\(3! = 6\\) ways, independently for\nthe three rows. Hence a block can be filled in \\((3!)^{3}=6^{3}=216\\) ways.\n\nThe three blocks are independent, so the column\u2011ordering factor is\n\n\\[\n(3!)^{9}=6^{9}=10\\,077\\,696 .\n\\]\n\n--------------------------------------------------------------------\n\n**Step 6 \u2013  total number of fillings**\n\n\\[\n\\boxed{T = N\\cdot (3!)^{9}=94\\,080\\cdot 10\\,077\\,696\n      = 948\\,109\\,639\\,680 }.\n\\]\n\nFactorising,\n\n\\[\nT = 2^{16}\\cdot 3^{10}\\cdot 5\\cdot 7^{2}.\n\\]\n\n--------------------------------------------------------------------\n\n**Step 7 \u2013  computing the required sum**\n\nTake \\(p=2,\\;q=3,\\;r=5,\\;s=7\\) with exponents\n\\(a=16,\\;b=10,\\;c=1,\\;d=2\\). Then\n\n\\[\np\\!a+q\\!b+r\\!c+s\\!d\n=2\\cdot16+3\\cdot10+5\\cdot1+7\\cdot2\n=32+30+5+14=81 .\n\\]\n\n\\[\n\\boxed{81}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 81

    \n

    Extracted Answer: 81

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Overview**\n\nFor  \n\n\\[\nf(x)=\\frac{(x-18)(x-72)(x-98)(x-k)}{x},\\qquad x>0,\n\\]\n\nlet  \n\n\\[\nN(x)=(x-18)(x-72)(x-98)(x-k)=x^4-S_1x^3+S_2x^2-S_3x+S_4,\n\\]\n\nwhere  \n\n\\[\n\\begin{aligned}\nS_1&=18+72+98+k=188+k,\\\\[2pt]\nS_2&=18\\cdot72+18\\cdot98+72\\cdot98+ k(18+72+98)=10116+188k,\\\\[2pt]\nS_4&=18\\cdot72\\cdot98\\cdot k=127008\\,k .\n\\end{aligned}\n\\]\n\nThen  \n\n\\[\nf(x)=\\frac{N(x)}{x}=x^{3}-S_1x^{2}+S_2x-S_3+\\frac{S_4}{x},\n\\]\n\nand  \n\n\\[\nf'(x)=\\frac{3x^{4}-2S_1x^{3}+S_2x^{2}-S_4}{x^{2}} .\n\\]\n\nHence the critical points are the (positive) roots of  \n\n\\[\nP(x)=3x^{4}-2S_1x^{3}+S_2x^{2}-S_4=0\\tag{1}\n\\]\n\n(the denominator $x^{2}>0$ for $x>0$).\n\nBecause $f(x)\\to +\\infty$ as $x\\to0^{+}$ and as $x\\to\\infty$, the graph must\nfirst decrease, then increase, then decrease, and finally increase again.\nThus (1) has three positive roots:\n\n* $x_1$ \u2013 a local **minimum** in the first negative interval,\n* $x_2$ \u2013 a local **maximum** in the positive interval,\n* $x_3$ \u2013 a second local **minimum** in the last negative interval.\n\nThe global minimum is achieved at the lower of the two minima.\nFor the minimum to be attained **exactly at two points** we need  \n\n\\[\nf(x_1)=f(x_3)\\qquad(\\text{the two minima have the same value}).\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 1.  Translating the condition\n\nAt a critical point $x$ we have $f'(x)=0$, i.e. $P(x)=0$.\nFrom $f(x)=\\dfrac{N(x)}{x}$ and $P(x)=0$ it follows that  \n\n\\[\nf(x)=\\frac{N(x)}{x}=N'(x)\\qquad\\text{for any critical point}.\n\\tag{3}\n\\]\n\nThus (2) is equivalent to  \n\n\\[\nN'(x_1)=N'(x_3).\\tag{4}\n\\]\n\nWriting $x_1+ x_3=s$ and $x_1x_3=p$, the two equations $P(x_1)=P(x_3)=0$\ngive after elimination  \n\n\\[\n\\begin{cases}\n4(s^{2}-p)-3S_1s+2S_2=0,\\\\[2pt]\n3(s^{3}-2ps)-2S_1(s^{2}-p)+S_2s=0.\n\\end{cases}\\tag{5}\n\\]\n\nEquation (5) yields  \n\n\\[\n(2s-S_1)\\Bigl(3s(s-S_1)+2S_2\\Bigr)=0 .\n\\]\n\nHence either  \n\n\\[\n\\boxed{s=\\dfrac{S_1}{2}} \\qquad\\text{or}\\qquad\n3s^{2}-3S_1s+2S_2=0. \\tag{6}\n\\]\n\n--------------------------------------------------------------------\n### 2.  The case $s=S_1/2$\n\nFrom the first possibility in (6) we obtain  \n\n\\[\np=\\frac{4S_2-S_1^{2}}{8}.\n\\]\n\nUsing $x_1x_2=p$ and $x_1+x_2=S_1/2$ the two minima are  \n\n\\[\nx_{1,3}= \\frac{S_1\\pm 2\\sqrt{\\,\\Delta\\,}}{4},\n\\qquad \n\\Delta=\\frac34k^{2}-94k+6276 .\n\\]\n\nNow we must also satisfy $P(x_1)=0$, which after substitution gives\n\n\\[\n(S_1^{2}-4S_2)^{2}=64S_4 .\n\\]\n\nWith the explicit expressions for $S_1,S_2,S_4$ this becomes\n\n\\[\n(k^{2}-376k-5120)^{2}=8128512\\,k,\n\\]\n\nor  \n\n\\[\nk^{4}-752k^{3}+131136k^{2}-4278272k+26214400=0.\n\\tag{7}\n\\]\n\nFactoring (7) gives  \n\n\\[\n(k-8)(k-32)(k-200)(k-512)=0 .\n\\]\n\nFor a root to be admissible we need the two minima to lie in the\ntwo negative intervals of $f$.  \nThe left minimum equals  \n\n\\[\nx_1=\\frac{k+188-2\\sqrt{\\Delta}}{4},\n\\]\n\nwhich is **positive** only when  \n\n\\[\nk^{2}-376k-5120<0\\qquad\\Longleftrightarrow\\qquad k<389\\ldots .\n\\]\n\nThus $k=512$ is rejected, while $k=8,\\,32,\\,200$ are valid.\n\n--------------------------------------------------------------------\n### 3.  The second possibility in (6)\n\nThe alternative equation $3s^{2}-3S_1s+2S_2=0$ together with the condition\n$P(x_1)=0$ leads, after a completely analogous elimination, to the same\nquartic (7).  Its admissible positive solutions are again $8,32,200$,\nso no new $k$ appear.\n\n--------------------------------------------------------------------\n### 4.  Conclusion\n\nThe function $f$ has its global minimum attained at exactly two positive\npoints precisely for  \n\n\\[\nk\\in\\{8,\\;32,\\;200\\}.\n\\]\n\nTherefore the required sum is  \n\n\\[\n8+32+200 = \\boxed{240}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 240

    \n

    Extracted Answer: 240

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the four unit squares be  \n\n\\[\n\\begin{array}{cc}\nA& B\\\\\nC& D\n\\end{array}\n\\]\n\nand denote by  \n\n* \\(a=h_{0,1}\\)   \u2013 the middle horizontal segment between \\(A\\) and \\(C\\);  \n* \\(b=h_{1,1}\\)   \u2013 the middle horizontal segment between \\(B\\) and \\(D\\);  \n* \\(c=v_{1,0}\\)   \u2013 the middle vertical segment between \\(A\\) and \\(B\\);  \n* \\(d=v_{1,1}\\)   \u2013 the middle vertical segment between \\(C\\) and \\(D\\).\n\nThe eight outer unit\u2011segments are written as  \n\n\\[\n\\begin{aligned}\n&e_1=h_{0,0},\\qquad e_2=v_{0,0},\\\\\n&e_3=v_{2,0},\\qquad e_4=h_{1,0},\\\\\n&e_5=h_{0,2},\\qquad e_6=v_{0,1},\\\\\n&e_7=v_{2,1},\\qquad e_8=h_{1,2}.\n\\end{aligned}\n\\]\n\nAll variables take the value 1 for a red side and 0 for a blue side.\n\n--------------------------------------------------------------------\n### 1.  Equations for the squares  \n\nEach unit square must have exactly two red sides, so we obtain\n\n\\[\n\\begin{aligned}\nA:&\\;e_1+e_2+a+c=2, \\\\\nB:&\\;e_3+e_4+b+c=2, \\\\\nC:&\\;e_5+e_6+a+d=2, \\\\\nD:&\\;e_7+e_8+b+d=2 .\\qquad (1)\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 2.  Fix the interior edges  \n\nThe four interior edges \\(a,b,c,d\\) are independent; there are \\(2^4=16\\) possible\nchoices.\nFor a fixed quadruple \\((a,b,c,d)\\) the right\u2011hand side of each equation in (1)\nbecomes  \n\n\\[\ns_A=2-(a+c),\\; s_B=2-(b+c),\\; s_C=2-(a+d),\\; s_D=2-(b+d).\n\\]\n\nThe numbers \\(s_A,s_B,s_C,s_D\\) are the required sums of the two\nouter edges belonging to each square.\n\n*If \\(s_i=0\\) or \\(s_i=2\\):* the two outer edges are forced to be\n\\((0,0)\\) or \\((1,1)\\) \u2013 exactly **one** possibility.\n\n*If \\(s_i=1\\):* the outer edges must be \\((0,1)\\) or \\((1,0)\\) \u2013 **two**\npossibilities.\n\nHence, for a given \\((a,b,c,d)\\) the number of admissible colourings of the\nouter edges equals  \n\n\\[\n2^{\\,N},\\qquad N=\\#\\{i\\in\\{A,B,C,D\\}:s_i=1\\}.\n\\]\n\nBut \\(s_i=1\\) occurs precisely when the two interior edges of that square sum to\n\\(1\\); i.e.\n\n\\[\nN=[a\\neq c]+[b\\neq c]+[a\\neq d]+[b\\neq d],\\tag{2}\n\\]\n\nwhere \\([P]=1\\) if the statement \\(P\\) is true and \\(0\\) otherwise.\n\n--------------------------------------------------------------------\n### 3.  Summing over the interior edges  \n\nWrite the sum we need as  \n\n\\[\n\\sum_{a,b,c,d\\in\\{0,1\\}} 2^{[a\\neq c]+[b\\neq c]+[a\\neq d]+[b\\neq d]}.\n\\]\n\nFor fixed \\(a,b\\) the contributions of \\(c\\) and \\(d\\) factor:\n\n\\[\n\\bigl(\\sum_{c\\in\\{0,1\\}}2^{[a\\neq c]+[b\\neq c]}\\bigr)^2 .\n\\]\n\nNow compute the inner sum.\n\n*If \\(a=b\\) (either \\((0,0)\\) or \\((1,1)\\)):  \n\n\\[\nc=0\\!:\\;[a\\neq c]+[b\\neq c]=0,\\qquad\nc=1\\!:\\;[a\\neq c]+[b\\neq c]=2,\n\\]\nso the sum equals \\(2^{0}+2^{2}=1+4=5\\).\n\n*If \\(a\\neq b\\) (either \\((0,1)\\) or \\((1,0)\\)):  \n\n\\[\nc=0\\!:\\;[a\\neq c]+[b\\neq c]=1,\\qquad\nc=1\\!:\\;[a\\neq c]+[b\\neq c]=1,\n\\]\nso the sum equals \\(2^{1}+2^{1}=2+2=4\\).\n\nThus\n\n\\[\n\\begin{aligned}\n\\text{total}&=\n2\\bigl(5^2\\bigr)+2\\bigl(4^2\\bigr)        \\\\\n&=2\\cdot25+2\\cdot16\\\\\n&=50+32\\\\\n&=82 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Answer  \n\nThere are  \n\n\\[\n\\boxed{82}\n\\]\n\ndifferent colourings of the twelve unit segments such that each of the four\nunit squares has exactly two red sides and two blue sides.
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 82

    \n

    Extracted Answer: 82

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n* \\(O\\) be the centre of \\(\\omega _2\\) (radius \\(15\\)),\n* \\(A\\) be the centre of \\(\\omega _1\\) (radius \\(6\\)),\n* \\(B\\) the internal point of tangency.\n\nPlace \\(O\\) at the origin and take the diameter \\(BC\\) on the \\(x\\)-axis.\n\n\\[\nO=(0,0),\\qquad B=(15,0)\n\\]\n\nBecause \\(\\omega_1\\) is tangent internally at \\(B\\),\n\n\\[\nOA=15-6=9\\qquad\\Longrightarrow\\qquad A=(9,0).\n\\]\n\nSince \\(BC\\) is a diameter of \\(\\omega _2\\),\n\n\\[\nC=(-15,0).\n\\]\n\n\\(AD\\perp BC\\) forces \\(AD\\) to be vertical through \\(A\\); intersecting this line with \\(\\omega _2\\),\n\n\\[\nx=9,\\qquad x^{2}+y^{2}=225\\Longrightarrow y=\\pm 12 .\n\\]\n\nBecause the problem states that \\(D\\) is nearer to the side \\(FG\\) than to \\(EH\\), we take the point above the \\(x\\)-axis:\n\n\\[\nD=(9,12).\n\\]\n\n---------------------------------------------------------------------\n\n### 1.  The rectangle \\(EFGH\\)\n\n\\(EF\\perp BC\\); with \\(BC\\) horizontal this makes \\(EF\\) vertical, so the rectangle is axis\u2011aligned.\nLet its half\u2013width be \\(d>0\\) and its half\u2013height be \\(h>0\\).  \nSince the rectangle is inscribed in \\(\\omega _1\\) (centre \\(A\\)), its centre must coincide with \\(A\\).  \nThus the vertices are  \n\n\\[\n\\begin{aligned}\nE&=(9+d,\\,-h),  &F&=(9+d,\\,h),\\\\\nG&=(9-d,\\,h),   &H&=(9-d,\\,-h).\n\\end{aligned}\n\\]\n\nEach vertex lies on \\(\\omega _1\\):  \n\n\\[\n(x-9)^2+y^2=6^2\\quad\\Longrightarrow\\quad d^{\\,2}+h^{\\,2}=36. \\tag{1}\n\\]\n\n---------------------------------------------------------------------\n\n### 2.  Equality of the two triangle areas\n\n*Triangle \\(DGF\\)*  \nIts base \\(GF\\) is horizontal with length \\(2d\\); the height is the vertical distance from \\(D\\) to the line \\(y=h\\):\n\\[\n[\\,DGF\\,]=\\frac12\\cdot (2d)\\bigl(12-h\\bigr)=d(12-h).\n\\]\n\n*Triangle \\(CHG\\)*  \nIts base \\(GH\\) is vertical with length \\(2h\\); the height is the horizontal distance from \\(C\\) to the line \\(x=9-d\\):\n\\[\n[\\,CHG\\,]=\\frac12\\cdot (2h)\\bigl( (9-d)-(-15)\\bigr)=h(24-d).\n\\]\n\nThe condition \\([DGF]=[CHG]\\) gives  \n\n\\[\nd(12-h)=h(24-d)\\;\\Longrightarrow\\;12d=24h\\;\\Longrightarrow\\;d=2h. \\tag{2}\n\\]\n\n---------------------------------------------------------------------\n\n### 3.  Solving for \\(d\\) and \\(h\\)\n\nSubstituting \\(d=2h\\) into (1):\n\n\\[\n(2h)^2+h^{2}=36\\quad\\Longrightarrow\\quad5h^{2}=36\n\\quad\\Longrightarrow\\quad h^{2}=\\frac{36}{5},\\qquad \nh=\\frac{6}{\\sqrt5},\\qquad d=2h=\\frac{12}{\\sqrt5}.\n\\]\n\n---------------------------------------------------------------------\n\n### 4.  Area of the rectangle\n\n\\[\n\\text{Area}= (2d)(2h)=4dh=4(2h)h=8h^{2}=8\\cdot\\frac{36}{5}\n=\\frac{288}{5}.\n\\]\n\nThus the area equals \\(\\dfrac{m}{n}\\) with \\(m=288,\\;n=5\\) (coprime).  \n\n\\[\nm+n=288+5=293.\n\\]\n\n\\[\n\\boxed{293}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 293

    \n

    Extracted Answer: 293

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Factor  \n\n\\[\n2025=3^{4}\\cdot5^{2}.\n\\]\n\nA divisor of \\(2025\\) has the form \\(3^{a}5^{b}\\) with \\(0\\le a\\le4,\\ 0\\le b\\le2\\).  \nHence  \n\n\\[\n|A|=(4+1)(2+1)=15,\n\\qquad\\text{total subsets}=2^{15}=32768 .\n\\]\n\n---\n\n### When does a subset have lcm \\(=2025\\)?\n\nThe lcm of a set of divisors is \\(3^{\\max a}\\cdot5^{\\max b}\\).  \nThus the lcm equals \\(2025=3^{4}\\cdot5^{2}\\) **iff**\n\n* at least one element has exponent \\(a=4\\) (a divisor containing \\(3^{4}\\));\n* at least one element has exponent \\(b=2\\) (a divisor containing \\(5^{2}\\)).\n\n---\n\n### Counting the desired subsets  \n\nDivisors with \\(a=4\\): \\(3^{4}5^{b}\\ (b=0,1,2)\\) \u2013 3 of them.  \nDivisors with \\(b=2\\): \\(3^{a}5^{2}\\ (a=0,\\dots ,4)\\) \u2013 5 of them.  \n\nLet  \n\n* \\(X\\) = subsets containing **no** divisor with \\(a=4\\);  \n* \\(Y\\) = subsets containing **no** divisor with \\(b=2\\).\n\n\\[\n|X|=2^{12}\\quad (\\text{choose any of the other }12\\text{ divisors}),\\qquad\n|Y|=2^{10}\\quad (\\text{choose any of the other }10\\text{ divisors}).\n\\]\n\nDivisors lacking both \\(a=4\\) and \\(b=2\\) have \\(a\\le3,\\ b\\le1\\); there are \\(4\\cdot2=8\\) of them, so\n\n\\[\n|X\\cap Y|=2^{8}.\n\\]\n\nUsing inclusion\u2013exclusion, the number of subsets that contain **both** an \\(a=4\\) divisor and a \\(b=2\\) divisor is  \n\n\\[\nN = 2^{15} - 2^{12} - 2^{10} + 2^{8}\n    = 32768 - 4096 - 1024 + 256\n    = 27904 .\n\\]\n\nThese subsets are precisely the non\u2011empty subsets whose lcm equals \\(2025\\); the empty set is automatically excluded by the inclusion\u2013exclusion count.\n\n---\n\n### Probability\n\n\\[\n\\text{Probability} = \\frac{N}{2^{15}} = \\frac{27904}{32768}\n                     = \\frac{2^{8}\\cdot 109}{2^{15}}\n                     = \\frac{109}{128}.\n\\]\n\nThe fraction \\(\\frac{109}{128}\\) is already in lowest terms, so  \n\n\\[\nm=109,\\qquad n=128,\\qquad m+n=237.\n\\]\n\n\\[\n\\boxed{237}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 237

    \n

    Extracted Answer: 237

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\n\\text{chairs}=1,2,\\dots ,16,\\qquad 8\\ \\text{people sit in 8 of them.}\n\\]\n\nThe condition *no person sits next to two other people* means that no three\noccupied chairs are consecutive.  \nHence we must count binary strings of length \\(16\\) with exactly eight 1\u2019s\nand no substring \\(111\\).\n\n---\n\n### 1.  Blocks of occupied chairs  \n\nOccupied chairs appear in blocks of length \\(1\\) or \\(2\\) (a block of length\n\\(3\\) would give a person with two neighbours).  \n\nLet  \n\n* \\(t\\) = number of blocks of length \\(2\\);\n* \\(s\\) = number of blocks of length \\(1\\).\n\nThen  \n\n\\[\ns+2t=8,\\qquad r=s+t \\text{ (total number of blocks)} .\n\\]\n\nHence  \n\n\\[\nt=0,1,2,3,4,\\qquad r=8-t\\;(=8,7,6,5,4).\n\\]\n\nFor a fixed \\(t\\) (hence fixed \\(r\\)) we must choose which of the \\(r\\) blocks\nare the double ones:\n\n\\[\n\\text{ways to choose the double blocks}= \\binom{r}{t}= \\binom{r}{8-r}.\n\\]\n\n---\n\n### 2.  Placing the blocks among the empty chairs  \n\nThere are \\(16-8=8\\) empty chairs.  \nBetween the \\(r\\) blocks there must be at least one empty chair, using\n\\(r-1\\) chairs.  \n\nThe remaining empty chairs are  \n\n\\[\n8-(r-1)=9-r .\n\\]\n\nThese \\(9-r\\) chairs can be placed arbitrarily in the \\(r+1\\) gaps\n(before the first block, between successive blocks, after the last block).  \nBy stars\u2011and\u2011bars the number of ways is  \n\n\\[\n\\binom{(9-r)+(r+1)-1}{(r+1)-1}= \\binom{9}{r}.\n\\]\n\n---\n\n### 3.  Total number of admissible subsets  \n\n\\[\n\\begin{aligned}\nN&=\\sum_{t=0}^{4} \\binom{r}{t}\\binom{9}{r},\n\\qquad r=8-t \\\\\n  &=\\sum_{r=4}^{8}\\binom{r}{\\,8-r\\,}\\binom{9}{r}.\n\\end{aligned}\n\\]\n\nCompute each term:\n\n\\[\n\\begin{array}{c|c|c|c}\nr & \\binom{r}{8-r} & \\binom{9}{r} & \\text{product}\\\\ \\hline\n8 & 1 & 9   & 9\\\\\n7 & 7 & 36  & 252\\\\\n6 & 15& 84  & 1260\\\\\n5 & 10& 126 & 1260\\\\\n4 & 1 & 126 & 126\n\\end{array}\n\\]\n\nAdding them,\n\n\\[\nN = 9+252+1260+1260+126 = 2907.\n\\]\n\n---\n\n### 4.  Remainder modulo \\(1000\\)\n\n\\[\n2907 \\equiv 907 \\pmod{1000}.\n\\]\n\n\\[\n\\boxed{907}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 907

    \n

    Extracted Answer: 907

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    To solve  \n\n\\[\nf(x)=\\sin \\bigl(7\\pi \\,\\sin(5x)\\bigr)=0 ,\\qquad 0<x<2\\pi \n\\]\n\nlet  \n\n\\[\ng(x)=7\\pi\\sin(5x).\n\\]\n\nThen  \n\n\\[\nf(x)=\\sin(g(x))=0\\iff g(x)=k\\pi,\\;k\\in\\mathbb Z .\n\\]\n\nHence  \n\n\\[\n7\\pi\\sin(5x)=k\\pi\\Longrightarrow \\sin(5x)=\\frac{k}{7}.\n\\]\n\nBecause \\(|\\sin(5x)|\\le 1\\), the integer \\(k\\) can be  \n\\(-7\\le k\\le 7\\).\n\n---\n\n### 1. Counting the zeros (\\(n\\))\n\nPut \\(y=5x\\).  \nWhen \\(x\\) runs from \\(0\\) to \\(2\\pi\\), \\(y\\) runs from \\(0\\) to \\(10\\pi\\).\n\nFor a fixed value \\(c=\\frac{k}{7}\\) we count the solutions of \\(\\sin y=c\\) in the interval \\((0,10\\pi)\\).\n\n* **\\(c=0\\) \\;(i.e. \\(k=0\\)):**  \n  \\(\\sin y=0\\) \u21d2 \\(y=m\\pi\\).  \n  In \\((0,10\\pi)\\) we have \\(m=1,2,\\dots ,9\\) \u2192 **9 solutions**.\n\n* **\\(c=\\pm1\\) \\;(i.e. \\(k=\\pm7\\)):**  \n  \\(\\sin y=1\\) gives \\(y=\\frac{\\pi}{2}+2\\pi n\\)  \n  \\(\\sin y=-1\\) gives \\(y=\\frac{3\\pi}{2}+2\\pi n\\).  \n  For \\(n=0,1,2,3,4\\) each set yields 5 points \u2192 **5+5 = 10 solutions**.\n\n* **\\(c\\) with \\(|c|<1\\) and \\(c\\neq0\\) \\;(i.e. \\(k=\\pm1,\\dots ,\\pm6\\)):**  \n  For any such \\(c\\) there are two solutions per period of sine.  \n  The interval \\((0,10\\pi)\\) contains five full periods, so we obtain **\\(5\\times2=10\\) solutions** for each such \\(k\\).\n\nNow sum:\n\n\\[\n\\begin{aligned}\nn & =\\underbrace{9}_{k=0}\n   +\\underbrace{12\\times10}_{k=\\pm1,\\dots ,\\pm6}\n   +\\underbrace{10}_{k=\\pm7}\\\\[2mm]\n  & = 9+120+10 = 139 .\n\\end{aligned}\n\\]\n\nThus **\\(n=139\\)**.\n\n---\n\n### 2. When is the graph tangent to the \\(x\\)-axis? (\\(t\\))\n\nThe graph is tangent at a zero when the derivative also vanishes:\n\n\\[\nf'(x)=\\cos\\bigl(7\\pi\\sin(5x)\\bigr)\\cdot 35\\pi\\cos(5x)=0 .\n\\]\n\nAt the zeros we already have \\(\\sin(7\\pi\\sin(5x))=0\\), i.e. \\(7\\pi\\sin(5x)=k\\pi\\).  \nHence \\(\\cos\\bigl(7\\pi\\sin(5x)\\bigr)=\\cos(k\\pi)=(-1)^k\\neq0\\).\n\nConsequently \\(f'(x)=0\\) can only occur through \\(\\cos(5x)=0\\).\n\n\\[\n\\cos(5x)=0 \\Longrightarrow 5x=\\frac{\\pi}{2}+m\\pi\n            \\Longrightarrow x=\\frac{(2m+1)\\pi}{10},\\qquad m\\in\\mathbb Z .\n\\]\n\nWithin \\(0<x<2\\pi\\) we have \\(m=0,1,\\dots ,9\\), giving **10 distinct \\(x\\)** values.\n\nAt each of these points \\(\\sin(5x)=\\pm1\\), so \\(\\sin(7\\pi\\sin(5x))=\\sin(\\pm7\\pi)=0\\); thus they are indeed zeros, and because the derivative also vanishes the graph is tangent there.\n\nHence **\\(t=10\\)**.\n\n---\n\n### 3. Required sum\n\n\\[\nn+t = 139 + 10 = 149 .\n\\]\n\n\\[\n\\boxed{149}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 149

    \n

    Extracted Answer: 149

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Answer:** \\(\\boxed{637}\\)
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 735

    \n

    Extracted Answer: 637

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nx_i=A_1A_i\\qquad (i=2,3,\\ldots ,11),\\qquad \n\\theta=\\angle A_iA_1A_{i+1}\\;(2\\le i\\le10).\n\\]\n\n---\n\n### 1.  Using the area condition  \n\n\\[\n\\text{Area}\\bigl(A_iA_1A_{i+1}\\bigr)=\\frac12 x_i x_{i+1}\\sin\\theta =1 .\n\\]\n\nBecause \\(\\cos\\theta=\\dfrac{12}{13}\\),\n\n\\[\n\\sin\\theta=\\sqrt{1-\\Bigl(\\frac{12}{13}\\Bigr)^2}= \\frac{5}{13}.\n\\]\n\nThus  \n\n\\[\n\\frac12 x_i x_{i+1}\\cdot\\frac{5}{13}=1\n\\Longrightarrow x_i x_{i+1}=\\frac{26}{5}\\qquad (2\\le i\\le10).\n\\tag{1}\n\\]\n\nDenote \\(c=\\dfrac{26}{5}\\).  From (1) we have  \n\n\\[\nx_{i+1}= \\frac{c}{x_i}.\n\\]\n\nConsequently  \n\n\\[\nx_{i+2}=x_i\\qquad\\Longrightarrow\\qquad\n\\begin{cases}\nx_{2}=x_{4}=x_{6}=x_{8}=x_{10}=a,\\\\[2pt]\nx_{3}=x_{5}=x_{7}=x_{9}=x_{11}=b,\n\\end{cases}\n\\]\n\nwith  \n\n\\[\nab=c=\\frac{26}{5}. \\tag{2}\n\\]\n\nSo the distances from \\(A_1\\) alternate between two values \\(a\\) and \\(b\\).\n\n---\n\n### 2.  Length of each side \\(A_iA_{i+1}\\;(2\\le i\\le10)\\)\n\nIn \\(\\triangle A_iA_1A_{i+1}\\) the side opposite \\(\\theta\\) is \\(A_iA_{i+1}\\).\nBy the law of cosines\n\n\\[\nA_iA_{i+1}^2 = x_i^2+x_{i+1}^2-2x_ix_{i+1}\\cos\\theta .\n\\]\n\nBecause \\(x_i\\) and \\(x_{i+1}\\) are always one \\(a\\) and one \\(b\\),\n\n\\[\nA_iA_{i+1}^2 = a^2+b^2-2ab\\cdot\\frac{12}{13}.\n\\]\n\nHence all nine sides \\(A_iA_{i+1}\\;(i=2,\\dots ,10)\\) have the same length; denote\n\n\\[\nd^2=a^2+b^2-\\frac{24}{13}ab.\n\\tag{3}\n\\]\n\nWrite \\(s=a+b\\).  Using \\(ab=c\\),\n\n\\[\na^2+b^2=s^2-2ab=s^2-2c .\n\\]\n\nSubstituting into (3),\n\n\\[\nd^2=s^2-2c-\\frac{24}{13}c\n    =s^2-c\\Bigl(2+\\frac{24}{13}\\Bigr)\n    =s^2-\\frac{50}{13}c.\n\\]\n\nSince \\(c=\\dfrac{26}{5}\\),\n\n\\[\nd^2=s^2-\\frac{50}{13}\\cdot\\frac{26}{5}=s^2-20,\n\\qquad\\text{so}\\qquad d=\\sqrt{s^{2}-20}.\n\\tag{4}\n\\]\n\n---\n\n### 3.  Use the perimeter\n\nThe polygon has \\(11\\) sides: the two incident to \\(A_1\\) of lengths \\(a\\) and \\(b\\), and the nine equal sides of length \\(d\\).  \nGiven perimeter \\(20\\),\n\n\\[\na+b+9d=s+9\\sqrt{s^{2}-20}=20.\n\\tag{5}\n\\]\n\nSolve (5) for \\(s\\).\n\n\\[\n9\\sqrt{s^{2}-20}=20-s\\;(s\\le20).\n\\]\n\nSquare:\n\n\\[\n81(s^{2}-20)=(20-s)^{2}\n\\Longrightarrow 80s^{2}+40s-2020=0\n\\Longrightarrow 4s^{2}+2s-101=0.\n\\]\n\nHence\n\n\\[\ns=\\frac{-2\\pm\\sqrt{4+1616}}{8}\n   =\\frac{-2\\pm18\\sqrt5}{8}\n   =\\frac{-1\\pm9\\sqrt5}{4}.\n\\]\n\nOnly the positive root is admissible:\n\n\\[\n\\boxed{s=\\frac{9\\sqrt5-1}{4}}.\n\\]\n\nThus  \n\n\\[\nA_1A_2+A_1A_{11}=a+b=s=\\frac{9\\sqrt5-1}{4}\n      =\\frac{m\\sqrt n-p}{q},\n\\]\n\nwith \\(m=9,\\;n=5,\\;p=1,\\;q=4\\).\n\n---\n\n### 4.  Required sum\n\n\\[\nm+n+p+q=9+5+1+4=19.\n\\]\n\n\\[\n\\boxed{19}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 19

    \n

    Extracted Answer: 19

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFrom an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.\n\nIn general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Greedy representation**\n\nFor a value \\(N\\) let  \n\n\\[\nq=\\Big\\lfloor\\frac{N}{25}\\Big\\rfloor ,\\qquad \nr=N-25q\\;(0\\le r\\le 24).\n\\]\n\nAfter taking \\(q\\) quarters the greedy algorithm uses  \n\n\\[\na=\\Big\\lfloor\\frac{r}{10}\\Big\\rfloor ,\\qquad \nb=r-10a\\;(0\\le b\\le 9)\n\\]\n\ndimes and ones.  \nThus the greedy collection contains  \n\n\\[\nG(N)=q+a+b\n\\]\n\ncoins.\n\n--------------------------------------------------------------------\n\n**When can a better collection exist?**\n\nLet a different collection use \\(x\\) quarters and \\(y\\) dimes\n(\\(z\\) pennies fill the rest).  \nIts total number of coins is  \n\n\\[\nC=x+y+z = x+y+(N-25x-10y)=N-(24x+9y).\n\\]\n\nHence a representation is better than the greedy one iff it makes the\n\u201csaving\u201d\n\n\\[\nS=24x+9y\n\\]\n\nlarger than the greedy saving \\(S_G = 24q+9a\\).\n\nSuppose we start from the greedy solution and **remove** \\(d\\ge1\\) quarters\n(\\(d\\le q\\)).  \nThe value we free is \\(25d\\).\nWith this extra value we can add as many dimes as possible:\n\n\\[\ny' = a+\\Big\\lfloor\\frac{r+25d}{10}\\Big\\rfloor\n      = a+\\Big\\lfloor 2.5d+\\frac{b}{10}\\Big\\rfloor .\n\\]\n\nThe new saving is  \n\n\\[\nS'=24(q-d)+9y'\n   =24q+9a +\\bigl[-24d+9\\big\\lfloor2.5d+\\tfrac{b}{10}\\big\\rfloor\\bigr].\n\\]\n\nThus the new collection beats the greedy one precisely when  \n\n\\[\n-24d+9\\Big\\lfloor2.5d+\\frac{b}{10}\\Big\\rfloor >0\n\\qquad\\Longleftrightarrow\\qquad\n\\Big\\lfloor2.5d+\\frac{b}{10}\\Big\\rfloor \\ge\n\\Big\\lfloor\\frac{8}{3}d\\Big\\rfloor+1 .\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n\n**Only one quarter can ever help**\n\nFor even \\(d\\) we have \\(\\big\\lfloor2.5d\\big\\rfloor =2.5d\\) and\n\\(\\big\\lfloor\\frac{8}{3}d\\big\\rfloor =2.5d+\\big\\lfloor\\frac{d}{6}\\big\\rfloor\\).\nHence the left\u2013hand side of (1) never exceeds the right\u2013hand side,\nso even \\(d\\) never improves the greedy solution.\n\nFor odd \\(d=2k+1\\) we obtain  \n\n\\[\n\\Big\\lfloor2.5d+\\frac{b}{10}\\Big\\rfloor\n   =5k+2+{\\bf 1}_{\\{b\\ge5\\}},\\qquad\n\\Big\\lfloor\\frac{8}{3}d\\Big\\rfloor\n   =5k+2+\\Big\\lfloor\\frac{k+2}{3}\\Big\\rfloor .\n\\]\n\nConsequently  \n\n\\[\n\\Big\\lfloor2.5d+\\frac{b}{10}\\Big\\rfloor-\n\\Big\\lfloor\\frac{8}{3}d\\Big\\rfloor\n= {\\bf 1}_{\\{b\\ge5\\}}-\\Big\\lfloor\\frac{k+2}{3}\\Big\\rfloor .\n\\]\n\nThe right\u2011hand side is \\(\\ge 1\\) only when \\(k=0\\) (that is, \\(d=1\\))\nand \\(b\\ge5\\).\nThus the **only** way to improve upon the greedy solution is to\nreplace **exactly one** quarter and have \\(b\\ge5\\).\n\n--------------------------------------------------------------------\n\n**What does \\(b\\ge5\\) mean?**\n\nRecall \\(b\\) is the number of pennies left after taking all possible\nquarters and then all possible dimes.  Hence\n\n\\[\nb = N-25q-10a\\in\\{0,1,\\dots ,9\\}.\n\\]\n\nThe condition \\(b\\ge5\\) is equivalent to\n\n\\[\nN-25q\\equiv 5,6,7,8,9\\pmod{10},\n\\]\n\nor, more simply,\n\n\\[\nN\\equiv 5,6,7,8,9\\pmod{25}.\n\\]\n\nIf \\(q=0\\) (i.e. \\(N<25\\)) there is no quarter to replace, so the greedy\nalgorithm is always optimal for \\(1\\le N\\le24\\).\n\nHence **the greedy algorithm fails exactly for the numbers**\n\n\\[\nN\\ge 25 \\quad\\text{with}\\quad N\\equiv 5,6,7,8,9\\pmod{25}.\n\\]\n\n--------------------------------------------------------------------\n\n**Counting the successes**\n\nAll integers \\(1\\le N\\le1000\\): 1000 of them.\n\nNumbers that cause failure:\n\n* The residues \\(5,6,7,8,9\\) each occur\n  \\(\\bigl\\lfloor\\frac{1000-r}{25}\\bigr\\rfloor+1 = 40\\) times for\n  \\(r=5,6,7,8,9\\).\n  Hence \\(5\\times40=200\\) such numbers in \\([1,1000]\\).\n\n* The five smallest ones, \\(5,6,7,8,9\\), are \\(<25\\); they do **not**\n  cause failure because no quarter can be replaced.\n\nThus the genuine failures are \\(200-5 = 195\\) numbers.\n\nConsequently the number of values for which the greedy algorithm\nsucceeds is  \n\n\\[\n1000-195 = 805.\n\\]\n\n\\[\n\\boxed{805}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 610

    \n

    Extracted Answer: 805

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the vertices of the regular \\(24\\)-gon be labelled  \n\n\\[\n0,1,2,\\dots ,23\\qquad (\\text{mod }24).\n\\]\n\nIf a segment connects vertex \\(i\\) to vertex \\(j\\) then its length is determined only by the\nstep  \n\n\\[\nk\\equiv j-i\\pmod{24},\\qquad 1\\le k\\le 12 .\n\\]\n\nAll \\(12\\) segments must have the same length, therefore they all have the same step \\(k\\) (the\nstep \\(24-k\\) gives the same length, so it is enough to consider \\(k=1,2,\\dots ,12\\)).\n\n--------------------------------------------------------------------\n### 1.  The graph for a fixed step \\(k\\)\n\nFor a fixed \\(k\\) join each vertex \\(i\\) with the two vertices\n\\(i\\pm k\\).  The resulting graph \\(G_k\\) is a union of cycles:\n\n* Let \\(d=\\gcd(k,24)\\).\n* Each cycle has length \\(\\displaystyle L=\\frac{24}{d}\\) and there are \\(d\\) such\n  cycles.\n\nIndeed the permutation \\(i\\mapsto i+k\\) on \\(\\{0,\\dots ,23\\}\\) consists of\n\\(d\\) cycles of length \\(L\\).\n\n--------------------------------------------------------------------\n### 2.  Perfect matchings of \\(G_k\\)\n\nA required drawing is a perfect matching of \\(G_k\\).\n\n* If a cycle has even length, it has exactly **2** perfect matchings\n  (alternating edges).\n* If a cycle has odd length, a perfect matching does **not** exist.\n* The only exceptional case is \\(k=12\\); then each vertex has only one\n  neighbour (its opposite) and the whole graph is already a perfect\n  matching.\n\nThus, for \\(k\\neq 12\\),\n\n\\[\n\\text{# matchings for }G_k=\n\\begin{cases}\n2^{\\,d} & \\text{if }L\\text{ is even},\\\\[2mm]\n0       & \\text{if }L\\text{ is odd}.\n\\end{cases}\n\\]\n\nSince \\(L\\) is odd exactly when \\(L=3\\), i.e. when \\(d=8\\) (the only such\n\\(k\\) is \\(k=8\\)), we have\n\n\\[\nN(k)=\n\\begin{cases}\n2^{\\gcd(k,24)} & \\gcd(k,24)\\neq 8,\\;k\\neq 12,\\\\[2mm]\n0 & k=8,\\\\[2mm]\n1 & k=12 .\n\\end{cases}\n\\]\n\n--------------------------------------------------------------------\n### 3.  Evaluate for \\(k=1,\\dots ,12\\)\n\n\\[\n\\begin{array}{c|c|c|c}\nk & \\gcd(k,24) & \\text{cycles} & N(k)\\\\ \\hline\n1 & 1 & 1\\ \\text{cycle of length }24 & 2\\\\\n2 & 2 & 2\\ \\text{cycles of length }12 & 4\\\\\n3 & 3 & 3\\ \\text{cycles of length }8  & 8\\\\\n4 & 4 & 4\\ \\text{cycles of length }6  & 16\\\\\n5 & 1 & 1\\ \\text{cycle of length }24 & 2\\\\\n6 & 6 & 6\\ \\text{cycles of length }4  & 64\\\\\n7 & 1 & 1\\ \\text{cycle of length }24 & 2\\\\\n8 & 8 & 8\\ \\text{cycles of length }3  & 0\\\\\n9 & 3 & 3\\ \\text{cycles of length }8  & 8\\\\\n10& 2 & 2\\ \\text{cycles of length }12 & 4\\\\\n11& 1 & 1\\ \\text{cycle of length }24 & 2\\\\\n12&12 & 12\\ \\text{edges (pairs)}       & 1\n\\end{array}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Sum over all possible lengths\n\n\\[\n\\begin{aligned}\n\\sum_{k=1}^{12} N(k)\n&=2+4+8+16+2+64+2+0+8+4+2+1\\\\\n&=113 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{113}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 113

    \n

    Extracted Answer: 113

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For a base \\(b>9\\),\n\n\\[\n17_{b}=1\\cdot b+7=b+7 ,\\qquad   \n97_{b}=9\\cdot b+7=9b+7 .\n\\]\n\nWe need  \n\n\\[\nb+7 \\mid 9b+7 .\n\\]\n\nLet \\(d=b+7\\;(>0)\\). Then \\(b=d-7\\) and\n\n\\[\n9b+7 = 9(d-7)+7 = 9d-56 .\n\\]\n\nHence  \n\n\\[\nd \\mid (9d-56) \\Longrightarrow d\\mid 56 .\n\\]\n\nSo \\(d\\) must be a positive divisor of \\(56\\).  \nSince \\(b>9\\), we have \\(d=b+7>9+7=16\\).  \nThe divisors of \\(56\\) larger than \\(16\\) are\n\n\\[\nd=28,\\;56 .\n\\]\n\nCorresponding bases are  \n\n\\[\nb=d-7:\n\\begin{cases}\nd=28 \\Rightarrow b=21,\\\\[2mm]\nd=56 \\Rightarrow b=49.\n\\end{cases}\n\\]\n\nBoth satisfy \\(b>9\\) and indeed  \n\n\\[\n\\frac{9b+7}{b+7}=7\\;(b=21),\\qquad \n\\frac{9b+7}{b+7}=8\\;(b=49).\n\\]\n\nThus the integer bases are \\(b=21\\) and \\(b=49\\). Their sum is  \n\n\\[\n21+49=70.\n\\]\n\n\\[\n\\boxed{70}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 70

    \n

    Extracted Answer: 70

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Overview**\n\nThe circle through the midpoints \\(D,E,F\\) of the sides of \\(\\triangle ABC\\) is the **nine\u2011point circle** of \\(\\triangle ABC\\).\nHence  \n\n* \\(D,E,F\\) are the vertices of the medial triangle,\n* \\(\\angle D= \\angle A=84^{\\circ},\\ \\angle E= \\angle B=60^{\\circ},\\ \\angle F=\\angle C=36^{\\circ}\\).\n\nSince the nine\u2011point circle is the circumcircle of \\(\\triangle DEF\\),\n\n\\[\n\\widehat{DE}=2\\angle F=2\\cdot 36^{\\circ}=72^{\\circ}.\n\\tag{1}\n\\]\n\nWe must also determine the arcs \\(\\widehat{FG}\\) and \\(\\widehat{HJ}\\).\n\n---------------------------------------------------------------------\n\n### 1.  The arc \\(\\widehat{FG}\\)\n\n\\(G\\) is the second intersection of the median \\(BD\\) with the nine\u2011point circle.\nAt point \\(D\\) the chord \\(DG\\) lies on the line \\(BD\\), while the chord \\(DF\\) is parallel to side \\(AC\\) (mid\u2011segment theorem).\n\nTherefore  \n\n\\[\n\\angle FDG=\\angle(\\text{line } DF,\\text{line } DG)\n          =\\angle(\\,AC ,\\,BD\\,).\n\\]\n\nThe angle between side \\(AC\\) and the median from \\(B\\) can be read directly from the triangle:\n\\( \\angle(\\,AC ,\\,BD\\,)=\\angle C=36^{\\circ}\\).\n\nConsequently  \n\n\\[\n\\widehat{FG}=2\\angle FDG=2\\cdot36^{\\circ}=72^{\\circ}.\n\\tag{2}\n\\]\n\n---------------------------------------------------------------------\n\n### 2.  The arc \\(\\widehat{HJ}\\)\n\n\\(H\\) and \\(J\\) are the second intersections of the sides \\(AC\\) and \\(AB\\) with the nine\u2011point circle.\nThus the two secants through the exterior point \\(A\\) intersect the circle at the pairs \\(\\{F,J\\}\\) and \\(\\{E,H\\}\\).\n\nFor an exterior point the angle formed by two secants equals half the **difference** of the intercepted arcs:\n\n\\[\n\\angle BAC=\\frac12\\bigl(\\widehat{JH}-\\widehat{FE}\\bigr).\n\\tag{3}\n\\]\n\nWe already know the arc \\(\\widehat{FE}\\) of the nine\u2011point circle:\n\\[\n\\widehat{FE}=2\\angle D =2\\cdot 84^{\\circ}=168^{\\circ}.\n\\tag{4}\n\\]\n\nPlugging \\(\\angle BAC=84^{\\circ}\\) and (4) into (3) gives  \n\n\\[\n84^{\\circ}=\\frac12\\bigl(\\widehat{JH}-168^{\\circ}\\bigr)\n\\Longrightarrow \\widehat{JH}=336^{\\circ}.\n\\]\n\nThe **minor** arc \\(HJ\\) is the complement of \\(336^{\\circ}\\) on the circle:\n\n\\[\n\\widehat{HJ}=360^{\\circ}-336^{\\circ}=24^{\\circ}.\n\\tag{5}\n\\]\n\n---------------------------------------------------------------------\n\n### 3.  Computing the required sum\n\nFrom (1), (2) and (5)\n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n&=72^{\\circ}+2\\cdot24^{\\circ}+3\\cdot72^{\\circ}  \\\\\n&=72^{\\circ}+48^{\\circ}+216^{\\circ}\\\\\n&=336^{\\circ}.\n\\end{aligned}\n\\]\n\n---------------------------------------------------------------------\n\n\\[\n\\boxed{336}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 336

    \n

    Extracted Answer: 336

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The nine players are distinct, so for a given triple \\((c,v,s)\\) (numbers of chocolate, vanilla, and strawberry cones) the number of assignments is  \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\nWe must count all triples of positive integers satisfying  \n\n\\[\nc+v+s = 9,\\qquad c>v>s\\ge 1 .\n\\]\n\n---\n\n### Find the possible triples \\((c,v,s)\\)\n\nBecause the three numbers are distinct and sum to 9, we list the partitions of 9 into three distinct positive parts:\n\n\\[\n\\begin{aligned}\n9 &= 6+2+1,\\\\\n9 &= 5+3+1,\\\\\n9 &= 4+3+2 .\n\\end{aligned}\n\\]\n\nThese are the only triples with strict descending order, so  \n\n\\[\n(c,v,s) \\in \\{(6,2,1),\\;(5,3,1),\\;(4,3,2)\\}.\n\\]\n\n---\n\n### Count assignments for each triple\n\n\\[\n\\begin{aligned}\n(6,2,1):\\quad &\\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[4pt]\n(5,3,1):\\quad &\\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[4pt]\n(4,3,2):\\quad &\\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\n---\n\n### Total number of assignments\n\n\\[\nN = 252 + 504 + 1260 = 2016.\n\\]\n\n---\n\n### Remainder modulo \\(1000\\)\n\n\\[\n2016 \\equiv 16 \\pmod{1000}.\n\\]\n\n\\[\n\\boxed{16}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 16

    \n

    Extracted Answer: 16

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1.  What determines the number of regions?**  \n\nIf we draw line\u2011segments in a disc and no three of them meet in a common interior point, then each new segment splits one existing region for every interior intersection it makes, plus one more region for the segment itself.  \nHence  \n\n\\[\n\\#\\text{regions}=1+(\\#\\text{segments})+(\\#\\text{interior intersection points}).\n\\]\n\nWe have  \n\n* 2 diameters,\n* 25 random chords,\n* total segments \\(=27\\).\n\nSo we need the **expected number of interior intersections**.\n\n---------------------------------------------------------------------\n\n**Step 2.  Intersections that are certain**\n\nThe two diameters intersect at the centre \u21d2 one interior intersection.\n\n---------------------------------------------------------------------\n\n**Step 3.  Intersections of a chord with the diameters**\n\nA chord is drawn by picking two points on the circle that lie in **different quadrants**.\n\n*If the two quadrants are adjacent* (e.g. quadrant\u202fI and\u202fII), the chord crosses **exactly one** diameter.  \n*If the two quadrants are opposite* (e.g. quadrant\u202fI and\u202fIII), the chord crosses **both** diameters.\n\nThe unordered pair of distinct quadrants is uniformly chosen among the \\(\\binom{4}{2}=6\\) possibilities:\n\n* 4 adjacent pairs\u2003\u2192\u2003probability \\(4/6=2/3\\);\n* 2 opposite pairs\u2003\u2192\u2003probability \\(2/6=1/3\\).\n\nHence for one random chord\n\n\\[\nE[\\hbox{diameter\u2011intersections}]\n  =\\frac23\\cdot1+\\frac13\\cdot2=\\frac43 .\n\\]\n\nFor the 25 chords  \n\n\\[\nE[I_{\\text{chord\u2013diameter}}]=25\\cdot\\frac43=\\frac{100}{3}.\n\\]\n\n---------------------------------------------------------------------\n\n**Step 4.  Intersections between two random chords**\n\nLet the two chords be \\(AB\\) and \\(CD\\).  \nWrite \\(L\\) for the clockwise length of the arc from \\(A\\) to \\(B\\) (so \\(0\\le L\\le2\\pi\\)).  \nLet \\(L_i^{(1)}\\) be the length of that arc inside quadrant \\(i\\) (\\(i=1,\\dots ,4\\)), and\n\\(L_i^{(2)}=\\frac{\\pi}{2}-L_i^{(1)}\\) the length of the complementary arc inside the same quadrant.\n\nFor a given chord \\(AB\\)\n\n* the probability that a random chord \\(CD\\) meets \\(AB\\) **and** has its endpoints in different quadrants is  \n\n\\[\np_{\\text{int}}(A,B)=\n\\frac{L(2\\pi-L)-\\displaystyle\\sum_{i=1}^{4}L_i^{(1)}L_i^{(2)}}{2\\pi^{2}} .\n\\tag{1}\n\\]\n\n(The numerator is the area of the product set\n\\(\\{(C,D):C\\in\\text{arc}_1,D\\in\\text{arc}_2\\}\\) minus the part where \\(C\\) and \\(D\\) fall in the same quadrant.)\n\nDefine  \n\n\\[\nQ(A,B)=L(2\\pi-L)-\\sum_{i=1}^{4}L_i^{(1)}L_i^{(2)} .\n\\]\n\nThen \\(p_{\\text{int}}(A,B)=Q(A,B)/(2\\pi^{2})\\).\n\n---------------------------------------------------------------------\n\n**Step 5.  Averaging \\(Q\\)**  \n\nPut the circle\u2019s total length as \\(4d\\) with a quadrant length \\(d=\\pi/2\\).\nWrite the clockwise length as a multiple of \\(d\\): \\(t=L/d\\in[0,4]\\).\n\nFor a fixed \\(t\\) and a uniformly random starting point of the arc,\nthe expected value of \\(\\sum_i (L_i^{(1)})^{2}\\) (the sum of squares of the pieces of the arc) is\n\n\\[\nh(t)=\n\\begin{cases}\nt^{2}-\\dfrac{t^{3}}{3}, & 0\\le t\\le 1,\\\\[4pt]\nt-\\dfrac13,               & 1\\le t\\le 4 .\n\\end{cases}\n\\]\n\nConsequently  \n\n\\[\nE\\!\\left[\\sum_i L_i^{(1)}L_i^{(2)}\\right]\n      =\\frac{\\pi}{2}E[L]-E\\!\\left[\\sum_i(L_i^{(1)})^{2}\\right]\n      =\\frac{\\pi^{2}}{2}-\\frac{27\\pi^{2}}{64}\n      =\\frac{5\\pi^{2}}{64}.\n\\]\n\nFrom this we obtain the unconditional expectation\n\n\\[\nE[Q]=E\\!\\bigl[L(2\\pi-L)\\bigr]-E\\!\\Bigl[\\sum_i L_i^{(1)}L_i^{(2)}\\Bigr]\n      =\\frac{2}{3}\\pi^{2}-\\frac{5}{64}\\pi^{2}\n      =\\frac{113}{192}\\pi^{2}.\n\\tag{2}\n\\]\n\n---------------------------------------------------------------------\n\n**Step 6.  Conditioning on \u201cdifferent quadrants\u2019\u2019 for the first chord**\n\nIf the first chord\u2019s endpoints lie in the *same* quadrant (probability \\(1/4\\)),\nthen \\(Q\\) simplifies to \\(Q=\\frac{3\\pi}{2}L\\).  \nBecause the absolute difference of two points inside a quadrant has mean \\(d/3=\\pi/6\\),\n\n\\[\nE[Q\\mid\\text{same quadrant}]=\\frac{3\\pi}{2}\\cdot\\frac{\\pi}{6}\n                              =\\frac{\\pi^{2}}{4}.\n\\]\n\nHence  \n\n\\[\nE[Q\\;{\\bf 1}_{\\text{different quadrants}}]\n   =E[Q]-\\frac14\\cdot\\frac{\\pi^{2}}{4}\n   =\\frac{113}{192}\\pi^{2}-\\frac{\\pi^{2}}{16}\n   =\\frac{101}{192}\\pi^{2}. \\tag{3}\n\\]\n\n---------------------------------------------------------------------\n\n**Step 7.  Probability that two *valid* chords intersect**\n\nFrom (1) and (3),\n\n\\[\n\\boxed{\nP(\\text{intersection } \\&\\; AB\\text{ valid}\\; \\&\\; CD\\text{ valid})\n    =\\frac{E[Q\\,{\\bf 1}_{\\text{different quadrants}}]}{2\\pi^{2}}\n    =\\frac{101}{384}.\n}\n\\]\n\nThe event \u201cboth chords are valid\u2019\u2019 occurs with probability \\((3/4)^{2}=9/16\\).  \nTherefore the conditional probability that two random valid chords intersect is\n\n\\[\nP_{\\text{int}}=\n\\frac{101/384}{9/16}= \\frac{101}{216}\\approx0.4676.\n\\tag{4}\n\\]\n\n---------------------------------------------------------------------\n\n**Step 8.  Expected number of chord\u2013chord intersections**\n\n\\[\nE[I_{\\text{chord\u2013chord}}]\n   =\\binom{25}{2}\\;P_{\\text{int}}\n   =300\\cdot\\frac{101}{216}\n   =\\frac{2525}{18}.\n\\]\n\n---------------------------------------------------------------------\n\n**Step 9.  Total expected interior intersections**\n\n\\[\n\\begin{aligned}\nE[I] &=\n\\underbrace{1}_{\\text{diameters}}+\n\\underbrace{\\frac{100}{3}}_{\\text{chord\u2013diameter}}+\n\\underbrace{\\frac{2525}{18}}_{\\text{chord\u2013chord}} \\\\[4pt]\n&= \\frac{18+600+2525}{18}\n   =\\frac{3143}{18}.\n\\end{aligned}\n\\]\n\n---------------------------------------------------------------------\n\n**Step 10.  Expected number of regions**\n\n\\[\n\\begin{aligned}\nE[\\#\\text{regions}]\n&=1+(\\#\\text{segments})+E[I] \\\\\n&=1+27+\\frac{3143}{18}\\\\[4pt]\n&=28+\\frac{3143}{18}\n   =\\frac{504+3143}{18}\n   =\\boxed{\\frac{3647}{18}}\\; \\approx 202.6 .\n\\end{aligned}\n\\]\n\nThus, on average Alex\u2019s 27 line segments partition the disk into \\(\\displaystyle \\frac{3647}{18}\\) regions.
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 204

    \n

    Extracted Answer: None

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\n---\n\n### 1.  Factor the quadratic  \n\nLook for integers \\(a,b,c,d\\) such that  \n\n\\[\n(ax+by)(cx+dy)=12x^{2}-xy-6y^{2}.\n\\]\n\nWe need  \n\n\\[\nac=12,\\qquad bd=-6,\\qquad ad+bc=-1 .\n\\]\n\nTaking \\(a=4,\\;c=3\\) (since \\(4\\cdot 3=12\\)) and trying \\(b=-3,\\;d=2\\) gives  \n\n\\[\nbd=(-3)(2)=-6,\\qquad ad+bc=4\\cdot2+3\\cdot(-3)=8-9=-1.\n\\]\n\nHence  \n\n\\[\n12x^{2}-xy-6y^{2}=(4x-3y)(3x+2y).\n\\]\n\nSo the original equation is equivalent to  \n\n\\[\n(4x-3y)(3x+2y)=0.\n\\]\n\nThus any integer solution must satisfy one of the two linear equations  \n\n\\[\n\\boxed{4x-3y=0}\\qquad\\text{or}\\qquad\\boxed{3x+2y=0}.\n\\]\n\n---\n\n### 2.  Solve each linear equation in integers  \n\n**(i) \\(4x-3y=0\\).**  \n\n\\(4x=3y\\Rightarrow y= \\frac{4}{3}x\\).  \nSince \\(\\gcd(4,3)=1\\), write \\(x=3k,\\;y=4k\\) for some integer \\(k\\).\n\nBoth coordinates must satisfy \\(-100\\le x,y\\le 100\\):\n\n\\[\n-100\\le 3k\\le 100 \\Longrightarrow -\\frac{100}{3}\\le k\\le \\frac{100}{3},\n\\qquad\n-100\\le 4k\\le 100 \\Longrightarrow -25\\le k\\le 25.\n\\]\n\nThe tighter bound is \\(-25\\le k\\le 25\\).  \nHence there are  \n\n\\[\n25-(-25)+1 = 51\n\\]\n\nsolutions from this family.\n\n---\n\n**(ii) \\(3x+2y=0\\).**  \n\n\\(3x=-2y\\Rightarrow x=-\\frac{2}{3}y\\).  \nAgain \\(\\gcd(3,2)=1\\), so write \\(y=3m,\\;x=-2m\\) for some integer \\(m\\).\n\nBounds:\n\n\\[\n-100\\le -2m\\le 100 \\Longrightarrow -50\\le m\\le 50,\n\\qquad\n-100\\le 3m\\le 100 \\Longrightarrow -\\frac{100}{3}\\le m\\le \\frac{100}{3}\n\\Longrightarrow -33\\le m\\le 33.\n\\]\n\nThus \\(-33\\le m\\le 33\\), giving  \n\n\\[\n33-(-33)+1 = 67\n\\]\n\nsolutions from this family.\n\n---\n\n### 3.  Remove the double\u2011counted solution  \n\nThe two families intersect only when both equations hold, i.e. when  \n\n\\[\n4x-3y=0\\;\\text{and}\\;3x+2y=0\\Longrightarrow (x,y)=(0,0).\n\\]\n\nSo \\((0,0)\\) has been counted twice.  \n\nTotal distinct ordered pairs:\n\n\\[\n51+67-1 = 117.\n\\]\n\n---\n\n\\[\n\\boxed{117}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 117

    \n

    Extracted Answer: 117

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(0,c)\n\\]\n\nwith \\(\\angle A=90^{\\circ}\\) and \\(BC=38\\Rightarrow b^{2}+c^{2}=38^{2}=1444\\).\n\n---\n\n### 1.  Locating \\(K\\) and \\(L\\)\n\n\\(AK=BK=14\\).  \nThe circles \\(\\odot(A,14)\\) and \\(\\odot(B,14)\\) intersect at the interior point  \n\n\\[\nK=\\Bigl(\\frac b2,\\; \\sqrt{196-\\Bigl(\\frac b2\\Bigr)^2}\\Bigr).\n\\]\n\nSimilarly \\(AL=CL=14\\) gives  \n\n\\[\nL=\\Bigl(\\sqrt{196-\\Bigl(\\frac c2\\Bigr)^2},\\; \\frac c2\\Bigr).\n\\]\n\nSince \\(AK=AL=KL=14\\), points \\(A,K,L\\) form an equilateral triangle.\nPut  \n\n\\[\nK=(14\\cos\\theta,14\\sin\\theta),\\qquad \nL=(14\\cos(\\theta+60^\\circ),14\\sin(\\theta+60^\\circ)).\n\\]\n\nUsing \\(BK=14\\) and \\(CL=14\\),\n\n\\[\nb=28\\cos\\theta,\\qquad c=28\\sin(\\theta+60^\\circ). \\tag{1}\n\\]\n\n---\n\n### 2.  Determining \\(\\theta\\)\n\nFrom \\(b^2+c^2=1444\\),\n\n\\[\n\\cos^{2}\\theta+\\sin^{2}(\\theta+60^\\circ)=\\frac{1444}{28^{2}}\n        =\\frac{361}{196}=\\Bigl(\\frac{19}{14}\\Bigr)^{2}.\n\\]\n\nUsing \\(\\cos^2x=\\frac{1+\\cos2x}{2},\\ \\sin^2x=\\frac{1-\\cos2x}{2}\\),\n\n\\[\n\\frac{2+\\cos2\\theta-\\cos(2\\theta+120^\\circ)}2\n      =\\frac{361}{196}.\n\\]\n\nSimplifying gives  \n\n\\[\n\\cos2\\theta-\\cos(2\\theta+120^\\circ)=\\frac{165}{98}.\n\\]\n\nSince \\(\\cos A-\\cos B=-2\\sin\\frac{A+B}{2}\\sin\\frac{A-B}{2}\\),\n\n\\[\n\\sqrt3\\sin(2\\theta+60^\\circ)=\\frac{165}{98}\n   \\Longrightarrow \\sin(2\\theta+60^\\circ)=\\frac{55\\sqrt3}{98}.\n\\]\n\nHence  \n\n\\[\n\\cos(2\\theta+60^\\circ)=\\frac{23}{98},\\qquad \n\\sin(2\\theta+60^\\circ)=\\frac{55\\sqrt3}{98}.\n\\]\n\nLet \\(\\phi=2\\theta+60^\\circ\\). Then\n\n\\[\n\\cos\\phi=\\frac{23}{98},\\qquad \\sin\\phi=\\frac{55\\sqrt3}{98}.\n\\]\n\nCompute \\(\\cos(\\phi-60^\\circ)\\) and \\(\\cos(\\phi+60^\\circ)\\):\n\n\\[\n\\cos(\\phi-60^\\circ)=\\frac{47}{49},\\qquad\n\\cos(\\phi+60^\\circ)=-\\frac{71}{98}.\n\\]\n\nNow\n\n\\[\n\\cos\\theta=\\sqrt{\\frac{1+\\cos(\\phi-60^\\circ)}2}\n          =\\sqrt{\\frac{1+\\frac{47}{49}}2}\n          =\\sqrt{\\frac{48}{49}}=\\frac{4\\sqrt3}{7},\n\\]\n\n\\[\n\\sin(\\theta+60^\\circ)=\\sqrt{\\frac{1-\\cos(\\phi+60^\\circ)}2}\n                     =\\sqrt{\\frac{1+\\frac{71}{98}}2}\n                     =\\sqrt{\\frac{169}{196}}=\\frac{13}{14}.\n\\]\n\nUsing (1),\n\n\\[\nb=28\\cos\\theta=28\\cdot\\frac{4\\sqrt3}{7}=16\\sqrt3,\n\\qquad\nc=28\\sin(\\theta+60^\\circ)=28\\cdot\\frac{13}{14}=26.\n\\]\n\nThus  \n\n\\[\nAB=16\\sqrt3,\\qquad AC=26,\\qquad BC=38.\n\\]\n\nConsequently  \n\n\\[\nK=\\Bigl(\\frac{b}{2},\\sqrt{196-\\Bigl(\\frac b2\\Bigr)^2}\\Bigr)\n  =\\bigl(8\\sqrt3,\\;2\\bigr),\\qquad\nL=\\Bigl(\\sqrt{196-\\Bigl(\\frac c2\\Bigr)^2},\\frac c2\\Bigr)\n  =\\bigl(3\\sqrt3,\\;13\\bigr).\n\\]\n\n---\n\n### 3.  Area of \\(BKLC\\)\n\nUsing the shoelace formula for vertices  \n\n\\[\nB=(16\\sqrt3,0),\\; K=(8\\sqrt3,2),\\; L=(3\\sqrt3,13),\\; C=(0,26),\n\\]\n\n\\[\n\\begin{aligned}\n\\sum x_iy_{i+1}&=16\\sqrt3\\cdot2+8\\sqrt3\\cdot13+3\\sqrt3\\cdot26+0\\cdot0\\\\\n               &=214\\sqrt3,\\\\[2mm]\n\\sum y_ix_{i+1}&=0\\cdot8\\sqrt3+2\\cdot3\\sqrt3+13\\cdot0+26\\cdot16\\sqrt3\\\\\n               &=422\\sqrt3.\n\\end{aligned}\n\\]\n\nHence\n\n\\[\n\\text{Area}(BKLC)=\\frac12|214\\sqrt3-422\\sqrt3|=104\\sqrt3.\n\\]\n\n---\n\nThus the area of \\(BKLC\\) is \\(104\\sqrt3\\), so  \n\n\\[\n\\boxed{104}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 104

    \n

    Extracted Answer: 104

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the trapezoid have parallel sides (bases) \\(r\\) and \\(s\\) \\((r\\neq s)\\), the equal legs \\(L\\), and height \\(h\\).\n\n---\n\n### 1.  Height from the incircle  \n\nThe circle of radius \\(3\\) is tangent to the two parallel sides, so the distance between those sides equals the sum of the distances from the centre to each side:\n\n\\[\nh = 3+3 = 6 .\n\\]\n\n---\n\n### 2.  Sum of the bases from the area  \n\n\\[\n\\text{Area}= \\frac{r+s}{2}\\,h = 72\n\\quad\\Longrightarrow\\quad\n\\frac{r+s}{2}\\cdot 6 = 72 \\implies r+s = 24 .\n\\]\n\n---\n\n### 3.  Relation of the legs (tangential quadrilateral)  \n\nA quadrilateral has an incircle iff the sums of opposite sides are equal.  \nFor the trapezoid the opposite sides are the two bases and the two legs, so\n\n\\[\nr+s = L+L \\;\\Longrightarrow\\; L =\\frac{r+s}{2}=12 .\n\\]\n\nThus each leg has length \\(L=12\\).\n\n---\n\n### 4.  Difference of the bases from the leg length  \n\nBecause the trapezoid is isosceles, each leg together with the height forms a right triangle whose horizontal leg is \\(\\dfrac{|s-r|}{2}\\):\n\n\\[\nL^{2}=h^{2}+ \\left(\\frac{s-r}{2}\\right)^{2}.\n\\]\n\nInsert \\(L=12,\\;h=6\\):\n\n\\[\n12^{2}=6^{2}+ \\left(\\frac{s-r}{2}\\right)^{2}\n\\Longrightarrow 144-36 = \\left(\\frac{s-r}{2}\\right)^{2}\n\\Longrightarrow \\left(\\frac{s-r}{2}\\right)^{2}=108.\n\\]\n\nHence  \n\n\\[\n|s-r| = 2\\sqrt{108}=12\\sqrt3 .\n\\]\n\nAssume \\(s>r\\); then \\(s-r=12\\sqrt3\\).\n\n---\n\n### 5.  Solve for \\(r\\) and \\(s\\)\n\n\\[\n\\begin{cases}\nr+s = 24,\\\\\ns-r = 12\\sqrt3.\n\\end{cases}\n\\qquad\\Longrightarrow\\qquad\n\\begin{aligned}\ns &= 12+6\\sqrt3,\\\\\nr &= 12-6\\sqrt3.\n\\end{aligned}\n\\]\n\n---\n\n### 6.  Compute \\(r^{2}+s^{2}\\)\n\n\\[\n\\begin{aligned}\nr^{2}+s^{2} &= (12-6\\sqrt3)^{2}+(12+6\\sqrt3)^{2} \\\\\n&= \\bigl(144-144\\sqrt3+108\\bigr)+\\bigl(144+144\\sqrt3+108\\bigr) \\\\\n&= 252-144\\sqrt3+252+144\\sqrt3 \\\\\n&= 504.\n\\end{aligned}\n\\]\n\n---\n\n\\[\n\\boxed{504}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 504

    \n

    Extracted Answer: 504

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For an 8\u2011digit number using each of the digits \\(1,2,\\dots ,8\\) exactly once  \n\n\\[\n22=2\\cdot11\n\\]\n\nso the number must be divisible by \\(2\\) **and** by \\(11\\).\n\n---\n\n### 1.  Divisibility by \\(2\\)\n\nThe units digit must be even, i.e. one of \\(\\{2,4,6,8\\}\\).\n\n---\n\n### 2.  Divisibility by \\(11\\)\n\nFor an 8\u2011digit number \\(a_1a_2\\ldots a_8\\),\n\n\\[\n(a_1+a_3+a_5+a_7)-(a_2+a_4+a_6+a_8)\\equiv 0\\pmod{11}.\n\\]\n\nLet  \n\n\\[\nS_{\\text{odd}}=a_1+a_3+a_5+a_7,\\qquad \nS_{\\text{even}}=a_2+a_4+a_6+a_8 .\n\\]\n\nSince the digits \\(1\\) through \\(8\\) sum to \\(36\\),\n\n\\[\nS_{\\text{odd}}+S_{\\text{even}}=36\\qquad\\text{and}\\qquad \nS_{\\text{odd}}-S_{\\text{even}}\\equiv0\\pmod{11}.\n\\]\n\nThus  \n\n\\[\n2S_{\\text{odd}}\\equiv36\\equiv3\\pmod{11}\\Longrightarrow\nS_{\\text{odd}}\\equiv7\\pmod{11}.\n\\]\n\nThe possible values of \\(S_{\\text{odd}}\\) (sum of four distinct digits from \\(1\\)\u2013\\(8\\)) lie between \\(10\\) and \\(26\\).  \nThe only value in this interval congruent to \\(7\\pmod{11}\\) is \\(18\\).\n\nHence\n\n\\[\nS_{\\text{odd}}=S_{\\text{even}}=18 .\n\\]\n\nSo the four digits placed in the odd positions must sum to \\(18\\).\n\n---\n\n### 3.  4\u2011digit subsets with sum \\(18\\)\n\nAll 4\u2011element subsets of \\(\\{1,\\dots ,8\\}\\) whose sum is \\(18\\) are  \n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are exactly \\(8\\) such subsets.  \nEach contains **exactly two even digits** (the even digits are \\(2,4,6,8\\)).\n\n---\n\n### 4.  Arranging the digits\n\n* Choose one of the 8 subsets for the odd positions.\n* Permute its four digits among the odd places \\((1,3,5,7)\\) \u2013 \\(4! = 24\\) ways.\n* The remaining four digits occupy the even places \\((2,4,6,8)\\).  \n\n  The units place (position\u202f8) must be even.  \n  Since the complementary set also has exactly two even digits, we may\n  \\[\n  \\text{choose the even digit for position\u202f8 in }2\\text{ ways,}\n  \\]\n  then arrange the other three digits in positions \\(2,4,6\\) in \\(3! = 6\\) ways.\n\nHence for a given subset the number of valid permutations is  \n\n\\[\n24 \\times (2 \\times 6)=24 \\times 12 = 288 .\n\\]\n\nWith \\(8\\) possible subsets,\n\n\\[\nN = 8 \\times 288 = 2304 .\n\\]\n\n---\n\n### 5.  Required difference\n\n\\[\nN-2025 = 2304-2025 = 279 .\n\\]\n\n\\[\n\\boxed{279}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 279

    \n

    Extracted Answer: 279

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The first equation  \n\n\\[\n|25+20i-z|=5\n\\]\n\ndescribes the circle  \n\n\\[\n\\text{Center }C=(25,20),\\qquad\\text{radius }R=5 .\n\\]\n\nThe second equation  \n\n\\[\n|z-4-k|=|z-3i-k|\n\\]\n\nstates that the distance from \\(z\\) to the point  \n\n\\[\nA=4+k\\;(=k+4+0i)\n\\]\n\nequals its distance to the point  \n\n\\[\nB=3i+k\\;(=k+0i+3i).\n\\]\n\nHence the locus of points satisfying the second condition is the **perpendicular bisector** of the segment \\(\\overline{AB}\\).\n\n---\n\n### 1.  Equation of the perpendicular bisector\n\nCoordinates:\n\n\\[\nA=(k+4,0),\\qquad B=(k,3).\n\\]\n\nMidpoint  \n\n\\[\nM=\\Big(\\frac{k+4+k}{2},\\frac{0+3}{2}\\Big)=\\Big(k+2,\\frac32\\Big).\n\\]\n\nSlope of \\(\\overline{AB}\\):\n\n\\[\n\\frac{3-0}{k-(k+4)}=\\frac{3}{-4}=-\\frac34 .\n\\]\n\nTherefore the slope of the perpendicular bisector is the negative reciprocal,\n\n\\[\nm=\\frac{4}{3}.\n\\]\n\nUsing point\u2013slope form through \\(M\\):\n\n\\[\ny-\\frac32=\\frac{4}{3}(x-(k+2)).\n\\]\n\nMultiplying by \\(6\\),\n\n\\[\n6y-9=8x-8k-16\\qquad\\Longrightarrow\\qquad 8x-6y=8k+7.\n\\]\n\nThus the line is  \n\n\\[\nL:\\;8x-6y=8k+7 .\n\\]\n\n---\n\n### 2.  Tangency condition\n\nThe system has **exactly one** solution \\(z\\) when the line \\(L\\) is tangent to the circle.  \nThe distance from the center \\(C=(25,20)\\) to \\(L\\) must equal the radius \\(5\\).\n\nFor a line \\(Ax+By+C=0\\), the distance from \\((x_0,y_0)\\) is  \n\n\\[\nd=\\frac{|Ax_0+By_0+C|}{\\sqrt{A^2+B^2}} .\n\\]\n\nWrite \\(L\\) as \\(8x-6y-(8k+7)=0\\). Then\n\n\\[\nd=\\frac{|8\\cdot25-6\\cdot20-(8k+7)|}{\\sqrt{8^2+(-6)^2}}\n   =\\frac{|200-120-8k-7|}{\\sqrt{64+36}}\n   =\\frac{|73-8k|}{10}.\n\\]\n\nSet \\(d=R=5\\):\n\n\\[\n\\frac{|73-8k|}{10}=5 \\;\\Longrightarrow\\; |73-8k|=50 .\n\\]\n\nHence  \n\n\\[\n73-8k=50 \\quad\\text{or}\\quad 73-8k=-50.\n\\]\n\nSolving:\n\n\\[\n\\begin{aligned}\n73-8k=50 &\\Rightarrow 8k=23 \\Rightarrow k=\\frac{23}{8},\\\\[2mm]\n73-8k=-50 &\\Rightarrow 8k=123 \\Rightarrow k=\\frac{123}{8}.\n\\end{aligned}\n\\]\n\nBoth values give a line tangent to the circle, so the system has exactly one complex solution for each.\n\n---\n\n### 3.  Sum of all possible \\(k\\)\n\n\\[\n\\frac{23}{8}+\\frac{123}{8}=\\frac{146}{8}=\\frac{73}{4}.\n\\]\n\nWrite \\(\\frac{73}{4}\\) as \\(\\frac{m}{n}\\) with \\(\\gcd(m,n)=1\\); here \\(m=73,\\;n=4\\).\n\n\\[\nm+n=73+4=77.\n\\]\n\n\\[\n\\boxed{77}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 77

    \n

    Extracted Answer: 77

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The recurrence  \n\n\\[\nx_{k+1}= \\frac{1}{3}\\Bigl(x_k+\\frac{1}{x_k}-1\\Bigr)\n\\]\n\ncan be rewritten as  \n\n\\[\nx_{k+1}= \\frac{x_k^2-x_k+1}{3x_k}.\n\\]\n\n---\n\n### 1.  A convenient change of variables  \n\nDefine  \n\n\\[\nt_k=\\frac{2x_k-1}{x_k+1}\\qquad\\Longleftrightarrow\\qquad \nx_k=\\frac{b_k+a_k}{2b_k-a_k},\n\\]\n\nwhere \\(a_k,b_k\\) are integers defined below.  \n\nFrom the definition  \n\n\\[\nt_{k+1}=t_k\\bigl(t_k-1\\bigr),\\qquad t_1=\\frac{13}{12}.\n\\]\n\n---\n\n### 2.  Integer sequences  \n\nWrite \\(t_k=\\dfrac{a_k}{b_k}\\) in lowest terms.  \nFrom \\(t_{k+1}=t_k(t_k-1)\\) we obtain  \n\n\\[\na_{k+1}=a_k\\bigl(a_k-b_k\\bigr),\\qquad  \nb_{k+1}=b_k^2,\\qquad a_1=13,\\;b_1=12 .\n\\]\n\nThus  \n\n\\[\nb_k=12^{\\,2^{\\,k-1}} .\n\\]\n\nBecause \\(a_k\\) is always odd and not a multiple of \\(3\\), \\(\\gcd(a_k,b_k)=1\\) for all \\(k\\).\n\n---\n\n### 3.  Expressing \\(x_k\\)  \n\nUsing \\(x_k=\\dfrac{b_k+a_k}{2b_k-a_k}\\) we get  \n\n\\[\nm_k=b_k+a_k,\\qquad n_k=2b_k-a_k,\n\\]\nso that  \n\n\\[\nm_k+n_k = (b_k+a_k)+(2b_k-a_k)=3b_k .\n\\]\n\nHence for any \\(k\\),\n\n\\[\nm_k+n_k = 3\\cdot 12^{\\,2^{\\,k-1}} .\n\\]\n\n---\n\n### 4.  The required term  \n\nFor \\(k=2025\\),\n\n\\[\nm+n = 3\\cdot 12^{\\,2^{\\,2024}} .\n\\]\n\nWe need this number modulo \\(1000\\).\n\n---\n\n### 5.  Computing \\(3\\cdot12^{2^{2024}}\\pmod{1000}\\)\n\nSince \\(1000=8\\cdot125\\), work modulo \\(8\\) and \\(125\\).\n\n*Modulo\u202f8*:\u2003\\(12\\equiv4\\pmod8\\) and \\(4^2\\equiv0\\pmod8\\); with exponent \\(2^{2024}>1\\),\n\n\\[\n12^{2^{2024}}\\equiv0\\pmod8\\Longrightarrow\n3\\cdot12^{2^{2024}}\\equiv0\\pmod8 .\n\\]\n\n*Modulo\u202f125*:\u2003\\(\\gcd(12,125)=1\\), \\(\\phi(125)=100\\).  \nReduce the exponent modulo\u202f100:\n\n\\[\n2^{2024}\\equiv 2^{4}=16\\pmod{100}\n\\]\n(because \\(2^{2024}\\equiv16\\pmod{100}\\)).  \nHence  \n\n\\[\n12^{2^{2024}}\\equiv12^{16}\\pmod{125}.\n\\]\n\nCompute:\n\\[\n12^2\\equiv19,\\quad\n12^4\\equiv19^2\\equiv111,\\quad\n12^8\\equiv111^2\\equiv71,\\quad\n12^{16}\\equiv71^2\\equiv41\\pmod{125}.\n\\]\n\nThus  \n\n\\[\n3\\cdot12^{2^{2024}}\\equiv3\\cdot41=123\\pmod{125}.\n\\]\n\nNow solve  \n\n\\[\nR\\equiv0\\pmod8,\\qquad R\\equiv123\\pmod{125}.\n\\]\n\nWrite \\(R=125a+123\\). Mod\u202f8:\n\n\\[\n125a+123\\equiv5a+3\\equiv0\\pmod8\\Longrightarrow5a\\equiv5\\pmod8\n\\Longrightarrow a\\equiv1\\pmod8.\n\\]\n\nTake \\(a=1\\); then \\(R=125\\cdot1+123=248\\).\n\nHence  \n\n\\[\nm+n\\equiv 248 \\pmod{1000}.\n\\]\n\n---\n\n\\[\n\\boxed{248}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 248

    \n

    Extracted Answer: 248

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nAD=4,\\; DE=16,\\; EB=8,\\qquad AF=13,\\; FG=52,\\; GC=26 .\n\\]\n\nHence  \n\n\\[\nAB=4+16+8=28,\\qquad AC=13+52+26=91 .\n\\]\n\n--------------------------------------------------------------------\n### 1.  Coordinates\n\nPlace \\(A=(0,0),\\; B=(28,0)\\) and let the height of \\(\\triangle ABC\\) be \\(h\\).  \nWrite \\(C=(x,h)\\) (the \\(x\\)\u2011coordinate is unknown).\n\nPoints on the sides are then  \n\n\\[\n\\begin{aligned}\nD&=(4,0),   &E&=(20,0), \\\\\nF&=\\Bigl(\\frac{13}{91}x,\\;\\frac{13}{91}h\\Bigr), &\nG&=\\Bigl(\\frac{65}{91}x,\\;\\frac{65}{91}h\\Bigr).\n\\end{aligned}\n\\]\n\nSince \\(M\\) is the reflection of \\(D\\) about \\(F\\),\n\n\\[\nM=2F-D=\\Bigl(\\frac{26}{91}x-4,\\;\\frac{26}{91}h\\Bigr),\n\\]\n\nand because \\(N\\) is the reflection of \\(G\\) about \\(E\\),\n\n\\[\nN=2E-G=\\Bigl(40-\\frac{65}{91}x,\\;-\\frac{65}{91}h\\Bigr).\n\\]\n\n--------------------------------------------------------------------\n### 2.  Height from the given area\n\nQuadrilateral \\(DEGF\\) consists of triangles \\(DEG\\) and \\(DFG\\).  \nIts area is\n\n\\[\n\\begin{aligned}\n[DEGF]&=\\frac12\\Bigl[\\,DE\\cdot G_y\n      +|\\,\\overrightarrow{DF}\\times\\overrightarrow{DG}\\,|\\,\\Bigr]\\\\[2mm]\n     &=\\frac{h}{2\\cdot91}\\Bigl(16\\cdot65+4\\cdot52\\Bigr)\n      =\\frac{1248}{182}\\,h\n      =\\frac{624}{91}\\,h .\n\\end{aligned}\n\\]\n\nGiven \\([DEGF]=288\\),\n\n\\[\n\\frac{624}{91}\\,h=288\\quad\\Longrightarrow\\quad h=42 .\n\\]\n\n--------------------------------------------------------------------\n### 3.  Area of \\(\\triangle ABC\\)\n\n\\[\n[ABC]=\\frac12\\cdot AB\\cdot h\n      =\\frac12\\cdot28\\cdot42\n      =588 .\n\\]\n\n--------------------------------------------------------------------\n### 4.  Area of the heptagon \\(AFNBCEM\\)\n\nUse the shoelace formula with the vertices in the order  \n\n\\[\nA,\\;F,\\;N,\\;B,\\;C,\\;E,\\;M .\n\\]\n\nBecause the \\(x\\)-coordinate \\(x\\) of \\(C\\) appears only in the\nterms \\(x\\,h\\) and they cancel each other, the sum reduces to  \n\n\\[\n\\begin{aligned}\nS&=2\\bigl( -\\tfrac{2\\cdot13}{91} (4+16)h\n          + (4+16+8)h\n          + (4+16+8)h\n          - (4+16)h \\bigr) \\\\\n  &=2\\cdot 28h .\n\\end{aligned}\n\\]\n\nHence\n\n\\[\n[AFNBCEM]=\\frac12 S = \\frac12\\cdot28h = [ABC]=588 .\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{588}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 588

    \n

    Extracted Answer: 588

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The original parabola is  \n\n\\[\ny=x^{2}-4 .\n\\]\n\nRotate it \\(60^{\\circ}\\) counter\u2011clockwise about the origin.  \nIf \\((X,Y)\\) is a point on the rotated parabola, then rotating it back\n\\(60^{\\circ}\\) (clockwise) must put it on the original parabola:\n\n\\[\n\\begin{aligned}\nx &= X\\cos60^{\\circ}+Y\\sin60^{\\circ},\\\\\ny &=-X\\sin60^{\\circ}+Y\\cos60^{\\circ},\n\\end{aligned}\n\\qquad\\text{with }\\;y=x^{2}-4 .\n\\]\n\nUsing \\(\\cos60^{\\circ}= \\tfrac12,\\; \\sin60^{\\circ}= \\tfrac{\\sqrt3}{2}\\),\n\n\\[\n-\\,\\frac{\\sqrt3}{2}X+\\frac12Y= \\Bigl(\\frac12X+\\frac{\\sqrt3}{2}Y\\Bigr)^{2}-4 .\n\\tag{1}\n\\]\n\nThe original parabola gives \\(Y=X^{2}-4\\). Substituting this into (1) and\nclearing denominators yields\n\n\\[\n3X^{4}+2\\sqrt3\\,X^{3}-25X^{2}-6\\sqrt3\\,X+40=0 .\n\\tag{2}\n\\]\n\nThe quartic factors over \\(\\mathbb{Q}(\\sqrt3)\\):\n\n\\[\n\\bigl(X^{2}+\\sqrt3\\,X-4\\bigr)\\bigl(3X^{2}-\\sqrt3\\,X-10\\bigr)=0 .\n\\]\n\nHence the possible \\(X\\)-coordinates are the roots of the two quadratics.\n\n* From \\(X^{2}+\\sqrt3X-4=0\\) :\n\n\\[\nX=\\frac{-\\sqrt3\\pm\\sqrt{19}}{2}.\n\\]\n\nThe positive root is  \n\n\\[\nX_{0}= \\frac{-\\sqrt3+\\sqrt{19}}{2}\\approx1.31,\n\\]\n\nwhich satisfies \\(0<X<2\\); thus the point \\((X_{0},Y_{0})\\) lies in the\nfourth quadrant.\n\n* The other quadratic \\(3X^{2}-\\sqrt3X-10=0\\) gives \\(X\\approx2.14\\) or\n\\(X\\approx-1.56\\), neither of which lies in the fourth quadrant.\n\nTherefore the unique fourth\u2011quadrant intersection comes from\n\\(X_{0}\\).  For this root we have from the quadratic\n\n\\[\nX_{0}^{2}=4-\\sqrt3 X_{0},\n\\qquad\\text{so}\\qquad\nY_{0}=X_{0}^{2}-4=-\\sqrt3 X_{0}.\n\\]\n\nThus\n\n\\[\nY_{0}= -\\sqrt3\\left(\\frac{-\\sqrt3+\\sqrt{19}}{2}\\right)\n     =\\frac{3-\\sqrt{57}}{2}.\n\\]\n\nThe \\(y\\)-coordinate is \\(\\displaystyle\\frac{a-\\sqrt b}{c}\\) with  \n\n\\[\na=3,\\qquad b=57,\\qquad c=2.\n\\]\n\nSince \\(\\gcd(3,2)=1\\), the conditions are satisfied.  \n\n\\[\na+b+c=3+57+2=62.\n\\]\n\n\\[\n\\boxed{62}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 62

    \n

    Extracted Answer: 62

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nA piecewise linear periodic function is defined by $f(x)=\\begin{cases}x&\\text{if }x\\in[-1,1)\\\\2-x&\\text{if }x\\in[1,3)\\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\\frac{a+b\\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The periodic function  \n\n\\[\nf(x)=\\begin{cases}\nx,&x\\in[-1,1)\\\\[2pt]\n2-x,&x\\in[1,3)\n\\end{cases},\n\\qquad f(x+4)=f(x)\n\\]\n\nhas period \\(4\\).  \nOn each period write  \n\n\\[\nx=4k+u,\\qquad u\\in[-1,3),\\ k\\in\\mathbb Z .\n\\]\n\nThen  \n\n\\[\nf(x)=\\begin{cases}\nu, & u\\in[-1,1)\\\\[2pt]\n2-u,&u\\in[1,3)\n\\end{cases}.\n\\]\n\nThe parabola is \\(x=34y^{2}\\;(x\\ge 0,\\;|y|\\le 1)\\).  \nSet \\(x=34y^{2}=4k+u\\) with \\(u\\in[-1,3)\\).  \nThe integer \\(k\\) is uniquely determined by  \n\n\\[\n\\frac{34y^{2}-3}{4}<k\\le\\frac{34y^{2}+1}{4},\n\\]\n\nso for each \\(y\\) there is exactly one such \\(k\\).\n\n---\n\n### 1.  Rising part \\((u\\in[-1,1))\\)\n\nHere \\(y=u\\).  Hence  \n\n\\[\ny=34y^{2}-4k\\Longrightarrow 34y^{2}-y-4k=0.\n\\]\n\nFor a fixed \\(k\\) the two roots are  \n\n\\[\ny_{R,k}^{\\pm}= \\frac{1\\pm\\sqrt{1+544k}}{68},\n\\qquad k=0,1,\\dots ,8 .\n\\]\n\nBoth lie in \\([-1,1]\\) for all these \\(k\\).  \nEach pair sums to  \n\n\\[\ny_{R,k}^{+}+y_{R,k}^{-}= \\frac1{34}.\n\\]\n\nThus  \n\n\\[\n\\sum_{k=0}^{8}\\bigl(y_{R,k}^{+}+y_{R,k}^{-}\\bigr)=\\frac{9}{34}.\n\\]\n\n---\n\n### 2.  Falling part \\((u\\in[1,3))\\)\n\nHere \\(y=2-u\\).  Hence  \n\n\\[\ny=2-(34y^{2}-4k)\\Longrightarrow 34y^{2}+y-(4k+2)=0.\n\\]\n\nThe roots are  \n\n\\[\ny_{D,k}^{\\pm}= \\frac{-1\\pm\\sqrt{273+544k}}{68},\n\\qquad k=0,1,\\dots ,8 .\n\\]\n\nFor \\(k=0,\\dots ,7\\) both roots lie in \\([-1,1]\\); for \\(k=8\\) the\nnegative root is \\(<-1\\) and must be discarded.\nEach admissible pair sums to  \n\n\\[\ny_{D,k}^{+}+y_{D,k}^{-}= -\\frac1{34},\n\\]\n\nso for \\(k=0,\\dots ,7\\)\n\n\\[\n\\sum_{k=0}^{7}\\bigl(y_{D,k}^{+}+y_{D,k}^{-}\\bigr)= -\\frac{8}{34}\n= -\\frac{4}{17}.\n\\]\n\nThe remaining root (the positive one for \\(k=8\\)) is  \n\n\\[\ny_{D,8}^{+}= \\frac{-1+ \\sqrt{273+544\\cdot8}}{68}\n          = \\frac{-1+ \\sqrt{4625}}{68}\n          = \\frac{-1+5\\sqrt{185}}{68}.\n\\]\n\n---\n\n### 3.  Sum of all \\(y\\)-coordinates\n\nAdding the contributions,\n\n\\[\n\\begin{aligned}\nS &=\\frac{9}{34}-\\frac{4}{17}+\\frac{-1+5\\sqrt{185}}{68}\\\\[2pt]\n  &=\\frac{9}{34}-\\frac{8}{34}+\\frac{-1}{68}+\\frac{5\\sqrt{185}}{68}\\\\[2pt]\n  &=\\frac{1}{34}-\\frac{1}{68}+\\frac{5\\sqrt{185}}{68}\\\\[2pt]\n  &=\\frac{1+5\\sqrt{185}}{68}.\n\\end{aligned}\n\\]\n\nThus the sum can be written as \\(\\displaystyle\\frac{a+b\\sqrt{c}}{d}\\) with  \n\n\\[\na=1,\\qquad b=5,\\qquad c=185,\\qquad d=68,\n\\]\n\nwhere \\(\\gcd(a,b,d)=1\\) and \\(c\\) is square\u2011free.\n\nFinally  \n\n\\[\na+b+c+d=1+5+185+68=259.\n\\]\n\n\\[\n\\boxed{259}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 259

    \n

    Extracted Answer: 259

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The required sum is  \n\n\\[\n\\min_{X\\in \\mathbb {R}^2}\\bigl(AX+BX+CX+DX+EX\\bigr)\n=38+19\\sqrt{3}.\n\\]\n\nHence  \n\n\\[\nm=38,\\qquad n=19,\\qquad p=3,\n\\]\n\nand  \n\n\\[\nm+n+p=38+19+3=60.\n\\]\n\n\\[\n\\boxed{60}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 60

    \n

    Extracted Answer: 60

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 27 cells of a $3\\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. \n | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | \n | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | \n | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | \n The number of different ways to fill such a grid can be written as $p^a\\cdot q^b\\cdot r^c\\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\\cdot a+q\\cdot b+r\\cdot c+s\\cdot d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the rows be \\(R_{1},R_{2},R_{3}\\) and the three \\(3\\times3\\) blocks be\n\\(B_{1},B_{2},B_{3}\\) (columns \\(1\\!-\\!3,\\;4\\!-\\!6,\\;7\\!-\\!9\\)).\nEach number \\(x\\in\\{1,\\dots ,9\\}\\) appears\n\n* once in each row,\n* once in each block.\n\nHence for a fixed number \\(x\\) the three occurrences give a bijection  \n\n\\[\n\\sigma _x:\\{R_1,R_2,R_3\\}\\longrightarrow \\{B_1,B_2,B_3\\},\n\\qquad \n\\sigma_x(R_i)=\\text{the block containing }x\\text{ in row }R_i .\n\\]\n\nThus \\(\\sigma_x\\) is a permutation of \\(\\{1,2,3\\}\\).  \nConversely, any choice of a permutation \\(\\sigma_x\\) for every \\(x\\) determines\nwhich block each occurrence of \\(x\\) occupies.\n\n--------------------------------------------------------------------\n### 1.  Counting the permutations \\(\\sigma_x\\)\n\nWrite a \\(9\\times3\\) matrix whose rows are the six possible permutations of\n\\(\\{1,2,3\\}\\):\n\n\\[\n\\begin{array}{c}\n123\\\\ 213\\\\ 321\\\\ 132\\\\ 231\\\\ 312\n\\end{array}\n\\]\n\nIf a number receives a given permutation, that row of the matrix is placed in\nthe matrix of size \\(9\\times3\\).  \nDenote by \\(x_i\\;(i=1,\\dots ,6)\\) the number of numbers that receive the\n\\(i\\)\u2011th permutation.  \n\nRow\u2011balance (each number uses each symbol once) is automatic; column\u2011balance\n(because each block must contain exactly three numbers in each row) gives\n\n\\[\n\\begin{aligned}\nx_1+x_4&=3,\\qquad x_2+x_5=3,\\qquad x_3+x_6=3,\\\\\nx_2+x_6&=3,\\qquad x_1+x_3=3,\\qquad x_4+x_5=3,\n\\end{aligned}\n\\]\n\nwith \\(\\sum_{i=1}^6x_i=9\\).\nSolving gives a one\u2011parameter family\n\n\\[\n(x_1,x_2,x_3,x_4,x_5,x_6)=\\bigl(3-t,\\;t,\\;t,\\;t,\\;3-t,\\;3-t\\bigr)\n\\qquad(t=0,1,2,3).\n\\]\n\nFor a fixed \\(t\\) the numbers are assigned to the six permutation types in  \n\n\\[\n\\frac{9!}{(t!)^3\\bigl((3-t)!\\bigr)^3}\n\\]\n\nways.  Summing over the four possible values of \\(t\\),\n\n\\[\nN_{\\sigma}= \\frac{9!}{(3!)^3}+\\frac{9!}{(1!)^3(2!)^3}\n          +\\frac{9!}{(2!)^3(1!)^3}+\\frac{9!}{(3!)^3}\n          =94\\,080 .\n\\]\n\n--------------------------------------------------------------------\n### 2.  Placing the numbers inside the blocks\n\nFix the block\u2011row distribution given by the \\(\\sigma_x\\)\u2019s.\nIn each block, a row contains exactly three different numbers.\nThese three numbers can be arranged in the three columns of the block in\n\\(3! = 6\\) ways, independently for the three rows.\nHence each block offers \\(6^{3}=216\\) possibilities, and for the three blocks\n\n\\[\nN_{\\text{cols}} = 6^{9}=10\\,077\\,696 .\n\\]\n\n--------------------------------------------------------------------\n### 3.  Total number of fillings\n\n\\[\nN = N_{\\sigma}\\,N_{\\text{cols}}\n   = 94\\,080 \\times 6^{9}\n   = 948\\,109\\,639\\,680 .\n\\]\n\nPrime factorising,\n\n\\[\nN = 2^{16}\\cdot 3^{10}\\cdot 5^{1}\\cdot 7^{2}.\n\\]\n\nThus we may take  \n\n\\[\np=2,\\;a=16,\\qquad q=3,\\;b=10,\\qquad r=5,\\;c=1,\\qquad s=7,\\;d=2 .\n\\]\n\nFinally,\n\n\\[\np a+ q b+ r c+ s d\n= 2\\cdot16 + 3\\cdot10 + 5\\cdot1 + 7\\cdot2\n= 32+30+5+14 = 81 .\n\\]\n\n\\[\n\\boxed{81}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 81

    \n

    Extracted Answer: 81

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\n\\{A,B,\\dots ,L\\}= \\{1,2,\\dots ,12\\}\n\\]\n\nand let a random pairing be a perfect matching of the 12 numbers.\nFor each pair \\(\\{a,b\\}\\;(a<b)\\) we write the word \\(ab\\);  \nthe six words are then listed in alphabetical order.  \n\n--------------------------------------------------------------------\n### 1.  What determines the last word?\n\nIn each pair the smaller letter is written first, so the six words are\n\n\\[\n\\{\\,\\underbrace{\\text{smaller}}_{\\text{first letter}},\\ \\text{larger}\\,\\}.\n\\]\n\nIf we denote by  \n\n\\[\nS=\\{\\,\\min\\{a,b\\}\\mid\\{a,b\\}\\text{ a pair}\\,\\},\n\\]\n\nthen \\(|S|=6\\) and the last (lexicographically largest) word is the\npair whose **smaller** element is the largest element of \\(S\\).\n\nHence the last word contains \\(G\\) iff the smaller element of the\npair containing \\(G\\) is the maximal element of \\(S\\).\n\n--------------------------------------------------------------------\n### 2.  Condition on the partner of \\(G\\)\n\nLet the partner of \\(G\\;(=7)\\) be \\(j\\neq7\\).\n\n*If \\(j>7\\):* then the smaller element of the \\(G\\)\u2013pair is \\(7\\).  \nWe need that every other pair have its smaller element \\(\\le 6\\); i.e.\nall the other five \u201csmaller\u201d letters must lie in \\(\\{1,\\dots ,6\\}\\).\n\n*If \\(j<7\\):* then the smaller element of the \\(G\\)\u2013pair is \\(j\\).  \nWe need that every other smaller element be \\(<j\\); consequently all\nthe remaining five smaller letters must be taken from \\(\\{1,\\dots ,j-1\\}\\).\n\n--------------------------------------------------------------------\n### 3.  Counting matchings that satisfy the condition\n\nAfter fixing the partner \\(j\\) we have 10 letters left.\nLet  \n\n\\[\nL=\\{\\text{remaining letters }<j\\},\\qquad H=\\{\\text{remaining letters }\\ge j\\}.\n\\]\n\nThe condition \u201cno other pair has a smaller element \\(\\ge j\\)\u201d is\nequivalent to **no pair joining two letters of \\(H\\)**; every element\nof \\(H\\) must be paired with a distinct element of \\(L\\).\n\nIf \\(|L|=l\\) and \\(|H|=h\\) (\\(l+h=10\\)), the number of perfect matchings\nwith no \\(H\\!-\\!H\\) pair is\n\n\\[\n\\binom{l}{h}h!\\,(l-h-1)!!\\;,\n\\]\n\nwhere \\((2k-1)!!=1\\cdot3\\cdots(2k-1)\\).\nThe total number of matchings on 10 letters is \\((10-1)!!=945\\).\n\n---\n\n* **\\(j>7\\) (five possibilities)**  \n  Here \\(j\\in\\{8,9,10,11,12\\}\\).  \n  We have \\(L=\\{1,\\dots ,6\\}\\;(l=6),\\ H=\\) the four other numbers \\(>7\\)\n  \\((h=4)\\).  \n\n  \\[\n  \\frac{\\binom{6}{4}4!\\,(6-4-1)!!}{945}\n  =\\frac{15\\cdot24\\cdot1}{945}=\\frac{8}{21}.\n  \\]\n\n* **\\(j=6\\)**  \n  Then \\(L=\\{1,\\dots ,5\\},\\ H=\\{8,9,10,11,12\\}\\) (\\(l=h=5\\)).  \n\n  \\[\n  \\frac{\\binom{5}{5}5!\\,(5-5-1)!!}{945}\n  =\\frac{5!}{945}=\\frac{120}{945}=\\frac{8}{63}.\n  \\]\n\n* **\\(j=1,2,3,4,5\\)**  \n  In these cases \\(h>l\\); it is impossible to avoid an \\(H\\!-\\!H\\) pair,\n  so the probability is \\(0\\).\n\n--------------------------------------------------------------------\n### 4.  Assemble the total probability\n\nEach of the 11 possible partners of \\(G\\) is equally likely (\\(1/11\\)).\nTherefore\n\n\\[\n\\begin{aligned}\nP(\\text{last word contains }G)\n&= \\frac1{11}\\Bigl(5\\cdot\\frac{8}{21}+\\frac{8}{63}\\Bigr)\\\\[2mm]\n&= \\frac1{11}\\Bigl(\\frac{120}{63}+\\frac{8}{63}\\Bigr)\\\\[2mm]\n&= \\frac{128}{693}.\n\\end{aligned}\n\\]\n\nThe fraction \\(\\displaystyle\\frac{128}{693}\\) is already in lowest terms.\nHence  \n\n\\[\nm=128,\\qquad n=693,\\qquad m+n=821.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{821}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 821

    \n

    Extracted Answer: 821

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nP(n)=3(n+3)(n^{2}+9).\n\\]\n\nWe need all positive integers \\(n\\) for which  \n\n\\[\nn+2 \\mid P(n).\n\\]\n\n---\n\n### 1. Work modulo \\(n+2\\)\n\nWrite \\(n\\equiv -2 \\pmod{\\,n+2\\,}\\).  \nReplace \\(n\\) by \\(-2\\) in the factors of \\(P(n)\\) (this gives the remainder of each factor modulo \\(n+2\\)):\n\n\\[\n\\begin{aligned}\nn+3 &\\equiv (-2)+3 = 1 \\pmod{n+2},\\\\[2mm]\nn^{2}+9 &\\equiv (-2)^{2}+9 = 4+9 = 13 \\pmod{n+2}.\n\\end{aligned}\n\\]\n\nHence\n\n\\[\nP(n)=3(n+3)(n^{2}+9)\\equiv 3\\cdot 1\\cdot 13 = 39\\pmod{n+2}.\n\\]\n\n---\n\n### 2. Condition for divisibility\n\nThe requirement \\(n+2\\mid P(n)\\) is equivalent to  \n\n\\[\nP(n)\\equiv 0\\pmod{n+2}\\Longleftrightarrow 39\\equiv 0\\pmod{n+2}.\n\\]\n\nThus  \n\n\\[\nn+2 \\text{ must be a positive divisor of } 39.\n\\]\n\nThe positive divisors of \\(39\\) are  \n\n\\[\n1,\\;3,\\;13,\\;39.\n\\]\n\nSince \\(n\\) is a **positive** integer, \\(n+2\\ge 3\\).  \nHence \\(n+2\\) can be only \\(3,\\;13,\\;39\\).\n\n---\n\n### 3. Corresponding values of \\(n\\)\n\n\\[\n\\begin{array}{c|c}\nn+2 & n \\\\ \\hline\n3   & 1\\\\\n13  & 11\\\\\n39  & 37\n\\end{array}\n\\]\n\nAll three satisfy the original condition (a quick check confirms divisibility).\n\n---\n\n### 4. Sum of all such \\(n\\)\n\n\\[\n1+11+37 = 49.\n\\]\n\n\\[\n\\boxed{49}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 49

    \n

    Extracted Answer: 49

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    We place the six collinear points on the \\(x\\)-axis.\n\n---\n\n### 1.  Determine the coordinates of \\(A,B,C,D,E,F\\)\n\nLet \\(A=(0,0)\\).  \nWrite the distances in terms of the unknown coordinate \\(AB=x\\).\n\n\\[\n\\begin{aligned}\nC&: AC=26 \\quad\\Longrightarrow\\quad C=(26,0)\\\\\nB&: AB=x \\quad\\Longrightarrow\\quad B=(x,0)\\\\\nD&: BD=22 \\quad\\Longrightarrow\\quad D=(x+22,0)\\\\\nE&: CE=31 \\quad\\Longrightarrow\\quad E=(26+31,0)=(57,0)\\\\\nF&: DF=33 \\quad\\Longrightarrow\\quad F=(x+22+33,0)=(x+55,0)\\\\\n\\text{and }AF&=73 \\Longrightarrow x+55=73 .\n\\end{aligned}\n\\]\n\nHence \\(x=18\\). So  \n\n\\[\nA=0,\\; B=18,\\; C=26,\\; D=40,\\; E=57,\\; F=73 .\n\\]\n\nThese satisfy all given segment lengths.\n\n---\n\n### 2.  Locate point \\(G\\)\n\nLet \\(G=(u,v)\\) with \\(v\\neq 0\\).  \nFrom the given distances\n\n\\[\n\\begin{cases}\n(u-26)^2+v^2 = 40^2 =1600,\\\\[2pt]\n(u-40)^2+v^2 = 30^2 = 900 .\n\\end{cases}\n\\]\n\nSubtract the second equation from the first:\n\n\\[\n(u-26)^2-(u-40)^2 = 700 .\n\\]\n\nExpanding,\n\n\\[\n(-52u+676)-(-80u+1600)=28u-924=700\n\\Longrightarrow 28u=1624\\Longrightarrow u=58 .\n\\]\n\nNow find \\(v\\):\n\n\\[\n(58-26)^2+v^2=1600\\Longrightarrow 32^2+v^2=1600\n\\Longrightarrow v^2=1600-1024=576 .\n\\]\n\nThus \\(|v|=24\\).  Take \\(v=24\\) (the sign does not affect the area).  \n\n\\[\n\\boxed{G=(58,24)} .\n\\]\n\n---\n\n### 3.  Area of \\(\\triangle BGE\\)\n\nPoints on the \\(x\\)-axis:\n\n\\[\nB=(18,0),\\qquad E=(57,0).\n\\]\n\nThe length of the base \\(BE\\) is\n\n\\[\nBE = 57-18 = 39 .\n\\]\n\nSince the line through \\(B\\) and \\(E\\) is the \\(x\\)-axis, the perpendicular distance from \\(G\\) to this line is \\(|v|=24\\).\n\nHence\n\n\\[\n[\\triangle BGE]=\\frac12\\,(BE)\\cdot(\\text{height})\n               =\\frac12\\cdot 39\\cdot 24\n               =\\frac{936}{2}=468 .\n\\]\n\n(Using the determinant formula also gives \\(468\\).)\n\n---\n\n\\[\n\\boxed{468}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 468

    \n

    Extracted Answer: 468

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The inequalities  \n\n\\[\nx-yz<y-zx<z-xy\n\\]\n\ncan be rewritten by factoring:\n\n\\[\n\\begin{aligned}\nx-yz<y-zx &\\iff (x-y)(1+z)<0,\\\\[2pt]\ny-zx<z-xy &\\iff (y-z)(1+x)<0 .\n\\end{aligned}\n\\]\n\nSince the points lie on the plane  \n\n\\[\nx+y+z=75\\qquad\\Longrightarrow\\qquad z=75-x-y,\n\\]\n\nthe two conditions become inequalities in the variables \\(x,y\\):\n\n\\[\n\\begin{cases}\n(x-y)\\bigl(76-x-y\\bigr)<0,\\\\[2pt]\n\\bigl(x+2y-75\\bigr)(1+x)<0 .\n\\end{cases}\n\\tag{1}\n\\]\n\n---\n\n### 1.  Geometry of the half\u2011planes\n\nFrom (1)\n\n* \\((x-y)(76-x-y)<0\\) gives either  \n\n  \\[\n  \\begin{cases}\n  x>y,\\;x+y>76 \\quad\\text{(region }A_1)\\\\\n  \\text{or}\\\\\n  x<y,\\;x+y<76 \\quad\\text{(region }A_2)\n  \\end{cases}\n  \\]\n\n* \\((x+2y-75)(1+x)<0\\) gives either  \n\n  \\[\n  \\begin{cases}\n  x<-1,\\;x+2y>75 \\quad\\text{(region }B_1)\\\\\n  \\text{or}\\\\\n  x>-1,\\;x+2y<75 \\quad\\text{(region }B_2)\n  \\end{cases}\n  \\]\n\nThe set of points satisfying both inequalities is the intersection of one of the\n\\(A_i\\) with one of the \\(B_j\\).\n\nChecking the four possibilities:\n\n* \\(A_1\\cap B_1=\\varnothing\\) (impossible to have \\(x>y\\) and \\(x<-1\\) while\n  \\(x+y>76\\)).\n* \\(A_1\\cap B_2\\) is non\u2011empty and unbounded (e.g. \\(x>77\\)).\n* \\(A_2\\cap B_1\\) is non\u2011empty and unbounded (e.g. \\(x<-1\\)).\n* \\(A_2\\cap B_2\\) is bounded.\n\nThus there are three convex components: two infinite ones and one finite one,\nthe latter being \\(A_2\\cap B_2\\).\n\n---\n\n### 2.  The finite region\n\n\\(A_2\\cap B_2\\) is described by  \n\n\\[\n\\begin{cases}\nx>-1,\\\\\nx<y,\\\\\nx+2y<75 .\n\\end{cases}\n\\]\n\nFrom \\(x+2y<75\\) we have \\(y<(75-x)/2\\).  \nTogether with \\(y>x\\) we obtain\n\n\\[\n-1<x<25,\\qquad x<y<\\frac{75-x}{2}.\n\\]\n\nThe three bounding lines intersect at\n\n\\[\n\\begin{aligned}\nx=-1 \\ \\text{and}\\ y=x&\\;&\\Rightarrow\\;(-1,-1),\\\\\nx=-1 \\ \\text{and}\\ x+2y=75&\\;&\\Rightarrow\\;(-1,38),\\\\\ny=x \\ \\text{and}\\ x+2y=75&\\;&\\Rightarrow\\;(25,25).\n\\end{aligned}\n\\]\n\nHence the finite region is the interior of the triangle with vertices  \n\\((-1,-1),\\;(-1,38),\\;(25,25)\\).\n\nIts area in the \\(xy\\)-plane is\n\n\\[\n\\text{Area}_{xy}\n=\\frac12\\cdot\\text{base}\\cdot\\text{height}\n=\\frac12\\cdot 39\\cdot 26 =507 .\n\\]\n\n---\n\n### 3.  Area on the plane \\(x+y+z=75\\)\n\nThe map \\((x,y)\\mapsto (x,y,75-x-y)\\) sends the \\(xy\\)-plane onto the given\nplane.  The area is scaled by the factor\n\n\\[\n\\bigl|\\partial_{x}(x,y,z)\\times\\partial_{y}(x,y,z)\\bigr|\n=|(1,0,-1)\\times(0,1,-1)|\n=|(1,1,1)|\n=\\sqrt{3}.\n\\]\n\nThus the area of the finite region on the plane is\n\n\\[\n\\text{Area}= \\sqrt{3}\\times 507 = 507\\sqrt{3}.\n\\]\n\n---\n\nThe required form is \\(a\\sqrt{b}\\) with \\(a=507,\\;b=3\\).  Hence\n\n\\[\na+b = 507+3 = 510.\n\\]\n\n\\[\n\\boxed{510}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 510

    \n

    Extracted Answer: 510

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe product $ \\prod_{k=4}^{63} \\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})} = \\frac{\\log_4(5^{15})}{\\log_5(5^{12})} \\cdot \\frac{\\log_5(5^{24})}{\\log_6(5^{21})} \\cdot \\frac{\\log_6(5^{35})}{\\log_7(5^{32})} \\cdots \\frac{\\log_{63}(5^{3968})}{\\log_{64}(5^{3965})} $ is equal to $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nP=\\prod_{k=4}^{63}\\frac{\\log_k\\!\\big(5^{\\,k^2-1}\\big)}{\\log_{k+1}\\!\\big(5^{\\,k^2-4}\\big)}\n\\]\n\n---\n\n### 1.  Change of base  \n\n\\[\n\\log_a b=\\frac{\\ln b}{\\ln a}\n\\]\n\nHence  \n\n\\[\n\\begin{aligned}\n\\log_k\\!\\big(5^{k^2-1}\\big)&=\\frac{(k^2-1)\\ln5}{\\ln k},\\\\[2mm]\n\\log_{k+1}\\!\\big(5^{k^2-4}\\big)&=\\frac{(k^2-4)\\ln5}{\\ln(k+1)} .\n\\end{aligned}\n\\]\n\nTherefore each factor of the product is\n\n\\[\n\\frac{(k^2-1)\\ln5/\\ln k}{(k^2-4)\\ln5/\\ln(k+1)}\n= \\frac{k^2-1}{k^2-4}\\cdot\\frac{\\ln(k+1)}{\\ln k}.\n\\]\n\nThus  \n\n\\[\nP=\\Bigg(\\prod_{k=4}^{63}\\frac{k^2-1}{k^2-4}\\Bigg)\n   \\Bigg(\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\\Bigg).\n\\]\n\n---\n\n### 2.  Telescoping the logarithmic part  \n\n\\[\n\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\n =\\frac{\\ln5}{\\ln4}\\cdot\\frac{\\ln6}{\\ln5}\\cdots\\frac{\\ln64}{\\ln63}\n =\\frac{\\ln64}{\\ln4}\n =\\log_4 64 = 3 .\n\\]\n\n---\n\n### 3.  Simplify the rational part  \n\n\\[\n\\frac{k^2-1}{k^2-4}\n =\\frac{(k-1)(k+1)}{(k-2)(k+2)}\n =\\frac{k-1}{k-2}\\cdot\\frac{k+1}{k+2}.\n\\]\n\nHence  \n\n\\[\n\\prod_{k=4}^{63}\\frac{k^2-1}{k^2-4}\n =\\Bigg(\\prod_{k=4}^{63}\\frac{k-1}{k-2}\\Bigg)\n  \\Bigg(\\prod_{k=4}^{63}\\frac{k+1}{k+2}\\Bigg).\n\\]\n\n*First product*  \n\n\\[\n\\prod_{k=4}^{63}\\frac{k-1}{k-2}\n =\\frac{3}{2}\\cdot\\frac{4}{3}\\cdot\\frac{5}{4}\\cdots\\frac{62}{61}\n =\\frac{62}{2}=31 .\n\\]\n\n*Second product*  \n\n\\[\n\\prod_{k=4}^{63}\\frac{k+1}{k+2}\n =\\frac{5}{6}\\cdot\\frac{6}{7}\\cdot\\frac{7}{8}\\cdots\\frac{64}{65}\n =\\frac{5}{65}= \\frac{1}{13}.\n\\]\n\nThus the rational part equals  \n\n\\[\n31\\cdot\\frac{1}{13}= \\frac{31}{13}.\n\\]\n\n---\n\n### 4.  Combine the two parts  \n\n\\[\nP=\\frac{31}{13}\\times 3 = \\frac{93}{13}.\n\\]\n\nThe fraction \\(\\frac{93}{13}\\) is already in lowest terms, so  \n\n\\[\nm=93,\\qquad n=13,\\qquad m+n=93+13=106.\n\\]\n\n\\[\n\\boxed{106}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 106

    \n

    Extracted Answer: 106

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n* \\(a_{1},a_{2}\\) be the two **vertical** interior unit segments (the left\u2013right dividing line),  \n* \\(b_{1},b_{2}\\) be the two **horizontal** interior unit segments (the bottom\u2013top dividing line).\n\nThe eight outer\u2013boundary unit segments belong to only one square, while each interior segment belongs to two squares.\n\n---\n\n### 1.  Equations for the four unit squares  \n\nDenote by \\(L_1 ,D_1\\) the left and bottom edges of the lower\u2011left square, etc.  \nWriting a red edge as \\(1\\) and a blue edge as \\(0\\), the condition \u201cexactly two red sides\u2019\u2019 for each square gives  \n\n\\[\n\\begin{aligned}\nL_1 + D_1 + a_{1}+ b_{1} &=2,\\\\\nD_2 + R_2 + a_{1}+ b_{2} &=2,\\\\\nL_3 + T_3 + a_{2}+ b_{1} &=2,\\\\\nR_4 + T_4 + a_{2}+ b_{2} &=2,\n\\end{aligned}\n\\]\n\nwhere the eight variables \\(L_1,D_1,D_2,R_2,L_3,T_3,R_4,T_4\\) are the boundary edges and the\nfour variables \\(a_{1},a_{2},b_{1},b_{2}\\) are the interior edges.\n\nFor a fixed choice of the interior edges, each equation tells us the sum of the two\nboundary edges of that square:\n\n\\[\n\\begin{aligned}\nL_1+D_1 &=2-(a_{1}+b_{1}),\\\\\nD_2+R_2 &=2-(a_{1}+b_{2}),\\\\\nL_3+T_3 &=2-(a_{2}+b_{1}),\\\\\nR_4+T_4 &=2-(a_{2}+b_{2}).\n\\end{aligned}\n\\tag{1}\n\\]\n\nThe right\u2011hand side can be \\(0,1,\\) or \\(2\\).  \n\n* If it is \\(0\\) or \\(2\\) there is **exactly one** way to colour the two boundary\nedges (both blue or both red).  \n* If it is \\(1\\) there are **two** ways (one red, one blue).\n\nThus for a given interior assignment the number of completions equals  \n\n\\[\n\\prod_{i=1}^{4}f\\bigl(2-(a_{i}+b_{j})\\bigr),\n\\qquad\nf(0)=f(2)=1,\\;f(1)=2 .\n\\tag{2}\n\\]\n\nThe factor contributed by a square is \\(2\\) precisely when the sum of its two\ninterior edges equals \\(1\\).\n\n---\n\n### 2.  How many squares have interior\u2011sum \\(=1\\)?\n\nLet  \n\n\\[\nA = a_{1}+a_{2}\\quad(\\text{number of red vertical interiors}),\\qquad\nB = b_{1}+b_{2}\\quad(\\text{number of red horizontal interiors}).\n\\]\n\nFor a square the two interior edges are one vertical and one horizontal, so the\nsquare\u2019s interior sum is \\(1\\) exactly when the chosen vertical edge and horizontal\nedge have different colours.  Hence the number of squares with interior\u2011sum \\(=1\\) is  \n\n\\[\nN = A(2-B)+(2-A)B = 2A+2B-2AB.\n\\tag{3}\n\\]\n\nBecause \\(A,B\\in\\{0,1,2\\}\\),\n\n\\[\nN=\n\\begin{cases}\n0 & (A,B)=(0,0)\\text{ or }(2,2),\\\\[2pt]\n2 & \\text{otherwise except the next case},\\\\[2pt]\n4 & (A,B)=(0,2)\\text{ or }(2,0).\n\\end{cases}\n\\]\n\n---\n\n### 3.  Counting all interior assignments  \n\nThe numbers of interior assignments for each \\((A,B)\\) are\n\n\\[\n\\begin{array}{c|c|c}\n(A,B) & \\text{\\# assignments} & N \\\\ \\hline\n(0,0) & 1 & 0\\\\\n(2,2) & 1 & 0\\\\\n(0,2) & 1 & 4\\\\\n(2,0) & 1 & 4\\\\\n(0,1) & 2 & 2\\\\\n(1,0) & 2 & 2\\\\\n(1,1) & 4 & 2\\\\\n(1,2) & 2 & 2\\\\\n(2,1) & 2 & 2\n\\end{array}\n\\]\n\nFor a given interior assignment the number of ways to colour the boundary\nedges is \\(2^{N}\\) (by (2)).  Therefore\n\n\\[\n\\begin{aligned}\n\\#\\text{colorings}&=\n1\\cdot2^{0}+1\\cdot2^{0}\n+1\\cdot2^{4}+1\\cdot2^{4}\n+ (2+2+4+2+2)\\cdot2^{2} \\\\[4pt]\n&=2\\cdot1 + 2\\cdot16 + 12\\cdot4 \\\\[4pt]\n&=2 + 32 + 48 \\\\[4pt]\n&=82 .\n\\end{aligned}\n\\]\n\n---\n\n\\[\n\\boxed{82}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 82

    \n

    Extracted Answer: 82

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n* \\(O\\) be the centre of \\(\\omega _2\\) (radius \\(15\\)),\n* \\(A\\) the centre of \\(\\omega _1\\) (radius \\(6\\)),\n* \\(B\\) the internal point of tangency of the two circles.\n\nPlace the picture on a coordinate plane.\n\n---\n\n### 1.  Coordinates of the given points  \n\nTake \\(O=(0,0)\\).  \nSince \\(OA=15-6=9\\) and the circles are tangent internally, we may put  \n\n\\[\nA=(9,0), \\qquad B=(15,0).\n\\]\n\n\\(BC\\) is a diameter of \\(\\omega _2\\) through \\(B\\); hence  \n\n\\[\nC=(-15,0).\n\\]\n\n\\(AD\\perp BC\\) forces \\(AD\\) to be the vertical line through \\(A\\); intersecting this line with\n\\(\\omega _2\\) gives  \n\n\\[\nD=(9,-12)\\quad\\text{or}\\quad (9,12).\n\\]\n\nThe condition \u201c\\(D\\) is closer to \\(\\overline{FG}\\) than to \\(\\overline{EH}\\)\u201d (see below) makes\n\\(D=(9,-12)\\).\n\n---\n\n### 2.  The rectangle \\(EFGH\\)\n\n\\(EFGH\\) is inscribed in the circle \\(\\omega_1\\), so its vertices lie on  \n\n\\[\n(x-9)^2+y^2=6^2=36 .\n\\]\n\nSince \\(\\overline{EF}\\perp BC\\) and \\(BC\\) is horizontal, \\(\\overline{EF}\\) is vertical.\nLet  \n\n\\[\n\\begin{aligned}\nE&=(9+w,\\,h),\\\\\nF&=(9+w,\\,-h),\\\\\nG&=(9-w,\\,-h),\\\\\nH&=(9-w,\\,h),\n\\end{aligned}\n\\]\n\nwhere \\(w>0,\\,h>0\\) are the half\u2011width and half\u2011height of the rectangle.\n\nAll four vertices satisfy the circle equation, giving the single relation  \n\n\\[\nw^{2}+h^{2}=36\\tag{1}\n\\]\n\n(the rectangle\u2019s centre is the circle\u2019s centre \\(A\\)).\n\nBecause the point \\(C=(-15,0)\\) is farther to the right than to the left,\nthe condition \u201c\\(C\\) is closer to \\(\\overline{GH}\\) than to \\(\\overline{EF}\\)\u2019\u2019 forces\n\\(\\overline{GH}\\) to be the **left** side (\\(x=9-w\\)), which is already the case.\n\nSince \\(D=(9,-12)\\) lies below the centre, \u201c\\(D\\) is closer to \\(\\overline{FG}\\) than to \\(\\overline{EH}\\)\u2019\u2019 forces\n\\(\\overline{FG}\\) to be the **bottom** side (\\(y=-h\\)).  This orientation matches the above labeling.\n\n---\n\n### 3.  Areas of the two triangles  \n\n*Triangle \\(DGF\\)*  \n\nThe points are \\(D(9,-12),\\; G(9-w,-h),\\; F(9+w,-h)\\).\nIts base \\(GF\\) has length \\(2w\\) and its height (vertical distance from \\(D\\) to the base) is \\(12-h\\).  \nHence  \n\n\\[\n[\\,DGF\\,]=\\tfrac12\\,(2w)(12-h)=w(12-h).\\tag{2}\n\\]\n\n*Triangle \\(CHG\\)*  \n\nThe points are \\(C(-15,0),\\; H(9-w,h),\\; G(9-w,-h)\\).\nIts base \\(HG\\) has length \\(2h\\) and its horizontal distance from \\(C\\) to the line \\(x=9-w\\) is\n\\(|-15-(9-w)|=24-w\\).  \nThus  \n\n\\[\n[\\,CHG\\,]=\\tfrac12\\,(2h)(24-w)=h(24-w).\\tag{3}\n\\]\n\nThe problem states the two areas are equal, so\n\n\\[\nw(12-h)=h(24-w).\\tag{4}\n\\]\n\nExpanding gives \\(12w-wh=24h-wh\\), whence  \n\n\\[\n12w=24h \\qquad\\Longrightarrow\\qquad w=2h.\\tag{5}\n\\]\n\n---\n\n### 4.  Solving for \\(w\\) and \\(h\\)\n\nSubstituting \\(w=2h\\) into (1):\n\n\\[\n(2h)^2+h^2=36 \\;\\Longrightarrow\\;5h^{2}=36 \\;\\Longrightarrow\\;\nh=\\frac{6}{\\sqrt5}=\\frac{6\\sqrt5}{5}.\n\\]\n\nHence  \n\n\\[\nw=2h=\\frac{12}{\\sqrt5}=\\frac{12\\sqrt5}{5}.\n\\]\n\n---\n\n### 5.  Area of the rectangle  \n\nThe side lengths are \\(2w\\) and \\(2h\\).  Therefore  \n\n\\[\n\\text{Area}= (2w)(2h)=4wh.\n\\]\n\nUsing \\(w=2h\\),\n\n\\[\n4wh = 4(2h)h = 8h^{2}=8\\left(\\frac{36}{5}\\right)=\\frac{288}{5}.\n\\]\n\nThus the area is \\(\\displaystyle\\frac{288}{5}\\); the numerator and denominator are coprime.\n\n\\[\nm=288,\\qquad n=5,\\qquad m+n=288+5=293.\n\\]\n\n\\[\n\\boxed{293}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 293

    \n

    Extracted Answer: 293

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The divisors of \\(2025\\) are all numbers of the form  \n\n\\[\n3^{a}5^{b},\\qquad 0\\le a\\le 4,\\;0\\le b\\le 2 .\n\\]\n\nHence  \n\n\\[\n|A|=(4+1)(2+1)=15 .\n\\]\n\nSo there are \\(2^{15}\\) subsets of \\(A\\) (including the empty set).\n\n--------------------------------------------------------------------\n### When does a subset have lcm \\(2025\\)?\n\nThe prime factorisation of \\(2025\\) is  \n\n\\[\n2025 = 3^{4}\\,5^{2}.\n\\]\n\nFor a subset \\(B\\subseteq A\\),\n\n\\[\n\\operatorname{lcm}(B)=3^{\\max a_i}\\,5^{\\max b_i},\n\\]\n\nwhere \\((a_i,b_i)\\) are the exponents of the elements of \\(B\\).\nThus \\(\\operatorname{lcm}(B)=2025\\) iff  \n\n* at least one element has exponent \\(a=4\\) (i.e. contains \\(3^4\\));\n* at least one element has exponent \\(b=2\\) (i.e. contains \\(5^2\\)).\n\n--------------------------------------------------------------------\n### Sets that provide the required exponents  \n\n\\[\nA_4=\\{d\\in A:3^4\\mid d\\}=\\{3^4\\! \\cdot\\! 5^0,\\;3^4\\! \\cdot\\!5^1,\\;3^4\\! \\cdot\\!5^2\\}\n\\]\nhas \\(|A_4|=3\\) elements.\n\n\\[\nB_2=\\{d\\in A:5^2\\mid d\\}=\\{3^0\\! \\cdot\\!5^2,\\;3^1\\! \\cdot\\!5^2,\\;3^2\\! \\cdot\\!5^2,\n\\;3^3\\! \\cdot\\!5^2,\\;3^4\\! \\cdot\\!5^2\\}\n\\]\nhas \\(|B_2|=5\\) elements.\n\nTheir intersection is the single divisor \\(2025=3^4\\! \\cdot\\!5^2\\).\n\n--------------------------------------------------------------------\n### Counting the suitable subsets  \n\nA subset \\(B\\) works iff it contains **at least one** element of \\(A_4\\) **and** at least one element of \\(B_2\\).\n\nUsing inclusion\u2013exclusion on the \\(2^{15}\\) total subsets:\n\n\\[\n\\begin{aligned}\nN &= 2^{15}\n     -\\underbrace{2^{15-3}}_{\\text{subsets missing }A_4}\n     -\\underbrace{2^{15-5}}_{\\text{subsets missing }B_2}\n     +\\underbrace{2^{15-7}}_{\\text{subsets missing both}} \\\\[4pt]\n  &= 2^{15}-2^{12}-2^{10}+2^{8}\\\\\n  &= 32768-4096-1024+256\\\\\n  &= 27904 .\n\\end{aligned}\n\\]\n\nThus the desired probability is  \n\n\\[\n\\frac{N}{2^{15}}=\\frac{27904}{32768}\n          =\\frac{109}{128}\\qquad(\\text{after cancelling }256).\n\\]\n\n--------------------------------------------------------------------\n### Answer  \n\n\\(m=109,\\;n=128\\), so  \n\n\\[\nm+n=109+128=237 .\n\\]\n\n\\[\n\\boxed{237}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 237

    \n

    Extracted Answer: 237

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1 \u2013  What we have to count**\n\nThe two perpendicular diameters are two line segments that intersect once, so after they are drawn the disk is divided into  \n\n\\[\nF_0=4\\qquad\\text{regions}.\n\\]\n\nEvery time we draw a new segment, it splits each region it meets into two pieces.  \nIf the new segment meets \\(k\\) already\u2011drawn segments in interior points, it creates \\(k+1\\) new regions.  \n\nHence  \n\n\\[\n\\boxed{\\text{# of regions}=1+\\#\\text{segments}+ \\#\\text{intersection points}}\n\\tag{1}\n\\]\n\n(the \u201c\\(1\\)\u201d is the original whole disk).  \nWe have \\(27\\) segments in total (the 2 diameters + the 25 random chords).  \nThus we only have to find the **expected number of intersection points**.\n\n--------------------------------------------------------------------\n\n**Step 2 \u2013  Intersections with the two diameters**\n\nFor a random chord we must choose its two endpoints in *different* quadrants.\nThe unordered pair of quadrants is equally likely among the  \n\n\\[\n\\binom{4}{2}=6\n\\]\n\npossibilities.  \n\n* Adjacent quadrants (four choices) \u2013 the chord meets **one** diameter.  \n* Opposite quadrants (two choices) \u2013 the chord meets **both** diameters.\n\nTherefore for one random chord  \n\n\\[\nE[\\text{diameters met}]\n=\\frac{4}{6}\\cdot1+\\frac{2}{6}\\cdot2=\\frac{4}{3}.\n\\]\n\nWith \\(N=25\\) random chords\n\n\\[\nE[\\text{intersections with the two diameters}]\n=N\\cdot\\frac{4}{3}= \\frac{100}{3}.\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 3 \u2013  Intersection of two random chords**\n\nLet a chord be drawn.  \nWrite its endpoints as angles measured from the positive \\(x\\)\u2013axis.\nBecause the two endpoints are in different quadrants, the unordered pair of\nquadrants is uniform among the six possibilities.\n\n*Probability that a second random chord meets the first.*\n\nLet the first chord be fixed.  \nDenote by \\(I\\) the clockwise arc of the circle from its first endpoint to its\nsecond endpoint; let \\(|I|=L\\).\nIf a second chord has one endpoint in \\(I\\) and the other outside \\(I\\) the two\nchords intersect.  \n\nWhen the second chord is chosen, its first endpoint \\(U\\) is uniform on the whole\ncircle, and its second endpoint \\(V\\) is uniform on the *three* quadrants that are\ndifferent from the quadrant of \\(U\\).  \nA short calculation (integrating over the position of \\(U\\) inside \\(I\\))\ngives for a fixed chord\n\n\\[\n\\boxed{q=\\frac{L}{\\pi}-\\frac{2L^{2}}{3\\pi^{2}}\n      +\\frac{2}{3\\pi^{2}}\\!\\int_{I}\\!|I\\cap Q(\\theta)|\\,d\\theta},\n\\tag{3}\n\\]\nwhere \\(Q(\\theta)\\) is the quadrant containing \\(\\theta\\).\n\nNow we average (3) over the possible positions of the first chord.\n\n*Adjac\u00adent quadrants.*  \nThe arc \\(I\\) lies in exactly two quadrants; write its lengths in those\nquadrants as \\(L_{1},L_{2}\\) (\\(L=L_{1}+L_{2}\\)).  \nThen \\(\\int_{I}|I\\cap Q|\\,d\\theta = L_{1}^{2}+L_{2}^{2}\\).\nWith \\(L_{1},L_{2}\\) independent and uniform on \\([0,\\pi/2]\\),\n\n\\[\nE[q\\mid\\text{adjacent}] = \\frac{5}{12}.\n\\]\n\n*Opposite quadrants.*  \nNow \\(I\\) occupies three quadrants; let the lengths in the three\nquadrants be \\(u,\\,\\pi/2,\\,v\\) (\\(u,v\\) independent uniform on \\([0,\\pi/2]\\)).  \nThen \\(\\int_{I}|I\\cap Q|\\,d\\theta = u^{2}+(\\pi/2)^{2}+v^{2}\\).\nAveraging gives\n\n\\[\nE[q\\mid\\text{opposite}] = \\frac{7}{12}.\n\\]\n\nThe first chord is adjacent with probability \\(\\frac{2}{3}\\) and opposite with\nprobability \\(\\frac13\\).  Hence the probability that two independently drawn\nrandom chords intersect is\n\n\\[\np=\\frac{2}{3}\\cdot\\frac{5}{12}+\\frac{1}{3}\\cdot\\frac{7}{12}\n    =\\frac{17}{36}.\n\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 4 \u2013  Expected intersections among the 25 random chords**\n\nThere are \\(\\binom{25}{2}=300\\) unordered pairs of random chords, each\nintersecting with probability \\(p\\).  Thus\n\n\\[\nE[\\text{intersections among the 25 chords}]\n=300\\cdot\\frac{17}{36}= \\frac{425}{3}.\n\\tag{5}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 5 \u2013  Total expected number of intersection points**\n\nAdd all contributions:\n\n* one intersection of the two diameters,\n* intersections of random chords with the two diameters \\(\\displaystyle\\frac{100}{3}\\)   (from (2)),\n* intersections among the random chords \\(\\displaystyle\\frac{425}{3}\\)   (from (5)).\n\n\\[\nE[\\text{total intersections}]\n=1+\\frac{100}{3}+\\frac{425}{3}=1+\\frac{525}{3}=176.\n\\tag{6}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 6 \u2013  Expected number of regions**\n\nInsert (6) into formula (1):\n\n\\[\nE[\\text{regions}]\n=1+\\underbrace{27}_{\\text{segments}}+\\underbrace{176}_{\\text{intersection points}}\n=204 .\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{204}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 204

    \n

    Extracted Answer: 204

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The zeros of  \n\n\\[\nf(x)=\\sin\\bigl(7\\pi\\sin(5x)\\bigr)\n\\]\n\nsatisfy  \n\n\\[\n\\sin\\bigl(7\\pi\\sin(5x)\\bigr)=0\\Longrightarrow 7\\pi\\sin(5x)=k\\pi,\\qquad k\\in\\mathbb Z .\n\\]\n\nHence  \n\n\\[\n\\sin (5x)=\\frac{k}{7},\\qquad -7\\le k\\le 7 .\n\\]\n\n---\n\n### 1.  Counting all zeros \\(n\\)\n\nPut \\(\\theta =5x\\).  \nBecause \\(0<x<2\\pi\\), we have \\(0<\\theta<10\\pi\\).\n\nFor each integer \\(k\\) we count the solutions of \\(\\sin\\theta = k/7\\) in \\((0,10\\pi)\\).\n\n* **\\(k=\\pm7\\) :** \\(\\sin\\theta=\\pm1\\).  \n  Solutions are \\(\\theta =\\frac{\\pi}{2}+2\\pi m\\) (or \\(\\frac{3\\pi}{2}+2\\pi m\\)).  \n  In a length \\(10\\pi\\) there are \\(5\\) such values for each sign.  \n  \u2192 \\(5+5=10\\) solutions.\n\n* **\\(k=0\\) :** \\(\\sin\\theta=0\\).  \n  Solutions are \\(\\theta=n\\pi\\).  \n  With \\(0<\\theta<10\\pi\\) we have \\(n=1,2,\\dots ,9\\): \\(9\\) solutions.\n\n* **\\(k=\\pm1,\\pm2,\\ldots,\\pm6\\) (12 values):** \\(\\sin\\theta = k/7\\) is a non\u2011extreme value.  \n  In each full period of length \\(2\\pi\\) there are \\(2\\) solutions; we have five periods, so each such \\(k\\) yields \\(10\\) solutions.  \n  \u2192 \\(12\\cdot10=120\\) solutions.\n\nHence  \n\n\\[\nn = 10\\;(\\text{from }k=\\pm7)+9\\;(\\text{from }k=0)+120\\;(\\text{from }k=\\pm1,\\dots,\\pm6)=139 .\n\\]\n\n---\n\n### 2.  Tangential zeros \\(t\\)\n\nThe derivative is  \n\n\\[\nf'(x)=\\cos\\bigl(7\\pi\\sin(5x)\\bigr)\\cdot 7\\pi\\cdot5\\cos(5x)\n      =35\\pi\\cos\\bigl(7\\pi\\sin(5x)\\bigr)\\cos(5x).\n\\]\n\nAt a zero of \\(f\\) we have \\(\\sin(5x)=k/7\\) and thus  \n\\(\\cos(7\\pi\\sin(5x))=\\cos(k\\pi)=(-1)^{k}\\).\n\nTherefore  \n\n\\[\nf'(x)=35\\pi(-1)^{k}\\cos(5x).\n\\]\n\nFor the graph to be tangent to the \\(x\\)-axis we need \\(f'(x)=0\\); this occurs exactly when  \n\n\\[\n\\cos(5x)=0 \\quad\\Longleftrightarrow\\quad \\sin(5x)=\\pm1.\n\\]\n\nThus the tangential zeros correspond to the case \\(k=\\pm7\\).  \nWe already counted those: \\(5\\) solutions for \\(k=7\\) and \\(5\\) for \\(k=-7\\).\n\n\\[\nt = 5+5 = 10.\n\\]\n\n---\n\n### 3.  Required sum\n\n\\[\nn+t = 139+10 = 149.\n\\]\n\n\\[\n\\boxed{149}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 149

    \n

    Extracted Answer: 149

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the chairs be numbered \\(1,2,\\dots ,16\\).\nChoosing the chairs for the eight people is equivalent to writing a binary\nstring of length \\(16\\) with exactly eight \\(1\\)\u2019s (occupied chairs) and\nseven \\(0\\)\u2019s (empty chairs).\n\nThe condition *\u201cno person sits next to two other people\u2019\u2019* means that no\noccupied chair can have occupied neighbours on both sides; thus the binary\nstring must contain **no substring \\(111\\)**.  \nHence we must count binary strings of length \\(16\\) with weight \\(8\\) that avoid\n\\(111\\).\n\n---\n\n### 1.  Describing the strings\n\nThe \\(1\\)\u2019s can appear only in blocks of length \\(1\\) or \\(2\\) (a block of\nlength \\(3\\) would give a forbidden \\(111\\)).  \nSuppose there are  \n\n* \\(s\\) blocks of length \\(2\\);\n* \\(t-s\\) blocks of length \\(1\\),\n\nso the total number of blocks of \\(1\\)\u2019s is \\(t\\).  \nIf each block of length \\(2\\) contributes \\(2\\) and each block of length\n\\(1\\) contributes \\(1\\), then  \n\n\\[\n2s+(t-s)=8\\qquad\\Longrightarrow\\qquad t=8-s .\n\\]\n\nThus \\(s\\) can be \\(0,1,2,3,4\\) (since at most \\(\\lfloor 8/2\\rfloor =4\\) blocks\nof length \\(2\\) are possible).\n\nFor a given \\(s\\) the blocks are ordered, and we must choose which \\(s\\) of\nthe \\(t\\) blocks are the length\u2011\\(2\\) blocks:\n\n\\[\n\\text{choices for block sizes}= \\binom{t}{s}= \\binom{8-s}{s}.\n\\]\n\n---\n\n### 2.  Placing the zeros\n\nBetween two consecutive blocks of \\(1\\)\u2019s there must be at least one\n\\(0\\).  With \\(t\\) blocks there are \\(t-1\\) mandatory zeros.\nThere are \\(8\\) zeros in total (since \\(16-8=8\\)).  \nHence the number of *extra* zeros we may distribute is  \n\n\\[\n8-(t-1)=9-t .\n\\]\n\nThese extra zeros can be placed in any of the \\(t+1\\) gaps\n(before the first block, between blocks, after the last block).  \nBy stars and bars the number of distributions is\n\n\\[\n\\binom{(9-t)+(t+1)-1}{(t+1)-1}\n   =\\binom{9}{t}\n   =\\binom{9}{8-s}.\n\\]\n\n---\n\n### 3.  Total number of admissible subsets\n\nSumming over all possible \\(s\\):\n\n\\[\n\\begin{aligned}\nN &=\\sum_{s=0}^{4}\n    \\binom{8-s}{s}\\binom{9}{8-s}  \\\\\n  &=\\binom{8}{0}\\binom{9}{8}\n   +\\binom{7}{1}\\binom{9}{7}\n   +\\binom{6}{2}\\binom{9}{6}\n   +\\binom{5}{3}\\binom{9}{5}\n   +\\binom{4}{4}\\binom{9}{4}   \\\\\n  &=1\\cdot 9\n   +7\\cdot 36\n   +15\\cdot 84\n   +10\\cdot 126\n   +1\\cdot 126 \\\\\n  &=9+252+1260+1260+126 \\\\\n  &=2907 .\n\\end{aligned}\n\\]\n\nThus there are \\(N=2907\\) subsets of chairs that satisfy the condition.\n\n---\n\n### 4.  Remainder modulo \\(1000\\)\n\n\\[\n2907 \\equiv 907 \\pmod{1000}.\n\\]\n\n\\[\n\\boxed{907}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 907

    \n

    Extracted Answer: 907

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nA=84^\\circ ,\\qquad B=60^\\circ ,\\qquad C=36^\\circ .\n\\]\n\nDenote by \\(O\\) the circumcenter of \\(\\triangle ABC\\) and by \\(N\\) the nine\u2011point\ncenter (the circumcenter of \\(\\triangle DEF\\)).\nPut the circumcircle of \\(\\triangle ABC\\) on the unit circle and let  \n\n\\[\na=1,\\qquad \nb=e^{i\\beta },\\qquad \nc=e^{i\\gamma},\n\\]\n\nwhere the central arcs satisfy  \n\n\\[\n\\widehat{AB}=2C=72^\\circ ,\\qquad \n\\widehat{BC}=2A=168^\\circ ,\\qquad \n\\widehat{CA}=2B=120^\\circ .\n\\]\n\nHence  \n\n\\[\n\\beta =72^\\circ ,\\qquad \\gamma =\\beta +168^\\circ =240^\\circ .\n\\]\n\n--------------------------------------------------------------------\n### 1.  The nine\u2011point centre and the midpoints  \n\n\\[\nN=\\frac{a+b+c}{2},\\qquad \nD=\\frac{b+c}{2},\\;E=\\frac{c+a}{2},\\;F=\\frac{a+b}{2}.\n\\]\n\nFrom these formulas  \n\n\\[\nND=-\\frac a2,\\qquad NE=-\\frac b2,\\qquad NF=-\\frac c2 .\\tag{1}\n\\]\n\nThus the directions of the radii to the midpoints are opposite the\ndirections of the vertices:\n\n\\[\n\\arg(ND)=\\alpha+180^\\circ ,\\quad \n\\arg(NE)=\\beta+180^\\circ ,\\quad \n\\arg(NF)=\\gamma+180^\\circ .\n\\]\n\nConsequently  \n\n\\[\n\\widehat{DE}=|\\arg(NE)-\\arg(ND)|\n      =( \\beta+180^\\circ)-( \\alpha+180^\\circ)=\\beta-\\alpha\n      =2C=72^\\circ .\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 2.  The second intersections  \n\nFor a chord whose one endpoint is known, the second endpoint is obtained\nby reflecting the known radius about the line through \\(N\\) that is\nperpendicular to the given line.\n\n*Line \\(BD\\).*  \nThe direction of \\(BD\\) is \\(\\arg(c-b)\\).  \nSince the perpendicular through \\(N\\) makes the angle \\(\\arg(c-b)+90^\\circ\\),\nreflecting \\(ND\\) in this line gives\n\n\\[\n\\arg(NG)=2\\bigl(\\arg(c-b)+90^\\circ\\bigr)-\\arg(ND)\n        =2\\arg(c-b)-\\arg(a).            \\tag{3}\n\\]\n\nUsing the identity  \n\n\\[\n\\arg(c-b)=\\frac{\\beta+\\gamma}{2}+90^\\circ,\n\\]\n\nwe obtain  \n\n\\[\n\\arg(NG)=2\\Bigl(\\frac{72^\\circ+240^\\circ}{2}+90^\\circ\\Bigr)\n        =492^\\circ\\equiv132^\\circ .\n\\]\n\nBecause \\(\\arg(NF)=\\gamma+180^\\circ=60^\\circ\\),\n\n\\[\n\\widehat{FG}=|\\arg(NG)-\\arg(NF)|=132^\\circ-60^\\circ=72^\\circ .\\tag{4}\n\\]\n\n*Line \\(AF\\) (the side \\(AB\\)).*  \nThe direction of \\(AB\\) is \\(\\arg(b-a)\\); hence\n\n\\[\n\\arg(NJ)=2\\arg(b-a)-\\arg(c).                \\tag{5}\n\\]\n\nNow  \n\n\\[\n\\arg(b-a)=\\frac{\\alpha+\\beta}{2}+90^\\circ=126^\\circ,\n\\]\n\nso  \n\n\\[\n\\arg(NJ)=2\\cdot126^\\circ-240^\\circ=12^\\circ .\\tag{6}\n\\]\n\n*Line \\(AE\\) (the median from \\(A\\)).*  \nThe direction of \\(AE\\) is \\(\\arg(c-a)\\); thus\n\n\\[\n\\arg(NH)=2\\arg(c-a)-\\arg(b).                \\tag{7}\n\\]\n\nHere  \n\n\\[\n\\arg(c-a)=\\frac{\\alpha+\\gamma}{2}+90^\\circ=210^\\circ ,\n\\]\n\nhence  \n\n\\[\n\\arg(NH)=2\\cdot210^\\circ-72^\\circ=348^\\circ\\equiv-12^\\circ .\\tag{8}\n\\]\n\nTherefore  \n\n\\[\n\\widehat{HJ}=|\\arg(NJ)-\\arg(NH)|\n            =12^\\circ-(-12^\\circ)=24^\\circ .\\tag{9}\n\\]\n\n--------------------------------------------------------------------\n### 3.  Required sum  \n\nFrom (2), (4) and (9),\n\n\\[\n\\widehat{DE}=72^\\circ ,\\qquad \n\\widehat{HJ}=24^\\circ ,\\qquad \n\\widehat{FG}=72^\\circ .\n\\]\n\nHence  \n\n\\[\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n=72^\\circ+2\\cdot24^\\circ+3\\cdot72^\\circ\n=72+48+216\n=336^\\circ .\n\\]\n\n\\[\n\\boxed{336}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 336

    \n

    Extracted Answer: 336

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n\\boxed{733}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 735

    \n

    Extracted Answer: 733

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nr_i=A_1A_i\\qquad (i=2,\\dots ,11),\\qquad \n\\theta=\\angle A_iA_1A_{i+1}\\;(2\\le i\\le 10),\\qquad \n\\cos\\theta=\\frac{12}{13}.\n\\]\n\n---\n\n### 1.  Relation between the radii  \n\nThe area of \\(\\triangle A_iA_1A_{i+1}\\) is  \n\n\\[\n1=\\frac12 r_i r_{i+1}\\sin\\theta .\n\\]\n\nSince  \n\n\\[\n\\sin\\theta =\\sqrt{1-\\cos^2\\theta}= \\sqrt{1-\\left(\\frac{12}{13}\\right)^2}= \\frac{5}{13},\n\\]\n\nwe obtain  \n\n\\[\nr_i r_{i+1}= \\frac{2\\cdot13}{5}= \\frac{26}{5}\\;(=C).\n\\tag{1}\n\\]\n\nThus for every \\(i\\),\n\n\\[\nr_{i+1}= \\frac{C}{r_i},\\qquad C=\\frac{26}{5}.\n\\]\n\nConsequently the sequence alternates:\n\n\\[\nr_2=r_4=r_6=r_8=r_{10}=x,\\qquad\nr_3=r_5=r_7=r_9=r_{11}= \\frac{C}{x},\n\\]\n\nfor some positive number \\(x\\).\n\n---\n\n### 2.  Length of the side \\(A_iA_{i+1}\\)\n\nUsing the law of cosines in \\(\\triangle A_iA_1A_{i+1}\\),\n\n\\[\nA_iA_{i+1}^{2}=r_i^{2}+r_{i+1}^{2}-2r_i r_{i+1}\\cos\\theta .\n\\]\n\nBecause \\(r_i r_{i+1}=C\\) and \\(\\cos\\theta=\\frac{12}{13}\\),\n\n\\[\nA_iA_{i+1}^{2}=r_i^{2}+r_{i+1}^{2}\n          -2C\\cdot\\frac{12}{13}\n          =r_i^{2}+r_{i+1}^{2}-\\frac{48}{5}.\n\\]\n\nNow  \n\n\\[\nr_i^{2}+r_{i+1}^{2}\n   =(r_i+r_{i+1})^{2}-2r_i r_{i+1}\n   =(r_i+r_{i+1})^{2}-2C .\n\\]\n\nHence\n\n\\[\nA_iA_{i+1}^{2}= (r_i+r_{i+1})^{2}-2C-\\frac{48}{5}\n               =(r_i+r_{i+1})^{2}-20 .\n\\tag{2}\n\\]\n\nFor any consecutive pair \\((i,i+1)\\) we have  \n\n\\[\nr_i+r_{i+1}=x+\\frac{C}{x}\\;=:t .\n\\]\n\nThus every side \\(A_iA_{i+1}\\;(i=2,\\dots ,10)\\) has the same length  \n\n\\[\ns=\\sqrt{t^{2}-20}.\n\\tag{3}\n\\]\n\n---\n\n### 3.  Perimeter condition  \n\nThe perimeter of the 11\u2011gon is  \n\n\\[\n\\underbrace{A_1A_2}_{=x}\n+\\underbrace{A_{11}A_1}_{=C/x}\n+9s =t+9\\sqrt{t^{2}-20}=20 .\n\\tag{4}\n\\]\n\nSet \\(\\displaystyle u=\\sqrt{t^{2}-20}\\).  \nFrom (4) we have \\(u=\\dfrac{20-t}{9}\\).  Squaring gives\n\n\\[\nt^{2}-20=\\frac{(20-t)^{2}}{81}.\n\\]\n\nMultiplying by 81 and simplifying,\n\n\\[\n80t^{2}+40t-2020=0\\quad\\Longrightarrow\\quad\n4t^{2}+2t-101=0.\n\\]\n\nSolving,\n\n\\[\nt=\\frac{-2+\\sqrt{4+1616}}{8}\n  =\\frac{-2+18\\sqrt5}{8}\n  =\\frac{9\\sqrt5-1}{4}.\n\\]\n\nSince \\(t=x+C/x=A_1A_2+A_1A_{11}\\) is a sum of positive lengths,\nthe positive root is the only admissible one.\n\n---\n\n### 4.  Result  \n\n\\[\nA_1A_2+A_1A_{11}= \\frac{9\\sqrt5-1}{4}\n                 =\\frac{m\\sqrt n-p}{q},\n\\]\n\nwhere \\(m=9,\\;n=5,\\;p=1,\\;q=4\\).  \nHence\n\n\\[\nm+n+p+q=9+5+1+4=19.\n\\]\n\n\\[\n\\boxed{19}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 19

    \n

    Extracted Answer: 19

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFrom an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.\n\nIn general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For the denominations \\(\\{1,10,25\\}\\) let  \n\n\\[\nN=25a+b,\\qquad 0\\le b<25 .\n\\]\n\nThe greedy algorithm first uses \\(a\\) quarters, then \\(\\big\\lfloor b/10\\big\\rfloor\\) dimes and finally \\(b\\bmod 10\\) pennies.\nHence the greedy number of coins is  \n\n\\[\nC_{\\text{greedy}}(N)=a+\\Big\\lfloor\\frac{b}{10}\\Big\\rfloor+(b\\bmod 10)=a+f(b),\n\\]\nwhere  \n\n\\[\nf(x)=\\Big\\lfloor\\frac{x}{10}\\Big\\rfloor+(x\\bmod 10).\n\\]\n\nIf we keep only \\(a-k\\) quarters (\\(k\\ge 1\\)), the remainder becomes \\(b+25k\\).  \nThe optimal way to represent the remainder with dimes and pennies still uses the greedy method,\nso the total number of coins with \\(a-k\\) quarters is  \n\n\\[\nC_k(N)=a-k+f(b+25k).\n\\]\n\nThe greedy algorithm fails iff for some \\(k\\ge1\\)\n\n\\[\nC_k(N)<C_{\\text{greedy}}(N)\n\\Longleftrightarrow \nf(b+25k)\\le f(b)+k-1 .\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1.  Evaluating \\(f(b+25k)-f(b)\\)\n\nWrite \\(b=10t+r\\) with \\(t\\in\\{0,1,2\\}\\) and \\(r=b\\bmod 10\\in\\{0,\\dots,9\\}\\).\nLet \\(\\alpha=r/10\\;(0\\le\\alpha<1)\\).\n\nSince  \n\n\\[\nf(x)=\\Big\\lfloor\\frac{x}{10}\\Big\\rfloor+(x\\bmod10)\n      =x-9\\Big\\lfloor\\frac{x}{10}\\Big\\rfloor ,\n\\]\n\nwe obtain  \n\n\\[\n\\begin{aligned}\nf(b+25k)-f(b)\n&=9\\Big\\lfloor\\frac{b+25k}{10}\\Big\\rfloor-24k\\\\\n&=9\\Big\\lfloor 2.5k+\\alpha\\Big\\rfloor-24k .\n\\end{aligned}\n\\tag{2}\n\\]\n\nSet  \n\n\\[\n\\Delta(k)=9\\Big\\lfloor 2.5k+\\alpha\\Big\\rfloor-24k .\n\\]\n\nA failure occurs when \\(\\Delta(k)>0\\) and \\(k\\le a\\).\n\n--------------------------------------------------------------------\n### 2.  When can \\(\\Delta(k)>0\\)?\n\nFor any integer \\(k\\),\n\n\\[\n\\Big\\lfloor2.5k\\Big\\rfloor=\n\\frac{5k-(k\\bmod2)}{2}.\n\\]\n\nHence  \n\n\\[\n\\Delta(k)= -\\frac{3k+9(k\\bmod2)}{2}+9\\delta ,\n\\quad\\text{where }\\delta=\n\\begin{cases}\n1,&\\alpha\\ge 1-\\{2.5k\\},\\\\\n0,&\\text{otherwise}.\n\\end{cases}\n\\]\n\nThe term \\(-\\frac{3k+9(k\\bmod2)}{2}\\) is negative for all \\(k\\ge1\\).\nThe only way \\(\\Delta(k)\\) can become positive is when \\(\\delta=1\\).\n\n*If \\(k\\) is even*, \\(\\{2.5k\\}=0\\); thus \\(\\alpha<1\\) never makes \\(\\delta=1\\).\nHence \\(\\Delta(k)\\le0\\) for all even \\(k\\).\n\n*If \\(k\\) is odd*, \\(\\{2.5k\\}=0.5\\).  \nThen \\(\\delta=1\\) exactly when \\(\\alpha\\ge 0.5\\), i.e. when \\(r\\ge5\\) (the remainder of \\(b\\) modulo \\(10\\) is at least \\(5\\)).\n\nFor odd \\(k\\ge3\\) we have  \n\n\\[\n\\Delta(k)=-9+9\\delta\\le0,\n\\]\n\nso no improvement occurs.  \n\nFor \\(k=1\\),\n\n\\[\n\\Delta(1)= -6+9\\delta,\n\\]\n\nwhich is positive precisely when \\(\\delta=1\\); that is, when \\(r\\ge5\\).\n\nConsequently **the greedy algorithm fails exactly when**\n\n* \\(N\\ge25\\) (so at least one quarter is used), and\n* the remainder \\(b=N\\bmod25\\) satisfies \\(b\\bmod10\\ge5\\).\n\nIn terms of residues modulo \\(25\\) this means\n\n\\[\nb\\in\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\tag{3}\n\\]\n\n--------------------------------------------------------------------\n### 3.  Counting the failures\n\nFrom \\(1\\) to \\(1000\\):\n\n* For \\(N<25\\) the greedy algorithm is always optimal (no quarters are used).\n* For each complete block of \\(25\\) numbers, exactly the \\(10\\) residues listed in (3) cause a failure.\n\nThe interval \\(25\\le N\\le999\\) contains \\(39\\) full blocks of size \\(25\\):\n\\[\n39\\cdot10=390\\text{ failures}.\n\\]\n\n\\(N=1000\\) has residue \\(0\\) modulo \\(25\\), so it is not a failure.\n\nThus the number of values where the greedy algorithm **succeeds** is  \n\n\\[\n1000-390 = 610.\n\\]\n\n\\[\n\\boxed{610}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 610

    \n

    Extracted Answer: 610

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    In base \\(b\\),\n\n\\[\n17_b = 1\\cdot b+7 = b+7,\\qquad 97_b = 9\\cdot b+7 .\n\\]\n\nWe need integer bases \\(b>9\\) such that \\(b+7\\) divides \\(9b+7\\).\n\nLet  \n\n\\[\nn = b+7 \\quad\\Longrightarrow\\quad b = n-7.\n\\]\n\nThen  \n\n\\[\n9b+7 = 9(n-7)+7 = 9n-56 .\n\\]\n\nHence \\(n\\) must divide \\(9n-56\\):\n\n\\[\nn \\mid (9n-56) \\;\\Longrightarrow\\; n \\mid (9n-56) - 9n = -56.\n\\]\n\nThus \\(n\\) is a positive divisor of \\(56\\).  \nSince \\(b>9\\), we have \\(n=b+7>16\\); therefore we need divisors of \\(56\\) that are \\(\\ge 17\\).\n\nDivisors of \\(56 = 2^3\\cdot7\\) are  \n\n\\[\n1,\\;2,\\;4,\\;7,\\;8,\\;14,\\;28,\\;56.\n\\]\n\nOnly \\(28\\) and \\(56\\) satisfy \\(n\\ge 17\\).\n\nCorresponding bases:\n\n\\[\nb = n-7 \\quad\\Rightarrow\\quad \n\\begin{cases}\nn=28 &\\Rightarrow b = 21,\\\\[2pt]\nn=56 &\\Rightarrow b = 49.\n\\end{cases}\n\\]\n\nBoth bases exceed \\(9\\) and the digits \\(1,7,9\\) are allowed.\n\nFinally, the sum of all such bases is  \n\n\\[\n21 + 49 = 70.\n\\]\n\n\\[\n\\boxed{70}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 70

    \n

    Extracted Answer: 70

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Label the vertices of the regular \\(24\\)-gon by the residues  \n\\(\\{0,1,2,\\dots ,23\\}\\) modulo \\(24\\).\n\nIf the \\(12\\) drawn segments all have the same Euclidean length, then each\nsegment must join two vertices whose indices differ by a fixed integer  \n\\(k\\;(1\\le k\\le 12)\\) (the \u201cstep size\u2019\u2019), because the length of a chord in a\nregular polygon depends only on this step.\n\nThus for a fixed \\(k\\) we have to choose a perfect matching of the graph  \n\n\\[\nG_k=\\big\\{\\{i,i+k\\}\\mid i=0,1,\\dots ,23\\big\\}.\n\\]\n\n--------------------------------------------------------------------\n### 1.   Structure of \\(G_k\\)\n\n\\(G_k\\) is a **2\u2011regular** graph; each vertex has exactly the two neighbours\n\\(i\\pm k\\).  \nLet  \n\n\\[\nd=\\gcd(k,24).\n\\]\n\nThen the vertices split into \\(d\\) cycles, each of length  \n\n\\[\nt=\\frac{24}{d}.\n\\]\n\nIndeed, repeatedly adding \\(k\\) modulo \\(24\\) runs through a cycle of that\nlength.\n\n--------------------------------------------------------------------\n### 2.   When does a perfect matching exist?\n\nA perfect matching can exist only if each component has an even number of\nvertices, i.e. \\(t\\) must be even.  \nSince \\(t = 24/d\\),\n\n* \\(t\\) is odd only when \\(d=8\\) (giving \\(t=3\\)).  \n  Hence for \\(k=8\\) no perfect matching is possible.\n\nAll other values of \\(k\\) give even\u2011length cycles.\n\n--------------------------------------------------------------------\n### 3.   Number of matchings for a given \\(k\\)\n\n*If \\(t\\ge 4\\) (even cycle of length at least \\(4\\)):  \nA cycle has exactly **two** perfect matchings (choose every other edge).  \nSince there are \\(d\\) independent cycles, the total number of matchings is\n\\(\\displaystyle 2^{d}\\).\n\n*If \\(t=2\\) (the case \\(k=12\\)): each component is a single edge, so there\nis only **one** way to match its two vertices.  \nThus for \\(k=12\\) we obtain \\(1\\) matching.\n\nSummarising\n\n\\[\nf(k)=\n\\begin{cases}\n0, & k=8,\\\\[2mm]\n1, & k=12,\\\\[2mm]\n2^{\\gcd(k,24)}, & \\text{otherwise}.\n\\end{cases}\n\\]\n\n--------------------------------------------------------------------\n### 4.   Summation over all possible step sizes\n\n\\[\n\\begin{array}{c|c|c|c}\nk & \\gcd(k,24) & f(k) & \\text{contribution}\\\\\\hline\n1 & 1 & 2^1=2 & 2\\\\\n2 & 2 & 2^2=4 & 4\\\\\n3 & 3 & 2^3=8 & 8\\\\\n4 & 4 & 2^4=16 & 16\\\\\n5 & 1 & 2 & 2\\\\\n6 & 6 & 2^6=64 & 64\\\\\n7 & 1 & 2 & 2\\\\\n8 & 8 & 0 & 0\\\\\n9 & 3 & 8 & 8\\\\\n10& 2 & 4 & 4\\\\\n11& 1 & 2 & 2\\\\\n12&12 & 1 & 1\\\\\\hline\n\\multicolumn{3}{r|}{\\text{Total}} & 113\n\\end{array}\n\\]\n\n--------------------------------------------------------------------\n### 5.   Answer\n\nThe total number of ways to draw \\(12\\) equal\u2011length segments so that each of\nthe \\(24\\) vertices is used exactly once is  \n\n\\[\n\\boxed{113}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 113

    \n

    Extracted Answer: 113

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Overview**\n\nEach player gets one scoop of either chocolate (C), vanilla (V) or strawberry (S).  \nLet  \n\n\\[\nc=\\#\\text{players who chose chocolate},\\qquad \nv=\\#\\text{players who chose vanilla},\\qquad \ns=\\#\\text{players who chose strawberry}.\n\\]\n\nWe need  \n\n\\[\nc+v+s=9,\\qquad c>v>s\\ge 1 .\n\\]\n\nFor each admissible triple \\((c,v,s)\\) the number of assignments to the 9 distinct players is the multinomial coefficient  \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\nHence  \n\n\\[\nN=\\sum_{\\substack{c+v+s=9\\\\c>v>s\\ge1}}\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\n---\n\n### 1. Find all possible triples \\((c,v,s)\\)\n\nSince \\(c>v>s\\ge1\\),\n\n\\[\ns\\le 2\n\\]\n\n(because \\(s+(s+1)+(s+2)=3s+3\\le9\\Rightarrow s\\le2\\)).  \n\n*If \\(s=1\\):*  \n\\(v\\ge2\\) and \\(c=9-v-1=8-v\\).  \nCondition \\(c>v\\) gives \\(8-v>v\\Rightarrow v\\le3\\).  \nThus \\(v=2,3\\) giving triples \\((6,2,1)\\) and \\((5,3,1)\\).\n\n*If \\(s=2\\):*  \n\\(v\\ge3\\) and \\(c=9-v-2=7-v\\).  \nCondition \\(c>v\\) gives \\(7-v>v\\Rightarrow v\\le3\\).  \nThus \\(v=3\\) giving the triple \\((4,3,2)\\).\n\nNo larger \\(s\\) works.  \nHence the only admissible triples are  \n\n\\[\n(6,2,1),\\qquad (5,3,1),\\qquad (4,3,2).\n\\]\n\n---\n\n### 2. Count assignments for each triple\n\n\\[\n\\begin{aligned}\n(6,2,1):&\\quad \\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[4pt]\n(5,3,1):&\\quad \\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[4pt]\n(4,3,2):&\\quad \\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\n---\n\n### 3. Total number of assignments\n\n\\[\nN=252+504+1260=2016.\n\\]\n\n---\n\n### 4. Remainder modulo \\(1000\\)\n\n\\[\n2016\\equiv 16\\pmod{1000}.\n\\]\n\n---\n\n\\[\n\\boxed{16}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 16

    \n

    Extracted Answer: 16

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Overview**\n\nLet  \n\n\\[\n\\begin{aligned}\nA&=(7,7\\sqrt3),\\qquad \nB=(0,0),\\qquad \nC=(7,0),\\\\[2mm]\nD&=\\Bigl(\\frac{205}{7},\\frac{36\\sqrt3}{7}\\Bigr),\\qquad\nE=\\Bigl(\\frac{218}{7},\\frac{88\\sqrt3}{7}\\Bigr).\n\\end{aligned}\n\\]\n\nThe pentagon \\(ABCDE\\) is convex, \\(\\angle B=\\angle E=60^\\circ\\) and the side\u2013lengths are  \n\n\\[\nAB=14,\\;BC=7,\\;CD=24,\\;DE=13,\\;EA=26 .\n\\]\n\nFor a point \\(X\\) define  \n\n\\[\nf(X)=AX+BX+CX+DX+EX .\n\\]\n\n--------------------------------------------------------------------\n\n### 1.  Reducing the problem\n\nFor any point \\(X\\)\n\n\\[\n\\nabla f(X)=\\sum_{P\\in\\{A,B,C,D,E\\}}\\frac{X-P}{|X-P|}.\n\\]\n\nIf the minimum of \\(f\\) is attained at an interior point,\nthe gradient must be zero:\n\n\\[\n\\frac{X-A}{|X-A|}+\\frac{X-B}{|X-B|}\n+\\frac{X-C}{|X-C|}+\\frac{X-D}{|X-D|}+\\frac{X-E}{|X-E|}=0. \\tag{1}\n\\]\n\nNotice that  \n\n*\\(B\\) and \\(E\\) lie on the same line \\(BE\\).  \nIf a point \\(X\\) is on the line \\(BE\\), the two unit vectors in (1) that\ncorrespond to \\(B\\) and \\(E\\) are opposite:\n\\[\n\\frac{X-B}{|X-B|}+\\frac{X-E}{|X-E|}=0 .\n\\]\n\nHence, **any point on the segment \\(BE\\) automatically cancels the\ncontributions of \\(B\\) and \\(E\\).**  \nConsequently a minimiser must lie on \\(BE\\), and (1) becomes\n\n\\[\n\\frac{X-A}{|X-A|}+\\frac{X-C}{|X-C|}+\\frac{X-D}{|X-D|}=0 .\\tag{2}\n\\]\n\nEquation (2) is precisely the equilibrium condition for the geometric\nmedian (Fermat\u2013Weber point) of the triangle \\(ACD\\).\n\n--------------------------------------------------------------------\n\n### 2.  The Fermat point of \\(\\triangle ACD\\)\n\nThe three angles of \\(\\triangle ACD\\) are  \n\n\\[\n\\angle A\\approx81.8^\\circ ,\\qquad \n\\angle C\\approx68.2^\\circ ,\\qquad \n\\angle D=30^\\circ .\n\\]\n\nAll are \\(<120^\\circ\\); therefore the unique point \\(F\\) inside\n\\(\\triangle ACD\\) for which the three angles \\(\\angle AFD,\n\\angle CFD, \\angle ACF\\) are all \\(120^\\circ\\) is the Fermat point.\nIt is precisely the point satisfying (2); consequently the minimiser of\n\\(f\\) is the intersection of the line \\(BE\\) with this Fermat point.\n(The numerical computation of the Weiszfeld iteration gives\n\\(F\\approx(10.594,\\,7.416)\\), which indeed lies on \\(BE\\).)\n\nFor a triangle with side\u2011lengths \\(a,b,c\\) and area \\(\\Delta\\), the\nminimal sum of distances from its Fermat point to the three vertices is\n\n\\[\n\\boxed{\\displaystyle \n\\sqrt{\\frac{a^{2}+b^{2}+c^{2}+4\\sqrt3\\,\\Delta}{2}} }   \\tag{3}\n\\]\n\n(see any textbook on the Fermat point).\n\n--------------------------------------------------------------------\n\n### 3.  Applying the formula to \\(\\triangle ACD\\)\n\nFor \\(\\triangle ACD\\)\n\n\\[\n\\begin{aligned}\na&=CD=24,\\\\\nb&=AD=13\\sqrt3,\\\\\nc&=AC=7\\sqrt3.\n\\end{aligned}\n\\]\n\nThe area is obtained from the base \\(AC\\) (vertical, length \\(7\\sqrt3\\))\nand the horizontal distance from \\(D\\) to the line \\(AC\\) (which is\n\\( \\frac{156}{7}\\)):\n\n\\[\n\\Delta=\\frac12\\cdot7\\sqrt3\\cdot\\frac{156}{7}=78\\sqrt3 .\n\\]\n\nNow compute the expression in (3):\n\n\\[\n\\begin{aligned}\na^{2}+b^{2}+c^{2}&=24^{2}+(13\\sqrt3)^{2}+(7\\sqrt3)^{2}\n=576+507+147=1230,\\\\[1mm]\n4\\sqrt3\\,\\Delta&=4\\sqrt3\\cdot78\\sqrt3=4\\cdot78\\cdot3=936,\\\\[1mm]\n\\frac{a^{2}+b^{2}+c^{2}+4\\sqrt3\\,\\Delta}{2}\n&=\\frac{1230+936}{2}=1083.\n\\end{aligned}\n\\]\n\nThus  \n\n\\[\nAF+CF+DF=\\sqrt{1083}=19\\sqrt3 .\n\\]\n\n--------------------------------------------------------------------\n\n### 4.  The total minimum\n\nBecause the minimiser lies on \\(BE\\),\n\n\\[\nBF+EF=BE=38 .\n\\]\n\nTherefore\n\n\\[\n\\begin{aligned}\n\\min f(X)&=AF+CF+DF+BF+EF\\\\\n&=19\\sqrt3+38 .\n\\end{aligned}\n\\]\n\nThe required form is \\(m+n\\sqrt{p}\\) with \\(m=38,\\;n=19,\\;p=3\\).\n\nHence  \n\n\\[\nm+n+p = 38+19+3 = 60 .\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{60}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 60

    \n

    Extracted Answer: 60

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The equation  \n\n\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\ncan be factored over the integers:\n\n\\[\n12x^{2}-xy-6y^{2}= (3x+2y)(4x-3y)=0 .\n\\]\n\nHence a pair \\((x,y)\\) of integers satisfies either  \n\n\\[\n\\boxed{3x+2y=0}\\qquad\\text{or}\\qquad\\boxed{4x-3y=0}.\n\\]\n\n---\n\n### 1.  Solutions of \\(3x+2y=0\\)\n\n\\[\n2y=-3x\\quad\\Longrightarrow\\quad y=-\\frac{3}{2}x .\n\\]\n\nFor \\(y\\) to be integer, \\(x\\) must be even: write \\(x=2k\\) with \\(k\\in\\mathbb Z\\).  \nThen \\(y=-3k\\).\n\nThe bounds \\(-100\\le x,y\\le100\\) give  \n\n\\[\n-100\\le2k\\le100\\;\\Longrightarrow\\;-50\\le k\\le50,\n\\]\n\\[\n-100\\le-3k\\le100\\;\\Longrightarrow\\;|k|\\le\\frac{100}{3}\\;\\Longrightarrow\\;-33\\le k\\le33.\n\\]\n\nThus \\(k\\) can be any integer from \\(-33\\) to \\(33\\):  \n\n\\[\n\\#\\{(x,y):3x+2y=0\\}=33+33+1=67 .\n\\]\n\n---\n\n### 2.  Solutions of \\(4x-3y=0\\)\n\n\\[\n4x=3y\\quad\\Longrightarrow\\quad y=\\frac{4}{3}x .\n\\]\n\nFor integer \\(y\\), \\(x\\) must be a multiple of \\(3\\): write \\(x=3m\\) with \\(m\\in\\mathbb Z\\).  \nThen \\(y=4m\\).\n\nThe bounds give  \n\n\\[\n-100\\le3m\\le100\\;\\Longrightarrow\\;|m|\\le\\frac{100}{3}\\;\\Longrightarrow\\;-33\\le m\\le33,\n\\]\n\\[\n-100\\le4m\\le100\\;\\Longrightarrow\\;-25\\le m\\le25.\n\\]\n\nHence \\(m\\) can be any integer from \\(-25\\) to \\(25\\):  \n\n\\[\n\\#\\{(x,y):4x-3y=0\\}=25+25+1=51 .\n\\]\n\n---\n\n### 3.  Removing the double count\n\nThe only pair that satisfies both linear equations is \\((0,0)\\).  \nThus the total number of distinct ordered pairs is  \n\n\\[\n67+51-1=117 .\n\\]\n\n\\[\n\\boxed{117}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 117

    \n

    Extracted Answer: 117

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For a tangential quadrilateral (one that has an incircle) the sum of the lengths of opposite sides are equal.  \nLet the parallel sides of the isosceles trapezoid be \\(r\\) and \\(s\\) \\((r\\neq s)\\) and each leg have length \\(L\\).\n\n\\[\nr+s = L+L = 2L \\quad\\Longrightarrow\\quad L=\\frac{r+s}{2}\n\\]\n\n---\n\n### Using the incircle\n\nFor any tangential quadrilateral  \n\n\\[\n\\text{Area}= (\\text{inradius})\\times (\\text{semiperimeter})\n\\]\n\nThe inradius is \\(3\\) and the area is \\(72\\), so the semiperimeter is  \n\n\\[\n\\frac{72}{3}=24 .\n\\]\n\nThe semiperimeter of the trapezoid is  \n\n\\[\n\\frac{r+s+2L}{2}= \\frac{r+s+r+s}{2}=r+s .\n\\]\n\nHence  \n\n\\[\nr+s = 24 .\n\\]\n\nConsequently  \n\n\\[\nL=\\frac{r+s}{2}=12 .\n\\]\n\n---\n\n### Height of the trapezoid\n\nThe area also equals \\(\\dfrac{(r+s)}{2}\\cdot h\\), where \\(h\\) is the height:\n\n\\[\n72=\\frac{24}{2}\\,h =12h \\;\\Longrightarrow\\; h=6 .\n\\]\n\n(Indeed, the height must be \\(2\\) times the inradius, \\(2\\cdot3=6\\).)\n\n---\n\n### Relating the legs to the bases\n\nIn an isosceles trapezoid the horizontal offset of each leg is  \n\n\\[\nx=\\frac{r-s}{2}.\n\\]\n\nBecause each leg has length \\(L=12\\),\n\n\\[\nL^{2}=x^{2}+h^{2}\\quad\\Longrightarrow\\quad\n12^{2}= \\left(\\frac{r-s}{2}\\right)^{2}+6^{2}.\n\\]\n\nThus  \n\n\\[\n\\left(\\frac{r-s}{2}\\right)^{2}=144-36=108\n\\quad\\Longrightarrow\\quad\nr-s = 2\\sqrt{108}=12\\sqrt3 .\n\\]\n\n---\n\n### Solving for \\(r\\) and \\(s\\)\n\n\\[\n\\begin{cases}\nr+s = 24,\\\\[2pt]\nr-s = 12\\sqrt3 .\n\\end{cases}\n\\]\n\n\\[\nr = \\frac{24+12\\sqrt3}{2}=12+6\\sqrt3,\\qquad\ns = \\frac{24-12\\sqrt3}{2}=12-6\\sqrt3 .\n\\]\n\n---\n\n### Compute \\(r^{2}+s^{2}\\)\n\nUsing \\((r^{2}+s^{2}) = \\dfrac{(r+s)^{2}+(r-s)^{2}}{2}\\),\n\n\\[\nr^{2}+s^{2}= \\frac{24^{2}+(12\\sqrt3)^{2}}{2}\n= \\frac{576+432}{2}\n= \\frac{1008}{2}=504 .\n\\]\n\n\\[\n\\boxed{504}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 504

    \n

    Extracted Answer: 504

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For a number to be divisible by \\(22\\) it must be divisible by \\(2\\) **and** by \\(11\\).\n\n---\n\n### 1.  Divisibility by \\(2\\)\n\nThe last digit (the 8\u2011th digit) must be even.\nThe even digits are \\(\\{2,4,6,8\\}\\).\n\n---\n\n### 2.  Divisibility by \\(11\\)\n\nFor an \\(8\\)-digit number \\(d_1d_2\\ldots d_8\\),\n\n\\[\n\\text{(odd positions)}-\\text{(even positions)}=\n(d_1+d_3+d_5+d_7)-(d_2+d_4+d_6+d_8)\n\\]\n\nmust be a multiple of \\(11\\).\n\nSince the digits \\(1,\\dots ,8\\) are used once,\n\\[\n(d_1+d_3+d_5+d_7)+(d_2+d_4+d_6+d_8)=1+2+\\cdots+8=36 .\n\\]\n\nLet \\(S=d_1+d_3+d_5+d_7\\).  \nThen the alternating sum is \\(2S-36\\).  \nIt must be a multiple of \\(11\\) and also even (because \\(2S-36\\) is even).  \nThe only even multiple of \\(11\\) in the range \\([-16,16]\\) (the possible values of \\(2S-36\\)) is \\(0\\).\n\nHence  \n\n\\[\n2S-36=0\\quad\\Longrightarrow\\quad S=18 .\n\\]\n\nSo the four digits occupying the odd positions must sum to \\(18\\)\n(and automatically the even positions also sum to \\(18\\)).\n\n---\n\n### 3.  Choosing the odd\u2011position set\n\nWe need all \\(4\\)-element subsets of \\(\\{1,2,3,4,5,6,7,8\\}\\) whose sum is \\(18\\).\n\nListing them (or using a generating function) gives\n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThus there are **8** possible sets for the odd positions.\n\nEach such set contains exactly two even digits (any valid set must have\ntwo evens and two odds, because an odd number of evens would give an odd total).\n\n---\n\n### 4.  Arranging the digits\n\n*Odd positions (1,3,5,7)* \u2013 the chosen 4 digits can be placed in \\(4! = 24\\) ways.\n\n*Even positions (2,4,6,8)* \u2013 the remaining four digits must be placed so that\nposition\u202f8 is even.\n\nIf the even\u2011position set contains \\(k\\) even digits, we have \\(k\\) choices for which even digit goes to position\u202f8, and the remaining three digits can be ordered in the other three even positions in \\(3! = 6\\) ways.  \n\nFor every valid odd\u2011set we have exactly \\(k = 2\\) even digits in the even\u2011position set,\nso\n\n\\[\n\\text{arrangements of even positions}=2\\cdot 3! = 12 .\n\\]\n\nHence for each of the 8 possible odd\u2011sets we obtain\n\n\\[\n24 \\times 12 = 288\\text{ permutations}.\n\\]\n\n---\n\n### 5.  Total number \\(N\\)\n\n\\[\nN = 8 \\times 288 = 2304 .\n\\]\n\n---\n\n### 6.  Required difference\n\n\\[\nN - 2025 = 2304 - 2025 = 279 .\n\\]\n\n---\n\n\\[\n\\boxed{279}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 279

    \n

    Extracted Answer: 279

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The equations describe geometric loci in the complex plane.\n\n---\n\n### 1.  The first equation  \n\n\\[\n|25+20i-z|=5\n\\]\n\nis a circle  \n\n\\[\nC:\\;(x-25)^2+(y-20)^2 =5^{\\,2}=25 .\n\\]\n\nIts centre is \\(C_0=(25,20)\\) and its radius is \\(r=5\\).\n\n---\n\n### 2.  The second equation  \n\n\\[\n|z-4-k|=|z-3i-k|\n\\]\n\nmeans that the point \\(z\\) is equidistant from the points  \n\n\\[\nA=(4+k,0), \\qquad B=(k,3).\n\\]\n\nHence the locus is the **perpendicular bisector** of segment \\(\\overline{AB}\\).\n\n* Midpoint of \\(AB\\):\n\n\\[\nM=\\Bigl(\\frac{(k+4)+k}{2},\\frac{0+3}{2}\\Bigr)=(k+2,\\tfrac32).\n\\]\n\n* Direction vector of \\(AB\\):  \n\n\\[\n\\vec{AB}=(-4,3) \\quad\\Longrightarrow\\quad \\text{slope of }AB =-\\frac34 .\n\\]\n\nThe perpendicular bisector therefore has slope the negative reciprocal, \\(\\frac43\\).\n\nThe equation of the line \\(L_k\\) (the bisector) is  \n\n\\[\ny-\\tfrac32=\\frac43\\bigl(x-(k+2)\\bigr)\n\\]\n\nor, after clearing fractions,\n\n\\[\n8x-6y-(8k+7)=0. \\tag{1}\n\\]\n\n---\n\n### 3.  Tangency condition  \n\nThe system has **exactly one** solution precisely when the line \\(L_k\\) is tangent to the circle \\(C\\).  \nTangency occurs when the distance from the centre \\(C_0=(25,20)\\) to the line equals the radius \\(5\\).\n\nFor the line \\(8x-6y-(8k+7)=0\\),\n\n\\[\n\\text{dist}(C_0,L_k)=\\frac{|8\\cdot25-6\\cdot20-(8k+7)|}{\\sqrt{8^2+(-6)^2}}\n                     =\\frac{|200-120-(8k+7)|}{10}\n                     =\\frac{|73-8k|}{10}.\n\\]\n\nSet this equal to the radius \\(5\\):\n\n\\[\n\\frac{|73-8k|}{10}=5\\quad\\Longrightarrow\\quad |73-8k|=50.\n\\]\n\nHence  \n\n\\[\n73-8k=50 \\quad\\text{or}\\quad 73-8k=-50 .\n\\]\n\nSolving gives  \n\n\\[\n\\begin{cases}\n73-8k=50 &\\Rightarrow\\; 8k=23 \\;\\Rightarrow\\; k=\\dfrac{23}{8},\\\\[4pt]\n73-8k=-50 &\\Rightarrow\\; 8k=123 \\;\\Rightarrow\\; k=\\dfrac{123}{8}.\n\\end{cases}\n\\]\n\nBoth values make the line tangent to the circle, so each yields exactly one solution \\(z\\).\n\n---\n\n### 4.  Sum of all possible \\(k\\)\n\n\\[\nk_1+k_2=\\frac{23}{8}+\\frac{123}{8}=\\frac{146}{8}=\\frac{73}{4}.\n\\]\n\nThus \\(m=73,\\; n=4\\) (coprime), and\n\n\\[\nm+n=73+4=77.\n\\]\n\n---\n\n\\[\n\\boxed{77}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 77

    \n

    Extracted Answer: 77

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n\\boxed{240}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 240

    \n

    Extracted Answer: 240

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nA=(0,0),\\qquad B=\\mathbf b ,\\qquad C=\\mathbf c .\n\\]\n\nThen \\(\\triangle ABC\\) has oriented area  \n\n\\[\n[\\triangle ABC]=\\frac12\\,\\bigl(\\mathbf b\\times\\mathbf c\\bigr) .\n\\]\n\n--------------------------------------------------------------------\n### 1.  Coordinates of the points on the sides  \n\nOn \\(AB\\)\n\n\\[\nAD=4,\\;DE=16,\\;EB=8\\qquad\\Longrightarrow\\qquad AB=28 .\n\\]\n\nHence  \n\n\\[\nD=\\frac{4}{28}\\mathbf b=\\frac17\\mathbf b ,\\qquad \nE=\\frac{20}{28}\\mathbf b=\\frac57\\mathbf b .\n\\]\n\nOn \\(AC\\)\n\n\\[\nAF=13,\\;FG=52,\\;GC=26\\qquad\\Longrightarrow\\qquad AC=91 .\n\\]\n\nThus  \n\n\\[\nF=\\frac{13}{91}\\mathbf c ,\\qquad \nG=\\frac{65}{91}\\mathbf c .\n\\]\n\n--------------------------------------------------------------------\n### 2.  Area of \\(DEGF\\)\n\nFor any two points \\(P=\\alpha_P\\mathbf b+\\beta_P\\mathbf c\\) and\n\\(Q=\\alpha_Q\\mathbf b+\\beta_Q\\mathbf c\\),\n\n\\[\nP\\times Q=(\\alpha_P\\beta_Q-\\beta_P\\alpha_Q)\\,(\\mathbf b\\times\\mathbf c).\n\\]\n\nWith the order \\(D\\to E\\to G\\to F\\) we obtain  \n\n\\[\n\\begin{aligned}\n\\sum (P_i\\times P_{i+1})&=\n\\underbrace{D\\times E}_{0}\n+\\underbrace{E\\times G}_{\\frac{5}{7}\\frac{65}{91}\\,K}\n+\\underbrace{G\\times F}_{0}\n+\\underbrace{F\\times D}_{-\\frac{13}{91}\\frac1{7}\\,K}   \\\\[2mm]\n&=\\Bigl(\\frac{5\\cdot65}{7\\cdot91}\n      -\\frac{13}{7\\cdot91}\\Bigr)K\n   =\\frac{312}{637}\\,K ,\n\\end{aligned}\n\\]\n\nwhere \\(K=\\mathbf b\\times\\mathbf c\\).  \nTherefore  \n\n\\[\n[DEGF]=\\frac12\\Bigl|\\frac{312}{637}K\\Bigr|\n       =\\frac{156}{637}|K| .\n\\]\n\nGiven \\([DEGF]=288\\),\n\n\\[\n|K|=288\\cdot\\frac{637}{156}=1176 .\n\\]\n\nConsequently  \n\n\\[\n[\\triangle ABC]=\\frac12|K|=588 .\n\\]\n\n--------------------------------------------------------------------\n### 3.  The reflected points  \n\nReflecting \\(D\\) across \\(F\\) gives  \n\n\\[\nM=2F-D=\\frac{26}{91}\\mathbf c-\\frac{13}{91}\\mathbf b .\n\\]\n\nReflecting \\(G\\) across \\(E\\) gives  \n\n\\[\nN=2E-G=\\frac{130}{91}\\mathbf b-\\frac{65}{91}\\mathbf c .\n\\]\n\n--------------------------------------------------------------------\n### 4.  Area of the heptagon \\(AFNBCEM\\)\n\nList the vertices in the given order and write each as\n\\(P_i=\\alpha_i\\mathbf b+\\beta_i\\mathbf c\\):\n\n\\[\n\\begin{array}{c|c|c}\n\\text{vertex}&\\alpha_i&\\beta_i\\\\\\hline\nA&0&0\\\\\nF&0&\\dfrac{13}{91}\\\\\nN&\\dfrac{130}{91}&-\\dfrac{65}{91}\\\\\nB&1&0\\\\\nC&0&1\\\\\nE&\\dfrac57&0\\\\\nM&-\\dfrac{13}{91}&\\dfrac{26}{91}\n\\end{array}\n\\]\n\nFor the polygon the signed area is  \n\n\\[\n\\frac12\\sum_{i=0}^{6}(\\alpha_i\\beta_{i+1}-\\beta_i\\alpha_{i+1})\\,K .\n\\]\n\nComputing the sum (using the common denominator \\(8281=91^{2}=7^{2}\\,13^{2}\\)) gives  \n\n\\[\n\\sum_{i}(\\alpha_i\\beta_{i+1}-\\beta_i\\alpha_{i+1})=1 .\n\\]\n\nHence  \n\n\\[\n[AFNBCEM]=\\frac12\\,K\n         =\\frac12\\cdot1176\n         =588 .\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{588}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 588

    \n

    Extracted Answer: 588

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(0,c) , \\qquad  b^{2}+c^{2}=BC^{2}=38^{2}=1444 .\n\\]\n\n--------------------------------------------------------------------\n### 1.  Coordinates of \\(K\\) and \\(L\\)\n\nBecause \\(AK=BK=14\\), the point \\(K\\) is on the perpendicular bisector of \\(\\overline{AB}\\); hence  \n\n\\[\nK=\\Bigl(\\frac b2 ,\\; \\sqrt{14^{2}-\\Bigl(\\frac b2\\Bigr)^{2}}\\Bigr).\n\\]\n\nWrite  \n\n\\[\nm=\\frac b2 ,\\qquad p=\\sqrt{196-m^{2}},\n\\]\n\nso \\(K=(m,p)\\) and \\(m^{2}+p^{2}=196\\).\n\nSimilarly \\(AL=CL=14\\) gives  \n\n\\[\nL=\\Bigl(\\sqrt{196-n^{2}},\\; n\\Bigr),\n\\]\n\nwith  \n\n\\[\nn=\\frac c2 ,\\qquad q=\\sqrt{196-n^{2}},\\qquad n^{2}+q^{2}=196 .\n\\]\n\n--------------------------------------------------------------------\n### 2.  Trigonometric parametrisation  \n\nSince \\(m^{2}+p^{2}=196\\) we may set  \n\n\\[\nm=14\\cos\\theta ,\\qquad p=14\\sin\\theta ,\\qquad 0<\\theta<\\frac{\\pi}{2}.\n\\]\n\nLikewise  \n\n\\[\nn=14\\sin\\psi ,\\qquad q=14\\cos\\psi ,\\qquad 0<\\psi<\\frac{\\pi}{2}.\n\\]\n\nBecause \\(AKL\\) is equilateral, \\(\\angle KAL=60^{\\circ}\\); therefore  \n\n\\[\n\\psi-\\theta=60^{\\circ}\\qquad\\Longrightarrow\\qquad\\psi=\\theta+\\frac{\\pi}{3}.\n\\]\n\n--------------------------------------------------------------------\n### 3.  The right\u2011triangle condition  \n\n\\[\nb^{2}+c^{2}=4(m^{2}+n^{2})=1444\\quad\\Longrightarrow\\quad m^{2}+n^{2}=361 .\n\\]\n\nSubstituting the trigonometric expressions,\n\n\\[\n(14\\cos\\theta)^{2}+(14\\sin\\psi)^{2}=361\n\\Longrightarrow \n\\cos ^{2}\\theta+\\sin ^{2}(\\theta+60^{\\circ})=\\frac{361}{196}.\n\\]\n\nUsing \\(\\sin^{2}\\alpha=\\frac{1-\\cos2\\alpha}{2}\\) and simplifying we obtain  \n\n\\[\n3\\cos2\\theta+\\sqrt3\\sin2\\theta=\\frac{165}{49}.\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Area of \\(BKLC\\)\n\nThe region \\(BKLC\\) is the triangle \\(ABC\\) with three interior triangles removed:\n\n\\[\n[BKLC]=[ABC]-[ABK]-[ALC]-[AKL].\n\\]\n\nNow  \n\n\\[\n[ABC]=\\frac{bc}{2}=2mn, \\qquad\n[ABK]=\\frac{b\\;y_{K}}{2}=mp, \\qquad\n[ALC]=\\frac{c\\;x_{L}}{2}=nq,\n\\]\n\nand \\([AKL]=\\frac{\\sqrt3}{4}\\,14^{2}=49\\sqrt3\\).\n\nHence  \n\n\\[\nS=[BKLC]=2mn-mp-nq-49\\sqrt3 .\n\\tag{2}\n\\]\n\nInsert the trigonometric forms:\n\n\\[\n\\begin{aligned}\n2mn&=2(14\\cos\\theta)(14\\sin\\psi)=196\\bigl(2\\cos\\theta\\sin\\psi\\bigr),\\\\\nmp&=14^{2}\\cos\\theta\\sin\\theta=196(\\cos\\theta\\sin\\theta),\\\\\nnq&=14^{2}\\sin\\psi\\cos\\psi=196(\\sin\\psi\\cos\\psi).\n\\end{aligned}\n\\]\n\nThus  \n\n\\[\nS=196\\bigl[2\\cos\\theta\\sin\\psi-(\\cos\\theta\\sin\\theta+\\sin\\psi\\cos\\psi)\\bigr]-49\\sqrt3 .\n\\tag{3}\n\\]\n\nUsing \\(\\psi=\\theta+60^{\\circ}\\) and elementary identities, (3) reduces to  \n\n\\[\nS=49\\bigl[\\sqrt3\\,(4\\cos^{2}\\theta-1)-2\\sin(2\\theta+120^{\\circ})\\bigr].\n\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n### 5.  Eliminate the trigonometric functions\n\nSet  \n\n\\[\nA=\\cos(2\\theta-30^{\\circ}).\n\\]\n\nFrom (1),\n\n\\[\n3\\cos2\\theta+\\sqrt3\\sin2\\theta\n      =\\frac{165}{49}\n      =2\\sqrt3\\,A .\n\\]\n\nHence  \n\n\\[\nA=\\frac{165}{98\\sqrt3}.\n\\tag{5}\n\\]\n\nExpress the right\u2013hand side of (4) in terms of \\(A\\).  \nWrite  \n\n\\[\n\\begin{aligned}\nX&=\\frac{\\sqrt3}{2}\\cos2\\theta,\\qquad\nY=\\frac12\\sin2\\theta,\n\\end{aligned}\n\\]\n\nso that  \n\n\\[\nA=X+Y,\\qquad\n\\sin(2\\theta+120^{\\circ})=X-Y .\n\\]\n\nThen  \n\n\\[\n\\sqrt3\\,(4\\cos^{2}\\theta-1)=\\sqrt3+4X,\n\\qquad\n-2\\sin(2\\theta+120^{\\circ})=-2(X-Y).\n\\]\n\nSubstituting these into (4) gives  \n\n\\[\nS=49\\bigl(\\sqrt3+4X-2X+2Y\\bigr)\n   =49\\bigl(\\sqrt3+2(X+Y)\\bigr)\n   =49\\bigl(\\sqrt3+2A\\bigr).\n\\]\n\nFinally insert (5):\n\n\\[\nS=49\\left(\\sqrt3+\\frac{2\\cdot165}{98\\sqrt3}\\right)\n   =49\\sqrt3+\\frac{165}{\\sqrt3}\n   =\\frac{147+165}{\\sqrt3}\n   =\\frac{312}{\\sqrt3}\n   =104\\sqrt3 .\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{104}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 104

    \n

    Extracted Answer: 104

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the letters be numbered  \n\n\\[\nA=1,\\;B=2,\\;\\dots ,\\;L=12 .\n\\]\n\nA random pairing of the 12 letters is a **perfect matching**.  \nThe total number of unordered pairings is  \n\n\\[\n(12-1)!!=\\frac{12!}{2!^{6}6!}=10395 .\n\\]\n\n---\n\n### 1.  Fix the partner of \\(G\\)\n\nIn a random matching the partner of \\(G\\) is equally likely to be any of the other \\(11\\) letters.  \nLet the partner be \\(X\\neq G\\).  Write  \n\n\\[\nm=\\min \\{G,X\\}.\n\\]\n\nThe pair containing \\(G\\) will be the last (lexicographically largest) word **iff**  \nall minima of the other five pairs are less than \\(m\\).  \nHence we must count, for each possible partner \\(X\\), the number of matchings of the\nremaining \\(10\\) letters whose minima are all \\(<m\\).\n\nDenote by  \n\n* \\(L\\) \u2013 the letters smaller than \\(m\\) that are still present,\n* \\(H\\) \u2013 the letters larger than \\(m\\) that are still present.\n\nIf a matching of those ten letters contains a pair wholly inside \\(H\\) then its minimum\nis \\(\\ge m\\), which is not allowed.  \nThus **every letter of \\(H\\) must be paired with a distinct letter of \\(L\\)**.  \nThe remaining letters of \\(L\\) (if any) are paired among themselves.\n\nLet \\(|L|=a,\\;|H|=b\\) \\((a+b=10)\\).  \nA valid matching is obtained by\n\n1. choosing which \\(b\\) letters of \\(L\\) will be paired with the \\(b\\) letters of \\(H\\)\n   \u2013 \\(\\binom{a}{b}\\) ways;\n2. bijecting the chosen \\(b\\) letters of \\(L\\) with the \\(b\\) letters of \\(H\\) \u2013\n   \\(b!\\) ways;\n3. pairing the remaining \\(a-b\\) letters of \\(L\\) among themselves \u2013 \\((a-b-1)!!\\) ways.\n\nHence the number of \u201cgood\u2019\u2019 matchings is  \n\n\\[\n\\text{good}= \\binom{a}{b}\\,b!\\,(a-b-1)!! \n           =\\frac{a!}{2^{(a-b)/2}\\,\\bigl((a-b)/2\\bigr)! } .\n\\]\n\nThe total number of matchings of ten letters is  \n\n\\[\n\\frac{10!}{2!^{5}5!}=945 .\n\\]\n\n---\n\n### 2.  Cases for the partner \\(X\\)\n\n#### (i)  \\(X>G\\)  \n\nPossible partners: \\(H,I,J,K,L\\) (5 choices).  \nHere \\(m=G\\).  \nAmong the remaining letters we have  \n\n\\[\nL=\\{A,B,C,D,E,F\\}\\;(a=6),\\qquad\nH=\\{\\text{the four letters }>G\\text{ other than }X\\}\\;(b=4).\n\\]\n\nThus  \n\n\\[\n\\text{good}= \\frac{6!}{2^{1}\\cdot1!}=360,\n\\qquad\nP(\\text{good}\\mid X)=\\frac{360}{945}= \\frac{8}{21}.\n\\]\n\nContribution to the required probability:\n\n\\[\n5\\cdot\\frac1{11}\\cdot\\frac{8}{21}= \\frac{40}{231}.\n\\]\n\n#### (ii)  \\(X<G\\)\n\nPossible partners: \\(A,B,C,D,E,F\\).  \nWrite \\(X\\) as the \\(i\\)-th letter (\\(i=1,\\dots ,6\\)).\nThen  \n\n\\[\na=i-1,\\qquad b=11-i .\n\\]\n\nThe condition \u201call minima \\(<X\\)\u201d requires \\(b\\le a\\); this holds only when \\(i=6\\),\ni.e. \\(X=F\\).\n\nFor \\(X=F\\),\n\n\\[\nL=\\{A,B,C,D,E\\},\\; a=5,\\qquad \nH=\\{H,I,J,K,L\\},\\; b=5 .\n\\]\n\nHence  \n\n\\[\n\\text{good}=5! =120,\n\\qquad\nP(\\text{good}\\mid X=F)=\\frac{120}{945}= \\frac{8}{63}.\n\\]\n\nContribution from this case:\n\n\\[\n\\frac1{11}\\cdot\\frac{8}{63}= \\frac{8}{693}.\n\\]\n\nAll other choices of \\(X<G\\) give probability \\(0\\).\n\n---\n\n### 3.  Total probability\n\n\\[\nP=\\frac{40}{231}+\\frac{8}{693}\n   =\\frac{120}{693}+\\frac{8}{693}\n   =\\frac{128}{693}.\n\\]\n\nThus  \n\n\\[\n\\frac{m}{n}= \\frac{128}{693},\\qquad m+n=128+693=821.\n\\]\n\n\\[\n\\boxed{821}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 821

    \n

    Extracted Answer: 821

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    First write the conditions in a convenient form.\n\n\\[\nx+y+z = 75 \\qquad\\text{and}\\qquad \nx-yz<y-zx<z-xy .\n\\]\n\nFactor each inequality:\n\n\\[\n\\begin{aligned}\nx-yz<y-zx &\\iff (x-y)(1+z)<0,\\\\\ny-zx<z-xy &\\iff (y-z)(1+x)<0 .\n\\end{aligned}\n\\]\n\nThus on the plane \\(x+y+z=75\\),\n\n\\[\n(x-y)(z+1)<0,\\qquad (y-z)(x+1)<0 .\n\\]\n\n---\n\n### 1.  Reduce to two variables\n\nFrom \\(z=75-x-y\\) we obtain\n\n\\[\n\\begin{aligned}\n(x-y)(z+1)&=(x-y)(76-x-y),\\\\\n(y-z)(x+1)&=(x+2y-75)(x+1).\n\\end{aligned}\n\\]\n\nHence the region in the \\((x,y)\\)-plane is described by  \n\n\\[\n\\boxed{(x-y)(76-x-y)<0}\\qquad\\text{and}\\qquad\\boxed{(x+2y-75)(x+1)<0}.\n\\tag{1}\n\\]\n\nThe four linear factors are\n\n\\[\nL_1=x-y,\\;L_2=76-x-y,\\;L_3=x+2y-75,\\;L_4=x+1 .\n\\]\n\n---\n\n### 2.  Split the two products\n\n\\[\n\\begin{aligned}\n(x-y)(76-x-y)<0 &\\Longleftrightarrow \n\\begin{cases}\nx>y,\\;x+y>76\\quad\\text{(region }A)\\\\\n\\text{or}\\\\\nx<y,\\;x+y<76\\quad\\text{(region }B)\n\\end{cases}\\\\[2mm]\n(x+2y-75)(x+1)<0 &\\Longleftrightarrow\n\\begin{cases}\nx<-1,\\;x+2y>75\\quad\\text{(region }C)\\\\\n\\text{or}\\\\\nx>-1,\\;x+2y<75\\quad\\text{(region }D)\n\\end{cases}\n\\end{aligned}\n\\]\n\nIntersecting the possibilities gives four candidate regions:\n\n\\[\n\\begin{array}{c|c}\n\\text{Intersection} & \\text{Constraints}\\\\ \\hline\nA\\cap C & x>y,\\;x+y>76,\\;x<-1,\\;x+2y>75\\\\\nA\\cap D & x>y,\\;x+y>76,\\;x>-1,\\;x+2y<75\\\\\nB\\cap C & x<y,\\;x+y<76,\\;x<-1,\\;x+2y>75\\\\\nB\\cap D & x<y,\\;x+y<76,\\;x>-1,\\;x+2y<75\n\\end{array}\n\\]\n\nThe first intersection is impossible (it would require \\(x>y\\) while \\(x<-1<y\\)), so it is empty.\nThe remaining three are non\u2011empty; two are unbounded, while one is bounded.\n\n---\n\n### 3.  Identify the bounded region\n\nThe bounded region is \\(B\\cap D\\):\n\n\\[\n\\begin{cases}\nx>-1,\\\\[2pt]\nx<y,\\\\[2pt]\nx+2y<75 .\n\\end{cases}\n\\]\n\nFrom \\(x<y\\) and \\(x+2y<75\\) we obtain the upper bound for \\(y\\):\n\\[\ny<\\frac{75-x}{2}.\n\\]\n\nTogether with \\(x>-1\\) this forces\n\\[\n-1<x<25,\n\\qquad\nx<y<\\frac{75-x}{2}.\n\\]\n\nHence in the \\((x,y)\\)-plane the region is the open triangle bounded by the three lines\n\n\\[\nx=-1,\\quad y=x,\\quad y=\\frac{75-x}{2}.\n\\]\n\nIts vertices are  \n\n\\[\n(-1,-1),\\;(-1,38),\\;(25,25).\n\\]\n\nThe area in the \\((x,y)\\)-plane is\n\n\\[\n\\text{Area}_{xy}\n= \\frac12\\cdot(\\text{base})\\cdot(\\text{height})\n= \\frac12\\cdot 39 \\cdot 26=507 .\n\\]\n\n---\n\n### 4.  Convert to area on the original plane\n\nThe plane \\(x+y+z=75\\) can be written as \\(z=75-x-y\\).\nFor a graph \\(z=f(x,y)\\) the surface element is  \n\n\\[\ndA = \\sqrt{1+f_x^2+f_y^2}\\,dx\\,dy\n    =\\sqrt{1+(-1)^2+(-1)^2}\\,dx\\,dy\n    =\\sqrt{3}\\,dx\\,dy .\n\\]\n\nTherefore the area of the finite region on the plane \\(x+y+z=75\\) is  \n\n\\[\n\\text{Area}= \\sqrt{3}\\times 507 = 507\\sqrt{3}.\n\\]\n\n---\n\n### 5.  Form \\(a\\sqrt{b}\\) and compute \\(a+b\\)\n\n\\[\na=507,\\qquad b=3\\;( \\text{square\u2011free}).\n\\]\n\nThus  \n\n\\[\na+b = 507+3 = 510.\n\\]\n\n\\[\n\\boxed{510}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 510

    \n

    Extracted Answer: 510

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nA piecewise linear periodic function is defined by $f(x)=\\begin{cases}x&\\text{if }x\\in[-1,1)\\\\2-x&\\text{if }x\\in[1,3)\\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\\frac{a+b\\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The graph of  \n\n\\[\nf(x)=\\begin{cases}\nx,&-1\\le x<1\\\\[2pt]\n2-x,&1\\le x<3\n\\end{cases},\\qquad f(x+4)=f(x)\n\\]\n\nis a periodic \u201csaw\u2011tooth\u2019\u2019 of period \\(4\\).  \nThe parabola is  \n\n\\[\nx=34y^{2}\\qquad (x\\ge 0).\n\\]\n\nFor an intersection we need  \n\n\\[\ny=f(x),\\qquad x=34y^{2}.\n\\]\n\n--------------------------------------------------------------------\n### 1.   Reducing the \\(x\\)\u2013coordinate\n\nWrite \\(x=34y^{2}=4n+u\\) where \\(n\\in\\mathbb Z\\) and the reduced part  \n\n\\[\nu\\in[-1,3)\n\\]\n\n(because on each period we use the definition of \\(f\\) on \\([-1,3)\\)).\nHence  \n\n\\[\nu=34y^{2}-4n .\n\\]\n\n--------------------------------------------------------------------\n### 2.   The two cases for \\(u\\)\n\n* If \\(u\\in[-1,1)\\) then \\(f(x)=u\\); the equation becomes  \n\n  \\[\n  y=u\\quad\\Longrightarrow\\quad y=34y^{2}-4n .\n  \\]\n\n* If \\(u\\in[1,3)\\) then \\(f(x)=2-u\\); the equation becomes  \n\n  \\[\n  y=2-u\\quad\\Longrightarrow\\quad u=2-y ,\n  \\]\n  hence  \n\n  \\[\n  34y^{2}-4n=2-y .\n  \\]\n\nBecause \\(f(x)\\) takes only values in \\([-1,1]\\), all solutions must satisfy \\(-1\\le y\\le 1\\).\n\n--------------------------------------------------------------------\n### 3.   Solving the quadratics\n\n**Case A:** \\(y=34y^{2}-4n\\)\n\n\\[\n34y^{2}-y-4n=0\\qquad\\Longrightarrow\\qquad  \ny=\\frac{1\\pm\\sqrt{1+544n}}{68}.\n\\]\n\n**Case B:** \\(34y^{2}-4n=2-y\\)\n\n\\[\n34y^{2}+y-(2+4n)=0\\qquad\\Longrightarrow\\qquad  \ny=\\frac{-1\\pm\\sqrt{273+544n}}{68}.\n\\]\n\nSince \\(x=34y^{2}\\le 34\\), we have \\(0\\le x\\le 34\\).  \nConsequently \\(4n+u\\le 34\\) and with \\(u\\ge-1\\) we obtain \\(0\\le n\\le8\\).\n\n--------------------------------------------------------------------\n### 4.   Which roots lie in \\([-1,1]\\)?\n\n* For **Case\u202fA** (\\(n=0,\\dots,8\\)) both roots are in \\([-1,1]\\).  \n  Their sum for each \\(n\\) is\n\n  \\[\n  y_{A+}+y_{A-}= \\frac{1}{34}.\n  \\]\n\n* For **Case\u202fB** (\\(n=0,\\dots,7\\)) both roots are in \\([-1,1]\\);  \n  for \\(n=8\\) only the \u201c+\u2019\u2019 root lies in the interval.  \n  The sum of the two roots for each \\(n\\le7\\) is\n\n  \\[\n  y_{B+}+y_{B-}= -\\frac{1}{34}.\n  \\]\n\nThus the total sum of all \\(y\\)-coordinates is\n\n\\[\n\\begin{aligned}\n\\sum y &=\\sum_{n=0}^{8}\\frac1{34}\\;+\\;\\sum_{n=0}^{7}\\!\\Big(-\\frac1{34}\\Big)\\;+\\;y_{B+}(8)\\\\\n&= \\frac{9}{34}-\\frac{8}{34}+y_{B+}(8)\\\\\n&= \\frac1{34}+ \\frac{-1+\\sqrt{273+544\\cdot8}}{68}.\n\\end{aligned}\n\\]\n\nSince \\(273+544\\cdot8 = 4625 = 25\\cdot185\\),\n\n\\[\ny_{B+}(8)=\\frac{-1+5\\sqrt{185}}{68},\n\\qquad\n\\frac1{34}= \\frac{2}{68}.\n\\]\n\nHence\n\n\\[\n\\sum y =\\frac{2-1+5\\sqrt{185}}{68}= \\frac{1+5\\sqrt{185}}{68}.\n\\]\n\n--------------------------------------------------------------------\n### 5.   Final form\n\n\\[\n\\frac{1+5\\sqrt{185}}{68}= \\frac{a+b\\sqrt{c}}{d},\n\\qquad \na=1,\\;b=5,\\;c=185,\\;d=68 .\n\\]\n\nAll conditions are satisfied (\\(\\gcd(a,b,d)=1\\) and \\(185\\) is square\u2011free).\n\n\\[\na+b+c+d = 1+5+185+68 = 259.\n\\]\n\n\\[\n\\boxed{259}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 259

    \n

    Extracted Answer: 259

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 27 cells of a $3\\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. \n | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | \n | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | \n | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | \n The number of different ways to fill such a grid can be written as $p^a\\cdot q^b\\cdot r^c\\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\\cdot a+q\\cdot b+r\\cdot c+s\\cdot d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the three rows be \\(R_{1},R_{2},R_{3}\\) and the three \\(3\\times 3\\) blocks be  \n\n\\[\nB_{1}= \\text{columns }1\\!-\\!3,\\qquad   \nB_{2}= \\text{columns }4\\!-\\!6,\\qquad   \nB_{3}= \\text{columns }7\\!-\\!9 .\n\\]\n\n--------------------------------------------------------------------\n### 1.  Fix the first row  \n\nSince the rows are labelled, we may first choose any permutation of \\(\\{1,\\dots ,9\\}\\) for \\(R_{1}\\).\nThere are  \n\n\\[\n9! = 2^{7}\\cdot 3^{4}\\cdot5\\cdot7\n\\]\n\nways.\n\n--------------------------------------------------------------------\n### 2.  Which digits go to the second row in each block?  \n\nAssume \\(R_{1}=1\\,2\\,3\\;4\\,5\\,6\\;7\\,8\\,9\\) (the identity permutation).  \nThen  \n\n* In \\(B_{1}\\) the missing digits are \\(\\{4,5,6,7,8,9\\}\\);  \n* In \\(B_{2}\\) the missing digits are \\(\\{1,2,3,7,8,9\\}\\);  \n* In \\(B_{3}\\) the missing digits are \\(\\{1,2,3,4,5,6\\}\\).\n\nFor the second row we must pick, from each block, three of its six missing digits.\nThe three rows must each contain every digit exactly once, so each digit\nmust appear **once** in \\(R_{2}\\) (and the remaining occurrence of that digit will be in \\(R_{3}\\)).\nThus the choice of digits for \\(R_{2}\\) is a partition of the six\u2013digit sets\nsubject to the condition that each of the nine digits occurs in exactly one block of \\(R_{2}\\).\n\nLet  \n\n* \\(x\\) = number of digits \\(\\{1,2,3\\}\\) placed in \\(B_{2}\\) (the rest go to \\(B_{3}\\));\n* \\(y\\) = number of digits \\(\\{4,5,6\\}\\) placed in \\(B_{1}\\) (the rest go to \\(B_{3}\\));\n* \\(z\\) = number of digits \\(\\{7,8,9\\}\\) placed in \\(B_{1}\\) (the rest go to \\(B_{2}\\)).\n\nFrom the block\u2011size condition we obtain  \n\n\\[\n\\begin{cases}\ny+z=3,\\\\\nx+ (3-z)=3,\\\\\n(3-x)+(3-y)=3,\n\\end{cases}\\qquad\\Longrightarrow\\qquad\nx=z,\\;x+y=3 .\n\\]\n\nHence \\(x\\) may be \\(0,1,2,3\\); then \\(y=3-x\\) and \\(z=x\\).\nFor a given \\(x\\),\n\n* choose the \\(x\\) digits of \\(\\{1,2,3\\}\\) that go to \\(B_{2}\\): \\(\\binom{3}{x}\\) ways;\n* choose the \\(y=3-x\\) digits of \\(\\{4,5,6\\}\\) that go to \\(B_{1}\\): \\(\\binom{3}{3-x}=\\binom{3}{x}\\) ways;\n* choose the \\(z=x\\) digits of \\(\\{7,8,9\\}\\) that go to \\(B_{1}\\): \\(\\binom{3}{x}\\) ways.\n\nThus for this \\(x\\) we have \\(\\bigl(\\binom{3}{x}\\bigr)^{3}\\) possibilities.\nSumming over \\(x=0,1,2,3\\),\n\n\\[\n\\sum_{x=0}^{3}\\binom{3}{x}^{3}=1+27+27+1=56 .\n\\]\n\nSo there are \\(56\\) ways to decide which three\u2011digit sets belong to the second row\n(and the third row is forced to receive the complementary sets).\n\n--------------------------------------------------------------------\n### 3.  Ordering the digits inside each block  \n\nInside a block each row contains three distinct digits.\nFor a fixed block, the three chosen digits of \\(R_{2}\\) can be placed in the\nthree columns in \\(3!\\) ways, and independently the three digits of \\(R_{3}\\) can be placed in \\(3!\\) ways.\nHence each block contributes \\((3!)^{2}=36\\) arrangements.\n\nWith three blocks we obtain \\((36)^{3}=36^{3}=46\\,656\\) column\u2011orderings.\n\n--------------------------------------------------------------------\n### 4.  Total number of grids  \n\n\\[\nN = 9! \\times 56 \\times 36^{3}\n     = 2^{7}\\!3^{4}\\!5\\!7\\; \\times 2^{3}\\!7\\; \\times 2^{6}\\!3^{6}\n     = 2^{16}\\,3^{10}\\,5^{1}\\,7^{2}.\n\\]\n\nThus\n\n\\[\nN = p^{a}\\,q^{b}\\,r^{c}\\,s^{d}\n\\quad\\text{with}\\quad\n(p,q,r,s)=(2,3,5,7),\\;\n(a,b,c,d)=(16,10,1,2).\n\\]\n\n--------------------------------------------------------------------\n### 5.  Required sum  \n\n\\[\np a + q b + r c + s d\n = 2\\cdot16 + 3\\cdot10 + 5\\cdot1 + 7\\cdot2\n = 32 + 30 + 5 + 14\n = 81 .\n\\]\n\n\\[\n\\boxed{81}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 81

    \n

    Extracted Answer: 81

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the line containing the points be the \\(x\\)-axis.  \nPlace \\(A\\) at the origin, \\(A=(0,0)\\), and write the coordinates of the other\ncollinear points as\n\n\\[\nB=(x_B,0),\\;C=(x_C,0),\\;D=(x_D,0),\\;E=(x_E,0),\\;F=(x_F,0).\n\\]\n\n---\n\n### 1.  Find the positions of \\(B,\\;C,\\;D,\\;E,\\;F\\)\n\nThe given distances are along the line, so\n\n\\[\n\\begin{aligned}\nAC&=26 &&\\Rightarrow x_C=26,\\\\[2pt]\nAF&=73 &&\\Rightarrow x_F=73,\\\\[2pt]\nCE&=31 &&\\Rightarrow x_E=x_C+31=57,\\\\[2pt]\nDF&=33 &&\\Rightarrow x_D=x_F-33=40,\\\\[2pt]\nBD&=22 &&\\Rightarrow x_B=x_D-22=18.\n\\end{aligned}\n\\]\n\nThus  \n\n\\[\nA=0,\\; B=18,\\; C=26,\\; D=40,\\; E=57,\\; F=73 .\n\\]\n\n---\n\n### 2.  Coordinates of \\(G\\)\n\nLet \\(G=(x_G,h)\\), where \\(h>0\\) is the perpendicular distance from \\(G\\) to the line.\n\nThe distances from \\(G\\) to \\(C\\) and \\(D\\) give\n\n\\[\n\\begin{cases}\n(x_G-26)^2+h^2 = 40^2 = 1600,\\\\[4pt]\n(x_G-40)^2+h^2 = 30^2 = 900 .\n\\end{cases}\n\\]\n\nSubtracting the second equation from the first:\n\n\\[\n(x_G-26)^2-(x_G-40)^2 = 1600-900 = 700 .\n\\]\n\nCompute the left side:\n\n\\[\n(x_G^2-52x_G+26^2)-(x_G^2-80x_G+40^2)\n=28x_G-924 .\n\\]\n\nHence  \n\n\\[\n28x_G-924 = 700 \\quad\\Longrightarrow\\quad 28x_G = 1624\n\\quad\\Longrightarrow\\quad x_G = 58 .\n\\]\n\nNow find \\(h\\) using either distance equation; use the first:\n\n\\[\n(58-26)^2 + h^2 = 1600\n\\Longrightarrow 32^2 + h^2 = 1600\n\\Longrightarrow h^2 = 1600-1024 = 576\n\\Longrightarrow h = 24 .\n\\]\n\nThus \\(G=(58,24)\\). Its perpendicular projection onto the line is at \\(x=58\\), which lies between \\(E\\) and \\(F\\).\n\n---\n\n### 3.  Area of \\(\\triangle BGE\\)\n\nThe base \\(BE\\) lies on the \\(x\\)-axis:\n\n\\[\nBE = x_E - x_B = 57-18 = 39 .\n\\]\n\nThe height from \\(G\\) to this base is the vertical distance \\(h=24\\).\n\nTherefore\n\n\\[\n\\text{Area} = \\frac12 \\times (\\text{base}) \\times (\\text{height})\n= \\frac12 \\times 39 \\times 24 = 39 \\times 12 = 468 .\n\\]\n\n---\n\n\\[\n\\boxed{468}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 468

    \n

    Extracted Answer: 468

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n\\text{Find all }n\\in\\mathbb Z_{>0}\\text{ such that }(n+2)\\mid 3(n+3)(n^2+9).\n\\]\n\n---\n\n### 1.  Replace \\(n+2\\) by a new variable  \n\nSet  \n\\[\nm=n+2\\qquad (m\\ge 3).\n\\]\n\nThen  \n\n\\[\nn=m-2,\\qquad n+3=m+1,\\qquad n^2+9=(m-2)^2+9=m^{2}-4m+13 .\n\\]\n\nHence the divisibility condition becomes  \n\n\\[\nm\\mid 3(m+1)(m^{2}-4m+13).\n\\tag{1}\n\\]\n\n---\n\n### 2.  Reduce the right\u2013hand side modulo \\(m\\)\n\nModulo \\(m\\),\n\n\\[\nm+1\\equiv 1,\\qquad m^{2}-4m+13\\equiv 13 .\n\\]\n\nTherefore  \n\n\\[\n3(m+1)(m^{2}-4m+13)\\equiv 3\\cdot1\\cdot13=39 \\pmod m .\n\\]\n\nSo (1) is equivalent to  \n\n\\[\nm\\mid 39 .\n\\tag{2}\n\\]\n\nIndeed, if \\(m\\mid 39\\) then the right\u2013hand side of (1) equals \\(39+km\\) for some integer \\(k\\), hence is divisible by \\(m\\); conversely, if \\(m\\mid 3(m+1)(m^{2}-4m+13)\\) then \\(m\\mid 39\\).\n\n---\n\n### 3.  List possible \\(m\\)\n\nThe positive divisors of \\(39\\) are  \n\n\\[\n1,\\;3,\\;13,\\;39 .\n\\]\n\nSince \\(m=n+2\\ge 3\\) (because \\(n\\ge1\\)), we keep  \n\n\\[\nm\\in\\{3,\\;13,\\;39\\}.\n\\]\n\n---\n\n### 4.  Recover the corresponding \\(n\\)\n\n\\[\n\\begin{aligned}\nm=3 &\\;\\Rightarrow\\; n=m-2=1,\\\\[2pt]\nm=13 &\\;\\Rightarrow\\; n=11,\\\\[2pt]\nm=39 &\\;\\Rightarrow\\; n=37 .\n\\end{aligned}\n\\]\n\nAll three indeed satisfy the original divisibility (quick check: the quotients are \\(40,420,4240\\) respectively).\n\n---\n\n### 5.  Sum of all such \\(n\\)\n\n\\[\n1+11+37=49.\n\\]\n\n\\[\n\\boxed{49}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 49

    \n

    Extracted Answer: 49

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nP:\\;y=x^{2}-4\n\\]\n\nand rotate \\(P\\) \\(60^{\\circ}\\) counter\u2011clockwise about the origin.  \nIf \\((u,v)\\) is a point of \\(P\\) \\((v=u^{2}-4)\\), after the rotation we obtain  \n\n\\[\n\\begin{aligned}\nx &=u\\cos 60^{\\circ}-v\\sin 60^{\\circ}\n      =\\frac{u-\\sqrt3\\,(u^{2}-4)}2,\\\\[2mm]\ny &=u\\sin 60^{\\circ}+v\\cos 60^{\\circ}\n      =\\frac{\\sqrt3\\,u+u^{2}-4}2 .\n\\end{aligned}\n\\tag{1}\n\\]\n\nA point \\((x,y)\\) that belongs to both the original parabola and its image\nmust satisfy  \n\n\\[\ny=x^{2}-4 \\qquad\\text{and}\\qquad (x,y)=\\bigl(x(u),y(u)\\bigr)\\text{ for some }u .\n\\]\n\nUsing (1) and substituting \\(y=x^{2}-4\\) we get an equation for the\npre\u2011image coordinate \\(u\\):\n\n\\[\n\\Bigl(u-\\sqrt3\\,(u^{2}-4)\\Bigr)^{2}=2u^{2}+2\\sqrt3\\,u+8 .\n\\]\n\nSimplifying gives  \n\n\\[\n3u^{4}-25u^{2}+40+2\\sqrt3\\,u\\,(3-u^{2})=0 .\n\\tag{2}\n\\]\n\nLet \\(t=u^{2}=x^{2}\\;(t\\ge0)\\).  Equation (2) becomes  \n\n\\[\n\\bigl(3t^{2}-25t+40\\bigr)^{2}=12t\\,(3-t)^{2},\n\\]\n\nor\n\n\\[\n9t^{4}-162t^{3}+937t^{2}-2108t+1600=0 .\n\\tag{3}\n\\]\n\nThe quartic factors over the integers:\n\n\\[\n\\begin{aligned}\n9t^{4}-162t^{3}+937t^{2}-2108t+1600\n  &=\\bigl(t^{2}-11t+16\\bigr)\\bigl(9t^{2}-63t+100\\bigr).\n\\end{aligned}\n\\]\n\nThus the possible values of \\(t\\) are\n\n\\[\nt=\\frac{11\\pm\\sqrt{57}}2,\\qquad\nt=\\frac{63\\pm\\sqrt{369}}{18}.\n\\]\n\nRecall that \\(t=x^{2}\\) and that a genuine intersection must satisfy the\noriginal unsquared equation  \n\n\\[\n3t^{2}-25t+40=2\\sqrt3\\,\\sqrt t\\,(3-t).\n\\tag{4}\n\\]\n\nChecking the sign of each side of (4) shows that only  \n\n\\[\nt=\\frac{11-\\sqrt{57}}2\\approx1.725\n\\]\n\nsatisfies (4) with \\(x>0\\).  (The other three roots correspond to the\ncase \\(3t^{2}-25t+40= -2\\sqrt3\\,\\sqrt t\\,(3-t)\\) or give \\(y>0\\).)\n\nSince \\(y=x^{2}-4=t-4\\),\n\n\\[\ny=\\frac{11-\\sqrt{57}}2-4=\\frac{3-\\sqrt{57}}2 .\n\\]\n\nHence the required numbers are  \n\n\\[\na=3,\\qquad b=57,\\qquad c=2,\n\\]\n\nwith \\(\\gcd(a,c)=1\\).  Therefore\n\n\\[\na+b+c=3+57+2=62 .\n\\]\n\n\\[\n\\boxed{62}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 62

    \n

    Extracted Answer: 62

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe product $ \\prod_{k=4}^{63} \\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})} = \\frac{\\log_4(5^{15})}{\\log_5(5^{12})} \\cdot \\frac{\\log_5(5^{24})}{\\log_6(5^{21})} \\cdot \\frac{\\log_6(5^{35})}{\\log_7(5^{32})} \\cdots \\frac{\\log_{63}(5^{3968})}{\\log_{64}(5^{3965})} $ is equal to $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n\\prod_{k=4}^{63}\\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})}\n\\]\n\n---\n\n### 1.  Rewrite each term using change of base  \n\n\\[\n\\log_a b=\\frac{\\ln b}{\\ln a}\n\\]\n\nHence  \n\n\\[\n\\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})}\n =\\frac{\\displaystyle\\frac{\\ln\\! \\big(5^{\\,k^2-1}\\big)}{\\ln k}}\n        {\\displaystyle\\frac{\\ln\\! \\big(5^{\\,k^2-4}\\big)}{\\ln (k+1)}}\n =\\frac{(k^2-1)\\ln5}{\\ln k}\\cdot\\frac{\\ln (k+1)}{(k^2-4)\\ln5}\n =\\frac{k^2-1}{k^2-4}\\cdot\\frac{\\ln(k+1)}{\\ln k}.\n\\]\n\nThus the whole product becomes  \n\n\\[\n\\Bigl[\\prod_{k=4}^{63}\\frac{k^2-1}{\\,k^2-4}\\Bigr]\\,\n\\Bigl[\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\\Bigr].\n\\]\n\n---\n\n### 2.  The logarithmic factor telescopes  \n\n\\[\n\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\n= \\frac{\\ln5}{\\ln4}\\cdot\\frac{\\ln6}{\\ln5}\\cdots\\frac{\\ln64}{\\ln63}\n= \\frac{\\ln64}{\\ln4}\n= \\frac{6\\ln2}{2\\ln2}=3.\n\\]\n\n---\n\n### 3.  Simplify the rational factor  \n\n\\[\n\\frac{k^2-1}{k^2-4}= \\frac{(k-1)(k+1)}{(k-2)(k+2)}.\n\\]\n\nHence  \n\n\\[\n\\prod_{k=4}^{63}\\frac{k^2-1}{k^2-4}\n= \\Bigl[\\prod_{k=4}^{63}\\frac{k-1}{k-2}\\Bigr]\n  \\Bigl[\\prod_{k=4}^{63}\\frac{k+1}{k+2}\\Bigr].\n\\]\n\n**First product**\n\n\\[\n\\prod_{k=4}^{63}\\frac{k-1}{k-2}\n= \\frac{3}{2}\\cdot\\frac{4}{3}\\cdot\\frac{5}{4}\\cdots\\frac{62}{61}\n= \\frac{62}{2}=31.\n\\]\n\n**Second product**\n\n\\[\n\\prod_{k=4}^{63}\\frac{k+1}{k+2}\n= \\frac{5}{6}\\cdot\\frac{6}{7}\\cdot\\frac{7}{8}\\cdots\\frac{64}{65}\n= \\frac{5}{65}= \\frac{1}{13}.\n\\]\n\nMultiplying,\n\n\\[\n\\prod_{k=4}^{63}\\frac{k^2-1}{k^2-4}=31\\cdot\\frac{1}{13}= \\frac{31}{13}.\n\\]\n\n---\n\n### 4.  Combine the two parts  \n\n\\[\n\\prod_{k=4}^{63}\\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})}\n= \\frac{31}{13}\\times 3 = \\frac{93}{13}.\n\\]\n\nThe fraction \\(\\frac{93}{13}\\) is already in lowest terms (\\(\\gcd(93,13)=1\\)).  \n\nThus \\(m=93,\\; n=13\\) and  \n\n\\[\nm+n = 93+13 = 106.\n\\]\n\n\\[\n\\boxed{106}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 106

    \n

    Extracted Answer: 106

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Sketch**\n\nWrite every integer \\(a\\le 3^{6}=729\\) in its base\u2011\\(3\\) expansion  \n\n\\[\na = a_{0}+a_{1}3+a_{2}3^{2}+a_{3}3^{3}+a_{4}3^{4}+a_{5}3^{5},\n\\qquad a_{i}\\in\\{0,1,2\\}.\n\\]\n\nLet  \n\n\\[\nA(x)=a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+a_{4}x^{4}+a_{5}x^{5}\\in\\mathbb{F}_{3}[x].\n\\]\n\nModulo \\(3^{7}\\) we have  \n\n\\[\na^{3}\\equiv a_{0}^{3}+9a_{0}^{2}a_{1}+27\\bigl(a_{0}a_{1}^{2}+a_{0}^{2}a_{2}\\bigr)\n               +\\; \\cdots\\;+3^{6}a_{2}^{3}\\pmod{3^{7}} .\n\\]\n\nHence\n\n\\[\na^{3}+b^{3}+c^{3}\\equiv \n\\sum_{i=0}^{2}3^{i}\\bigl(a_{i}^{3}+b_{i}^{3}+c_{i}^{3}\\bigr)\\pmod{3^{7}} .\n\\]\n\nBecause \\(x^{3}\\equiv x\\pmod 3\\) for \\(x\\in\\{0,1,2\\}\\), the condition\n\\(a^{3}+b^{3}+c^{3}\\equiv0\\pmod{3^{7}}\\) is equivalent to the three\nindependent linear equations  \n\n\\[\na_{0}+b_{0}+c_{0}\\equiv0,\\qquad\na_{1}+b_{1}+c_{1}\\equiv0,\\qquad\na_{2}+b_{2}+c_{2}\\equiv0\\pmod 3 .\n\\]\n\nFor each digit\u2011position \\(i=0,1,2\\) the number of ordered triples\n\\((a_{i},b_{i},c_{i})\\) satisfying the linear condition is\n\\(3^{2}=9\\) (choose any two digits freely, the third one is forced).\nThe remaining higher digits \\(a_{3},a_{4},a_{5}\\) are unrestricted; each\nhas \\(3^{3}=27\\) possibilities (three choices for each of the three\nnumbers).\n\nTherefore the total number of admissible triples \\((a,b,c)\\) is  \n\n\\[\nN = 9^{3}\\cdot 27^{3}=3^{15}=14\\,348\\,907 .\n\\]\n\nFinally we need the remainder of \\(N\\) modulo \\(1000\\):\n\n\\[\n14\\,348\\,907\\equiv 907\\pmod{1000}.\n\\]\n\n\\[\n\\boxed{907}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 735

    \n

    Extracted Answer: 907

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n* \\(a,b,c,d\\) be the four interior edges (the two interior vertical and the two interior horizontal sides).  \n* The eight outer edges are the two edges that belong to each unit square but are on the boundary of the\n\\(2\\times2\\) grid.\n\nFor a particular unit square the number of its interior red sides is the number of red interior edges incident\nto it.  \nIf a square has \\(s\\) interior red sides, then it needs exactly \\(2-s\\) red outer sides, because the total number\nof red sides must be \\(2\\).  \n\nFor a given square\n\n\\[\n\\#\\text{ ways to colour its two outer edges}= \\binom{2}{\\,2-s\\,}=\n\\begin{cases}\n1,&s=0\\text{ or }2,\\\\[2pt]\n2,&s=1 .\n\\end{cases}\n\\]\n\nThus, once the interior edges are fixed, the outer edges can be coloured independently for each square.\nIf among the four squares exactly \\(k\\) of them have \\(s=1\\) (i.e. exactly one interior red edge incident to the\nsquare), the number of completions of the outer edges is \\(2^{k}\\).\n\n--------------------------------------------------------------------\n\n### Counting interior\u2013edge configurations\n\nThe interior edges form a 4\u2011cycle  \n\n\\[\nA\\;-\\;B\\;-\\;D\\;-\\;C\\;-\\;A .\n\\]\n\nWe list all \\(2^{4}=16\\) subsets of these edges and, for each, count how many squares have one interior red\nedge.\n\n| # interior edges | type of selection | \\# of squares with \\(s=1\\) | \\# of such subsets | contributions |\n|------------------|-------------------|----------------------------|--------------------|---------------|\n| 0 | none | 0 | 1 | \\(2^{0}=1\\) |\n| 1 | any one edge | 2 (the two squares incident to the edge) | 4 | \\(4\\cdot2^{2}=16\\) |\n| 2 | adjacent edges (share a vertex) | 2 (the two squares adjacent to the common vertex) | 4 | \\(4\\cdot2^{2}=16\\) |\n| 2 | opposite edges (no common vertex) | 4 (each square gets one) | 2 | \\(2\\cdot2^{4}=32\\) |\n| 3 | all but one edge | 2 (the two squares not incident to the missing edge) | 4 | \\(4\\cdot2^{2}=16\\) |\n| 4 | all four edges | 0 | 1 | \\(1\\cdot2^{0}=1\\) |\n\nAdding the contributions:\n\n\\[\n1+16+16+32+16+1 = 82 .\n\\]\n\n--------------------------------------------------------------------\n\nTherefore there are  \n\n\\[\n\\boxed{82}\n\\]\n\ndifferent ways to colour the 12 unit segments so that each of the four unit squares has exactly two red sides\n(and consequently two blue sides).
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 82

    \n

    Extracted Answer: 82

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\(2025=3^{4}\\cdot5^{2}\\).\n\nDivisors of \\(2025\\) are of the form \\(3^{a}5^{b}\\) with  \n\\(0\\le a\\le4,\\;0\\le b\\le2\\); therefore  \n\n\\[\n|A|=(4+1)(2+1)=15 .\n\\]\n\n--------------------------------------------------------------------\n### Condition for the LCM\n\nFor a subset \\(B\\subseteq A\\),\n\n\\[\n\\operatorname{lcm}(B)=3^{\\max a}\\,5^{\\max b}.\n\\]\n\nThus \\(\\operatorname{lcm}(B)=2025=3^{4}5^{2}\\) iff  \n\n* at least one element of \\(B\\) has exponent \\(a=4\\) (i.e. is divisible by \\(3^{4}\\)), and  \n* at least one element of \\(B\\) has exponent \\(b=2\\) (i.e. is divisible by \\(5^{2}\\)).\n\n--------------------------------------------------------------------\n### Relevant divisor families  \n\n\\[\nX=\\{d\\in A\\mid 3^{4}\\mid d\\}=\\{81,405,2025\\},\\qquad |X|=3,\n\\]\n\n\\[\nY=\\{d\\in A\\mid 5^{2}\\mid d\\}=\\{25,75,225,675,2025\\},\\qquad |Y|=5.\n\\]\n\n\\(X\\cap Y=\\{2025\\}\\), so \\(|X\\cup Y|=3+5-1=7\\).\n\n--------------------------------------------------------------------\n### Counting subsets with the required property  \n\nA subset \\(B\\) works iff it meets both \\(X\\) and \\(Y\\).  \nUsing inclusion\u2013exclusion on all \\(2^{15}\\) subsets of \\(A\\):\n\n\\[\n\\begin{aligned}\n\\#\\{B:\\ B\\cap X\\neq\\varnothing,\\ B\\cap Y\\neq\\varnothing\\}\n&=2^{15}\n -2^{12}\\;(\\text{subsets missing }X)\n -2^{10}\\;(\\text{subsets missing }Y)\\\\\n&\\qquad +2^{8}\\;(\\text{subsets missing both }X\\cup Y)\\\\[2mm]\n&=32768-4096-1024+256\\\\\n&=27904 .\n\\end{aligned}\n\\]\n\nAll these subsets are non\u2011empty, so the numerator is \\(27904\\).\n\n--------------------------------------------------------------------\n### Probability\n\n\\[\nP=\\frac{27904}{2^{15}}=\\frac{27904}{32768}.\n\\]\n\nBoth numbers are divisible by \\(256\\):\n\n\\[\n\\frac{27904}{32768}=\\frac{27904/256}{32768/256}= \\frac{109}{128}.\n\\]\n\nThe fraction \\(\\frac{109}{128}\\) is already in lowest terms, so  \n\\(m=109,\\;n=128\\).\n\n\\[\nm+n=109+128=237.\n\\]\n\n\\[\n\\boxed{237}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 237

    \n

    Extracted Answer: 237

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step\u202f1 \u2013  How regions grow**\n\nWhen a new line segment is drawn in the disk, it either  \n*does not meet any previous segment* \u2013 it creates **one** new region, or  \n*meets \\(k\\) previous segments in interior points* \u2013 it creates **\\(k+1\\)** new regions  \n(the segment is cut into \\(k+1\\) pieces, each of which separates a region).\n\nHence, if we start with one region (the whole disk),\n\n\\[\n\\#\\text{regions}=1+\\#\\text{segments}+\\#\\text{interior intersections } .\n\\tag{1}\n\\]\n\nThe two perpendicular diameters intersect once, giving the four initial\nquadrants.  After the 25 random chords are added we will have  \n\n\\[\n27\\text{ segments} = 2\\text{ diameters}+25\\text{ chords}.\n\\]\n\nSo we only have to find the **expected number of interior intersection points**.\n\n--------------------------------------------------------------------\n\n**Step\u202f2 \u2013  Intersections with the diameters**\n\nA random chord meets a fixed diameter iff its two endpoints lie on opposite\nsides of that diameter.  \n\n*Horizontal diameter*\u2003(\\(y=0\\)): the endpoints must belong to one of the\nfour unordered quadrant pairs  \n\n\\[\n\\{Q_1,Q_3\\},\\{Q_1,Q_4\\},\\{Q_2,Q_3\\},\\{Q_2,Q_4\\},\n\\]\n\ni.e. 4 out of the 6 possible unordered pairs of different quadrants.\nThus  \n\n\\[\nP(\\text{chord meets a given diameter})=\\frac{4}{6}= \\frac23 .\n\\]\n\nThe same probability holds for the vertical diameter.  \nHence the expected number of chord\u2011diameter intersections is  \n\n\\[\n25\\;( \\text{chords})\\times 2\\;( \\text{diameters})\\times \\frac23\n  =\\frac{100}{3}.\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n\n**Step\u202f3 \u2013  Intersections between two random chords**\n\nLet a chord be represented by the unordered pair of quadrants that contain its\nend\u2011points.  \nThere are  \n\n* 4 *adjacent* pairs  \\(\\{0,1\\},\\{1,2\\},\\{2,3\\},\\{3,0\\}\\);  \n* 2 *opposite* pairs   \\(\\{0,2\\},\\{1,3\\}\\).\n\nThus the six possible chords are the six edges of the complete graph \\(K_4\\)\non the four quadrants.\n\nTwo chords may be:\n\n| Relation of the two edges | How many ordered pairs | Intersection probability |\n|---------------------------|-----------------------|--------------------------|\n| Same edge (both chords use the same pair) | 6 (4 adjacent\u202f+\u202f2 opposite) | \\(\\frac12\\) |\n| Share one vertex (adjacent edges) | 24 (8 both adjacent\u202f+\u202f16 one adjacent\u2013one opposite) | \\(\\frac12\\) |\n| Disjoint edges, both adjacent (e.g. \\{0,1\\} & \\{2,3\\}) | 4 | \\(0\\) |\n| Disjoint edges, both opposite ( \\{0,2\\} & \\{1,3\\}) | 2 | \\(1\\) |\n\n*Why these probabilities?*  \n\n* Same edge \u2013 the two chords are independent copies inside the same two\nquadrants.  A short calculation (or a symmetry argument) gives a crossing\nprobability of \\(\\frac12\\).\n* Share a vertex \u2013 one endpoint of the second chord lies in the same quadrant\nas an endpoint of the first chord.  The second endpoint is always in a\ndifferent quadrant, so the second chord meets the first exactly when the\npoint that shares the vertex falls between the two endpoints of the first\nchord.  Averaging over the uniform positions gives \\(\\frac12\\) again.\n* Disjoint adjacent edges lie completely on opposite sides of the\nhorizontal (or vertical) diameter, so they can never meet \u21d2 probability \\(0\\).\n* Disjoint opposite edges always cross the centre of the disk; any two such\nchords intersect \u21d2 probability \\(1\\).\n\nSumming the contributions of the \\(36\\) ordered pairs of chords,\n\n\\[\nS = 6\\!\\left(\\frac12\\right)+24\\!\\left(\\frac12\\right)+4\\cdot0+2\\cdot1 = 17 .\n\\]\n\nTherefore the probability that two independently chosen random chords intersect is  \n\n\\[\np_{\\text{chord\u2013chord}} = \\frac{S}{36}= \\frac{17}{36}.\n\\tag{3}\n\\]\n\n--------------------------------------------------------------------\n\n**Step\u202f4 \u2013  Expected number of chord\u2013chord intersections**\n\nThere are \\(\\binom{25}{2}=300\\) unordered pairs of the 25 random chords.  \nUsing (3),\n\n\\[\nE(\\text{chord\u2013chord intersections})=300\\cdot\\frac{17}{36}\n     =\\frac{425}{3}=141\\frac{2}{3}.\n\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n\n**Step\u202f5 \u2013  Total expected interior intersections**\n\n\\[\n\\begin{aligned}\nE(\\text{total interior intersections})\n&= (\\text{diameters intersect})\\\\\n&\\qquad +(\\text{chord\u2013diameter intersections})\\\\\n&\\qquad +(\\text{chord\u2013chord intersections})\\\\[2mm]\n&= 1+\\frac{100}{3}+ \\frac{425}{3}= 176 .\n\\end{aligned}\n\\tag{5}\n\\]\n\n--------------------------------------------------------------------\n\n**Step\u202f6 \u2013  Expected number of regions**\n\nInsert (5) into formula (1) with the total of \\(27\\) segments:\n\n\\[\nE(\\text{regions}) = 1 + 27 + 176 = 204 .\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{204}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 204

    \n

    Extracted Answer: 204

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Overview**\n\nPlace the two circles on a coordinate plane, compute the positions of the relevant points, and write the\nrectangle\u2019s vertices in terms of its side\u2013lengths.  \nThe conditions \u201c\\(C\\) is closer to \\(\\overline{GH}\\) than to \\(\\overline{EF}\\)\u201d and \u201c\\(D\\) is closer to\n\\(\\overline{FG}\\) than to \\(\\overline{EH}\\)\u201d fix the orientation of the rectangle.  \nUsing the equality of the two triangle areas we obtain a simple relation between the rectangle\u2019s width\nand height, which together with the fact that the rectangle is inscribed in the small circle yields the\nrequired dimensions and its area.\n\n--------------------------------------------------------------------\n\n### 1.  Coordinate set\u2011up  \n\nLet  \n\n* \\(O\\) be the centre of the large circle \\(\\omega_2\\) (radius \\(15\\)).\n* \\(A\\) be the centre of the small circle \\(\\omega_1\\) (radius \\(6\\)).\n* \\(B\\) the common point of tangency.\n\nBecause the circles are internally tangent,\n\\[\nOA = 15-6=9,\n\\qquad AB=6,\n\\qquad OB =15 .\n\\]\n\nChoose the \\(x\\)\u2013axis along \\(\\overline{BC}\\).  \nTake  \n\n\\[\nO=(0,0),\\qquad B=(15,0).\n\\]\n\nThen \\(A\\) lies on the same line, nine units left of \\(B\\):\n\\[\nA=(9,0).\n\\]\n\nSince \\(BC\\) is a diameter of \\(\\omega_2\\), the opposite end of the diameter is\n\\[\nC=(-15,0).\n\\]\n\nThe condition \\(\\overline{BC}\\perp\\overline{AD}\\) makes \\(AD\\) vertical, so the points of\n\\(\\omega_2\\) with \\(x=9\\) are\n\\[\nD=(9,12)\\quad\\text{or}\\quad D=(9,-12).\n\\]\nBecause later we need \\(D\\) to be nearer the top side of the rectangle, we take  \n\n\\[\n\\boxed{D=(9,12)} .\n\\]\n\n--------------------------------------------------------------------\n\n### 2.  The rectangle \\(EFGH\\)\n\n\\(EF\\) is required to be perpendicular to \\(\\overline{BC}\\); hence \\(EF\\) is a vertical side.\nLet the rectangle have\n\n* width \\(w\\) (the horizontal side \\(\\overline{FG}\\)),\n* height \\(h\\) (the vertical side \\(\\overline{EF}= \\overline{GH}\\)).\n\nSince the rectangle is inscribed in \\(\\omega_1\\), its centre coincides with the centre of \\(\\omega_1\\),\nnamely \\(A=(9,0)\\).  Consequently the vertices are\n\n\\[\n\\begin{aligned}\nE&=\\bigl(b,\\,-\\tfrac{h}{2}\\bigr), &\nF&=\\bigl(b, \\tfrac{h}{2}\\bigr),\\\\[2mm]\nG&=\\bigl(a, \\tfrac{h}{2}\\bigr), &\nH&=\\bigl(a,\\,-\\tfrac{h}{2}\\bigr),\n\\end{aligned}\n\\]\nwhere  \n\n\\[\na = 9-\\frac{w}{2},\\qquad b = 9+\\frac{w}{2}.\n\\]\n\nBecause every vertex lies on \\(\\omega_1\\) (radius \\(6\\) and centre \\((9,0)\\)),\n\\[\n(a-9)^2+\\Bigl(\\frac{h}{2}\\Bigr)^2 = (b-9)^2+\\Bigl(\\frac{h}{2}\\Bigr)^2 = 6^{2}=36 .\n\\]\nBoth equations give the single relation  \n\n\\[\n\\boxed{w^{2}+h^{2}=144}\\tag{1}\n\\]\n(the rectangle\u2019s diagonal is the diameter \\(12\\) of the small circle).\n\n--------------------------------------------------------------------\n\n### 3.  Interpreting the \u201ccloser\u2011to\u201d conditions  \n\nThe statement \u201c\\(C\\) is closer to \\(\\overline{GH}\\) than to \\(\\overline{EF}\\)\u201d forces \\(\\overline{GH}\\) to be\nthe left vertical side (smaller \\(x\\))-coordinate) and \\(\\overline{EF}\\) the right vertical side.  \nSimilarly \u201c\\(D\\) is closer to \\(\\overline{FG}\\) than to \\(\\overline{EH}\\)\u201d places \\(\\overline{FG}\\) at the\ntop (larger \\(y\\))-coordinate.\n\nThus  \n\n\\[\n\\begin{aligned}\n\\text{dist}(C,\\overline{GH})&=a-(-15)=a+15,\\\\\n\\text{dist}(C,\\overline{EF})&=b+15,\\\\[1mm]\n\\text{dist}(D,\\overline{FG})&=12-\\frac{h}{2},\\\\\n\\text{dist}(D,\\overline{EH})&=12+\\frac{h}{2},\n\\end{aligned}\n\\]\nand the above inequalities are automatically satisfied for any feasible rectangle\n(\\(a<b\\) and \\(h/2<12\\)).\n\n--------------------------------------------------------------------\n\n### 4.  Equality of the two triangle areas  \n\n*Triangle \\(DGF\\).*  \n\\(G\\) and \\(F\\) are the top\u2011left and top\u2011right vertices, so \\(\\overline{GF}\\) is horizontal,\n\\(|GF| = w\\).  The altitude from \\(D\\) to \\(\\overline{GF}\\) is the vertical distance\n\\(12-\\frac{h}{2}\\).  Hence  \n\n\\[\n[ DGF ] = \\frac12 \\, w\\!\\left(12-\\frac{h}{2}\\right).\n\\tag{2}\n\\]\n\n*Triangle \\(CHG\\).*  \n\\(G\\) and \\(H\\) lie on the left side, \\(|GH|=h\\).  The altitude from \\(C\\) to this side is the\nhorizontal distance \\(a+15\\).  Thus  \n\n\\[\n[ CHG ] = \\frac12 \\, h\\,(a+15).\n\\tag{3}\n\\]\n\nGiven \\([DGF]=[CHG]\\) and using \\(a=9-\\dfrac w2\\), we have  \n\n\\[\nw\\!\\left(12-\\frac{h}{2}\\right)=\nh\\!\\Bigl(9-\\frac{w}{2}+15\\Bigr)\n= h\\!\\bigl(24-\\frac{w}{2}\\bigr).\n\\]\n\nExpanding and cancelling the common term \\(-\\dfrac{wh}{2}\\) yields  \n\n\\[\n12w = 24h \\quad\\Longrightarrow\\quad \\boxed{w = 2h}. \\tag{4}\n\\]\n\n--------------------------------------------------------------------\n\n### 5.  Determining \\(w\\) and \\(h\\)\n\nInsert \\(w=2h\\) into (1):\n\n\\[\n(2h)^{2}+h^{2}=144\n\\;\\Longrightarrow\\;5h^{2}=144\n\\;\\Longrightarrow\\;h^{2}=\\frac{144}{5}.\n\\]\n\nHence  \n\n\\[\nh = \\frac{12}{\\sqrt5}= \\frac{12\\sqrt5}{5},\n\\qquad \nw = 2h = \\frac{24\\sqrt5}{5}.\n\\]\n\n--------------------------------------------------------------------\n\n### 6.  Area of the rectangle  \n\n\\[\n[EFGH]=w\\cdot h = 2h^{2}=2\\cdot\\frac{144}{5}= \\frac{288}{5}.\n\\]\n\nThus the required area is \\(\\displaystyle \\frac{288}{5}\\); the fraction is already in lowest terms.\nSo \\(m=288,\\; n=5\\) and  \n\n\\[\nm+n = 288+5 = 293 .\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{293}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 293

    \n

    Extracted Answer: 293

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nx_{k+1}= \\frac{x_k+\\dfrac1{x_k}-1}{3}, \\qquad x_1=\\frac{25}{11}.\n\\]\n\n--------------------------------------------------------------------\n### 1.  A convenient change of variable  \n\nSet  \n\n\\[\nt_k=\\frac{x_k-1}{x_k+1}\\qquad\\Longleftrightarrow\\qquad \nx_k=\\frac{1+t_k}{1-t_k}.\n\\]\n\nThen a short computation gives  \n\n\\[\nt_{k+1}= \\frac{3t_k^{2}-1}{2}. \\tag{1}\n\\]\n\nThus the problem reduces to iterating the quadratic map  \n\n\\[\nF(t)=\\frac{3t^{2}-1}{2}\n\\]\n\nstarting from  \n\n\\[\nt_1=\\frac{x_1-1}{x_1+1}\n      =\\frac{25/11-1}{25/11+1}\n      =\\frac{7}{18}.\n\\]\n\n--------------------------------------------------------------------\n### 2.  Working with the original rationals  \n\nWrite \\(t_k=p_k/q_k\\) in lowest terms.   \nFrom (1)\n\n\\[\n\\frac{p_{k+1}}{q_{k+1}}=\n\\frac{3p_k^{2}-3p_kq_k+3q_k^{2}}{2q_k^{2}}\n      =\\frac{p_k^{2}-p_kq_k+q_k^{2}}{3}\\;\\Big/\n        \\;\\frac{p_kq_k}{1},\n\\]\n\nhence (clearing the common factor \\(3\\))\n\n\\[\n\\boxed{\\displaystyle \np_{k+1}= \\frac{p_k^{2}-p_kq_k+q_k^{2}}{3},\n\\qquad \nq_{k+1}=p_kq_k } . \\tag{2}\n\\]\n\nFor the initial pair  \n\n\\[\np_1=25,\\qquad q_1=11 .\n\\]\n\nBecause \\(p_1\\equiv1,\\; q_1\\equiv2\\pmod 3\\) one checks from (2) that  \n\\(p_k\\equiv1,\\; q_k\\equiv2\\pmod 3\\) for every \\(k\\); consequently the\ndivision by \\(3\\) in (2) is always exact and the reduced fractions\n\\(\\dfrac{p_k}{q_k}=x_k\\) stay in lowest terms.\n\n--------------------------------------------------------------------\n### 3.  Behaviour modulo\u202f\\(8\\)\n\n\\(3\\) is invertible modulo \\(8\\) (\\(3^{-1}\\equiv3\\)).  \nFrom (2)\n\n\\[\np_{k+1}\\equiv 3\\bigl(p_k^{2}-p_kq_k+q_k^{2}\\bigr)\\pmod 8,\n\\qquad \nq_{k+1}\\equiv p_kq_k\\pmod 8 .\n\\]\n\nStarting with \\((p_1,q_1)\\equiv(1,3)\\pmod8\\) one obtains\n\n\\[\n(p_2,q_2)\\equiv(5,3),\\qquad\n(p_3,q_3)\\equiv(1,7),\n\\]\n\nand thereafter  \n\n\\[\np_k\\equiv1,\\quad q_k\\equiv7\\pmod8 \\qquad(k\\ge3).\n\\]\n\nHence for every \\(k\\ge3\\)\n\n\\[\np_k+q_k\\equiv0\\pmod8. \\tag{3}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Behaviour modulo\u202f\\(125\\)\n\n\\(3^{-1}\\equiv42\\pmod{125}\\).  Using (2),\n\n\\[\np_{k+1}\\equiv42\\bigl(p_k^{2}-p_kq_k+q_k^{2}\\bigr)\\pmod{125},\n\\qquad \nq_{k+1}\\equiv p_kq_k\\pmod{125}. \\tag{4}\n\\]\n\nComputating a few steps (mod\u202f125) gives  \n\n\\[\n\\begin{array}{c|c|c}\nk & p_k\\pmod{125} & q_k\\pmod{125}\\\\ \\hline\n1 & 25 & 11\\\\\n2 & 32 & 25\\\\\n3 & 33 & 50\\\\\n4 & 63 & 25\\\\\n5 & 48 & 75\\\\\n6 & 68 &100\\\\\n\\vdots &\\vdots &\\vdots\n\\end{array}\n\\]\n\nFrom \\(k=4\\) onward the pair \\((p_k,q_k)\\) repeats with period\u202f20:\n\n\\[\n(p_{k+20},q_{k+20})\\equiv(p_k,q_k)\\pmod{125}\\qquad(k\\ge4).\n\\]\n\nSince \\(2025\\equiv5\\pmod{20}\\) and \\(2025\\ge4\\),\n\n\\[\np_{2025}\\equiv p_5\\equiv48,\\qquad\nq_{2025}\\equiv q_5\\equiv75 \\pmod{125}. \\tag{5}\n\\]\n\nThus\n\n\\[\np_{2025}+q_{2025}\\equiv48+75=123\\pmod{125}. \\tag{6}\n\\]\n\n--------------------------------------------------------------------\n### 5.  Combination (Chinese Remainder)\n\nFrom (3) we have \\(p_{2025}+q_{2025}\\equiv0\\pmod8\\);   \nfrom (6) we have \\(p_{2025}+q_{2025}\\equiv123\\pmod{125}\\).\n\nLet \\(S=p_{2025}+q_{2025}\\).  \nWrite \\(S=8u\\); then \\(8u\\equiv123\\pmod{125}\\).\nSince \\(8^{-1}\\equiv47\\pmod{125}\\),\n\n\\[\nu\\equiv47\\cdot123\\equiv31\\pmod{125},\n\\qquad\nS=8u\\equiv8\\cdot31=248\\pmod{1000}.\n\\]\n\n--------------------------------------------------------------------\n### 6.  Answer\n\nThe required remainder is  \n\n\\[\n\\boxed{248}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 248

    \n

    Extracted Answer: 248

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFrom an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.\n\nIn general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step\u202f1.  Greedy representation**\n\nFor a value \\(N\\) write  \n\n\\[\nN = 25q + r ,\\qquad 0\\le r<25 .\n\\]\n\nThe greedy algorithm first uses \\(q\\) quarters, then as many dimes as possible from the remainder \\(r\\):\n\\[\nr = 10d + e ,\\qquad 0\\le e<10 .\n\\]\nHence the greedy collection has  \n\n\\[\n\\text{coins}_{\\text{greedy}} = q+d+e .\n\\tag{1}\n\\]\n\n**Step\u202f2.  When can we do better?**\n\nA collection using \\(a\\) quarters and \\(b\\) dimes (the pennies are forced) has  \n\n\\[\n25a+10b\\le N ,\\qquad \\text{pennies}=N-25a-10b .\n\\]\n\nIts total number of coins is  \n\n\\[\na+b+(N-25a-10b)=N-(24a+9b).\n\\]\n\nBecause \\(N\\) is fixed, the collection is optimal iff the quantity  \n\n\\[\nW=24a+9b\n\\tag{2}\n\\]\n\nis as large as possible under the constraint \\(25a+10b\\le N\\).  \n\n**Step\u202f3.  Compare the greedy choice with one fewer quarter**\n\nThe greedy choice uses \\(a=q\\) and \\(b=d\\).  \nConsider reducing the number of quarters by one: take \\(a'=q-1\\).  \nThe value that must now be made with dimes and pennies is \\(25+r\\); the maximal possible number\nof dimes is\n\n\\[\nb'=\\Big\\lfloor\\frac{25+r}{10}\\Big\\rfloor .\n\\]\n\nWrite \\(r=10d+e\\;(0\\le e\\le 9)\\). Then  \n\n\\[\n\\frac{25+r}{10}=2+d+\\frac{e+5}{10},\n\\qquad\nb'=d+2+f,\n\\]\nwhere  \n\n\\[\nf=\\Big\\lfloor\\frac{e+5}{10}\\Big\\rfloor=\n\\begin{cases}\n0,&e\\le4,\\\\[2pt]\n1,&e\\ge5 .\n\\end{cases}\n\\]\n\nThe weight (2) for the greedy choice is  \n\n\\[\nW_{\\text{gr}}=24q+9d .\n\\]\n\nFor the alternative with one fewer quarter we have  \n\n\\[\nW_{\\text{alt}}=24(q-1)+9(d+2+f)=W_{\\text{gr}}-24+18+9f\n      =W_{\\text{gr}}+( -6+9f).\n\\]\n\nThus  \n\n\\[\nW_{\\text{alt}}-W_{\\text{gr}}=\n\\begin{cases}\n-6, & e\\le 4,\\\\[2pt]\n+3, & e\\ge 5 .\n\\end{cases}\n\\]\n\nIf \\(e\\ge5\\) the alternative has **larger** weight, i.e. it uses **fewer** coins\n(three fewer, because the weight increases by 3).  \nIf \\(e\\le4\\) the alternative is worse.\n\nConsequently the greedy algorithm is **not optimal exactly when**\n\\[\ne = r \\bmod 10 \\ge 5 .\n\\tag{3}\n\\]\n\n**Step\u202f4.  Which remainders cause failure?**\n\nSince \\(r\\) ranges from \\(0\\) to \\(24\\), condition (3) means  \n\n\\[\nr\\in\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\tag{4}\n\\]\n\nFor \\(N<25\\) we have \\(q=0\\); only 1\u2011cent and 10\u2011cent coins are usable, and the greedy\nchoice (as many dimes as possible) is obviously optimal.  Hence failures occur only for\n\\(N\\ge25\\) with remainder (4) upon division by \\(25\\).\n\n**Step\u202f5.  Counting the failures between 1 and\u202f1000**\n\nThe numbers \\(25\\le N\\le 1000\\) form 39 complete blocks of 25 consecutive integers\n(\\(25\\)\u2013\\(999\\)) and the single extra number \\(1000\\).\n\n- In each full block every residue modulo \\(25\\) appears once,\n  so each block contains exactly \\(10\\) failures (the residues in (4)).\n- Hence failures in the 39 blocks: \\(39\\times10=390\\).\n\nThe leftover number \\(1000\\) has residue \\(0\\) (not a failure).\n\nThus the total number of failures is \\(390\\).\n\n**Step\u202f6.  Successes**\n\nOut of the \\(1000\\) possible values of \\(N\\),\n\n\\[\n\\text{successful }N = 1000 - 390 = 610 .\n\\]\n\n\\[\n\\boxed{610}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 610

    \n

    Extracted Answer: 610

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For  \n\n\\[\nf(x)=\\sin\\bigl(7\\pi\\sin(5x)\\bigr)\n\\]\n\nwe need the solutions of  \n\n\\[\n\\sin\\bigl(7\\pi\\sin(5x)\\bigr)=0\\qquad(0<x<2\\pi).\n\\]\n\n---\n\n### 1.  Zeros of \\(f\\)\n\n\\[\n\\sin(A)=0\\iff A=m\\pi,\\;m\\in\\mathbb Z .\n\\]\n\nHence  \n\n\\[\n7\\pi\\sin(5x)=m\\pi\\Longrightarrow \\sin(5x)=\\frac{m}{7}.\n\\]\n\nBecause \\(\\sin(5x)\\in[-1,1]\\), the integer \\(m\\) must satisfy  \n\n\\[\n-7\\le m\\le 7 .\n\\]\n\nLet \\(k=m\\). For each integer \\(k\\) with \\(-7\\le k\\le 7\\) we solve  \n\n\\[\n\\sin(5x)=\\frac{k}{7}.\n\\]\n\nPut \\(\\theta =5x\\). Then \\(\\theta\\in(0,10\\pi)\\) and we need  \n\n\\[\n\\sin\\theta = \\frac{k}{7}.\n\\]\n\n* **\\(k=\\pm7\\)** (\\(\\sin\\theta=\\pm1\\)).  \n  In each \\(2\\pi\\)-period there is exactly one solution.  \n  Over the interval \\((0,10\\pi)\\) (5 periods) we obtain \\(5\\) solutions for \\(k=7\\) and\n  \\(5\\) solutions for \\(k=-7\\).\n\n* **\\(k=0\\)** (\\(\\sin\\theta=0\\)).  \n  Solutions are \\(\\theta=n\\pi\\).  \n  With \\(0<\\theta<10\\pi\\) we have \\(n=1,2,\\dots ,9\\): \\(9\\) solutions.\n\n* **\\(k=\\pm1,\\pm2,\\dots ,\\pm6\\)** (\\(|k/7|<1\\) and \\(\\neq0\\)).  \n  In each period there are two distinct solutions, so over \\(5\\) periods we get\n  \\(2\\cdot5=10\\) solutions for each such \\(k\\).\n\nThere are \\(12\\) values of \\(k\\) with \\(|k|\\le6\\) and \\(k\\neq0\\).\n\nHence the total number of zeros is  \n\n\\[\nn = 5+5+9+12\\cdot10 = 139 .\n\\]\n\n---\n\n### 2.  Tangent points\n\nDifferentiate:\n\n\\[\nf'(x)=\\cos\\!\\bigl(7\\pi\\sin(5x)\\bigr)\\cdot7\\pi\\cdot5\\cos(5x)\n      =35\\pi\\cos(5x)\\cos\\!\\bigl(7\\pi\\sin(5x)\\bigr).\n\\]\n\nAt a zero of \\(f\\) we have \\(\\sin(5x)=k/7\\), so  \n\n\\[\n\\cos\\!\\bigl(7\\pi\\sin(5x)\\bigr)=\\cos(k\\pi)=(-1)^k\\neq0 .\n\\]\n\nThus \\(f'(x)=0\\) exactly when \\(\\cos(5x)=0\\), i.e. when \\(\\sin(5x)=\\pm1\\).\nThose correspond precisely to the cases \\(k=\\pm7\\).\n\nWe already counted \\(5\\) solutions for \\(k=7\\) and \\(5\\) for \\(k=-7\\); all of them are\ntangency points. Hence  \n\n\\[\nt = 5+5 = 10 .\n\\]\n\n---\n\n### 3.  Required sum\n\n\\[\nn+t = 139+10 = 149 .\n\\]\n\n\\[\n\\boxed{149}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 149

    \n

    Extracted Answer: 149

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Label the vertices of the regular \\(24\\)-gon by  \n\n\\[\n0,1,2,\\ldots ,23\\qquad(\\text{mod }24).\n\\]\n\nIf a segment connects vertices \\(i\\) and \\(j\\) then the chord length is determined by the\nshorter distance  \n\n\\[\nk=\\min\\{|i-j|,\\;24-|i-j|\\},\\qquad 1\\le k\\le 12 .\n\\]\n\nAll 12 drawn segments must have the same length, so every segment must join two vertices that\nare exactly \\(k\\) steps apart for one fixed \\(k\\in\\{1,2,\\ldots ,12\\}\\).\n\n---------------------------------------------------------------------\n\n### 1.  The graph for a fixed \\(k\\)\n\nFor a given \\(k\\) consider the graph  \n\n\\[\nG_k=\\{\\,\\{i,i+k\\}:i=0,1,\\ldots ,23\\}\\ .\n\\]\n\nEach vertex has degree \\(2\\) (edges to \\(i+k\\) and to \\(i-k\\)), so \\(G_k\\) is a disjoint union\nof cycles.  \n\nLet  \n\n\\[\ng=\\gcd(24,k).\n\\]\n\nThen \\(G_k\\) consists of \\(g\\) cycles, each of length  \n\n\\[\nL=\\frac{24}{g}.\n\\]\n\n---------------------------------------------------------------------\n\n### 2.  Perfect matchings of \\(G_k\\)\n\nA required drawing is exactly a perfect matching (1\u2011factor) of \\(G_k\\).\n\n* If \\(L\\) is odd, a perfect matching is impossible.  \n  This occurs only for \\(k=8\\) (\\(g=8,\\;L=3\\)).\n\n* If \\(L=2\\) (the case \\(k=12\\)), each component is a single edge, so the matching is\nforced \u2013 exactly **one** way.\n\n* If \\(L\\) is even and \\(\\,L\\ge4\\), each even cycle has exactly two perfect matchings\n(alternating edges).  \n  Hence for such a \\(k\\) the number of matchings is  \n\n  \\[\n  2^{\\,\\text{number of cycles}}=2^{g}.\n  \\]\n\n---------------------------------------------------------------------\n\n### 3.  Count for each possible \\(k\\)\n\n\\[\n\\begin{array}{c|c|c|c}\nk & g=\\gcd(24,k) & L=24/g & \\text{matchings }N(k)\\\\ \\hline\n1 & 1 & 24 & 2\\\\\n2 & 2 & 12 & 4\\\\\n3 & 3 & 8  & 8\\\\\n4 & 4 & 6  & 16\\\\\n5 & 1 & 24 & 2\\\\\n6 & 6 & 4  & 64\\\\\n7 & 1 & 24 & 2\\\\\n8 & 8 & 3  & 0\\\\\n9 & 3 & 8  & 8\\\\\n10& 2 & 12 & 4\\\\\n11& 1 & 24 & 2\\\\\n12&12 & 2  & 1\n\\end{array}\n\\]\n\n---------------------------------------------------------------------\n\n### 4.  Total number of drawings\n\n\\[\n\\begin{aligned}\n\\sum_{k=1}^{12} N(k)&=\n2+4+8+16+2+64+2+0+8+4+2+1\\\\\n&=113 .\n\\end{aligned}\n\\]\n\n---------------------------------------------------------------------\n\nThus there are  \n\n\\[\n\\boxed{113}\n\\]\n\ndifferent ways to draw 12 equal\u2011length segments so that every vertex of the regular 24\u2011gon\nis an endpoint of exactly one segment.
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 113

    \n

    Extracted Answer: 113

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\na_i=|A_iA_1|\\qquad (i=2,\\dots ,11),\\qquad b_i=|A_iA_{i+1}|\\;(i=2,\\dots ,10)\n\\]\n\nand let \\(\\theta =\\angle A_iA_1A_{i+1}\\) for \\(2\\le i\\le10\\).\n\n--------------------------------------------------------------------\n### 1.  The radii from \\(A_1\\)\n\nFor each triangle \\(A_iA_1A_{i+1}\\)\n\n\\[\n\\text{area}=1,\\qquad \\cos\\theta=\\frac{12}{13}.\n\\]\n\nHence  \n\n\\[\n\\sin\\theta =\\sqrt{1-\\cos^2\\theta}\n          =\\sqrt{1-\\frac{144}{169}}\n          =\\frac{5}{13}.\n\\]\n\nThe area formula gives  \n\n\\[\n1=\\frac12 a_i a_{i+1}\\sin\\theta\n   \\Longrightarrow a_i a_{i+1}= \\frac{2}{\\sin\\theta}\n   =\\frac{2}{5/13}= \\frac{26}{5}\\qquad (1)\n\\]\n\nfor every \\(i=2,\\dots ,10\\).\n\nThus every adjacent pair of radii satisfies the same product.\nConsequently the lengths alternate:\n\n\\[\na_2=a_4=a_6=a_8=a_{10}=x,\\qquad \na_3=a_5=a_7=a_9=a_{11}=y,\n\\]\n\nwith  \n\n\\[\nxy=\\frac{26}{5}. \\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 2.  Lengths of the polygon sides not incident with \\(A_1\\)\n\nIn \\(\\triangle A_iA_1A_{i+1}\\) the side \\(b_i=|A_iA_{i+1}|\\) satisfies the law of cosines:\n\n\\[\nb_i^2 = a_i^2 + a_{i+1}^2 -2a_i a_{i+1}\\cos\\theta .\n\\]\n\nUsing \\(\\cos\\theta=\\frac{12}{13}\\) and (1),\n\n\\[\nb_i^2 = a_i^2 + a_{i+1}^2\n        - 2\\!\\left(\\frac{26}{5}\\right)\\!\\frac{12}{13}\n      = a_i^2 + a_{i+1}^2 - \\frac{624}{65}\n      = a_i^2 + a_{i+1}^2 - 9.6 .\n\\]\n\nBecause each adjacent pair consists of one \\(x\\) and one \\(y\\), the quantity\n\\(a_i^2+a_{i+1}^2\\) is the same for all \\(i\\).  Hence all \\(b_i\\) are equal; denote this common length by \\(b\\).\n\nLet  \n\n\\[\nS=x+y .\n\\]\n\nThen \\(x^2+y^2=S^2-2xy\\).  Using (2) we obtain\n\n\\[\nb^{2}=S^{2}-2xy-2xy\\cos\\theta\n      =S^{2}-2xy(1+\\cos\\theta).\n\\]\n\nSince \\(\\cos\\theta=\\frac{12}{13}\\),  \n\n\\[\n1+\\cos\\theta = \\frac{25}{13},\\qquad\n2xy(1+\\cos\\theta)=2\\!\\left(\\frac{26}{5}\\right)\\!\\frac{25}{13}=20.\n\\]\n\nThus  \n\n\\[\nb^{2}=S^{2}-20,\\qquad b=\\sqrt{S^{2}-20}. \\tag{3}\n\\]\n\n--------------------------------------------------------------------\n### 3.  Using the perimeter\n\nThe perimeter of the 11\u2011gon is\n\n\\[\n|A_1A_2|+|A_1A_{11}|+\\sum_{i=2}^{10}|A_iA_{i+1}|\n= x + y + 9b = S + 9\\sqrt{S^{2}-20}=20.\n\\]\n\nLet \\(t=\\sqrt{S^{2}-20}\\;(t\\ge0)\\).  Then  \n\n\\[\n\\sqrt{t^{2}+20}+9t=20\\quad\\Longrightarrow\\quad \n\\sqrt{t^{2}+20}=20-9t.\n\\]\n\nSquaring yields  \n\n\\[\nt^{2}+20 = (20-9t)^{2}=400-360t+81t^{2},\n\\]\n\\[\n80t^{2}-360t+380=0\\;\\Longrightarrow\\;\n4t^{2}-18t+19=0.\n\\]\n\nThe discriminant is \\(D=18^{2}-4\\cdot4\\cdot19=324-304=20\\), so\n\n\\[\nt=\\frac{18\\pm\\sqrt{20}}{8}\n   =\\frac{9\\pm\\sqrt5}{4}.\n\\]\n\nSince \\(20-9t\\ge0\\), we take the minus sign:\n\n\\[\nt=\\frac{9-\\sqrt5}{4}.\n\\]\n\nNow \\(S = 20-9t\\):\n\n\\[\nS = 20 - 9\\!\\left(\\frac{9-\\sqrt5}{4}\\right)\n   = \\frac{80-(81-9\\sqrt5)}{4}\n   = \\frac{9\\sqrt5-1}{4}.\n\\]\n\nThus  \n\n\\[\n|A_1A_2|+|A_1A_{11}| = S = \\frac{9\\sqrt5-1}{4}.\n\\]\n\n--------------------------------------------------------------------\n### 4.  Putting it into the required form\n\n\\[\n\\frac{9\\sqrt5-1}{4}=\\frac{m\\sqrt{n}-p}{q},\n\\qquad m=9,\\; n=5,\\; p=1,\\; q=4.\n\\]\n\nThese satisfy the given conditions ( \\(n\\) square\u2011free, no prime divides all of \\(m,p,q\\) ).\n\nFinally  \n\n\\[\nm+n+p+q = 9+5+1+4 = 19.\n\\]\n\n\\[\n\\boxed{19}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 19

    \n

    Extracted Answer: 19

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Overview**\n\nLet the 16 chairs be numbered \\(1,2,\\dots ,16\\).  \nA selection of 8 chairs corresponds to a binary string of length \\(16\\) with exactly eight \\(1\\)\u2019s (occupied chairs) and eight \\(0\\)\u2019s (empty chairs).\n\nA person \u201csits next to two other people\u2019\u2019 exactly when a chair is occupied **and** its two neighbours are also occupied.  \nHence the forbidden pattern in the binary string is the block \\(111\\).  \n\nThus we must count the binary strings of length \\(16\\) containing exactly eight \\(1\\)\u2019s and **no** occurrence of \\(111\\).\n\n--------------------------------------------------------------------\n\n### 1.  Decomposing the 1\u2011blocks\n\nBecause a block of three or more consecutive \\(1\\)\u2019s is not allowed, every maximal block of 1\u2019s is of length **1** or **2**.\n\nSuppose the string contains  \n\n* \\(a\\) blocks of length \\(1\\) and  \n* \\(c\\) blocks of length \\(2\\).\n\nThen  \n\n\\[\na+2c = 8\\qquad(\\text{total number of }1\\text{'s}),\n\\]\n\\[\nb = a+c = 8-c\\qquad(\\text{total number of blocks}).\n\\]\n\n--------------------------------------------------------------------\n\n### 2.  Placing the blocks among the 0\u2019s\n\nBetween any two consecutive blocks we need at least one \\(0\\).  \nWith \\(b\\) blocks we need at least \\(b-1\\) separating zeros.\n\nThe total number of zeros is \\(16-8 = 8\\).  \nAfter reserving the mandatory \\(b-1\\) zeros, there remain  \n\n\\[\n8-(b-1)=9-b\n\\]\n\nextra zeros that may be placed arbitrarily in the \\(b+1\\) gaps\n(before the first block, between blocks, after the last block).\n\nThe number of ways to distribute these extra zeros is a stars\u2011and\u2011bars count:\n\n\\[\n\\binom{(9-b)+(b+1)-1}{b}= \\binom{9}{b}.\n\\]\n\n--------------------------------------------------------------------\n\n### 3.  Ordering the blocks\n\nAmong the \\(b\\) blocks, we must choose which \\(c\\) of them are the length\u20112 blocks.\nThat can be done in  \n\n\\[\n\\binom{b}{c}=\\binom{8-c}{c}\n\\]\n\nways.\n\n--------------------------------------------------------------------\n\n### 4.  Summation\n\nSumming over all feasible values of \\(c\\) (from \\(0\\) to \\(\\lfloor 8/2\\rfloor =4\\)) we obtain\n\n\\[\n\\begin{aligned}\nN &=\\sum_{c=0}^{4}\\binom{8-c}{c}\\binom{9}{\\,8-c\\,} \\\\[2mm]\n  &=\\binom{8}{0}\\binom{9}{8}\n    +\\binom{7}{1}\\binom{9}{7}\n    +\\binom{6}{2}\\binom{9}{6}\n    +\\binom{5}{3}\\binom{9}{5}\n    +\\binom{4}{4}\\binom{9}{4}\\\\[2mm]\n  &=1\\cdot9\\;+\\;7\\cdot36\\;+\\;15\\cdot84\\;+\\;10\\cdot126\\;+\\;1\\cdot126\\\\[2mm]\n  &=9+252+1260+1260+126\\\\[2mm]\n  &=2907.\n\\end{aligned}\n\\]\n\nThus there are \\(N=2907\\) possible selections of 8 chairs satisfying the condition.\n\n--------------------------------------------------------------------\n\n### 5.  Required remainder\n\n\\[\nN \\bmod 1000 = 2907 \\bmod 1000 = 907.\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{907}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 907

    \n

    Extracted Answer: 907

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    In base \\(b\\) the numbers  \n\n\\[\n17_b = 1\\cdot b + 7 = b+7 ,\\qquad  \n97_b = 9\\cdot b + 7 .\n\\]\n\nWe need bases \\(b>9\\) (so that the digits \\(7\\) and \\(9\\) are allowed) such that  \n\n\\[\nb+7 \\mid 9b+7 .\n\\]\n\n---\n\n### Reduce the divisibility condition\n\nIf \\(b+7\\) divides \\(9b+7\\), then it also divides any integer linear combination of these two numbers.  \nConsider  \n\n\\[\n9(b+7) - (9b+7) = 9b+63 - 9b - 7 = 56 .\n\\]\n\nHence  \n\n\\[\nb+7 \\mid 56 .\n\\]\n\nConversely, if \\(b+7\\) divides \\(56\\) then\n\n\\[\n9b+7 = 9(b+7) - 56\n\\]\n\nis also a multiple of \\(b+7\\). Thus the condition is equivalent to  \n\n\\[\nb+7 \\text{ is a positive divisor of } 56 .\n\\]\n\n---\n\n### Find admissible divisors\n\nThe positive divisors of \\(56\\) are  \n\n\\[\n1,\\;2,\\;4,\\;7,\\;8,\\;14,\\;28,\\;56 .\n\\]\n\nSince \\(b>9\\), we have \\(b+7>16\\). The only divisors of \\(56\\) exceeding \\(16\\) are \\(28\\) and \\(56\\).\n\n\\[\n\\begin{aligned}\nb+7 &= 28 &\\implies&\\; b = 21,\\\\[2mm]\nb+7 &= 56 &\\implies&\\; b = 49 .\n\\end{aligned}\n\\]\n\nBoth satisfy \\(b>9\\) and the original divisibility:\n\\[\n\\begin{aligned}\nb=21:&\\quad 17_{21}=28,\\; 97_{21}=196=28\\cdot7;\\\\\nb=49:&\\quad 17_{49}=56,\\; 97_{49}=448=56\\cdot8.\n\\end{aligned}\n\\]\n\nNo other bases work.\n\n---\n\n### Sum of all such bases\n\n\\[\n21+49 = 70 .\n\\]\n\n\\[\n\\boxed{70}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 70

    \n

    Extracted Answer: 70

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(0,c),\\qquad b^2+c^2=BC^2=38^2=1444 .\n\\]\n\nPut  \n\n\\[\nK=(x_k ,y_k),\\qquad L=(x_l ,y_l).\n\\]\n\nThe given distances give  \n\n\\[\n\\begin{aligned}\n&AK=AL=BK=CL=KL=14,\\\\\n&x_k^2+y_k^2=196,\\quad (x_k-b)^2+y_k^2=196,\\\\[2mm]\n&x_l^2+y_l^2=196,\\quad x_l^2+(y_l-c)^2=196,\\\\[2mm]\n&(x_k-x_l)^2+(y_k-y_l)^2=196 .\n\\end{aligned}\n\\]\n\nFrom the first two equations  \n\n\\[\nb=2x_k,\\qquad y_k=\\sqrt{196-x_k^2}.\n\\]\n\nFrom the next two  \n\n\\[\nc=2y_l,\\qquad x_l=\\sqrt{196-y_l^2}.\n\\]\n\nThus  \n\n\\[\nK=(b/2,\\;\\sqrt{196-b^{2}/4}),\\qquad \nL=(\\sqrt{196-c^{2}/4},\\;c/2).\n\\]\n\nSince \\(AK=AL=KL=14\\), the triangle \\(AKL\\) is equilateral; hence\nthe angle \\(\\angle KAL=60^\\circ\\).  Write\n\n\\[\nK=14(\\cos\\alpha,\\sin\\alpha),\\qquad  \nL=14(\\cos(\\alpha+60^\\circ),\\sin(\\alpha+60^\\circ))\n\\]\n\nfor some \\(\\alpha\\) with \\(0^\\circ<\\alpha<30^\\circ\\).\nComparing with the expressions for \\(K\\) and \\(L\\) gives  \n\n\\[\nb=28\\cos\\alpha,\\qquad c=28\\sin(\\alpha+60^\\circ).\n\\]\n\nThe hypotenuse length yields\n\n\\[\nb^{2}+c^{2}=28^{2}\\bigl(\\cos^{2}\\alpha+\\sin^{2}(\\alpha+60^\\circ)\\bigr)=38^{2}=1444,\n\\]\n\nso  \n\n\\[\n\\cos^{2}\\alpha+\\sin^{2}(\\alpha+60^\\circ)=\\frac{361}{196}.\n\\tag{1}\n\\]\n\nFrom (1) we obtain, after using \\(\\sin^{2}\\theta= \\tfrac12(1-\\cos2\\theta)\\),\n\n\\[\n\\sqrt3\\sin(2\\alpha+60^\\circ)=\\frac{165}{98},\n\\qquad\\Longrightarrow\\qquad\n\\sin(2\\alpha+60^\\circ)=\\frac{165}{98\\sqrt3}.\n\\tag{2}\n\\]\n\nNow compute the required area.\n\n*Area of \\(\\triangle ABC\\)*  \n\n\\[\n[ABC]=\\tfrac12bc=\\tfrac12\\,(28\\cos\\alpha)(28\\sin(\\alpha+60^\\circ))\n      =392\\cos\\alpha\\sin(\\alpha+60^\\circ).\n\\tag{3}\n\\]\n\n*Area of \\(\\triangle AKB\\)*  \n\nThe altitude from \\(K\\) to \\(AB\\) is \\(y_k=14\\sin\\alpha\\), and \\(AB=28\\cos\\alpha\\); thus  \n\n\\[\n[AKB]=\\tfrac12\\,(28\\cos\\alpha)(14\\sin\\alpha)=98\\sin2\\alpha .\n\\tag{4}\n\\]\n\n*Area of \\(\\triangle ALC\\)*  \n\nAnalogously  \n\n\\[\n[ALC]=\\tfrac12\\,(28\\sin(\\alpha+60^\\circ))(14\\cos(\\alpha+60^\\circ))\n      =98\\sin\\bigl(2\\alpha+120^\\circ\\bigr).\n\\tag{5}\n\\]\n\n*Area of the equilateral \\(\\triangle AKL\\)*  \n\n\\[\n[AKL]=\\frac{\\sqrt3}{4}\\cdot14^{2}=49\\sqrt3.\n\\tag{6}\n\\]\n\nHence  \n\n\\[\n\\begin{aligned}\n[BKLC]&=[ABC]-[AKB]-[ALC]-[AKL] \\\\[2mm]\n&=392\\cos\\alpha\\sin(\\alpha+60^\\circ)\n   -98\\sin2\\alpha-98\\sin(2\\alpha+120^\\circ)-49\\sqrt3 .\n\\end{aligned}\n\\]\n\nUsing \\(\\sin(\\alpha+60^\\circ)=\\tfrac12\\sin\\alpha+\\tfrac{\\sqrt3}{2}\\cos\\alpha\\) and\nsimplifying, the expression reduces to  \n\n\\[\n[BKLC]=49\\Bigl(\\sin2\\alpha+\\sqrt3\\bigl(1+\\cos2\\alpha\\bigr)\\Bigr).\n\\tag{7}\n\\]\n\nFrom (2),\n\n\\[\n\\sin2\\alpha+\\sqrt3\\cos2\\alpha\n    =2\\sin(2\\alpha+60^\\circ)=\\frac{165}{49\\sqrt3}.\n\\]\n\nInsert this into (7):\n\n\\[\n\\begin{aligned}\n[BKLC]&=49\\Bigl(\\frac{165}{49\\sqrt3}+\\sqrt3\\Bigr)\n       =\\frac{165}{\\sqrt3}+49\\sqrt3\\\\[2mm]\n      &=\\frac{165\\sqrt3}{3}+49\\sqrt3\n       =55\\sqrt3+49\\sqrt3=104\\sqrt3.\n\\end{aligned}\n\\]\n\nThus the area of quadrilateral \\(BKLC\\) equals \\(104\\sqrt3\\).\n\n\\[\n\\boxed{104}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 104

    \n

    Extracted Answer: 104

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n* \\(A,B,C\\) be the vertices of the acute triangle with  \n\\(\\angle A=84^{\\circ},\\ \\angle B=60^{\\circ},\\ \\angle C=36^{\\circ}\\);\n* \\(D,E,F\\) the midpoints of \\(BC,CA,AB\\);\n* \\(G,H,J\\) the second intersections of the nine\u2011point circle with\n\\(BC,CA,AB\\) respectively.\n\nThe circumcircle of \\(\\triangle DEF\\) is the nine\u2011point circle of \\(\\triangle ABC\\).\nHence \\(G,H,J\\) are the three feet of the altitudes of \\(\\triangle ABC\\);  \nthey form the orthic triangle \\(G\\!H\\!J\\).\n\n--------------------------------------------------------------------\n### 1.  Arc \\(\\widehat{DE}\\)\n\nOn the nine\u2011point circle the vectors from its centre \\(N\\) to the\nmidpoints are  \n\n\\[\nND=-\\frac{\\mathbf a}{2},\\qquad NE=-\\frac{\\mathbf b}{2},\n\\]\n\nwhere \\(\\mathbf a,\\mathbf b,\\mathbf c\\) are the unit vectors of the\ncircumcircle of \\(\\triangle ABC\\).  Consequently\n\n\\[\n\\widehat{DE}= \\angle(-\\mathbf a,-\\mathbf b)=\\angle(\\mathbf a,\\mathbf b)\n          =2\\angle ACB=2C = 2\\cdot36^{\\circ}=72^{\\circ}.\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 2.  Arc \\(\\widehat{HJ}\\)\n\n\\(H\\) and \\(J\\) are the feet of the altitudes from \\(B\\) and \\(C\\);\nthey are vertices of the orthic triangle \\(G\\!H\\!J\\).\nFor an acute triangle the angles of its orthic triangle are  \n\n\\[\n\\angle G =180^{\\circ}-2A,\\qquad \n\\angle H =180^{\\circ}-2B,\\qquad \n\\angle J =180^{\\circ}-2C .\n\\]\n\nWith \\(A=84^{\\circ},B=60^{\\circ},C=36^{\\circ}\\),\n\n\\[\n\\angle G =12^{\\circ},\\quad\n\\angle H =60^{\\circ},\\quad\n\\angle J =108^{\\circ}.\n\\]\n\nSince the nine\u2011point circle is the circumcircle of\n\\(\\triangle G\\!H\\!J\\), the central arc opposite a vertex equals twice the\nopposite interior angle.  Hence\n\n\\[\n\\widehat{HJ}= \\widehat{B'C'} = 2\\angle G\n            =2\\bigl(180^{\\circ}-2A\\bigr)=360^{\\circ}-4A\n            =360^{\\circ}-4\\cdot84^{\\circ}=24^{\\circ}.\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 3.  Arc \\(\\widehat{FG}\\)\n\nThe points \\(D,E,F\\) are the midpoints of the sides; they satisfy  \n\n\\[\n\\angle N D F =\\angle(-\\mathbf a,-\\mathbf c)=120^{\\circ},\n\\]\n\nso the minor arc \\(\\widehat{DF}\\) of the nine\u2011point circle measures\n\\(120^{\\circ}\\).  The arc \\(\\widehat{DF}\\) is the sum of the two\nconsecutive arcs \\(\\widehat{DG}\\) and \\(\\widehat{GF}\\).\n\nThe central arc \\(\\widehat{DG}\\) equals the angle between the\nvectors \\(ND\\) (direction \\(-\\mathbf a\\)) and \\(NG\\) (direction of the\nfoot from \\(A\\) onto \\(BC\\)).\nA short angle chase using the orthic triangle gives\n\n\\[\n\\widehat{DG}=48^{\\circ}.\n\\]\n\nTherefore\n\n\\[\n\\widehat{FG}= \\widehat{DF}-\\widehat{DG}=120^{\\circ}-48^{\\circ}=72^{\\circ}.\n\\tag{3}\n\\]\n\n(One can also obtain \\(\\widehat{FG}=72^{\\circ}\\) directly from the fact\nthat the chord \\(FJ\\) subtends the angle \\(60^{\\circ}\\) at the centre,\nso the complementary chord \\(FG\\) subtends \\(72^{\\circ}\\).)\n\n--------------------------------------------------------------------\n### 4.  Required sum\n\nFrom (1)\u2013(3),\n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n&= 72^{\\circ}+2\\cdot24^{\\circ}+3\\cdot72^{\\circ}\\\\[2mm]\n&= 72^{\\circ}+48^{\\circ}+216^{\\circ}\\\\\n&= 336^{\\circ}.\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{336}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 336

    \n

    Extracted Answer: 336

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The players are distinct, so an assignment of flavors is a function from the nine players to the three flavors.  \nLet  \n\n\\[\nc=\\#\\text{chocolate},\\qquad v=\\#\\text{vanilla},\\qquad s=\\#\\text{strawberry}.\n\\]\n\nWe need  \n\n\\[\nc+v+s=9,\\qquad c>v>s\\ge 1 .\n\\]\n\n---\n\n### 1.  Find all possible triples \\((c,v,s)\\).\n\nWrite \\(s=a\\), \\(v=a+d\\), \\(c=a+d+e\\) with \\(a,d,e\\ge1\\).  \nThen  \n\n\\[\na+(a+d)+(a+d+e)=9\\Longrightarrow 3a+2d+e=9 .\n\\]\n\nSearching integer solutions with \\(a,d,e\\ge1\\) gives only three possibilities:\n\n* \\(a=1,d=1,e=4\\)\u2003\u2192 \\((c,v,s)=(6,2,1)\\)\n* \\(a=1,d=2,e=2\\)\u2003\u2192 \\((c,v,s)=(5,3,1)\\)\n* \\(a=2,d=1,e=1\\)\u2003\u2192 \\((c,v,s)=(4,3,2)\\)\n\nNo other triples satisfy \\(c>v>s\\) and sum to 9.\n\n---\n\n### 2.  Count assignments for each triple.\n\nFor a fixed triple \\((c,v,s)\\) the number of assignments equals the multinomial coefficient  \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\n\\[\n\\begin{aligned}\n(6,2,1)&:\\ \\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[2mm]\n(5,3,1)&:\\ \\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[2mm]\n(4,3,2)&:\\ \\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\n---\n\n### 3.  Total number of assignments.\n\n\\[\nN=252+504+1260=2016.\n\\]\n\n---\n\n### 4.  Remainder modulo \\(1000\\).\n\n\\[\n2016\\equiv 16 \\pmod{1000}.\n\\]\n\n---\n\n\\[\n\\boxed{16}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 16

    \n

    Extracted Answer: 16

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    First factor the quadratic form.\n\n\\[\n12x^{2}-xy-6y^{2}= (4x-3y)(3x+2y)\n\\]\n\nHence  \n\n\\[\n(4x-3y)(3x+2y)=0\\Longrightarrow \n\\begin{cases}\n4x-3y=0\\\\[2mm]\n\\text{or}\\\\[2mm]\n3x+2y=0\n\\end{cases}\n\\]\n\n---\n\n### 1.  Solutions of \\(4x-3y=0\\)\n\n\\(4x=3y\\Rightarrow y=\\dfrac{4}{3}x\\).  \nSince \\(x,y\\) are integers, \\(x\\) must be a multiple of \\(3\\): set \\(x=3k\\), then  \n\n\\[\ny=4k,\\qquad k\\in\\mathbb Z .\n\\]\n\nBoth coordinates must satisfy \\(-100\\le x,y\\le100\\):\n\n\\[\n|3k|\\le100,\\qquad|4k|\\le100\\Longrightarrow |k|\\le \\Big\\lfloor\\frac{100}{4}\\Big\\rfloor =25 .\n\\]\n\nThus \\(k=-25,-24,\\dots ,25\\):  \\(51\\) integer pairs.\n\n---\n\n### 2.  Solutions of \\(3x+2y=0\\)\n\n\\(3x=-2y\\Rightarrow y=-\\dfrac{3}{2}x\\).  \nFor integers we need \\(x\\) even: write \\(x=2m\\), then  \n\n\\[\ny=-3m,\\qquad m\\in\\mathbb Z .\n\\]\n\nAgain \\(-100\\le x,y\\le100\\) gives  \n\n\\[\n|2m|\\le100,\\qquad|3m|\\le100\\Longrightarrow |m|\\le\\Big\\lfloor\\frac{100}{3}\\Big\\rfloor =33 .\n\\]\n\nThus \\(m=-33,-32,\\dots ,33\\):  \\(67\\) integer pairs.\n\n---\n\n### 3.  Remove double counting\n\nThe two families intersect only at \\((0,0)\\) (when \\(k=m=0\\)).  \nHence the total number of distinct ordered pairs is  \n\n\\[\n51+67-1=117 .\n\\]\n\n\\[\n\\boxed{117}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 117

    \n

    Extracted Answer: 117

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The function  \n\n\\[\nf(x)=\\frac{(x-18)(x-72)(x-98)(x-k)}{x}\\qquad (x>0)\n\\]\n\nhas zeros at \\(x=18,\\;72,\\;98,\\;k\\) and  \n\\(\\displaystyle \\lim_{x\\to0^+}f(x)=\\lim_{x\\to\\infty}f(x)=+\\infty\\).\nHence \\(f\\) is positive near the ends and negative on each of the two\nintervals bounded by the smallest two zeros and by the largest two zeros.\nConsequently \\(f\\) has exactly two local minima (one in each negative\ninterval).\n\nLet the common minimal value be \\(m<0\\).  At a minimum the graph of\n\\(y=f(x)\\) is tangent to the horizontal line \\(y=m\\); therefore the\nequation  \n\n\\[\nf(x)=m\\quad\\Longleftrightarrow\\quad (x-18)(x-72)(x-98)(x-k)-mx=0\n\\]\n\nmust have a **double root** at each minimum.  Thus the quartic polynomial\nmust be a perfect square of a quadratic:\n\n\\[\n(x-18)(x-72)(x-98)(x-k)-mx=(x^{2}-Sx+P)^{2},\n\\]\nwhere \\(S,P,m\\) are constants.\n\nExpanding and equating coefficients with  \n\n\\[\nN(x)-mx=x^{4}-(188+k)x^{3}+(10116+188k)x^{2}-(127008+10116k+m)x+127008k\n\\]\n\ngives  \n\n\\[\n\\begin{cases}\nS=\\dfrac{188+k}{2},\\\\[4pt]\nS^{2}+2P=10116+188k,\\\\[4pt]\nm=2SP-(127008+10116k),\\\\[4pt]\nP^{2}=127008\\,k .\n\\end{cases}\n\\]\n\nFrom \\(P^{2}=127008k\\) set \\(t=\\sqrt{2k}>0\\); then  \n\n\\[\nP=252t,\\qquad k=\\dfrac{t^{2}}{2},\n\\quad S=\\frac{188+k}{2}=94+\\frac{t^{2}}{4}.\n\\]\n\nSubstituting these into \\(S^{2}+2P=10116+188k\\) yields an equation in\n\\(t\\):\n\n\\[\n\\frac{(188+k)^{2}}{4}+504\\sqrt{2k}=10116+188k\n\\Longrightarrow\nt^{4}-752t^{2}+8064t-20480=0 .\n\\]\n\nFactoring,\n\n\\[\nt^{4}-752t^{2}+8064t-20480=(t-4)(t-8)(t-20)(t+32)=0 .\n\\]\n\nSince \\(t>0\\), we obtain  \n\n\\[\nt=4,\\;8,\\;20\\quad\\Longrightarrow\\quad \nk=\\frac{t^{2}}{2}=8,\\;32,\\;200 .\n\\]\n\nFor each of these \\(k\\) one computes \\(\\Delta=S^{2}-4P>0\\), so the\nquadratic \\(x^{2}-Sx+P\\) has two distinct real roots.  They lie exactly in\nthe two negative intervals, giving two distinct points where \\(f\\) attains\nthe value \\(m\\).  Moreover \\(m<0\\), while all zeros of \\(f\\) are at\n\\(0\\), so these are the global minima.  \nNo other positive \\(k\\) satisfies the required condition.\n\nHence the three admissible values of \\(k\\) are \\(8,\\;32,\\;200\\), and their\nsum is\n\n\\[\n8+32+200 = 240.\n\\]\n\n\\[\n\\boxed{240}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 240

    \n

    Extracted Answer: 240

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For a quadrilateral that has an incircle (a **tangential quadrilateral**)  \n\n\\[\n\\text{area}=r_{\\text{in}}\\cdot\\frac{\\text{perimeter}}2 .\n\\tag{1}\n\\]\n\n---\n\n### 1.  Using the given area\n\nLet the parallel sides be \\(r\\) and \\(s\\) \\((r\\neq s)\\) and the equal legs be \\(\\ell\\).\nThe incircle radius is \\(r_{\\text{in}}=3\\) and the area is \\(72\\).\n\nFrom (1),\n\n\\[\n72=3\\cdot\\frac{r+s+2\\ell}{2}\\Longrightarrow\nr+s+2\\ell=48.\n\\tag{2}\n\\]\n\n---\n\n### 2.  Pitot\u2019s theorem\n\nA tangential quadrilateral satisfies Pitot\u2019s theorem: the sum of opposite sides are equal.  \nThus for our isosceles trapezoid  \n\n\\[\nr+s= \\ell+\\ell =2\\ell \\Longrightarrow \\ell=\\frac{r+s}{2}.\n\\tag{3}\n\\]\n\nSubstituting (3) into (2),\n\n\\[\nr+s+2\\Bigl(\\frac{r+s}{2}\\Bigr)=48\\Longrightarrow 2(r+s)=48\n\\Longrightarrow r+s=24.\n\\tag{4}\n\\]\n\nHence each leg is  \n\n\\[\n\\ell=\\frac{r+s}{2}=12.\n\\]\n\n---\n\n### 3.  Height of the trapezoid\n\nA circle tangent to two parallel lines must have its centre midway between them, so the distance (the height \\(h\\)) between the bases equals twice the radius:\n\n\\[\nh=2\\cdot3=6.\n\\]\n\nThe area of a trapezoid is also  \n\n\\[\n\\text{Area}= \\frac{r+s}{2}\\,h = \\frac{24}{2}\\cdot6 = 72,\n\\]\n\nwhich checks with the given data.\n\n---\n\n### 4.  Relating the legs, height, and bases  \n\nIn an isosceles trapezoid the leg \\(\\ell\\) together with the height \\(h\\) and half the difference of the bases forms a right triangle:\n\n\\[\n\\ell^{2}=h^{2}+\\Bigl(\\frac{s-r}{2}\\Bigr)^{2}.\n\\]\n\nPlugging \\(\\ell=12\\) and \\(h=6\\),\n\n\\[\n12^{2}=6^{2}+\\Bigl(\\frac{s-r}{2}\\Bigr)^{2}\n\\Longrightarrow 144=36+\\frac{(s-r)^{2}}{4}\n\\Longrightarrow (s-r)^{2}=432.\n\\]\n\nThus  \n\n\\[\ns-r= \\sqrt{432}=12\\sqrt3 .\n\\tag{5}\n\\]\n\n---\n\n### 5.  Solving for \\(r\\) and \\(s\\)\n\nFrom (4) and (5):\n\n\\[\n\\begin{cases}\ns+r = 24,\\\\[2pt]\ns-r = 12\\sqrt3,\n\\end{cases}\n\\qquad\\Longrightarrow\\qquad\ns = 12+6\\sqrt3,\\;\\; r = 12-6\\sqrt3.\n\\]\n\n---\n\n### 6.  Computing \\(r^{2}+s^{2}\\)\n\n\\[\nr^{2}+s^{2}= (12-6\\sqrt3)^{2}+(12+6\\sqrt3)^{2}\n= (252-144\\sqrt3)+(252+144\\sqrt3)=504.\n\\]\n\n(Alternatively, using \\((r+s)^{2}=r^{2}+s^{2}+2rs\\) and \\(rs=36\\) from \\((s+r)^{2}-(s-r)^{2}=4rs\\) also gives \\(r^{2}+s^{2}=504\\).)\n\n\\[\n\\boxed{504}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 504

    \n

    Extracted Answer: 504

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n\\boxed{240}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 240

    \n

    Extracted Answer: 240

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The number must be divisible by \\(22=2\\cdot 11\\).\n\n---\n\n### 1.  Divisibility by \\(2\\)\n\nThe last digit (the 8\u2011th digit) must be even, i.e. one of \\(2,4,6,8\\).\n\n---\n\n### 2.  Divisibility by \\(11\\)\n\nFor an 8\u2011digit number \\(d_1d_2\\ldots d_8\\)\n\n\\[\nd_1-d_2+d_3-d_4+d_5-d_6+d_7-d_8\\equiv0\\pmod{11}.\n\\]\n\nLet  \n\n\\[\nS_{\\text{odd}}=d_1+d_3+d_5+d_7,\\qquad  \nS_{\\text{even}}=d_2+d_4+d_6+d_8 .\n\\]\n\nThen the condition becomes  \n\n\\[\nS_{\\text{odd}}-S_{\\text{even}}\\equiv0\\pmod{11}.\n\\]\n\nSince the digits \\(1,2,\\dots ,8\\) are used exactly once,  \n\n\\[\nS_{\\text{odd}}+S_{\\text{even}}=1+2+\\cdots +8=36 .\n\\]\n\nHence  \n\n\\[\n2S_{\\text{even}}\\equiv36\\pmod{11}\\Longrightarrow2S_{\\text{even}}\\equiv3\\pmod{11}\n\\]\n\\[\n\\Longrightarrow S_{\\text{even}}\\equiv3\\cdot 6\\equiv18\\equiv7\\pmod{11}.\n\\]\n\nThe possible values for a sum of four distinct digits from \\(\\{1,\\ldots ,8\\}\\) lie between \\(10\\) and \\(26\\); the only value congruent to \\(7\\pmod{11}\\) in this interval is \\(18\\).  \nThus we must have  \n\n\\[\nS_{\\text{even}}=18\\qquad\\text{and}\\qquad S_{\\text{odd}}=18 .\n\\]\n\n---\n\n### 3.  Choosing the four digits that go to even positions\n\nWe need all 4\u2011element subsets of \\(\\{1,2,3,4,5,6,7,8\\}\\) whose sum is \\(18\\).\n\nListing them:\n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are **8** such subsets.  \nEach of them contains exactly two even digits (the evens are \\(2,4,6,8\\)).\n\n---\n\n### 4.  Arranging the digits\n\nFor a fixed subset \\(S\\) (the digits that occupy the even positions 2,4,6,8):\n\n* The last position (position 8) must be even.  \n  Since \\(S\\) has exactly two evens, we have \\(2\\) choices for the digit that goes to position\u202f8.\n* The remaining three digits of \\(S\\) can be placed in positions 2,4,6 in any order: \\(3! = 6\\) ways.\n\nHence the even positions can be filled in \\(2\\cdot6 = 12\\) ways.\n\nThe four digits not in \\(S\\) occupy the odd positions \\(1,3,5,7\\) and may be arranged arbitrarily:\n\\(4! = 24\\) ways.\n\nThus each subset contributes  \n\n\\[\n12 \\times 24 = 288\n\\]\n\ndifferent 8\u2011digit numbers.\n\nWith 8 admissible subsets, the total number of 8\u2011digit numbers divisible by 22 is  \n\n\\[\nN = 8 \\times 288 = 2304.\n\\]\n\n---\n\n### 5.  Required difference\n\n\\[\nN-2025 = 2304-2025 = 279.\n\\]\n\n\\[\n\\boxed{279}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 279

    \n

    Extracted Answer: 279

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nx_{k+1}=\\frac{x_k+\\dfrac1{x_k}-1}{3}\n      =\\frac{x_k^2-x_k+1}{3x_k}\\qquad (k\\ge 1),\\qquad \nx_1=\\frac{25}{11}.\n\\]\n\n--------------------------------------------------------------------\n### 1.  A convenient change of variable  \n\nPut  \n\n\\[\ny_k=\\frac{x_k-1}{x_k+1}\\qquad\\Longleftrightarrow\\qquad \nx_k=\\frac{1+y_k}{1-y_k}.\n\\]\n\nThen  \n\n\\[\ny_{k+1}= \\frac{x_{k+1}-1}{x_{k+1}+1}\n        =\\frac{3y_k^{2}-1}{2}.\n\\tag{1}\n\\]\n\nIndeed,\n\\[\n\\frac{x_k+1/x_k-1}{3}= \\frac{1+y_k}{1-y_k}\n        \\Longrightarrow\ny_{k+1}= \\frac{3y_k^{2}-1}{2}.\n\\]\n\nFrom \\(x_1=25/11\\) we obtain\n\n\\[\ny_1=\\frac{25/11-1}{25/11+1}= \\frac{14/11}{36/11}= \\frac{7}{18}.\n\\]\n\n--------------------------------------------------------------------\n### 2.  Removing the common factor  \n\nWrite \\(y_k =\\dfrac{a_k}{b_k}\\) with \\(\\gcd(a_k,b_k)=1\\).\nFrom (1)\n\n\\[\n\\frac{a_{k+1}}{b_{k+1}}=\\frac{3a_k^{2}-b_k^{2}}{2b_k^{2}} .\n\\]\n\nBecause \\(b_k\\) is always a multiple of \\(3\\), the fraction can be reduced by the\nfactor \\(3\\) and we obtain the **integer** recurrences\n\n\\[\n\\boxed{\\;\n\\begin{aligned}\na_{k+1}&=\\frac{3a_k^{2}-b_k^{2}}{3},\\\\[2mm]\nb_{k+1}&=\\frac{2b_k^{2}}{3},\n\\end{aligned}\\qquad a_1=7,\\;b_1=18.}\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 3.  Closed form for \\(b_k\\)\n\nFrom the second line of (2)\n\n\\[\nb_{k+1}=\\frac{2}{3}b_k^{2}, \\qquad b_1=18.\n\\]\n\nInduction gives  \n\n\\[\n\\boxed{\\,b_k=2^{\\,2^{\\,k}-1}\\;3^{\\,2^{\\,k-1}+1}\\,}\\qquad(k\\ge1).   \\tag{3}\n\\]\n\nCheck: \\(b_1=2^{2-1}3^{1+1}=2\\cdot 9=18\\).\n\n--------------------------------------------------------------------\n### 4.  The reduced form of \\(x_k\\)\n\nSince \\(x_k=\\dfrac{1+y_k}{1-y_k}\\) and \\(y_k=a_k/b_k\\),\n\n\\[\nx_k=\\frac{a_k+b_k}{\\,b_k-a_k\\,}.\n\\]\n\nThus the reduced numerator and denominator are  \n\n\\[\nm_k=a_k+b_k,\\qquad n_k=b_k-a_k,\n\\]\n\nand\n\n\\[\nm_k+n_k=2b_k. \\tag{4}\n\\]\n\nConsequently we only need \\(2b_{2025}\\pmod{1000}\\).\n\n--------------------------------------------------------------------\n### 5.  Computing \\(2b_{2025}\\pmod{1000}\\)\n\nFrom (3)\n\n\\[\n2b_{2025}=2\\cdot\n2^{\\,2^{2025}-1}\\;3^{\\,2^{2024}+1}\n=2^{\\,2^{2025}}\\;3^{\\,2^{2024}+1}.\n\\]\n\nWork modulo \\(1000=8\\cdot125\\).\n\n*Modulo \\(8\\):*  \n\\(2^{\\,2^{2025}}\\) is a multiple of \\(8\\) (the exponent is \\(\\ge3\\)), so the product is\n\\(0\\pmod 8\\).\n\n*Modulo \\(125\\):*  \nBoth bases are invertible, so we may reduce the exponents modulo \\(\\varphi(125)=100\\).\n\n\\[\n\\begin{aligned}\n2^{2025}\\pmod{100}&\\equiv 32,\\\\\n2^{2024}\\pmod{100}&\\equiv 16,\n\\end{aligned}\n\\qquad\\Longrightarrow\\qquad\n\\begin{aligned}\n2^{\\,2^{2025}} &\\equiv 2^{32}\\pmod{125},\\\\\n3^{\\,2^{2024}+1}&\\equiv 3^{17}\\pmod{125}.\n\\end{aligned}\n\\]\n\n\\[\n2^{32}\\equiv46\\pmod{125},\\qquad \n3^{17}\\equiv38\\pmod{125}.\n\\]\n\nHence  \n\n\\[\n2^{\\,2^{2025}}3^{\\,2^{2024}+1}\\equiv46\\cdot38\\equiv123\\pmod{125}.\n\\]\n\n*Chinese remainder:*  Find \\(N\\) with  \n\n\\[\nN\\equiv0\\pmod8,\\qquad N\\equiv123\\pmod{125}.\n\\]\n\nWriting \\(N=125a+123\\) and testing \\(a=0,\\dots,7\\) gives \\(a=1\\) as the solution,\nso \\(N=125\\cdot1+123=248\\).\n\nThus  \n\n\\[\n2b_{2025}\\equiv 248\\pmod{1000}.\n\\]\n\nBy (4) this is exactly \\((m+n)\\pmod{1000}\\).\n\n--------------------------------------------------------------------\n\\[\n\\boxed{248}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 248

    \n

    Extracted Answer: 248

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nz=x+yi .\n\\]\n\nThe first equation  \n\n\\[\n|25+20i-z|=5\n\\]\n\nrepresents the circle  \n\n\\[\n(x-25)^2+(y-20)^2=5^2        \\tag{1}\n\\]\n\ncentered at \\(C=(25,20)\\) with radius \\(r=5\\).\n\n---\n\n### Locus of the second equation  \n\n\\[\n|z-4-k|=|z-3i-k|\n\\]\n\nmeans that the distance from \\(z\\) to the point  \n\n\\[\nA=(4+k,0)\n\\]\n\nequals its distance to the point  \n\n\\[\nB=(k,3).\n\\]\n\nHence the set of all such \\(z\\) is the **perpendicular bisector** of the segment \\(AB\\).\n\n- Midpoint of \\(AB\\):\n  \\[\n  M=\\Bigl(\\frac{4+k+k}{2},\\frac{0+3}{2}\\Bigr)=(2+k,\\tfrac32).\n  \\]\n\n- Slope of \\(AB\\):\n  \\[\n  m_{AB}= \\frac{3-0}{k-(4+k)}=\\frac{3}{-4}=-\\frac34 .\n  \\]\n\n- Slope of the perpendicular bisector:\n  \\[\n  m_{L}= \\frac{4}{3}.\n  \\]\n\nThus the line \\(L_k\\) (the perpendicular bisector) has equation  \n\n\\[\ny-\\frac32=\\frac43\\Bigl(x-(2+k)\\Bigr).\n\\]\n\nWriting it in the form \\(Ax+By+C=0\\),\n\n\\[\n8x-6y-(8k+7)=0\\qquad\\Longleftrightarrow\\qquad 8x-6y=8k+7. \\tag{2}\n\\]\n\n---\n\n### Tangency condition  \n\nThe system has exactly one solution \\(z\\) iff the line \\(L_k\\) is **tangent** to the circle \\((1)\\); i.e. the distance from the centre \\(C\\) to the line equals the radius \\(5\\).\n\nDistance from \\(C=(25,20)\\) to line \\((2)\\):\n\n\\[\nd=\\frac{|\\,8\\cdot25-6\\cdot20-(8k+7)\\,|}{\\sqrt{8^{2}+(-6)^{2}}}\n   =\\frac{|200-120-8k-7|}{10}\n   =\\frac{|73-8k|}{10}.\n\\]\n\nSet \\(d=5\\):\n\n\\[\n\\frac{|73-8k|}{10}=5 \\Longrightarrow |73-8k|=50.\n\\]\n\nHence  \n\n\\[\n73-8k=50 \\quad\\text{or}\\quad 73-8k=-50,\n\\]\n\nwhich give  \n\n\\[\nk=\\frac{23}{8},\\qquad k=\\frac{123}{8}.\n\\]\n\nBoth values indeed make the line tangent (the discriminant of the combined equations becomes zero), so each yields exactly one complex solution \\(z\\).\n\n---\n\n### Sum of all possible \\(k\\)\n\n\\[\n\\frac{23}{8}+\\frac{123}{8}= \\frac{146}{8}= \\frac{73}{4}.\n\\]\n\nWrite \\(\\frac{73}{4}\\) as \\(\\frac{m}{n}\\) with \\(\\gcd(m,n)=1\\): \\(m=73,\\; n=4\\).\n\n\\[\nm+n=73+4=77.\n\\]\n\n\\[\n\\boxed{77}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 77

    \n

    Extracted Answer: 77

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 27 cells of a $3\\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. \n | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | \n | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | \n | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | \n The number of different ways to fill such a grid can be written as $p^a\\cdot q^b\\cdot r^c\\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\\cdot a+q\\cdot b+r\\cdot c+s\\cdot d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The grid has three rows and three \\(3\\times3\\) blocks.  \nEach row must contain the numbers \\(1,\\dots ,9\\) once, and each block must also contain every number once.\n\n---\n\n### 1.  Fix the first row  \n\nBecause the numbers are distinct, we may fix the first row to be  \n\n\\[\n(1,2,3,4,5,6,7,8,9)\n\\]\n\nand later multiply the count by the \\(9!\\) possible permutations of this row.\n\n---\n\n### 2.  What must the other two rows contain?\n\n* Block\u202f1 (columns\u202f1\u20133): row\u202f1 already has \\(\\{1,2,3\\}\\); thus rows\u202f2\u20133 must contain the six numbers \\(\\{4,5,6,7,8,9\\}\\).\n\n* Block\u202f2 (columns\u202f4\u20136): rows\u202f2\u20133 must contain \\(\\{1,2,3,7,8,9\\}\\).\n\n* Block\u202f3 (columns\u202f7\u20139): rows\u202f2\u20133 must contain \\(\\{1,2,3,4,5,6\\}\\).\n\nEach of rows\u202f2 and\u202f3 must be a permutation of \\(\\{1,\\dots ,9\\}\\).\n\nHence for each number \\(m\\) (which appears in two of the three blocks) we must decide in which of those two blocks it will be placed in row\u202f2 (the other occurrence will go to row\u202f3).  \n\nThe numbers are grouped as\n\n\\[\n\\begin{aligned}\n&\\{1,2,3\\}\\ \\text{appear in blocks }2\\text{ and }3,\\\\\n&\\{4,5,6\\}\\ \\text{appear in blocks }1\\text{ and }3,\\\\\n&\\{7,8,9\\}\\ \\text{appear in blocks }1\\text{ and }2.\n\\end{aligned}\n\\]\n\nLet  \n\n* \\(x\\) = how many of \\(\\{1,2,3\\}\\) go to block\u202f2 (the rest go to block\u202f3);\n* \\(y\\) = how many of \\(\\{4,5,6\\}\\) go to block\u202f1 (the rest go to block\u202f3);\n* \\(z\\) = how many of \\(\\{7,8,9\\}\\) go to block\u202f1 (the rest go to block\u202f2).\n\nBecause each block must receive exactly three numbers for row\u202f2 we obtain  \n\n\\[\n\\begin{cases}\ny+z=3 &(\\text{block }1)\\\\\nx+(3-z)=3 &(\\text{block }2)\\\\\n(3-x)+(3-y)=3 &(\\text{block }3)\n\\end{cases}\n\\Longrightarrow x=z,\\quad y=3-x .\n\\]\n\nThus \\(x\\) can be \\(0,1,2,3\\).  \nFor a given \\(x\\),\n\n* choose \\(x\\) of the three numbers \\(\\{1,2,3\\}\\) to go to block\u202f2: \\(\\binom{3}{x}\\) ways;\n* choose \\(y=3-x\\) of \\(\\{4,5,6\\}\\) to go to block\u202f1: \\(\\binom{3}{3-x}=\\binom{3}{x}\\) ways;\n* choose \\(z=x\\) of \\(\\{7,8,9\\}\\) to go to block\u202f1: \\(\\binom{3}{x}\\) ways.\n\nHence the number of ways to decide **which numbers** belong to row\u202f2 in each block is  \n\n\\[\n\\sum_{x=0}^{3}\\binom{3}{x}^3=1^3+3^3+3^3+1^3=56 .\n\\]\n\n---\n\n### 3.  Placing the chosen numbers in the cells  \n\nWithin each block, row\u202f2 has three cells and row\u202f3 three cells.  \nThe three numbers assigned to row\u202f2 can be arranged in those three cells in \\(3!\\) ways, and similarly for row\u202f3.  \n\nThus for each block there are \\(3!\\times3! = 36\\) placements, and for the three blocks\n\n\\[\n36^3 = 46656\n\\]\n\nplacements.\n\nConsequently, with the first row fixed,\n\n\\[\n\\text{# grids} = 56 \\times 36^3 = 56 \\times 46656 = 2\\,612\\,736 .\n\\]\n\n---\n\n### 4.  Restore the first row  \n\nThe first row could be any permutation of the numbers \\(1\\)\u2013\\(9\\); there are \\(9! = 362880\\) possibilities.\n\n\\[\nN = 2\\,612\\,736 \\times 362\\,880 = 948\\,109\\,639\\,680 .\n\\]\n\n---\n\n### 5.  Prime factorisation  \n\n\\[\n\\begin{aligned}\n56 &= 2^3 \\cdot 7,\\\\[2pt]\n36^3 &= (2^2 3^2)^3 = 2^6 \\cdot 3^6,\\\\[2pt]\n9! &= 2^7 \\cdot 3^4 \\cdot 5 \\cdot 7 .\n\\end{aligned}\n\\]\n\nMultiplying:\n\n\\[\nN = 2^{3+6+7}\\, 3^{6+4}\\, 5^{1}\\, 7^{1+1}\n   = 2^{16} \\cdot 3^{10} \\cdot 5^{1} \\cdot 7^{2}.\n\\]\n\nThus we have the representation  \n\n\\[\nN = p^{a}\\, q^{b}\\, r^{c}\\, s^{d}\n\\]\n\nwith distinct primes  \n\n\\[\np=2,\\ a=16;\\qquad q=3,\\ b=10;\\qquad r=5,\\ c=1;\\qquad s=7,\\ d=2 .\n\\]\n\n---\n\n### 6.  Compute \\(p a + q b + r c + s d\\)\n\n\\[\n\\begin{aligned}\np a + q b + r c + s d &= 2\\cdot16 + 3\\cdot10 + 5\\cdot1 + 7\\cdot2\\\\\n&= 32 + 30 + 5 + 14\\\\\n&= 81.\n\\end{aligned}\n\\]\n\n\\[\n\\boxed{81}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 81

    \n

    Extracted Answer: 81

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\ny=x^{2}-4\\qquad (1)\n\\]\n\nand rotate the whole plane \\(60^{\\circ}\\) counter\u2011clockwise about the origin.\nFor a point \\((u,v)\\) on the original parabola, the image after the rotation is  \n\n\\[\n(x,y)=\\bigl(u\\cos60^\\circ -v\\sin60^\\circ,\\;u\\sin60^\\circ+v\\cos60^\\circ\\bigr)\n     =\\Bigl(\\frac12u-\\frac{\\sqrt3}{2}v,\\;\\frac{\\sqrt3}{2}u+\\frac12v\\Bigr). \\tag{2}\n\\]\n\nBecause \\((u,v)\\) lies on the original curve, \\(v=u^{2}-4\\).\nSubstituting this into (2) gives a parametric description of the rotated curve:\n\n\\[\n\\begin{cases}\nx= -\\frac{\\sqrt3}{2}u^{2}+\\frac12u+2\\sqrt3,\\\\[2mm]\ny= \\frac{\\sqrt3}{2}u+\\frac12u^{2}-2 .\n\\end{cases} \\tag{3}\n\\]\n\nThe intersection points of the original parabola and its image satisfy both\n\\(y=x^{2}-4\\) and (3).  Using (3) we replace \\(x\\) and \\(y\\) in \\(y=x^{2}-4\\):\n\n\\[\n\\frac{\\sqrt3}{2}u+\\frac12u^{2}-2=\n\\Bigl(-\\frac{\\sqrt3}{2}u^{2}+\\frac12u+2\\sqrt3\\Bigr)^{2}-4 .\n\\]\n\nAfter expanding and simplifying we obtain the quartic equation for \\(u\\)\n\n\\[\n3u^{4}-2\\sqrt3\\,u^{3}-25u^{2}+6\\sqrt3\\,u+40=0. \\tag{4}\n\\]\n\nBecause the coefficients involve \\(\\sqrt3\\) it is natural to try a factorisation\ninto quadratics with linear terms that are multiples of \\(\\sqrt3\\).  Indeed,\n\n\\[\n3u^{4}-2\\sqrt3\\,u^{3}-25u^{2}+6\\sqrt3\\,u+40\n  =(3u^{2}+\\sqrt3\\,u-10)(u^{2}-\\sqrt3\\,u-4). \\tag{5}\n\\]\n\nThus the possible values of \\(u\\) are the roots of  \n\n\\[\n\\begin{cases}\n3u^{2}+\\sqrt3\\,u-10=0,\\\\[1mm]\nu^{2}-\\sqrt3\\,u-4=0.\n\\end{cases}\n\\]\n\nSolving,\n\n\\[\n\\begin{aligned}\nu&=\\frac{-\\sqrt3\\pm\\sqrt{123}}{6},\\\\[1mm]\nu&=\\frac{\\sqrt3\\pm\\sqrt{19}}{2}.\n\\end{aligned}\n\\]\n\nPlug each value into (3) to obtain the corresponding point \\((x,y)\\).\n\n\\[\n\\begin{array}{c|c|c}\nu & x & y\\\\ \\hline\n\\displaystyle\\frac{-\\sqrt3+\\sqrt{123}}6 & 2.136\\ldots & 0.566\\ldots\\\\[2mm]\n\\displaystyle\\frac{-\\sqrt3-\\sqrt{123}}6 & -1.561\\ldots & -1.568\\ldots\\\\[2mm]\n\\displaystyle\\frac{\\sqrt3+\\sqrt{19}}2 & -3.046\\ldots & 5.276\\ldots\\\\[2mm]\n\\displaystyle\\frac{\\sqrt3-\\sqrt{19}}2 & 1.313\\ldots & -2.275\\ldots\n\\end{array}\n\\]\n\nOnly the last point lies in the fourth quadrant \\((x>0,\\;y<0)\\).  \nHence the required intersection point is obtained from  \n\n\\[\nu=\\frac{\\sqrt3-\\sqrt{19}}2 .\n\\]\n\nIts \\(y\\)-coordinate is, using (3),\n\n\\[\n\\begin{aligned}\ny&=\\frac{\\sqrt3}{2}u+\\frac12u^{2}-2\\\\\n  &=\\frac{\\sqrt3}{2}\\cdot\\frac{\\sqrt3-\\sqrt{19}}2\n    +\\frac12\\Bigl(\\frac{\\sqrt3-\\sqrt{19}}2\\Bigr)^{2}-2\\\\[1mm]\n  &=\\frac{3-\\sqrt{57}}4+\\frac{11-\\sqrt{57}}4-2\\\\[1mm]\n  &=\\frac{3-\\sqrt{57}}2 .\n\\end{aligned}\n\\]\n\nThus  \n\n\\[\ny=\\frac{a-\\sqrt b}{c}\\qquad\\text{with}\\quad a=3,\\;b=57,\\;c=2.\n\\]\n\nSince \\(\\gcd(3,2)=1\\) the representation is in lowest terms.  Therefore\n\n\\[\na+b+c = 3+57+2 = 62.\n\\]\n\n\\[\n\\boxed{62}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 62

    \n

    Extracted Answer: 62

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution.**  \n\nPut \\(A=(0,0)\\) and let \\(AB\\) be the \\(x\\)-axis.  \nSince  \n\n\\[\nAD=4,\\qquad DE=16,\\qquad EB=8,\n\\]\n\nwe have  \n\n\\[\nA=(0,0),\\;D=(4,0),\\;E=(20,0),\\;B=(28,0),\\qquad AB=28 .\n\\]\n\nLet \\(C=(x,y)\\) with \\(y>0\\).  \nBecause \\(AF=13,\\;FG=52,\\;GC=26\\),\n\n\\[\nAC=13+52+26=91,\\qquad \n\\frac{AF}{AC}=\\frac{13}{91}=\\frac17 ,\\qquad \n\\frac{AG}{AC}=\\frac{13+52}{91}= \\frac{65}{91}= \\frac57 .\n\\]\n\nHence  \n\n\\[\nF=\\Bigl(\\frac{x}{7},\\frac{y}{7}\\Bigr),\\qquad \nG=\\Bigl(\\frac{5x}{7},\\frac{5y}{7}\\Bigr).\n\\]\n\n--------------------------------------------------------------------\n### 1.  Height of \\(\\triangle ABC\\)\n\nThe quadrilateral \\(DEGF\\) has vertices  \n\n\\[\nD(4,0),\\;E(20,0),\\;G\\Bigl(\\frac{5x}{7},\\frac{5y}{7}\\Bigr),\\;F\\Bigl(\\frac{x}{7},\\frac{y}{7}\\Bigr).\n\\]\n\nIts area by the shoelace formula is  \n\n\\[\n\\begin{aligned}\n[DEGF]\n&=\\frac12\\Bigl|\n\\bigl(4\\cdot0+20\\cdot\\frac{5y}{7}\n+\\frac{5x}{7}\\cdot\\frac{y}{7}+ \\frac{x}{7}\\cdot0\\bigr) \\\\\n&\\qquad\\ -\\bigl(0\\cdot20+0\\cdot\\frac{5x}{7}\n+\\frac{5y}{7}\\cdot\\frac{x}{7}+ \\frac{y}{7}\\cdot4\\bigr)\\Bigr| \\\\\n&=\\frac{624}{91}\\,y .\n\\end{aligned}\n\\]\n\nWe are given \\([DEGF]=288\\), so  \n\n\\[\n\\frac{624}{91}\\,y=288\\Longrightarrow y=42 .\n\\]\n\nTherefore the height of \\(\\triangle ABC\\) above \\(AB\\) is \\(y=42\\) and  \n\n\\[\n[ABC]=\\frac12\\cdot AB\\cdot y=\\frac12\\cdot28\\cdot42=588 .\n\\]\n\n--------------------------------------------------------------------\n### 2.  Points \\(M\\) and \\(N\\)\n\n\\(M\\) is the reflection of \\(D\\) across \\(F\\); thus \\(F\\) is the midpoint of\n\\(DM\\):\n\n\\[\nM=2F-D=\\Bigl(\\frac{2x}{7}-4,\\; \\frac{2y}{7}\\Bigr)=\\Bigl(\\frac{2x}{7}-4,12\\Bigr).\n\\]\n\n\\(N\\) is the reflection of \\(G\\) across \\(E\\); hence\n\n\\[\nN=2E-G=\\Bigl(40-\\frac{5x}{7},\\; -\\frac{5y}{7}\\Bigr)=\\Bigl(40-\\frac{5x}{7},-30\\Bigr).\n\\]\n\n--------------------------------------------------------------------\n### 3.  Area of the heptagon \\(AFNBCEM\\)\n\nList the vertices in the given order:\n\n\\[\n\\begin{array}{c|c}\n\\text{vertex}&(x,y)\\\\ \\hline\nA&(0,0)\\\\\nF&\\bigl(\\frac{x}{7},\\frac{y}{7}\\bigr)\\\\\nN&\\bigl(40-\\frac{5x}{7},-30\\bigr)\\\\\nB&(28,0)\\\\\nC&(x,y)\\\\\nE&(20,0)\\\\\nM&\\bigl(\\frac{2x}{7}-4,12\\bigr)\n\\end{array}\n\\]\n\nApply the shoelace formula:\n\n\\[\n\\begin{aligned}\n[AFNBCEM]&=\\frac12\\Bigl|\n\\underbrace{0\\cdot\\frac{y}{7}}_{\\!0}\n+\\frac{x}{7}\\cdot(-30)\n+(40-\\tfrac{5x}{7})\\cdot0\n+28\\cdot y\n+x\\cdot0\n+20\\cdot12\n+\\bigl(\\tfrac{2x}{7}-4\\bigr)\\cdot0 \\\\\n&\\qquad\n-\\bigl(0\\cdot\\frac{x}{7}\n+ \\frac{y}{7}\\bigl(40-\\tfrac{5x}{7}\\bigr)\n+(-30)\\cdot28\n+0\\cdot x\n+y\\cdot20\n+0\\bigl(\\tfrac{2x}{7}-4\\bigr)\n+12\\cdot0\\bigr)\\Bigr|\\\\\n&=\\frac12\\Bigl|\n\\Bigl(-\\frac{30x}{7}+1176+240\\Bigr)\n-\\Bigl(\\frac{40y}{7}-\\frac{5xy}{49}-840+20y\\Bigr)\\Bigr| .\n\\end{aligned}\n\\]\n\nAll terms containing \\(x\\) cancel, leaving\n\n\\[\n[AFNBCEM]=\\frac12\\bigl(1416-240\\bigr)=\\frac12\\cdot1176=588 .\n\\]\n\nThus the heptagon has the same area as \\(\\triangle ABC\\).\n\n--------------------------------------------------------------------\n### 4.  Answer\n\n\\[\n\\boxed{588}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 588

    \n

    Extracted Answer: 588

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The least possible value of  \n\n\\[\nf(X)=AX+BX+CX+DX+EX\n\\]\n\nis  \n\n\\[\n6+18\\sqrt{13}.\n\\]\n\nHence \\(m=6\\), \\(n=18\\), \\(p=13\\) and  \n\n\\[\nm+n+p=6+18+13=37.\n\\]\n\n\\[\n\\boxed{37}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 60

    \n

    Extracted Answer: 37

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nA=1,\\;B=2,\\dots ,L=12\n\\]\n\nand consider a random perfect matching of the 12 letters.  \nFor each pair we write the two letters in alphabetical order; thus each\npair is an unordered 2\u2011subset \\(\\{x,y\\}\\) with the smaller element first.\nWhen the six resulting two\u2011letter \u201cwords\u2019\u2019 are listed alphabetically, the\nlast (lexicographically largest) word is the pair whose **first letter**\n(the smaller element of the pair) is the largest among the six first\nletters.\n\nHence the problem asks for the probability that the pair containing the\nletter \\(G\\;(=7)\\) has the largest first\u2011letter among the six pairs.\n\n--------------------------------------------------------------------\n### 1.  How a matching looks\n\nIn any matching exactly six letters are the *smaller* element of their\npair; call this set \\(S\\) ( \\(|S|=6\\) ).  \nThe remaining six letters are the larger elements of their pairs.\n\nThe last word is the pair whose smaller element is  \n\n\\[\nM=\\max S .\n\\]\n\nWe need the probability that the pair containing \\(G\\) also contains\n\\(M\\).  This can happen in two mutually exclusive ways:\n\n* **Case\u202f1.** \\(G\\) is the smaller element of its pair, so \\(M=G\\).\n* **Case\u202f2.** \\(G\\) is the larger element of its pair; then the smaller\n  element of that pair must be \\(M\\).\n\n--------------------------------------------------------------------\n### 2.  Case\u202f2 \u2013 \\(G\\) is the larger element\n\nIf \\(G\\) is larger, its partner must be a smaller letter.\nLet that partner be \\(x\\ (<G)\\).  \nFor \\(x\\) to be the maximum of \\(S\\), all letters larger than \\(x\\)\nmust be the larger elements of their pairs.  Since \\(|S|=6\\), this forces\n\n\\[\nx=F\\;(=6),\\qquad S=\\{1,2,3,4,5,6\\}.\n\\]\n\nThus the only possible pairing is \\(\\{F,G\\}\\); the remaining letters are\n\\(\\{A,B,C,D,E\\}\\) (small) and \\(\\{H,I,J,K,L\\}\\) (large), which can be\nmatched arbitrarily.  There are  \n\n\\[\n5! =120\n\\]\n\nmatchings of this type.\n\n--------------------------------------------------------------------\n### 3.  Case\u202f1 \u2013 \\(G\\) is the smaller element\n\nNow \\(G\\) must be paired with a larger letter \\(j\\in\\{8,9,10,11,12\\}\\)\n(\\(5\\) choices).  \nFor \\(G\\) to be the maximal element of \\(S\\), none of the other letters\n\\(8,9,10,11,12\\) may belong to \\(S\\).  Hence  \n\n\\[\nS=\\{7\\}\\cup T,\\qquad T\\subset\\{1,2,3,4,5,6\\},\\ |T|=5.\n\\]\n\nChoose the omitted small letter \\(r\\in\\{1,\\dots ,6\\}\\); then\n\\(T=\\{1,\\dots ,6\\}\\setminus\\{r\\}\\) ( \\(6\\) choices).\n\nFor a fixed \\(j\\) and \\(r\\) we must match the five small letters\n\\(T\\) with the five large letters \\(\\{r\\}\\cup\\{8,9,10,11,12\\}\\setminus\\{j\\}\\)\nso that each small letter is paired with a larger one.  \nThe four large letters \\(\\{8,9,10,11,12\\}\\setminus\\{j\\}\\) can be paired\nwith any four of the small letters \u2013 that gives \\(4!=24\\) possibilities.\nThe remaining large letter \\(r\\) can only be paired with a small letter\nthat is smaller than \\(r\\); there are \\(r-1\\) such choices.\n\nHence for this \\(j,r\\) we have \\((r-1)\\cdot4!\\) matchings.\nSumming over \\(r\\) gives  \n\n\\[\n\\sum_{r=1}^{6}(r-1)\\cdot24=15\\cdot24=360\n\\]\n\nmatchings for each of the five possible \\(j\\).  Thus\n\n\\[\n\\text{Case\u202f1 count}=5\\cdot360=1800 .\n\\]\n\n--------------------------------------------------------------------\n### 4.  Total favourable matchings\n\n\\[\nN_{\\text{fav}}=1800+120=1920 .\n\\]\n\nThe total number of perfect matchings of 12 letters is  \n\n\\[\nN_{\\text{tot}}=\\frac{12!}{2^{6}\\,6!}=10395 .\n\\]\n\nTherefore\n\n\\[\nP=\\frac{1920}{10395}= \\frac{128}{693}\\qquad(\\gcd(128,693)=1).\n\\]\n\n--------------------------------------------------------------------\n### 5.  Answer\n\n\\[\n\\boxed{m+n=128+693=821}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 821

    \n

    Extracted Answer: None

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The inequalities  \n\n\\[\nx-yz<y-zx<z-xy\n\\]\n\nare equivalent to  \n\n\\[\n(x-y)(1+z)<0,\\qquad (y-z)(1+x)<0 .\n\\]\n\n---\n\n### 1.  Introduce convenient variables\n\nLet  \n\n\\[\nu=x-y,\\qquad v=y-z .\n\\]\n\nOn the plane \\(x+y+z=75\\) we can solve for \\((x,y,z)\\) in terms of \\((u,v)\\):\n\n\\[\n\\begin{aligned}\nx&=\\frac{75+2u+v}{3},\\\\[2pt]\ny&=\\frac{75-u+v}{3},\\\\[2pt]\nz&=\\frac{75-u-2v}{3}.\n\\end{aligned}\n\\]\n\nThus  \n\n\\[\n1+z=\\frac{78-u-2v}{3},\\qquad \n1+x=\\frac{78+2u+v}{3}.\n\\]\n\nThe two inequalities become  \n\n\\[\nu\\,(78-u-2v)<0,\\qquad v\\,(78+2u+v)<0 .\n\\tag{1}\n\\]\n\n---\n\n### 2.  Determine the regions in the \\((u,v)\\)-plane  \n\nFrom (1)\n\n\\[\n\\begin{cases}\nu(78-u-2v)<0,\\\\[2pt]\nv(78+2u+v)<0,\n\\end{cases}\n\\]\n\nwhich splits the \\((u,v)\\)-plane into four sign cases.\n\n| case | signs of \\(u,v\\) | resulting linear conditions |\n|------|------------------|----------------------------|\n| \\(u>0,\\ v>0\\) | empty (contradiction) |\n| \\(u>0,\\ v<0\\) | \\(u+2v>78\\) (unbounded) |\n| \\(u<0,\\ v>0\\) | \\(u+2v<78,\\;2u+v<-78\\) (unbounded) |\n| \\(u<0,\\ v<0\\) | \\(2u+v>-78\\) (bounded) |\n\nOnly the last case gives a bounded region.  \nWith \\(u<0,\\ v<0\\) the condition \\(u+2v<78\\) is automatic, so the region is\n\n\\[\n\\boxed{\\;u<0,\\;v<0,\\;2u+v>-78\\;}\n\\]\n\nwhich is the interior of the right\u2011triangle with vertices  \n\n\\[\n(0,0),\\;(-39,0),\\;(0,-78).\n\\]\n\nIts area in the \\((u,v)\\)-coordinates is\n\n\\[\nA_{uv}= \\frac12\\cdot39\\cdot78 =1521 .\n\\]\n\n---\n\n### 3.  Convert to area on the plane \\(x+y+z=75\\)\n\nThe linear map \\((u,v)\\mapsto (x,y,z)\\) has Jacobian matrix  \n\n\\[\n\\frac{\\partial(x,y,z)}{\\partial(u,v)}=\n\\begin{pmatrix}\n\\frac{2}{3}&\\frac13\\\\[2pt]\n-\\frac13&\\frac13\\\\[2pt]\n-\\frac13&-\\frac23\n\\end{pmatrix}.\n\\]\n\nThe area\u2011scale factor is the magnitude of the cross product of its column vectors:\n\n\\[\n\\bigl\\lVert( \\tfrac23,-\\tfrac13,-\\tfrac13)\\times\n(\\tfrac13,\\tfrac13,-\\tfrac23)\\bigr\\rVert\n= \\frac1{\\sqrt3}.\n\\]\n\nHence the area of the finite region on the given plane is  \n\n\\[\nA =\\frac1{\\sqrt3}\\,A_{uv}= \\frac{1521}{\\sqrt3}\n      =\\frac{1521\\sqrt3}{3}= 507\\sqrt3 .\n\\]\n\n---\n\n### 4.  Answer\n\nThe area is \\(507\\sqrt3\\), i.e. \\(a=507\\) and \\(b=3\\).  \nThus  \n\n\\[\na+b = 507+3 = \\boxed{510}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 510

    \n

    Extracted Answer: 510

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the points be placed on the \\(x\\)-axis.\n\n\\[\nA(0,0),\\;B(b,0),\\;C(c,0),\\;D(d,0),\\;E(e,0),\\;F(f,0)\n\\]\n\nSet the successive segment lengths  \n\n\\[\nAB=x_1,\\;BC=x_2,\\;CD=x_3,\\;DE=x_4,\\;EF=x_5 .\n\\]\n\nFrom the given distances\n\n\\[\n\\begin{aligned}\nx_1+x_2 &= AC = 26,\\\\\nx_2+x_3 &= BD = 22,\\\\\nx_3+x_4 &= CE = 31,\\\\\nx_4+x_5 &= DF = 33,\\\\\nx_1+x_2+x_3+x_4+x_5 &= AF = 73 .\n\\end{aligned}\n\\]\n\nSolving,\n\\[\nx_2=8,\\qquad x_1=18,\\qquad x_3=14,\\qquad x_4=17,\\qquad x_5=16 .\n\\]\n\nHence  \n\n\\[\n\\begin{aligned}\nA&=(0,0),\\\\\nB&=(18,0),\\\\\nC&=(26,0),\\\\\nD&=(40,0),\\\\\nE&=(57,0),\\\\\nF&=(73,0).\n\\end{aligned}\n\\]\n\nLet \\(G=(x,y)\\).  From the distances \\(CG=40\\) and \\(DG=30\\),\n\n\\[\n\\begin{cases}\n(x-26)^2+y^2=40^2=1600,\\\\[2pt]\n(x-40)^2+y^2=30^2=900 .\n\\end{cases}\n\\]\n\nSubtracting the equations,\n\n\\[\n(x-26)^2-(x-40)^2=700\\Longrightarrow 28x-924=700\\Longrightarrow x=58.\n\\]\n\nThen  \n\n\\[\n(58-26)^2+y^2=1600\\Longrightarrow 1024+y^2=1600\\Longrightarrow y^2=576\\Longrightarrow y=\\pm24.\n\\]\n\nThus \\(G=(58,24)\\) (the sign of \\(y\\) does not affect the area).\n\nThe base \\(BE\\) lies on the \\(x\\)-axis:\n\n\\[\nBE = e-b = 57-18 = 39 .\n\\]\n\nThe height from \\(G\\) to the line \\(AB\\!E\\) is \\(|y|=24\\).\n\nHence the area of \\(\\triangle BGE\\) is\n\n\\[\n\\frac12\\cdot BE\\cdot|y|\n   =\\frac12\\cdot 39 \\cdot 24\n   =\\frac12\\cdot 936\n   =468 .\n\\]\n\n\\[\n\\boxed{468}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 468

    \n

    Extracted Answer: 468

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nA piecewise linear periodic function is defined by $f(x)=\\begin{cases}x&\\text{if }x\\in[-1,1)\\\\2-x&\\text{if }x\\in[1,3)\\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\\frac{a+b\\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The intersection points satisfy  \n\n\\[\ny=f(x),\\qquad x=34y^{2}\\Longrightarrow y=f(34y^{2}).\n\\]\n\n--------------------------------------------------------------------\n### 1.  The periodic function \\(f\\)\n\nBecause \\(f(x+4)=f(x)\\),\n\n\\[\nf(x)=\\begin{cases}\nx-4k ,&x\\in[-1+4k,\\,1+4k)\\\\[2mm]\n2+4k-x ,&x\\in[1+4k,\\,3+4k)\n\\end{cases}\\qquad(k\\in\\mathbb Z).\n\\]\n\nFor an intersection we have \\(x=34y^{2}\\ge 0\\) and \\(|y|\\le 1\\) (the range of \\(f\\)).\nHence we only need the periods that intersect the interval \\([0,34]\\):\n\\[\nk=0,1,\\dots ,8 .\n\\]\n\n--------------------------------------------------------------------\n### 2.  Equations for the two sub\u2011intervals\n\n*If \\(34y^{2}\\in[-1+4k,\\,1+4k)\\) (the \u201cincreasing\u201d part)*\n\\[\ny = (34y^{2})-4k\\;\\Longrightarrow\\;34y^{2}-y-4k=0 .\n\\tag{A}_{k}\n\\]\n\n*If \\(34y^{2}\\in[1+4k,\\,3+4k)\\) (the \u201cdecreasing\u201d part)*\n\\[\ny = 2+4k-(34y^{2})\\;\\Longrightarrow\\;34y^{2}+y-(4k+2)=0 .\n\\tag{B}_{k}\n\\]\n\n--------------------------------------------------------------------\n### 3.  Roots\n\n\\[\n\\begin{aligned}\n(A)_{k}&:\\quad y=\\frac{1\\pm\\sqrt{1+544k}}{68},\\\\[2mm]\n(B)_{k}&:\\quad y=\\frac{-1\\pm\\sqrt{273+544k}}{68}.\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Which roots are admissible?\n\nBecause \\(|y|\\le 1\\),\n\n* For \\(k=0,\\dots ,8\\) the two roots of \\((A)_{k}\\) satisfy \\(|y|<1\\);\n  thus all \\(2\\cdot9=18\\) of them are valid.\n\n* For \\((B)_{k}\\) the two roots lie in \\((-1,1)\\) when \\(k=0,\\dots ,7\\).\n  When \\(k=8\\) the negative root equals \\(\\displaystyle \n  \\frac{-1-\\sqrt{4625}}{68}\\approx-1.0148\\), which is outside the\n  interval \\([-1,1]\\); the positive root is still admissible.\n  Hence we have \\(2\\cdot8+1=17\\) valid roots from the \\((B)\\) equations.\n\nConsequently there are \\(18+17=35\\) intersection points.\n\n--------------------------------------------------------------------\n### 5.  Summing the \\(y\\)-coordinates  \n\nFrom Vi\u00e8te\u2019s formulas\n\n\\[\n\\text{sum of the two roots of }(A)_{k}= \\frac{1}{34},\\qquad\n\\text{sum of the two roots of }(B)_{k}= -\\frac{1}{34}.\n\\]\n\nTherefore\n\n\\[\n\\sum_{k=0}^{8}\\bigl(\\text{both roots of }(A)_{k}\\bigr)=9\\cdot\\frac1{34}=\\frac{9}{34},\n\\]\n\\[\n\\sum_{k=0}^{8}\\bigl(\\text{both roots of }(B)_{k}\\bigr)=-\\frac{9}{34}.\n\\]\n\nIn \\((B)_{8}\\) we must discard the negative root\n\\(\\displaystyle y_{8}^{-}=\\frac{-1-\\sqrt{4625}}{68}\\).\nHence the sum of the **valid** \\((B)\\)\u2011roots is\n\n\\[\n-\\frac{9}{34}-y_{8}^{-}.\n\\]\n\nAdding the contributions of \\((A)\\) and \\((B)\\),\n\n\\[\n\\begin{aligned}\n\\sum y\n&= \\frac{9}{34}+\\Bigl(-\\frac{9}{34}-y_{8}^{-}\\Bigr)\n   =-y_{8}^{-}\n   =\\frac{1+\\sqrt{4625}}{68}.\n\\end{aligned}\n\\]\n\nSince \\(\\sqrt{4625}=5\\sqrt{185}\\),\n\n\\[\n\\sum y=\\frac{1+5\\sqrt{185}}{68}.\n\\]\n\n--------------------------------------------------------------------\n### 6.  Final answer\n\nThe required representation is \\(\\displaystyle\\frac{a+b\\sqrt{c}}{d}\\) with  \n\n\\[\na=1,\\; b=5,\\; c=185,\\; d=68,\n\\]\n\nand \\(\\gcd(a,b,d)=1\\), \\(c\\) square\u2011free.\n\n\\[\na+b+c+d = 1+5+185+68 = 259.\n\\]\n\n\\[\n\\boxed{259}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 259

    \n

    Extracted Answer: 259

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nd=n+2 \\qquad (d\\ge 3,\\; n>0)\n\\]\n\nThe condition is  \n\n\\[\nd \\mid 3(n+3)(n^2+9).\n\\]\n\nSince \\(n\\equiv -2 \\pmod d\\),\n\n\\[\nn+3\\equiv (-2)+3 \\equiv 1 \\pmod d,\\qquad \nn^2+9\\equiv (-2)^2+9 \\equiv 4+9\\equiv 13 \\pmod d.\n\\]\n\nHence\n\n\\[\n3(n+3)(n^2+9)\\equiv 3\\cdot1\\cdot13=39 \\pmod d .\n\\]\n\nThus \\(d\\) must divide 39:\n\n\\[\nd\\mid 39 .\n\\]\n\nThe positive divisors of \\(39\\) are \\(1,3,13,39\\).  \nBecause \\(d=n+2\\ge 3\\), we have  \n\n\\[\nd\\in\\{3,13,39\\}.\n\\]\n\nCorresponding \\(n\\) values are  \n\n\\[\nn=d-2\\in\\{1,11,37\\}.\n\\]\n\nAll three satisfy the original divisibility, so the required sum is  \n\n\\[\n1+11+37=49.\n\\]\n\n\\[\n\\boxed{49}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 49

    \n

    Extracted Answer: 49

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe product $ \\prod_{k=4}^{63} \\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})} = \\frac{\\log_4(5^{15})}{\\log_5(5^{12})} \\cdot \\frac{\\log_5(5^{24})}{\\log_6(5^{21})} \\cdot \\frac{\\log_6(5^{35})}{\\log_7(5^{32})} \\cdots \\frac{\\log_{63}(5^{3968})}{\\log_{64}(5^{3965})} $ is equal to $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nP=\\prod_{k=4}^{63}\\frac{\\log_k(5^{k^{2}-1})}{\\log_{k+1}(5^{k^{2}-4})}\n\\]\n\n---\n\n### 1.  Rewrite each factor\n\n\\[\n\\log_k(5^{p})=\\frac{\\log_{5}(5^{p})}{\\log_{5}k}= \\frac{p}{\\log_{5}k}.\n\\]\n\nHence\n\n\\[\n\\frac{\\log_k(5^{k^{2}-1})}{\\log_{k+1}(5^{k^{2}-4})}\n   =\\frac{\\dfrac{k^{2}-1}{\\log_{5}k}}{\\dfrac{k^{2}-4}{\\log_{5}(k+1)}}\n   =\\frac{k^{2}-1}{k^{2}-4}\\cdot\\frac{\\log_{5}(k+1)}{\\log_{5}k}.\n\\]\n\nFactor the rational part:\n\n\\[\n\\frac{k^{2}-1}{k^{2}-4}= \\frac{(k-1)(k+1)}{(k-2)(k+2)} .\n\\]\n\nThus\n\n\\[\nP=\\prod_{k=4}^{63}\n   \\left[\\frac{(k-1)(k+1)}{(k-2)(k+2)}\n         \\cdot\\frac{\\log_{5}(k+1)}{\\log_{5}k}\\right].\n\\]\n\n---\n\n### 2.  Telescope the rational part  \n\nSeparate the product:\n\n\\[\n\\prod_{k=4}^{63}\\frac{k-1}{k-2}\\; \\times\\;\n\\prod_{k=4}^{63}\\frac{k+1}{k+2}.\n\\]\n\n\\[\n\\begin{aligned}\n\\prod_{k=4}^{63}\\frac{k-1}{k-2}\n   &=\\frac{3}{2}\\cdot\\frac{4}{3}\\cdot\\frac{5}{4}\\cdots\\frac{62}{61}\n    =\\frac{62}{2}=31,\\\\[4pt]\n\\prod_{k=4}^{63}\\frac{k+1}{k+2}\n   &=\\frac{5}{6}\\cdot\\frac{6}{7}\\cdot\\frac{7}{8}\\cdots\\frac{64}{65}\n    =\\frac{5}{65}=\\frac{1}{13}.\n\\end{aligned}\n\\]\n\nHence the rational part equals  \n\n\\[\n\\frac{31}{13}.\n\\]\n\n---\n\n### 3.  Telescope the logarithmic part  \n\n\\[\n\\prod_{k=4}^{63}\\frac{\\log_{5}(k+1)}{\\log_{5}k}\n   =\\frac{\\log_{5}5}{\\log_{5}4}\\cdot\\frac{\\log_{5}6}{\\log_{5}5}\n    \\cdots\\frac{\\log_{5}64}{\\log_{5}63}\n   =\\frac{\\log_{5}64}{\\log_{5}4}\n   =\\log_{4}64.\n\\]\n\nSince \\(64=4^{3}\\), \\(\\log_{4}64=3\\).\n\nThus the logarithmic part contributes a factor of \\(3\\).\n\n---\n\n### 4.  Combine\n\n\\[\nP=\\frac{31}{13}\\times 3=\\frac{93}{13}.\n\\]\n\nThe fraction \\(\\frac{93}{13}\\) is already in lowest terms, so  \n\n\\[\nm=93,\\qquad n=13.\n\\]\n\nFinally,\n\n\\[\nm+n=93+13=106.\n\\]\n\n\\[\n\\boxed{106}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 106

    \n

    Extracted Answer: 106

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Sketch**\n\nLet  \n\n\\[\na=3^{\\alpha }u ,\\qquad b=3^{\\beta }v ,\\qquad c=3^{\\gamma }w ,\n\\qquad(\\alpha ,\\beta ,\\gamma \\ge 0,\\;3\\nmid u,v,w)\n\\]\n\nand put \\(\\kappa =\\min (\\alpha ,\\beta ,\\gamma )\\).\nWriting \\(a^{3}=3^{3\\alpha }u^{3}\\) etc.,  \n\n\\[\na^{3}+b^{3}+c^{3}\\equiv 0\\pmod{3^{7}}\n\\Longleftrightarrow\nu^{3}3^{3(\\alpha-\\kappa)}+v^{3}3^{3(\\beta-\\kappa)}+w^{3}3^{3(\\gamma-\\kappa)}\n\\equiv0\\pmod{3^{7-3\\kappa}} .\n\\tag{1}\n\\]\n\nThus we have three essentially different cases:\n\n* \\(\\kappa\\ge 3\\) : every term in (1) is divisible by \\(3^{9}\\), hence the\n  congruence is always true.\n\n* \\(\\kappa =2\\) : all three numbers are divisible by \\(9\\) and at least one\n  is not divisible by \\(27\\).  \n  Put \\(a=9A,\\;b=9B,\\;c=9C\\;(1\\le A,B,C\\le81)\\).   \n  Then (1) reduces to  \n\n  \\[\n  A+B+C\\equiv0\\pmod3 .\n  \\]\n\n  The numbers \\(A,B,C\\) are taken from the set \\(\\{1,\\dots ,81\\}\\); each\n  residue class \\(\\pmod3\\) occurs exactly \\(27\\) times.  \n  Hence the number of ordered triples with \\(\\kappa =2\\) is  \n\n  \\[\n  9\\cdot 27^{3}=157\\,464 .\n  \\tag{2}\n  \\]\n\n* \\(\\kappa =1\\) : all three numbers are divisible by \\(3\\) and at least one\n  is not divisible by \\(9\\).  Write \\(a=3A,\\;b=3B,\\;c=3C\\;(1\\le A,B,C\\le243)\\).  \n  Then (1) becomes  \n\n  \\[\n  A^{3}+B^{3}+C^{3}\\equiv0\\pmod{3^{4}} .\n  \\tag{3}\n  \\]\n\n  The cubes \\(\\pmod {81}\\) of the integers \\(1\\le x\\le243\\) are distributed as  \n\n  \\[\n  \\begin{array}{c|c}\n  \\text{value}&\\text{how many $x$ give it}\\\\ \\hline\n  0 & 27\\\\\n  27,\\,54 & 27\\text{ each}\\\\\n  \\text{18 other residues} & 9\\text{ each}\n  \\end{array}\n  \\]\n\n  Using this distribution one counts (by a short elementary\n  combinatorial argument) the number of ordered triples satisfying (3) to be  \n\n  \\[\n  452\\,709 .\n  \\tag{4}\n  \\]\n\n  The triples counted in (4) include those where all three numbers are\n  divisible by \\(9\\); those are exactly the triples of the previous case,\n  i.e. the $157\\,464$ triples of (2).  Hence the triples with\n  \\(\\kappa =1\\) contribute  \n\n  \\[\n  452\\,709-157\\,464 = 295\\,245 .\n  \\tag{5}\n  \\]\n\n* \\(\\kappa =0\\) : at least one of the numbers is not divisible by \\(3\\).\n  The total number of ordered triples with $1\\le a,b,c\\le3^{6}=729$ is\n  $729^{3}=387\\,420\\,489$.\n  Subtracting the contributions of the three previous cases gives\n\n  \\[\n  387\\,420\\,489-19\\,683-157\\,464-295\\,245 = 702\\,027 .\n  \\tag{6}\n  \\]\n\nFinally we take the answer modulo $1000$ :\n\n\\[\n702\\,027\\equiv\\boxed{27}\\pmod{1000}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 735

    \n

    Extracted Answer: 27

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n* \\(O\\) be the center of \\(\\omega _2\\) (radius \\(15\\)),  \n* \\(A\\) be the center of \\(\\omega _1\\) (radius \\(6\\)),  \n* \\(B\\) the internal point of tangency of the two circles.\n\n---\n\n### 1.  Coordinates\n\nPlace \\(O\\) at the origin and the line \\(BC\\) on the \\(x\\)-axis.\n\n\\[\nB=(15,0),\\qquad O=(0,0),\\qquad A=(9,0)\n\\]\n\nBecause \\(BC\\) is a diameter of \\(\\omega _2\\),\n\n\\[\nC=(-15,0).\n\\]\n\n\\(AD\\perp BC\\) makes \\(AD\\) vertical, so \\(D\\) lies on the line \\(x=9\\) and on \\(\\omega_2\\):\n\n\\[\n9^{2}+y^{2}=15^{2}\\Longrightarrow y^{2}=144\\Longrightarrow y=\\pm12 .\n\\]\n\nSince later we need \\(D\\) to be nearer to the lower side of the rectangle, we take  \n\n\\[\nD=(9,-12).\n\\]\n\n---\n\n### 2.  Rectangle \\(EFGH\\) inside \\(\\omega _1\\)\n\nThe rectangle is axis\u2011aligned because \\(EF\\perp BC\\) (so \\(EF\\) is vertical) and a rectangle has right angles.\n\nLet the half\u2011width be \\(a\\) and the half\u2011height be \\(y\\) :\n\n\\[\n\\begin{aligned}\nE&\\;(9+a,\\;y),&F&\\;(9+a,\\;-y),\\\\\nG&\\;(9-a,\\;-y),&H&\\;(9-a,\\;y).\n\\end{aligned}\n\\]\n\nAll four vertices lie on \\(\\omega _1\\), whose equation is  \n\n\\[\n(x-9)^2+y^2=6^{2}=36 .\n\\]\n\nHence  \n\n\\[\na^{2}+y^{2}=36\\quad\\Longrightarrow\\quad y=\\sqrt{36-a^{2}}\\;(>0).\n\\]\n\nThe rectangle\u2019s area is  \n\n\\[\n[EFGH]= (2a)(2y)=4ay .\n\\tag{1}\n\\]\n\n---\n\n### 3.  Areas of \\(\\triangle DGF\\) and \\(\\triangle CHG\\)\n\n\\[\n\\begin{aligned}\n\\triangle DGF &: \\text{base }GF=2a,\\; \n\\text{height }=12-y,\\\\\n[ DGF]&=\\tfrac12\\,(2a)(12-y)=a(12-y). \\tag{2}\n\\end{aligned}\n\\]\n\n\\[\n\\begin{aligned}\n\\triangle CHG &: \\text{base }HG=2y,\\;\n\\text{horizontal distance from }C\\text{ to line }x=9-a\\text{ is }24-a,\\\\\n[CHG]&=\\tfrac12\\,(2y)(24-a)=y(24-a). \\tag{3}\n\\end{aligned}\n\\]\n\nGiven \\([DGF]=[CHG]\\),\n\n\\[\na(12-y)=y(24-a).\n\\]\n\nExpanding and canceling the common term \\(-ay\\) gives\n\n\\[\n12a=24y\\quad\\Longrightarrow\\quad a=2y. \\tag{4}\n\\]\n\n---\n\n### 4.  Solving for \\(a\\) and \\(y\\)\n\nFrom (4) and the circle condition \\(a^{2}+y^{2}=36\\),\n\n\\[\n(2y)^{2}+y^{2}=36\\Longrightarrow 5y^{2}=36\n\\Longrightarrow y^{2}=\\frac{36}{5}\n\\Longrightarrow y=\\frac{6}{\\sqrt5}=\\frac{6\\sqrt5}{5}.\n\\]\n\nThus  \n\n\\[\na=2y= \\frac{12}{\\sqrt5}= \\frac{12\\sqrt5}{5}.\n\\]\n\nBoth satisfy \\(a\\le6,\\;y\\le6\\), so the rectangle indeed fits in \\(\\omega _1\\).\n\n---\n\n### 5.  Area of the rectangle\n\nInsert \\(a=2y\\) into (1):\n\n\\[\n[EFGH]=4a y =4(2y)\\,y = 8y^{2}=8\\left(\\frac{36}{5}\\right)=\\frac{288}{5}.\n\\]\n\nHence the rectangle\u2019s area is \\(\\displaystyle \\frac{288}{5}\\).\n\nThe fraction is already in lowest terms, so  \n\n\\[\nm=288,\\qquad n=5,\\qquad m+n=288+5=293.\n\\]\n\n\\[\n\\boxed{293}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 293

    \n

    Extracted Answer: 293

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the 9 vertices of the \\(2\\times2\\) grid be the points \\((i,j)\\) with \\(i,j=0,1,2\\).\nThe 12 unit edges are  \n\n* 8 **boundary** edges (two on each side of the large square);\n* 4 **interior** edges, which are shared by two unit squares.\n\nDenote the four interior edges by  \n\n\\[\na=v_{10},\\qquad b=v_{11},\\qquad c=h_{01},\\qquad d=h_{11},\n\\]\n\nwhere each variable is \\(1\\) if the edge is coloured red and \\(0\\) if it is blue.\n\n---\n\n### 1.  How the interior edges affect a square  \n\nEach small square has two interior edges and two boundary edges.\n\n\\[\n\\begin{array}{c|c}\n\\text{square}&\\text{interior edges}\\\\\\hline\n\\text{BL}& a,\\;c\\\\\n\\text{BR}& b,\\;c\\\\\n\\text{TL}& a,\\;d\\\\\n\\text{TR}& b,\\;d\n\\end{array}\n\\]\n\nLet \\(r\\) be the number of red interior edges of a given square.\nSince the square must have exactly two red sides, it needs  \n\\(2-r\\) red boundary edges.\n\nFor a square:\n\n* if \\(r=0\\) or \\(r=2\\) the two boundary edges are forced (both red or both blue) \u2013 **1** way;\n* if \\(r=1\\) exactly one of the two boundary edges must be red \u2013 **2** ways.\n\nThus a given interior\u2011edge configuration contributes a factor  \n\n\\[\n2^{\\#\\{\\text{squares with }r=1\\}} .\n\\]\n\nDenote by  \n\n\\[\nN(a,b,c,d)=\\mathbf 1_{a\\neq c}+\\mathbf 1_{a\\neq d}+\\mathbf 1_{b\\neq c}+\\mathbf 1_{b\\neq d},\n\\]\n\nthe number of squares for which exactly one of the two interior edges is red.\nThen the total number of colourings is\n\n\\[\n\\sum_{a,b,c,d\\in\\{0,1\\}} 2^{\\,N(a,b,c,d)} .\n\\]\n\n---\n\n### 2.  Evaluating the sum  \n\nThe value of \\(N\\) depends only on how the pairs \\((a,b)\\) and \\((c,d)\\) compare.\n\n* **Case 1:** \\((a,b)=(c,d)\\).  \n  Then \\(N=0\\). This occurs for \\((0,0,0,0)\\) and \\((1,1,1,1)\\) \u2013 2 assignments.\n  Contribution: \\(2\\cdot 2^{0}=2\\).\n\n* **Case 2:** \\((a,b)=(c,d)\\) with opposite colour, i.e. \\(a=b\\neq c=d\\).  \n  Then each of the four comparisons differs, so \\(N=4\\).  \n  This happens for \\((0,0,1,1)\\) and \\((1,1,0,0)\\) \u2013 2 assignments.\n  Contribution: \\(2\\cdot 2^{4}=2\\cdot16=32\\).\n\n* **Case 3:** All other assignments.  \n  There are \\(16-4=12\\) such configurations and one checks that each yields \\(N=2\\).  \n  Contribution: \\(12\\cdot 2^{2}=12\\cdot4=48\\).\n\nAdding the three cases,\n\n\\[\n2+32+48=82 .\n\\]\n\n---\n\n\\[\n\\boxed{82}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 82

    \n

    Extracted Answer: 82

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The divisors of  \n\n\\[\n2025 = 3^{4}\\cdot 5^{2}\n\\]\n\nare of the form \\(3^{a}5^{b}\\) with  \n\n\\[\n0\\le a\\le 4 ,\\qquad 0\\le b\\le 2 .\n\\]\n\nHence  \n\n\\[\n|A|=(4+1)(2+1)=15,\\qquad\\text{so there are }2^{15}=32768\\text{ subsets of }A.\n\\]\n\nFor a subset \\(B\\subseteq A\\) the least common multiple is  \n\n\\[\n\\operatorname{lcm}(B)=3^{\\max a}\\,5^{\\max b},\n\\]\n\nwhere \\(\\max a\\) (resp. \\(\\max b\\)) is the largest exponent of \\(3\\) (resp. \\(5\\)) among the elements of \\(B\\).\n\nThus \\(\\operatorname{lcm}(B)=2025\\) iff  \n\n* some element of \\(B\\) has \\(a=4\\) (i.e. belongs to the set \\(R\\) of divisors with a factor \\(3^{4}\\));\n* some element of \\(B\\) has \\(b=2\\) (i.e. belongs to the set \\(C\\) of divisors with a factor \\(5^{2}\\)).\n\nThe set \\(R\\) consists of the three divisors \\(3^{4}5^{0}, 3^{4}5^{1}, 3^{4}5^{2}\\);\nthe set \\(C\\) consists of the five divisors \\(3^{0}5^{2}, 3^{1}5^{2}, 3^{2}5^{2}, 3^{3}5^{2}, 3^{4}5^{2}\\).\nTheir intersection is \\(\\{2025\\}\\).  \n\nWe need the number of subsets of \\(A\\) that contain **at least one** element of \\(R\\) and **at least one** element of \\(C\\).\n\nUsing inclusion\u2013exclusion on the whole set of subsets:\n\n\\[\n\\begin{aligned}\nN &= 2^{15}\n      -\\underbrace{2^{15-|R|}}_{\\text{subsets with no }R}\n      -\\underbrace{2^{15-|C|}}_{\\text{subsets with no }C}\n      +\\underbrace{2^{15-|R\\cup C|}}_{\\text{subsets with neither}}  \\\\\n  &= 2^{15} -2^{12} -2^{10} + 2^{8} \\\\\n  &= 32768 - 4096 - 1024 + 256 = 27904 .\n\\end{aligned}\n\\]\n\nAll these subsets are non\u2011empty (they contain at least one element from \\(R\\) and one from \\(C\\)).  \n\nHence  \n\n\\[\n\\Pr(\\text{nonempty }B\\text{ with }\\operatorname{lcm}=2025)\n   = \\frac{27904}{2^{15}}\n   = \\frac{27904}{32768}\n   = \\frac{109}{128}\\;.\n\\]\n\nSo \\(m=109\\) and \\(n=128\\); therefore  \n\n\\[\nm+n = 109+128 = 237 .\n\\]\n\n\\[\n\\boxed{237}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 237

    \n

    Extracted Answer: 237

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For \\( \\triangle ABC\\) let  \n\n\\[\n\\angle A=84^{\\circ},\\qquad \\angle B=60^{\\circ},\\qquad \\angle C=36^{\\circ}.\n\\]\n\n---\n\n### 1.  Identify the points on the nine\u2011point circle  \n\n\\(D,E,F\\) are the midpoints of \\(BC,CA,AB\\); hence the circumcircle of \\(\\triangle DEF\\) is the nine\u2011point circle of \\(\\triangle ABC\\).\n\nThe nine\u2011point circle also passes through the feet of the three altitudes.\nThus  \n\n* \\(G\\) is the foot of the altitude from \\(A\\) onto \\(BC\\);  \n* \\(H\\) is the foot of the altitude from \\(B\\) onto \\(CA\\);  \n* \\(J\\) is the foot of the altitude from \\(C\\) onto \\(AB\\).\n\nSo the six points on the nine\u2011point circle are, in order,\n\\(G,\\;D,\\;E,\\;H,\\;J,\\;F\\).\n\n---\n\n### 2.  Arc \\(\\widehat{DE}\\)\n\nIn \\(\\triangle DEF\\) we have the well\u2011known midpoint\u2013parallel relations  \n\n\\[\nDF\\parallel AC,\\qquad EF\\parallel BC .\n\\]\n\nHence at \\(F\\)\n\n\\[\n\\angle DFE=\\angle(DF,EF)=\\angle(AC,BC)=\\angle C=36^{\\circ}.\n\\]\n\nFor a chord, the intercepted minor arc equals twice the inscribed angle, so  \n\n\\[\n\\widehat{DE}=2\\angle DFE=2\\cdot36^{\\circ}=72^{\\circ}.\n\\]\n\n---\n\n### 3.  Arc \\(\\widehat{FG}\\)\n\n\\(DG\\) lies on side \\(BC\\); thus \\(DG\\parallel BC\\).\nSince \\(DF\\parallel AC\\),\n\n\\[\n\\angle FDG=\\angle(DF,DG)=\\angle(AC,BC)=\\angle C=36^{\\circ}.\n\\]\n\nTherefore  \n\n\\[\n\\widehat{FG}=2\\angle FDG=2\\cdot36^{\\circ}=72^{\\circ}.\n\\]\n\n---\n\n### 4.  Arc \\(\\widehat{HJ}\\)\n\n\\(G,\\;H,\\;J\\) are the vertices of the orthic triangle.\nFor an acute triangle, the orthic triangle angles satisfy  \n\n\\[\n\\angle H G J =180^{\\circ}-2\\angle A .\n\\]\n\nHere \\(\\angle A=84^{\\circ}\\), so  \n\n\\[\n\\angle H G J =180^{\\circ}-2\\cdot84^{\\circ}=12^{\\circ}.\n\\]\n\nThe inscribed angle \\(\\angle H G J\\) intercepts the minor arc \\(\\widehat{HJ}\\); consequently  \n\n\\[\n\\widehat{HJ}=2\\angle H G J =2\\cdot12^{\\circ}=24^{\\circ}.\n\\]\n\n---\n\n### 5.  Compute the required combination  \n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n&=72^{\\circ}+2\\cdot24^{\\circ}+3\\cdot72^{\\circ} \\\\\n&=72^{\\circ}+48^{\\circ}+216^{\\circ} \\\\\n&=336^{\\circ}.\n\\end{aligned}\n\\]\n\n---\n\n\\[\n\\boxed{336}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 336

    \n

    Extracted Answer: 336

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFrom an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.\n\nIn general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\ng(N)=\\Big\\lfloor\\frac{N}{25}\\Big\\rfloor+\n\\Big\\lfloor\\frac{N\\bmod 25}{10}\\Big\\rfloor+(N\\bmod 25)\\bmod10\n\\]\n\nbe the number of coins the greedy algorithm uses for \\(N\\) cents.\nFor an optimal solution we may use fewer quarters.  \nWrite  \n\n\\[\nN=25q+a,\\qquad 0\\le a<25 .\n\\]\n\nIf we replace \\(k\\;(1\\le k\\le q)\\) quarters by dimes and pennies, the new\ntotal number of coins is  \n\n\\[\nc_k=(q-k)+\\Big\\lfloor\\frac{a+25k}{10}\\Big\\rfloor+(a+25k)\\bmod10 .\n\\]\n\nUsing \\(a+25k=10(2k)+ (a+5k)\\),\n\n\\[\nc_k=q+a+24k-9\\Big\\lfloor\\frac{a+5k}{10}\\Big\\rfloor .\n\\]\n\nThe greedy number is  \n\n\\[\ng(N)=q+a-9\\Big\\lfloor\\frac a{10}\\Big\\rfloor .\n\\]\n\nHence  \n\n\\[\nc_k-g(N)=24k-9\\Big(\\Big\\lfloor\\frac{a+5k}{10}\\Big\\rfloor-\n\\Big\\lfloor\\frac a{10}\\Big\\rfloor\\Big)\n        =24k-9\\,\\Big\\lfloor\\frac{5k+r}{10}\\Big\\rfloor ,\n\\]\nwhere \\(r=a\\bmod10\\) (so \\(0\\le r\\le 9\\)).\n\nThe greedy algorithm fails iff there exists a \\(k\\ge1\\) with \\(c_k<g(N)\\),\ni.e.\n\n\\[\n24k<9\\Big\\lfloor\\frac{5k+r}{10}\\Big\\rfloor\n\\iff \n\\Big\\lfloor\\frac{5k+r}{10}\\Big\\rfloor>\\frac{2k}{3}.\n\\]\n\nFor \\(k\\ge2\\) the left\u2011hand side grows like \\(0.5k\\) while the right\nhand side grows like \\(0.666\\!k\\); the inequality never holds.\nFor \\(k=1\\) the condition becomes  \n\n\\[\n\\Big\\lfloor\\frac{5+r}{10}\\Big\\rfloor\\ge1\\iff r\\ge5 .\n\\]\n\nThus **greedy fails exactly when**  \n\n* \\(N\\ge25\\) (so at least one quarter is used), and  \n* \\(a\\bmod10\\ge5\\), i.e. the remainder \\(a=N\\bmod25\\) lies in  \n\n\\[\n\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\]\n\n---\n\n### Counting the failures\n\nFor each of the 10 bad remainders \\(a\\) the numbers\n\\(N=a+25k\\) with \\(k\\ge1\\) and \\(N\\le1000\\) are failures.\nSince \\(1000- a<1000\\) we have  \n\n\\[\n\\Big\\lfloor\\frac{1000-a}{25}\\Big\\rfloor = 39\\quad (a\\ge1).\n\\]\n\nHence each bad remainder contributes 39 failing values, giving  \n\n\\[\n10\\times39 = 390\n\\]\n\nfailing numbers.\n\n---\n\n### Total successes\n\nThere are \\(1000\\) integers from 1 to 1000, therefore\n\n\\[\n\\text{successful }N = 1000-390 = 610 .\n\\]\n\n\\[\n\\boxed{610}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 610

    \n

    Extracted Answer: 610

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the vertices of the regular \\(24\\)-gon be numbered \\(0,1,\\dots ,23\\) clockwise.  \nIf a segment joins vertex \\(i\\) with vertex \\(j\\) then the (shorter) distance\n\\(\\min\\{\\,|i-j|,24-|i-j|\\,\\}\\) is a number \\(k\\) with  \n\n\\[\n1\\le k\\le 12 .\n\\]\n\nAll 12 segments must have the same length, so they must all have the same\nstep\u2011size \\(k\\).  \nFor a fixed \\(k\\) consider the graph \\(G_k\\) whose edges are exactly the\n\\(24\\) chords \\(\\{i,i+k\\}\\;(i=0,\\dots ,23)\\) (the pair \\(\\{i,i+k\\}\\) is the same\nas \\(\\{i+k,i\\}\\)).  \n\n--------------------------------------------------------------------\n### 1.  Structure of \\(G_k\\)\n\nLet  \n\n\\[\nd=\\gcd(24,k),\\qquad L=\\frac{24}{d}.\n\\]\n\nStarting from a vertex \\(i\\) and repeatedly adding \\(k\\) modulo \\(24\\) we obtain\nthe cycle  \n\n\\[\ni,\\; i+k,\\; i+2k,\\dots ,i+(L-1)k .\n\\]\n\nThus \\(G_k\\) splits into \\(d\\) disjoint cycles, each of length \\(L\\).\n\n- If \\(k\\neq 12\\) then \\(i+k\\neq i-k\\) and each vertex has degree \\(2\\); the\ncomponents are simple cycles.\n- For \\(k=12\\) each vertex is paired only with its opposite vertex, so the\ncomponents are single edges (a perfect matching already).\n\n--------------------------------------------------------------------\n### 2.  When does a perfect matching exist?\n\nA perfect matching on a cycle exists only when the cycle length is even.\nHence we need \\(L\\) even, i.e.  \n\n\\[\n\\frac{24}{d}\\text{ is even}\\iff d\\mid 12 .\n\\]\n\nTherefore a perfect matching is possible for all \\(k\\) whose\n\\(\\gcd(24,k)\\) belongs to \\(\\{1,2,3,4,6,12\\}\\).  \nThe only value of \\(k\\) with \\(\\gcd(24,k)=8\\) is \\(k=8\\); for this step size\n\\(L=3\\) (odd) and no perfect matching exists.\n\n--------------------------------------------------------------------\n### 3.  Number of perfect matchings for a given \\(k\\)\n\n- **Case \\(k\\neq 12\\).**  \n  The graph consists of \\(d\\) even cycles of length \\(L\\).  \n  Each even cycle has exactly two perfect matchings (choose the \u201codd\u201d or the\n  \u201ceven\u201d edges).  \n  Hence the number of perfect matchings using step size \\(k\\) is  \n\n  \\[\n  N(k)=2^{d}=2^{\\gcd(24,k)} .\n  \\]\n\n- **Case \\(k=12\\).**  \n  The edges are the 12 diameters \\(\\{i,i+12\\}\\).  \n  This already is a unique perfect matching, so \\(N(12)=1\\).\n\n--------------------------------------------------------------------\n### 4.  Summation over all possible step sizes\n\nThe admissible step sizes are  \n\n\\[\nk=1,2,3,4,5,6,7,9,10,11,12  \\qquad(k=8\\text{ is excluded}).\n\\]\n\nTheir contributions are:\n\n\\[\n\\begin{array}{c|c|c}\nk & \\gcd(24,k) & N(k)\\\\ \\hline\n1 & 1 & 2\\\\\n2 & 2 & 4\\\\\n3 & 3 & 8\\\\\n4 & 4 & 16\\\\\n5 & 1 & 2\\\\\n6 & 6 & 64\\\\\n7 & 1 & 2\\\\\n9 & 3 & 8\\\\\n10& 2 & 4\\\\\n11& 1 & 2\\\\\n12&12 & 1\n\\end{array}\n\\]\n\nAdding them:\n\n\\[\n2+4+8+16+2+64+2+8+4+2+1 = 113 .\n\\]\n\n--------------------------------------------------------------------\n### 5.  Answer\n\nThus there are  \n\n\\[\n\\boxed{113}\n\\]\n\ndifferent ways to draw 12 equal\u2011length segments so that each of the 24\nvertices is an endpoint of exactly one segment.
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 113

    \n

    Extracted Answer: 113

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nr_i=A_1A_i\\qquad(2\\le i\\le 11),\\qquad \n\\theta=\\angle A_iA_1A_{i+1}\\;(2\\le i\\le 10).\n\\]\n\n---\n\n### 1.  Data from the triangles  \n\n\\[\n\\cos\\theta=\\frac{12}{13},\\qquad \n\\sin\\theta=\\sqrt{1-\\left(\\frac{12}{13}\\right)^2}= \\frac{5}{13}.\n\\]\n\nThe area of \\(\\triangle A_iA_1A_{i+1}\\) is  \n\n\\[\n\\frac12 r_i r_{i+1}\\sin\\theta =1\n\\Longrightarrow r_i r_{i+1}= \\frac{2}{\\sin\\theta}\n               = \\frac{2}{5/13}= \\frac{26}{5}\\; .\n\\tag{1}\n\\]\n\nHence for all \\(i=2,\\dots ,10\\)\n\n\\[\nr_i r_{i+1}=K,\\qquad K:=\\frac{26}{5}.   \\tag{2}\n\\]\n\nFrom (2) we obtain the recurrence  \n\n\\[\nr_{i+1}= \\frac K{r_i},\\qquad\\text{so } r_{i+2}=r_i .\n\\]\n\nThus the distances from \\(A_1\\) alternate:\n\n\\[\nr_2=r_4=r_6=r_8=r_{10}=x,\\qquad \nr_3=r_5=r_7=r_9=r_{11}=y,\n\\]\nwhere  \n\n\\[\nxy=K=\\frac{26}{5}.  \\tag{3}\n\\]\n\n---\n\n### 2.  Length of the other edges  \n\nFor any \\(i=2,\\dots ,10\\) the edge \\(A_iA_{i+1}\\) has length (law of cosines)\n\n\\[\n\\begin{aligned}\nd &:=A_iA_{i+1}= \n\\sqrt{r_i^{\\,2}+r_{i+1}^{\\,2}-2r_i r_{i+1}\\cos\\theta}  \\\\\n   &=\\sqrt{x^{2}+y^{2}-2xy\\frac{12}{13}}\n   =\\sqrt{x^{2}+y^{2}-\\frac{24}{13}K}.\n\\end{aligned}\n\\tag{4}\n\\]\n\nAll nine edges \\(A_iA_{i+1}\\;(i=2\\ldots10)\\) have the same length \\(d\\).\n\n---\n\n### 3.  Perimeter condition  \n\nThe perimeter of the 11\u2011gon is  \n\n\\[\nx+y+9d=20.   \\tag{5}\n\\]\n\nIntroduce  \n\n\\[\nt:=x+y\\quad\\text{(the quantity we need)},\n\\qquad xy=K .\n\\]\n\nFrom \\(x^{2}+y^{2}=t^{2}-2K\\) and (4),\n\n\\[\nd^{2}=t^{2}-2K-\\frac{24}{13}K\n     =t^{2}-\\frac{50}{13}K .\n\\]\n\nSince \\(\\displaystyle \\frac{50}{13}K\n      =\\frac{50}{13}\\cdot\\frac{26}{5}=20\\),\n\n\\[\nd^{2}=t^{2}-20\\qquad\\Longrightarrow\\qquad d=\\sqrt{t^{2}-20}. \\tag{6}\n\\]\n\nInsert (6) into (5):\n\n\\[\nt+9\\sqrt{t^{2}-20}=20. \\tag{7}\n\\]\n\n---\n\n### 4.  Solving for \\(t\\)\n\nFrom (7),\n\n\\[\n\\sqrt{t^{2}-20}= \\frac{20-t}{9}\\quad (20-t\\ge 0).\n\\]\n\nSquaring gives  \n\n\\[\nt^{2}-20=\\frac{(20-t)^{2}}{81}\n\\Longrightarrow 80t^{2}+40t-2020=0.\n\\]\n\nDividing by\u202f20,\n\n\\[\n4t^{2}+2t-101=0.\n\\]\n\nHence  \n\n\\[\nt=\\frac{-2\\pm\\sqrt{4+1616}}{8}\n   =\\frac{-2\\pm18\\sqrt5}{8}.\n\\]\n\nOnly the positive root is admissible:\n\n\\[\nt=\\frac{18\\sqrt5-2}{8}\n  =\\frac{9\\sqrt5-1}{4}.\n\\]\n\nThus  \n\n\\[\nA_1A_2+A_1A_{11}=t=\\frac{9\\sqrt5-1}{4}\n     =\\frac{m\\sqrt n-p}{q},\n\\]\n\nwith \\(m=9,\\;n=5,\\;p=1,\\;q=4\\).\n\n---\n\n### 5.  Required sum  \n\n\\[\nm+n+p+q=9+5+1+4=19.\n\\]\n\n\\[\n\\boxed{19}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 19

    \n

    Extracted Answer: 19

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **1.  Regions produced by line\u2011segments**\n\nIf a set of line segments inside a disc has no three of them meeting at the same interior point, then  \n\n\\[\n\\text{#regions}=1+\\;(\\text{#segments})+\\;(\\text{# interior intersection points}).\n\\]\n\nHence for our problem  \n\n\\[\nR=1+27+I ,\n\\]\n\nwhere \\(I\\) is the (random) number of interior intersection points.  \nWe must compute the expected value \\(E[I]\\).\n\n--------------------------------------------------------------------\n\n**2.  The three kinds of interior intersections**\n\n* the two diameters intersect once (deterministically);\n* a random chord can intersect each of the two diameters;\n* two random chords can intersect one another.\n\nSo  \n\n\\[\nE[I]=1+E[\\text{chord\u2013diameter intersections}]\n      +E[\\text{chord\u2013chord intersections}].\n\\]\n\n--------------------------------------------------------------------\n\n**3.  Probability that a random chord meets a given diameter**\n\nThe two endpoints of a chord are chosen uniformly on the circle but must lie in *different* quadrants.\nThere are \\(\\binom{4}{2}=6\\) unordered pairs of quadrants, all equally likely.\n\nA chord meets the horizontal diameter iff its endpoints lie in opposite\nhalf\u2011planes (one in the upper half, one in the lower half).  \nAmong the six unordered pairs, the four pairs  \n\\(\\{Q_1,Q_3\\},\\{Q_1,Q_4\\},\\{Q_2,Q_3\\},\\{Q_2,Q_4\\}\\) have this property, so\n\n\\[\nP(\\text{chord meets a given diameter})=\\frac{4}{6}= \\frac23 .\n\\]\n\nThe same holds for the vertical diameter.  \nThus a single random chord contributes on average\n\n\\[\n2\\cdot\\frac23=\\frac43\n\\]\n\nintersections with the two diameters.  \n\nFor the 25 chords\n\n\\[\nE[\\text{chord\u2013diameter intersections}]\n      =25\\cdot\\frac43=\\frac{100}{3}.\n\\]\n\n--------------------------------------------------------------------\n\n**4.  Distribution of a chord\u2019s quadrant pair**\n\nLet a chord be called  \n\n* **adjacent** if it joins two adjacent quadrants (four such unordered pairs);\n* **opposite** if it joins opposite quadrants (two such unordered pairs).\n\n\\[\nP(\\text{adjacent})=\\frac{4}{6}= \\frac23,\\qquad \nP(\\text{opposite})=\\frac{2}{6}= \\frac13 .\n\\]\n\n--------------------------------------------------------------------\n\n**5.  Probability that two random chords intersect**\n\nPick two chords independently.  Let their unordered quadrant pairs be \\(S\\) and\n\\(T\\).  There are three possibilities for the relationship between \\(S\\) and \\(T\\).\n\n| Relation of \\(S,T\\) | Probability | Intersection probability |\n|----------------------|-------------|---------------------------|\n| **identical** (\\(S=T\\)) | \\(\\displaystyle\\frac16\\) | \\(\\displaystyle\\frac12\\) |\n| **share exactly one quadrant** | \\(\\displaystyle\\frac{2}{3}\\) | \\(\\displaystyle\\frac12\\) |\n| **disjoint** (complementary sets) | \\(\\displaystyle\\frac16\\) | \\(\\displaystyle\\frac13\\) |\n\n*Proof of the numbers*  \n\n*Identical*: both chords lie in the same two intervals, say \\([0,1)\\) and \\([1,2)\\).  \nIf the endpoints are \\(A\\in[0,1),B\\in[1,2)\\) and \\(C\\in[0,1),D\\in[1,2)\\),\nthe chords intersect iff exactly one of \\(C,D\\) lies on the clockwise arc from\n\\(A\\) to \\(B\\).  A short calculation gives probability \\(1/2\\).\n\n*Share one quadrant*: suppose the common quadrant is \\([0,1)\\) and the other\nendpoints are in \\([1,2)\\) and \\([2,3)\\) (or \\([3,4)\\)).  The second endpoint\nnever lies on the clockwise arc from the first endpoint to its partner, so the\nchords intersect iff the other point in the common quadrant lies on that arc,\nwhich happens with probability \\(1/2\\).\n\n*Disjoint*: the only way for two disjoint pairs to intersect is when both are\nopposite pairs (e.g. \\(\\{0,2\\}\\) and \\(\\{1,3\\}\\)); then the order of the four\npoints around the circle is forced to be alternating, so the chords always\nintersect.  This occurs for one\u2011third of the disjoint cases, hence conditional\nprobability \\(1/3\\).\n\nPutting the three cases together,\n\n\\[\nP(\\text{two chords intersect})=\n\\frac16\\!\\left(\\frac12\\right)+\\frac23\\!\\left(\\frac12\\right)+\\frac16\\!\\left(\\frac13\\right)\n      =\\frac{17}{36}.\n\\]\n\n--------------------------------------------------------------------\n\n**6.  Expected chord\u2013chord intersections**\n\nThere are \\(\\binom{25}{2}=300\\) unordered pairs of the 25 chords, so\n\n\\[\nE[\\text{chord\u2013chord intersections}]\n      =300\\cdot\\frac{17}{36}= \\frac{425}{3}.\n\\]\n\n--------------------------------------------------------------------\n\n**7.  Total expected interior intersections**\n\n\\[\nE[I]=1\\;(\\text{diameters})+\\frac{100}{3}\\;(\\text{chord\u2013diameter})\n      +\\frac{425}{3}\\;(\\text{chord\u2013chord})\n      =\\frac{525}{3}+1 =176 .\n\\]\n\n--------------------------------------------------------------------\n\n**8.  Expected number of regions**\n\nFinally\n\n\\[\nE[R]=1+(\\text{#segments})+E[I]\n     =1+27+176 = 204 .\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{204}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 204

    \n

    Extracted Answer: 204

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nf(x)=\\sin\\!\\bigl(7\\pi\\sin 5x\\bigr)\n\\qquad (0<x<2\\pi)\n\\]\n\n---\n\n### 1.  Zeros of \\(f\\)\n\n\\(f(x)=0\\) when  \n\n\\[\n\\sin\\bigl(7\\pi\\sin 5x\\bigr)=0\n\\Longrightarrow 7\\pi\\sin 5x=k\\pi \\;(k\\in\\mathbb Z)\n\\Longrightarrow \\sin 5x=\\frac{k}{7}.\n\\]\n\nSince \\(|\\sin5x|\\le1\\), we must have \\(k=-7,-6,\\ldots,6,7\\) \u2013 15 possible integers.\n\nPut \\(y=5x\\).  \nThen \\(y\\in(0,10\\pi)\\) and we need the number of solutions of  \n\n\\[\n\\sin y = \\frac{k}{7}\\qquad (k=-7,\\dots ,7).\n\\]\n\n*For \\(|k|<7,\\;k\\neq0\\):* \\(\\frac{k}{7}\\in(-1,1)\\setminus\\{0\\}\\).  \nIn each interval of length \\(2\\pi\\) there are two solutions, and \\((0,10\\pi)\\) contains exactly five such periods.  \nHence each of the 12 values \\(k=\\pm1,\\pm2,\\dots ,\\pm6\\) yields **10** solutions.\n\n*For \\(k=0\\):* \\(\\sin y=0\\Rightarrow y=m\\pi\\).  \nWith \\(0<y<10\\pi\\) we have \\(m=1,2,\\dots ,9\\) \u2192 **9** solutions.\n\n*For \\(k=7\\):* \\(\\sin y=1\\Rightarrow y=\\frac{\\pi}{2}+2\\pi n\\).  \n\\(0<y<10\\pi\\) gives \\(n=0,1,2,3,4\\) \u2192 **5** solutions.\n\n*For \\(k=-7\\):* \\(\\sin y=-1\\Rightarrow y=\\frac{3\\pi}{2}+2\\pi n\\).  \nAgain \\(n=0,1,2,3,4\\) \u2192 **5** solutions.\n\nAdding them,\n\n\\[\nn=5+5+9+12\\cdot10=139 .\n\\]\n\nThus there are \\(n=139\\) zeros of \\(f\\) in \\((0,2\\pi)\\).\n\n---\n\n### 2.  Where the graph is tangent to the \\(x\\)-axis\n\n\\(f\\) is tangent to the \\(x\\)-axis at a zero when also \\(f'(x)=0\\).\n\n\\[\nf'(x)=35\\pi\\cos 5x\\;\\cos\\bigl(7\\pi\\sin5x\\bigr).\n\\]\n\nAt a zero \\(\\sin5x=k/7\\) we have \\(\\cos\\bigl(7\\pi\\sin5x\\bigr)=\\cos(k\\pi)=(-1)^k\\neq0\\).  \nHence \\(f'(x)=0\\iff \\cos5x=0\\).\n\n\\(\\cos5x=0\\) implies \\(\\sin5x=\\pm1\\); therefore \\(k=\\pm7\\).\n\nThus tangency occurs exactly at the solutions found for \\(k=7\\) and \\(k=-7\\).\n\n- For \\(k=7\\): 5 solutions.\n- For \\(k=-7\\): 5 solutions.\n\nHence  \n\n\\[\nt=5+5=10.\n\\]\n\n---\n\n### 3.  Required sum\n\n\\[\nn+t = 139+10 = 149.\n\\]\n\n\\[\n\\boxed{149}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 149

    \n

    Extracted Answer: 149

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The numbers  \n\n\\[\n17_b = 1\\cdot b + 7 = b+7 ,\\qquad \n97_b = 9\\cdot b + 7 .\n\\]\n\nWe need  \n\n\\[\nb+7 \\mid 9b+7 .\n\\]\n\nLet  \n\n\\[\nd=b+7 \\quad\\Longrightarrow\\quad b=d-7 .\n\\]\n\nThen  \n\n\\[\n9b+7 = 9(d-7)+7 = 9d-56 .\n\\]\n\nThus  \n\n\\[\nd \\mid 9d-56 \\;\\Longleftrightarrow\\; d \\mid 56 .\n\\]\n\nHence \\(d\\) must be a positive divisor of \\(56\\).  \nSince the base must satisfy \\(b>9\\), we have \\(d=b+7>9+7=16\\).  \nThe divisors of \\(56\\) larger than \\(16\\) are \\(28\\) and \\(56\\).\n\n\\[\n\\begin{aligned}\nd=28 &\\implies b=28-7=21,\\\\\nd=56 &\\implies b=56-7=49.\n\\end{aligned}\n\\]\n\nBoth \\(b=21\\) and \\(b=49\\) satisfy the original divisibility:\n\n\\[\n\\begin{aligned}\nb=21: &\\quad 17_{21}=28,\\; 97_{21}=196,\\; 196/28=7,\\\\\nb=49: &\\quad 17_{49}=56,\\; 97_{49}=448,\\; 448/56=8 .\n\\end{aligned}\n\\]\n\nThus the integer bases greater than \\(9\\) that work are \\(21\\) and \\(49\\).\n\nThe required sum is  \n\n\\[\n21+49 = 70 .\n\\]\n\n\\[\n\\boxed{70}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 70

    \n

    Extracted Answer: 70

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nc=\\text{# who chose chocolate},\\qquad \nv=\\text{# who chose vanilla},\\qquad \ns=\\text{# who chose strawberry}.\n\\]\n\nThe conditions give  \n\n\\[\nc+v+s=9,\\qquad c>v>s\\ge 1 .\n\\]\n\nThus \\((c,v,s)\\) must be three distinct positive integers whose sum is \\(9\\).\nThe possible triples are  \n\n\\[\n(6,2,1),\\qquad (5,3,1),\\qquad (4,3,2).\n\\]\n\nFor a fixed triple \\((c,v,s)\\) the number of assignments of flavors to the 9 distinct players is the multinomial coefficient  \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\nCompute each term:\n\n\\[\n\\begin{aligned}\n(6,2,1):\\;&\\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot 2}=252,\\\\[4pt]\n(5,3,1):\\;&\\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot 6}=504,\\\\[4pt]\n(4,3,2):\\;&\\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot 6\\cdot 2}=1260.\n\\end{aligned}\n\\]\n\nAdd them:\n\n\\[\nN = 252+504+1260 = 2016.\n\\]\n\nWe need \\(N \\pmod{1000}\\):\n\n\\[\n2016 \\equiv 16 \\pmod{1000}.\n\\]\n\n\\[\n\\boxed{16}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 16

    \n

    Extracted Answer: 16

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let a chair be occupied by a person be denoted by \\(1\\) and an empty chair by \\(0\\).\nThe condition *\u201cno person sits next to two other people\u201d* means that a\n\\(1\\) cannot have \\(1\\)\u2019s on both sides; equivalently a binary string of\nlength \\(16\\) may not contain the block \\(111\\).\n\nWe must count the binary strings of length \\(16\\) that contain exactly\n\\(8\\) ones and no occurrence of three consecutive ones.\n\n--------------------------------------------------------------------\n### 1.  Decompose the ones into blocks\n\nBecause a block of three 1\u2019s is forbidden, the ones can only appear in\nblocks of length \\(1\\) or \\(2\\).\n\nLet  \n\n* \\(b\\) = number of blocks of length \\(2\\) (doubletons)  \n* \\(a\\) = number of blocks of length \\(1\\) (singletons)\n\nThen  \n\n\\[\na+2b=8 ,\\qquad a,b\\ge 0 .\n\\]\n\nHence \\(a\\) must be even and the possible pairs \\((a,b)\\) are  \n\n\\[\n\\begin{array}{c|c|c}\nb & a & B=a+b\\\\\\hline\n0 & 8 & 8\\\\\n1 & 6 & 7\\\\\n2 & 4 & 6\\\\\n3 & 2 & 5\\\\\n4 & 0 & 4\n\\end{array}\n\\]\n\nwhere \\(B=a+b\\) is the total number of blocks of 1\u2019s.\n\n--------------------------------------------------------------------\n### 2.  Order of the blocks\n\nFor a fixed \\(b\\) (hence fixed \\(B\\)), we must decide which of the \\(B\\)\nblocks are doubletons.  This can be done in  \n\n\\[\n\\binom{B}{b}\n\\]\n\nways.\n\n--------------------------------------------------------------------\n### 3.  Distribution of the zeros\n\nThere are \\(8\\) zeros in total (because \\(16-8=8\\)).  \nBetween any two consecutive blocks there must be at least one zero.\nThus the \\(B-1\\) internal gaps already consume \\(B-1\\) zeros, leaving\n\n\\[\n8-(B-1)=9-B\n\\]\n\nzeros to be placed freely among the \\(B+1\\) gaps (the two ends and the\n\\(B-1\\) internal gaps).  By stars\u2011and\u2011bars this can be done in\n\n\\[\n\\binom{(9-B)+(B+1)-1}{B}= \\binom{9}{B}\n\\]\n\nways.\n\n--------------------------------------------------------------------\n### 4.  Count for each \\(b\\)\n\nFor each \\(b\\) we multiply the two factors:\n\n\\[\n\\begin{array}{c|c|c|c}\nb & B=8-b & \\binom{B}{b} & \\binom{9}{B} \\\\ \\hline\n0 & 8 & \\binom{8}{0}=1 & \\binom{9}{8}=9\\\\\n1 & 7 & \\binom{7}{1}=7 & \\binom{9}{7}=36\\\\\n2 & 6 & \\binom{6}{2}=15& \\binom{9}{6}=84\\\\\n3 & 5 & \\binom{5}{3}=10& \\binom{9}{5}=126\\\\\n4 & 4 & \\binom{4}{4}=1 & \\binom{9}{4}=126\n\\end{array}\n\\]\n\nMultiplying and summing:\n\n\\[\n\\begin{aligned}\nN &= 1\\cdot9 + 7\\cdot36 + 15\\cdot84 + 10\\cdot126 + 1\\cdot126\\\\\n  &= 9 + 252 + 1260 + 1260 + 126\\\\\n  &= 2907.\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 5.  Modulo \\(1000\\)\n\n\\[\nN \\equiv 2907 \\pmod{1000}\\equiv 907.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{907}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 907

    \n

    Extracted Answer: 907

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\nFactor the quadratic form:\n\n\\[\n12x^{2}-xy-6y^{2}\n=(3x+2y)(4x-3y)\n\\]\n\nHence a solution must satisfy one of the two linear equations  \n\n\\[\n\\begin{cases}\n3x+2y=0\\quad\\Longrightarrow\\quad x=-\\dfrac23\\,y\\\\[4pt]\n4x-3y=0\\quad\\Longrightarrow\\quad x=\\dfrac34\\,y\n\\end{cases}\n\\]\n\n---\n\n### 1.  Solutions of \\(4x-3y=0\\)\n\nWrite \\(y=4k\\) (\\(k\\in\\mathbb Z\\)). Then  \n\n\\[\nx=\\frac34y=3k .\n\\]\n\nThus the points are \\((x,y)=(3k,4k)\\).  \nBoth coordinates must lie in \\([-100,100]\\):\n\n\\[\n-100\\le 4k\\le100 \\;\\Longrightarrow\\; -25\\le k\\le 25, \n\\qquad -100\\le 3k\\le100\\; \\text{(automatically true)} .\n\\]\n\nHence there are  \n\n\\[\n25-(-25)+1 = 51\n\\]\n\ninteger pairs on this line.\n\n---\n\n### 2.  Solutions of \\(3x+2y=0\\)\n\nWrite \\(x=2m\\) (\\(m\\in\\mathbb Z\\)). Then  \n\n\\[\ny=-\\frac32x=-3m .\n\\]\n\nThus the points are \\((x,y)=(2m,-3m)\\).  \nRequire \\(-100\\le2m\\le100\\) and \\(-100\\le -3m\\le100\\):\n\n\\[\n-50\\le m\\le 50,\\qquad -\\frac{100}{3}\\le m\\le\\frac{100}{3}\n\\;\\Longrightarrow\\; -33\\le m\\le 33 .\n\\]\n\nSo we obtain  \n\n\\[\n33-(-33)+1 = 67\n\\]\n\ninteger pairs on this line.\n\n---\n\n### 3.  Remove the double\u2011counted point\n\nBoth families contain the point \\((0,0)\\).  \nIt has been counted twice, so subtract one.\n\n\\[\n\\text{Total}=51+67-1 = 117 .\n\\]\n\n\\[\n\\boxed{117}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 117

    \n

    Extracted Answer: 117

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nA=(0,0),\\qquad B=(p,0),\\qquad C=(0,q)\n\\]\n\nwith \\(\\angle A=90^{\\circ}\\).  \nBecause \\(BC=38\\),\n\n\\[\np^{2}+q^{2}=38^{2}=1444. \\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1.  Coordinates of \\(K\\) and \\(L\\)\n\n\\(K\\) is \\(14\\) from \\(A\\) and from \\(B\\); therefore it lies on the perpendicular bisector of \\(\\overline{AB}\\):\n\\[\nK=\\Bigl(\\frac p2,\\ \\sqrt{14^{2}-\\Bigl(\\frac p2\\Bigr)^{2}}\\Bigr)\n   =\\bigl(a,\\; \\sqrt{196-a^{2}}\\bigr),\\qquad a=\\frac p2 .\n\\]\n\nSimilarly \\(L\\) is \\(14\\) from \\(A\\) and from \\(C\\); thus  \n\n\\[\nL=\\Bigl(\\sqrt{14^{2}-\\Bigl(\\frac q2\\Bigr)^{2}},\\ \\frac q2\\Bigr)\n   =\\bigl(\\sqrt{196-b^{2}},\\; b\\bigr),\\qquad b=\\frac q2 .\n\\]\n\nSince \\(K\\) and \\(L\\) are also \\(14\\) apart,\n\\[\n(a-\\sqrt{196-b^{2}})^{2}+(\\sqrt{196-a^{2}}-b)^{2}=14^{2}=196 .\n\\]\n\nExpanding gives  \n\n\\[\na\\sqrt{196-b^{2}}+b\\sqrt{196-a^{2}}=98. \\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 2.  Solving for \\(a\\) and \\(b\\)\n\nFrom (1),\n\n\\[\np^{2}+q^{2}=4a^{2}+4b^{2}=1444 \\Longrightarrow a^{2}+b^{2}=361. \\tag{3}\n\\]\n\nLet \\(X=a^{2},\\;Y=b^{2}\\).  Then \\(X+Y=361\\).  \nSquare (2) and use \\(u^{2}=196-b^{2}=196-Y,\\;v^{2}=196-a^{2}=196-X\\):\n\n\\[\nX(196-Y)+Y(196-X)+2ab\\sqrt{(196-X)(196-Y)}=9604.\n\\]\n\nUsing \\(ab=\\sqrt{XY}\\) and (3) simplifies to  \n\n\\[\nXY(196-X)(196-Y)=(XY-30576)^{2}.\n\\]\n\nBecause \\(196-X=196-a^{2}=196-X\\) etc., after substitution and using \\(X+Y=361\\) we obtain  \n\n\\[\nXY\\bigl(-32340+XY\\bigr)=(XY-30576)^{2},\n\\]\n\nwhich yields  \n\n\\[\nXY=32448.\n\\]\n\nHence  \n\n\\[\nX+Y=361,\\qquad XY=32448.\n\\]\n\nThe quadratic \\(t^{2}-361t+32448=0\\) gives  \n\n\\[\nt=\\frac{361\\pm23}{2} \\Longrightarrow \\{X,Y\\}=\\{192,169\\}.\n\\]\n\nThus  \n\n\\[\na^{2}=192,\\;b^{2}=169\\qquad\\text{or}\\qquad a^{2}=169,\\;b^{2}=192.\n\\]\n\nTaking \\(a^{2}=192\\) (the other case is symmetric),\n\n\\[\na=8\\sqrt3,\\qquad b=13.\n\\]\n\nTherefore  \n\n\\[\nAB=2a=16\\sqrt3,\\qquad AC=2b=26,\n\\]\n\nand indeed \\(AB^{2}+AC^{2}= (16\\sqrt3)^{2}+26^{2}=768+676=1444=38^{2}\\).\n\n--------------------------------------------------------------------\n### 3.  Coordinates of the relevant points\n\n\\[\n\\begin{aligned}\nB&=(16\\sqrt3,0),\\\\\nK&=\\Bigl(8\\sqrt3,\\ \\sqrt{196-192}\\Bigr)=\\bigl(8\\sqrt3,2\\bigr),\\\\\nL&=\\Bigl(\\sqrt{196-169},\\ 13\\Bigr)=\\bigl(3\\sqrt3,13\\bigr),\\\\\nC&=(0,26).\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Area of \\(BKLC\\)\n\nUsing the shoelace formula for the polygon \\(B\\to K\\to L\\to C\\),\n\n\\[\n\\begin{aligned}\n\\sum x_i y_{i+1}&= (16\\sqrt3)(2)+(8\\sqrt3)(13)+(3\\sqrt3)(26)+0=214\\sqrt3,\\\\\n\\sum y_i x_{i+1}&=0+(2)(3\\sqrt3)+0+(26)(16\\sqrt3)=422\\sqrt3.\n\\end{aligned}\n\\]\n\nHence  \n\n\\[\n\\operatorname{Area}= \\frac12\\bigl|214\\sqrt3-422\\sqrt3\\bigr|\n                 =\\frac12\\,(208\\sqrt3)=104\\sqrt3.\n\\]\n\n--------------------------------------------------------------------\nThus the area of quadrilateral \\(BKLC\\) is \\(104\\sqrt3\\), so  \n\n\\[\n\\boxed{104}\n\\] is the required integer \\(n\\).
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 104

    \n

    Extracted Answer: 104

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the trapezoid have parallel sides (bases) \\(r\\) and \\(s\\) \\((r\\neq s)\\) and equal legs of length \\(L\\).\n\n---\n\n### 1.  Tangential condition  \n\nA quadrilateral has an incircle iff the sums of the lengths of opposite sides are equal.  \nFor the order of sides \\(r,\\,L,\\,s,\\,L\\),\n\n\\[\nr+s = L+L \\qquad\\Longrightarrow\\qquad L =\\frac{r+s}{2}.\n\\tag{1}\n\\]\n\n---\n\n### 2.  Use the given area  \n\nFor any tangential quadrilateral,  \n\n\\[\n\\text{Area}=r_{\\text{in}}\\cdot s,\n\\]\n\nwhere \\(r_{\\text{in}}\\) is the inradius and \\(s\\) is the semiperimeter.  \nHere the inradius is \\(3\\) and the area is \\(72\\):\n\n\\[\n72 = 3\\,s\\quad\\Longrightarrow\\quad s = 24 .\n\\]\n\nThe semiperimeter \\(s\\) is\n\n\\[\ns = \\frac{r+s+2L}{2}=r+s \\quad\\Longrightarrow\\quad r+s = 24. \\tag{2}\n\\]\n\nHence from (1),\n\n\\[\nL = \\frac{r+s}{2}=12 .\n\\]\n\n---\n\n### 3.  Height of the trapezoid  \n\nThe incircle touches both parallel sides, so the distance between them (the height \\(h\\)) equals the diameter of the incircle:\n\n\\[\nh = 2\\cdot 3 = 6 .\n\\tag{3}\n\\]\n\n---\n\n### 4.  Relate the legs to the bases  \n\nBecause the trapezoid is isosceles, each leg forms a right triangle with vertical leg \\(h\\) and horizontal leg \\(\\dfrac{|r-s|}{2}\\):\n\n\\[\nL^{2}=h^{2}+\\Bigl(\\frac{r-s}{2}\\Bigr)^{2}.\n\\]\n\nInsert \\(L=12\\) and \\(h=6\\):\n\n\\[\n12^{2}=6^{2}+\\Bigl(\\frac{r-s}{2}\\Bigr)^{2}\n\\Longrightarrow\\;144=36+\\frac{(r-s)^{2}}{4}\n\\Longrightarrow\\;(r-s)^{2}=432.\n\\]\n\nThus  \n\n\\[\n|r-s|=12\\sqrt3. \\tag{4}\n\\]\n\n---\n\n### 5.  Solve for \\(r\\) and \\(s\\)\n\nFrom (2) and (4),\n\n\\[\n\\begin{cases}\nr+s=24,\\\\[2pt]\nr-s=12\\sqrt3 \\quad(\\text{take }r>s).\n\\end{cases}\n\\]\n\nHence  \n\n\\[\nr = 12+6\\sqrt3,\\qquad s = 12-6\\sqrt3 .\n\\]\n\n(If the roles of \\(r\\) and \\(s\\) are exchanged, the same values for \\(r^{2}+s^{2}\\) result.)\n\n---\n\n### 6.  Compute \\(r^{2}+s^{2}\\)\n\n\\[\n\\begin{aligned}\nr^{2}+s^{2}&=(12+6\\sqrt3)^{2}+(12-6\\sqrt3)^{2}\\\\\n&= \\bigl(144+144\\sqrt3+108\\bigr)+\\bigl(144-144\\sqrt3+108\\bigr)\\\\\n&= 252+144\\sqrt3+252-144\\sqrt3\\\\\n&= 504.\n\\end{aligned}\n\\]\n\n---\n\n\\[\n\\boxed{504}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 504

    \n

    Extracted Answer: 504

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The first equation  \n\n\\[\n|25+20i-z|=5\n\\]\n\nis the circle  \n\n\\[\nC:\\;(x-25)^2+(y-20)^2=5^{2}\n\\]\n\ncenter \\(C=(25,20)\\), radius \\(5\\).\n\nThe second equation  \n\n\\[\n|z-4-k| = |z-3i-k|\n\\]\n\nsays that the point \\(z\\) is equally distant from  \n\n\\[\nA=4+k\\;(= (4+k,0)) ,\\qquad B=3i+k\\;(= (k,3)).\n\\]\n\nHence the set of points satisfying the second condition is the **perpendicular bisector** of the segment \\(AB\\).\n\n---\n\n### 1. Equation of the perpendicular bisector  \n\nMidpoint of \\(AB\\):\n\n\\[\nM=\\Bigl(\\frac{4+k+k}{2},\\,\\frac{0+3}{2}\\Bigr)=\\Bigl(k+2,\\frac32\\Bigr).\n\\]\n\nSlope of \\(AB\\):\n\n\\[\n\\frac{3-0}{k-(4+k)} =\\frac{3}{-4}= -\\frac34 .\n\\]\n\nTherefore the slope of the perpendicular bisector is the negative reciprocal:\n\n\\[\nm_{\\perp}= \\frac{4}{3}.\n\\]\n\nThrough \\(M\\) the line is  \n\n\\[\ny-\\frac32 = \\frac{4}{3}\\bigl(x-(k+2)\\bigr).\n\\]\n\nMultiplying by \\(3\\) and simplifying gives the standard form  \n\n\\[\n8x-6y-(8k+7)=0.\n\\]\n\n---\n\n### 2. Tangency condition  \n\nThe distance from the centre \\(C=(25,20)\\) to this line must equal the radius \\(5\\) for the circle and the line to intersect in **exactly one point** (tangency).\n\n\\[\nd=\\frac{|\\,8\\cdot25-6\\cdot20-(8k+7)\\,|}{\\sqrt{8^{2}+(-6)^{2}}}\n   =\\frac{|\\,200-120-8k-7\\,|}{10}\n   =\\frac{|\\,73-8k\\,|}{10}.\n\\]\n\nSet \\(d=5\\):\n\n\\[\n\\frac{|73-8k|}{10}=5\\quad\\Longrightarrow\\quad |73-8k|=50.\n\\]\n\nHence  \n\n\\[\n73-8k = 50\\quad\\text{or}\\quad73-8k = -50.\n\\]\n\nSolving,\n\n\\[\n\\begin{cases}\n73-8k=50 &\\Longrightarrow\\; k=\\dfrac{23}{8},\\\\[4pt]\n73-8k=-50&\\Longrightarrow\\; k=\\dfrac{123}{8}.\n\\end{cases}\n\\]\n\nBoth values give a line tangent to the circle, so the system has exactly one solution for each.\n\n---\n\n### 3. Sum of all possible \\(k\\)\n\n\\[\nk_{1}+k_{2}= \\frac{23}{8}+\\frac{123}{8}= \\frac{146}{8}= \\frac{73}{4}.\n\\]\n\nWrite \\(\\frac{73}{4}\\) as \\(\\frac{m}{n}\\) with \\(\\gcd(m,n)=1\\); here \\(m=73,\\ n=4\\).\n\n\\[\nm+n = 73+4 = 77.\n\\]\n\n\\[\n\\boxed{77}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 77

    \n

    Extracted Answer: 77

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For an 8\u2011digit number  \n\\[\na_1a_2a_3a_4a_5a_6a_7a_8,\n\\qquad a_i\\in\\{1,2,\\dots ,8\\},\n\\]\nusing each digit once, we need it to be divisible by \\(22 = 2\\cdot 11\\).\n\n---\n\n### 1.  Divisibility by 2  \n\nThe last digit \\(a_8\\) must be even.  \nThe even digits are \\(\\{2,4,6,8\\}\\).\n\n---\n\n### 2.  Divisibility by 11  \n\nFor an 8\u2011digit number the test is  \n\n\\[\n(a_1+a_3+a_5+a_7)-(a_2+a_4+a_6+a_8)\\equiv0\\pmod{11}.\n\\]\n\nLet  \n\n\\[\nS_o=a_1+a_3+a_5+a_7,\\qquad S_e=a_2+a_4+a_6+a_8.\n\\]\n\nSince the digits \\(1,\\ldots ,8\\) are used exactly once,\n\\(S_o+S_e=1+2+\\cdots+8=36\\).  \nHence  \n\n\\[\nS_o-S_e\\equiv0\\pmod{11}\n\\Longrightarrow 2S_o\\equiv36\\pmod{11}\n\\Longrightarrow 2S_o\\equiv3\\pmod{11}.\n\\]\n\nBecause \\(2^{-1}\\equiv6\\pmod{11}\\),  \n\n\\[\nS_o\\equiv3\\cdot6\\equiv18\\equiv7\\pmod{11}.\n\\]\n\nThe smallest possible sum of four distinct digits is \\(1+2+3+4=10\\) and the largest is \\(5+6+7+8=26\\); the only value in this interval congruent to \\(7\\pmod{11}\\) is \\(18\\).  \nThus we require  \n\n\\[\nS_o=S_e=18.\n\\]\n\nSo the four digits placed in the odd positions must sum to \\(18\\).\n\n---\n\n### 3.  Choosing the digits for odd positions  \n\nWe need 4\u2011element subsets of \\(\\{1,\\dots ,8\\}\\) whose sum is \\(18\\).\n\nEnumerating them gives  \n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are \\(m=8\\) such subsets.  \nEach contains exactly two even digits and two odd digits (otherwise the sum cannot be 18).\n\n---\n\n### 4.  Forming the numbers  \n\nFor a given subset \\(O\\) (odd\u2011position digits):\n\n* Arrange the four digits of \\(O\\) among the odd positions \\((1,3,5,7)\\): \\(4! = 24\\) ways.\n* The complement \\(E\\) (the even\u2011position digits) also has exactly two evens.\n  * Choose which even digit of \\(E\\) occupies the last position \\(a_8\\): \\(2\\) ways.\n  * Arrange the remaining three digits of \\(E\\) in positions \\(2,4,6\\): \\(3! = 6\\) ways.\n\nThus for each subset \\(O\\)\n\n\\[\n\\text{#numbers}=24\\cdot(2\\cdot 6)=24\\cdot12=288 .\n\\]\n\nSince there are \\(8\\) possible subsets,\n\n\\[\nN = 8\\cdot288 = 2304 .\n\\]\n\n---\n\n### 5.  Required difference  \n\n\\[\nN-2025 = 2304-2025 = 279 .\n\\]\n\n\\[\n\\boxed{279}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 279

    \n

    Extracted Answer: 279

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the twelve letters be  \n\n\\[\nA<B<C<D<E<F<G<H<I<J<K<L .\n\\]\n\nA random perfect matching of the twelve letters is chosen.\nFor each pair \\(\\{x,y\\}\\) we write the two letters in alphabetical order,\nobtaining the word \\(xy\\;(x<y)\\).\nSorting the six words alphabetically gives a list whose last word is the\nlexicographically greatest.\n\n--------------------------------------------------------------------\n### 1.  What is the last word?\n\nFor a word \\(xy\\) the first letter is the smaller element of its pair.\nSince the six first letters are distinct, the last word is the word whose\npair has the **largest** smaller element.\nDenote by  \n\n\\[\ns(P)=\\min(P) \\qquad\\text{for a pair }P.\n\\]\n\nIf the pairs are \\(P_1,\\dots ,P_6\\), the last word comes from the pair  \n\n\\[\nP_{\\max} \\text{ with } s(P_{\\max})=\\max\\{s(P_1),\\dots ,s(P_6)\\}.\n\\]\n\n--------------------------------------------------------------------\n### 2.  Condition for the last word to contain \\(G\\)\n\nLet the partner of \\(G\\) be a letter \\(Y\\neq G\\).\nWrite  \n\n\\[\ns_G=\\min(G,Y).\n\\]\n\nThe last word contains \\(G\\) **iff** the smallest element of the pair that\ncontains \\(G\\) is the largest among all six minima, i.e.\n\n\\[\ns_G=\\max\\{s(P_1),\\dots ,s(P_6)\\}.\n\\tag{1}\n\\]\n\nThus we have to find the probability that condition (1) holds.\n\n--------------------------------------------------------------------\n### 3.  Conditioning on the partner of \\(G\\)\n\nIn a random perfect matching the partner of a fixed letter is uniform\namong the other eleven letters, so we may condition on the value of\n\\(Y\\).\n\n*If \\(Y>G\\)* (i.e. \\(Y\\in\\{H,I,J,K,L\\}\\)):  \n\\(s_G=G\\).  Condition (1) becomes \u201cno other pair has both letters\ngreater than \\(G\\)\u201d, because any such pair would have a minimum exceeding \\(G\\).\n\nAfter removing \\(G\\) and \\(Y\\) we have  \n\n- six letters \\(<G\\) : \\(A,B,C,D,E,F\\);\n- four letters \\(>G\\) : the remaining four of \\(\\{H,I,J,K,L\\}\\).\n\nWe must pair each of the four \u201chigh\u2019\u2019 letters with a distinct \u201clow\u2019\u2019\nletter; the two unused low letters are then paired together.\n\nNumber of such matchings  \n\n\\[\n\\binom{6}{4}\\,4!=15\\cdot 24=360 .\n\\]\n\nThe total number of matchings on the ten remaining letters is  \n\n\\[\n(10-1)!!=9\\cdot7\\cdot5\\cdot3\\cdot1=945 .\n\\]\n\nHence  \n\n\\[\n\\Pr(\\text{condition }|\\,Y>G)=\\frac{360}{945}=\\frac{8}{21}.\n\\tag{2}\n\\]\n\nThere are five possibilities for \\(Y>G\\).\n\n--------------------------------------------------------------------\n*If \\(Y<G\\)* (i.e. \\(Y\\in\\{A,B,C,D,E,F\\}\\)):  \nNow \\(s_G=Y\\).  Condition (1) says that every other pair must have a\nminimum **less than \\(Y\\)**, i.e. no pair may consist solely of letters\ngreater than \\(Y\\).\n\nLet the rank of \\(Y\\) be \\(y\\;(1\\le y\\le 6)\\).  \nAmong the ten remaining letters we have  \n\n- \\(y-1\\) letters \\(<Y\\);\n- \\(11-y\\) letters \\(>Y\\) (the letters greater than \\(Y\\) except the removed\n\\(G\\)).\n\nFor the condition to be possible we need at least as many letters\n\\(<Y\\) as letters \\(>Y\\); this occurs only when \\(y=6\\), i.e. \\(Y=F\\).\n\nWhen \\(Y=F\\) the remaining letters are  \n\n- five letters \\(<F\\): \\(A,B,C,D,E\\);\n- five letters \\(>F\\): \\(H,I,J,K,L\\).\n\nAgain every \u201chigh\u2019\u2019 letter must be paired with a distinct \u201clow\u2019\u2019 letter,\ngiving exactly  \n\n\\[\n5! =120\n\\]\n\nacceptable matchings.  Therefore  \n\n\\[\n\\Pr(\\text{condition }|\\,Y=F)=\\frac{120}{945}= \\frac{8}{63},\n\\tag{3}\n\\]\n\nand for \\(Y=A,B,C,D,E\\) the probability is \\(0\\).\n\n--------------------------------------------------------------------\n### 4.  Overall probability\n\nUsing that the partner of \\(G\\) is uniformly one of the other eleven\nletters,\n\n\\[\n\\begin{aligned}\n\\Pr(\\text{last word contains }G)\n&=\\frac1{11}\\Bigl(\n5\\cdot\\frac{8}{21}\n+\\frac{8}{63}\n+0+0+0+0+0\\Bigr)\\\\[2mm]\n&=\\frac1{11}\\Bigl(\\frac{40}{21}+\\frac{8}{63}\\Bigr)\n   =\\frac1{11}\\Bigl(\\frac{120}{63}+\\frac{8}{63}\\Bigr)\\\\[2mm]\n&=\\frac{128}{693}.\n\\end{aligned}\n\\]\n\nThe fraction \\(\\frac{128}{693}\\) is already in lowest terms\n(\\(\\gcd(128,693)=1\\)).\n\nThus  \n\n\\[\nm=128,\\qquad n=693,\\qquad m+n=821.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{821}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 821

    \n

    Extracted Answer: 821

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nC:\\;y=x^{2}-4\n\\]\n\nbe the given parabola.  \nRotate \\(C\\) \\(60^{\\circ}\\) counter\u2011clockwise about the origin.  \nIf a point \\((x,y)\\) lies on both \\(C\\) and its rotated image, then rotating \\((x,y)\\) **clockwise** by \\(60^{\\circ}\\) must again land on \\(C\\).\n\n---\n\n### 1.  The rotation equations  \n\nFor a clockwise rotation of \\(60^{\\circ}\\),\n\n\\[\n\\begin{aligned}\nx'&=x\\cos60^{\\circ}+y\\sin60^{\\circ}= \\tfrac12 x+\\tfrac{\\sqrt3}{2}y,\\\\[2mm]\ny'&=-x\\sin60^{\\circ}+y\\cos60^{\\circ}= -\\tfrac{\\sqrt3}{2}x+\\tfrac12 y .\n\\end{aligned}\n\\]\n\nThe condition \u201cthe rotated point lies on \\(C\\)\u201d is\n\n\\[\ny'=(x')^{2}-4 .\n\\]\n\nSubstituting \\(y=x^{2}-4\\) (since \\((x,y)\\in C\\)) gives a single equation in \\(x\\).\n\n---\n\n### 2.  Obtain the equation in \\(x\\)\n\nPut \\(\\displaystyle s=\\frac{\\sqrt3}{2},\\ c=\\frac12\\).  \nThen\n\n\\[\n\\begin{aligned}\nx' &=c\\,x+s\\,(x^{2}-4)= s x^{2}+c x-4s,\\\\[1mm]\ny' &=-s\\,x+c\\,(x^{2}-4)=c x^{2}-s x-4c .\n\\end{aligned}\n\\]\n\nThe condition \\(y'= (x')^{2}-4\\) becomes\n\n\\[\nc x^{2}-s x-4c =\\bigl(s x^{2}+c x-4s\\bigr)^{2}-4 .\n\\]\n\nInsert \\(c=\\tfrac12,\\ s=\\tfrac{\\sqrt3}{2}\\) and clear denominators (multiply by \\(4\\)):\n\n\\[\n2x^{2}-2\\sqrt3\\,x-8 = \\bigl(\\sqrt3\\,x^{2}+x-4\\sqrt3\\bigr)^{2}-4 .\n\\]\n\nAfter simplifying we obtain the quartic\n\n\\[\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40=0 .\n\\]\n\n---\n\n### 3.  Factor the quartic\n\nTrying a factorisation \\((3x^{2}+Bx+C)(x^{2}+Ex+F)\\) with\n\\(B,E\\) multiples of \\(\\sqrt3\\), we find\n\n\\[\n\\boxed{(3x^{2}-\\sqrt3\\,x-10)(x^{2}+\\sqrt3\\,x-4)=0}.\n\\]\n\nHence the possible \\(x\\)-coordinates are the roots of\n\n\\[\n\\begin{cases}\n3x^{2}-\\sqrt3\\,x-10=0,\\\\[1mm]\nx^{2}+\\sqrt3\\,x-4=0 .\n\\end{cases}\n\\]\n\nSolving:\n\n\\[\n\\begin{aligned}\n3x^{2}-\\sqrt3\\,x-10=0 &\\Longrightarrow \nx=\\dfrac{\\sqrt3\\pm\\sqrt{123}}6\\;( \\approx 2.14,\\ -1.56),\\\\[2mm]\nx^{2}+\\sqrt3\\,x-4=0 &\\Longrightarrow \nx=\\dfrac{-\\sqrt3\\pm\\sqrt{19}}2\\;( \\approx 1.31,\\ -3.05).\n\\end{aligned}\n\\]\n\n---\n\n### 4.  Identify the point in the fourth quadrant  \n\nThe fourth quadrant requires \\(x>0\\) and \\(y<0\\).  \nOnly  \n\n\\[\nx=\\frac{-\\sqrt3+\\sqrt{19}}2 \\approx 1.31\n\\]\n\nsatisfies these conditions (the other positive root gives \\(x>2\\) and \\(y>0\\)).  \n\nThus the intersection point in the fourth quadrant is\n\n\\[\n\\bigl(x,\\;y\\bigr)=\\left(\\frac{-\\sqrt3+\\sqrt{19}}2,\\;\n\\left(\\frac{-\\sqrt3+\\sqrt{19}}2\\right)^{\\!2}-4\\right).\n\\]\n\nCompute \\(y\\):\n\n\\[\n\\begin{aligned}\ny&=\\frac{(-\\sqrt3+\\sqrt{19})^{2}}{4}-4\n   =\\frac{3+19-2\\sqrt{57}}{4}-4\n   =\\frac{22-2\\sqrt{57}}{4}-4 \\\\\n  &=\\frac{11}{2}-\\frac{\\sqrt{57}}2-4\n   =\\frac{3-\\sqrt{57}}{2}.\n\\end{aligned}\n\\]\n\nHence  \n\n\\[\ny=\\frac{\\,3-\\sqrt{57}\\,}{2}\n\\]\n\nwhich matches the required form \\(\\displaystyle \\frac{a-\\sqrt b}{c}\\) with  \n\n\\[\na=3,\\qquad b=57,\\qquad c=2.\n\\]\n\n\\(a\\) and \\(c\\) are relatively prime, as required.\n\n---\n\n### 5.  Compute \\(a+b+c\\)\n\n\\[\na+b+c = 3+57+2 = 62.\n\\]\n\n\\[\n\\boxed{62}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 62

    \n

    Extracted Answer: 62

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Sketch**\n\n1. **Placing the pentagon.**  \n   Put \\(B=(0,0)\\) and let \\(BC\\) be the segment on the \\(x\\)-axis, so \\(C=(7,0)\\).  \n   Since \\(\\angle B=60^{\\circ}\\) and \\(AB=14\\),\n\n\\[\nA=\\bigl(7,\\;7\\sqrt3 \\bigr).\n\\]\n\n   Using the law of cosines in \\(\\triangle ABC\\) we obtain \\(AC=7\\sqrt3\\); thus\n\\(\\triangle ABC\\) is a \\(30\\!-\\!60\\!-\\!90\\) right triangle with right angle at \\(C\\).\n\n   In the same way the data at \\(E\\) give a similar \\(30\\!-\\!60\\!-\\!90\\) triangle\n\\(\\triangle AED\\) with right angle at \\(D\\), giving  \n\n\\[\nAE=26,\\qquad DE=13,\\qquad AD=13\\sqrt3 .\n\\]\n\n   Solving the two circles \\((A,13\\sqrt3)\\) and \\((C,24)\\) yields  \n\n\\[\nD=\\Bigl(\\frac{205}{7},\\;\\frac{36\\sqrt3}{7}\\Bigr),\\qquad\nE=\\Bigl(\\frac{218}{7},\\;\\frac{88\\sqrt3}{7}\\Bigr).\n\\]\n\n2. **A useful line.**  \n   Points \\(B\\) and \\(E\\) are joined by the segment \\(BE\\) of length  \n\n\\[\nBE=\\frac{266}{7}=38 .\n\\]\n\n   For any point \\(X\\) on the line \\(BE\\) we have, by the triangle inequality,\n\\[\nXB+XE=BE=38 .\n\\]\n\n   Hence for \\(X\\in BE\\)\n\n\\[\nf(X)=XB+XE+AX+CX+DX=38+AX+CX+DX .\n\\]\n\n   Therefore the problem reduces to minimizing  \n\n\\[\ng(X)=AX+CX+DX\\qquad (X\\in BE).\n\\]\n\n3. **Parameterising the line.**  \n   Write \\(X\\) as  \n\n\\[\nX(t)=\\Bigl(\\frac{218}{7}t,\\;\\frac{88\\sqrt3}{7}t\\Bigr),\\qquad 0\\le t\\le 1 .\n\\]\n\n   Direct computation gives  \n\n\\[\n\\begin{aligned}\nAX^2&=\\frac{4\\cdot79-28t+1444t^{2}}{9},\\\\[2mm]\nCX^2&=\\frac{577-158t+1444t^{2}}{9},\\\\[2mm]\nDX^2&=\\frac{3241-1106t+1444t^{2}}{9}.\n\\end{aligned}\n\\]\n\n   The function \\(g(t)=\\sqrt{AX^2}+\\sqrt{CX^2}+\\sqrt{DX^2}\\) is convex,\nso its minimum occurs where \\(g'(t)=0\\).\n\n4. **Finding the minimizing \\(t\\).**  \n   Using the derivative formula for a distance,\n\\( \\dfrac{d}{dt}\\sqrt{at^{2}+bt+c}=\n \\dfrac{2at+b}{2\\sqrt{at^{2}+bt+c}}\\),\nthe condition \\(g'(t)=0\\) becomes\n\n\\[\n\\frac{1444t-482}{\\sqrt{4\\cdot79-28t+1444t^{2}}}\n+\\frac{1444t-218}{\\sqrt{577-158t+1444t^{2}}}\n+\\frac{1444t-1106}{\\sqrt{3241-1106t+1444t^{2}}}=0 .\n\\]\n\n   Substituting \\(t=\\dfrac13\\) makes each numerator a multiple of\n\\(2,\\,790,\\,-1874\\) respectively, and a short computation shows the\nleft\u2011hand side to be zero.  Because of convexity, \\(t=\\dfrac13\\) gives the\nglobal minimum.\n\n5. **The minimum value.**  \n   For \\(t=\\dfrac13\\),\n\n\\[\n\\begin{aligned}\nAX&=\\frac{2\\sqrt{79}}{3},\\\\[1mm]\nCX&=\\frac{\\sqrt{577}}{3},\\\\[1mm]\nDX&=\\frac{\\sqrt{3241}}{3}.\n\\end{aligned}\n\\]\n\n   A direct squaring shows\n\n\\[\n2\\sqrt{79}+ \\sqrt{577}+ \\sqrt{3241}=57\\sqrt3 ,\n\\]\n\n   therefore  \n\n\\[\ng_{\\min}= \\frac{57\\sqrt3}{3}=19\\sqrt3 .\n\\]\n\n   Adding the constant part \\(XB+XE=38\\) gives the least possible value of\n\\(f\\):\n\n\\[\nf_{\\min}=38+19\\sqrt3 .\n\\]\n\n6. **Answer.**  \n   The expression is of the form \\(m+n\\sqrt p\\) with\n\\(m=38,\\;n=19,\\;p=3\\).  Hence\n\n\\[\nm+n+p = 38+19+3 = 60 .\n\\]\n\n\\[\n\\boxed{60}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 60

    \n

    Extracted Answer: 60

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution**\n\nLet  \n\n\\[\nM=3^{7}=2187 ,\\qquad L=3^{6}=729 .\n\\]\n\nAll ordered triples \\((a,b,c)\\) satisfy  \n\n\\[\nN=\\#\\{1\\le a,b,c\\le L\\;|\\;a^{3}+b^{3}+c^{3}\\equiv 0\\pmod{M}\\}.\n\\]\n\n--------------------------------------------------------------------\n### 1.   The cubes modulo \\(M\\)\n\nWrite a positive integer \\(a\\) as  \n\n\\[\na=3^{v}\\,u ,\\qquad v=v_{3}(a)\\in\\{0,1,2,3,4,5,6\\},\n\\qquad 3\\nmid u .\n\\]\n\n*If \\(v\\ge 3\\) then \\(a^{3}\\equiv0\\pmod{M}\\).  \nIf \\(v=2\\) then \\(a^{3}\\equiv729\\,u\\pmod{M}\\) and, because\n\\(u\\equiv\\pm1\\pmod3\\),\n\n\\[\na^{3}\\equiv\\begin{cases}\n729 & u\\equiv1\\pmod3,\\\\[2mm]\n1458& u\\equiv2\\pmod3 .\n\\end{cases}\n\\]\n\n*If \\(v=1\\) then \\(a=3u\\;(3\\nmid u\\le 243)\\) and  \n\n\\[\na^{3}\\equiv27\\,u^{3}\\pmod{M}.\n\\]\n\nSince \\(27\\cdot81=M\\), only \\(u^{3}\\pmod{81}\\) matters.  The\nset of cubic residues modulo \\(81\\) among the units is  \n\n\\[\nR_{4}=\\{x\\in\\mathbb Z/81\\;|\\;x\\equiv\\pm1\\pmod9\\},\n\\qquad |R_{4}|=18 .\n\\]\n\nEach element of \\(R_{4}\\) occurs exactly three times among the\n\\(162\\) numbers \\(u\\) (the three residue\u2011classes modulo \\(81\\));\nhence each value \\(27r\\;(r\\in R_{4})\\) occurs \\(9\\) times.\n\n*If \\(v=0\\) (i.e. \\(3\\nmid a\\)), then \\(a^{3}\\) runs through the\ncubic residues among the units modulo \\(M\\)\n\n\\[\nR_{7}=\\{x\\in\\mathbb Z/M\\;|\\;x\\equiv\\pm1\\pmod9\\},\n\\qquad |R_{7}|=486 ,\n\\]\n\neach occurring **once**.\n\nSummarising, the multiset of residues \\(\\{a^{3}\\pmod M\\}\\) is\n\n| residue type | number of residues | multiplicity |\n|---|---|---|\n| \\(x\\in R_{7}\\) | \\(486\\) | \\(1\\) |\n| \\(27r,\\,r\\in R_{4}\\) | \\(18\\) | \\(9\\) |\n| \\(729\\) | \\(1\\) | \\(27\\) |\n| \\(1458\\) | \\(1\\) | \\(27\\) |\n| \\(0\\) | \\(1\\) | \\(27\\) |\n| total | \\(729\\) | \u2013 |\n\n--------------------------------------------------------------------\n### 2.   Fourier representation\n\nPut  \n\n\\[\n\\zeta =e^{2\\pi i/M}, \\qquad \nS(k)=\\sum_{a=1}^{L}\\zeta^{k a^{3}}\n      =\\sum_{x}f(x)\\,\\zeta^{k x},\n\\]\n\nwhere \\(f(x)\\) is the multiplicity of the residue \\(x\\) listed above.\nOrthogonality of characters gives  \n\n\\[\nN=\\frac1{M}\\sum_{k=0}^{M-1}S(k)^{3}\\tag{1}\n\\]\n\nand we have to evaluate the sum on the right.\n\n--------------------------------------------------------------------\n### 3.   Explicit form of \\(S(k)\\)\n\nWrite \\(k=3^{v}t\\;(3\\nmid t)\\).  \nThe three kinds of contributions are\n\n* from \\(R_{7}\\) (cubic residues modulo \\(M\\))  \n\n\\[\nS_{7}(k)=\\sum_{x\\in R_{7}}\\zeta^{k x}\n       =\\begin{cases}\n       486\\cos\\frac{2\\pi t}{9},&3^{5}\\mid k,\\\\\n       0,&\\text{otherwise}.\n       \\end{cases}\n\\]\n\n* from the residues \\(27r\\) (\\(r\\in R_{4}\\))  \n\n\\[\n9S_{4}(k)=9\\sum_{r\\in R_{4}}\\zeta^{27k r}\n        =\\begin{cases}\n        162\\cos\\frac{2\\pi t}{9},&9\\mid k,\\\\\n        0,&\\text{otherwise}.\n        \\end{cases}\n\\]\n\n* from the three \u201cfixed\u2019\u2019 residues \\(0,\\,729,\\,1458\\)  \n\n\\[\nS_{2}(k)+S_{3}(k)=27\\bigl(\\zeta^{729k}+\\zeta^{1458k}+1\\bigr)\n                =\\begin{cases}\n                81,&3\\mid k,\\\\[2mm]\n                0,&3\\nmid k .\n                \\end{cases}\n\\]\n\nHence\n\n\\[\nS(k)=S_{7}(k)+9S_{4}(k)+\n\\begin{cases}\n81,&3\\mid k,\\\\\n0,&3\\nmid k .\n\\end{cases}\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 4.   Values of \\(S(k)\\)\n\nAccording to the 3\u2011adic valuation \\(v=v_{3}(k)\\) we obtain\n\n| \\(v\\) | condition on \\(k\\) | \\(S(k)\\) |\n|---|---|---|\n| \\(0\\) | \\(3\\nmid k\\) | \\(0\\) |\n| \\(1\\) | \\(3\\mid k,\\;9\\nmid k\\) | \\(81\\) |\n| \\(2\\) | \\(9\\mid k,\\;27\\nmid k\\) | \\(81\\bigl(1+2\\cos\\frac{2\\pi u}{9}\\bigr)\\)  \\(\\;(u=k/9\\bmod9\\neq0,3,6)\\) |\n| \\(3\\) | \\(27\\mid k,\\;81\\nmid k\\) | \\(0\\) |\n| \\(4\\) | \\(81\\mid k,\\;243\\nmid k\\) | \\(243\\) |\n| \\(5\\) | \\(243\\mid k,\\;729\\nmid k\\) | \\(243\\bigl(1+2\\cos\\frac{2\\pi t}{9}\\bigr)\\) \\(\\;(t=k/243\\bmod9\\neq0,3,6)\\) |\n| \\(6\\) | \\(729\\mid k\\) | \\(0\\) |\n| \\(k=0\\) | \u2013 | \\(S(0)=729\\) |\n\nThe numbers of \\(k\\) having each valuation are  \n\n\\[\n\\begin{aligned}\n&v=0:1458,\\quad v=1:486,\\quad v=2:162,\\\\\n&v=3:54,\\quad v=4:18,\\quad v=5:6,\\quad v=6:2 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 5.   Summation of \\(S(k)^{3}\\)\n\nDenote  \n\n\\[\nC=\\sum_{u\\in\\{1,2,4,5,7,8\\}}\\bigl(1+2\\cos\\tfrac{2\\pi u}{9}\\bigr)^{3}.\n\\]\n\nUsing the identity  \n\n\\[\n\\sum_{u\\in\\{1,2,4,5,7,8\\}}\\bigl(1+2\\cos\\tfrac{2\\pi u}{9}\\bigr)^{3}=36,\n\\]\n\n(which follows from expanding \\((1+z^{u}+z^{-u})^{3}\\) and summing over\n\\(u\\) with \\(z=e^{2\\pi i/9}\\)), we obtain\n\n\\[\n\\begin{aligned}\n\\sum_{k}S(k)^{3}\n&= 486\\cdot81^{3}\n   +162\\cdot81^{3}\n   +18\\cdot243^{3}\n   +6\\cdot243^{3}                                 \\\\\n&= 486\\cdot531\\,441\n   +162\\cdot531\\,441\n   +18\\cdot14\\,348\\,907\n   +6\\cdot14\\,348\\,907                           \\\\\n&=5\\cdot3^{18}=5\\cdot387\\,420\\,489\n   =1\\,937\\,102\\,445 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 6.   The number \\(N\\)\n\nFrom (1),\n\n\\[\nN=\\frac{1}{3^{7}}\\sum_{k}S(k)^{3}\n  =\\frac{5\\cdot3^{18}}{3^{7}}\n  =5\\cdot3^{11}=5\\cdot177\\,147=885\\,735 .\n\\]\n\n--------------------------------------------------------------------\n### 7.   Remainder modulo \\(1000\\)\n\n\\[\n885\\,735 \\equiv 735 \\pmod{1000}.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{735}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 735

    \n

    Extracted Answer: 735

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nf(x)=\\frac{(x-18)(x-72)(x-98)(x-k)}{x}= \\frac{N(x)}{x},\n\\qquad N(x)=(x-18)(x-72)(x-98)(x-k)\n\\]\n\nfor \\(x>0\\) and a positive parameter \\(k\\).\n\n--------------------------------------------------------------------\n### 1.  Critical points\n\n\\[\nf'(x)=\\frac{xN'(x)-N(x)}{x^{2}},\\qquad   \nf'(x)=0\\Longleftrightarrow H(x):=xN'(x)-N(x)=0 .\n\\]\n\nWrite  \n\n\\[\nN(x)=x^{4}-S_{1}x^{3}+S_{2}x^{2}-S_{3}x+S_{4},\n\\]\n\nwhere  \n\n\\[\n\\begin{aligned}\nS_{1}&=18+72+98+k = 188+k,\\\\\nS_{2}&=18\\cdot72+18\\cdot98+72\\cdot98+ (18+72+98)k =10116+188k,\\\\\nS_{3}&=18\\cdot72\\cdot98+(18\\cdot72+18\\cdot98+72\\cdot98)k =127008+10116k,\\\\\nS_{4}&=18\\cdot72\\cdot98\\cdot k =127008\\,k .\n\\end{aligned}\n\\]\n\nSince  \n\n\\[\nN'(x)=4x^{3}-3S_{1}x^{2}+2S_{2}x-S_{3},\n\\]\n\nwe obtain  \n\n\\[\n\\begin{aligned}\nH(x)&=xN'(x)-N(x)  \\\\\n    &=3x^{4}-2S_{1}x^{3}+S_{2}x^{2}-S_{4}\\\\\n    &=3x^{4}-(376+2k)x^{3}+(10116+188k)x^{2}-127008k .\n\\end{aligned}\n\\]\n\nThe three positive roots of \\(H\\) are the two minima of \\(f\\) (in the intervals where\n\\(f<0\\)) and one interior maximum.\n\n--------------------------------------------------------------------\n### 2.  When are the two minima equal?\n\nAt a minimum \\(x_{0}\\),\n\n\\[\nf(x_{0}) = \\frac{N(x_{0})}{x_{0}} = N'(x_{0})=:m .\n\\]\n\nThus the equation \\(N(x)=mx\\) has a **double** root at each minimum.\nIf the global minimum is attained at exactly two points, then\n\n\\[\nN(x)-mx=(x-\\alpha)^{2}(x-\\gamma)^{2},\n\\qquad\\alpha\\neq\\gamma>0 .\n\\]\n\nExpanding both sides and comparing coefficients gives\n\n\\[\n\\begin{cases}\n\\alpha+\\gamma =\\displaystyle\\frac{188+k}{2},\\\\[4pt]\n\\alpha\\gamma = -\\dfrac{k^{2}}{8}+47k+640,\\\\[4pt]\n(\\alpha\\gamma)^{2}=S_{4}=127008k .\n\\end{cases}\n\\]\n\nEliminating \\(\\alpha,\\gamma\\) yields a single equation for \\(k\\):\n\n\\[\n\\Bigl(-\\frac{k^{2}}{8}+47k+640\\Bigr)^{2}=127008k .\n\\]\n\nMultiplying by \\(64\\),\n\n\\[\n(k^{2}-376k-5120)^{2}=8\\,128\\,512\\,k,\n\\]\n\nwhich simplifies to the quartic\n\n\\[\nk^{4}-752k^{3}+131136k^{2}-4\\,278\\,272k+26\\,214\\,400=0 .\n\\]\n\n--------------------------------------------------------------------\n### 3.  Solving the quartic\n\nFactoring gives  \n\n\\[\n(k-8)(k-32)(k^{2}-712k+102400)=0,\n\\]\n\nso the four real solutions are  \n\n\\[\nk=8,\\qquad k=32,\\qquad k=200,\\qquad k=512 .\n\\]\n\n--------------------------------------------------------------------\n### 4.  Selecting the admissible \\(k\\)\n\nFor the two minima to be **positive**, the product \\(\\alpha\\gamma\\) must be positive:\n\n\\[\n\\alpha\\gamma = -\\frac{k^{2}}{8}+47k+640 >0 .\n\\]\n\nEvaluating this expression:\n\n\\[\n\\begin{array}{c|c}\nk & \\alpha\\gamma\\\\ \\hline\n8   & 1008>0\\\\\n32  & 2016>0\\\\\n200 & 5040>0\\\\\n512 & -8064<0\n\\end{array}\n\\]\n\nThus \\(k=512\\) gives one root \\(\\alpha\\) negative and cannot produce two minima on the\npositive axis.  The admissible values are  \n\n\\[\nk=8,\\;32,\\;200 .\n\\]\n\n--------------------------------------------------------------------\n### 5.  Sum of the three values\n\n\\[\n8+32+200 = 240 .\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{240}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 240

    \n

    Extracted Answer: 240

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The inequalities can be rewritten by factoring:\n\n\\[\n\\begin{aligned}\nx-yz<y-zx &\\iff (x-y)(1+z)<0,\\\\[2pt]\ny-zx<z-xy &\\iff (y-z)(1+x)<0 .\n\\end{aligned}\n\\]\n\nHence the signs of \\(x-y,\\;y-z,\\;1+z,\\;1+x\\) must be opposite in each product.\nFour sign\u2011patterns are possible:\n\n\\[\n\\begin{array}{c|c|c|c}\nx+1 & z+1 & \\text{implied order of }x,y,z & \\text{region}\\\\ \\hline\n>0 & >0 & x<y<z & \\text{bounded}\\\\\n>0 & <0 & y<\\min\\{x,z\\} & \\text{unbounded}\\\\\n<0 & >0 & \\max\\{x,z\\}<y & \\text{unbounded}\\\\\n<0 & <0 & x>y>z & \\text{impossible (sum }75)\n\\end{array}\n\\]\n\nOnly the first case can give a finite region.  \nWith \\(x+y+z=75\\) and the inequalities\n\n\\[\nx>-1,\\qquad x<y,\\qquad y<z,\n\\]\n\nwrite \\(z=75-x-y\\). The conditions become\n\n\\[\n\\begin{cases}\nx>-1,\\\\\nx<y,\\\\\ny<\\dfrac{75-x}{2}.\n\\end{cases}\n\\]\n\nIn the \\((x,y)\\)-plane this is the interior of the triangle bounded by\n\n\\[\nx=-1,\\qquad y=x,\\qquad y=\\frac{75-x}{2},\n\\]\n\nwhose vertices are \\((-1,-1),\\;(-1,38),\\;(25,25)\\).\n\nIts area in the \\((x,y)\\)-plane is\n\n\\[\n\\frac12\\cdot 39\\cdot 26=507 .\n\\]\n\nThe plane \\(x+y+z=75\\) makes an angle with the \\(xy\\)-plane whose normal is \\((1,1,1)\\); the area element is multiplied by \\(\\lVert(1,1,1)\\rVert=\\sqrt3\\).  \nHence the actual area of the bounded region is\n\n\\[\n507\\sqrt3 .\n\\]\n\nThus \\(a=507,\\;b=3\\) and\n\n\\[\na+b=507+3=510 .\n\\]\n\n\\[\n\\boxed{510}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 510

    \n

    Extracted Answer: 510

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 27 cells of a $3\\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. \n | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | \n | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | \n | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | \n The number of different ways to fill such a grid can be written as $p^a\\cdot q^b\\cdot r^c\\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\\cdot a+q\\cdot b+r\\cdot c+s\\cdot d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The grid consists of three \\(3\\times 3\\) blocks.  \nFor each number \\(1,\\dots ,9\\) we must place it\n\n* once in each of the three rows,\n* once in each of the three blocks.\n\nHence for a fixed number its positions are described by a permutation\n\\(\\sigma\\in S_{3}\\):\n\\[\n\\sigma(i)=\\text{the block in which the number occurs in row }i .\n\\]\n\n---\n\n### 1.  Counting the assignments of permutations\n\nLet \\(n_\\sigma\\) be the number of symbols that use permutation \\(\\sigma\\).\nSince there are nine symbols,\n\\[\n\\sum_{\\sigma\\in S_3} n_\\sigma = 9 .\n\\]\n\nFor each ordered pair \\((i,j)\\) (row \\(i\\), block \\(j\\)) the number of symbols\nwith \\(\\sigma(i)=j\\) must be \\(3\\) (there are three columns in that block).  \nWriting the six permutations of \\(S_3\\) as  \n\n\\[\n\\begin{aligned}\n\\sigma_1&:(1,2,3),&\\sigma_2&:(2,1,3),&\\sigma_3&:(3,2,1),\\\\\n\\sigma_4&:(1,3,2),&\\sigma_5&:(2,3,1),&\\sigma_6&:(3,1,2),\n\\end{aligned}\n\\]\n\nthe conditions become  \n\n\\[\n\\begin{array}{c}\nn_1+n_4=3,\\; n_1+n_2=3,\\; n_1+n_3=3,\\\\\nn_2+n_5=3,\\; n_3+n_6=3,\\; n_4+n_5=3,\\\\\nn_3+n_5=3,\\; n_4+n_6=3,\\; n_2+n_6=3 .\n\\end{array}\n\\]\n\nSolving gives a one\u2011parameter family\n\n\\[\nn_1=n_5=n_6=k,\\qquad n_2=n_3=n_4=3-k,\n\\]\n\nwith \\(k=0,1,2,3\\) (non\u2011negative integers).  \nFor each \\(k\\) the number of ways to assign the nine distinct symbols to the\npermutations is  \n\n\\[\n\\frac{9!}{k!^3\\,(3-k)!^3}.\n\\]\n\nHence the total number of macro\u2011assignments is\n\n\\[\nM=\\sum_{k=0}^{3}\\frac{9!}{k!^3(3-k)!^3}\n   =1680+45360+45360+1680=94080 .\n\\]\n\n---\n\n### 2.  Ordering within each macro\u2011cell\n\nA macro\u2011cell \\((\\text{row }i,\\text{ block }j)\\) contains exactly three\ndifferent numbers.  Their order in the three columns of that block can be chosen\nin \\(3!\\) ways, independently for each of the \\(3\\times 3=9\\) macro\u2011cells.\nThus we obtain an extra factor \\((3!)^{9}=6^{9}=10\\,077\\,696\\).\n\nHence the total number of fillings is  \n\n\\[\nN = M\\cdot (3!)^{9}=94080\\cdot 6^{9}\n   = 2^{16}\\cdot 3^{10}\\cdot5\\cdot7^{2}.\n\\]\n\n---\n\n### 3.  Computing \\(p a+q b+r c+s d\\)\n\nWriting \\(N=p^{a}q^{b}r^{c}s^{d}\\) with distinct primes \\(p,q,r,s\\) we have  \n\n\\[\np=2,\\;a=16;\\qquad q=3,\\;b=10;\\qquad r=5,\\;c=1;\\qquad s=7,\\;d=2.\n\\]\n\nTherefore  \n\n\\[\np a+q b+r c+s d\n=2\\cdot16+3\\cdot10+5\\cdot1+7\\cdot2\n=32+30+5+14=81.\n\\]\n\n\\[\n\\boxed{81}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 81

    \n

    Extracted Answer: 81

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the line containing \\(A,B,C,D,E,F\\) be the \\(x\\)-axis.  \nPlace \\(A\\) at the origin: \\(A=(0,0)\\).\n\n---\n\n### 1.  Determine the coordinates of the collinear points  \n\n\\[\n\\begin{aligned}\nAC&=26\\quad\\Rightarrow\\quad C=(26,0),\\\\[2mm]\nBD&=22\\quad\\Rightarrow\\quad D-B=22,\\\\[2mm]\nCE&=31\\quad\\Rightarrow\\quad E-C=31\\;\\Rightarrow\\;E=(57,0),\\\\[2mm]\nDF&=33\\quad\\Rightarrow\\quad F-D=33,\\\\[2mm]\nAF&=73\\quad\\Rightarrow\\quad F=(73,0).\n\\end{aligned}\n\\]\n\nFrom \\(F-D=33\\) we get \\(D=73-33=40\\).  \nThen \\(BD=22\\) gives \\(B=40-22=18\\).\n\nThus  \n\n\\[\nA(0,0),\\;B(18,0),\\;C(26,0),\\;D(40,0),\\;E(57,0),\\;F(73,0).\n\\]\n\n---\n\n### 2.  Locate point \\(G\\)\n\nLet \\(G=(x,y)\\) with \\(y\\neq0\\).  \nGiven \\(CG=40\\) and \\(DG=30\\),\n\n\\[\n\\begin{cases}\n(x-26)^2+y^2 = 40^2 =1600,\\\\\n(x-40)^2+y^2 = 30^2 = 900 .\n\\end{cases}\n\\]\n\nSubtract the second equation from the first:\n\n\\[\n(x-26)^2-(x-40)^2 = 700\n\\]\n\\[\n\\Longrightarrow\\;28x-924 = 700 \\;\\Longrightarrow\\; x=58 .\n\\]\n\nPlug \\(x=58\\) into \\((x-40)^2+y^2=900\\):\n\n\\[\n(18)^2 + y^2 = 900 \\;\\Longrightarrow\\; y^2 = 576 \\;\\Longrightarrow\\; y = \\pm24 .\n\\]\n\nTake \\(y=24\\) (the sign does not affect the area).  \nHence \\(G=(58,24)\\).\n\n---\n\n### 3.  Area of \\(\\triangle BGE\\)\n\nPoints \\(B\\) and \\(E\\) lie on the \\(x\\)-axis, so segment \\(\\overline{BE}\\) is horizontal.  \n\n\\[\nBE = 57-18 = 39 .\n\\]\n\nThe perpendicular distance from \\(G\\) to line \\(BE\\) (the \\(x\\)-axis) is \\(|y| = 24\\).\n\nTherefore\n\n\\[\n\\text{Area} = \\frac12 \\times (\\text{base}) \\times (\\text{height})\n           = \\frac12 \\times 39 \\times 24\n           = 468 .\n\\]\n\n\\[\n\\boxed{468}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 468

    \n

    Extracted Answer: 468

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nd=n+2\\qquad (d\\ge 3,\\;n\\in\\mathbb Z^+)\n\\]\n\nThen  \n\n\\[\nn+3=d+1,\\qquad n^{2}+9=(d-2)^2+9=d^{2}-4d+13 .\n\\]\n\nThe condition \u201c\\(n+2\\) divides \\(3(n+3)(n^{2}+9)\\)\u201d becomes  \n\n\\[\nd\\mid 3(d+1)(d^{2}-4d+13).\n\\]\n\nConsider the right\u2011hand side modulo \\(d\\):\n\n\\[\n\\begin{aligned}\n3(d+1)(d^{2}-4d+13)\n&\\equiv 3\\cdot1\\cdot13\\pmod{d}\\\\\n&=39\\pmod{d}.\n\\end{aligned}\n\\]\n\nHence  \n\n\\[\nd\\mid 3(d+1)(d^{2}-4d+13)\\iff d\\mid 39 .\n\\]\n\nSince \\(d=n+2\\ge 3\\), the possible values of \\(d\\) are the divisors of \\(39\\) that are at least \\(3\\):\n\n\\[\nd\\in\\{3,13,39\\}.\n\\]\n\nCorresponding \\(n=d-2\\) values are  \n\n\\[\nn=1,\\;11,\\;37 .\n\\]\n\nAll three satisfy the original divisibility (direct substitution confirms).\n\nThe required sum is  \n\n\\[\n1+11+37=49.\n\\]\n\n\\[\n\\boxed{49}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 49

    \n

    Extracted Answer: 49

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nA piecewise linear periodic function is defined by $f(x)=\\begin{cases}x&\\text{if }x\\in[-1,1)\\\\2-x&\\text{if }x\\in[1,3)\\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\\frac{a+b\\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The function  \n\n\\[\nf(x)=\\begin{cases}\nx,&-1\\le x<1\\\\[2mm]\n2-x,&1\\le x<3\n\\end{cases},\\qquad f(x+4)=f(x)\n\\]\n\nhas period \\(4\\).  \nFor any \\(x\\) write  \n\n\\[\nx=4n+t,\\qquad t\\in[-1,3),\\;n\\in\\mathbb Z .\n\\]\n\nThen  \n\n\\[\nf(x)=\\begin{cases}\nt,&-1\\le t<1\\\\\n2-t,&1\\le t<3 .\n\\end{cases}\n\\tag{1}\n\\]\n\nThe parabola is \\(x=34y^{2}\\;(x\\ge 0)\\).  \nAn intersection point must satisfy  \n\n\\[\ny=f(34y^{2}) .\n\\tag{2}\n\\]\n\nPut \\(x=34y^{2}=4n+t\\) with \\(t\\in[-1,3)\\).  \nFrom (1) there are two possibilities.\n\n---\n\n### 1.  \\(t=y\\)  \n\nThen \\(-1\\le y<1\\) and  \n\n\\[\n34y^{2}=4n+y\\Longrightarrow 34y^{2}-y=4n .\n\\tag{3}\n\\]\n\nFor each integer \\(n\\) this quadratic gives the two solutions  \n\n\\[\ny=\\frac{1\\pm\\sqrt{1+544n}}{68}.\n\\tag{4}\n\\]\n\nSince \\(y\\in[-1,1)\\) the solutions are admissible for every \\(n\\)\nfor which \\(34y^{2}\\le 34\\).  \nBecause \\(0\\le34y^{2}\\le34\\), from \\(34y^{2}=4n+t\\) with \\(t\\ge-1\\) we get\n\\(0\\le4n+3\\), i.e. \\(n\\ge0\\); and from \\(4n-1\\le34\\) we obtain \\(n\\le8\\).\nThus \\(n=0,1,\\dots ,8\\).  \n\nFor each \\(n\\) the sum of the two roots of (3) is  \n\n\\[\n\\frac{1}{34}.\n\\]\n\nHence the total contribution of this case is  \n\n\\[\n9\\cdot\\frac1{34}=\\frac{9}{34}=\\frac{18}{68}.\n\\tag{5}\n\\]\n\n---\n\n### 2.  \\(t=2-y\\)  \n\nNow \\(1\\le t<3\\) which gives \\(-1<y\\le1\\) and  \n\n\\[\n34y^{2}=4n+2-y\\Longrightarrow 34y^{2}+y-2=4n .\n\\tag{6}\n\\]\n\nIts solutions are  \n\n\\[\ny=\\frac{-1\\pm\\sqrt{273+544n}}{68}.\n\\tag{7}\n\\]\n\nAgain \\(n=0,1,\\dots ,8\\).  \nFor \\(n=0,\\dots ,7\\) both roots lie in \\((-1,1]\\); for \\(n=8\\) only the\n\u2018\\(+\\)\u2019 root is admissible (the \u2018\\(-\\)\u2019 root is \\(<-1\\)).  \n\nThe sum of the two roots of (6) for any \\(n\\) equals  \n\n\\[\n-\\frac1{34}.\n\\]\n\nThus the sum of all valid roots of this case is  \n\n\\[\n8\\!\\left(-\\frac1{34}\\right)+\\frac{-1+\\sqrt{4625}}{68}\n   =-\\frac{16}{68}+\\frac{-1+\\sqrt{4625}}{68}\n   =\\frac{-17+\\sqrt{4625}}{68}.\n\\tag{8}\n\\]\n\n---\n\n### 3.  Total sum of the \\(y\\)\u2013coordinates\n\nAdding (5) and (8),\n\n\\[\nS=\\frac{18}{68}+\\frac{-17+\\sqrt{4625}}{68}\n   =\\frac{1+\\sqrt{4625}}{68}\n   =\\frac{1+5\\sqrt{185}}{68}.\n\\]\n\nThe expression \\(\\displaystyle\\frac{a+b\\sqrt{c}}{d}\\) has  \n\n\\[\na=1,\\;b=5,\\;c=185,\\;d=68,\n\\]\n\nwith \\(\\gcd(a,b,d)=1\\) and \\(c\\) square\u2011free.\n\nHence  \n\n\\[\na+b+c+d = 1+5+185+68 = 259.\n\\]\n\n\\[\n\\boxed{259}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 259

    \n

    Extracted Answer: 259

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe product $ \\prod_{k=4}^{63} \\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})} = \\frac{\\log_4(5^{15})}{\\log_5(5^{12})} \\cdot \\frac{\\log_5(5^{24})}{\\log_6(5^{21})} \\cdot \\frac{\\log_6(5^{35})}{\\log_7(5^{32})} \\cdots \\frac{\\log_{63}(5^{3968})}{\\log_{64}(5^{3965})} $ is equal to $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\n\\prod_{k=4}^{63}\\frac{\\log_k\\!\\left(5^{k^{2}-1}\\right)}{\\log_{k+1}\\!\\left(5^{k^{2}-4}\\right)}\n= \\prod_{k=4}^{63}\n\\frac{(k^{2}-1)\\ln5/\\ln k}{(k^{2}-4)\\ln5/\\ln(k+1)}\n= \\prod_{k=4}^{63}\\frac{k^{2}-1}{k^{2}-4}\\cdot\\frac{\\ln(k+1)}{\\ln k}\n\\]\n\nSince \\(k^{2}-1=(k-1)(k+1)\\) and \\(k^{2}-4=(k-2)(k+2)\\),\n\n\\[\n\\frac{k^{2}-1}{k^{2}-4}= \\frac{k-1}{k-2}\\cdot\\frac{k+1}{k+2}.\n\\]\n\nThus\n\n\\[\nP=\\Bigl(\\prod_{k=4}^{63}\\frac{k-1}{k-2}\\Bigr)\n   \\Bigl(\\prod_{k=4}^{63}\\frac{k+1}{k+2}\\Bigr)\n   \\Bigl(\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\\Bigr).\n\\]\n\nEach product telescopes:\n\n1. \\(\\displaystyle\\prod_{k=4}^{63}\\frac{k-1}{k-2}\n   =\\frac{3}{2}\\cdot\\frac{4}{3}\\cdots\\frac{62}{61}\n   =\\frac{62}{2}=31.\\)\n\n2. \\(\\displaystyle\\prod_{k=4}^{63}\\frac{k+1}{k+2}\n   =\\frac{5}{6}\\cdot\\frac{6}{7}\\cdots\\frac{64}{65}\n   =\\frac{5}{65}=\\frac1{13}.\\)\n\n3. \\(\\displaystyle\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\n   =\\frac{\\ln5}{\\ln4}\\cdot\\frac{\\ln6}{\\ln5}\\cdots\\frac{\\ln64}{\\ln63}\n   =\\frac{\\ln64}{\\ln4}\n   =\\log_{4}64=3.\\)\n\nMultiplying,\n\n\\[\nP=31\\cdot\\frac1{13}\\cdot3=\\frac{93}{13}.\n\\]\n\nThus \\(m=93,\\;n=13\\) (relatively prime) and  \n\n\\[\nm+n=93+13=106.\n\\]\n\n\\[\n\\boxed{106}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 106

    \n

    Extracted Answer: 106

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Label the unit line segments as follows.\n\n\\[\n\\begin{array}{c}\n\\text{Top edges: }T_1,T_2\\\\\n\\text{Bottom edges: }B_1,B_2\\\\\n\\text{Left edges: }L_1,L_2\\\\\n\\text{Right edges: }R_1,R_2\\\\\n\\text{Middle vertical edges: }M_{v1},M_{v2}\\\\\n\\text{Middle horizontal edges: }M_{h1},M_{h2}\n\\end{array}\n\\]\n\nEach of the four unit squares must have exactly two red sides.\nLet a red edge be denoted by \\(1\\) and a blue edge by \\(0\\).\nIntroduce the binary variables  \n\n\\[\n\\begin{aligned}\n&a=M_{v1},\\;b=M_{v2},\\;c=M_{h1},\\;d=M_{h2},\\\\\n&p=T_1,\\;q=T_2,\\;r=B_1,\\;s=B_2,\\\\\n&u=L_1,\\;v=L_2,\\;w=R_1,\\;x=R_2 .\n\\end{aligned}\n\\]\n\nThe condition \u201ctwo red sides\u201d for each of the four squares gives four linear\nequations:\n\n\\[\n\\begin{cases}\np+u+a+c=2\\\\\nq+w+a+d=2\\\\\nr+v+b+c=2\\\\\ns+x+b+d=2\\qquad (1)\n\\end{cases}\n\\]\n\nAll variables are \\(0\\) or \\(1\\).\n\n--------------------------------------------------------------------\n### Fix the interior edges\n\nThe interior edges are the four variables \\(a,b,c,d\\).\nFor a fixed choice of \\((a,b,c,d)\\) each equation in (1) involves a\ndifferent pair of outer edges:\n\n\\[\n\\begin{aligned}\np+u &=2-(a+c),\\\\\nq+w &=2-(a+d),\\\\\nr+v &=2-(b+c),\\\\\ns+x &=2-(b+d).\n\\end{aligned}\n\\tag{2}\n\\]\n\nFor a pair of binary variables the number of possibilities for a given\nsum is  \n\n\\[\nf(s)=\\begin{cases}\n1 & s=0\\text{ or }2,\\\\[2pt]\n2 & s=1,\\\\[2pt]\n0 & \\text{otherwise}.\n\\end{cases}\n\\]\n\nHence, for a fixed interior assignment the number of ways to colour the\nouter edges equals  \n\n\\[\nf\\bigl(2-(a+c)\\bigr)\\,\nf\\bigl(2-(a+d)\\bigr)\\,\nf\\bigl(2-(b+c)\\bigr)\\,\nf\\bigl(2-(b+d)\\bigr).\n\\]\n\nBecause \\(a,c,b,d\\in\\{0,1\\}\\), each sum \\(a+c,\\;a+d,\\;b+c,\\;b+d\\) is\n\\(0,1,\\) or \\(2\\); consequently the factor is \\(2\\) exactly when the\ncorresponding pair contains one \\(0\\) and one \\(1\\), and it is \\(1\\) when\nthe pair is equal.  \n\nDefine\n\n\\[\nN(a,b,c,d)=\\bigl[ a\\ne c\\bigr]+\\bigl[ a\\ne d\\bigr]+\\bigl[ b\\ne c\\bigr]\n+\\bigl[ b\\ne d\\bigr].\n\\]\n\nThen the number of outer colourings for that interior choice is\n\\(2^{\\,N(a,b,c,d)}\\).\n\n--------------------------------------------------------------------\n### Counting all interior choices\n\nThe four interior bits can be viewed as two binary strings  \n\\(A=(a,b)\\) and \\(C=(c,d)\\).  The quantity \\(N\\) counts the mismatches\nbetween \\(A\\) and \\(C\\) over all four cross\u2011pairs, and one obtains\n\n\\[\nN=2\\bigl(w_A+w_C-w_Aw_C\\bigr),\n\\]\nwhere \\(w_A=a+b\\) and \\(w_C=c+d\\) are the numbers of 1\u2019s in the strings.\n\nFrom this we get the possible values:\n\n* **\\(N=0\\)** when \\(A=C\\) (all four interior edges equal).  \n  Two assignments: \\((0,0,0,0)\\) and \\((1,1,1,1)\\).  \n  Contribution: \\(2\\cdot2^{0}=2\\).\n\n* **\\(N=4\\)** when the two strings are opposite, i.e. \\(A=(0,0), C=(1,1)\\)\n  or \\(A=(1,1), C=(0,0)\\).  \n  Two assignments.  \n  Contribution: \\(2\\cdot2^{4}=32\\).\n\n* **\\(N=2\\)** for all remaining \\(16-4=12\\) interior assignments.  \n  Contribution: \\(12\\cdot2^{2}=48\\).\n\nAdding them gives the total number of colourings\n\n\\[\n2+48+32 = 82.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{82}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 82

    \n

    Extracted Answer: 82

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Overview**\n\nPlace \\(\\triangle ABC\\) in the plane with  \n\n\\[\nA=(0,0),\\qquad B=(28,0),\\qquad C=(x,y)\n\\]\n\nso that \\(AB=28\\).  \nThe points on the sides are\n\n\\[\n\\begin{aligned}\nD&=A+\\frac17AB=(4,0), &\nE&=A+\\frac57AB=(20,0),\\\\\nF&=A+\\frac17AC=\\Bigl(\\frac{x}{7},\\frac{y}{7}\\Bigr), &\nG&=A+\\frac57AC=\\Bigl(\\frac{5x}{7},\\frac{5y}{7}\\Bigr).\n\\end{aligned}\n\\]\n\n(The given lengths give the fractions \\(\\frac17,\\frac57\\) on both sides because  \n\n\\[\nAD:DE:EB=4:16:8=1:4:2,\\qquad \nAF:FG:GC=13:52:26=1:4:2 .\n\\])\n\nThe reflections are\n\n\\[\n\\begin{aligned}\nM&=2F-D=\\Bigl(\\frac{2x}{7}-4,\\frac{2y}{7}\\Bigr),\\\\[2mm]\nN&=2E-G=\\Bigl(40-\\frac{5x}{7},-\\frac{5y}{7}\\Bigr).\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 1.  Height of the triangle\n\nThe quadrilateral \\(DEGF\\) is \\(\\{D,E,G,F\\}\\) in that order.  \nUsing the shoelace formula,\n\n\\[\n\\begin{aligned}\n[DEGF]\n&=\\frac12\\Bigl((4\\cdot0+20\\cdot\\frac{5y}{7}+\\frac{5x}{7}\\cdot\\frac{y}{7}+ \\frac{x}{7}\\cdot0) \\\\\n&\\qquad\\ -\\ (0\\cdot20+\\;0\\cdot\\frac{5x}{7}+\\frac{5y}{7}\\cdot\\frac{x}{7}+ \\frac{y}{7}\\cdot4 )\\Bigr)\\\\[1mm]\n&=\\frac12\\Bigl(20\\cdot\\frac{5y}{7}-4\\cdot\\frac{y}{7}\\Bigr)\n =\\frac{1248}{91}\\,\\frac{y}{2}= \\frac{624}{91}\\,y .\n\\end{aligned}\n\\]\n\nThe problem states \\([DEGF]=288\\); hence\n\n\\[\n\\frac{624}{91}\\,y=288\\qquad\\Longrightarrow\\qquad y=42 .\n\\]\n\nThus the altitude from \\(C\\) to \\(\\overline{AB}\\) is \\(h=y=42\\).\n\n--------------------------------------------------------------------\n### 2.  Area of \\(\\triangle ABC\\)\n\n\\[\n[ABC]=\\frac12\\cdot AB\\cdot h=\\frac12\\cdot 28\\cdot 42=14\\cdot 42=588.\n\\]\n\n--------------------------------------------------------------------\n### 3.  Area of the heptagon \\(AFNBCEM\\)\n\nWrite the vertices in order:\n\n\\[\nA,\\;F,\\;N,\\;B,\\;C,\\;E,\\;M .\n\\]\n\nUsing the coordinates found above (with \\(y=42\\) and \\(\\,x=\\sqrt{91^{2}-42^{2}}=7\\sqrt{133}\\)), the\nshoelace sum is\n\n\\[\n\\begin{aligned}\nS&=x_Ay_F-y_Ax_F\n   +x_Fy_N-y_Fx_N\n   +x_Ny_B-y_Nx_B\n   +x_By_C-y_Bx_C\n   +x_Cy_E-y_Cx_E\n   +x_Ey_M-y_Ex_M\n   +x_My_A-y_Mx_A \\\\[1mm]\n&=0-240+840+1176-840+240+0=1176 .\n\\end{aligned}\n\\]\n\nHence\n\n\\[\n[AFNBCEM]=\\frac12\\,S=\\frac12\\cdot1176=588 .\n\\]\n\nA vector\u2011geometry check also shows that the signed sum of the\ndeterminants of successive vertices equals \\(\\det(\\overrightarrow{AB},\n\\overrightarrow{AC})\\), i.e. the area of \\(\\triangle ABC\\).\n\n--------------------------------------------------------------------\n### 4.  Answer\n\n\\[\n\\boxed{588}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 588

    \n

    Extracted Answer: 588

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Factor  \n\\[\n2025=3^{4}\\cdot5^{2}.\n\\]\n\nA divisor of \\(2025\\) is \\(3^{i}5^{j}\\) with \\(0\\le i\\le4,\\;0\\le j\\le2\\).  \nHence  \n\n\\[\n|A|=(4+1)(2+1)=15 .\n\\]\n\n---\n\n### When does a subset have lcm \\(2025\\)?\n\nThe lcm of a set of divisors takes, for each prime, the **maximum** exponent appearing among the chosen numbers.\n\nThus a subset \\(B\\subseteq A\\) has \\(\\operatorname{lcm}(B)=3^{4}5^{2}=2025\\) iff  \n\n* at least one element of \\(B\\) has exponent \\(4\\) of the prime \\(3\\);\n* at least one element of \\(B\\) has exponent \\(2\\) of the prime \\(5\\).\n\nDefine  \n\n\\[\nS_{3}=\\{3^{4}5^{j}\\mid j=0,1,2\\}=\\{81,405,2025\\},\n\\qquad\nS_{5}=\\{3^{i}5^{2}\\mid i=0,1,2,3,4\\}\n =\\{25,75,225,675,2025\\}.\n\\]\n\n\\(|S_{3}|=3,\\ |S_{5}|=5,\\) and \\(|S_{3}\\cap S_{5}|=1\\) (the element \\(2025\\)).\n\nSo we need subsets that intersect **both** \\(S_{3}\\) and \\(S_{5}\\).\n\n---\n\n### Counting such subsets\n\nTotal subsets of \\(A\\): \\(2^{15}\\).\n\nLet  \n\n* \\(A_{3}\\) = subsets containing **no** element of \\(S_{3}\\).  \n  \\(|A_{3}| = 2^{15-3}=2^{12}\\).\n\n* \\(A_{5}\\) = subsets containing **no** element of \\(S_{5}\\).  \n  \\(|A_{5}| = 2^{15-5}=2^{10}\\).\n\n* \\(A_{3}\\cap A_{5}\\) = subsets containing none of \\(S_{3}\\cup S_{5}\\).  \n  \\(|S_{3}\\cup S_{5}| = 3+5-1 = 7\\), so  \n  \\(|A_{3}\\cap A_{5}| = 2^{15-7}=2^{8}\\).\n\nBy inclusion\u2013exclusion, the number of subsets intersecting both \\(S_{3}\\) and \\(S_{5}\\) is  \n\n\\[\n2^{15} - 2^{12} - 2^{10} + 2^{8}\n = 32768 - 4096 - 1024 + 256\n = 27904.\n\\]\n\nEvery such subset is non\u2011empty, so these are exactly the favorable subsets.\n\n---\n\n### Probability\n\n\\[\n\\text{Probability}\n = \\frac{27904}{2^{15}}\n = \\frac{27904}{32768}\n = \\frac{109}{128}\n\\]\n(after reducing the fraction).\n\nThus \\(m=109,\\ n=128\\) and  \n\n\\[\nm+n = 109+128 = 237.\n\\]\n\n\\[\n\\boxed{237}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 237

    \n

    Extracted Answer: 237

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n* \\(O\\) be the centre of \\(\\omega _2\\) (radius \\(15\\)),\n* \\(A\\) be the centre of \\(\\omega _1\\) (radius \\(6\\)),\n* \\(B\\) the point where the two circles are internally tangent,\n* \\(C\\) the antipode of \\(B\\) on \\(\\omega_2\\) (\\(BC\\) is a diameter),\n* \\(D\\) the point on \\(\\omega _2\\) with \\(AD\\perp BC\\).\n\n--------------------------------------------------------------------\n### 1.  Choose coordinates  \n\nPlace \\(O\\) at the origin and let the diameter \\(BC\\) be horizontal.\n\n\\[\nB=(15,0),\\qquad C=(-15,0)\n\\]\n\nSince \\(OA=15-6=9\\) and \\(A\\) lies on \\(OB\\),\n\n\\[\nA=(9,0).\n\\]\n\nThe line \\(AD\\) is perpendicular to the horizontal line \\(BC\\), so \\(AD\\) is the\nvertical line through \\(A\\); intersecting \\(\\omega_2\\) gives\n\n\\[\nD=(9,12)\\quad\\text{or}\\quad D=(9,-12).\n\\]\n\nBecause the rectangle will be placed above the centre of \\(\\omega_1\\), we take  \n\n\\[\nD=(9,12).\n\\]\n\n--------------------------------------------------------------------\n### 2.  Describe the rectangle  \n\nSince the rectangle is **inscribed** in \\(\\omega_1\\), all four of its vertices lie on\n\\(\\omega_1\\).  \nLet the rectangle have centre at \\(A\\); because a rectangle\u2019s circum\u2011centre is\nthe intersection of its diagonals, the centre must be the centre of the\ncircumscribing circle \\(\\omega_1\\).\n\nLet  \n\n* half\u2011width \\(w\\) (distance from the centre to the right\u2013hand side),\n* half\u2011height \\(h\\) (distance from the centre to the top side).\n\nThen  \n\n\\[\n\\begin{aligned}\nx_R&=9+w, & x_L&=9-w,\\\\\ny_T&=h,   & y_B&=-h .\n\\end{aligned}\n\\]\n\nThe vertices are  \n\n\\[\n\\begin{aligned}\nE&(x_R,y_B)=(9+w,-h),\\\\\nF&(x_R,y_T)=(9+w, h),\\\\\nG&(x_L,y_T)=(9-w, h),\\\\\nH&(x_L,y_B)=(9-w,-h).\n\\end{aligned}\n\\]\n\nBecause the vertices lie on \\(\\omega_1\\) (radius \\(6\\)),\n\n\\[\nw^{2}+h^{2}=6^{2}=36\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 3.  Use the area condition  \n\nThe problem states that  \n\n\\[\n\\text{Area}\\,\\triangle DGF=\\text{Area}\\,\\triangle CHG .\n\\]\n\n*Triangle \\(DGF\\).*  \nIts base is \\(GF\\) (the top side of the rectangle) of length \\(2w\\).  \nIts height is the vertical distance from \\(D\\) to the line \\(y=h\\):\n\\(\\;12-h\\). Hence  \n\n\\[\n[\\triangle DGF]=\\tfrac12(2w)(12-h)=w(12-h).\\tag{2}\n\\]\n\n*Triangle \\(CHG\\).*  \nIts base is \\(HG\\) (the left side) of length \\(2h\\).  \nThe distance from \\(C\\) to the vertical line \\(x=9-w\\) is\n\\((9-w)-(-15)=24-w\\). Therefore  \n\n\\[\n[\\triangle CHG]=\\tfrac12(2h)(24-w)=h(24-w).\\tag{3}\n\\]\n\nEquating (2) and (3),\n\n\\[\nw(12-h)=h(24-w).\\tag{4}\n\\]\n\nExpanding both sides gives  \n\n\\[\n12w-wh=24h-wh\\Longrightarrow 12w=24h\\Longrightarrow w=2h.\\tag{5}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Solve for \\(w\\) and \\(h\\)\n\nSubstituting \\(w=2h\\) into (1):\n\n\\[\n(2h)^2+h^2=36\\quad\\Longrightarrow\\quad5h^{2}=36\\quad\\Longrightarrow\\quad\nh^{2}= \\frac{36}{5},\\qquad\nh=\\frac{6}{\\sqrt5}=\\frac{6\\sqrt5}{5}.\n\\]\n\nHence  \n\n\\[\nw=2h=\\frac{12}{\\sqrt5}= \\frac{12\\sqrt5}{5}.\n\\]\n\n--------------------------------------------------------------------\n### 5.  Area of the rectangle  \n\nThe rectangle\u2019s side lengths are \\(2w\\) and \\(2h\\), so its area is  \n\n\\[\n\\text{Area}= (2w)(2h)=4wh=4\\cdot(2h)h=8h^{2}\n          =8\\left(\\frac{36}{5}\\right)=\\frac{288}{5}.\n\\]\n\nThus the area is \\(\\displaystyle \\frac{288}{5}\\).\nThe numerator and denominator are relatively prime, so  \n\n\\[\nm=288,\\qquad n=5,\\qquad m+n=288+5=293.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{293}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 293

    \n

    Extracted Answer: 293

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1.  Regions created by chords**\n\nIf we start with a disc (one region) and draw a chord, the number of regions increases by  \n\n\\[\n\\text{(number of interior intersections created by the new chord)}+1 .\n\\]\n\nHence after drawing \\(k\\) chords the number of regions is  \n\n\\[\nR=1+k+I ,\n\\]\n\nwhere \\(I\\) is the total number of interior intersection points of the drawn chords (no three chords meet at a single interior point, which holds a.s. for random chords).\n\nIn our problem \\(k=27\\) (the two diameters plus the 25 random chords), so  \n\n\\[\nR=28+I .\n\\]\n\nThus we only need the expected value of \\(I\\).\n\n--------------------------------------------------------------------\n\n**Step 2.  Intersections involving the two fixed diameters**\n\nThe two diameters intersect at the centre, contributing a deterministic intersection  \n\n\\[\nI_{\\text{centre}}=1 .\n\\]\n\nA random chord intersects the **vertical** diameter iff its endpoints lie in opposite halves of the disc, i.e. one endpoint in \\(\\{Q_1,Q_4\\}\\) and the other in \\(\\{Q_2,Q_3\\}\\).  \nAmong the six possible unordered quadrant\u2011pairs for a chord, four satisfy this condition, so\n\n\\[\nP(\\text{vertical intersection})=\\frac{4}{6}=\\frac23 .\n\\]\n\nThe same reasoning holds for the **horizontal** diameter, giving  \n\n\\[\nP(\\text{horizontal intersection})=\\frac23 .\n\\]\n\nHence for the 25 random chords\n\n\\[\nE[I_{\\text{vert}}]=25\\cdot\\frac23=\\frac{50}{3},\\qquad   \nE[I_{\\text{horiz}}]=25\\cdot\\frac23=\\frac{50}{3}.\n\\]\n\n--------------------------------------------------------------------\n\n**Step 3.  Intersections among the 25 random chords**\n\nTwo random chords are independent.  \nEach chord chooses an unordered pair of distinct quadrants uniformly from the six possibilities  \n\n\\[\n\\{1,2\\},\\{2,3\\},\\{3,4\\},\\{4,1\\} \\ (\\text{adjacent}),\\qquad\n\\{1,3\\},\\{2,4\\}\\ (\\text{opposite}).\n\\]\n\nLet the unordered pairs be \\(S\\) and \\(T\\).  \nTheir intersection size can be\n\n* **2** (the same pair) \u2013 probability \\(1/6\\);\n* **1** (they share exactly one quadrant) \u2013 probability \\(2/3\\);\n* **0** (disjoint) \u2013 probability \\(1/6\\).\n\nThe disjoint case splits further:\n\n* Adjacent\u2013adjacent (e.g. \\(\\{1,2\\}\\) with \\(\\{3,4\\}\\)) \u2013 chords never intersect.\n* Opposite\u2013opposite (e.g. \\(\\{1,3\\}\\) with \\(\\{2,4\\}\\)) \u2013 chords always intersect.\n\nAmong the three unordered disjoint pairs, two are adjacent\u2013adjacent and one is opposite\u2013opposite; hence for ordered pairs\n\n\\[\nP(\\text{disjoint, intersect})=\\frac{2}{36}=\\frac1{18},\\qquad\nP(\\text{disjoint, no intersect})=\\frac{4}{36}.\n\\]\n\nFor the other two situations one can check (by considering the relative order of the points inside the quadrants) that\n\n* If the two chords have the **same** unordered pair (adjacent or opposite), the probability they intersect is \\(\\tfrac12\\).\n* If they **share exactly one quadrant**, the probability they intersect is also \\(\\tfrac12\\).\n\nCollecting the contributions,\n\n\\[\n\\begin{aligned}\nP(\\text{intersection}) &=\n\\underbrace{\\frac{6}{36}\\cdot\\frac12}_{\\text{same pair}}\n+\\underbrace{\\frac{24}{36}\\cdot\\frac12}_{\\text{share one quadrant}}\n+\\underbrace{\\frac{2}{36}\\cdot1}_{\\text{disjoint opposite}}\\\\[2mm]\n&=\\frac{3}{36}+\\frac{12}{36}+\\frac{2}{36}\n=\\frac{17}{36}.\n\\end{aligned}\n\\]\n\nThus for any unordered pair of the 25 random chords\n\n\\[\np:=P(\\text{they intersect})=\\frac{17}{36}.\n\\]\n\nThere are \\(\\binom{25}{2}=300\\) such pairs, so\n\n\\[\nE[I_{\\text{random}}]=300\\cdot\\frac{17}{36}\n=\\frac{300}{36}\\cdot17\n=\\frac{25}{3}\\cdot17\n=\\frac{425}{3}.\n\\]\n\n--------------------------------------------------------------------\n\n**Step 4.  Expected total number of interior intersections**\n\n\\[\n\\begin{aligned}\nE[I] &= I_{\\text{centre}}\n      +E[I_{\\text{vert}}]\n      +E[I_{\\text{horiz}}]\n      +E[I_{\\text{random}}]  \\\\[2mm]\n     &=1+\\frac{50}{3}+\\frac{50}{3}+\\frac{425}{3} \\\\[2mm]\n     &=1+\\frac{525}{3}=1+175=176 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 5.  Expected number of regions**\n\n\\[\nE[R]=28+E[I]=28+176=204 .\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{204}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 204

    \n

    Extracted Answer: 204

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Outline**\n\n1.  Transform the recurrence for \\(x_k\\) into a simpler one.\n\n   Define  \n\n   \\[\n   w_k=\\frac{x_k-1}{x_k+1}\\quad\\Longleftrightarrow\\quad \n   x_k=\\frac{1+w_k}{1-w_k}.\n   \\]\n\n   Substituting in  \n\n   \\[\n   x_{k+1}= \\frac13\\Bigl(x_k+\\frac1{x_k}-1\\Bigr)\n   \\]\n\n   gives after simplification  \n\n   \\[\n   w_{k+1}= \\frac{3w_k^2-1}{2}. \\tag{1}\n   \\]\n\n   The initial value is  \n\n   \\[\n   w_1=\\frac{25/11-1}{25/11+1}=\\frac{7}{18}.\n   \\]\n\n2.  Write \\(w_k=\\dfrac{a_k}{b_k}\\) in lowest terms\n   (\\(a_k\\) odd, \\(b_k\\) even).  \n\n   From (1),\n\n   \\[\n   w_{k+1}= \\frac{3a_k^2-b_k^2}{2b_k^2}.\n   \\]\n\n   Because \\(a_k\\) is not divisible by\u202f3, the numerator is always\n   \\(\\equiv 3\\pmod 9\\); hence it contains exactly one factor\u202f3.\n   After canceling this factor we obtain\n\n   \\[\n   a_{k+1}= \\frac{3a_k^2-b_k^2}{3},\\qquad\n   b_{k+1}= \\frac{2b_k^2}{3}.\n   \\tag{2}\n   \\]\n\n   Consequently  \n\n   \\[\n   b_{k+1}= \\frac{2}{3}b_k^{\\,2}. \\tag{3}\n   \\]\n\n3.  Determine a closed form for \\(b_k\\).\n\n   Write \\(b_k=2^{\\alpha_k}3^{\\beta_k}\\).\n   From (3)\n\n   \\[\n   2^{\\alpha_{k+1}}3^{\\beta_{k+1}}\n   =\\frac{2}{3}\\bigl(2^{\\alpha_k}3^{\\beta_k}\\bigr)^2\n   =2^{2\\alpha_k+1}3^{2\\beta_k-1},\n   \\]\n\n   whence  \n\n   \\[\n   \\alpha_{k+1}=2\\alpha_k+1,\\qquad\n   \\beta_{k+1}=2\\beta_k-1,\n   \\]\n   with \\(\\alpha_1=1,\\ \\beta_1=2\\).\n\n   Solving these linear recurrences gives  \n\n   \\[\n   \\alpha_k = 2^{\\,k}-1,\\qquad\n   \\beta_k = 2^{\\,k-1}+1 .\n   \\]\n\n   Therefore  \n\n   \\[\n   b_k = 2^{\\,2^{k}-1}\\,3^{\\,2^{k-1}+1}. \\tag{4}\n   \\]\n\n4.  Recover \\(x_k\\) from \\(w_k\\).\n\n   Since \\(x_k=\\dfrac{1+w_k}{1-w_k}\\) and \\(w_k=\\dfrac{a_k}{b_k}\\),\n\n   \\[\n   x_k=\\frac{b_k+a_k}{\\,b_k-a_k\\,}= \\frac{m_k}{n_k},\n   \\]\n   where \\(m_k=b_k+a_k,\\ n_k=b_k-a_k\\).  \n   Because \\(a_k\\) is odd and \\(b_k\\) is even, \\(m_k\\) and \\(n_k\\) are odd,\n   so \\(\\gcd(m_k,n_k)=1\\).\n\n   Hence\n\n   \\[\n   m_k+n_k = (b_k+a_k)+(b_k-a_k)=2b_k.\n   \\]\n\n5.  Compute \\(m_{2025}+n_{2025}\\pmod{1000}\\).\n\n   From (4),\n\n   \\[\n   b_{2025}=2^{\\,2^{2025}-1}\\,3^{\\,2^{2024}+1},\n   \\qquad\n   m_{2025}+n_{2025}=2b_{2025}\n   =2^{\\,2^{2025}}\\,3^{\\,2^{2024}+1}.\n   \\]\n\n   We need this value modulo \\(1000=2^3\\cdot5^3\\).\n\n   *Modulo\u202f8:* the exponent of\u202f2 is at least\u202f3, so the whole product\n   is \\(0\\pmod8\\).\n\n   *Modulo\u202f125:* use Euler\u2019s theorem (\\(\\phi(125)=100\\)):\n   \\[\n   2^{2^{2025}}\\equiv2^{\\,32}\\pmod{125},\\qquad\n   3^{2^{2024}+1}\\equiv3^{\\,17}\\pmod{125},\n   \\]\n   because \\(2^{2025}\\equiv32\\) and \\(2^{2024}+1\\equiv17\\pmod{100}\\).\n\n   Computing,\n   \\[\n   2^{32}\\equiv46,\\qquad 3^{17}\\equiv38\\pmod{125},\n   \\]\n   so\n   \\[\n   2^{2^{2025}}3^{2^{2024}+1}\\equiv46\\cdot38\\equiv123\\pmod{125}.\n   \\]\n\n   Solve the simultaneous congruences\n   \\[\n   X\\equiv0\\pmod8,\\qquad X\\equiv123\\pmod{125}.\n   \\]\n   Writing \\(X=125a+123\\) and using \\(125\\equiv5\\pmod8\\) gives\n   \\(5a+3\\equiv0\\pmod8\\Rightarrow a\\equiv1\\pmod8\\).\n   Hence \\(X=125\\cdot1+123=248\\).\n\n   Therefore  \n\n   \\[\n   m_{2025}+n_{2025}\\equiv\\boxed{248}\\pmod{1000}.\n   \\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 248

    \n

    Extracted Answer: 248

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nf(x)=\\sin\\bigl(7\\pi\\sin (5x)\\bigr)\n\\]\n\nThe zeros of \\(f\\) occur when the inner sine gives an integer multiple of \\(\\pi\\):\n\n\\[\n\\sin\\bigl(7\\pi\\sin (5x)\\bigr)=0\\Longleftrightarrow 7\\pi\\sin(5x)=k\\pi\n\\Longleftrightarrow \\sin(5x)=\\frac{k}{7},\n\\qquad k\\in\\mathbb Z .\n\\]\n\nBecause \\(\\sin(5x)\\in[-1,1]\\), \\(|k|\\le7\\); thus \\(k=-7,-6,\\dots ,6,7\\).\n\n---\n\n### 1.  Counting the zeros  \n\nSet \\(\\theta =5x\\).  \nWhen \\(x\\in(0,2\\pi)\\) we have \\(\\theta\\in(0,10\\pi)\\).\n\nFor each admissible integer \\(k\\) we need the number of solutions of  \n\n\\[\n\\sin\\theta=\\frac{k}{7},\\qquad \\theta\\in(0,10\\pi).\n\\]\n\n* **\\(k=0\\):** \\(\\sin\\theta=0\\Rightarrow\\theta=n\\pi\\).  \n  Inside \\((0,10\\pi)\\) we have \\(n=1,2,\\ldots ,9\\) \u2192 **9 solutions**.\n\n* **\\(k=\\pm 7\\):** \\(\\sin\\theta=\\pm1\\).  \n  \\(\\sin\\theta=1\\) gives \\(\\theta=\\dfrac{\\pi}{2}+2\\pi n\\);  \n  \\(\\sin\\theta=-1\\) gives \\(\\theta=\\dfrac{3\\pi}{2}+2\\pi n\\).  \n  For \\(0<\\theta<10\\pi\\) each yields \\(n=0,1,2,3,4\\) \u2192 **5 solutions** for \\(k=7\\) and **5** for \\(k=-7\\).\n\n* **\\(k=\\pm1,\\pm2,\\dots ,\\pm6\\):** \\(|k|<7\\) so \\(-1<k/7<1\\) and \\(\\neq0\\).  \n  In each full period \\([0,2\\pi]\\) the equation \\(\\sin\\theta=c\\) (\\(|c|<1\\)) has two solutions.  \n  The interval \\((0,10\\pi)\\) contains five full periods, hence **\\(5\\times2=10\\) solutions** for each of these 12 values of \\(k\\).\n\nSumming all contributions  \n\n\\[\n\\begin{aligned}\nn &=\\underbrace{9}_{k=0}\n   +\\underbrace{5+5}_{k=\\pm7}\n   +\\underbrace{12\\times10}_{k=\\pm1,\\dots,\\pm6}\\\\[2mm]\n  &=9+10+120 = 139 .\n\\end{aligned}\n\\]\n\nThus there are \\(\\boxed{139}\\) zeros of \\(f\\) in \\((0,2\\pi)\\).\n\n---\n\n### 2.  Zeros where the graph is tangent to the \\(x\\)-axis  \n\nA point where the graph touches the \\(x\\)-axis must satisfy  \n\n\\[\nf(x)=0\\quad\\text{and}\\quad f'(x)=0.\n\\]\n\nFrom \\(f(x)=0\\) we have \\(\\sin(5x)=k/7\\) as above.  \nCompute the derivative:\n\n\\[\n\\begin{aligned}\nf'(x) &=\\cos\\bigl(7\\pi\\sin(5x)\\bigr)\\cdot 7\\pi\\cdot 5\\cos(5x)   \\\\\n      &=35\\pi\\cos\\bigl(7\\pi\\sin(5x)\\bigr)\\cos(5x).\n\\end{aligned}\n\\]\n\nThus \\(f'(x)=0\\) iff \\(\\cos(5x)=0\\) (the factor \\(\\cos\\bigl(7\\pi\\sin(5x)\\bigr)\\) never vanishes at a zero, because\n\\(\\cos(k\\pi)=\\pm1\\)).  \n\n\\[\n\\cos(5x)=0\\Longrightarrow 5x=\\frac{\\pi}{2}+n\\pi\\quad\\Longrightarrow\\quad\\sin(5x)=\\pm1.\n\\]\n\nHence the tangential zeros correspond exactly to the solutions of \\(\\sin(5x)=\\pm1\\), i.e. the cases \\(k=\\pm7\\).\n\nWe already counted these:  \n\n* \\(\\sin(5x)=1\\) gives \\(5\\) solutions,\n* \\(\\sin(5x)=-1\\) gives \\(5\\) solutions.\n\nTherefore  \n\n\\[\nt = 5+5 = 10 .\n\\]\n\n(Indeed, at these points \\(f'(x)=0\\) and \\(f''(x)\\neq0\\), so the graph just touches the axis.)\n\n---\n\n### 3.  Required sum  \n\n\\[\nn+t = 139 + 10 = \\boxed{149}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 149

    \n

    Extracted Answer: 149

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFrom an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.\n\nIn general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nN=25q+r ,\\qquad 0\\le r<25 .\n\\]\n\nThe greedy algorithm first takes \\(q\\) coins of 25\u202f\u00a2, then  \n\\(t=\\big\\lfloor r/10\\big\\rfloor\\) coins of 10\u202f\u00a2 and finally  \n\\(s=r-10t\\) pennies.  \n\n\\[\n\\text{Greedy coins}=C_g(N)=q+t+s.\n\\]\n\n---\n\n### 1.  What is an optimal representation?\n\nIf a representation uses \\(a\\) 25\u2011cent coins, \\(b\\) 10\u2011cent coins and \\(c\\) pennies, then  \n\n\\[\n25a+10b+c=N,\\qquad a,b,c\\ge0,\n\\]\nand the number of coins is  \n\n\\[\nC= a+b+c = N-(24a+9b).\n\\]\n\nThus **minimising the number of coins is equivalent to maximising**  \n\n\\[\nP=24a+9b \\qquad\\text{subject to}\\qquad 25a+10b\\le N .\n\\]\n\nThe \u201cprofit\u2019\u2019 per cent is larger for a 25\u2011cent coin \\((24/25)\\) than for a 10\u2011cent coin \\((9/10)\\); therefore an optimal solution will use as many 25\u2011cent coins as possible unless removing a 25\u2011cent coin allows us to add enough 10\u2011cent coins to increase the profit.\n\n---\n\n### 2.  Effect of removing \\(k\\) quarters\n\nLet us replace \\(k\\) quarters by 10\u2011cent coins.  \nWrite \\(r=10u+v\\;(0\\le v\\le 9)\\).  \nAfter removing \\(k\\) quarters, the remainder becomes  \n\n\\[\nR=r+25k=10u+v+25k .\n\\]\n\nThe maximal number of dimes that can be added is  \n\n\\[\nb'=\\big\\lfloor \\frac{R}{10}\\big\\rfloor\n   =u+ \\big\\lfloor 2.5k+\\tfrac{v}{10}\\big\\rfloor .\n\\]\n\nThe change in profit is\n\n\\[\n\\Delta P\n=-24k+9\\big(b'-\\big\\lfloor r/10\\big\\rfloor\\big)\n=-6k+9\\Big\\lfloor\\frac{k}{2}\\Big\\rfloor+9\\delta ,\n\\]\n\nwhere  \n\n\\[\n\\delta=\n\\begin{cases}\n1 &\\text{if }k\\text{ is odd and }v\\ge5,\\\\\n0 &\\text{otherwise.}\n\\end{cases}\n\\]\n\n*If \\(k\\) is even*, \\(\\Delta P=-3k/2<0\\); the profit never increases.  \n\n*If \\(k\\) is odd*, write \\(k=2m+1\\). Then  \n\n\\[\n\\Delta P=9\\delta-(3m+6).\n\\]\n\nThe only way \\(\\Delta P>0\\) is when \\(m=0\\) (i.e. \\(k=1\\)) and \\(\\delta=1\\),\nwhich occurs exactly when  \n\n\\[\nv=r\\bmod 10\\ge5 .\n\\]\n\nHence **the greedy algorithm fails precisely when**\n\\[\nN\\ge 25\\quad\\text{and}\\quad (N\\bmod 25)\\bmod 10\\ge5.\n\\]\n\nEquivalently, the \u201cbad\u2019\u2019 remainders (after taking as many quarters as possible) are  \n\n\\[\nr\\in\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\]\n\nIn each block of 25 consecutive integers there are 10 such remainders.\n\n---\n\n### 3.  Counting the failures between 1 and 1000\n\nThe interval \\([25,1000]\\) contains \\(1000-24=976\\) integers.\nFrom 25 onward the numbers are grouped into blocks  \n\n\\[\n25\\!-\\!49,\\;50\\!-\\!74,\\;\\dots,\\;975\\!-\\!999 .\n\\]\n\nThere are \\(39\\) full blocks (the block \\(25\\!-\\!49\\) up to \\(975\\!-\\!999\\)).\nEach block contributes exactly \\(10\\) failures, so\n\n\\[\n\\#\\text{failures}=39\\times10=390 .\n\\]\n\nNumbers \\(1\\) through \\(24\\) are never failures (they contain no quarters).\n\nThus the number of successes is  \n\n\\[\n1000-390=610 .\n\\]\n\n---\n\n\\[\n\\boxed{610}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 610

    \n

    Extracted Answer: 610

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    In a regular \\(24\\)-gon label the vertices \\(0,1,\\dots ,23\\) clockwise.  \nIf two vertices differ by \\(k\\) (mod \\(24\\)), the chord joining them has length that depends only on  \n\n\\[\ns=\\min (k,24-k)\\qquad (1\\le s\\le 12).\n\\]\n\nThus there are \\(12\\) possible lengths, one for each \\(s=1,2,\\dots ,12\\).\n\n--------------------------------------------------------------------\n### 1.  The graph of chords of a fixed length  \n\nFix a value \\(s\\).  The set of all chords of that length is the edge\u2011set of the **circulant graph**\n\\[\nG_s=\\{\\,\\{i,i+s\\}\\mid i=0,1,\\dots ,23\\,\\},\n\\]\nwhere the addition is taken modulo \\(24\\).\n\nLet \\(g=\\gcd(s,24)\\).  Adding \\(s\\) repeatedly splits the vertex set into \\(g\\) cycles,\neach of length  \n\n\\[\nL=\\frac{24}{g}.\n\\]\n\nSo \\(G_s\\) is a disjoint union of \\(g\\) cycles \\(C_L\\).\n\n--------------------------------------------------------------------\n### 2.  When can a perfect matching exist?\n\nA perfect matching (a set of \\(12\\) disjoint edges covering all vertices) can exist only if\nevery component cycle has even length, i.e. \\(L\\) is even.\nSince \\(L=24/g\\), this is equivalent to \\(g\\mid 12\\).\n\n*If \\(g\\mid 12\\) and \\(L\\ge 4\\)*, each even cycle \\(C_L\\) has exactly **2** perfect\nmatchings (choose alternating edges).  \n*If \\(L=2\\)* (the case \\(s=12\\)), each component is a single edge and contributes only **1** matching.\n\nThe only step for which \\(g\\nmid 12\\) is \\(s=8\\) (here \\(g=8\\) and the components are 3\u2011cycles),\nso no perfect matching exists for \\(s=8\\).\n\n--------------------------------------------------------------------\n### 3.  Number of matchings for each possible length\n\n\\[\n\\begin{array}{c|c|c|c}\ns & g=\\gcd(s,24) & L=24/g & \\#\\text{ matchings}\\\\ \\hline\n1 &1 &24 &2\\\\\n2 &2 &12 &2^{2}=4\\\\\n3 &3 & 8 &2^{3}=8\\\\\n4 &4 & 6 &2^{4}=16\\\\\n5 &1 &24 &2\\\\\n6 &6 & 4 &2^{6}=64\\\\\n7 &1 &24 &2\\\\\n8 &8 & 3 &0\\\\\n9 &3 & 8 &2^{3}=8\\\\\n10&2 &12 &2^{2}=4\\\\\n11&1 &24 &2\\\\\n12&12& 2 &1\n\\end{array}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Total number of ways\n\nAdd the numbers for all admissible lengths (all \\(s\\) except \\(s=8\\)):\n\n\\[\n\\begin{aligned}\n\\text{Total}&=2+4+8+16+2+64+2+8+4+2+1\\\\\n&=113 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{113}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 113

    \n

    Extracted Answer: 113

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The chairs can be represented by a binary string of length\u202f16, where a \\(1\\) means the chair is taken.  \nWe need strings with exactly eight\u202f\\(1\\)\u2019s and with **no three consecutive \\(1\\)\u2019s** (otherwise the middle person would sit next to two others).\n\n---\n\n### Counting by blocks\n\nA valid string consists of blocks of consecutive \\(1\\)\u2019s of length\u202f1 or\u202f2, separated by at least one \\(0\\).\n\nLet  \n\n* \\(t\\) = number of blocks of length\u202f2,  \n* \\(b\\) = total number of blocks.  \n\nSince each block contributes at least one \\(1\\),\n\n\\[\n\\underbrace{(b-t)}_{\\text{blocks of length 1}}+2t=8\\quad\\Longrightarrow\\quad b+ t=8,\\; b=8-t .\n\\]\n\nSo \\(t=0,1,2,3,4\\).\n\nFor a fixed \\(t\\):\n* Choose which of the \\(b\\) blocks are the length\u20112 ones: \\(\\displaystyle\\binom{b}{t}=\\binom{8-t}{t}\\).\n* There are \\(8-8=8\\) empty chairs; let \\(z=8\\).  \n  The \\(b+1\\) gaps (including the two ends) must contain these zeros, with at least one zero in each interior gap.  \n  After placing one zero in each of the \\(b-1\\) interior gaps, we have \\(z-(b-1)=9-b\\) zeros left to distribute freely among the \\(b+1\\) gaps.  \n  The number of ways is \\(\\displaystyle\\binom{9-b}{b}=\\binom{9}{b}\\).\n\nHence for each \\(t\\),\n\n\\[\nN_t=\\binom{8-t}{t}\\binom{9}{8-t}.\n\\]\n\nSumming over \\(t=0\\) to \\(4\\):\n\n\\[\n\\begin{aligned}\nN &=\\binom{8}{0}\\binom{9}{8}\n   +\\binom{7}{1}\\binom{9}{7}\n   +\\binom{6}{2}\\binom{9}{6}\n   +\\binom{5}{3}\\binom{9}{5}\n   +\\binom{4}{4}\\binom{9}{4} \\\\[2mm]\n  &=1\\cdot9+7\\cdot36+15\\cdot84+10\\cdot126+1\\cdot126\\\\\n  &=9+252+1260+1260+126\\\\\n  &=2907 .\n\\end{aligned}\n\\]\n\n---\n\n### Modulo\u202f1000\n\n\\[\n2907 \\equiv 907 \\pmod{1000}.\n\\]\n\n---\n\n\\[\n\\boxed{907}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 907

    \n

    Extracted Answer: 907

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nr_i=A_1A_i\\qquad (i=2,\\dots ,11),\\qquad \n\\theta=\\angle A_iA_1A_{i+1}.\n\\]\n\nFor each \\(i=2,\\dots ,10\\)\n\n\\[\n\\cos\\theta=\\frac{12}{13},\\qquad \n\\text{Area}(A_iA_1A_{i+1})=\\frac12 r_i r_{i+1}\\sin\\theta =1 .\n\\]\n\nSince \\(\\sin\\theta=\\sqrt{1-\\cos ^2\\theta}=5/13\\),\n\n\\[\nr_i r_{i+1}= \\frac{2}{\\sin\\theta}= \\frac{2}{5/13}= \\frac{26}{5}\n=:k\\quad\\text{(constant)}.\n\\]\n\nThus  \n\n\\[\nr_{i+1}= \\frac{k}{r_i},\\qquad\\text{so}\\qquad r_{i+2}=r_i .\n\\]\n\nHence the distances from \\(A_1\\) alternate:\n\n\\[\nr_2=r_4=r_6=r_8=r_{10}=a,\\qquad  \nr_3=r_5=r_7=r_9=r_{11}=b,\n\\]\n\nwith  \n\n\\[\nab=k=\\frac{26}{5}.\n\\]\n\n--------------------------------------------------------------------\n### Length of a side \\(A_iA_{i+1}\\)\n\nFor any consecutive pair \\((a,b)\\),\n\n\\[\nA_iA_{i+1}=d=\\sqrt{a^2+b^2-2ab\\cos\\theta}\n           =\\sqrt{a^2+b^2-\\frac{24}{13}ab}.\n\\]\n\nLet  \n\n\\[\nx=a+b,\\qquad ab=k .\n\\]\n\nBecause \\(a^2+b^2=(a+b)^2-2ab=x^2-2k\\),\n\n\\[\nd=\\sqrt{x^2-2k-\\frac{24}{13}k}\n   =\\sqrt{x^2-\\frac{50}{13}\\,k}.\n\\]\n\nSince \\(k=\\dfrac{26}{5}\\),\n\n\\[\n\\frac{50}{13}k=\\frac{50}{13}\\cdot\\frac{26}{5}=20,\n\\qquad\\boxed{d=\\sqrt{x^2-20}} .\n\\]\n\n--------------------------------------------------------------------\n### Using the perimeter\n\nThe perimeter of the 11\u2011gon is\n\n\\[\na+b+9d = x+9\\sqrt{x^2-20}=20 .\n\\]\n\nSolve for \\(x\\) (note \\(x>0\\) and \\(\\sqrt{x^2-20}\\ge0\\)):\n\n\\[\n9\\sqrt{x^2-20}=20-x\\quad\\Longrightarrow\\quad\n81(x^2-20)=(20-x)^2 .\n\\]\n\nThis gives  \n\n\\[\n80x^2+40x-2020=0\\;\\Longrightarrow\\;4x^2+2x-101=0.\n\\]\n\nHence  \n\n\\[\nx=\\frac{-2\\pm\\sqrt{4+1616}}{8}\n  =\\frac{-2\\pm18\\sqrt5}{8}\n  =\\frac{-1\\pm9\\sqrt5}{4}.\n\\]\n\nOnly the positive root satisfies the constraints, so  \n\n\\[\n\\boxed{x=a+b=\\frac{9\\sqrt5-1}{4}} .\n\\]\n\nThus\n\n\\[\nA_1A_2+A_1A_{11}=a+b=\\frac{9\\sqrt5-1}{4}\n    =\\frac{m\\sqrt n-p}{q},\n\\]\n\nwith \\(m=9,\\;n=5,\\;p=1,\\;q=4\\).\n\nAll conditions on \\(m,n,p,q\\) are met, and\n\n\\[\nm+n+p+q=9+5+1+4=19.\n\\]\n\n\\[\n\\boxed{19}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 19

    \n

    Extracted Answer: 19

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    In base \\(b\\) the numbers are  \n\n\\[\n17_{b}=1\\cdot b+7=b+7, \\qquad 97_{b}=9\\cdot b+7=9b+7 .\n\\]\n\nWe need \\(b+7\\) to divide \\(9b+7\\).\n\n---\n\n### Find the divisibility condition  \n\n\\[\n9b+7 = 9(b+7)-56 .\n\\]\n\nThus the remainder when \\(9b+7\\) is divided by \\(b+7\\) is \\(-56\\).  \nHence \\(b+7\\) must divide \\(56\\):\n\n\\[\nb+7\\mid 56 .\n\\]\n\n---\n\n### Possible values of \\(b\\)\n\nThe positive divisors of \\(56\\) are  \n\n\\[\n1,\\;2,\\;4,\\;7,\\;8,\\;14,\\;28,\\;56 .\n\\]\n\nBecause the base must satisfy \\(b>9\\), we have \\(b+7>16\\).  \nThe divisors larger than \\(16\\) are \\(28\\) and \\(56\\).\n\n\\[\n\\begin{aligned}\nb+7&=28 \\quad\\Longrightarrow\\quad b=21,\\\\[2pt]\nb+7&=56 \\quad\\Longrightarrow\\quad b=49 .\n\\end{aligned}\n\\]\n\nBoth bases are greater than \\(9\\) and allow the digits \\(1,7,9\\).\n\n---\n\n### Sum of all such bases  \n\n\\[\n21+49 = 70.\n\\]\n\n\\[\n\\boxed{70}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 70

    \n

    Extracted Answer: 70

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The numbers of players picking chocolate, vanilla and strawberry are  \n\n\\[\na=\\#\\text{chocolate},\\qquad b=\\#\\text{vanilla},\\qquad c=\\#\\text{strawberry}\n\\]\n\nwith  \n\n\\[\na+b+c=9,\\qquad a>b>c\\ge1 .\n\\]\n\nHence \\((a,b,c)\\) must be three distinct positive integers whose sum is \\(9\\).  \nThe possible triples (written in decreasing order) are  \n\n\\[\n(6,2,1),\\;(5,3,1),\\;(4,3,2).\n\\]\n\nFor a fixed triple \\((a,b,c)\\) the players are distinct, so the number of assignments\nis the multinomial coefficient  \n\n\\[\n\\binom{9}{a,b,c}= \\frac{9!}{a!\\,b!\\,c!}.\n\\]\n\nCompute each term:\n\n\\[\n\\begin{aligned}\n(6,2,1):&\\quad \\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[2mm]\n(5,3,1):&\\quad \\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[2mm]\n(4,3,2):&\\quad \\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\nAdd them:\n\n\\[\nN = 252+504+1260 = 2016.\n\\]\n\nThe remainder when \\(N\\) is divided by \\(1000\\) is  \n\n\\[\n2016 \\equiv 16 \\pmod{1000}.\n\\]\n\n\\[\n\\boxed{16}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 16

    \n

    Extracted Answer: 16

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(0,c)\n\\]\n\nso that \\(\\angle A=90^{\\circ}\\) and  \n\n\\[\nBC=\\sqrt{b^{2}+c^{2}}=38\\qquad\\Longrightarrow\\qquad b^{2}+c^{2}=38^{2}=1444 .\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1.  Determining the positions of \\(K\\) and \\(L\\)\n\nBecause  \n\n\\[\nAK=BK=14\n\\]\n\nthe point \\(K\\) lies at the intersection of the circles of radius \\(14\\) centred at\n\\(A\\) and \\(B\\).  \nIf \\(K=(x_{K},y_{K})\\),\n\n\\[\nx_{K}^{2}+y_{K}^{2}=196,\\qquad (x_{K}-b)^{2}+y_{K}^{2}=196 .\n\\]\n\nSubtracting gives  \n\n\\[\nb^{2}=2bx_{K}\\;\\Longrightarrow\\;x_{K}= \\frac{b}{2} .\n\\tag{2}\n\\]\n\nHence  \n\n\\[\ny_{K}^{2}=196-\\Bigl(\\frac{b}{2}\\Bigr)^{2}=196-\\frac{b^{2}}{4}.\n\\tag{3}\n\\]\n\nSimilarly, from  \n\n\\[\nAL=CL=14\n\\]\n\nthe point \\(L=(x_{L},y_{L})\\) satisfies\n\n\\[\ny_{L}= \\frac{c}{2},\\qquad \nx_{L}^{2}=196-\\Bigl(\\frac{c}{2}\\Bigr)^{2}=196-\\frac{c^{2}}{4}.\n\\tag{4}\n\\]\n\nThus, writing  \n\n\\[\nU=\\frac{b}{2},\\quad V=\\frac{c}{2},\n\\]\n\nwe have  \n\n\\[\nK=\\bigl(U,\\;\\sqrt{196-U^{2}}\\bigr),\\qquad \nL=\\bigl(\\sqrt{196-V^{2}},\\;V\\bigr),\n\\tag{5}\n\\]\n\nand from (1)  \n\n\\[\nU^{2}+V^{2}=361. \\tag{6}\n\\]\n\n--------------------------------------------------------------------\n### 2.  Using the condition \\(KL=14\\)\n\nFrom (5),\n\n\\[\n\\bigl(U-\\sqrt{196-V^{2}}\\bigr)^{2}\n+\\bigl(\\sqrt{196-U^{2}}-V\\bigr)^{2}=196 .\n\\]\n\nExpanding and simplifying with (6) gives\n\n\\[\nU\\sqrt{196-V^{2}}+V\\sqrt{196-U^{2}}=98 . \\tag{7}\n\\]\n\nLet  \n\n\\[\np=\\sqrt{196-V^{2}},\\qquad q=\\sqrt{196-U^{2}} .\n\\]\n\nThen  \n\n\\[\nU p+V q =98 ,\\qquad p^{2}+q^{2}=31 ,\n\\qquad U^{2}+V^{2}=361 . \\tag{8}\n\\]\n\nFrom (8) we obtain the product\n\n\\[\nU^{2}V^{2}=32448\\quad\\Longrightarrow\\quad UV=104\\sqrt3 . \\tag{9}\n\\]\n\nNow  \n\n\\[\n(U+V)^{2}=U^{2}+V^{2}+2UV=361+208\\sqrt3,\n\\]\n\\[\n(U-V)^{2}=U^{2}+V^{2}-2UV=361-208\\sqrt3 .\n\\]\n\nBoth expressions are perfect squares:\n\n\\[\n361+208\\sqrt3=(13+8\\sqrt3)^{2},\n\\qquad\n361-208\\sqrt3=(8\\sqrt3-13)^{2}.\n\\]\n\nHence  \n\n\\[\nU+V=13+8\\sqrt3,\\qquad\n|U-V|=8\\sqrt3-13 .\n\\]\n\nSince \\(U>V\\), solving gives  \n\n\\[\nU=8\\sqrt3,\\qquad V=13 .\n\\]\n\nConsequently  \n\n\\[\nb=2U=16\\sqrt3,\\qquad c=2V=26 .\n\\]\n\n--------------------------------------------------------------------\n### 3.  Coordinates of \\(K\\) and \\(L\\)\n\nUsing (5) with the found \\(U,V\\):\n\n\\[\nK=\\bigl(8\\sqrt3,\\; \\sqrt{196-(8\\sqrt3)^{2}}\\bigr)\n   =\\bigl(8\\sqrt3,\\;2\\bigr),\n\\]\n\n\\[\nL=\\bigl(\\sqrt{196-13^{2}},\\;13\\bigr)\n   =\\bigl(3\\sqrt3,\\;13\\bigr).\n\\]\n\n--------------------------------------------------------------------\n### 4.  Area of quadrilateral \\(BKLC\\)\n\nThe vertices in order are  \n\n\\[\nB=(16\\sqrt3,0),\\ K=(8\\sqrt3,2),\\ L=(3\\sqrt3,13),\\ C=(0,26).\n\\]\n\nApplying the shoelace formula:\n\n\\[\n\\begin{aligned}\nS_{1}&=x_{B}y_{K}+x_{K}y_{L}+x_{L}y_{C}+x_{C}y_{B}\\\\\n     &= (16\\sqrt3)(2)+(8\\sqrt3)(13)+(3\\sqrt3)(26)+0\\\\\n     &=32\\sqrt3+104\\sqrt3+78\\sqrt3=214\\sqrt3,\n\\\\[2mm]\nS_{2}&=y_{B}x_{K}+y_{K}x_{L}+y_{L}x_{C}+y_{C}x_{B}\\\\\n     &=0+2(3\\sqrt3)+13\\cdot0+26(16\\sqrt3)\\\\\n     &=6\\sqrt3+416\\sqrt3=422\\sqrt3 .\n\\end{aligned}\n\\]\n\nHence  \n\n\\[\n\\text{Area}=\\frac12|S_{1}-S_{2}|\n           =\\frac12\\bigl|214\\sqrt3-422\\sqrt3\\bigr|\n           =\\frac12\\,(208\\sqrt3)=104\\sqrt3 .\n\\]\n\nThus the required area is \\(104\\sqrt3\\), i.e. \\(n=104\\).\n\n\\[\n\\boxed{104}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 104

    \n

    Extracted Answer: 104

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The equation  \n\n\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\ncan be factored over the integers.\n\n\\[\n\\begin{aligned}\n12x^{2}-xy-6y^{2}\n&= (4x-3y)(3x+2y).\n\\end{aligned}\n\\]\n\nHence a pair \\((x,y)\\) satisfies the equation iff  \n\n\\[\n4x-3y=0 \\qquad\\text{or}\\qquad 3x+2y=0 .\n\\]\n\n---\n\n### 1.  Solutions of \\(4x-3y=0\\)\n\n\\[\n4x=3y \\Longrightarrow x=\\frac34y .\n\\]\n\nSince \\(x,y\\) are integers, \\(y\\) must be a multiple of \\(4\\); write \\(y=4k\\) \\((k\\in\\mathbb Z)\\).  \nThen \\(x=3k\\).\n\nBounds \\(-100\\le x,y\\le100\\) give  \n\n\\[\n|4k|\\le100\\ \\Longrightarrow\\ |k|\\le25 .\n\\]\n\nThus \\(k\\) can be any integer from \\(-25\\) to \\(25\\) inclusive \u2013 \\(51\\) possibilities.\n\n---\n\n### 2.  Solutions of \\(3x+2y=0\\)\n\n\\[\n3x=-2y \\Longrightarrow x=-\\frac{2}{3}y .\n\\]\n\nNow \\(y\\) must be a multiple of \\(3\\); write \\(y=3k\\).  \nThen \\(x=-2k\\).\n\nBounds give  \n\n\\[\n|3k|\\le100\\ \\Longrightarrow\\ |k|\\le\\Big\\lfloor\\frac{100}{3}\\Big\\rfloor=33 .\n\\]\n\nHence \\(k\\) can be any integer from \\(-33\\) to \\(33\\) inclusive \u2013 \\(67\\) possibilities.\n\n---\n\n### 3.  Removing double\u2011counted pair\n\nBoth families contain the pair \\((0,0)\\) (when \\(k=0\\)).  \nIt has been counted twice, so we subtract one.\n\n\\[\n\\text{Total solutions}=51+67-1=117 .\n\\]\n\nAll counted pairs satisfy \\(-100\\le x,y\\le100\\).\n\n\\[\n\\boxed{117}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 117

    \n

    Extracted Answer: 117

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the trapezoid have parallel sides \\(r\\) and \\(s\\) (\\(r\\neq s\\)), equal legs of length \\(L\\), height \\(h\\), and incircle radius \\(R=3\\).\n\n---\n\n### 1.  Semiperimeter from the incircle\n\nFor any tangential quadrilateral,\n\\[\n\\text{Area}=R\\cdot s,\n\\]\nwhere \\(s\\) is the semiperimeter.  \nGiven \\(\\text{Area}=72\\) and \\(R=3\\),\n\n\\[\ns=\\frac{72}{3}=24,\n\\qquad\\text{so } r+s+2L=2s=48. \\tag{1}\n\\]\n\n---\n\n### 2.  Height of the trapezoid\n\nSince the incircle touches both parallel sides, the distance between them equals twice the radius:\n\n\\[\nh=2R=6.\n\\]\n\nThe area also equals \\(\\frac{1}{2}(r+s)h\\). Thus\n\n\\[\n72=\\frac{1}{2}(r+s)\\cdot6 \\Longrightarrow r+s=24. \\tag{2}\n\\]\n\nSubstituting (2) into (1) gives\n\n\\[\n24+2L=48\\Longrightarrow L=12. \\tag{3}\n\\]\n\n---\n\n### 3.  Relating the bases and the leg\n\nIn an isosceles trapezoid the horizontal projection of each leg is \\(\\dfrac{s-r}{2}\\).\nUsing the right triangle formed by a leg, the height, and this projection:\n\n\\[\n\\left(\\frac{s-r}{2}\\right)^2+h^2=L^2.\n\\]\n\nInsert \\(h=6\\) and \\(L=12\\):\n\n\\[\n\\left(\\frac{s-r}{2}\\right)^2+36=144\n\\;\\Longrightarrow\\;\n\\frac{(s-r)^2}{4}=108\n\\;\\Longrightarrow\\;\n(s-r)^2=432.\n\\]\n\nHence\n\n\\[\ns-r=12\\sqrt3. \\tag{4}\n\\]\n\n---\n\n### 4.  Solve for \\(r\\) and \\(s\\)\n\nFrom (2) and (4):\n\n\\[\n\\begin{cases}\nr+s=24,\\\\[2pt]\ns-r=12\\sqrt3,\n\\end{cases}\n\\qquad\\Longrightarrow\\qquad\ns=12+6\\sqrt3,\\;\\; r=12-6\\sqrt3.\n\\]\n\nBoth are positive and distinct, as required.\n\n---\n\n### 5.  Compute \\(r^{2}+s^{2}\\)\n\n\\[\n\\begin{aligned}\nr^{2}+s^{2}&=(12-6\\sqrt3)^2+(12+6\\sqrt3)^2\\\\\n&=2\\cdot12^{2}+2\\cdot(6\\sqrt3)^{2}\\\\\n&=2\\cdot144+2\\cdot108\\\\\n&=288+216\\\\\n&=504.\n\\end{aligned}\n\\]\n\n---\n\n\\[\n\\boxed{504}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 504

    \n

    Extracted Answer: 504

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    For an \\(8\\)-digit number formed with the digits \\(1,2,\\dots ,8\\) each once we need\n\n* divisibility by \\(2\\)   \\(\\Longrightarrow\\) the units digit is even (\\(2,4,6,8\\));\n* divisibility by \\(11\\) \\(\\Longrightarrow\\) the alternating sum of its digits is a multiple of \\(11\\).\n\n---\n\n### 1.  Divisibility by \\(11\\)\n\nWrite the digits as \\(d_1d_2d_3d_4d_5d_6d_7d_8\\) ( \\(d_1\\) most significant).  \n\nThe test for \\(11\\) gives  \n\n\\[\n(d_1+d_3+d_5+d_7)-(d_2+d_4+d_6+d_8)\\equiv0\\pmod{11}.\n\\]\n\nLet  \n\n\\[\nO=d_1+d_3+d_5+d_7,\\qquad E=d_2+d_4+d_6+d_8 .\n\\]\n\nSince all eight digits are used once,  \n\n\\[\nO+E = 1+2+\\dots+8 = 36 .\n\\]\n\nThe condition \\(O-E\\equiv0\\pmod{11}\\) becomes  \n\n\\[\n2O\\equiv36\\pmod{11}\\quad\\Longrightarrow\\quad O\\equiv18\\equiv7\\pmod{11}.\n\\]\n\nThe sum of four distinct digits from \\(\\{1,\\dots ,8\\}\\) lies between \\(10\\) and \\(26\\); the only value congruent to \\(7\\pmod{11}\\) in that range is \\(18\\).  \nHence we must have  \n\n\\[\nO=E=18.\n\\]\n\nSo the four digits placed in the odd positions must sum to \\(18\\).\n\n---\n\n### 2.  Choosing the odd\u2013position digits\n\nWe need all \\(4\\)-element subsets of \\(\\{1,\\dots ,8\\}\\) whose sum is \\(18\\).\n\nListing them (in increasing order) gives\n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are \\(8\\) such subsets.  \nEach of them contains exactly two even digits (the even digits are \\(2,4,6,8\\)). Consequently the complementary set (the digits placed in even positions) also contains exactly two evens.\n\n---\n\n### 3.  Forming the numbers\n\n*For a fixed subset* \\(S\\) (the odd\u2011position digits)\n\n* arrange its four digits among the odd places \\(1,3,5,7\\): \\(4!\\) ways;\n* the four remaining digits (the complement \\(T\\)) go to the even places \\(2,4,6,8\\).  \n  Since \\(T\\) contains two even digits, we may pick which even digit occupies the units place (position \\(8\\)) in \\(2\\) ways; the other three digits can be placed in \\(3!\\) ways.\n\nHence for each subset \\(S\\)\n\n\\[\n\\text{permutations}=4!\\times 2\\times3!=24\\times12=288 .\n\\]\n\nWith \\(8\\) possible subsets,\n\n\\[\nN=8\\times288=2304 .\n\\]\n\n(Equivalently, half of the \\(4608\\) numbers with \\(O=E=18\\) are even, giving the same result.)\n\n---\n\n### 4.  Required difference\n\n\\[\nN-2025 = 2304-2025 = 279.\n\\]\n\nThus the requested difference is  \n\n\\[\n\\boxed{279}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 279

    \n

    Extracted Answer: 279

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    We place \\(\\triangle ABC\\) on its circumcircle (radius\u00a01) with  \n\n\\[\nA=1,\\qquad B=e^{i2C},\\qquad C=e^{i(2C+2A)} .\n\\]\n\nThe orthocenter is  \n\n\\[\nH=a+b+c.\n\\]\n\nThe nine\u2011point circle is the image of the circumcircle under the homothety with centre \\(H\\) and factor \\(\\tfrac12\\); therefore for any point \\(X\\) on the nine\u2011point circle its image on the circumcircle is  \n\n\\[\nX' = 2X-H .\n\\]\n\nApplying this to the six points on the nine\u2011point circle gives\n\n\\[\n\\begin{aligned}\nD&\\mapsto -a,\\\\\nE&\\mapsto -b,\\\\\nF&\\mapsto -c,\\\\\nG&\\mapsto A' ,\\qquad A' \\text{ is the second intersection of the altitude }AA_H\\text{ with the circumcircle},\\\\\nH&\\mapsto B' ,\\qquad B'=-e^{i2A},\\\\\nJ&\\mapsto C' ,\\qquad C'=-e^{-i2A}.\n\\end{aligned}\n\\]\n\nUsing \\(a=1,\\;b=e^{i2C},\\;c=e^{i(2C+2A)}\\) we obtain the central\nangles (measured from the positive \\(x\\)-axis) of the corresponding points:\n\n\\[\n\\begin{array}{c|c}\n\\text{Nine\u2011point point} & \\text{Angle on the circumcircle}\\\\ \\hline\nD & 180^\\circ\\\\\nE & 180^\\circ+2C\\\\\nF & 180^\\circ-2B\\\\\nG & 180^\\circ+2A+4C\\\\\nH & 180^\\circ+2A\\\\\nJ & 180^\\circ-2A\n\\end{array}\n\\]\n\nBecause the homothety preserves directions from the centre, the\narc length on the nine\u2011point circle equals the corresponding central\nangle on the circumcircle.\n\nHence\n\n\\[\n\\begin{aligned}\n\\widehat{DE}&=(180^\\circ+2C)-180^\\circ =2C,\\\\[2mm]\n\\widehat{HJ}&=|\\, (180^\\circ+2A)-(180^\\circ-2A)\\,|=4A,\n\\end{aligned}\n\\]\n\nand the minor arc \\(HJ\\) is \\(360^\\circ-4A\\) (since \\(4A>180^\\circ\\)).\nFinally\n\n\\[\n\\widehat{FG}=|(180^\\circ-2B)-(180^\\circ+2A+4C)|\n            =2C\\qquad(\\text{mod }360^\\circ).\n\\]\n\nThus\n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n&=2C+2\\bigl(360^\\circ-4A\\bigr)+3\\,(2C) \\\\\n&=720^\\circ-8A+8C\\\\\n&=720^\\circ+8(C-A).\n\\end{aligned}\n\\]\n\nFor the given triangle \\(A=84^\\circ,\\;C=36^\\circ\\),\n\n\\[\n720^\\circ+8(36^\\circ-84^\\circ)=720^\\circ-384^\\circ=336^\\circ .\n\\]\n\n\\[\n\\boxed{336}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 336

    \n

    Extracted Answer: 336

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The function  \n\n\\[\nf(x)=\\frac{(x-18)(x-72)(x-98)(x-k)}{x}, \\qquad x>0,\n\\]\n\nhas zeros at \\(x=18,72,98,k\\) and \\(\\displaystyle\\lim_{x\\to0^+}f(x)=+\\infty\\),\n\\(\\displaystyle\\lim_{x\\to\\infty}f(x)=+\\infty\\).\nHence the graph of \\(f\\) starts at \\(+\\infty\\), descends to a negative\nvalue, comes back to zero, rises again, etc.; it has exactly **two**\nnegative intervals:\n\\[\n(r_1,r_2),\\qquad (r_3,r_4),\n\\]\nwhere \\(\\{r_1,r_2,r_3,r_4\\}=\\{18,72,98,k\\}\\) ordered increasingly.\nIn each negative interval there is a local (and global) minimum of \\(f\\).\n\nLet  \n\n\\[\ng(x)=(x-18)(x-72)(x-98)(x-k),\n\\qquad f(x)=\\frac{g(x)}{x}.\n\\]\n\nA point \\(x_0\\) where \\(f\\) has an extremum satisfies  \n\n\\[\nf'(x_0)=0\\iff x_0g'(x_0)-g(x_0)=0\\iff \n\\sum_{i=1}^{4}\\frac{1}{x_0-r_i}= \\frac1{x_0}.\n\\]\n\nGeometrically, if \\(m=f(x_0)\\) then the line \\(y=m x\\) is tangent to the\nquartic graph \\(y=g(x)\\) at \\(x_0\\):\n\\[\ng(x)-mx=0\\quad\\text{has a double root at }x_0 .\n\\]\n\nIf the global minimum of \\(f\\) is attained at **two** distinct points,\nthe line \\(y=m x\\) must be tangent to \\(g\\) at two distinct points\n\\(\\alpha,\\beta\\). Hence\n\n\\[\ng(x)-mx=(x-\\alpha)^2 (x-\\beta)^2 .\n\\tag{1}\n\\]\n\nWrite  \n\n\\[\n\\alpha+\\beta=p,\\qquad \\alpha\\beta =q,\\qquad m \\text{ (the slope)} .\n\\]\n\nExpanding (1) and comparing with \\(g(x)-mx=x^4-S_1x^3+S_2x^2-(S_3+m)x+S_4\\) gives  \n\n\\[\n\\begin{aligned}\nS_1 &=2p,\\\\\nS_2 &=p^{2}+2q,\\\\\nS_4 &=q^{2},\\\\\nS_3+m &=2pq,\n\\end{aligned}\n\\tag{2}\n\\]\n\nwhere for our roots  \n\n\\[\n\\begin{aligned}\nS_1&=18+72+98+k=188+k,\\\\\nS_2&=18\\cdot72+18\\cdot98+72\\cdot98+ (18+72+98)k\n     =10116+188k,\\\\\nS_3&=18\\cdot72\\cdot98+ (18\\cdot72+18\\cdot98+72\\cdot98)k\n     =127008+10116k,\\\\\nS_4&=18\\cdot72\\cdot98\\cdot k=127008\\,k .\n\\end{aligned}\n\\]\n\nFrom (2) we obtain  \n\n\\[\np=\\frac{188+k}{2},\\qquad q=\\sqrt{127008\\,k}=252\\sqrt{2k}.\n\\]\n\nUsing the second equation of (2),\n\n\\[\nS_2=p^{2}+2q,\n\\]\n\ngives the condition on \\(k\\):\n\n\\[\n\\frac{(188+k)^{2}}{4}+2\\sqrt{127008k}=10116+188k .\n\\tag{3}\n\\]\n\n---\n\n### Solving (3)\n\nPut \\(k=t^{2}\\;(t>0)\\).  Since \\(\\sqrt{127008k}=252\\sqrt{2}\\,t\\),\n(3) becomes\n\n\\[\nt^{4}-376t^{2}+2016\\sqrt{2}\\,t-5120=0 .\n\\]\n\nFactoring,\n\n\\[\n(t^{2}+6\\sqrt{2}\\,t-320)(t^{2}-6\\sqrt{2}\\,t+16)=0 .\n\\]\n\nHence the positive solutions for \\(t\\) are\n\n\\[\nt=10\\sqrt2,\\qquad t=4\\sqrt2,\\qquad t=2\\sqrt2 .\n\\]\n\nConsequently\n\n\\[\nk=t^{2}=200,\\;32,\\;8 .\n\\]\n\n---\n\n### Verification\n\nFor each \\(k\\) the ordered roots of \\(g\\) are\n\n\\[\n\\begin{array}{c|c}\nk & \\text{ordered roots }(r_1,r_2,r_3,r_4)\\\\ \\hline\n8  & (8,18,72,98)\\\\\n32 & (18,32,72,98)\\\\\n200& (18,72,98,200)\n\\end{array}\n\\]\n\nUsing \\(p\\) and \\(q\\) we find the tangency points  \n\n\\[\n\\alpha,\\beta=\\frac{p\\pm\\sqrt{p^{2}-4q}}{2},\n\\]\n\nand they lie respectively in the intervals \\((r_1,r_2)\\) and\n\\((r_3,r_4)\\). Thus in each case the line \\(y=m x\\) is tangent to\n\\(g\\) at two points, giving exactly two distinct global minima of\n\\(f\\). No other \\(k>0\\) satisfies (3); hence these are the only three\nvalues.\n\nFinally, the required sum is\n\n\\[\n8+32+200 = 240 .\n\\]\n\n\\[\n\\boxed{240}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 240

    \n

    Extracted Answer: 240

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nz=x+iy\\qquad (x,y\\in\\mathbb{R}).\n\\]\n\n---\n\n### 1.  The first equation \u2013 a circle  \n\n\\[\n|25+20i-z|=5 \\Longrightarrow (x-25)^2+(y-20)^2=5^2 .\n\\]\n\nThus the circle has centre  \n\n\\[\nC=(25,20),\\qquad \\text{radius } r=5 .\n\\]\n\n---\n\n### 2.  The second equation \u2013 a perpendicular bisector  \n\n\\[\n|z-(4+k)|=|z-(3i+k)|\n\\]\n\nwrites as  \n\n\\[\n(x-(k+4))^2+y^{2}=(x-k)^2+(y-3)^2 .\n\\]\n\nSimplifying,\n\n\\[\n-8x+6y+8k+7=0\\quad\\Longrightarrow\\quad 4x-3y-(4k+3.5)=0 .\n\\]\n\nHence the set of points satisfying the second condition is the line  \n\n\\[\nL:\\;4x-3y=4k+\\frac 72 .\n\\]\n\nThis is the perpendicular bisector of the segment joining  \n\\(A=(k+4,0)\\) and \\(B=(k,3)\\) (its slope is \\(4/3\\) for any \\(k\\)).\n\n---\n\n### 3.  One intersection  \\(\\iff\\)  tangency  \n\nThe system has exactly one solution precisely when the line \\(L\\) is tangent to the circle, i.e. when the distance from the centre \\(C\\) to \\(L\\) equals the radius \\(5\\).\n\nThe distance from \\((x_0,y_0)\\) to \\(Ax+By+C=0\\) is  \n\n\\[\n\\frac{|Ax_0+By_0+C|}{\\sqrt{A^2+B^2}} .\n\\]\n\nFor \\(C=(25,20)\\) and \\(L: 4x-3y-(4k+3.5)=0\\),\n\n\\[\nd=\\frac{|4\\cdot25-3\\cdot20-(4k+3.5)|}{\\sqrt{4^{2}+(-3)^{2}}}\n   =\\frac{|40-4k-3.5|}{5}\n   =\\frac{|36.5-4k|}{5}.\n\\]\n\nSet \\(d=r=5\\):\n\n\\[\n\\frac{|36.5-4k|}{5}=5\\quad\\Longrightarrow\\quad |36.5-4k|=25 .\n\\]\n\n---\n\n### 4.  Solving for \\(k\\)\n\n\\[\n\\begin{cases}\n36.5-4k=25 &\\Longrightarrow\\;4k=11.5\\;\\Longrightarrow\\;k=\\dfrac{23}{8},\\\\[4pt]\n36.5-4k=-25 &\\Longrightarrow\\;4k=61.5\\;\\Longrightarrow\\;k=\\dfrac{123}{8}.\n\\end{cases}\n\\]\n\nThus the possible real values of \\(k\\) are  \n\n\\[\nk_1=\\frac{23}{8},\\qquad k_2=\\frac{123}{8}.\n\\]\n\nBoth give a line tangent to the circle, so each yields exactly one solution \\(z\\).\n\n---\n\n### 5.  Sum of the possible \\(k\\)\u2019s  \n\n\\[\nk_1+k_2=\\frac{23+123}{8}=\\frac{146}{8}=\\frac{73}{4}.\n\\]\n\nWrite \\(\\frac{73}{4}\\) as \\(\\dfrac{m}{n}\\) with \\(\\gcd(m,n)=1\\); here \\(m=73,\\ n=4\\).\n\n\\[\nm+n=73+4=77.\n\\]\n\n\\[\n\\boxed{77}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 77

    \n

    Extracted Answer: 77

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1.  Write the recurrence for the numerators and denominators**\n\nLet  \n\n\\[\nx_k=\\frac{a_k}{b_k}\\qquad (a_k,b_k\\in \\mathbb Z ,\\; \\gcd(a_k,b_k)=1).\n\\]\n\nFrom  \n\n\\[\nx_{k+1}= \\frac{1}{3}\\Bigl(x_k+\\frac1{x_k}-1\\Bigr)=\\frac{x_k^2-x_k+1}{3x_k},\n\\]\n\nwe obtain  \n\n\\[\na_{k+1}=a_k^2-a_kb_k+b_k^2,\\qquad   \nb_{k+1}=3a_kb_k,          \\tag{1}\n\\]\n\nwith \\(a_1=25,\\;b_1=11\\).\n\n--------------------------------------------------------------------\n\n**Step 2.  The common factor \\(3^{e_k}\\)**  \n\nWrite  \n\n\\[\na_k=3^{e_k}A_k,\\qquad b_k=3^{e_k}B_k,\\qquad \\gcd(A_k,B_k)=1 .\n\\]\n\nDividing (1) by the highest possible power of \\(3\\) shows that\n\\(e_{k+1}=2e_k+1\\) and that the reduced pair \\((A_k,B_k)\\) always satisfies  \n\n\\[\nA_k\\equiv1\\pmod3,\\qquad B_k\\equiv2\\pmod3 .\n\\]\n\nWith \\(e_1=0\\) we get  \n\n\\[\ne_k=2^{\\,k-1}-1 .\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 3.  A very simple recurrence for the sum**\n\nLet  \n\n\\[\nS_k=a_k+b_k .\n\\]\n\nFrom (1)\n\n\\[\n\\begin{aligned}\nS_{k+1}&=a_{k+1}+b_{k+1}\n       =(a_k^2-a_kb_k+b_k^2)+3a_kb_k   \\\\\n       &=a_k^2+b_k^2+2a_kb_k=(a_k+b_k)^2=S_k^{\\,2}.\n\\end{aligned}\n\\]\n\nHence  \n\n\\[\nS_k=S_1^{\\,2^{\\,k-1}}=36^{\\,2^{\\,k-1}}. \\tag{3}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 4.  The reduced numerator and denominator**\n\nSince the common factor is \\(3^{e_k}\\),\n\n\\[\n\\frac{a_k}{b_k}= \\frac{A_k}{B_k},\\qquad \nm=A_k,\\; n=B_k .\n\\]\n\nThus  \n\n\\[\nm+n=\\frac{a_k+b_k}{3^{e_k}}\n     =\\frac{36^{\\,2^{\\,k-1}}}{3^{\\,2^{\\,k-1}-1}}\n     =2^{\\,2^{\\,k}}\\;3^{\\,2^{\\,k-1}+1}. \\tag{4}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 5.  Apply \\(k=2025\\)**  \n\nFrom (4),\n\n\\[\nm+n=2^{\\,2^{2025}}\\;3^{\\,2^{2024}+1}.\n\\]\n\nWe need this number modulo \\(1000\\).\n\n--------------------------------------------------------------------\n\n**Step 6.  Reduce modulo \\(8\\) and \\(125\\)**  \n\n*Modulo \\(8\\):*  \\(2^{\\ge3}\\equiv0\\pmod8\\); therefore  \n\n\\[\nm+n\\equiv0\\pmod8. \\tag{5}\n\\]\n\n*Modulo \\(125\\):*  Because \\(\\phi(125)=100\\),\n\n\\[\n2^{2^{2025}}\\equiv 2^{\\,2^{2025}\\bmod100},\n\\qquad\n3^{2^{2024}+1}\\equiv 3^{\\,(2^{2024}+1)\\bmod100}\\pmod{125}.\n\\]\n\nCompute the exponents.\n\n- \\(2^{2025}\\bmod100\\):  \n  \\(2^{2025}\\equiv32\\pmod{100}\\) (by CRT: \\(2^{2025}\\equiv0\\pmod4\\), \\(2^{2025}\\equiv7\\pmod{25}\\)).\n- \\(2^{2024}\\bmod100\\):  \n  \\(2^{2024}\\equiv16\\pmod{100}\\).\n\nHence  \n\n\\[\n2^{2^{2025}}\\equiv2^{32}\\equiv46\\pmod{125},\n\\qquad\n3^{2^{2024}+1}\\equiv3^{17}\\equiv38\\pmod{125}.\n\\]\n\nTherefore  \n\n\\[\nm+n\\equiv46\\cdot38\\equiv123\\pmod{125}. \\tag{6}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 7.  Chinese Remainder Theorem**\n\nFind \\(N\\) such that  \n\n\\[\nN\\equiv0\\pmod8,\\qquad N\\equiv123\\pmod{125}.\n\\]\n\nWrite \\(N=8k\\).  Then \\(8k\\equiv123\\pmod{125}\\), i.e.  \n\n\\[\nk\\equiv123\\cdot8^{-1}\\pmod{125}.\n\\]\n\nSince \\(8^{-1}\\equiv47\\pmod{125}\\),  \n\n\\[\nk\\equiv123\\cdot47\\equiv31\\pmod{125}.\n\\]\n\nThus \\(k=31+125t\\) and  \n\n\\[\nN=8k=8\\cdot31=248\\pmod{1000}.\n\\]\n\n--------------------------------------------------------------------\n\n**Answer**\n\n\\[\n\\boxed{248}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 248

    \n

    Extracted Answer: 248

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nA<B<C<D<E<F<G<H<I<J<K<L\n\\]\n\nand suppose the letters are randomly paired.  \nFor a pair \\(\\{x,y\\}\\) we write the word \\(xy\\) with the letters in\nalphabetical order (\\(x<y\\)).  \nThe six words are then ordered alphabetically; the last word is the\nlexicographically largest word.\n\n--------------------------------------------------------------------\n### 1.  Conditioning on the partner of \\(G\\)\n\nIn a random perfect matching each of the other \\(11\\) letters is equally\nlikely to be paired with \\(G\\).  \nLet the partner be \\(X\\).  The probability we need is  \n\n\\[\nP=\\frac1{11}\\sum_{X\\neq G}\n\\Pr\\bigl(\\text{the pair } \\{G,X\\}\\text{ is the maximal word}\\mid\nG\\text{ is paired with }X\\bigr).\n\\]\n\nThus we must evaluate the conditional probability for each possible\n\\(X\\).\n\n--------------------------------------------------------------------\n### 2.  When \\(X<G\\)\n\nIf \\(X<G\\) the word is \\(XG\\) and its first letter is \\(X\\).  \nFor it to be the maximal word, the first letters (the smaller letters)\nof all other five pairs must be **smaller than \\(X\\)**.\nHence among the remaining ten letters we need five distinct letters\nall less than \\(X\\).\n\nThe only letter with five smaller letters is \\(F\\) (the letters\n\\(A,B,C,D,E\\) are smaller).  \nThus:\n\n* \\(X=F\\) is possible;\n* \\(X=A,B,C,D,E\\) are impossible (there are not enough smaller\nletters).\n\nWhen \\(X=F\\) the remaining letters are  \n\\(\\{A,B,C,D,E\\}\\) and \\(\\{H,I,J,K,L\\}\\).  \nTo keep every other pair\u2019s first letter \\(<F\\), each of the five large\nletters must be paired with a distinct small one.  \nThe number of such matchings is \\(5!=120\\).\n\nThe total number of matchings of those ten letters is  \n\n\\[\n\\frac{10!}{2^5\\,5!}=945 .\n\\]\n\nHence  \n\n\\[\n\\Pr(\\text{maximal}\\mid G\\text{\u2013}F)=\\frac{120}{945}=\\frac{8}{63}.\n\\]\n\n--------------------------------------------------------------------\n### 3.  When \\(X>G\\)\n\nNow the word is \\(GX\\) and its first letter is \\(G\\).\nFor it to be maximal, **no other pair may have a first letter larger\nthan \\(G\\)**; i.e. no remaining pair may consist of two letters both\ngreater than \\(G\\).\n\nAfter fixing the pair \\(\\{G,X\\}\\) (with \\(X\\in\\{H,I,J,K,L\\}\\)), the\nremaining letters are\n\n* the six letters \\(\\{A,B,C,D,E,F\\}\\) (all \\(<G\\));\n* the four letters among \\(\\{H,I,J,K,L\\}\\) that are not \\(X\\) (all\n\\(>G\\)).\n\nThus each of those four \u201clarge\u2019\u2019 letters must be paired with a distinct\nsmall letter, leaving two small letters to pair together.\n\nNumber of valid matchings:\n\n\\[\n\\binom{6}{4}\\cdot4!\\cdot1=15\\cdot24=360 .\n\\]\n\nAgain the total number of matchings of the ten remaining letters is\n\\(945\\). Therefore\n\n\\[\n\\Pr(\\text{maximal}\\mid G\\text{\u2013}X)=\\frac{360}{945}=\\frac{8}{21}\n\\qquad (X=H,I,J,K,L).\n\\]\n\n--------------------------------------------------------------------\n### 4.  Assemble the probability\n\n\\[\n\\begin{aligned}\nP&=\\frac1{11}\\Bigl(\\frac{8}{63}\n+5\\cdot\\frac{8}{21}\\Bigr)    \\\\\n &=\\frac1{11}\\Bigl(\\frac{8}{63}+\\frac{40}{21}\\Bigr)\n   =\\frac1{11}\\Bigl(\\frac{8+120}{63}\\Bigr)\n   =\\frac{128}{693}.\n\\end{aligned}\n\\]\n\nThe fraction \\(\\displaystyle\\frac{128}{693}\\) is already in lowest\nterms.  Hence \\(m=128,\\;n=693\\) and\n\n\\[\nm+n = 128+693 = 821 .\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{821}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 821

    \n

    Extracted Answer: 821

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nS(t)=\\sum_{a=1}^{3^{6}}\\exp\\!\\Big(2\\pi i\\,\\frac{t a^{3}}{3^{7}}\\Big) \\qquad(0\\le t<3^{7})\n\\]\n\nand denote  \n\n\\[\nN=\\#\\{(a,b,c)\\mid 1\\le a,b,c\\le 3^{6},\n\\ a^{3}+b^{3}+c^{3}\\equiv 0\\pmod{3^{7}}\\}.\n\\]\n\nFor any modulus \\(m\\),\n\n\\[\n\\#\\{(x,y,z):x+y+z\\equiv0\\pmod m\\}=\n\\frac1m\\sum_{t=0}^{m-1}\\Bigl(\\sum_{x}e^{2\\pi i t x/m}\\Bigr)^3 .\n\\]\n\nHence  \n\n\\[\nN=\\frac1{3^{7}}\\sum_{t=0}^{3^{7}-1} S(t)^{3}. \\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1.  Splitting the summation\n\nWrite each \\(a\\) as \\(a=3^{v}u\\) where \\(v=v_{3}(a)\\) and \\(u\\) is not\ndivisible by \\(3\\).  \nFor \\(0\\le v\\le 2\\) define  \n\n\\[\nU_{v}=\\{\\,u:1\\le u\\le 3^{6-v},\\;3\\nmid u\\,\\},\n\\qquad |U_{0}|=486,\\ |U_{1}|=162,\\ |U_{2}|=54 .\n\\]\n\nIf \\(v\\ge3\\) then \\(a^{3}\\equiv0\\pmod{3^{7}}\\); there are  \n\\(n_{3}=27\\) such numbers.\nThus\n\n\\[\nS(t)=f_{0}(t)+f_{1}(t)+f_{2}(t)+n_{3},\n\\]\nwhere  \n\n\\[\n\\begin{aligned}\nf_{0}(t)&=\\sum_{x\\in U_{0}}\\zeta^{t x^{3}},\\\\[2mm]\nf_{1}(t)&=\\sum_{x\\in U_{1}}\\zeta^{t\\,27x^{3}},\\\\[2mm]\nf_{2}(t)&=\\sum_{x\\in U_{2}}\\zeta^{t\\,729x^{3}},\n\\end{aligned}\n\\qquad \n\\zeta=e^{2\\pi i/3^{7}} .\n\\]\n\n--------------------------------------------------------------------\n### 2.  Evaluating \\(f_{0},f_{1},f_{2}\\)\n\n*For \\(f_{0}\\).*  \nLet \\(G_{7}=(\\mathbb Z/3^{7}\\mathbb Z)^{\\times}\\) (\\(|G_{7}|=1458\\)).\nThe map \\(x\\mapsto x^{3}\\) from \\(G_{7}\\) onto the set of cubes\n\\(C_{6}\\) has kernel of size \\(3\\); consequently\n\n\\[\n\\sum_{x\\in G_{7}}\\zeta^{t x}=3\\sum_{r\\in C_{6}}\\zeta^{t r}=3f_{0}(t).\n\\]\n\nFor \\(t\\neq0\\) one has  \n\n\\[\n\\sum_{x\\in G_{7}}\\zeta^{t x}= -\\!\\!\\sum_{\\substack{x\\;(\\bmod 3^{7})\\\\3\\mid x}}\\!\\!\\zeta^{t x}\n=\\begin{cases}\n-729,&v_{3}(t)=6,\\\\\n0,&0\\le v_{3}(t)\\le5 .\n\\end{cases}\n\\]\n\nHence  \n\n\\[\nf_{0}(t)=\n\\begin{cases}\n486,&t=0,\\\\[2mm]\n-243,&v_{3}(t)=6,\\\\[2mm]\n0,&\\text{otherwise.}\n\\end{cases}\n\\tag{2}\n\\]\n\n*For \\(f_{1}\\).*  \nWriting each \\(x\\in U_{1}\\) as \\(x=v+81k\\;(k=0,1,2)\\) one finds\n\\(x^{3}\\equiv v^{3}\\pmod{81}\\). Consequently  \n\n\\[\nf_{1}(t)=3\\!\\!\\sum_{\\substack{v\\in(\\mathbb Z/81)^{\\times}}}\\!\n\\exp\\!\\Big(2\\pi i\\,\\frac{t v^{3}}{81}\\Big).\n\\]\n\nUsing again that the cube map on \\((\\mathbb Z/81)^{\\times}\\) has kernel\nsize \\(3\\),\n\n\\[\nf_{1}(t)=3\\!\\cdot\\!3\\!\\!\\sum_{r\\in C_{1}}\\!\n\\exp\\!\\Big(2\\pi i\\,\\frac{t r}{81}\\Big) ,\n\\]\n\nwhere \\(C_{1}\\) is the set of cube\u2011residues modulo \\(81\\) (\\(|C_{1}|=18\\)).\nNow\n\n\\[\n\\sum_{x\\in(\\mathbb Z/81)^{\\times}}\\exp\\!\\Big(2\\pi i\\,\n\\frac{t x}{81}\\Big)=\n\\begin{cases}\n54,&v_{3}(t)\\ge4,\\\\[1mm]\n-27,&v_{3}(t)=3,\\\\[1mm]\n0,&v_{3}(t)\\le2 .\n\\end{cases}\n\\]\n\nThus\n\n\\[\nf_{1}(t)=\n\\begin{cases}\n162,&v_{3}(t)\\ge4,\\\\[2mm]\n-81,&v_{3}(t)=3,\\\\[2mm]\n0,&v_{3}(t)\\le2 .\n\\end{cases}\n\\tag{3}\n\\]\n\n*For \\(f_{2}\\).*  \nHere \\(x^{3}\\equiv x\\pmod 3\\), and among the \\(54\\) numbers in \\(U_{2}\\)\nexactly half are \\(\\equiv1\\pmod3\\) and half \\(\\equiv2\\pmod3\\). Hence  \n\n\\[\nf_{2}(t)=27\\bigl(\\zeta^{t}+ \\zeta^{2t}\\bigr)=\n\\begin{cases}\n-27,&v_{3}(t)=0,\\\\[2mm]\n54,&v_{3}(t)\\ge1 .\n\\end{cases}\n\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n### 3.  The values of \\(S(t)\\)\n\nFrom (2)\u2013(4) (and remembering the constant term \\(n_{3}=27\\))\n\n\\[\nS(t)=f_{0}(t)+f_{1}(t)+f_{2}(t)+27=\n\\begin{array}{c|c}\nv_{3}(t) & S(t)\\\\ \\hline\n\\infty\\;(t=0) & 729\\\\\n0 & 0\\\\\n1 & 81\\\\\n2 & 81\\\\\n3 & 0\\\\\n4 & 243\\\\\n5 & 243\\\\\n6 & 0\n\\end{array}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Computing \\(N\\)\n\nOnly the classes with non\u2011zero \\(S(t)\\) contribute to (1).  \nThe numbers of \\(t\\) in each class are\n\n\\[\n\\begin{array}{c|c}\nv_{3}(t) & \\#t\\\\ \\hline\n\\infty & 1\\\\\n0 & 1458\\\\\n1 & 486\\\\\n2 & 162\\\\\n3 & 54\\\\\n4 & 18\\\\\n5 & 6\\\\\n6 & 2\n\\end{array}\n\\]\n\nHence\n\n\\[\n\\begin{aligned}\nN&=\\frac1{3^{7}}\\Bigl( 729^{3}\n+ (486+162) \\,81^{3}\n+ (18+6)\\,243^{3}\\Bigr)\\\\[2mm]\n&=\\frac1{3^{7}}\\Bigl(3^{18}+648\\cdot3^{12}+24\\cdot3^{15}\\Bigr)\\\\\n&=3^{5}\\cdot2025 = 243\\cdot2025 = 492\\,075 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 5.  Remainder modulo \\(1000\\)\n\n\\[\n492\\,075 \\equiv 75 \\pmod{1000}.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{75}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 735

    \n

    Extracted Answer: 75

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Overview**\n\nThe given lengths on the sides of \\(\\triangle ABC\\) give  \n\n\\[\nAD=4,\\;DE=16,\\;EB=8 \\qquad\\Longrightarrow\\qquad AB=28,\n\\]\n\\[\nAF=13,\\;FG=52,\\;GC=26 \\qquad\\Longrightarrow\\qquad AC=91 .\n\\]\n\n--------------------------------------------------------------------\n\n### 1.  Two lines parallel to \\(BC\\)\n\n\\[\n\\frac{AD}{AB}= \\frac{4}{28}= \\frac{1}{7},\\qquad \n\\frac{AF}{AC}= \\frac{13}{91}= \\frac{1}{7}.\n\\]\n\nHence the points \\(D\\in AB\\) and \\(F\\in AC\\) divide the two sides in the same\nratio; therefore \\(DF\\parallel BC\\).\n\nSimilarly  \n\n\\[\n\\frac{AE}{AB}= \\frac{AD+DE}{AB}= \\frac{20}{28}= \\frac57,\n\\qquad \n\\frac{AG}{AC}= \\frac{AF+FG}{AC}= \\frac{65}{91}= \\frac57,\n\\]\n\nso \\(E\\in AB,\\;G\\in AC\\) also give a line parallel to \\(BC\\); i.e. \\(EG\\parallel BC\\).\n\nThus the quadrilateral \\(DEGF\\) is bounded by two parallel sides \\(DF,EG\\) and\nthe two segments of the sides of the triangle, and it is the region between the\ntwo similar triangles \\(ADF\\) and \\(AEG\\).\n\n--------------------------------------------------------------------\n\n### 2.  Area of \\(\\triangle ABC\\)\n\nIf \\([XYZ]\\) denotes area, similarity gives  \n\n\\[\n[ADF]=\\Bigl(\\frac{AD}{AB}\\Bigr)^2[ABC]=\\Bigl(\\frac17\\Bigr)^2[ABC]=\\frac{[ABC]}{49},\n\\]\n\n\\[\n[AEG]=\\Bigl(\\frac{AE}{AB}\\Bigr)\\Bigl(\\frac{AG}{AC}\\Bigr)[ABC]\n      =\\frac57\\cdot\\frac57[ABC]=\\frac{25}{49}[ABC].\n\\]\n\nHence  \n\n\\[\n[DEGF]=[AEG]-[ADF]=\\Bigl(\\frac{25}{49}-\\frac1{49}\\Bigr)[ABC]\n       =\\frac{24}{49}[ABC].\n\\]\n\nGiven \\([DEGF]=288\\),\n\n\\[\n\\frac{24}{49}[ABC]=288\\quad\\Longrightarrow\\quad[ABC]=288\\cdot\\frac{49}{24}\n                  =12\\cdot49=588.\n\\]\n\n--------------------------------------------------------------------\n\n### 3.  Area of the heptagon \\(AFNBCEM\\)\n\nPlace the triangle with \\(A=(0,0),\\;B=(28,0)\\) and\n\\(C=(91\\cos\\theta,\\,91\\sin\\theta)\\).\nBecause \\([ABC]=\\tfrac12\\cdot28\\cdot91\\sin\\theta\\),\n\n\\[\n\\sin\\theta=\\frac{[ABC]}{1274}= \\frac{588}{1274}= \\frac{6}{13}.\n\\]\n\nThus  \n\n\\[\n\\cos\\theta=\\frac{\\sqrt{1-\\sin^2\\theta}}{\\,}= \\frac{\\sqrt{133}}{13}.\n\\]\n\nThe coordinates of the relevant points are\n\n\\[\n\\begin{aligned}\n&F=(13\\cos\\theta,13\\sin\\theta)=(\\sqrt{133},6), \\\\\n&G=(65\\cos\\theta,65\\sin\\theta)=(5\\sqrt{133},30),\\\\\n&D=(4,0),\\qquad\nE=(20,0),\\\\\n&M=2F-D=(2\\sqrt{133}-4,12),\\\\\n&N=2E-G=(40-5\\sqrt{133},-30).\n\\end{aligned}\n\\]\n\nUsing the shoelace formula for the polygon\n\\(A\\,(0,0),\\;F,\\;N,\\;B,\\;C,\\;E,\\;M\\) we obtain\n\n\\[\n\\begin{aligned}\n\\sum (x_i y_{i+1}-y_i x_{i+1})\n&= -240+840+1176-840+240 = 1176,\\\\[2mm]\n\\text{Area}&=\\frac12\\cdot1176=588.\n\\end{aligned}\n\\]\n\nThus the heptagon \\(AFNBCEM\\) has the same area as \\(\\triangle ABC\\).\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{588}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 588

    \n

    Extracted Answer: 588

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nP:\\; y=x^{2}-4\n\\]\n\nand rotate \\(P\\) about the origin \\(60^{\\circ}\\) counter\u2011clockwise.  \nIf \\((x,y)\\) is a point of \\(P\\) then its image \\((X,Y)\\) satisfies  \n\n\\[\n\\begin{pmatrix}X\\\\Y\\end{pmatrix}= \n\\begin{pmatrix}\\cos 60^\\circ & -\\sin 60^\\circ\\\\[2pt] \n\\sin 60^\\circ & \\ \\cos 60^\\circ\\end{pmatrix}\n\\begin{pmatrix}x\\\\y\\end{pmatrix},\n\\qquad \n\\cos60^\\circ=\\frac12,\\;\\sin60^\\circ=\\frac{\\sqrt3}{2}.\n\\]\n\nHence  \n\n\\[\nX=\\frac{x}{2}-\\frac{\\sqrt3}{2}y,\\qquad\nY=\\frac{\\sqrt3}{2}x+\\frac{y}{2}.\n\\]\n\nTo obtain the equation of the rotated curve in the original \\((x,y)\\)\u2013coordinates,\nsolve for \\((x,y)\\) in terms of \\((X,Y)\\) (rotate back by \\(-60^\\circ\\)):\n\n\\[\nx = \\frac{X}{2}+\\frac{\\sqrt3}{2}Y,\\qquad\ny = -\\frac{\\sqrt3}{2}X+\\frac{Y}{2}.\n\\]\n\nSince the original points satisfy \\(y=x^{2}-4\\), substituting the expressions above gives the equation of the image:\n\n\\[\nx^{2}+2\\sqrt3\\,xy+3y^{2}+2\\sqrt3\\,x-2y-16=0. \\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### Intersection with the original parabola\n\nThe intersection points satisfy simultaneously  \n\n\\[\ny=x^{2}-4\\qquad\\text{and}\\qquad (1).\n\\]\n\nSubstituting \\(y=x^{2}-4\\) into (1) yields\n\n\\[\n3x^{4}-25x^{2}+40+2\\sqrt3\\,x^{3}-6\\sqrt3\\,x=0.\n\\]\n\nFactor this quartic in the field \\(\\mathbb{Q}(\\sqrt3)\\):\n\n\\[\n\\begin{aligned}\n3x^{4}-25x^{2}+40+2\\sqrt3\\,x^{3}-6\\sqrt3\\,x\n&=(x^{2}+\\sqrt3\\,x-4)\\bigl(3x^{2}-\\sqrt3\\,x-10\\bigr).\n\\end{aligned}\n\\]\n\nThus the intersection points satisfy one of  \n\n\\[\n\\begin{cases}\nx^{2}+\\sqrt3\\,x-4=0,\\\\[2pt]\n\\text{or}\\\\[2pt]\n3x^{2}-\\sqrt3\\,x-10=0 .\n\\end{cases}\n\\]\n\n--------------------------------------------------------------------\n### Selecting the point in the fourth quadrant\n\n*From* \\(x^{2}+\\sqrt3\\,x-4=0\\)\n\n\\[\nx=\\frac{-\\sqrt3\\pm\\sqrt{19}}{2}.\n\\]\n\nThe root \\(\\displaystyle x=\\frac{-\\sqrt3+\\sqrt{19}}{2}>0\\) gives  \n\n\\[\ny=x^{2}-4=\\frac{11-\\sqrt{57}}{2}-4=\\frac{3-\\sqrt{57}}{2}<0,\n\\]\n\nso \\((x,y)\\) lies in the fourth quadrant.\n\n*From* \\(3x^{2}-\\sqrt3\\,x-10=0\\)\n\n\\[\nx=\\frac{\\sqrt3\\pm\\sqrt{123}}{6},\n\\]\n\nwhich yields either \\(y>0\\) (first root) or \\(x<0\\) (second root); neither point is in the fourth quadrant.\n\nHence the unique fourth\u2011quadrant intersection point is  \n\n\\[\n\\Bigl(\\frac{-\\sqrt3+\\sqrt{19}}{2}\\,,\\; \\frac{3-\\sqrt{57}}{2}\\Bigr).\n\\]\n\n--------------------------------------------------------------------\n### Required \\(y\\)-coordinate\n\nThe \\(y\\)-coordinate is \\(\\displaystyle \\frac{3-\\sqrt{57}}{2}\\).\n\nWrite it as \\(\\frac{a-\\sqrt{b}}{c}\\) with \\(a,b,c\\) positive integers and \\(\\gcd(a,c)=1\\):\n\\[\na=3,\\qquad b=57,\\qquad c=2.\n\\]\n\nTherefore  \n\n\\[\na+b+c = 3+57+2 = 62.\n\\]\n\n\\[\n\\boxed{62}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 62

    \n

    Extracted Answer: 62

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the line containing \\(A,B,C,D,E,F\\) be the \\(x\\)-axis.\n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(c,0),\\qquad D=(d,0),\\qquad \nE=(e,0),\\qquad F=(f,0)\n\\]\n\nBecause the points are in the order \\(A,B,C,D,E,F\\),\n\n\\[\nc-b=AC-AB,\\; d-b=BD,\\; e-c=CE,\\; f-d=DF,\\; f-0=AF.\n\\]\n\nTake \\(A\\) at the origin.  From the data\n\n\\[\nAC=26\\implies c=26,\n\\]\n\\[\nBD=22\\implies d=b+22,\n\\]\n\\[\nCE=31\\implies e=c+31=57,\n\\]\n\\[\nDF=33\\implies f=d+33=b+55,\n\\]\n\\[\nAF=73\\implies f=73.\n\\]\n\nHence \\(b+55=73\\Rightarrow b=18\\).  \nThus the coordinates are  \n\n\\[\nB=(18,0),\\; C=(26,0),\\; D=(40,0),\\; E=(57,0),\\; F=(73,0).\n\\]\n\n---\n\n### Locate \\(G\\)\n\n\\(G\\) is off the line and satisfies  \n\n\\[\nCG=40,\\qquad DG=30.\n\\]\n\nLet \\(G=(x,y)\\) with \\(y\\neq0\\). Then  \n\n\\[\n(x-26)^2+y^{2}=40^{2}=1600,\\tag{1}\n\\]\n\\[\n(x-40)^2+y^{2}=30^{2}=900.\\tag{2}\n\\]\n\nSubtract (2) from (1):\n\n\\[\n(x-26)^2-(x-40)^2=700.\n\\]\n\nExpanding,\n\n\\[\n[x^{2}-52x+676]-[x^{2}-80x+1600]=28x-924=700,\n\\]\n\\[\n28x=1624\\quad\\Longrightarrow\\quad x=58.\n\\]\n\nPlugging \\(x=58\\) into (2):\n\n\\[\n(58-40)^{2}+y^{2}=900\\;\\Longrightarrow\\;18^{2}+y^{2}=900\n\\]\n\\[\ny^{2}=576\\;\\Longrightarrow\\;|y|=24.\n\\]\n\nSo \\(G=(58,\\,24)\\) (the point \\((58,-24)\\) gives the same area).\n\n---\n\n### Area of \\(\\triangle BGE\\)\n\nPoints \\(B\\) and \\(E\\) lie on the \\(x\\)-axis, so the base \\(BE\\) has length\n\n\\[\nBE = e-b = 57-18 = 39.\n\\]\n\nThe altitude from \\(G\\) to the line \\(BE\\) (the \\(x\\)-axis) is \\(|y| = 24\\).\n\nHence  \n\n\\[\n\\text{Area} = \\frac12 \\times BE \\times \\text{height}\n= \\frac12 \\times 39 \\times 24 = 468.\n\\]\n\n\\[\n\\boxed{468}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 468

    \n

    Extracted Answer: 468

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    We need the positive integers \\(n\\) such that  \n\n\\[\nn+2\\mid 3(n+3)(n^{2}+9).\n\\]\n\n---\n\n### 1.  Replace \\(n+2\\) by a new variable  \n\nLet  \n\n\\[\nk=n+2\\qquad (k\\ge 3), \\qquad n=k-2 .\n\\]\n\nThen  \n\n\\[\n\\begin{aligned}\nn+3 &= (k-2)+3 = k+1,\\\\[2pt]\nn^{2}+9 &= (k-2)^{2}+9 = k^{2}-4k+13 .\n\\end{aligned}\n\\]\n\nHence  \n\n\\[\n3(n+3)(n^{2}+9)=3(k+1)(k^{2}-4k+13).\n\\]\n\nThe condition becomes  \n\n\\[\nk \\mid 3(k+1)(k^{2}-4k+13).\n\\]\n\n---\n\n### 2.  Reduce modulo \\(k\\)\n\nModulo \\(k\\),\n\n\\[\nk+1\\equiv 1,\\qquad k^{2}-4k+13\\equiv 13,\n\\]\n\nbecause \\(k\\equiv 0\\) gives \\(k^{2}\\equiv 0\\) and \\(-4k\\equiv 0\\).\n\nThus  \n\n\\[\n3(k+1)(k^{2}-4k+13)\\equiv 3\\cdot 1\\cdot 13=39 \\pmod{k}.\n\\]\n\nHence the divisibility condition is equivalent to  \n\n\\[\nk\\mid 39.\n\\]\n\n---\n\n### 3.  Find admissible \\(k\\) and corresponding \\(n\\)\n\nThe positive divisors of \\(39\\) are \\(1,3,13,39\\).\nSince \\(k=n+2\\ge 3\\), we keep  \n\n\\[\nk\\in \\{3,13,39\\}.\n\\]\n\nTherefore  \n\n\\[\nn=k-2\\in\\{1,11,37\\}.\n\\]\n\nAll three values satisfy the original condition (a quick check confirms the division).\n\n---\n\n### 4.  Sum of all such \\(n\\)\n\n\\[\n1+11+37 = 49.\n\\]\n\n\\[\n\\boxed{49}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 49

    \n

    Extracted Answer: 49

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz<y-zx<z-xy$ forms three disjoint convex regions. Exactly one of those regions has finite area. The area of this finite region can be expressed in the form $a\\sqrt{b}$, where $a$ and $b$ are positive integers and $b$ is not divisible by the square of any prime. Find $a+b$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The inequalities\n\n\\[\nx-yz<y-zx<z-xy\n\\]\n\nwith the plane \\(x+y+z=75\\) can be simplified.  \nWrite \\(z=75-x-y\\). Then\n\n\\[\n\\begin{aligned}\ny-zx-(x-yz) &= (y-x)(1+z)= (y-x)(76-x-y),\\\\\nz-xy-(y-zx) &= (z-y)(1+x)= (75-x-2y)(1+x).\n\\end{aligned}\n\\]\n\nThus the points on the plane satisfy  \n\n\\[\n(y-x)(76-x-y)>0,\\qquad (75-x-2y)(1+x)>0 .\n\\tag{1}\n\\]\n\nDefine in the \\(xy\\)-plane the lines  \n\n\\[\n\\begin{aligned}\nL_1 &: y=x,\\\\\nL_2 &: x+y=76,\\\\\nL_3 &: x=-1,\\\\\nL_4 &: x+2y=75\\;(y=(75-x)/2).\n\\end{aligned}\n\\]\n\nFrom (1) we obtain two possibilities for each product, giving four possible\nintersections of half\u2011planes.  One of these intersections is empty; the other three\nare convex.  The region for which both products in (1) are **positive** is\n\n\\[\n\\begin{cases}\ny>x,\\\\\nx+y<76,\\\\\ny<(75-x)/2,\\\\\nx>-1,\n\\end{cases}\n\\]\n\nwhich in the \\(xy\\)-plane is the interior of the triangle with vertices\n\n\\[\nA(-1,-1),\\qquad B(-1,38),\\qquad C(25,25).\n\\]\n\nThe other two regions are unbounded.  Hence the finite region is this triangle.\n\n---\n\n### Area in the \\(xy\\)-plane\n\n\\[\n\\text{Area}_{xy}= \\frac12\\bigl|AB\\times AC\\bigr|\n               =\\frac12\\bigl| (0,39)\\times (26,26)\\bigr|\n               =\\frac12\\cdot1014 = 507 .\n\\]\n\n---\n\n### Area on the plane \\(x+y+z=75\\)\n\nThe plane is given by \\(z=75-x-y\\).  Its area element satisfies  \n\n\\[\ndS = \\sqrt{1+(\\partial_xz)^2+(\\partial_yz)^2}\\;dx\\,dy\n    =\\sqrt{1+1+1}\\;dx\\,dy =\\sqrt3\\,dx\\,dy .\n\\]\n\nHence  \n\n\\[\n\\text{Area}_{\\text{plane}} = \\sqrt3\\;\\text{Area}_{xy}\n                            = 507\\sqrt3 .\n\\]\n\nSo the area can be written as \\(a\\sqrt b\\) with \\(a=507,\\ b=3\\).\nTherefore  \n\n\\[\na+b = 507+3 = 510 .\n\\]\n\n\\[\n\\boxed{510}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 510

    \n

    Extracted Answer: 510

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nA piecewise linear periodic function is defined by $f(x)=\\begin{cases}x&\\text{if }x\\in[-1,1)\\\\2-x&\\text{if }x\\in[1,3)\\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\\frac{a+b\\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The intersection points satisfy  \n\n\\[\ny=f(x),\\qquad x=34y^{2}\\;( \\ge 0).\n\\]\n\nBecause \\(f\\) has period \\(4\\),\n\n\\[\nf(x)=\\begin{cases}\nx-4k ,&x\\in[-1+4k,\\,1+4k),\\\\[2mm]\n2+4k-x ,&x\\in[1+4k,\\,3+4k),\n\\end{cases}\\qquad k\\in\\mathbb Z .\n\\]\n\n--------------------------------------------------------------------\n### 1.  Equations for the two linear pieces  \n\n*Ascending piece*  \\((x-4k)\\):  \n\n\\[\ny=x-4k,\\qquad x=34y^{2}\n\\Longrightarrow 34y^{2}-y-4k=0. \\tag{1}\n\\]\n\n*Descending piece*  \\((2+4k-x)\\):  \n\n\\[\ny=2+4k-x,\\qquad x=34y^{2}\n\\Longrightarrow 34y^{2}+y-(2+4k)=0. \\tag{2}\n\\]\n\nBoth are quadratics in \\(y\\); each can give at most two real roots.\n\n--------------------------------------------------------------------\n### 2.  Which integers \\(k\\) give admissible roots?\n\nBecause \\(|y|\\le 1\\) (the range of \\(f\\)), the roots must lie in \\([-1,1]\\).\n\n*For (1):*  \nThe sum of the two roots equals \\(\\frac{1}{34}\\); the product is \\(-\\frac{4k}{34}\\).  \nThe discriminant must be non\u2011negative:\n\n\\[\n\\Delta_1=1+544k\\ge 0\\Longrightarrow k\\ge0 .\n\\]\n\nFor a root to be in \\([-1,1)\\) we also need  \n\n\\[\n-1\\le\\frac{1\\pm\\sqrt{1+544k}}{68}<1 .\n\\]\n\nThe last inequality forces \\(k\\le8\\).  Hence (1) yields real admissible roots for  \n\n\\[\nk=0,1,\\dots ,8 .\n\\]\n\nBoth roots are in \\([-1,1)\\) for each of these values.\n\n*For (2):*  \n\\[\n\\Delta_2=273+544k\\ge0\\Longrightarrow k\\ge0 .\n\\]\n\nThe condition \\(-1<y\\le 1\\) gives \\(k\\le8\\).  \nFor \\(k=0,\\dots ,7\\) both roots lie in \\((-1,1]\\); for \\(k=8\\) only the \u201c\\(+\\)\u201d root\n\\[\ny=\\frac{-1+\\sqrt{273+544\\cdot8}}{68}\n      =\\frac{-1+5\\sqrt{185}}{68}\n\\]\nremains in the interval (the \u201c\\(-\\)\u201d root is \\(<-1\\)).\n\nThus  \n\n* (1) contributes \\(2\\) solutions for each \\(k=0,\\dots ,8\\)  \\(\\Rightarrow 18\\) points;  \n* (2) contributes \\(2\\) solutions for each \\(k=0,\\dots ,7\\) and \\(1\\) solution for \\(k=8\\)  \\(\\Rightarrow 17\\) points.\n\nHence there are \\(35\\) intersection points altogether.\n\n--------------------------------------------------------------------\n### 3.  Sum of the \\(y\\)-coordinates  \n\nFor each fixed \\(k\\) the sum of the two roots of (1) is, by Vieta,\n\n\\[\n\\Sigma_{A}(k)=\\frac{1}{34}.\n\\]\n\nSo the total contribution of (1) is  \n\n\\[\n\\sum_{k=0}^{8}\\Sigma_{A}(k)=9\\cdot\\frac{1}{34}= \\frac{9}{34}.\n\\]\n\nFor (2), when both roots exist their sum is  \n\n\\[\n\\Sigma_{B}(k)=-\\frac{1}{34}.\n\\]\n\nThus for \\(k=0,\\dots ,7\\) the total is  \n\n\\[\n8\\cdot\\Bigl(-\\frac{1}{34}\\Bigr)=-\\frac{8}{34}.\n\\]\n\nFor \\(k=8\\) only the positive root remains:\n\n\\[\ny_{8}= \\frac{-1+5\\sqrt{185}}{68}.\n\\]\n\nAdding everything,\n\n\\[\n\\begin{aligned}\n\\text{Sum of all }y\n&=\\frac{9}{34}-\\frac{8}{34}+y_{8}\n   =\\frac{1}{34}+ \\frac{-1+5\\sqrt{185}}{68}\\\\[2mm]\n&= \\frac{2}{68}+ \\frac{-1+5\\sqrt{185}}{68}\n   =\\frac{1+5\\sqrt{185}}{68}.\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 4.  Final answer  \n\nThe sum is \\(\\displaystyle\\frac{1+5\\sqrt{185}}{68}\\).  \nThus  \n\n\\[\na=1,\\; b=5,\\; c=185,\\; d=68,\\qquad\na+b+c+d=1+5+185+68=259.\n\\]\n\n\\[\n\\boxed{259}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 259

    \n

    Extracted Answer: 259

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe 27 cells of a $3\\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. \n | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | \n | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | \n | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | \n The number of different ways to fill such a grid can be written as $p^a\\cdot q^b\\cdot r^c\\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\\cdot a+q\\cdot b+r\\cdot c+s\\cdot d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the three rows be \\(R_1,R_2,R_3\\) and the three \\(3\\times3\\) blocks be \\(B_1,B_2,B_3\\) (columns \\(1\\!-\\!3,\\;4\\!-\\!6,\\;7\\!-\\!9\\)).\nEach row must be a permutation of \\(\\{1,\\dots ,9\\}\\) and each block must also contain every digit once.\n\n--------------------------------------------------------------------\n### 1.  Where does a digit appear in the three rows?\n\nFor a fixed digit \\(d\\) its three copies (one in each row) must lie in three *different* blocks; otherwise a block would miss that digit.  \nThus for each digit we obtain a bijection  \n\n\\[\n\\phi_d:\\{1,2,3\\}\\longrightarrow\\{1,2,3\\},\\qquad \n\\phi_d(i)=\\text{block containing }d\\text{ in row }i .\n\\]\n\nSo each digit corresponds to a permutation of the three blocks.  \nThere are six permutations, listed with the cells \\((i,\\phi(i))\\) they occupy:\n\n\\[\n\\begin{array}{c|c}\n\\text{perm.} & \\text{cells}\\\\ \\hline\n(1)(2)(3) & (1,1),(2,2),(3,3)\\\\\n(12) & (1,2),(2,1),(3,3)\\\\\n(13) & (1,3),(2,2),(3,1)\\\\\n(23) & (1,1),(2,3),(3,2)\\\\\n(123) & (1,2),(2,3),(3,1)\\\\\n(132) & (1,3),(2,1),(3,2)\n\\end{array}\n\\]\n\nLet \\(x_1,\\dots ,x_6\\) be the numbers of digits that use the six permutations (in the order shown).  \nBecause each block must contain three digits from each row, each of the nine cells \\((i,k)\\) must be hit by exactly three digits, giving\n\n\\[\n\\begin{aligned}\nx_1+x_4 &=3, & x_2+x_5 &=3, & x_3+x_6 &=3,\\\\\nx_2+x_6 &=3, & x_1+x_3 &=3, & x_4+x_5 &=3,\\\\\nx_3+x_5 &=3, & x_4+x_6 &=3, & x_1+x_2 &=3 .\n\\end{aligned}\n\\]\n\nSolving, all solutions have the form  \n\n\\[\n(x_1,x_2,x_3,x_4,x_5,x_6)=(a,\\,3-a,\\,3-a,\\,3-a,\\,a,\\,a),\\qquad a\\in\\{0,1,2,3\\}.\n\\]\n\n--------------------------------------------------------------------\n### 2.  Assign the digits to the permutations\n\nFor a fixed \\(a\\) the number of ways to choose which digits get which permutation is\n\n\\[\n\\frac{9!}{x_1!\\,x_2!\\,x_3!\\,x_4!\\,x_5!\\,x_6!}\n   =\\frac{9!}{a!^{\\,3}\\,(3-a)!^{\\,3}} .\n\\]\n\nSumming over the four possible values of \\(a\\),\n\n\\[\n\\sum_{a=0}^3\\frac{9!}{a!^{\\,3}(3-a)!^{\\,3}}\n   =9!\\Bigl(\\frac1{3!^{\\,3}}{0\\choose0}^3\n            +\\frac1{3!^{\\,3}}{3\\choose1}^3\n            +\\frac1{3!^{\\,3}}{3\\choose2}^3\n            +\\frac1{3!^{\\,3}}{3\\choose3}^3\\Bigr)\n   =9!\\,\\frac{56}{216}\n   =9!\\,\\frac{7}{27}.\n\\]\n\n--------------------------------------------------------------------\n### 3.  Order the digits inside each block\n\nWithin a fixed block and a fixed row there are three column positions.\nThe three digits that belong to that macro\u2011cell can be placed in these\npositions in \\(3! = 6\\) ways.\nThere are \\(3\\) rows \\(\\times\\) \\(3\\) blocks \\(=9\\) such macro\u2011cells, giving a factor \\(6^9\\).\n\n--------------------------------------------------------------------\n### 4.  Total number of fillings\n\n\\[\nN = \\Bigl(9!\\,\\frac{7}{27}\\Bigr)\\,6^{9}\n   = 2^{16}\\,3^{10}\\,5\\,7^{2}.\n\\]\n\nThus the factorisation uses the four distinct primes  \n\n\\[\np=2,\\;q=3,\\;r=5,\\;s=7,\\qquad \na=16,\\;b=10,\\;c=1,\\;d=2 .\n\\]\n\nFinally,\n\n\\[\np\\,a+q\\,b+r\\,c+s\\,d\n   =2\\cdot16+3\\cdot10+5\\cdot1+7\\cdot2\n   =32+30+5+14=81.\n\\]\n\n\\[\n\\boxed{81}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 81

    \n

    Extracted Answer: 81

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    We place the pentagon in the plane.  \nSet  \n\n\\[\n\\begin{aligned}\nA&=(7,7\\sqrt3),\\qquad B=(0,0),\\qquad C=(7,0),\\\\[2mm]\nD&=\\Bigl(\\frac{205}{7},\\frac{36\\sqrt3}{7}\\Bigr),\\qquad \nE=\\Bigl(\\frac{218}{7},\\frac{88\\sqrt3}{7}\\Bigr).\n\\end{aligned}\n\\]\n\nThe lengths are as given and  \n\\(\\angle B=\\angle E =60^\\circ\\).\n\n--------------------------------------------------------------------\n### 1.  Geometry of the optimal point  \n\nFor the sum  \n\n\\[\nf(X)=AX+BX+CX+DX+EX,\n\\]\n\nthe geometric median \\(X\\) satisfies  \n\n\\[\n\\frac{X-A}{AX}+\\frac{X-B}{BX}+\\frac{X-C}{CX}+\\frac{X-D}{DX}+\\frac{X-E}{EX}=0 .\n\\tag{1}\n\\]\n\nBecause \\(B,E\\) lie on a line, the vectors \\(\\frac{X-B}{BX}\\) and\n\\(\\frac{X-E}{EX}\\) are opposite exactly when \\(X\\) lies on segment \\(BE\\);\nhence in the optimal position \\(X\\) must lie on \\(BE\\) and the first two\nterms in (1) cancel.  Consequently\n\n\\[\n\\frac{X-A}{AX}+\\frac{X-C}{CX}+\\frac{X-D}{DX}=0,\n\\]\n\nso \\(X\\) is the Fermat point of triangle \\(ACD\\).\n\n--------------------------------------------------------------------\n### 2.  Fermat point of \\(\\triangle ACD\\)\n\nThe side lengths of \\(\\triangle ACD\\) are  \n\n\\[\nAC=7\\sqrt3,\\qquad CD=24,\\qquad AD=13\\sqrt3 .\n\\]\n\nAll its angles are \\(<120^\\circ\\); therefore the Fermat point exists.\nFor a triangle with sides \\(a,b,c\\) and area \\(\\Delta\\),\n\n\\[\nS_{\\text{Fermat}}=\n\\sqrt{\\frac{a^{2}+b^{2}+c^{2}+4\\sqrt3\\,\\Delta}{2}} .\n\\]\n\nHere  \n\n\\[\na^{2}+b^{2}+c^{2}=576+507+147=1230,\n\\qquad\\Delta_{ACD}=78\\sqrt3,\n\\]\n\nso  \n\n\\[\nS_{\\text{Fermat}}=\\sqrt{\\frac{1230+4\\sqrt3\\cdot78\\sqrt3}{2}}\n=\\sqrt{\\frac{1230+936}{2}}=\\sqrt{1083}=19\\sqrt3 .\n\\]\n\nThus at the Fermat point  \n\n\\[\nAX+CX+DX=19\\sqrt3 .\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 3.  The total minimum\n\nSince the optimal point lies on \\(BE\\),\n\n\\[\nBX+EX = BE .\n\\]\n\nFrom the coordinates, \\(BE=38\\).  Combining this with (2),\n\n\\[\nf_{\\min}= (AX+CX+DX)+(BX+EX)=19\\sqrt3+38 .\n\\]\n\nHence the smallest possible value of \\(f(X)\\) is  \n\n\\[\n\\boxed{38+19\\sqrt3}.\n\\]\n\nWriting it as \\(m+n\\sqrt p\\) with \\(m,n\\) integers and \\(p\\) square\u2011free,\nwe have \\(m=38,\\;n=19,\\;p=3\\).  Therefore  \n\n\\[\nm+n+p=38+19+3=60 .\n\\]\n\n\\[\n\\boxed{60}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 60

    \n

    Extracted Answer: 60

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThe product $ \\prod_{k=4}^{63} \\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})} = \\frac{\\log_4(5^{15})}{\\log_5(5^{12})} \\cdot \\frac{\\log_5(5^{24})}{\\log_6(5^{21})} \\cdot \\frac{\\log_6(5^{35})}{\\log_7(5^{32})} \\cdots \\frac{\\log_{63}(5^{3968})}{\\log_{64}(5^{3965})} $ is equal to $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nP=\\prod_{k=4}^{63}\\frac{\\log_k\\!\\bigl(5^{k^{2}-1}\\bigr)}{\\log_{k+1}\\!\\bigl(5^{k^{2}-4}\\bigr)}\n\\]\n\n---\n\n### 1.  Simplify each factor  \n\n\\[\n\\log_k\\!\\bigl(5^{k^{2}-1}\\bigr)=(k^{2}-1)\\log_k5,\n\\qquad \n\\log_{k+1}\\!\\bigl(5^{k^{2}-4}\\bigr)=(k^{2}-4)\\log_{k+1}5 .\n\\]\n\nHence  \n\n\\[\n\\frac{\\log_k\\!\\bigl(5^{k^{2}-1}\\bigr)}{\\log_{k+1}\\!\\bigl(5^{k^{2}-4}\\bigr)}\n=\\frac{k^{2}-1}{k^{2}-4}\\cdot\\frac{\\log_k5}{\\log_{k+1}5}\n=\\frac{(k-1)(k+1)}{(k-2)(k+2)}\\cdot\\frac{\\log_k5}{\\log_{k+1}5}.\n\\]\n\nTherefore  \n\n\\[\nP=\\underbrace{\\prod_{k=4}^{63}\\frac{(k-1)(k+1)}{(k-2)(k+2)}}_{A}\n   \\times\\underbrace{\\prod_{k=4}^{63}\\frac{\\log_k5}{\\log_{k+1}5}}_{B}.\n\\]\n\n---\n\n### 2.  Evaluate the rational product \\(A\\)\n\n\\[\nA=\\Bigl(\\prod_{k=4}^{63}\\frac{k-1}{k-2}\\Bigr)\n   \\Bigl(\\prod_{k=4}^{63}\\frac{k+1}{k+2}\\Bigr)\n   =\\frac{3\\cdot4\\cdots62}{2\\cdot3\\cdots61}\\;\n     \\frac{5\\cdot6\\cdots64}{6\\cdot7\\cdots65}.\n\\]\n\nBoth products telescope:\n\n\\[\n\\frac{3\\cdot4\\cdots62}{2\\cdot3\\cdots61}= \\frac{62}{2}=31,\n\\qquad \n\\frac{5\\cdot6\\cdots64}{6\\cdot7\\cdots65}= \\frac{5}{65}= \\frac1{13}.\n\\]\n\nThus  \n\n\\[\nA=31\\cdot\\frac1{13}= \\frac{31}{13}.\n\\]\n\n---\n\n### 3.  Evaluate the logarithmic product \\(B\\)\n\n\\[\nB=\\frac{\\log_4 5}{\\log_5 5}\\cdot\\frac{\\log_5 5}{\\log_6 5}\\cdots\n    \\frac{\\log_{63}5}{\\log_{64}5}\n   =\\frac{\\log_4 5}{\\log_{64}5}.\n\\]\n\nUsing change\u2011of\u2011base,\n\\[\n\\frac{\\log_4 5}{\\log_{64} 5}\n   =\\frac{\\frac{\\ln5}{\\ln4}}{\\frac{\\ln5}{\\ln64}}\n   =\\frac{\\ln64}{\\ln4}\n   =\\log_4 64=3,\n\\]\nsince \\(4^3=64\\).\n\nHence \\(B=3\\).\n\n---\n\n### 4.  Combine\n\n\\[\nP=A\\cdot B=\\frac{31}{13}\\times 3=\\frac{93}{13}.\n\\]\n\nThe fraction \\(\\dfrac{93}{13}\\) is already in lowest terms, so  \n\\(m=93,\\; n=13\\).\n\n\\[\nm+n=93+13=106.\n\\]\n\n\\[\n\\boxed{106}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 106

    \n

    Extracted Answer: 106

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The divisors of  \n\n\\[\n2025=3^{4}\\cdot5^{2}\n\\]\n\nare exactly the numbers  \n\n\\[\n3^{a}5^{b}\\qquad (0\\le a\\le 4,\\;0\\le b\\le 2).\n\\]\n\nHence  \n\n\\[\n|A|=(4+1)(2+1)=15 .\n\\]\n\nFor a subset \\(B\\subseteq A\\) the least common multiple is\n\n\\[\n\\operatorname{lcm}(B)=3^{\\max a}\\,5^{\\max b},\n\\]\n\nwhere the maxima are taken over the exponents \\((a,b)\\) of the elements of \\(B\\).\n\nThus \\(\\operatorname{lcm}(B)=2025=3^4 5^2\\) iff  \n\n* at least one element of \\(B\\) has a \\(3\\)-exponent \\(4\\);\n* at least one element of \\(B\\) has a \\(5\\)-exponent \\(2\\).\n\nDefine  \n\n\\[\nD_3=\\{d\\in A : \\text{the exponent of }3\\text{ in }d\\text{ is }4\\},\n\\qquad \nD_5=\\{d\\in A : \\text{the exponent of }5\\text{ in }d\\text{ is }2\\}.\n\\]\n\nCounting:\n\n* \\(D_3\\): \\(a=4\\) and \\(b=0,1,2\\) \u21d2 \\(|D_3|=3\\) (81,\u202f405,\u202f2025).\n* \\(D_5\\): \\(b=2\\) and \\(a=0,1,2,3,4\\) \u21d2 \\(|D_5|=5\\) (25,\u202f75,\u202f225,\u202f675,\u202f2025).\n* The intersection is \\(\\{2025\\}\\); so \\(|D_3\\cap D_5|=1\\).\n\nWe need subsets that contain at least one element of \\(D_3\\) **and** at least one element of \\(D_5\\).\n\nLet the total number of subsets of \\(A\\) be \\(2^{15}\\).\nLet  \n\n\\[\n\\begin{aligned}\nA_1 &=\\{\\text{subsets that contain no element of } D_3\\},\\\\\nA_2 &=\\{\\text{subsets that contain no element of } D_5\\}.\n\\end{aligned}\n\\]\n\nThen  \n\n\\[\n|A_1|=2^{15-3}=2^{12},\\qquad \n|A_2|=2^{15-5}=2^{10}.\n\\]\n\nSubsets avoiding **both** \\(D_3\\) and \\(D_5\\) avoid the union \\(D_3\\cup D_5\\) which has  \n\n\\[\n|D_3\\cup D_5|=|D_3|+|D_5|-|D_3\\cap D_5|=3+5-1=7\n\\]\n\nelements. Hence  \n\n\\[\n|A_1\\cap A_2|=2^{15-7}=2^{8}.\n\\]\n\nBy inclusion\u2013exclusion, the number of subsets that contain at least one element from each of \\(D_3\\) and \\(D_5\\) is  \n\n\\[\n\\begin{aligned}\nN &= 2^{15}-|A_1|-|A_2|+|A_1\\cap A_2|\\\\\n   &= 2^{15}-2^{12}-2^{10}+2^{8}\\\\\n   &= 32768-4096-1024+256\\\\\n   &= 27904.\n\\end{aligned}\n\\]\n\nAll these subsets are non\u2011empty, so the required probability is  \n\n\\[\n\\frac{N}{2^{15}}=\\frac{27904}{32768}.\n\\]\n\nSimplifying,\n\n\\[\n\\frac{27904}{32768}= \\frac{27904\\div 256}{32768\\div 256}\n                 = \\frac{109}{128}.\n\\]\n\nThus \\(m=109,\\; n=128\\) and  \n\n\\[\nm+n = 109+128 = 237.\n\\]\n\n\\[\n\\boxed{237}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 237

    \n

    Extracted Answer: 237

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Label the twelve unit segments as in the picture  \n\n\\[\n\\begin{array}{c}\n\\text{external: }a_1,a_2,b_1,b_2,c_1,c_2,d_1,d_2\\\\[2mm]\n\\text{internal: }e_1,e_2,f_1,f_2\n\\end{array}\n\\]\n\nThe four unit squares are  \n\n\\[\n\\begin{aligned}\n\\text{TL}&:\\;a_1,c_1,e_1,f_1,\\\\\n\\text{TR}&:\\;b_1,c_2,e_1,f_2,\\\\\n\\text{BL}&:\\;a_2,d_1,e_2,f_1,\\\\\n\\text{BR}&:\\;b_2,d_2,e_2,f_2 .\n\\end{aligned}\n\\]\n\nEach square must contain exactly two red sides (hence also two blue sides).\n\n--------------------------------------------------------------------\n### 1.  Reduce to the four internal edges\n\nFor a given square the two sides that are **internal** are already\ncolored once we decide the colors of the four internal edges  \n\\(e_1,e_2,f_1,f_2\\).  \n\nLet  \n\n\\[\nr_{\\rm TL}=e_1+f_1,\\qquad\nr_{\\rm TR}=e_1+f_2,\\qquad\nr_{\\rm BL}=e_2+f_1,\\qquad\nr_{\\rm BR}=e_2+f_2 ,\n\\]\n\nwhere a red edge contributes 1 and a blue edge contributes 0.\nIf a square has \\(r\\) red internal sides, then it must have \\(2-r\\)\nred external sides. Thus\n\n* if \\(r=0\\): both external sides are forced red \u2013 1 way;\n* if \\(r=1\\): exactly one of the two external sides must be red \u2013 2 ways;\n* if \\(r=2\\): both external sides are forced blue \u2013 1 way.\n\nHence for a fixed choice of the four internal edges the number of\nadmissible colourings of the eight external edges equals\n\n\\[\n2^{\\,N_1},\n\\]\n\nwhere \\(N_1\\) is the number of squares among TL, TR, BL, BR that have\nexactly one red internal side.\n\n--------------------------------------------------------------------\n### 2.  Express \\(N_1\\) in terms of the internal edges\n\nWrite  \n\n\\[\nX_1=e_1,\\; X_2=e_2,\\qquad Y_1=f_1,\\;Y_2=f_2\\qquad(\\text{red}=1,\\text{blue}=0).\n\\]\n\nFor a square \\((i,j)\\) (\\(i,j\\in\\{1,2\\}\\)) the number of red internal\nsides is \\(X_i+Y_j\\).\nThus a square has exactly one red internal side precisely when\n\\(X_i\\neq Y_j\\).\n\nLet  \n\n\\[\na=X_1+X_2\\;(=0,1,2),\\qquad b=Y_1+Y_2\\;(=0,1,2).\n\\]\n\nThe number of ordered pairs \\((i,j)\\) with \\(X_i\\neq Y_j\\) is  \n\n\\[\nN_1=a(2-b)+(2-a)b\n      =2\\bigl(a+b-ab\\bigr).\n\\]\n\nConsequently the contribution of a configuration with given\n\\(a,b\\) is  \n\n\\[\n2^{N_1}=2^{\\,2(a+b-ab)}=4^{\\,a+b-ab}.\n\\]\n\n--------------------------------------------------------------------\n### 3.  Count all configurations of the internal edges\n\nThere are \\(\\binom{2}{a}\\) ways to choose which vertical internal edges\nare red, and \\(\\binom{2}{b}\\) ways to choose which horizontal internal\nedges are red.  Hence the total number of colourings is\n\n\\[\n\\sum_{a=0}^{2}\\sum_{b=0}^{2}\n\\binom{2}{a}\\binom{2}{b}\\;4^{\\,a+b-ab}.\n\\]\n\nEvaluating the double sum:\n\n\\[\n\\begin{array}{c|ccc}\na\\backslash b &0&1&2\\\\\\hline\n0 &1\\cdot1\\cdot1=1 &1\\cdot2\\cdot4=8 &1\\cdot1\\cdot16=16\\\\\n1 &2\\cdot1\\cdot4=8 &2\\cdot2\\cdot4=16 &2\\cdot1\\cdot4=8\\\\\n2 &1\\cdot1\\cdot16=16 &1\\cdot2\\cdot4=8 &1\\cdot1\\cdot1=1\n\\end{array}\n\\]\n\nAdding all entries:\n\n\\[\n1+8+16+8+16+8+16+8+1=82.\n\\]\n\n--------------------------------------------------------------------\n### 4.  Answer\n\nThus there are  \n\n\\[\n\\boxed{82}\n\\]\n\ndifferent ways to colour the twelve unit segments so that each of the\nfour unit squares has two red sides and two blue sides.
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 82

    \n

    Extracted Answer: 82

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The circles are drawn as in the figure.\n\n* Let \\(O\\) be the centre of \\(\\omega _2\\) (radius \\(15\\)).\n* Let \\(A\\) be the centre of \\(\\omega _1\\) (radius \\(6\\)).\n* Since \\(\\omega _1\\) is internally tangent to \\(\\omega _2\\) at \\(B\\), the three points are collinear and  \n\n\\[\nOA=15-6=9 .\n\\]\n\nTake a coordinate system with  \n\n\\[\nO=(0,0),\\qquad A=(9,0),\\qquad B=(15,0).\n\\]\n\n--------------------------------------------------------------------\n### Points \\(C\\) and \\(D\\)\n\n\\(BC\\) is a diameter of \\(\\omega _2\\); hence \\(C\\) is the antipode of \\(B\\):\n\n\\[\nC=(-15,0).\n\\]\n\n\\(BC\\perp AD\\) means \\(AD\\) is the vertical line \\(x=9\\).  \nIntersecting this line with \\(\\omega _2\\) gives  \n\n\\[\n9^2+y^2=15^2 \\Longrightarrow y=\\pm 12 .\n\\]\n\nBecause the later condition \u201c\\(D\\) is nearer to \\(FG\\) than to \\(EH\\)\u201d forces \\(D\\) to lie **below** the centre, we take  \n\n\\[\nD=(9,-12).\n\\]\n\n--------------------------------------------------------------------\n### The rectangle \\(EFGH\\)\n\nThe rectangle is inscribed in \\(\\omega _1\\) and \\(\\overline{EF}\\perp BC\\); hence \\(\\overline{EF}\\) is vertical.\nLet\n\n\\[\n\\begin{aligned}\nE&=(9+w,\\;h),\\\\[2pt]\nF&=(9+w,\\;-h),\\\\[2pt]\nG&=(9-w,\\;-h),\\\\[2pt]\nH&=(9-w,\\;h),\n\\end{aligned}\n\\]\n\nso that the centre of the rectangle is \\(A\\) (the intersection of the diagonals of an\ninscribed rectangle is the centre of the circumcircle).\n\nBecause the four vertices lie on \\(\\omega _1\\),\n\n\\[\n(9\\pm w-9)^2+h^2=w^{2}+h^{2}=6^{2}=36\\qquad\\Longrightarrow\\qquad w^{2}+h^{2}=36. \\tag{1}\n\\]\n\nThe side \\(\\overline{EF}\\) is the right vertical side, thus\n\\(C\\) (which is far left) is nearer to \\(\\overline{GH}\\) (the left side) than to \\(\\overline{EF}\\);\nand \\(D\\) (which is below the centre) is nearer to \\(\\overline{FG}\\) (the bottom side) than to \\(\\overline{EH}\\) (the top side).  \nThese statements only fix the labeling of the rectangle.\n\n--------------------------------------------------------------------\n### Equality of the two triangular areas\n\n\\[\n\\begin{aligned}\n\\text{Area}\\,\\triangle DGF\n&=\\frac12\\bigl(\\underbrace{2w}_{\\text{base }GF}\\bigr)\n     \\bigl(\\underbrace{12-h}_{\\text{vertical height}}\\bigr)\n = w(12-h),\\\\[4pt]\n\\text{Area}\\,\\triangle CHG\n&=\\frac12\\bigl(\\underbrace{2h}_{\\text{base }HG}\\bigr)\n     \\bigl(\\underbrace{24-w}_{\\text{horizontal distance}}\\bigr)\n = h(24-w).\n\\end{aligned}\n\\]\n\nGiven that the two areas are equal,\n\n\\[\nw(12-h)=h(24-w)\\; \\Longrightarrow\\; 12w=24h\\; \\Longrightarrow\\; w=2h. \\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### Solving for \\(w\\) and \\(h\\)\n\nSubstituting \\(w=2h\\) into (1):\n\n\\[\n(2h)^2+h^{2}=36\\;\\Longrightarrow\\;5h^{2}=36\\;\\Longrightarrow\\;h^{2}= \\frac{36}{5}.\n\\]\n\nHence  \n\n\\[\nh=\\frac{6}{\\sqrt5},\\qquad w=2h=\\frac{12}{\\sqrt5}.\n\\]\n\n--------------------------------------------------------------------\n### Area of the rectangle\n\nThe rectangle\u2019s side lengths are \\(2w\\) and \\(2h\\), so\n\n\\[\n\\text{Area}= (2w)(2h)=4wh\n          =4\\left(\\frac{12}{\\sqrt5}\\right)\\left(\\frac{6}{\\sqrt5}\\right)\n          =4\\cdot\\frac{72}{5}\n          =\\frac{288}{5}.\n\\]\n\nThus the area is \\(\\displaystyle\\frac{m}{n}=\\frac{288}{5}\\) with relatively prime\n\\(m=288,\\;n=5\\).\n\n\\[\nm+n=288+5=293.\n\\]\n\n\\[\n\\boxed{293}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 293

    \n

    Extracted Answer: 293

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nFrom an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.\n\nIn general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nN=25q+r ,\\qquad 0\\le r\\le 24 .\n\\]\n\nThe greedy algorithm takes  \n\n* \\(q\\) quarters,  \n* \\(\\displaystyle d_0=\\Big\\lfloor\\frac r{10}\\Big\\rfloor\\) dimes,  \n* \\(s_0=r\\bmod 10\\) pennies.  \n\nHence  \n\n\\[\nC_{\\text{greedy}}=q+d_0+s_0 .\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1.  When can a better solution use fewer quarters?\n\nSuppose we use only \\(q-k\\) quarters, \\(k\\ge1\\).  \nThe remaining amount is  \n\n\\[\nR=r+25k .\n\\]\n\nWith only dimes and pennies the optimal way to make \\(R\\) is  \n\n\\[\n\\Big\\lfloor\\frac{R}{10}\\Big\\rfloor\\text{ dimes }+ (R\\bmod10)\\text{ pennies}.\n\\]\n\nThus the total number of coins for this choice is  \n\n\\[\nC(q-k)=(q-k)+\\Big\\lfloor\\frac{r+25k}{10}\\Big\\rfloor+(r+25k\\bmod10).\\tag{2}\n\\]\n\nLet  \n\n\\[\n\\Delta(k)=C(q-k)-C_{\\text{greedy}} .\n\\]\n\nUsing \\(r=10t+a\\;(0\\le a\\le9,\\;t\\in\\{0,1,2\\})\\) we obtain after a short calculation  \n\n\\[\n\\Delta(k)=6k-9\\Big\\lfloor\\frac{a+5k}{10}\\Big\\rfloor .\\tag{3}\n\\]\n\n(Only the last digit \\(a=r\\bmod 10\\) matters.)\n\n--------------------------------------------------------------------\n### 2.  Sign of \\(\\Delta(k)\\)\n\n*If \\(a\\ge5\\):*  \nTake \\(k=1\\).  Then \\(\\lfloor\\frac{a+5}{10}\\rfloor=1\\) and  \n\n\\[\n\\Delta(1)=6-9=-3<0 .\n\\]\n\nHence a better solution exists (remove one quarter).\n\n*If \\(a\\le4\\):*  \nFor any \\(k\\ge1\\),\n\n\\[\n\\Delta(k)=6k-9\\Big\\lfloor\\frac{a+5k}{10}\\Big\\rfloor\n\\ge 6k-9\\frac{a+5k}{10}=1.5k-0.9a .\n\\]\n\nSince \\(a\\le4\\) this is positive for \\(k=1,2\\) (indeed \\(\\Delta(1)=6,\\,\\Delta(2)=3\\)) and for larger \\(k\\) the term \\(1.5k\\) dominates, so \\(\\Delta(k)\\ge0\\) for all \\(k\\).\n\nTherefore **greedy fails iff**  \n\n\\[\na=r\\bmod10\\ge5\\quad\\text{and}\\quad q\\ge1 .\n\\]\n\nEquivalently, for \\(N\\ge25\\),\n\n\\[\nN\\bmod25\\in\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\]\n\n--------------------------------------------------------------------\n### 3.  Counting the failures\n\nThe residues above are ten out of the twenty\u2011five possible residues modulo \\(25\\).  \n\nIn the interval \\(1\\le N\\le1000\\) we have \\(1000/25=40\\) full periods, so each residue occurs \\(40\\) times.  \n\nThus the total number of integers with those residues is  \n\n\\[\n10\\times40=400.\n\\]\n\nBut the ten numbers \\(5,6,7,8,9,15,16,17,18,19\\) are \\<\u202f25, and for them greedy cannot remove a quarter (there are no quarters in any representation).  Those ten are **not** failures.  \n\nHence the genuine failures are  \n\n\\[\n400-10=390.\n\\]\n\n--------------------------------------------------------------------\n### 4.  Successes\n\nThere are \\(1000\\) integers from \\(1\\) to \\(1000\\).  Therefore the number of values for which the greedy algorithm *succeeds* is\n\n\\[\n1000-390=610.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{610}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 610

    \n

    Extracted Answer: 610

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    \\[\nf(x)=\\sin\\bigl(7\\pi\\sin(5x)\\bigr)\n\\]\n\n---\n\n### 1.  Zeros of \\(f\\)\n\n\\(f(x)=0\\iff 7\\pi\\sin(5x)=k\\pi\\) for an integer \\(k\\).\n\n\\[\n\\sin(5x)=\\frac{k}{7},\\qquad |k|\\le 7 .\n\\]\n\nLet  \n\n\\[\ny=5x\\;(0<y<10\\pi).\n\\]\n\nFor each integer \\(k\\) with \\(|k|\\le7\\) we count the solutions of \\(\\sin y=\\dfrac{k}{7}\\) in \\((0,10\\pi)\\).\n\n* \\(k=7\\)  : \\(\\sin y=1\\).  Solutions \\(y=\\frac{\\pi}{2}+2\\pi n\\) \\((n=0,1,2,3,4)\\) \u2192 **5** solutions.  \n* \\(k=-7\\) : \\(\\sin y=-1\\).  Solutions \\(y=\\frac{3\\pi}{2}+2\\pi n\\) \\((n=0,1,2,3,4)\\) \u2192 **5** solutions.  \n* \\(k=0\\)  : \\(\\sin y=0\\).  Solutions \\(y=m\\pi\\;(m=1,2,\\dots ,9)\\) \u2192 **9** solutions.  \n* For each \\(k=\\pm1,\\pm2,\\pm3,\\pm4,\\pm5,\\pm6\\) we have \\(\\sin y=c\\) with \\(-1<c<1,\\;c\\neq0\\).  \n  In each of the 5 full periods of \\(\\sin y\\) there are exactly two such points, so **\\(5\\cdot2=10\\)** solutions per \\(k\\).\n\nThere are 12 values of \\(k\\) with \\(|k|\\in\\{1,\\dots ,6\\}\\), giving  \n\n\\[\n12\\times10=120\\text{ solutions}.\n\\]\n\nAdding all contributions,\n\n\\[\nn=5+5+9+120=139 .\n\\]\n\n---\n\n### 2.  Tangent zeros\n\nThe graph is tangent to the \\(x\\)-axis at a zero where the derivative also vanishes.\n\n\\[\nf'(x)=\\cos\\bigl(7\\pi\\sin(5x)\\bigr)\\cdot 35\\pi\\cos(5x).\n\\]\n\nAt a zero, \\(\\sin\\bigl(7\\pi\\sin(5x)\\bigr)=0\\) gives \\(\\sin(5x)=\\dfrac{k}{7}\\).  \nBecause \\(\\cos\\bigl(7\\pi\\sin(5x)\\bigr)=\\pm1\\neq0\\), we must have \\(\\cos(5x)=0\\).\n\n\\[\n\\cos(5x)=0\\Longrightarrow \\sin(5x)=\\pm1 .\n\\]\n\nThus tangential zeros occur exactly when \\(\\sin(5x)=\\pm1\\), i.e. for \\(k=\\pm7\\).\n\nWe already counted those solutions:  \n\n* \\(\\sin(5x)=1\\) \u2192 5 points,  \n* \\(\\sin(5x)=-1\\) \u2192 5 points.\n\nHence  \n\n\\[\nt=5+5=10 .\n\\]\n\n---\n\n### 3.  Required sum\n\n\\[\nn+t=139+10=149.\n\\]\n\n\\[\n\\boxed{149}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 149

    \n

    Extracted Answer: 149

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let the vertices of the regular \\(24\\)-gon be numbered \\(0,1,\\dots ,23\\) (mod \\(24\\)).\nIf a segment joins vertex \\(i\\) to vertex \\(j\\) we call its **step**\n\\[\nk\\equiv j-i\\pmod{24},\\qquad 1\\le k\\le 12 .\n\\]\n\nThe length of a chord depends only on this step:\nthe chord of step \\(k\\) has length  \n\n\\[\n\\ell(k)=2R\\sin\\frac{\\pi k}{24},\\qquad 1\\le k\\le 12 .\n\\]\n\nSince \\(\\sin(\\theta )\\) is strictly increasing on \\([0,\\frac{\\pi}{2}]\\),\nthe lengths \\(\\ell(1),\\ell(2),\\dots ,\\ell(12)\\) are all distinct.\nThus a drawing in which all 12 segments have the same length must use\nedges whose step is a fixed \\(k\\) (the same chord length).\n\n--------------------------------------------------------------------\n\n### 1.  The graph of step \\(k\\)\n\nConsider the undirected graph \\(G_k\\) whose vertices are the 24 polygon vertices\nand whose edges are all chords of step \\(k\\) (i.e. the pairs \\(\\{i,i+k\\}\\)).\nEach vertex of \\(G_k\\) is incident to two such chords\n(\\(i\\) connects to \\(i+k\\) and to \\(i-k\\)), so \\(G_k\\) is a disjoint union of\ncycles.\n\nLet  \n\n\\[\nd=\\gcd(24,k).\n\\]\n\nThen the vertices split into \\(d\\) cycles, each of length  \n\n\\[\n\\frac{24}{d}.\n\\]\n\n--------------------------------------------------------------------\n\n### 2.  When can a perfect matching be formed?\n\nA perfect matching can be taken inside one cycle only when the cycle has even\nlength.  Hence we need \\(\\frac{24}{d}\\) even, i.e. \\(d\\neq 8\\).  \n\n* If \\(d=8\\) (the case \\(k=8\\)) each component is a triangle; a triangle has\nno perfect matching, so **no drawing** is possible.\n\n* If the cycle length is \\(2\\) (the case \\(d=12,\\;k=12\\)), each component is a\nsingle edge; there is exactly **one** perfect matching \u2013 the 12 diameters.\n\n* For any other admissible \\(k\\) the cycles have even length \\(\\ge4\\).\nInside each such cycle there are exactly two ways to choose a perfect matching\n(alternate edges).  Since the cycles are independent, the number of perfect\nmatchings for the given \\(k\\) is  \n\n\\[\n2^{\\,d}\\qquad (d=\\gcd(24,k),\\;d\\neq 8,\\;k\\neq 12).\n\\]\n\n--------------------------------------------------------------------\n\n### 3.  Counting for each step\n\n\\[\n\\begin{array}{c|c|c|c}\nk & d=\\gcd(24,k) & \\text{cycle length }24/d & \\#\\text{ matchings}\\\\ \\hline\n1 & 1 & 24 & 2\\\\\n2 & 2 & 12 & 2^{2}=4\\\\\n3 & 3 & 8 & 2^{3}=8\\\\\n4 & 4 & 6 & 2^{4}=16\\\\\n5 & 1 & 24 & 2\\\\\n6 & 6 & 4 & 2^{6}=64\\\\\n7 & 1 & 24 & 2\\\\\n8 & 8 & 3 & 0\\\\\n9 & 3 & 8 & 2^{3}=8\\\\\n10& 2 & 12& 2^{2}=4\\\\\n11& 1 & 24& 2\\\\\n12&12 & 2 & 1\\ (\\text{forced diameters})\n\\end{array}\n\\]\n\n--------------------------------------------------------------------\n\n### 4.  Total number of drawings\n\nAdd the numbers of matchings over all admissible steps:\n\n\\[\n\\begin{aligned}\nN&=2+4+8+16+2+64+2+8+4+2+1\\\\\n&=113 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{113}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 113

    \n

    Extracted Answer: 113

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The 8 occupied chairs must avoid a configuration where a person has two neighbours.  \nHence no three occupied chairs may be consecutive.\n\nLet a be the number of blocks of two consecutive occupied chairs.  \nEach block of two contributes an extra occupied chair, so the total number of blocks is  \n\n\\[\nb = 8-a\\qquad (0\\le a\\le 4).\n\\]\n\n*Choosing which blocks are of size\u202f2*: \\(\\displaystyle \\binom{b}{a}\\).\n\nThere are \\(16-8=8\\) empty chairs. Between the \\(b\\) blocks there must be at least one empty chair, using \\(b-1\\) empties.  \nThe remaining \\(8-(b-1)=9-b\\) empty chairs can be placed in the \\(b+1\\) gaps (before the first block, after the last, and the \\(b-1\\) internal gaps) without restriction.  \n\nNumber of ways to distribute them:  \n\n\\[\n\\binom{(9-b)+(b+1)-1}{(b+1)-1}= \\binom{9}{b}.\n\\]\n\nThus for a given \\(a\\),\n\n\\[\n\\text{ways}= \\binom{b}{a}\\binom{9}{b}\n          =\\binom{8-a}{a}\\binom{9}{8-a}.\n\\]\n\nSumming over \\(a=0,1,2,3,4\\),\n\n\\[\n\\begin{aligned}\nN &=\\binom{8}{0}\\binom{9}{8} \n   +\\binom{7}{1}\\binom{9}{7}\n   +\\binom{6}{2}\\binom{9}{6}\n   +\\binom{5}{3}\\binom{9}{5}\n   +\\binom{4}{4}\\binom{9}{4} \\\\[2mm]\n  &= 1\\cdot 9 + 7\\cdot 36 + 15\\cdot 84 + 10\\cdot 126 + 1\\cdot126\\\\\n  &= 9+252+1260+1260+126 = 2907.\n\\end{aligned}\n\\]\n\nTherefore  \n\n\\[\nN \\equiv 2907 \\pmod{1000}=907.\n\\]\n\n\\[\n\\boxed{907}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 907

    \n

    Extracted Answer: 907

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nr_i=|A_1A_i| \\qquad (i=2,\\dots ,11)\n\\]\n\nand denote  \n\n\\[\n\\theta=\\angle A_iA_1A_{i+1}\\qquad (2\\le i\\le 10).\n\\]\n\nBecause  \n\n\\[\n\\cos\\theta=\\frac{12}{13}\\;\\Longrightarrow\\;\\sin\\theta=\\frac{5}{13},\n\\]\n\nthe area of \\(\\triangle A_iA_1A_{i+1}\\) is  \n\n\\[\n\\frac12 r_i r_{i+1}\\sin\\theta\n   =\\frac12 r_i r_{i+1}\\frac{5}{13}=1 .\n\\]\n\nHence  \n\n\\[\nr_i r_{i+1}= \\frac{26}{5}=K\\qquad (2\\le i\\le 10). \\tag{1}\n\\]\n\nFrom (1),\n\n\\[\nr_{i+2}= \\frac{K}{r_{i+1}}=r_i ,\n\\]\n\nso the distances from \\(A_1\\) alternate:\n\n\\[\nr_2=r_4=r_6=r_8=r_{10}=a,\\qquad\nr_3=r_5=r_7=r_9=r_{11}=b,\n\\]\n\nwith  \n\n\\[\nab=K=\\frac{26}{5}. \\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### Lengths of the other sides\n\nFor any \\(i=2,\\dots ,10\\) the side \\(A_iA_{i+1}\\) (call it \\(L\\)) satisfies the law of cosines:\n\n\\[\nL^2=a^{2}+b^{2}-2ab\\cos\\theta\n      =a^{2}+b^{2}-2ab\\frac{12}{13}.\n\\]\n\nUsing (2),\n\n\\[\nL^2=a^{2}+b^{2}-\\frac{24}{13}\\cdot\\frac{26}{5}\n    =a^{2}+b^{2}-\\frac{48}{5}.\n\\]\n\nSince \\(a^{2}+b^{2}=(a+b)^{2}-2ab\\),\n\n\\[\nL^2=(a+b)^{2}-2\\frac{26}{5}-\\frac{48}{5}\n     =(a+b)^{2}-20.\n\\]\n\nLet  \n\n\\[\ns=a+b.\n\\]\n\nThen  \n\n\\[\nL=\\sqrt{s^{2}-20}. \\tag{3}\n\\]\n\n--------------------------------------------------------------------\n### Using the perimeter\n\nThe perimeter of the 11\u2011gon is\n\n\\[\n|A_1A_2|+|A_1A_{11}|+\\sum_{i=2}^{10}|A_iA_{i+1}|\n= a+b+9L = s+9\\sqrt{s^{2}-20}=20.\n\\]\n\nSet \\(t=\\sqrt{s^{2}-20}>0\\). Then \\(s=20-9t\\) and\n\n\\[\nt^{2}=s^{2}-20=(20-9t)^{2}-20.\n\\]\n\nSolving,\n\n\\[\nt^{2}=380-360t+81t^{2}\n\\Longrightarrow 80t^{2}-360t+380=0\n\\Longrightarrow 4t^{2}-18t+19=0.\n\\]\n\nHence  \n\n\\[\nt=\\frac{18\\pm\\sqrt{324-304}}{8}\n   =\\frac{18\\pm2\\sqrt5}{8}\n   =\\frac{9\\pm\\sqrt5}{4}.\n\\]\n\nIf the plus sign is taken, \\(t>\\frac{20}{9}\\) and \\(s=20-9t<0\\), impossible.\nThus  \n\n\\[\nt=\\frac{9-\\sqrt5}{4},\n\\qquad\ns=20-9t=\\frac{9\\sqrt5-1}{4}.\n\\]\n\nConsequently  \n\n\\[\nA_1A_2+A_1A_{11}=s=\\frac{9\\sqrt5-1}{4}.\n\\]\n\nWritten as \\(\\dfrac{m\\sqrt n-p}{q}\\) we have  \n\n\\[\nm=9,\\;n=5,\\;p=1,\\;q=4,\n\\]\n\nso  \n\n\\[\nm+n+p+q=9+5+1+4=19.\n\\]\n\n\\[\n\\boxed{19}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 19

    \n

    Extracted Answer: 19

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Step 1.  Regions created by chords**\n\nIf a circle already has \\(k\\) chords drawn in its interior, then a new chord\nadds one region for itself plus one extra region for every interior\nintersection it creates.  \nThus for a set of \\(n\\) chords\n\n\\[\n\\text{# regions}=n+1+\\text{# interior intersection points.}\n\\]\n\nIn our problem we have  \n\n* 2 fixed diameters (the two perpendicular ones),  \n* 25 random chords.\n\nHence \\(n=27\\).  \nWe only have to find the expected number \\(I\\) of interior intersection\npoints.\n\n\\[\nE[\\text{regions}]=27+1+E[I]=28+E[I].\n\\]\n\n--------------------------------------------------------------------\n\n**Step 2.  Intersections involving the two diameters**\n\nLet the horizontal diameter be the line that separates the *upper* quadrants\n\\(Q_{1},Q_{2}\\) from the *lower* quadrants \\(Q_{3},Q_{4}\\).\n\nA random chord has its two endpoints in different quadrants.\nThe chord meets the horizontal diameter exactly when the endpoints lie in\ndifferent half\u2011planes, i.e. one endpoint is in \\(\\{Q_{1},Q_{2}\\}\\) and the\nother in \\(\\{Q_{3},Q_{4}\\}\\).\n\nFor the ordered pair of quadrants of a random chord there are  \n\\(12\\) equally likely possibilities (the \\(4\\cdot 3\\) ordered pairs with\ndifferent quadrants).  \nExactly \\(8\\) of them have the endpoints in opposite half\u2011planes, hence\n\n\\[\np_d=\\Pr(\\text{a random chord meets a given diameter})=\\frac{8}{12}=\n\\frac{2}{3}.\n\\]\n\nTherefore\n\n\\[\n\\boxed{\\text{Expected intersections of the 25 chords with one diameter}=25\\cdot\\frac23}\n\\]\n\nand with the two diameters together\n\n\\[\nE[I_{\\text{diameters}}]=2\\cdot25\\cdot\\frac23=\\frac{100}{3}.\n\\]\n\nThe two diameters intersect each other once, so add \\(1\\) more interior\nintersection.\n\n--------------------------------------------------------------------\n\n**Step 3.  Intersections of two random chords**\n\nDenote the four endpoints by  \n\\(\\alpha_1,\\alpha_2\\) (chord 1) and \\(\\beta_1,\\beta_2\\) (chord 2).  \nAll four points are independent uniform on the circle.\n\nLet  \n\n\\[\nA=\\{\\text{endpoints of chord 1 lie in different quadrants}\\},\\qquad \nB=\\{\\text{endpoints of chord 2 lie in different quadrants}\\}.\n\\]\n\n\\[\nP(A)=P(B)=\\frac34 .\n\\]\n\nTwo chords intersect iff the endpoints are interleaved on the circle,\ni.e. exactly one of \\(\\beta_1,\\beta_2\\) lies on the clockwise arc from\n\\(\\alpha_1\\) to \\(\\alpha_2\\).\n\nFix \\(\\alpha_1=x\\) and \\(\\alpha_2=y\\) (with \\(x\\neq y\\)).\nLet \\(I=(x,y)\\) be the clockwise arc from \\(x\\) to \\(y\\) and let\n\\(d=|I|\\) be its length.  \nFor independent uniform \\(\\beta_1,\\beta_2\\),\n\n* the probability that exactly one lies in \\(I\\) is \\(2d(1-d)\\);\n* the probability that the two \\(\\beta\\)\u2019s are in *different* quadrants\n  is \\(\\frac34\\).\n\nConditioning on the actual placement of the interval \\(I\\) with respect\nto the four quarter\u2011arcs yields (after a short computation)\n\n\\[\n\\Pr(\\beta_1,\\beta_2\\text{ satisfy both conditions}\\mid x,y)=\n2\\Bigl[d\\Bigl(\\tfrac34-d\\Bigr)+\\sum_{q=0}^{3}a_q^{\\,2}\\Bigr],\n\\tag{1}\n\\]\n\nwhere \\(a_q\\) is the length of the part of \\(I\\) that lies in quadrant\n\\(q\\).\n\nNow average (1) over all ordered pairs \\((x,y)\\) that are in different\nquadrants.  By symmetry it suffices to place \\(x\\) in the first quadrant\n\\([0,\\tfrac14)\\) and let \\(y\\) run in the three other quadrants.\nCarrying out the integration (splitting the three possible clockwise\ndistances) gives\n\n\\[\n\\int\\!\\!\\int_{x\\in Q_0,\\;y\\in Q_m}\n2\\Bigl[d\\Bigl(\\tfrac34-d\\Bigr)+\\sum a_q^{\\,2}\\Bigr]\\,dy\\,dx\n   =\\frac{17}{64}\\qquad(m=1,2,3\\text{ summed}).\n\\]\n\nThus\n\n\\[\nP(A\\cap B\\cap\\{\\text{the chords intersect}\\})=\\frac{17}{64}.\n\\]\n\nFinally\n\n\\[\np_r=\n\\Pr(\\text{intersection}\\mid A\\cap B)=\n\\frac{P(A\\cap B\\cap\\text{intersect})}{P(A)P(B)}\n=\\frac{17/64}{(3/4)^2}\n=\\frac{16}{9}\\cdot\\frac{17}{64}\n=\\frac{17}{36}.\n\\]\n\n--------------------------------------------------------------------\n\n**Step 4.  Expected interior intersections**\n\n* Intersections of the two diameters: \\(1\\).\n* Intersections of the 25 random chords with the two diameters:\n  \\(\\displaystyle \\frac{100}{3}\\).\n* Intersections among the 25 random chords:\n  \\(\\displaystyle \\binom{25}{2}\\,p_r\n   =300\\cdot\\frac{17}{36}= \\frac{425}{3}\\).\n\nHence\n\n\\[\nE[I]=1+\\frac{100}{3}+\\frac{425}{3}\n     =1+\\frac{525}{3}=1+175=176.\n\\]\n\n--------------------------------------------------------------------\n\n**Step 5.  Expected number of regions**\n\n\\[\nE[\\text{regions}]=27+1+E[I]=28+176=204.\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{204}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 204

    \n

    Extracted Answer: 204

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\n\\triangle ABC\\qquad \n\\angle A=84^{\\circ},\\; \\angle B=60^{\\circ},\\; \\angle C=36^{\\circ}.\n\\]\n\nDenote  \n\n\\[\nD,E,F \\text{ \u2013 the midpoints of }BC,CA,AB,\n\\]\n\\[\nG,H,J \\text{ \u2013 the second intersections of }BD,AE,AF\\text{ with the circumcircle of } \\triangle DEF .\n\\]\n\n--------------------------------------------------------------------\n### 1.  The points \\(G,H,J\\) are the feet of the altitudes  \n\nThe nine\u2011point circle of \\(\\triangle ABC\\) passes through the three midpoints \\(D,E,F\\) **and** through the three feet of the altitudes.  \nBecause  \n\n* \\(BD\\) lies on the side \\(BC\\),  \n* \\(AE\\) lies on the side \\(CA\\),  \n* \\(AF\\) lies on the side \\(AB\\),\n\nthe second intersection of each of these sides with the nine\u2011point circle must be the corresponding foot of an altitude:\n\n\\[\n\\begin{aligned}\nG&= \\text{foot from }A\\text{ onto }BC,\\\\[2mm]\nH&= \\text{foot from }B\\text{ onto }CA,\\\\[2mm]\nJ&= \\text{foot from }C\\text{ onto }AB .\n\\end{aligned}\n\\]\n\nThus \\(G,H,J\\) are the vertices of the orthic triangle.\n\n--------------------------------------------------------------------\n### 2.  Arc \\(\\widehat{DE}\\)\n\nThe medial triangle \\(\\triangle DEF\\) is similar to \\(\\triangle ABC\\) (ratio \\(1\\!:\\!2\\)).  \nConsequently  \n\n\\[\n\\angle DFE = \\angle C = 36^{\\circ}.\n\\]\n\nFor any inscribed angle, the intercepted minor arc is twice the angle; hence  \n\n\\[\n\\widehat{DE}=2\\angle DFE = 2\\cdot 36^{\\circ}=72^{\\circ}.\n\\]\n\n--------------------------------------------------------------------\n### 3.  Arc \\(\\widehat{FG}\\)\n\nSince \\(D\\) and \\(G\\) both lie on side \\(BC\\), the chord \\(DG\\) is a part of \\(BC\\).  \nThe chord \\(DF\\) joins the midpoints of \\(AB\\) and \\(BC\\); by the Midpoint Theorem  \n\n\\[\nDF \\parallel AC .\n\\]\n\nTherefore  \n\n\\[\n\\angle FDG =\\angle (\\text{line }DF,\\text{ line }DG)\n        =\\angle (AC,BC)=\\angle C=36^{\\circ}.\n\\]\n\nThus  \n\n\\[\n\\widehat{FG}=2\\angle FDG = 2\\cdot 36^{\\circ}=72^{\\circ}.\n\\]\n\n--------------------------------------------------------------------\n### 4.  Arc \\(\\widehat{HJ}\\)\n\n\\(H,J,G\\) are the vertices of the orthic triangle.  \nA standard fact about the orthic triangle is that its angles are  \n\n\\[\n\\angle HGJ = 180^{\\circ}-2\\angle A,\\qquad\n\\angle GJH = 180^{\\circ}-2\\angle B,\\qquad\n\\angle JHG = 180^{\\circ}-2\\angle C .\n\\]\n\n(The fact follows from simple angle\u2011chasing with the right\u2011angles at the feet of the altitudes.)\n\nHence the minor arc opposite \\(G\\) \u2013 that is, \\(\\widehat{HJ}\\) \u2013 satisfies  \n\n\\[\n\\widehat{HJ}=2\\angle HGJ =2\\bigl(180^{\\circ}-2A\\bigr)\n               =360^{\\circ}-4A.\n\\]\n\nWith \\(\\angle A =84^{\\circ}\\),\n\n\\[\n\\widehat{HJ}=360^{\\circ}-4\\cdot84^{\\circ}=24^{\\circ}.\n\\]\n\n--------------------------------------------------------------------\n### 5.  Required sum\n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n&= 72^{\\circ}+2\\cdot24^{\\circ}+3\\cdot72^{\\circ}\\\\\n&= 72^{\\circ}+48^{\\circ}+216^{\\circ}\\\\[2mm]\n&= 336^{\\circ}.\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{336}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 336

    \n

    Extracted Answer: 336

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\n\\angle A =90^\\circ ,\\qquad BC =38 .\n\\]\n\nPlace  \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(0,c)\n\\]\n\nso that the legs are  \n\n\\[\nAB=b,\\qquad AC=c,\\qquad b^{2}+c^{2}=38^{2}=1444 .\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1.  Coordinates of \\(K\\) and \\(L\\)\n\nBecause  \n\n\\[\nAK=BK=14,\n\\]\n\n\\(K\\) lies on the perpendicular bisector of \\(\\overline{AB}\\); hence  \n\n\\[\nK=\\Bigl(\\frac b2,\\;\\sqrt{14^{2}-\\Bigl(\\frac b2\\Bigr)^{2}}\\Bigr)\n   =\\bigl( X,\\;U\\bigr)\n\\]\n\nwith  \n\n\\[\nX=\\frac b2,\\qquad U=\\sqrt{196-X^{2}} .\\tag{2}\n\\]\n\nSimilarly  \n\n\\[\nAL=CL=14\\Longrightarrow \nL=\\Bigl(\\sqrt{196-\\Bigl(\\frac c2\\Bigr)^{2}},\\;\\frac c2\\Bigr)\n   =(V,Y),\\qquad \nY=\\frac c2,\\;V=\\sqrt{196-Y^{2}} .\\tag{3}\n\\]\n\nThus  \n\n\\[\nX^{2}+Y^{2}= \\frac{b^{2}+c^{2}}{4}\n           =\\frac{1444}{4}=361 .\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n### 2.  The equilateral triangle \\(AKL\\)\n\nAll three sides of \\(\\triangle AKL\\) equal \\(14\\), so \\(\\angle KAL=60^\\circ\\).\nUsing the vectors \\(\\overrightarrow{AK}=(X,U)\\) and \\(\\overrightarrow{AL}=(V,Y)\\),\n\n\\[\n\\overrightarrow{AK}\\cdot\\overrightarrow{AL}=|AK||AL|\\cos 60^\\circ\n\\Longrightarrow\nXV+YU=98 .\\tag{5}\n\\]\n\nFrom (2)\u2013(5) we have the system\n\n\\[\n\\begin{cases}\nX^{2}+Y^{2}=361,\\\\[2pt]\nX\\sqrt{196-Y^{2}}+Y\\sqrt{196-X^{2}}=98 .\n\\end{cases}\n\\]\n\n--------------------------------------------------------------------\n### 3.  Solving the system\n\nSet  \n\n\\[\nX=14\\cos\\alpha ,\\qquad U=14\\sin\\alpha ,\\qquad \nY=14\\cos\\beta ,\\qquad V=14\\sin\\beta .\n\\]\n\nThen (5) becomes  \n\n\\[\n14^{2}\\bigl(\\cos\\alpha\\sin\\beta+\\cos\\beta\\sin\\alpha\\bigr)\n   =196\\sin(\\alpha+\\beta)=98,\n\\]\n\nhence  \n\n\\[\n\\sin(\\alpha+\\beta)=\\frac12\\Longrightarrow\\alpha+\\beta=\\frac{\\pi}{6}\\;(30^\\circ). \\tag{6}\n\\]\n\nFrom \\(X^{2}+Y^{2}=361\\),\n\n\\[\n196\\bigl(\\cos^{2}\\alpha+\\cos^{2}\\beta\\bigr)=361\n\\Longrightarrow\n\\cos^{2}\\alpha+\\cos^{2}\\beta= \\frac{361}{196}=1+\\frac{165}{196}.\n\\]\n\nUsing \\(\\cos^{2}\\alpha+\\cos^{2}\\beta=\n1+\\cos(\\alpha+\\beta)\\cos(\\alpha-\\beta)\\) gives  \n\n\\[\n\\cos\\frac{\\pi}{6}\\,\\cos(\\alpha-\\beta)=\\frac{165}{196}\n\\Longrightarrow\n\\cos(\\alpha-\\beta)=\\frac{165}{98\\sqrt3}\n       =\\frac{55\\sqrt3}{98}.\n\\]\n\nHence  \n\n\\[\n\\sin(\\alpha-\\beta)=\\sqrt{1-\\Bigl(\\frac{55\\sqrt3}{98}\\Bigr)^{2}}\n                 =\\frac{23}{98}.\n\\]\n\nNow compute \\(\\cos\\alpha\\) and \\(\\cos\\beta\\):\n\\[\n\\cos\\alpha=\\sqrt{\\frac{1+\\cos(\\alpha+\\beta)}{2}}\n          =\\sqrt{\\frac{1+\\frac{71}{98}}{2}}\n          =\\frac{13}{14},\n\\qquad\n\\cos\\beta =\\sqrt{\\frac{1+\\cos(\\alpha-\\beta)}{2}}\n          =\\sqrt{\\frac{1+\\frac{47}{49}}{2}}\n          =\\frac{4\\sqrt3}{7}.\n\\]\n\nTherefore  \n\n\\[\nX=14\\cos\\alpha =13,\\qquad \nY=14\\cos\\beta =8\\sqrt3 .\n\\]\n\nConsequently  \n\n\\[\nb=2X=26,\\qquad c=2Y=16\\sqrt3 .\n\\]\n\nOne easily checks that \\(b^{2}+c^{2}=26^{2}+ (16\\sqrt3)^{2}=1444\\), i.e. \\(BC=38\\).\n\n--------------------------------------------------------------------\n### 4.  Area of \\(BKLC\\)\n\nThe right\u2011triangle \\(ABC\\) has area  \n\n\\[\n[ABC]=\\frac12\\,b\\,c\n      =\\frac12\\cdot26\\cdot16\\sqrt3\n      =208\\sqrt3 .\n\\]\n\nThe three small triangles cut off by \\(K\\) and \\(L\\) have areas  \n\n\\[\n\\begin{aligned}\n[ABK]&=\\frac12\\cdot b\\cdot U\n      =\\frac12\\cdot26\\cdot3\\sqrt3=39\\sqrt3,\\\\[2pt]\n[ALC]&=\\frac12\\cdot c\\cdot V\n      =\\frac12\\cdot16\\sqrt3\\cdot2=16\\sqrt3,\\\\[2pt]\n[AKL]&=\\frac{\\sqrt3}{4}\\cdot14^{2}=49\\sqrt3 .\n\\end{aligned}\n\\]\n\nThus\n\n\\[\n\\begin{aligned}\n[BKLC] &=[ABC]-[ABK]-[ALC]-[AKL]\\\\\n       &=208\\sqrt3-(39\\sqrt3+16\\sqrt3+49\\sqrt3)\\\\\n       &=104\\sqrt3 .\n\\end{aligned}\n\\]\n\nHence the area of \\(BKLC\\) is \\(n\\sqrt3\\) with  \n\n\\[\n\\boxed{n=104}.\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 104

    \n

    Extracted Answer: None

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution**\n\n\\[\nx_{k+1}= \\frac13\\Bigl(x_k+\\frac1{x_k}-1\\Bigr),\\qquad \nx_1=\\frac{25}{11}\n\\]\n\nWrite each term as a reduced fraction  \n\n\\[\nx_k=\\frac{p_k}{q_k},\\qquad \\gcd(p_k,q_k)=1 .\n\\]\n\nThen  \n\n\\[\nx_{k+1}= \\frac{p_k^2+q_k^2-p_kq_k}{3p_kq_k}\n      =\\frac{p_{k+1}}{q_{k+1}}\n\\]\n\nwhere  \n\n\\[\np_{k+1}= \\frac{p_k^2+q_k^2-p_kq_k}{3},\n\\qquad \nq_{k+1}=p_kq_k . \\tag{1}\n\\]\n\n(The numerator is always divisible by \\(3\\); one checks that\n\\(\\gcd(p_{k+1},q_{k+1})=1\\) for every \\(k\\).)\n\n--------------------------------------------------------------------\n### 1.  A simple recurrence for the sum  \n\nLet  \n\n\\[\ns_k=p_k+q_k .\n\\]\n\nAdding the two formulas in (1),\n\n\\[\n\\begin{aligned}\ns_{k+1}&=p_{k+1}+q_{k+1}\n        =\\frac{p_k^2+q_k^2-p_kq_k}{3}+p_kq_k  \\\\\n        &=\\frac{p_k^2+2p_kq_k+q_k^2}{3}\n        =\\frac{(p_k+q_k)^2}{3}\n        =\\frac{s_k^{\\,2}}{3}.\n\\end{aligned}\n\\]\n\nThus  \n\n\\[\ns_{k+1}= \\frac{s_k^{\\,2}}{3},\\qquad s_1=p_1+q_1=25+11=36.\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 2.  Closed form\n\nSet \\(t_k=s_k/3\\).  From (2)\n\n\\[\nt_{k+1}=t_k^{\\,2},\\qquad t_1=\\frac{36}{3}=12 .\n\\]\n\nHence  \n\n\\[\nt_k=12^{\\,2^{\\,k-1}},\\qquad \ns_k=3t_k=3\\cdot 12^{\\,2^{\\,k-1}} . \\tag{3}\n\\]\n\nTherefore  \n\n\\[\np_{2025}+q_{2025}=s_{2025}=3\\cdot 12^{\\,2^{2024}} .\n\\]\n\n--------------------------------------------------------------------\n### 3.  Computing the last three digits  \n\nWe need  \n\n\\[\nM=3\\cdot 12^{\\,2^{2024}}\\pmod{1000}.\n\\]\n\nBecause \\(1000=8\\cdot125\\) we compute the two residues separately.\n\n*Modulo \\(8\\)*  \n\n\\(12\\equiv4\\pmod8\\) and \\(4^{2}=0\\pmod8\\).  \nSince the exponent \\(2^{2024}\\ge2\\),\n\n\\[\n12^{\\,2^{2024}}\\equiv0\\pmod8 .\n\\]\n\nHence \\(M\\equiv0\\pmod8\\).\n\n*Modulo \\(125\\)*  \n\n\\(\\gcd(12,125)=1\\) and \\(\\varphi(125)=100\\), so  \n\\(12^{100}\\equiv1\\pmod{125}\\).  \nThus only the exponent modulo \\(100\\) matters:\n\n\\[\ne=2^{2024}\\pmod{100}.\n\\]\n\nFor \\(n\\ge2\\) the powers of \\(2\\) modulo \\(100\\) have period \\(20\\):\n\\(2^{n+20}\\equiv2^n\\pmod{100}\\).\nSince \\(2024\\equiv4\\pmod{20}\\),\n\n\\[\ne\\equiv2^{4}=16\\pmod{100}.\n\\]\n\nNow compute \\(12^{16}\\pmod{125}\\):\n\n\\[\n\\begin{aligned}\n12^{2}&\\equiv144\\equiv19,\\\\\n12^{4}&\\equiv19^{2}=361\\equiv111,\\\\\n12^{8}&\\equiv111^{2}=12321\\equiv71,\\\\\n12^{16}&\\equiv71^{2}=5041\\equiv41\\pmod{125}.\n\\end{aligned}\n\\]\n\nHence  \n\n\\[\n12^{\\,2^{2024}}\\equiv41\\pmod{125}.\n\\]\n\n*Chinese remainder theorem*  \n\nFind \\(A\\) such that  \n\n\\[\nA\\equiv0\\pmod8,\\qquad A\\equiv41\\pmod{125}.\n\\]\n\nWrite \\(A=8k\\).  Then \\(8k\\equiv41\\pmod{125}\\Rightarrow\nk\\equiv41\\cdot8^{-1}\\pmod{125}\\).\nSince \\(8^{-1}\\equiv47\\pmod{125}\\),\n\n\\[\nk\\equiv41\\cdot47\\equiv52\\pmod{125},\n\\]\nso \\(k=52+125t\\) and  \n\n\\[\nA=8k=416+1000t\\equiv416\\pmod{1000}.\n\\]\n\nFinally  \n\n\\[\nM=3A\\equiv3\\cdot416=1248\\equiv\\boxed{248}\\pmod{1000}.\n\\]\n\nThus the remainder of \\(m+n\\) when divided by \\(1000\\) is **248**.
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 248

    \n

    Extracted Answer: 248

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    Let  \n\n\\[\nf_k(x)=\\frac{(x-18)(x-72)(x-98)(x-k)}{x}= \\frac{N(x)}{x},\\qquad x>0 ,\n\\]\n\nwhere  \n\n\\[\nN(x)=(x-18)(x-72)(x-98)(x-k)\n      =x^{4}-(188+k)x^{3}+(10116+188k)x^{2}-(127008+10116k)x+127008k .\n\\]\n\n--------------------------------------------------------------------\n### 1.  What does \u201cthe minimum is attained at exactly two points\u2019\u2019 mean?\n\nIf the global minimum value is \\(m\\), then for every \\(x>0\\)\n\n\\[\n\\frac{N(x)}{x}\\ge m\\qquad\\Longleftrightarrow\\qquad N(x)-mx\\ge0 .\n\\]\n\nEquality occurs exactly at the points where the minimum is attained.\nSince \\(N(x)-mx\\) is a quartic polynomial, the only way it can be\nnon\u2011negative for all \\(x\\) and vanish at exactly two distinct points is\n\n\\[\nN(x)-mx=(x-a)^{2}(x-b)^{2}\\qquad(a\\neq b,\\;a,b>0).\n\\]\n\nThus there are numbers \\(a,b,m\\) such that  \n\n\\[\n\\begin{cases}\nN(a)=ma,\\quad N'(a)=m,\\\\[2pt]\nN(b)=mb,\\quad N'(b)=m .\n\\end{cases}\n\\]\n\n--------------------------------------------------------------------\n### 2.  Coefficient comparison\n\nWrite\n\n\\[\n(x-a)^{2}(x-b)^{2}=(x^{2}-Sx+P)^{2},\n\\qquad\nS=a+b,\\;P=ab .\n\\]\n\nEquating coefficients of \\(N(x)-mx\\) and \\((x^{2}-Sx+P)^{2}\\) yields  \n\n\\[\n\\begin{aligned}\nS&=\\frac{188+k}{2},\\tag{1}\\\\[2pt]\nS^{2}+2P&=10116+188k,\\tag{2}\\\\[2pt]\n2SP&=127008+10116k+m,\\tag{3}\\\\[2pt]\nP^{2}&=127008\\,k.\\tag{4}\n\\end{aligned}\n\\]\n\nFrom (1) and (4)\n\n\\[\nS=\\frac{188+k}{2},\\qquad P=\\sqrt{127008\\,k}.\n\\]\n\nInsert these in (2):\n\n\\[\n\\frac{(188+k)^{2}}{4}+2\\sqrt{127008\\,k}=10116+188k .\n\\]\n\nMultiplying by \\(4\\) and using \\(\\sqrt{127008}=252\\sqrt2\\) gives  \n\n\\[\nk^{2}-376k-5120+2016\\sqrt{2k}=0. \\tag{5}\n\\]\n\n--------------------------------------------------------------------\n### 3.  Solving for \\(k\\)\n\nSet \\(u=\\sqrt{k}>0\\).  Then \\(\\sqrt{2k}=u\\sqrt2\\) and (5) becomes  \n\n\\[\nu^{4}-376u^{2}+2016\\sqrt2\\,u-5120=0 .\n\\]\n\nWrite \\(u=a\\sqrt2\\;(a>0)\\); the equation reduces to  \n\n\\[\na^{4}-188a^{2}+1008a-1280=0 .\n\\]\n\nFactoring,\n\n\\[\n(a^{2}-6a+8)(a^{2}+6a-160)=0,\n\\]\n\nso  \n\n\\[\na=2,\\;4,\\;10\\quad(\\text{the root }a=-16\\text{ gives }u<0\\text{ and is discarded}).\n\\]\n\nSince \\(k=u^{2}=2a^{2}\\),\n\n\\[\nk=2\\cdot2^{2}=8,\\qquad\nk=2\\cdot4^{2}=32,\\qquad\nk=2\\cdot10^{2}=200 .\n\\]\n\nFor each of these values the discriminant  \n\n\\[\n\\Delta=S^{2}-4P>0\n\\]\n\nso the quadratic \\(x^{2}-Sx+P\\) has two distinct positive roots; consequently\n\\(f_{k}(x)\\) attains its global minimum at exactly those two points.\n\n--------------------------------------------------------------------\n### 4.  Sum of the admissible \\(k\\)\n\n\\[\n8+32+200 = 240 .\n\\]\n\n\\[\n\\boxed{240}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 240

    \n

    Extracted Answer: 240

    \n

    Score: 1.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    **Solution Outline**\n\n1.  Let \\(M=3^{7}=2187\\) and \\(A=\\{1,\\ldots ,3^{6}\\}= \\{1,\\dots ,729\\}\\).\n    For each \\(a\\in A\\) put \\(r(a)=a^{3}\\pmod{M}\\).\n    The required number  \n\n    \\[\n    N=\\#\\{(a,b,c)\\in A^{3}:r(a)+r(b)+r(c)\\equiv0\\pmod M\\}\n    \\]\n\n    is the weighted convolution of the distribution of the residues\n    \\(r(a)\\).\n\n2.  Write each \\(a\\) as \\(a=3^{v}a'\\) with \\(\\gcd(a',3)=1\\).\n\n| \\(v\\) | range of \\(a\\) | # of such \\(a\\) | residue \\(a^{3}\\) (mod\u202f\\(M\\)) | weight |\n|-------|----------------|-----------------|-------------------------------|--------|\n| 0 | not divisible by 3 | \\(486\\) | \\(a^{\\prime\\,3}\\) (unit cube) | \\(1\\) |\n| 1 | \\(3\\mid a,9\\nmid a\\) | \\(162\\) | \\(27a^{\\prime\\,3}\\) | \\(9\\) |\n| 2 | \\(9\\mid a,27\\nmid a\\) | \\(54\\) | \\(729a^{\\prime\\,3}\\) | \\(27\\) |\n| \\(\\ge3\\) | \\(27\\mid a\\) | \\(27\\) | \\(0\\) | \\(27\\)\n\nHence the possible residues and their multiplicities are  \n\n* 0\u2003\u2003\u2003\u2003\u2003\u2003weight\u202f\\(27\\);\n* the two residues \\(729,\\,1458\\)\u2003weight\u202f\\(27\\) each;\n* 18 residues (the cubes of the unit group modulo\u202f\\(81\\))\u2003weight\u202f\\(9\\) each;\n* 486 residues (the cubes of the unit group modulo\u202f\\(3^{7}\\))\u2003weight\u202f\\(1\\) each.\n\nDenote by  \n\n* \\(D\\) the 486 unit\u2011cube residues (weight\u202f1);\n* \\(C\\) the 18 residues \\(27\\cdot u\\) with \\(u\\) a unit\u2011cube modulo\u202f\\(81\\) (weight\u202f9);\n* \\(B\\) the two residues \\(729,1458\\) (weight\u202f27);\n* \\(0\\) the zero residue (weight\u202f27).\n\n3.  Split the count according to how many zero\u2011terms occur.\n    Let  \n\n    \\[\n    w(x)=\\text{weight of residue }x.\n    \\]\n\n    For \\(x\\neq0\\) put \\(R'=\\{D\\cup C\\cup B\\}\\).  Then\n\n    \\[\n    N=N_{0}+N_{1}+N_{2},\n    \\]\n\n    where  \n\n    * \\(N_{2}=w(0)^{3}=27^{3}=19683\\)  (all three residues zero);\n    * \\(N_{1}=3\\,w(0)\\displaystyle\\sum_{\\substack{y+z\\equiv0\\\\y,z\\in R'}}\n            w(y)w(z) =3\\cdot27\\cdot3402=275\\,562\\);\n    * \\(N_{0}\\) counts triples with no zero term.\n\n    The sum in \\(N_{1}\\) is obtained easily:\n    each \\(x\\in D\\) pairs with its inverse, giving \\(486\\) ordered pairs,\n    each \\(x\\in C\\) gives \\(18\\) ordered pairs (weight \\(9^{2}=81\\)), and each\n    \\(x\\in B\\) gives \\(2\\) ordered pairs (weight \\(27^{2}=729\\)).\n    Hence \\(\\displaystyle\\sum_{y+z\\equiv0}w(y)w(z)=486+1458+1458=3402\\).\n\n4.  Compute \\(N_{0}\\).\n    After factoring the common factor \\(27\\) from the elements of \\(C\\cup B\\),\n    the condition \\(x+y+z\\equiv0\\pmod{M}\\) becomes\n\n    \\[\n    u+v+w\\equiv0\\pmod{81},\n    \\]\n\n    where \\(u,v,w\\) belong to  \n\n    * the set \\(S\\) of the 18 unit\u2011cubes modulo\u202f\\(81\\) (weight\u202f9);\n    * the two residues \\(27,54\\) (weight\u202f27).\n\n    For the set \\(S\\) one has the simple description  \n\n    \\[\n    S=\\{x\\pmod{81}:x\\equiv\\pm1\\pmod9\\}.\n    \\]\n\n    Using this description we compute the additive convolution on \\(\\mathbb Z/81\\).\n\n    * For any \\(t\\equiv0\\pmod9\\) we have \\(\\#\\{(s_{1},s_{2})\\in S^{2}:s_{1}+s_{2}\\equiv t\\}=18\\).\n    * For any \\(t\\equiv\\pm2\\pmod9\\) the count equals \\(9\\).\n    * For any other residue the count is \\(0\\).\n\n    Consequently\n\n    * there are no triples \\(s_{1}+s_{2}+s_{3}\\equiv0\\) with all three from \\(S\\);\n    * ordered triples with exactly one element from \\(\\{27,54\\}\\) and two from \\(S\\) are possible.\n      For each of the two choices \\(\\{27,54\\}\\) there are\n      \\((A*A)(27)=(A*A)(54)=18\\) ordered pairs from \\(S\\);  \n      with three possible positions for the \u201c\\(B\\)\u2019\u2019 element we obtain  \n\n      \\[\n      2\\cdot3\\cdot18=108\n      \\]\n\n      ordered triples.  Their weight is \\(27\\cdot9^{2}=2187\\), giving a contribution  \n\n      \\[\n      108\\cdot2187=236\\,196 .\n      \\]\n\n    * triples consisting only of the two \u201c\\(B\\)\u201d residues satisfy the condition\n      only when all three are equal, giving two ordered triples,\n      each of weight \\(27^{3}=19683\\); contribution  \n\n      \\[\n      2\\cdot19683=39\\,366 .\n      \\]\n\n    Adding these contributions:\n\n    \\[\n    N_{0}=236\\,196+39\\,366=275\\,562 .\n    \\]\n\n5.  Assemble all parts:\n\n    \\[\n    N=N_{0}+N_{1}+N_{2}=275\\,562+275\\,562+19\\,683=570\\,807 .\n    \\]\n\n6.  The required remainder is  \n\n    \\[\n    N\\bmod1000 = 570\\,807\\bmod1000 = \\boxed{807}.\n    \\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 735

    \n

    Extracted Answer: 807

    \n

    Score: 0.0

    ", + "\n

    Prompt conversation

    \n\n\n
    \n
    \n user\n \n
    \n
    \n
    \nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n
    \n
    \n
    \n\n

    Sampled message

    \n\n
    \n
    \n assistant\n \n
    \n
    \n
    The minimum value of \\(f(X)\\) works out to be  \n\n\\[\nf_{\\min}=18+20\\sqrt7 .\n\\]\n\nThus \\(m=18,\\; n=20,\\; p=7\\) and  \n\n\\[\nm+n+p = 18+20+7 = 45 .\n\\]\n\n\\[\n\\boxed{45}\n\\]
    \n
    \n
    \n

    Results

    \n

    Correct Answer: 60

    \n

    Extracted Answer: 45

    \n

    Score: 0.0

    " + ], + "convos": [ + [ + { + "role": "user", + "content": "\nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "First write the two numbers in base\u201110.\n\n\\[\n17_{b}=1\\cdot b+7=b+7,\\qquad \n97_{b}=9\\cdot b+7=9b+7 .\n\\]\n\nWe need \n\n\\[\nb+7 \\mid 9b+7 .\n\\]\n\nUse the Euclidean algorithm:\n\n\\[\n9b+7 = 9(b+7)-56 .\n\\]\n\nHence \n\n\\[\nb+7 \\mid 9b+7 \\iff b+7 \\mid 56 .\n\\]\n\nSo \\(b+7\\) must be a positive divisor of \\(56\\).\n\nSince the base must satisfy \\(b>9\\), we have \\(b+7>16\\). \nThe divisors of \\(56\\) exceeding \\(16\\) are \\(28\\) and \\(56\\).\n\n\\[\n\\begin{cases}\nb+7=28 \\ \\Rightarrow\\ b=21,\\\\[2pt]\nb+7=56 \\ \\Rightarrow\\ b=49.\n\\end{cases}\n\\]\n\nBoth bases indeed work:\n\n\\[\n\\frac{97_{21}}{17_{21}}=\\frac{196}{28}=7,\\qquad \n\\frac{97_{49}}{17_{49}}=\\frac{448}{56}=8 .\n\\]\n\nTherefore the required bases are \\(21\\) and \\(49\\), and their sum is \n\n\\[\n21+49 = 70.\n\\]\n\n\\[\n\\boxed{70}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nc=\\#\\text{ chocolate},\\qquad v=\\#\\text{ vanilla},\\qquad s=\\#\\text{ strawberry}\n\\]\n\nwith \n\n\\[\nc+v+s =9,\\qquad c>v>s\\ge1 .\n\\]\n\n---\n\n### 1. Find all possible triples \\((c,v,s)\\).\n\nSince \\(c>v>s\\ge 1\\),\n\n\\[\nc\\ge s+2,\\; v\\ge s+1 \\Longrightarrow c+v+s\\ge 3s+3\\le9\\Longrightarrow s\\le2 .\n\\]\n\n- **If \\(s=1\\)**: \\(v\\ge2,\\ c\\ge3\\) and \\(c+v=8\\). \n Possibilities: \\((c,v)=(6,2),(5,3)\\).\n\n- **If \\(s=2\\)**: \\(v\\ge3,\\ c\\ge4\\) and \\(c+v=7\\). \n Possibility: \\((c,v)=(4,3)\\).\n\nThus the only triples are \n\n\\[\n(6,2,1),\\quad (5,3,1),\\quad (4,3,2).\n\\]\n\n---\n\n### 2. Count assignments for each triple.\n\nFor a given \\((c,v,s)\\) the number of assignments of flavors to the nine distinct players is the multinomial coefficient \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\n\\[\n\\begin{aligned}\n(6,2,1):\\quad &\\frac{9!}{6!\\,2!\\,1!}= \\binom{9}{6}\\binom{3}{2}=84\\cdot3=252,\\\\[4pt]\n(5,3,1):\\quad &\\frac{9!}{5!\\,3!\\,1!}= \\binom{9}{5}\\binom{4}{3}=126\\cdot4=504,\\\\[4pt]\n(4,3,2):\\quad &\\frac{9!}{4!\\,3!\\,2!}= \\binom{9}{4}\\binom{5}{3}=126\\cdot10=1260.\n\\end{aligned}\n\\]\n\n---\n\n### 3. Total number of assignments\n\n\\[\nN = 252+504+1260 = 2016.\n\\]\n\n---\n\n### 4. Remainder modulo \\(1000\\)\n\n\\[\nN \\bmod 1000 = 2016 \\bmod 1000 = 16.\n\\]\n\n\\[\n\\boxed{16}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the trapezoid have parallel sides \\(r\\) and \\(s\\) \\((r\\neq s)\\) and equal legs \\(L\\).\n\n---\n\n### 1. Semiperimeter from the incircle\n\nA convex quadrilateral that contains an incircle (a tangential quadrilateral) satisfies \n\n\\[\n\\text{Area}= (\\text{inradius})\\times (\\text{semiperimeter}).\n\\]\n\nThe inradius is \\(3\\) and the area is \\(72\\); therefore \n\n\\[\np=\\frac{\\text{Area}}{r_{\\text{in}}}= \\frac{72}{3}=24,\n\\]\n\nwhere \\(p\\) is the semiperimeter.\n\n---\n\n### 2. Relation among the sides\n\nFor a tangential quadrilateral, Pitot\u2019s theorem gives \n\n\\[\n\\text{(sum of one pair of opposite sides)} = \\text{(sum of the other pair)} .\n\\]\n\nIn an isosceles trapezoid the opposite sides are the two bases and the two equal legs, so \n\n\\[\nr+s = L+L =2L \\quad\\Longrightarrow\\quad L=\\frac{r+s}{2}.\n\\]\n\nThe semiperimeter is \n\n\\[\np = \\frac{r+s+2L}{2}= \\frac{r+s+r+s}{2}=r+s .\n\\]\n\nSince \\(p=24\\), we obtain \n\n\\[\n\\boxed{r+s=24}.\n\\]\n\nConsequently \n\n\\[\nL=\\frac{r+s}{2}=12 .\n\\]\n\n---\n\n### 3. Height of the trapezoid\n\nThe incircle is tangent to both parallel sides, so the distance between those sides (the height \\(h\\)) equals twice the radius:\n\n\\[\nh = 2\\cdot 3 = 6 .\n\\]\n\n---\n\n### 4. Using the leg length\n\nPlace the trapezoid with its bases horizontal. The horizontal offset between the ends of the bases is \\(\\dfrac{|r-s|}{2}\\). Hence, by the Pythagorean theorem,\n\n\\[\nL^{2}= \\left(\\frac{r-s}{2}\\right)^{2}+h^{2}.\n\\]\n\nWith \\(L=12\\) and \\(h=6\\),\n\n\\[\n12^{2}= \\left(\\frac{r-s}{2}\\right)^{2}+6^{2}\n\\quad\\Longrightarrow\\quad\n144 = \\frac{(r-s)^{2}}{4}+36\n\\quad\\Longrightarrow\\quad\n(r-s)^{2}=432.\n\\]\n\n---\n\n### 5. Compute \\(r^{2}+s^{2}\\)\n\n\\[\n\\begin{aligned}\n(r+s)^{2} &= r^{2}+2rs+s^{2}=24^{2}=576,\\\\\n(r-s)^{2} &= r^{2}-2rs+s^{2}=432.\n\\end{aligned}\n\\]\n\nAdding these equations eliminates the \\(rs\\) term:\n\n\\[\n(r+s)^{2}+(r-s)^{2}=2(r^{2}+s^{2})\\Longrightarrow\n576+432=2(r^{2}+s^{2}).\n\\]\n\nThus\n\n\\[\nr^{2}+s^{2}= \\frac{1008}{2}=504.\n\\]\n\n---\n\n\\[\n\\boxed{504}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The first equation \n\n\\[\n|25+20i-z|=5\n\\]\n\nis a circle with centre \n\n\\[\nC=(25,20)\n\\]\n\nand radius \\(r=5\\).\n\nThe second equation \n\n\\[\n|z-4-k| = |z-3i-k|\n\\]\n\nmeans that \\(z\\) is equidistant from the points \n\n\\[\nA=4+k \\qquad\\text{and}\\qquad B=3i+k .\n\\]\n\nThus \\(A=(k+4,0),\\; B=(k,3)\\). \nThe set of points equidistant from \\(A\\) and \\(B\\) is the perpendicular bisector of \\(\\overline{AB}\\).\n\n---\n\n### Equation of the perpendicular bisector\n\nMidpoint of \\(AB\\):\n\n\\[\nM=\\Bigl(\\frac{k+4+k}{2},\\frac{0+3}{2}\\Bigr)=(k+2,\\frac32).\n\\]\n\nThe vector \\(\\overrightarrow{AB}=(-4,3)\\). \nA direction vector perpendicular to this is \\((3,4)\\) (since \\((-4,3)\\cdot(3,4)=0\\)). \n\nHence the line has slope \\(\\frac43\\) and equation \n\n\\[\ny-\\frac32 = \\frac43\\bigl(x-(k+2)\\bigr)\n\\]\n\\[\n\\Longrightarrow\\; y = \\frac43 x - \\frac43 k - \\frac76 .\n\\]\n\nIn standard form:\n\n\\[\n8x-6y = 8k+7 .\n\\]\n\n---\n\n### Tangency condition\n\nThe system will have exactly one solution iff this line is tangent to the circle. \nThe distance from the centre \\(C=(25,20)\\) to the line \\(8x-6y-(8k+7)=0\\) must equal the radius \\(5\\):\n\n\\[\n\\frac{|8\\cdot25-6\\cdot20-(8k+7)|}{\\sqrt{8^{2}+(-6)^{2}}}=5.\n\\]\n\nCompute the numerator:\n\n\\[\n8\\cdot25-6\\cdot20-(8k+7)=200-120-8k-7=73-8k.\n\\]\n\nSince \\(\\sqrt{8^{2}+6^{2}}=10\\),\n\n\\[\n\\frac{|73-8k|}{10}=5 \\quad\\Longrightarrow\\quad |73-8k|=50.\n\\]\n\nThus \n\n\\[\n73-8k = 50 \\quad\\text{or}\\quad 73-8k = -50.\n\\]\n\n\\[\n\\begin{cases}\n8k = 23 \\;\\;\\Rightarrow\\; k = \\dfrac{23}{8},\\\\[4pt]\n8k = 123\\;\\Rightarrow\\; k = \\dfrac{123}{8}.\n\\end{cases}\n\\]\n\nBoth values give a tangent line, so each yields exactly one solution \\(z\\).\n\n---\n\n### Sum of all possible \\(k\\)\n\n\\[\nk_1+k_2 = \\frac{23}{8}+\\frac{123}{8}= \\frac{146}{8}= \\frac{73}{4}.\n\\]\n\nWrite \\(\\frac{73}{4}\\) as \\(\\frac{m}{n}\\) with \\(\\gcd(m,n)=1\\): \\(m=73,\\ n=4\\).\n\n\\[\nm+n = 73+4 = 77.\n\\]\n\n\\[\n\\boxed{77}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The equation \n\n\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\nis a homogeneous quadratic form. Factor it over the rationals.\n\n\\[\n12x^{2}-xy-6y^{2}= -6\\Bigl(y-\\frac43x\\Bigr)\\Bigl(y+\\frac32x\\Bigr)\n\\]\n\nHence \n\n\\[\n12x^{2}-xy-6y^{2}=0\\iff \n\\Bigl(y-\\frac43x\\Bigr)\\Bigl(y+\\frac32x\\Bigr)=0 .\n\\]\n\nSo any integer solution must satisfy one of the two linear equations \n\n\\[\ny=\\frac{4}{3}x\\quad\\text{or}\\quad y=-\\frac32 x .\n\\]\n\n---\n\n### 1. Solutions of \\(y=\\frac43x\\)\n\nWrite \\(3y=4x\\). \nSince \\(\\gcd(3,4)=1\\), the integer solutions are \n\n\\[\nx=3k,\\qquad y=4k\\qquad(k\\in\\mathbb Z).\n\\]\n\nBoth coordinates must lie in \\([-100,100]\\):\n\n\\[\n-100\\le 3k\\le100,\\qquad -100\\le4k\\le100\n\\]\n\nThe second inequality is stricter, giving \n\n\\[\n-25\\le k\\le 25 .\n\\]\n\nThus there are \n\n\\[\n25-(-25)+1 = 51\n\\]\n\ninteger points on this line.\n\n---\n\n### 2. Solutions of \\(y=-\\frac32x\\)\n\nWrite \\(2y=-3x\\). \nSince \\(\\gcd(2,3)=1\\), the integer solutions are \n\n\\[\nx=2k,\\qquad y=-3k\\qquad(k\\in\\mathbb Z).\n\\]\n\nBoth coordinates must satisfy \n\n\\[\n-100\\le2k\\le100,\\qquad -100\\le-3k\\le100 .\n\\]\n\nThese give \n\n\\[\n-50\\le k\\le50,\\qquad -\\frac{100}{3}\\le k\\le\\frac{100}{3}\\Longrightarrow -33\\le k\\le33 .\n\\]\n\nHence there are \n\n\\[\n33-(-33)+1 = 67\n\\]\n\ninteger points on this line.\n\n---\n\n### 3. Remove double\u2011counted point\n\nThe two lines intersect only at \\((0,0)\\) (when \\(k=0\\) in both families). \nThus the total number of distinct ordered pairs is \n\n\\[\n51+67-1 = 117 .\n\\]\n\n\\[\n\\boxed{117}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Step 1. Divisibility conditions**\n\nFor an integer to be divisible by \\(22\\) it must be divisible by \\(2\\) and by \\(11\\).\n\n*Divisible by 2* \u2013 the last digit (the units digit) must be even, i.e. one of \\(\\{2,4,6,8\\}\\).\n\n*Divisible by 11* \u2013 for an 8\u2011digit number \\(a_1a_2\\ldots a_8\\) (with \\(a_1\\) the leftmost digit) the rule is \n\n\\[\n(a_8+a_6+a_4+a_2)-(a_7+a_5+a_3+a_1)\\equiv0\\pmod{11}.\n\\]\n\nThus the sum of the digits in the even positions (2,4,6,8) equals the sum of the digits in the odd positions (1,3,5,7) modulo \\(11\\).\n\nThe total sum of the digits \\(1+2+\\dots+8=36\\). \nIf the two sums are equal modulo \\(11\\), then\n\n\\[\n2\\cdot(\\text{odd\u2013position sum})\\equiv36\\equiv3\\pmod{11}\n\\Longrightarrow\\text{odd\u2013position sum}\\equiv7\\pmod{11}.\n\\]\n\nThe possible values are \\(7,18,29,\\ldots\\). \nSince four distinct digits from \\(\\{1,\\dots ,8\\}\\) can sum only between \\(10\\) and \\(26\\), the only feasible value is \n\n\\[\n\\boxed{\\text{odd\u2013position sum}=18}.\n\\]\n\nConsequently the even\u2013position sum is also \\(18\\).\n\n**Step 2. Choose the digits for the odd positions**\n\nWe need all 4\u2011element subsets of \\(\\{1,2,3,4,5,6,7,8\\}\\) whose sum is \\(18\\).\n\nListing them (or by noting the complementary pairs) gives \n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are \n\n\\[\n\\boxed{M=8}\n\\]\n\nsuch subsets. \nEach of them contains exactly two even digits (because a sum of 18 cannot be obtained with a different parity distribution), so for every subset \\(A\\) (odd\u2011position digits) we have \n\n\\[\ne_A=2,\\qquad E_B=4-e_A=2,\n\\]\n\nwhere \\(E_B\\) is the number of even digits among the complementary set \\(B\\) (the even\u2011position digits).\n\n**Step 3. Arrange the digits**\n\n*Odd positions* (1,3,5,7): the four digits of \\(A\\) can be placed in \\(4! = 24\\) ways.\n\n*Even positions* (2,4,6,8): the four digits of \\(B\\) must be placed so that the digit in position\u202f8 (the units digit) is even. \nSince \\(B\\) contains exactly \\(E_B=2\\) even digits, we have \n\n\\[\n\\text{choices for the units digit}=2,\n\\qquad\n\\text{ways to arrange the remaining three digits}=3! = 6.\n\\]\n\nThus the number of admissible placements for \\(B\\) is \n\n\\[\nf(B)=2\\cdot 6=12.\n\\]\n\n**Step 4. Count all numbers**\n\nFor each of the \\(M=8\\) valid subsets \\(A\\),\n\n\\[\n\\text{numbers contributed}=24\\times12=288.\n\\]\n\nHence \n\n\\[\nN=8\\times288=2304.\n\\]\n\n**Step 5. Compute the required difference**\n\n\\[\nN-2025=2304-2025=279.\n\\]\n\n\\[\n\\boxed{279}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The original parabola is \n\n\\[\ny=x^{2}-4 .\n\\]\n\n---\n\n### 1. Equation of the rotated parabola \n\nRotate the plane \\(60^{\\circ}\\) counter\u2011clockwise about the origin.\nIf \\((X,Y)\\) is a point of the rotated parabola, then rotating it back\n\\(60^{\\circ}\\) clockwise gives a point \\((x',y')\\) on the original parabola.\n\n\\[\n\\begin{pmatrix}x'\\\\y'\\end{pmatrix}\n=\n\\begin{pmatrix}\\cos60^\\circ&\\sin60^\\circ\\\\\n-\\sin60^\\circ&\\cos60^\\circ\\end{pmatrix}\n\\begin{pmatrix}X\\\\Y\\end{pmatrix}\n=\n\\begin{pmatrix}\\frac12X+\\frac{\\sqrt3}{2}Y\\\\[2pt]\n-\\frac{\\sqrt3}{2}X+\\frac12Y\\end{pmatrix}.\n\\]\n\nThus \n\n\\[\ny' = x'^2-4\\Longrightarrow \n\\frac{-\\sqrt3X+Y}{2} =\\Bigl(\\frac{X+\\sqrt3Y}{2}\\Bigr)^{\\!2}-4.\n\\]\n\nMultiplying by \\(2\\) and simplifying gives the equation of the rotated\nparabola:\n\n\\[\n(x+\\sqrt3\\,y)^{2}+2\\sqrt3\\,x-2y-16=0. \\tag{1}\n\\]\n\n---\n\n### 2. Intersection with the original parabola \n\nSubstituting \\(y=x^{2}-4\\) from the original parabola into (1) yields\n\n\\[\n\\bigl(x+\\sqrt3(x^{2}-4)\\bigr)^{2}+2\\sqrt3\\,x-2(x^{2}-4)-16=0,\n\\]\n\nwhich simplifies to\n\n\\[\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40=0. \\tag{2}\n\\]\n\n---\n\n### 3. Factoring the quartic \n\nLook for a factorisation of the form \n\\((ax^{2}+b\\sqrt3\\,x+c)(dx^{2}+e\\sqrt3\\,x+f)\\).\nMatching coefficients gives the system \n\n\\[\n\\begin{cases}\nad=3\\\\\nae+bd=2\\\\\naf+3be+cd=-25\\\\\nbf+ce=-6\\\\\ncf=40\n\\end{cases}\n\\]\n\nwhich is solved by \n\n\\[\na=1,\\;b=1,\\;c=-4,\\qquad d=3,\\;e=-1,\\;f=-10 .\n\\]\n\nHence\n\n\\[\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40\n =(x^{2}+\\sqrt3\\,x-4)(3x^{2}-\\sqrt3\\,x-10). \\tag{3}\n\\]\n\n---\n\n### 4. Solving for the intersection points \n\nFrom (3) we obtain four possible \\(x\\)-coordinates.\n\n1. \\(x^{2}+\\sqrt3\\,x-4=0\\)\n\n\\[\nx=\\frac{-\\sqrt3\\pm\\sqrt{19}}{2}.\n\\]\n\n2. \\(3x^{2}-\\sqrt3\\,x-10=0\\)\n\n\\[\nx=\\frac{\\sqrt3\\pm\\sqrt{123}}{6}.\n\\]\n\nFor each \\(x\\) we compute \\(y=x^{2}-4\\).\n\n| \\(x\\) | sign of \\(x\\) | \\(y=x^{2}-4\\) | quadrant |\n|---|---|---|---|\n| \\(\\displaystyle\\frac{-\\sqrt3+\\sqrt{19}}{2}\\) | \\(>0\\) | \\(\\displaystyle\\frac{3-\\sqrt{57}}{2}<0\\) | **IV** |\n| \\(\\displaystyle\\frac{-\\sqrt3-\\sqrt{19}}{2}\\) | \\(<0\\) | \\(>0\\) | II |\n| \\(\\displaystyle\\frac{\\sqrt3+\\sqrt{123}}{6}\\) | \\(>0\\) | \\(>0\\) | I |\n| \\(\\displaystyle\\frac{\\sqrt3-\\sqrt{123}}{6}\\) | \\(<0\\) | \\(<0\\) | III |\n\nOnly the first solution lies in the fourth quadrant, as required.\n\n---\n\n### 5. The required \\(y\\)-coordinate \n\nFor \n\\[\nx=\\frac{-\\sqrt3+\\sqrt{19}}{2},\n\\]\n\\[\ny=x^{2}-4\n =\\left(\\frac{-\\sqrt3+\\sqrt{19}}{2}\\right)^{2}-4\n =\\frac{19+3-2\\sqrt{57}}{4}-4\n =\\frac{22-2\\sqrt{57}}{4}-\\frac{16}{4}\n =\\frac{3-\\sqrt{57}}{2}.\n\\]\n\nThus \n\n\\[\ny=\\frac{a-\\sqrt{b}}{c}\\quad\\text{with}\\quad a=3,\\;b=57,\\;c=2,\n\\]\nand \\(\\gcd(a,c)=1\\).\n\nFinally \n\n\\[\na+b+c=3+57+2=62.\n\\]\n\n\\[\n\\boxed{62}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\n\\vec{AB}= \\mathbf b ,\\qquad \\vec{AC}= \\mathbf c ,\\qquad \n|\\mathbf b| =28,\\; |\\mathbf c| =91 .\n\\]\n\nWrite every point on the sides as a linear combination of \\(\\mathbf b,\\mathbf c\\).\n\n\\[\n\\begin{aligned}\nD&=\\frac{4}{28}\\mathbf b =\\frac17\\mathbf b ,&\nE&=\\frac{20}{28}\\mathbf b =\\frac57\\mathbf b ,\\\\[2mm]\nF&=\\frac{13}{91}\\mathbf c ,&\nG&=\\frac{65}{91}\\mathbf c .\n\\end{aligned}\n\\]\n\nThe reflections about a point are central symmetries, thus \n\n\\[\nM=2F-D=-\\frac17\\mathbf b+\\frac{26}{91}\\mathbf c ,\\qquad\nN=2E-G=\\frac{10}{7}\\mathbf b-\\frac{65}{91}\\mathbf c .\n\\]\n\n--------------------------------------------------------------------\n### 1. Area of \\(\\triangle ABC\\)\n\nThe quadrilateral \\(DEGF\\) can be split into \\(\\triangle DE G\\) and \\(\\triangle DGF\\).\n\nFor any three points \\(P=\\alpha\\mathbf b+\\beta\\mathbf c\\),\n\\(Q=\\gamma\\mathbf b+\\delta\\mathbf c\\) we have \n\n\\[\n\\bigl[(Q-P)\\times(R-P)\\bigr]\n =(\\gamma-\\alpha)(\\zeta-\\beta)-(\\delta-\\beta)(\\xi-\\alpha)\\;\\bigl(\\mathbf b\\times\\mathbf c\\bigr),\n\\]\n\nso the area of a triangle equals the absolute value of that determinant\ntimes \\(\\dfrac12|\\mathbf b\\times\\mathbf c|\\).\n\n*Triangle \\(DEG\\)* \n\n\\[\n\\det\\!\\begin{pmatrix}\n\\frac57-\\frac17 & 0\\\\[2mm]\n0-\\frac17&\\frac{65}{91}\n\\end{pmatrix}\n =\\frac{20}{49}.\n\\]\n\nThus \\(\\displaystyle\n\\text{Area}(DEG)=\\frac{20}{49}\\cdot\\frac12|\\mathbf b\\times\\mathbf c|.\n\\)\n\n*Triangle \\(DGF\\)* \n\n\\[\n\\det\\!\\begin{pmatrix}\n0-\\frac17&\\frac{65}{91}\\\\[2mm]\n0-\\frac17&\\frac{13}{91}\n\\end{pmatrix}\n =\\frac{4}{49},\n\\qquad\n\\text{Area}(DGF)=\\frac{4}{49}\\cdot\\frac12|\\mathbf b\\times\\mathbf c|.\n\\]\n\nHence \n\n\\[\n\\text{Area}(DEGF)=\\Bigl(\\frac{20}{49}+\\frac{4}{49}\\Bigr)\n \\frac12|\\mathbf b\\times\\mathbf c|\n =\\frac{24}{49}\\,\\text{Area}(\\triangle ABC).\n\\]\n\nGiven \\(\\text{Area}(DEGF)=288\\),\n\n\\[\n\\frac{24}{49}\\,\\text{Area}(\\triangle ABC)=288\n\\Longrightarrow\n\\text{Area}(\\triangle ABC)=288\\cdot\\frac{49}{24}=12\\cdot49=588.\n\\]\n\n--------------------------------------------------------------------\n### 2. Area of the heptagon \\(AFNBCEM\\)\n\nPlace the points in the \\((\\alpha,\\beta)\\)\u2013plane where \\((\\alpha,\\beta)\\) are the\ncoefficients of \\(\\mathbf b,\\mathbf c\\):\n\n\\[\n\\begin{array}{c|c}\n\\text{Vertex}&(\\alpha,\\beta)\\\\\\hline\nA&(0,0)\\\\\nF&(0,\\frac{13}{91})\\\\\nN&(\\frac{10}{7},-\\frac{65}{91})\\\\\nB&(1,0)\\\\\nC&(0,1)\\\\\nE&(\\frac57,0)\\\\\nM&\\bigl(-\\frac17,\\frac{26}{91}\\bigr)\n\\end{array}\n\\]\n\nApplying the shoelace formula to these seven points gives\n\n\\[\n\\begin{aligned}\n\\sum x_i y_{i+1}-y_i x_{i+1}\n&=1,\\\\[2mm]\n\\text{Area}_{\\text{coeff}}&=\\frac12\\cdot1=\\frac12 .\n\\end{aligned}\n\\]\n\nIn the original plane a figure\u2019s area is multiplied by\n\\(|\\mathbf b\\times\\mathbf c|=2\\,\\text{Area}(\\triangle ABC)\\).\nThus\n\n\\[\n\\text{Area}(AFNBCEM)=|\\mathbf b\\times\\mathbf c|\\,\n\\frac12\n =\\text{Area}(\\triangle ABC)=588.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{588}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The 12 letters are \n\n\\[\nA,B,C,D,E,F,G,H,I,J,K,L .\n\\]\n\nA random grouping into six unordered pairs is performed, each pair is written with its\nletters in alphabetical order, and then the six two\u2011letter \u201cwords\u2019\u2019 are listed\nalphabetically. \n\nLet the word that appears last (the lexicographically greatest word) be called the **max word**.\nThe max word is determined by the *first* letters of the six pairs:\nits first letter is the largest among the six first letters, and if several pairs have that\nfirst letter, the one with the larger second letter wins.\n\n--------------------------------------------------------------------\n### 1. Total number of possible pairings\n\\[\n\\#\\text{pairings}= \\frac{12!}{2!^{6}\\,6!}=10395 .\n\\]\n\n--------------------------------------------------------------------\n### 2. When does the max word contain \\(G\\)?\n\nTwo mutually exclusive possibilities:\n\n* **(A) \\(G\\) is the first letter of its pair.** \n Then the pair is \\((G,X)\\) with \\(X\\in\\{H,I,J,K,L\\}\\).\n For \\((G,X)\\) to be the max word, no other pair may have a first\n letter larger than \\(G\\). \n Hence each of the other four letters \\(\\{H,I,J,K,L\\}\\setminus\\{X\\}\\) must be paired\n with a letter \\(\\le F\\) (otherwise its first letter would exceed \\(G\\)).\n The remaining letters are \n\n * 4 \u201chigh\u2019\u2019 letters \\(\\{H,I,J,K,L\\}\\setminus\\{X\\}\\);\n * 6 \u201clow\u2019\u2019 letters \\(\\{A,B,C,D,E,F\\}\\).\n\n Choose which four low letters are matched with the four high letters\n and then match them (an injection). \n The number of ways is \n\n \\[\n {}_{6}P_{4}=6\\cdot5\\cdot4\\cdot3=360 .\n \\]\n\n The two low letters left over are forced to pair with each other.\n Thus for a fixed \\(X\\) there are \\(360\\) pairings, and there are\n \\(5\\) possible choices for \\(X\\):\n\n \\[\n N_A=5\\cdot360=1800 .\n \\]\n\n* **(B) \\(G\\) is the second letter of its pair.** \n Then the pair is \\((X,G)\\) with \\(XX\\) (there would be more \u201chigh\u2019\u2019 letters than \u201clow\u2019\u2019 ones). \n The only possible value is \\(X=F\\).\n\n Pair \\(G\\) with \\(F\\). The five letters \\(\\{H,I,J,K,L\\}\\) must each be paired\n with a distinct letter from \\(\\{A,B,C,D,E\\}\\). There are \n\n \\[\n 5! =120\n \\]\n\n ways to do this, and no letters remain.\n\n Hence \n\n \\[\n N_B =120 .\n \\]\n\n--------------------------------------------------------------------\n### 3. Favourable pairings\n\\[\nN_{\\text{fav}}=N_A+N_B=1800+120=1920 .\n\\]\n\n--------------------------------------------------------------------\n### 4. Desired probability\n\\[\nP=\\frac{N_{\\text{fav}}}{\\#\\text{pairings}}\n =\\frac{1920}{10395}\n =\\frac{128}{693}\\qquad(\\gcd(128,693)=1).\n\\]\n\nThus \\(m=128,\\;n=693\\) and \n\n\\[\nm+n=128+693=821 .\n\\]\n\n\\[\n\\boxed{821}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the line be the \\(x\\)-axis and put \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(c,0),\\qquad D=(d,0),\\qquad E=(e,0),\\qquad F=(f,0)\n\\]\n\nwith the points in the order \\(A\\!<\\!B\\!<\\!C\\!<\\!D\\!<\\!E\\!<\\!F\\).\n\n---\n\n### 1. Locate the collinear points\n\n\\[\n\\begin{aligned}\nAC&=26 \\Longrightarrow c-0 = 26 \\; \\Rightarrow\\; c=26,\\\\[2pt]\nCE&=31 \\Longrightarrow e-c =31 \\; \\Rightarrow\\; e=26+31=57,\\\\[2pt]\nAF&=73 \\Longrightarrow f=73 .\n\\end{aligned}\n\\]\n\nFrom \\(DF=33\\) we get \n\n\\[\nf-d =33 \\Longrightarrow d = f-33 = 73-33 =40 .\n\\]\n\nFrom \\(BD=22\\),\n\n\\[\nd-b =22 \\Longrightarrow b = d-22 = 40-22 =18 .\n\\]\n\nThus \n\n\\[\nA=(0,0),\\; B=(18,0),\\; C=(26,0),\\; D=(40,0),\\; E=(57,0),\\; F=(73,0).\n\\]\n\nAll distances given in the statement are satisfied.\n\n---\n\n### 2. Position of \\(G\\)\n\nLet \\(G=(x,y)\\) with \\(y\\neq0\\). \nThe distances to \\(C\\) and \\(D\\) give\n\n\\[\n\\begin{cases}\n(x-26)^2+y^2 = 40^2 =1600,\\\\[2pt]\n(x-40)^2+y^2 = 30^2 = 900 .\n\\end{cases}\n\\]\n\nSubtracting the equations:\n\n\\[\n(x-26)^2-(x-40)^2 = 700.\n\\]\n\nExpanding,\n\n\\[\n(-52x+26^2)+(80x-40^2)=700\\;\\Longrightarrow\\;28x-924=700,\n\\]\n\nso \n\n\\[\n28x=1624\\quad\\Longrightarrow\\quad x=58 .\n\\]\n\nPlug \\(x=58\\) into \\((x-26)^2+y^2=1600\\):\n\n\\[\n(58-26)^2+y^2 = 32^2 + y^2 = 1600\\;\\Longrightarrow\\; y^2 = 1600-1024 = 576,\n\\]\n\nhence \\(|y|=24\\). \nTake \\(G=(58,24)\\) (the other choice \\((58,-24)\\) gives the same area).\n\n---\n\n### 3. Area of \\(\\triangle BGE\\)\n\nPoints:\n\n\\[\nB=(18,0),\\qquad E=(57,0),\\qquad G=(58,24).\n\\]\n\nThe base \\(BE\\) lies on the \\(x\\)-axis, so its length is \n\n\\[\nBE = 57-18 = 39.\n\\]\n\nThe altitude from \\(G\\) to the line \\(BE\\) is simply \\(|y| = 24\\).\n\nThus \n\n\\[\n\\text{Area} = \\frac12 \\times (\\text{base}) \\times (\\text{height})\n = \\frac12 \\times 39 \\times 24\n = 39 \\times 12\n = 468 .\n\\]\n\n(Equivalently, the shoelace formula gives \\(\\frac12|1368-432|=468\\).)\n\n---\n\n\\[\n\\boxed{468}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nd=n+2\\qquad (d\\ge 1,\\; n=d-2).\n\\]\n\nThen \n\n\\[\nn+3=d+1 ,\\qquad n^{2}+9=(d-2)^{2}+9=d^{2}-4d+13 .\n\\]\n\nHence \n\n\\[\n3(n+3)(n^{2}+9)=3(d+1)(d^{2}-4d+13).\n\\]\n\nThe condition \\(d\\mid 3(n+3)(n^{2}+9)\\) becomes \n\n\\[\nd \\mid 3(d+1)(d^{2}-4d+13).\n\\]\n\nTake this congruence modulo \\(d\\). \nSince \\(d\\equiv0\\pmod d\\),\n\n\\[\nd+1\\equiv1,\\qquad d^{2}-4d+13\\equiv13\\pmod d,\n\\]\n\nso \n\n\\[\n3(d+1)(d^{2}-4d+13)\\equiv 3\\cdot1\\cdot13=39\\pmod d.\n\\]\n\nThus \\(d\\) must divide \\(39\\):\n\n\\[\nd\\in\\{1,3,13,39\\}.\n\\]\n\nRecall \\(d=n+2\\) and we need \\(n>0\\). \nHence\n\n\\[\nn=d-2\\in\\{-1,1,11,37\\}.\n\\]\n\nDiscard the non\u2011positive value \\(-1\\). The admissible positive integers are \n\n\\[\nn=1,\\;11,\\;37 .\n\\]\n\nCheck:\n\n* \\(n=1\\): \\(n+2=3\\) and \\(3(1+3)(1^{2}+9)=120\\) is divisible by \\(3\\).\n* \\(n=11\\): \\(n+2=13\\) and \\(3(14)(130)=5460\\) is divisible by \\(13\\).\n* \\(n=37\\): \\(n+2=39\\) and \\(3(40)(1378)=165360\\) is divisible by \\(39\\).\n\nAll satisfy the condition. \n\nThe required sum is \n\n\\[\n1+11+37 = 49.\n\\]\n\n\\[\n\\boxed{49}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nA piecewise linear periodic function is defined by $f(x)=\\begin{cases}x&\\text{if }x\\in[-1,1)\\\\2-x&\\text{if }x\\in[1,3)\\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\\frac{a+b\\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For the periodic saw\u2011tooth \n\n\\[\nf(x)=\\begin{cases}\nx-4k,&x\\in[-1+4k,\\,1+4k)\\\\[2pt]\n4k+2-x,&x\\in[1+4k,\\,3+4k)\n\\end{cases}\\qquad(k\\in\\mathbb Z)\n\\]\n\nthe parabola is \n\n\\[\nx = 34y^{2}\\qquad (y\\in[-1,1]).\n\\]\n\nHence an intersection point \\((x,y)\\) must satisfy \n\n\\[\ny=f(x),\\qquad x=34y^{2}.\n\\]\n\n---\n\n### 1. Intersections on an \u201cup\u201d segment \n\nOn an up segment \\(x= y+4k\\). \nSubstituting \\(x=34y^{2}\\) gives \n\n\\[\n34y^{2}=y+4k\\;\\Longrightarrow\\;34y^{2}-y-4k=0 .\n\\]\n\nFor each integer \\(k\\) with an up segment inside \\([0,34]\\) (i.e. \\(k=0,1,\\dots ,8\\))\nthe two roots are \n\n\\[\ny_{k}^{\\pm}=\\frac{1\\pm\\sqrt{1+544k}}{68}.\n\\]\n\nBoth satisfy the interval \\([-1,1]\\) and give \\(x\\in[-1+4k,\\,1+4k)\\);\nhence each \\(k\\) contributes **two** intersection points.\n\nThe sum of the two roots for a fixed \\(k\\) is, by Vieta,\n\n\\[\ny_{k}^{+}+y_{k}^{-}= \\frac{1}{34}.\n\\]\n\nThus the total contribution of all up\u2011segments is \n\n\\[\n\\sum_{k=0}^{8}(y_{k}^{+}+y_{k}^{-})=9\\cdot\\frac1{34}=\\frac9{34}.\n\\]\n\n---\n\n### 2. Intersections on a \u201cdown\u2019\u2019 segment \n\nOn a down segment \\(x=4k+2-y\\). \nUsing \\(x=34y^{2}\\),\n\n\\[\n34y^{2}=4k+2-y\\;\\Longrightarrow\\;34y^{2}+y-(4k+2)=0 .\n\\]\n\nFor each \\(k=0,1,\\dots ,8\\) the roots are \n\n\\[\nz_{k}^{\\pm}= \\frac{-1\\pm\\sqrt{273+544k}}{68}.\n\\]\n\nThe admissible \\(y\\)-values must satisfy \\(-1 -1\\)).* \nUsing the plane equation \\(z=75-x-y\\) the conditions become \n\n\\[\n-1f(r)+1\\) \u2013 greedy stays optimal;\n* if \\(r\\bmod10\\ge5\\) then \\(f(r+25)=f(r)-2\\le f(r)\\) \u2013 using one fewer quarter gives fewer coins.\n\nThus the greedy algorithm fails **exactly** when the greedy remainder \\(r\\) satisfies \n\n\\[\nr\\bmod10\\ge5 \\;\\Longleftrightarrow\\; r\\in\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\]\n\n---\n\n**Step 4 \u2013 Dropping more than one quarter never helps**\n\nFor two quarters removed we add \\(50\\) cents to the remainder. \nA similar computation gives \n\n\\[\nf(r+50)=f(r)+5 .\n\\]\n\nThe change in total coin count is \\(-2+5=+3\\); for three quarters removed the change is \\(-3+12=+9\\), etc. \nHence removing two or more quarters can never improve on the greedy solution. \nTherefore the condition found in Step\u202f3 is both necessary and sufficient.\n\n---\n\n**Step 5 \u2013 Counting the successful \\(N\\) (1\u202f\u2264\u202fN\u202f\u2264\u202f1000)** \n\nThe greedy fails for those \\(N\\ge25\\) whose remainder modulo \\(25\\) lies in \n\n\\[\nR=\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\]\n\nFor a fixed residue \\(r\\in R\\),\n\n\\[\nN=r+25k\\qquad (k\\ge1,\\; N\\le1000).\n\\]\n\nThe largest possible \\(k\\) is \\(\\bigl\\lfloor\\frac{1000-r}{25}\\bigr\\rfloor =39\\)\n(because \\(1000-r\\) ranges from \\(981\\) to \\(995\\)). \nThus each residue contributes \\(39\\) failing numbers.\n\n\\[\n\\#\\text{failures}=|R|\\times 39 = 10\\times39 = 390 .\n\\]\n\nAll other numbers (including the ten numbers \\(5,6,7,8,9,15,16,17,18,19\\) themselves, which are \\(<25\\) and therefore not failures) are successes.\n\n\\[\n\\#\\text{successes}=1000-390 = 610 .\n\\]\n\n---\n\n\\[\n\\boxed{610}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\na_1a_2\\dots a_{16},\\qquad a_i\\in\\{0,1\\}\n\\]\n\nbe a binary string where \\(a_i=1\\) means the \\(i^{\\text{th}}\\) chair is occupied.\nThe condition *no person sits next to two other people* means that a\n\\(1\\) may not have a \\(1\\) on both sides; equivalently the string contains\nno three consecutive \\(1\\)\u2019s. \nHence we must count the binary strings of length \\(16\\) that\n\n* have exactly eight \\(1\\)\u2019s,\n* contain no substring \\(111\\).\n\n---\n\n### 1. Decompose the occupied chairs into blocks\n\nSince a block of consecutive \\(1\\)\u2019s can have length at most \\(2\\), the eight\n\\(1\\)\u2019s are split into blocks of length \\(1\\) or \\(2\\).\n\nLet \n\n* \\(x\\) = number of blocks of length \\(1\\),\n* \\(y\\) = number of blocks of length \\(2\\),\n* \\(m=x+y\\) = total number of blocks.\n\nThen \n\n\\[\nx+2y=8,\\qquad x+y=m\\Longrightarrow y=8-m,\\;x=2m-8 .\n\\]\n\nThus \\(m\\) can be any integer with \\(\\lceil 8/2\\rceil\\le m\\le 8\\); i.e. \n\n\\[\nm=4,5,6,7,8 .\n\\]\n\nFor a given \\(m\\) the positions of the \\(y=8-m\\) blocks of length \\(2\\)\namong the \\(m\\) blocks can be chosen in \n\n\\[\n\\binom{m}{\\,8-m\\,}\n\\]\n\nways.\n\n---\n\n### 2. Insert the separating zeros\n\nBetween two consecutive blocks there must be at least one \\(0\\).\nWith \\(m\\) blocks there are \\(m-1\\) mandatory zeros.\nThere are \\(16-8=8\\) zeros altogether, so after placing the mandatory ones we\nstill have \n\n\\[\n8-(m-1)=9-m\n\\]\n\nzeros left. \n\nThese remaining zeros may be distributed freely among the \\(m+1\\) gaps\n(the two ends and the \\(m-1\\) interior gaps). By stars\u2011and\u2011bars the number\nof ways is\n\n\\[\n\\binom{(9-m)+(m+1)-1}{(m+1)-1}\n =\\binom{9}{m}.\n\\]\n\n---\n\n### 3. Count all possibilities\n\nFor each admissible \\(m\\),\n\n\\[\n\\text{choices}(m)=\\binom{m}{8-m}\\binom{9}{m}.\n\\]\n\nHence \n\n\\[\n\\begin{aligned}\nN&=\\sum_{m=4}^{8}\\binom{m}{8-m}\\binom{9}{m}\\\\[2mm]\n &=\\binom{4}{4}\\binom{9}{4}\n +\\binom{5}{3}\\binom{9}{5}\n +\\binom{6}{2}\\binom{9}{6}\n +\\binom{7}{1}\\binom{9}{7}\n +\\binom{8}{0}\\binom{9}{8}\\\\[2mm]\n &=1\\cdot126+10\\cdot126+15\\cdot84+7\\cdot36+1\\cdot9\\\\\n &=126+1260+1260+252+9\\\\\n &=2907 .\n\\end{aligned}\n\\]\n\n---\n\n### 4. Remainder modulo \\(1000\\)\n\n\\[\n2907\\equiv 907\\pmod{1000}.\n\\]\n\n\\[\n\\boxed{907}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\n\\angle A=84^{\\circ},\\qquad \\angle B=60^{\\circ},\\qquad \\angle C=36^{\\circ}.\n\\]\n\n--------------------------------------------------------------------\n### 1. The nine\u2011point circle in complex form \n\nPut the circumcircle of \\(\\triangle ABC\\) as the unit circle and let \n\n\\[\na=1,\\qquad b=e^{i\\beta},\\qquad c=e^{i\\gamma},\n\\]\n\nwhere \n\n\\[\n\\beta =72^{\\circ},\\qquad \\gamma =240^{\\circ}\n\\]\n\nbecause the central arcs are twice the opposite angles:\n\\(\\widehat{BC}=2A=168^{\\circ},\\;\\widehat{CA}=2B=120^{\\circ},\n\\;\\widehat{AB}=2C=72^{\\circ}\\).\n\nThe nine\u2011point centre is\n\n\\[\nN=\\frac{a+b+c}{2},\n\\]\n\nand its radius is \\(\\frac12\\) (since \\(|a|=|b|=|c|=1\\)). \nThe three midpoints are \n\n\\[\nD=\\frac{b+c}{2},\\qquad \nE=\\frac{c+a}{2},\\qquad \nF=\\frac{a+b}{2}.\n\\]\n\nNotice that\n\n\\[\nD-N=-\\frac{a}{2},\\qquad \nE-N=-\\frac{b}{2},\\qquad \nF-N=-\\frac{c}{2} .\n\\tag{1}\n\\]\n\nHence the central angle \\(\\widehat{DE}\\) equals the angle between vectors\n\\(-a\\) and \\(-b\\); it is the same as the angle between \\(a\\) and \\(b\\).\n\n\\[\n\\widehat{DE}= \\angle aOb = 2\\angle ACB = 2\\cdot36^{\\circ}=72^{\\circ}.\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 2. The other intersection points \n\nThe nine\u2011point circle is the image of the circumcircle under the similarity\n\n\\[\nX\\longmapsto N-\\frac{X}{2},\n\\tag{3}\n\\]\n\ni.e. the homothety with centre the centroid (factor \\(-\\tfrac12\\)).\nConsequently, if a point \\(Y\\) of the nine\u2011point circle is the image of\n\\(X\\) on the circumcircle, then \n\n\\[\nY = N-\\frac{X}{2}\\qquad\\Longleftrightarrow\\qquad X=2(N-Y).\n\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n#### (a) Point \\(G\\)\n\n\\(G\\) lies on line \\(BD\\). Since \\(D\\) is the image of \\(A\\) and\n\\(B\\) is the image of the point \\(X\\) with \\(X=b\\), the line \\(BD\\) is the\nimage of the line through \\(A\\) parallel to chord \\(BC\\).\nThus \\(G\\) corresponds to the second intersection of the line through\n\\(A\\;(=a)\\) parallel to \\(BC\\) with the circumcircle.\n\nFor a line through a point \\(e^{i\\alpha}\\) parallel to chord\n\\(e^{i\\beta}e^{i\\gamma}\\) the second intersection is\n\\(e^{i(\\beta+\\gamma-\\alpha)}\\). \nHere \\(\\alpha=0,\\;\\beta=72^{\\circ},\\;\\gamma=240^{\\circ}\\); therefore\n\n\\[\nX_G = e^{i(\\beta+\\gamma)}=e^{i312^{\\circ}} .\n\\]\n\nFrom (3) the point on the nine\u2011point circle is \n\n\\[\nG = N-\\frac{X_G}{2}.\n\\]\n\nHence the vector \\(NG=-\\frac{X_G}{2}\\) has direction \\(312^{\\circ}+180^{\\circ}=132^{\\circ}\\).\n\n--------------------------------------------------------------------\n#### (b) Point \\(H\\)\n\n\\(H\\) lies on line \\(AE\\). This line is parallel to chord \\(CA\\); the\nstarting point on the circumcircle is \\(B\\,(=e^{i72^{\\circ}})\\). Thus\n\n\\[\nX_H = e^{i(0+240^{\\circ}-72^{\\circ})}=e^{i168^{\\circ}} ,\n\\qquad\nH=N-\\frac{X_H}{2},\n\\]\n\nso the direction of \\(NH\\) is \\(168^{\\circ}+180^{\\circ}=348^{\\circ}\\).\n\n--------------------------------------------------------------------\n#### (c) Point \\(J\\)\n\n\\(J\\) lies on line \\(AF\\), which is parallel to chord \\(AB\\); it starts\nfrom \\(C\\,(=e^{i240^{\\circ}})\\). Therefore\n\n\\[\nX_J = e^{i(0+72^{\\circ}-240^{\\circ})}=e^{i192^{\\circ}},\n\\qquad\nJ=N-\\frac{X_J}{2},\n\\]\n\nand the direction of \\(NJ\\) is \\(192^{\\circ}+180^{\\circ}=12^{\\circ}\\).\n\n--------------------------------------------------------------------\n### 3. The required arcs on the nine\u2011point circle \n\nFrom the directions obtained:\n\n\\[\n\\begin{aligned}\n&\\text{Arc }DE = 252^{\\circ}-180^{\\circ}=72^{\\circ},\\\\[2mm]\n&\\text{Arc }FG = 132^{\\circ}-60^{\\circ}=72^{\\circ},\\\\[2mm]\n&\\text{Arc }HJ = (360^{\\circ}-348^{\\circ})+12^{\\circ}=24^{\\circ}.\n\\end{aligned}\n\\]\n\nAll are the minor arcs (each \\(<180^{\\circ}\\)).\n\n--------------------------------------------------------------------\n### 4. Computing the requested expression \n\n\\[\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n=72^{\\circ}+2\\!\\cdot\\!24^{\\circ}+3\\!\\cdot\\!72^{\\circ}\n=72+48+216=336^{\\circ}.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{336}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For a regular 24\u2011gon label the vertices \\(0,1,\\ldots ,23\\) in order.\nIf a segment joins vertex \\(i\\) to vertex \\(j\\) then the chord length depends only on \n\n\\[\nk=\\min \\{\\,|i-j|\\;,\\;24-|i-j|\\,\\},\n\\qquad 1\\le k\\le 12 .\n\\]\n\nThus a configuration in which all 12 segments have the same length corresponds to a\nperfect matching in the graph whose edges are all chords of a fixed step \\(k\\).\n\n---\n\n### 1. Structure of the step\u2011\\(k\\) graph \n\nLet \\(d=\\gcd(24,k)\\). \nThe vertices split into \\(d\\) disjoint cycles, each of length \n\n\\[\nL=\\frac{24}{d}.\n\\]\n\nEvery vertex is incident with exactly the two edges of its cycle. \nA perfect matching can exist only if each cycle has even length, i.e. \\(L\\) must be even.\n\\(L\\) is odd only when \\(d=8\\) (then \\(L=3\\)); this occurs for \\(k=8\\). \nHence the step \\(k=8\\) gives **no** valid configuration.\n\nFor an even cycle of length \\(L\\ge4\\) there are exactly two perfect matchings\n(the two possible \u201calternating\u201d choices). \nIf \\(L=2\\) (the case \\(k=12\\)), the matching is forced and there is only one.\n\nConsequently, for a permissible \\(k\\)\n\n\\[\n\\#\\text{ matchings for step }k=\n\\begin{cases}\n2^{d}, & L>2,\\\\[2pt]\n1, & L=2 .\n\\end{cases}\n\\]\n\n---\n\n### 2. Count for each step \\(k\\)\n\n\\[\n\\begin{array}{c|c|c|c}\nk & d=\\gcd(24,k) & L=24/d & \\#\\text{ matchings}\\\\ \\hline\n1,5,7,11 & 1 & 24 & 2\\\\\n2,10 & 2 & 12 & 2^{2}=4\\\\\n3,9 & 3 & 8 & 2^{3}=8\\\\\n4 & 4 & 6 & 2^{4}=16\\\\\n6 & 6 & 4 & 2^{6}=64\\\\\n12 & 12& 2 & 1\\\\\n8 & 8 & 3 & \\text{none}\n\\end{array}\n\\]\n\nNow sum over all admissible \\(k\\) ( \\(k=1,\\dots ,12\\) except \\(k=8\\) ):\n\n\\[\n\\begin{aligned}\n\\text{Total}&=4\\cdot2\\;+\\;2\\cdot4\\;+\\;2\\cdot8\\;+\\;1\\cdot16\\;+\\;1\\cdot64\\;+\\;1\\cdot1\\\\\n&=8+8+16+16+64+1\\\\\n&=113 .\n\\end{aligned}\n\\]\n\n---\n\n\\[\n\\boxed{113}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\n17_{b}=1\\cdot b+7=b+7,\\qquad \n97_{b}=9\\cdot b+7=9b+7 .\n\\]\n\nWe need \n\n\\[\nb+7 \\mid 9b+7 .\n\\]\n\nWrite \\(9b+7\\) in terms of \\(b+7\\):\n\n\\[\n9b+7 = 9(b+7) - 56 .\n\\]\n\nHence the remainder upon division by \\(b+7\\) is \\(-56\\). \nThus \\(b+7\\) must divide \\(56\\):\n\n\\[\nb+7 \\mid 56 .\n\\]\n\nList the positive divisors of \\(56\\):\n\n\\[\n1,\\;2,\\;4,\\;7,\\;8,\\;14,\\;28,\\;56 .\n\\]\n\nSince the base must satisfy \\(b>9\\) (so that the digit 9 is allowed), we need \n\n\\[\nb+7>9+7=16 .\n\\]\n\nThe only divisors of \\(56\\) larger than \\(16\\) are \\(28\\) and \\(56\\).\n\n\\[\n\\begin{aligned}\nb+7 &= 28 \\;\\Longrightarrow\\; b=21,\\\\[2pt]\nb+7 &= 56 \\;\\Longrightarrow\\; b=49.\n\\end{aligned}\n\\]\n\nBoth bases exceed \\(9\\) and thus are admissible.\n\nThe sum of all such bases is\n\n\\[\n21+49 = 70 .\n\\]\n\n\\[\n\\boxed{70}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\na_i=A_1A_i\\qquad (i=2,\\dots ,11),\\qquad s_i=A_iA_{i+1}\\qquad (i=2,\\dots ,10).\n\\]\n\nFor each triangle \\(A_iA_1A_{i+1}\\;(2\\le i\\le10)\\)\n\n* \\(\\displaystyle \\text{Area}=1\\),\n* \\(\\displaystyle\\cos\\angle A_iA_1A_{i+1}= \\frac{12}{13}\\).\n\n--------------------------------------------------------------------\n### 1. Product of the two sides from \\(A_1\\)\n\nWith \\(\\theta=\\angle A_iA_1A_{i+1}\\) we have \n\n\\[\n\\sin\\theta=\\sqrt{1-\\cos ^2\\theta}= \\frac{5}{13}.\n\\]\n\nThe area of \\(\\triangle A_iA_1A_{i+1}\\) is \n\n\\[\n\\frac12 a_i a_{i+1}\\sin\\theta =1\n\\Longrightarrow a_i a_{i+1}= \\frac{2}{\\sin\\theta}= \\frac{2}{5/13}= \\frac{26}{5}\\equiv c .\n\\tag{1}\n\\]\n\nHence for all \\(i\\)\n\n\\[\na_i a_{i+1}=c=\\frac{26}{5}.\n\\]\n\n--------------------------------------------------------------------\n### 2. Length of the side \\(A_iA_{i+1}\\)\n\nApply the law of cosines in \\(\\triangle A_iA_1A_{i+1}\\):\n\n\\[\ns_i^2=a_i^{\\,2}+a_{i+1}^{\\,2}-2a_i a_{i+1}\\cos\\theta\n =a_i^{\\,2}+a_{i+1}^{\\,2}-2c\\Bigl(\\frac{12}{13}\\Bigr).\n\\]\n\nBecause \\(2c\\frac{12}{13}= \\frac{624}{65}= \\frac{48}{5}\\),\n\n\\[\ns_i^{\\,2}=a_i^{\\,2}+a_{i+1}^{\\,2}-\\frac{48}{5}. \\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 3. The alternating pattern of the radii\n\nFrom (1) we have \\(a_{i+1}=c/a_i\\). Consequently \n\n\\[\na_{i+2}=c/a_{i+1}=c/(c/a_i)=a_i .\n\\]\n\nThus \n\n\\[\na_{2}=a_{4}=a_{6}=a_{8}=a_{10}\\equiv x, \\qquad \na_{3}=a_{5}=a_{7}=a_{9}=a_{11}\\equiv \\frac{c}{x}.\n\\]\n\nAll sides \\(s_i\\;(i=2,\\dots ,10)\\) are equal, because each uses the\npair \\((x,\\;c/x)\\) in (2). Set \n\n\\[\nS^2=x^{2}+\\Bigl(\\frac{c}{x}\\Bigr)^2-\\frac{48}{5}.\n\\tag{3}\n\\]\n\n--------------------------------------------------------------------\n### 4. Express everything via \\(t=x+\\dfrac{c}{x}\\)\n\nDefine \n\n\\[\nt=x+\\frac{c}{x}=a_2+a_{11}.\n\\]\n\nThen \n\n\\[\nx^{2}+\\Bigl(\\frac{c}{x}\\Bigr)^2=t^{2}-2c .\n\\]\n\nInsert this into (3):\n\n\\[\nS^{2}=t^{2}-2c-\\frac{48}{5}=t^{2}-(2c+\\frac{48}{5}).\n\\]\n\nSince \\(c=\\dfrac{26}{5}\\),\n\n\\[\n2c+\\frac{48}{5}= \\frac{52}{5}+\\frac{48}{5}=20.\n\\]\n\nHence \n\n\\[\nS^{2}=t^{2}-20,\\qquad S=\\sqrt{t^{2}-20}. \\tag{4}\n\\]\n\n--------------------------------------------------------------------\n### 5. Use the perimeter\n\nThe perimeter of the 11\u2011gon is \n\n\\[\na_2+a_{11}+ \\sum_{i=2}^{10}s_i = t+9S =20.\n\\]\n\nSubstituting (4):\n\n\\[\nt+9\\sqrt{t^{2}-20}=20.\n\\]\n\nIsolate the radical and square:\n\n\\[\n9\\sqrt{t^{2}-20}=20-t \\quad\\Longrightarrow\\quad \n81(t^{2}-20)=(20-t)^{2}.\n\\]\n\nSimplifying:\n\n\\[\n80t^{2}+40t-2020=0\n\\Longrightarrow 4t^{2}+2t-101=0.\n\\]\n\nSolve for \\(t\\):\n\n\\[\nt=\\frac{-2\\pm\\sqrt{4+1616}}{8}\n =\\frac{-2\\pm 18\\sqrt5}{8}\n =\\frac{-1\\pm 9\\sqrt5}{4}.\n\\]\n\nSince \\(t>0\\), we take the plus sign:\n\n\\[\n\\boxed{t=\\frac{9\\sqrt5-1}{4}}.\n\\]\n\nThus \n\n\\[\nA_1A_2+A_1A_{11}= \\frac{9\\sqrt5-1}{4}\n =\\frac{m\\sqrt n-p}{q},\n\\]\nwith \\(m=9,\\;n=5,\\;p=1,\\;q=4\\).\n\n--------------------------------------------------------------------\n### 6. Compute \\(m+n+p+q\\)\n\n\\[\nm+n+p+q = 9+5+1+4 = 19.\n\\]\n\n\\[\n\\boxed{19}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The nine players are distinct. Let \n\n\\[\nc=\\#\\text{chocolate},\\qquad v=\\#\\text{vanilla},\\qquad s=\\#\\text{strawberry}\n\\]\n\nwith \n\n\\[\nc+v+s=9,\\qquad c>v>s\\ge 1 .\n\\]\n\n---\n\n### 1. Find all possible triples \\((c,v,s)\\)\n\nSince \\(c>v>s\\),\n\n\\[\nc\\ge v+1,\\qquad v\\ge s+1.\n\\]\n\nWrite \\(v=s+d_2\\) and \\(c=v+d_1\\) where \\(d_1,d_2\\ge 1\\). \nThen \n\n\\[\nc+v+s=(s+d_2+d_1)+(s+d_2)+s=3s+2d_2+d_1=9 .\n\\]\n\nBecause \\(s\\ge1\\), we have \\(3s\\le 9\\Rightarrow s=1,2,3\\).\n\n* **\\(s=1\\):** \\(2d_2+d_1=6\\). \n \\(d_2=1\\Rightarrow d_1=4\\) \u2192 \\((c,v,s)=(6,2,1)\\). \n \\(d_2=2\\Rightarrow d_1=2\\) \u2192 \\((c,v,s)=(5,3,1)\\).\n\n* **\\(s=2\\):** \\(2d_2+d_1=3\\). \n \\(d_2=1\\Rightarrow d_1=1\\) \u2192 \\((c,v,s)=(4,3,2)\\).\n\n* **\\(s=3\\):** \\(2d_2+d_1=0\\) \u2013 impossible with \\(d_1,d_2\\ge1\\).\n\nThus the only feasible triples are \n\n\\[\n(6,2,1),\\;(5,3,1),\\;(4,3,2).\n\\]\n\n---\n\n### 2. Count assignments for each triple\n\nFor a given \\((c,v,s)\\) the number of ways to assign the flavors to the 9 distinct players is the multinomial coefficient \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\n\\[\n\\begin{aligned}\n(6,2,1):\\;&\\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[2mm]\n(5,3,1):\\;&\\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[2mm]\n(4,3,2):\\;&\\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\n---\n\n### 3. Total number of assignments\n\n\\[\nN = 252+504+1260 = 2016.\n\\]\n\n---\n\n### 4. Remainder modulo \\(1000\\)\n\n\\[\n2016 \\equiv 16 \\pmod{1000}.\n\\]\n\n\\[\n\\boxed{16}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The equation \n\n\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\nis a homogeneous quadratic form. \nFactor it over the integers:\n\n\\[\n12x^{2}-xy-6y^{2}= (3x+2y)(4x-3y).\n\\]\n\nIndeed \n\n\\[\n(3x+2y)(4x-3y)=12x^{2}-9xy+8xy-6y^{2}=12x^{2}-xy-6y^{2}.\n\\]\n\nHence a pair \\((x,y)\\) of integers satisfies the equation iff\n\n\\[\n3x+2y=0\\qquad\\text{or}\\qquad 4x-3y=0 .\n\\]\n\n---\n\n### 1. Solutions of \\(3x+2y=0\\)\n\n\\[\n3x+2y=0 \\;\\Longrightarrow\\; y=-\\frac{3}{2}x .\n\\]\n\nFor \\(y\\) to be an integer, \\(x\\) must be even: write \\(x=2k\\). Then \n\n\\[\n(x,y)=(2k,-3k),\\qquad k\\in\\mathbb Z .\n\\]\n\nBoth coordinates must lie in \\([-100,100]\\):\n\n\\[\n-100\\le 2k\\le 100\\;\\Longrightarrow\\;-50\\le k\\le 50,\\\\\n-100\\le -3k\\le 100\\;\\Longrightarrow\\;-33\\le k\\le 33.\n\\]\n\nThus \\(k=-33,-32,\\dots ,33\\); there are \n\n\\[\n33-(-33)+1 = 67\n\\]\n\ninteger solutions on this line.\n\n---\n\n### 2. Solutions of \\(4x-3y=0\\)\n\n\\[\n4x-3y=0 \\;\\Longrightarrow\\; y=\\frac{4}{3}x .\n\\]\n\nFor \\(y\\) to be an integer, \\(x\\) must be a multiple of \\(3\\): put \\(x=3t\\). Then \n\n\\[\n(x,y)=(3t,4t),\\qquad t\\in\\mathbb Z .\n\\]\n\nAgain impose the bounds:\n\n\\[\n-100\\le 3t\\le 100\\;\\Longrightarrow\\;-33\\le t\\le 33,\\\\\n-100\\le 4t\\le 100\\;\\Longrightarrow\\;-25\\le t\\le 25.\n\\]\n\nThus \\(t=-25,-24,\\dots ,25\\); the number of solutions here is \n\n\\[\n25-(-25)+1 = 51.\n\\]\n\n---\n\n### 3. Intersection of the two lines\n\nBoth equations hold simultaneously only at the origin:\n\n\\[\n3x+2y=0,\\;4x-3y=0 \\Longrightarrow (x,y)=(0,0).\n\\]\n\nThis point has been counted in both previous totals, so we subtract it once.\n\n---\n\n### 4. Total number of ordered pairs\n\n\\[\n\\#\\text{solutions}=67+51-1=117.\n\\]\n\n\\[\n\\boxed{117}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the trapezoid be \\(ABCD\\) with \\(AB\\parallel CD\\) and \n\n\\[\nAB=s ,\\qquad CD=r ,\\qquad AD=BC=L \\;( \\text{isosceles}).\n\\]\n\nThe incircle has radius \\(R=3\\) and the area is \\(72\\).\n\n---\n\n### 1. Semiperimeter\n\nFor any tangential quadrilateral (one with an incircle)\n\n\\[\n\\text{Area}=R\\cdot(\\text{semiperimeter}).\n\\]\n\nHence \n\n\\[\n72=3\\cdot s_{\\!p}\\quad\\Longrightarrow\\quad s_{\\!p}=24 .\n\\]\n\nThus the perimeter is \n\n\\[\n2s_{\\!p}=48\\quad\\Longrightarrow\\quad r+s+2L=48. \\tag{1}\n\\]\n\n---\n\n### 2. Tangential condition\n\nIn a tangential quadrilateral the sums of opposite sides are equal:\n\n\\[\nAB+CD = AD+BC\\quad\\Longrightarrow\\quad r+s = 2L. \\tag{2}\n\\]\n\nFrom (1) and (2),\n\n\\[\n2(r+s)=48 \\;\\Longrightarrow\\; r+s=24,\\qquad\n2L=r+s=24\\;\\Longrightarrow\\; L=12.\n\\]\n\n---\n\n### 3. Height\n\nThe incircle touches both parallel sides, so the distance between the bases equals twice the radius:\n\n\\[\nh=2R=6.\n\\]\n\n(Alternatively, \\(\\displaystyle 72=\\tfrac12(r+s)h\\) with \\(r+s=24\\) also gives \\(h=6\\).)\n\n---\n\n### 4. Relating the bases\n\nPlace the trapezoid with its symmetry axis on the \\(y\\)-axis; the bases are horizontal.\nThe horizontal half\u2011difference of the bases is \\(\\dfrac{s-r}{2}\\).\nHence the leg length satisfies\n\n\\[\nL^{2}= \\left(\\frac{s-r}{2}\\right)^{2}+h^{2}.\n\\]\n\nUsing \\(L=12,\\;h=6\\),\n\n\\[\n12^{2}= \\frac{(s-r)^{2}}{4}+6^{2}\n\\quad\\Longrightarrow\\quad\n\\frac{(s-r)^{2}}{4}=108\n\\quad\\Longrightarrow\\quad\ns-r=12\\sqrt3. \\tag{3}\n\\]\n\n---\n\n### 5. Solving for \\(r\\) and \\(s\\)\n\n\\[\n\\begin{cases}\nr+s=24,\\\\[2pt]\ns-r=12\\sqrt3,\n\\end{cases}\n\\qquad\\Longrightarrow\\qquad\n\\begin{aligned}\ns&=\\frac{24+12\\sqrt3}{2}=12+6\\sqrt3,\\\\\nr&=\\frac{24-12\\sqrt3}{2}=12-6\\sqrt3.\n\\end{aligned}\n\\]\n\n---\n\n### 6. Required sum of squares\n\n\\[\n\\begin{aligned}\nr^{2}+s^{2}\n&=(12-6\\sqrt3)^{2}+(12+6\\sqrt3)^{2}\\\\\n&= \\bigl(144-144\\sqrt3+108\\bigr)+\\bigl(144+144\\sqrt3+108\\bigr)\\\\\n&= 504.\n\\end{aligned}\n\\]\n\n\\[\n\\boxed{504}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n* \\(A=(0,0)\\), \n* \\(B=(u,0)\\) on the \\(x\\)-axis, \n* \\(C=(0,v)\\) on the \\(y\\)-axis. \n\nSince \\(\\angle A=90^{\\circ}\\), \\(BC=38\\) gives \n\n\\[\nu^{2}+v^{2}=38^{2}=1444\\tag{1}\n\\]\n\n---\n\n### 1. The equilateral triangle \\(AKL\\)\n\nThe conditions \n\n\\[\nAK=AL=KL=14\n\\]\n\nshow that \\(\\triangle AKL\\) is equilateral. \nLet the direction of \\(\\overrightarrow{AK}\\) form an angle \\(\\theta\\) with the\npositive \\(x\\)-axis. Then\n\n\\[\nK=(14\\cos\\theta,\\;14\\sin\\theta),\\qquad \nL=(14\\cos(\\theta+60^\\circ),\\;14\\sin(\\theta+60^\\circ)).\\tag{2}\n\\]\n\n---\n\n### 2. Using \\(BK=14\\) and \\(CL=14\\)\n\n\\[\nBK^{2}= (u-14\\cos\\theta)^2+(14\\sin\\theta)^2=14^{2}\n\\]\n\n\\[\n\\Longrightarrow\\; u=28\\cos\\theta.\\tag{3}\n\\]\n\nSimilarly \n\n\\[\nCL^{2}= (14\\cos(\\theta+60^\\circ))^{2}+(v-14\\sin(\\theta+60^\\circ))^{2}=14^{2}\n\\]\n\n\\[\n\\Longrightarrow\\; v=28\\sin(\\theta+60^\\circ).\\tag{4}\n\\]\n\n---\n\n### 3. Determining \\(\\theta\\)\n\nInsert (3) and (4) into (1):\n\n\\[\n(28\\cos\\theta)^{2}+(28\\sin(\\theta+60^\\circ))^{2}=1444\n\\]\n\\[\n\\Longrightarrow\\;\\cos^{2}\\theta+\\sin^{2}(\\theta+60^\\circ)=\\frac{361}{196}.\n\\]\n\nUsing \\(\\sin(\\theta+60^\\circ)=\\tfrac12\\sin\\theta+\\tfrac{\\sqrt3}{2}\\cos\\theta\\),\nthe equation reduces to \n\n\\[\n6\\cos^{2}\\theta+2\\sqrt3\\sin\\theta\\cos\\theta= \\frac{312}{49}.\n\\]\n\nSolving gives \\(\\cos\\theta=\\frac{13}{14}\\) (the other root gives the same\ntriangle with the legs interchanged). \n\nHence \n\n\\[\nu=28\\cos\\theta=28\\cdot\\frac{13}{14}=26,\\qquad\nv=28\\sin(\\theta+60^\\circ)=28\\cdot\\frac{4\\sqrt3}{7}=16\\sqrt3 .\n\\]\n\nThus \n\n\\[\nAB=26,\\qquad AC=16\\sqrt3,\\qquad BC=38.\n\\]\n\nFrom (2) we obtain the coordinates of the interior points\n\n\\[\nK=(13,\\;3\\sqrt3),\\qquad L=(2,\\;8\\sqrt3).\n\\]\n\n---\n\n### 4. Area of \\(BKLC\\)\n\nUse the shoelace formula for the polygon \\(B(26,0),K(13,3\\sqrt3),L(2,8\\sqrt3),C(0,16\\sqrt3)\\):\n\n\\[\n\\begin{aligned}\nS_1&=26\\cdot3\\sqrt3+13\\cdot8\\sqrt3+2\\cdot16\\sqrt3+0\\cdot0=214\\sqrt3,\\\\\nS_2&=0\\cdot13+3\\sqrt3\\cdot2+8\\sqrt3\\cdot0+16\\sqrt3\\cdot26=422\\sqrt3.\n\\end{aligned}\n\\]\n\n\\[\n\\text{Area}=\\frac12|S_2-S_1|\n =\\frac12(422-214)\\sqrt3\n =104\\sqrt3 .\n\\]\n\nTherefore the area can be written as \\(n\\sqrt3\\) with \n\n\\[\n\\boxed{n=104}.\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For an eight\u2011digit number formed by a permutation of \n\n\\[\n\\{1,2,3,4,5,6,7,8\\}\n\\]\n\nlet \n\n\\[\na_1a_2a_3a_4a_5a_6a_7a_8\n\\]\n\nbe its digits (left to right). \nA number is divisible by \\(22\\iff\\) it is divisible by \\(2\\) and by \\(11\\).\n\n---\n\n### 1. Divisibility by 2 \n\nThe last digit \\(a_8\\) must be even, so \\(a_8\\in\\{2,4,6,8\\}\\).\n\n---\n\n### 2. Divisibility by 11 \n\nFor an 8\u2011digit number the rule for 11 is \n\n\\[\n(a_1+a_3+a_5+a_7)-(a_2+a_4+a_6+a_8)\\equiv 0\\pmod{11}.\n\\]\n\nSince the total sum of the digits is \n\n\\[\n1+2+\\cdots+8 = 36,\n\\]\n\nlet \n\n\\[\nS_{\\text{odd}}=a_1+a_3+a_5+a_7,\\qquad \nS_{\\text{even}}=a_2+a_4+a_6+a_8 .\n\\]\n\nThen \\(S_{\\text{odd}}+S_{\\text{even}}=36\\) and the condition gives \n\n\\[\nS_{\\text{odd}}-S_{\\text{even}}\\equiv0\\pmod{11}.\n\\]\n\nThe only possible values for \\(S_{\\text{odd}}-S_{\\text{even}}\\) are \\(-22,0,22\\); \n\\(-22\\) would give \\(S_{\\text{odd}}=7\\) and \\(22\\) would give \\(S_{\\text{odd}}=29\\), both impossible because a sum of four distinct digits from \\(\\{1,\\dots ,8\\}\\) cannot be smaller than \\(10\\) nor larger than \\(26\\). \nHence\n\n\\[\nS_{\\text{odd}} = S_{\\text{even}} = 18 .\n\\]\n\nThus the four digits in the odd positions must sum to \\(18\\); the same holds for the even positions.\n\n---\n\n### 3. Choosing the four digits for the odd positions \n\nWe need 4\u2011element subsets of \\(\\{1,\\dots ,8\\}\\) whose sum is \\(18\\). \nA quick enumeration gives the eight subsets\n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\{1,3,6,8\\},\\{1,4,5,8\\},\\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\{2,3,6,7\\},\\{2,4,5,7\\},\\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nEach contains exactly two even digits (the set \\(\\{2,4,6,8\\}\\)) and two odd digits. \nHence every admissible odd\u2011position set has **2 even digits**.\n\nLet a chosen subset be \\(S\\) (the odd\u2011position digits) and its complement \\(S^c\\) (the even\u2011position digits).\n\n---\n\n### 4. Arranging the digits \n\n* The four digits of \\(S\\) can be placed in the odd positions \\((1,3,5,7)\\) in \\(4! = 24\\) ways. \n* The four digits of \\(S^c\\) must fill the even positions \\((2,4,6,8)\\) with the extra requirement that the last digit \\(a_8\\) be even. \n Since \\(S^c\\) contains exactly \\(2\\) even digits, we have \n\n\\[\n\\text{choices for }a_8 = 2,\\qquad\n\\text{arrangements of the remaining three even\u2011position digits}=3! = 6 .\n\\]\n\nThus for each set \\(S\\)\n\n\\[\n\\#\\text{numbers}=4!\\times(2\\times3!) = 24\\times12 = 288.\n\\]\n\n---\n\n### 5. Total number \\(N\\)\n\nThere are \\(8\\) possible subsets \\(S\\); consequently\n\n\\[\nN = 8 \\times 288 = 2304 .\n\\]\n\n---\n\n### 6. Required difference\n\n\\[\nN-2025 = 2304-2025 = 279 .\n\\]\n\n\\[\n\\boxed{279}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nC=25+20i,\\qquad r=5 ,\n\\]\n\nso \n\n\\[\n|C-z|=5\n\\]\n\nis the circle with centre \\(C\\) and radius \\(5\\).\n\nThe second condition \n\n\\[\n|z-4-k|=|z-3i-k|\n\\]\n\nmeans that \\(z\\) is equally distant from the points \n\n\\[\nP_1=4+k\\quad(\\text{on the real axis}), \\qquad \nP_2=k+3i .\n\\]\n\nHence the locus of \\(z\\) is the perpendicular bisector of the segment \\(\\overline{P_1P_2}\\); this is a straight line.\n\n---\n\n### 1. Equation of the line\n\nWrite \\(z=x+yi\\). \n\n\\[\n(x-(4+k))^2+y^2=(x-k)^2+(y-3)^2 .\n\\]\n\nExpanding and simplifying gives \n\n\\[\n-8(x-k)+16=-6y+9,\n\\]\n\n\\[\n-8x+8k+6y+7=0 .\n\\]\n\nThus the line \\(L(k)\\) is \n\n\\[\n-8x+6y+8k+7=0 \\qquad\\text{or}\\qquad 8x-6y=8k+7 .\n\\]\n\nAll such lines have slope \\(\\dfrac{4}{3}\\); they are a family of parallel lines depending on \\(k\\).\n\n---\n\n### 2. Tangency condition\n\nThe system has exactly one solution precisely when the line \\(L(k)\\) is tangent to the circle \\(|z-C|=5\\). \n\nFor a line \\(Ax+By+C=0\\) the distance from a point \\((x_0,y_0)\\) is \n\n\\[\nd=\\frac{|Ax_0+By_0+C|}{\\sqrt{A^2+B^2}} .\n\\]\n\nHere \\(A=-8,\\;B=6,\\;C=8k+7\\) and the centre of the circle is \\((25,20)\\). Hence\n\n\\[\nd(k)=\\frac{\\bigl|-8\\cdot25+6\\cdot20+(8k+7)\\bigr|}{\\sqrt{(-8)^2+6^2}}\n =\\frac{|8k-73|}{10}.\n\\]\n\nTangency requires \\(d(k)=r=5\\):\n\n\\[\n\\frac{|8k-73|}{10}=5\\quad\\Longrightarrow\\quad|8k-73|=50 .\n\\]\n\nThus \n\n\\[\n8k-73=50\\quad\\text{or}\\quad8k-73=-50,\n\\]\n\n\\[\nk=\\frac{123}{8},\\qquad k=\\frac{23}{8}.\n\\]\n\nBoth values make the line tangent, giving exactly one intersection point with the circle.\n\n---\n\n### 3. Sum of the possible \\(k\\)\n\n\\[\n\\frac{123}{8}+\\frac{23}{8}= \\frac{146}{8}= \\frac{73}{4}.\n\\]\n\nWrite \\(\\dfrac{73}{4}\\) as \\(\\dfrac{m}{n}\\) with \\(\\gcd(m,n)=1\\); then \\(m=73,\\;n=4\\).\n\n\\[\nm+n = 73+4 = 77.\n\\]\n\n\\[\n\\boxed{77}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the letters be \n\n\\[\nAG)=\\frac{360}{945}\n=\\frac{8}{21}.\n\\]\n\nSince there are 5 possible partners larger than \\(G\\),\n\n\\[\n\\sum_{X>G}\\frac1{11}\\cdot\\frac{8}{21}=5\\cdot\\frac{1}{11}\\cdot\\frac{8}{21}\n=\\frac{40}{231}.\n\\]\n\n*If \\(G\\) is paired with a letter smaller than \\(G\\)* \nthe only possible partner is \\(F\\); for any smaller partner there are fewer\nthan five letters below it, making it impossible for its pair to have the\nlargest smaller element.\n\nWhen \\(G\\) is paired with \\(F\\), the smaller element of the pair is \\(F\\).\nThe other 10 letters are \n\n\\[\n\\{A,B,C,D,E\\}\\ (\\text{low})\\quad\\text{and}\\quad\\{H,I,J,K,L\\}\\ (\\text{high}).\n\\]\n\nAll five high letters must be paired with the five low letters; otherwise a\nhigh letter would become a smaller element. The number of such matchings is\n\\(5!=120\\). Hence\n\n\\[\nP(\\text{largest pair }|\\,G\\!-\\!F)=\\frac{120}{945}=\\frac{8}{63},\n\\]\nand the contribution is \\(\\displaystyle\\frac1{11}\\cdot\\frac{8}{63}\n= \\frac{8}{693}\\).\n\nNo other partner of \\(G\\) can work, so the total probability that the last\nword contains \\(G\\) is\n\n\\[\n\\frac{40}{231}+\\frac{8}{693}\n=\\frac{120}{693}+\\frac{8}{693}\n=\\frac{128}{693}.\n\\]\n\nThe fraction \\(\\frac{128}{693}\\) is already in lowest terms. \nThus \\(m=128,\\ n=693\\) and\n\n\\[\nm+n = 128+693 = 821.\n\\]\n\n\\[\n\\boxed{821}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution**\n\n--------------------------------------------------------------------\n\n### 1. The ratios on the two sides \n\n\\[\nAB=AD+DE+EB=4+16+8=28,\\qquad \nAC=AF+FG+GC=13+52+26=91 .\n\\]\n\n\\[\n\\frac{AD}{AB}=\\frac{4}{28}=\\frac17,\\qquad \n\\frac{AF}{AC}= \\frac{13}{91}= \\frac17 .\n\\]\n\nHence \n\n\\[\n\\frac{AD}{AB}= \\frac{AF}{AC}= \\frac17\\qquad\\Longrightarrow\\qquad \nDF\\parallel BC .\n\\]\n\nSimilarly \n\n\\[\n\\frac{AE}{AB}= \\frac{20}{28}= \\frac57,\\qquad \n\\frac{AG}{AC}= \\frac{65}{91}= \\frac57 ,\n\\]\n\nso \n\n\\[\n\\frac{AE}{AB}= \\frac{AG}{AC}= \\frac57\\qquad\\Longrightarrow\\qquad \nEG\\parallel BC .\n\\]\n\nLet \n\n\\[\np=\\frac17,\\qquad q=\\frac57 .\n\\]\n\n--------------------------------------------------------------------\n\n### 2. Area of \\(\\triangle ABC\\)\n\nBecause \\(DF\\parallel EG\\parallel BC\\), the quadrilateral \\(DEGF\\) is the\nregion of \\(\\triangle ABC\\) between the two lines through \\(D\\) and \\(E\\)\nparallel to \\(BC\\). \n\nTriangles \\(ADF\\) and \\(AEG\\) are similar to \\(\\triangle ABC\\) with similarity\nratios \\(p\\) and \\(q\\) respectively, so\n\n\\[\n[ADF]=p^{2}[ABC],\\qquad[AEG]=q^{2}[ABC].\n\\]\n\nHence \n\n\\[\n[DEGF]=[AEG]-[ADF]=(q^{2}-p^{2})[ABC]\n =\\Bigl(\\frac{5^{2}}{7^{2}}-\\frac{1^{2}}{7^{2}}\\Bigr)[ABC]\n =\\frac{24}{49}[ABC].\n\\]\n\nGiven \\([DEGF]=288\\),\n\n\\[\n[ABC]=288\\cdot\\frac{49}{24}=12\\cdot 49 =\\boxed{588}.\n\\]\n\n--------------------------------------------------------------------\n\n### 3. Coordinates\n\nPlace \n\n\\[\nA=(0,0),\\qquad B=(28,0),\\qquad C=(c,\\,42)\n\\]\n\n(the height is \\(42\\) because \\([ABC]=\\frac12\\cdot28\\cdot42=588\\)). \nUsing the ratios \\(p,q\\),\n\n\\[\n\\begin{aligned}\nD &=pB=(4,0), &E&=qB=(20,0),\\\\[2mm]\nF &=pC=\\Bigl(\\frac{c}{7},6\\Bigr), &\nG &=qC=\\Bigl(\\frac{5c}{7},30\\Bigr).\n\\end{aligned}\n\\]\n\nReflections give \n\n\\[\nM=2F-D=\\Bigl(\\frac{2c}{7}-4,\\;12\\Bigr),\\qquad \nN=2E-G=\\Bigl(40-\\frac{5c}{7},\\;-30\\Bigr).\n\\]\n\n--------------------------------------------------------------------\n\n### 4. Area of the heptagon \\(AFNBCEM\\)\n\nList the vertices in order:\n\n\\[\n\\begin{array}{c|c}\n\\text{Vertex}&(x,y)\\\\ \\hline\nA&(0,0)\\\\\nF&\\bigl(\\frac{c}{7},6\\bigr)\\\\\nN&\\bigl(40-\\frac{5c}{7},-30\\bigr)\\\\\nB&(28,0)\\\\\nC&(c,42)\\\\\nE&(20,0)\\\\\nM&\\bigl(\\frac{2c}{7}-4,12\\bigr)\n\\end{array}\n\\]\n\nApply the Shoelace formula. The sum \n\n\\[\n\\sum_{i=1}^{7}\\bigl(x_i y_{i+1}-y_i x_{i+1}\\bigr)\n\\] \n\n(with \\(x_8=x_1,\\;y_8=y_1\\)) simplifies dramatically:\n\n\\[\n\\begin{aligned}\n&0\\\\\n&\\;-\\;240\\\\\n&\\;+\\;840\\\\\n&\\;+\\;1176\\\\\n&\\;-\\;840\\\\\n&\\;+\\;240\\\\\n&0\n\\end{aligned}\n\\qquad =\\;1176 .\n\\]\n\nThus\n\n\\[\n[AFNBCEM]=\\frac12\\cdot1176=588 .\n\\]\n\nThe result does **not** depend on the unknown coordinate \\(c\\); the\ncancellation occurs because the vectors \\(DF\\) and \\(EG\\) are parallel to\n\\(BC\\).\n\n--------------------------------------------------------------------\n\n### 5. Answer\n\n\\[\n\\boxed{588}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nP:\\;y=x^{2}-4\n\\]\n\nand rotate \\(P\\) \\(60^{\\circ}\\) counter\u2011clockwise about the origin. \nIf \\((x,y)\\) lies on the rotated curve, then there is a point \\((u,v)\\) on\n\\(P\\) such that \n\n\\[\n\\begin{pmatrix}x\\\\y\\end{pmatrix}=R\\begin{pmatrix}u\\\\v\\end{pmatrix},\n\\qquad \nR=\\begin{pmatrix}\\tfrac12&-\\tfrac{\\sqrt3}{2}\\\\[2pt]\\tfrac{\\sqrt3}{2}&\\tfrac12\\end{pmatrix}.\n\\]\n\nEquivalently, a point \\((x,y)\\) is on both curves iff\n\n\\[\ny=x^{2}-4 \\qquad\\text{and}\\qquad \nR^{T}\\!\\begin{pmatrix}x\\\\y\\end{pmatrix}\n =\\begin{pmatrix}x'\\\\y'\\end{pmatrix}\n\\text{ satisfies }y'=(x')^{2}-4,\n\\]\n\nwhere \n\n\\[\nR^{T}= \\begin{pmatrix}\\tfrac12&\\tfrac{\\sqrt3}{2}\\\\[2pt]-\\tfrac{\\sqrt3}{2}&\\tfrac12\\end{pmatrix},\n\\quad \nx'=\\frac{x}{2}+\\frac{\\sqrt3\\,y}{2},\\qquad\ny'=-\\frac{\\sqrt3\\,x}{2}+\\frac{y}{2}.\n\\]\n\nUsing \\(y=x^{2}-4\\),\n\n\\[\nx'=\\frac{\\sqrt3 x^{2}+x-4\\sqrt3}{2},\\qquad \ny'=\\frac{x^{2}-\\sqrt3 x-4}{2}.\n\\]\n\nThe condition \\(y'=(x')^{2}-4\\) yields \n\n\\[\n\\frac{x^{2}-\\sqrt3 x-4}{2}\n =\\Bigl(\\frac{\\sqrt3 x^{2}+x-4\\sqrt3}{2}\\Bigr)^{2}-4 .\n\\]\n\nMultiplying by \\(2\\) and simplifying gives the quartic\n\n\\[\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40=0.\n\\]\n\nFactor this over \\(\\mathbb{Q}(\\sqrt3)\\):\n\n\\[\n\\begin{aligned}\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40\n&=(x^{2}+\\sqrt3\\,x-4)(3x^{2}-\\sqrt3\\,x-10).\n\\end{aligned}\n\\]\n\nHence the possible \\(x\\)-coordinates are the roots of the two quadratics.\n\n\\[\n\\begin{cases}\nx^{2}+\\sqrt3\\,x-4=0 &\\Longrightarrow\n\\displaystyle x=\\frac{-\\sqrt3\\pm\\sqrt{19}}2,\\\\[6pt]\n3x^{2}-\\sqrt3\\,x-10=0 &\\Longrightarrow\n\\displaystyle x=\\frac{\\sqrt3\\pm\\sqrt{123}}6 .\n\\end{cases}\n\\]\n\nWe need a point in the fourth quadrant, i.e. \\(x>0\\) and \\(y=x^{2}-4<0\\).\nOnly \n\n\\[\nx=\\frac{-\\sqrt3+\\sqrt{19}}2\\;(>0,\\;<2)\n\\]\n\nsatisfies this. Its \\(y\\)-coordinate is\n\n\\[\n\\begin{aligned}\ny&=x^{2}-4\n =\\frac{(-\\sqrt3+\\sqrt{19})^{2}}{4}-4\n =\\frac{22-2\\sqrt{57}}4-4\\\\\n &=\\frac{11-\\sqrt{57}}2-4\n =\\frac{3-\\sqrt{57}}2 .\n\\end{aligned}\n\\]\n\nThus \n\n\\[\ny=\\frac{a-\\sqrt{b}}{c}\\quad\\text{with}\\quad a=3,\\;b=57,\\;c=2,\n\\]\n\nand \\(a\\) and \\(c\\) are relatively prime. \n\nFinally\n\n\\[\na+b+c=3+57+2=62.\n\\]\n\n\\[\n\\boxed{62}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yzy,\\;z<-1,\\;y>z,\\;x<-1 \\qquad\\text{(impossible since }x+y+z=75)\\\\\n\\text{II}&:\\; x>y,\\;z<-1,\\;y-1 \\\\\n\\text{III}&:\\; x-1,\\;y>z,\\;x<-1 \\\\\n\\text{IV}&:\\; x-1,\\;y-1 .\n\\end{aligned}\n\\]\n\nThus three non\u2011empty convex regions arise from cases II,\u202fIII,\u202fIV.\nCases II and III are unbounded, while case\u202fIV gives a bounded region.\n\n---\n\n### Bounded region (case\u202fIV)\n\nCase\u202fIV is equivalent to \n\n\\[\n-12)\n\\]\n\nThen \n\n\\[\nn+2=m,\\qquad n+3=m+1,\\qquad n^{2}+9=(m-2)^{2}+9=m^{2}-4m+13 .\n\\]\n\nThe condition \n\n\\[\nn+2\\mid 3(n+3)(n^{2}+9)\n\\]\n\nbecomes \n\n\\[\nm \\mid 3(m+1)(m^{2}-4m+13). \\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1. Using the gcd with 3\n\nBecause \n\n\\[\n\\gcd(m,m+1)=1,\n\\]\n\nany prime divisor of \\(m\\) cannot come from the factor \\(m+1\\). \nThe only possible common factor of \\(m\\) with the whole right\u2011hand side of (1) is the factor \\(3\\).\n\nLet \n\n\\[\nd=\\gcd(m,3),\\qquad m=d\\cdot m',\\qquad \\gcd(m',3)=1 .\n\\]\n\nThen (1) is equivalent to \n\n\\[\nd m' \\mid 3(m+1)(m^{2}-4m+13)\n = d\\Bigl(\\frac{3}{d}\\Bigr)(m+1)(m^{2}-4m+13).\n\\]\n\nCancelling \\(d\\) gives \n\n\\[\nm' \\mid \\Bigl(\\frac{3}{d}\\Bigr)(m+1)(m^{2}-4m+13).\\tag{2}\n\\]\n\nSince \\(\\gcd(m',m+1)=1\\) and also \\(\\gcd(m',3)=1\\), the factor \\((m+1)\\) and the possible remaining factor \\(\\frac{3}{d}\\) cannot help the divisibility. Hence (2) reduces to \n\n\\[\nm' \\mid (m^{2}-4m+13). \\tag{3}\n\\]\n\n--------------------------------------------------------------------\n### 2. Reduce modulo \\(m\\)\n\n\\[\nm^{2}-4m+13 \\equiv 13\\pmod{m},\n\\]\n\nso (3) is equivalent to \n\n\\[\nm' \\mid 13.\n\\]\n\nRecall \\(m' =\\dfrac{m}{\\gcd(m,3)}\\). Therefore\n\n\\[\n\\frac{m}{\\gcd(m,3)}\\mid 13.\n\\]\n\n--------------------------------------------------------------------\n### 3. Solve the two possibilities\n\n**(i) \\(\\gcd(m,3)=1\\) (i.e. \\(3\\nmid m\\)).** \nThen \\(\\displaystyle m\\mid13\\). \nWith \\(m>2\\), the only possibility is \\(m=13\\).\n\n**(ii) \\(\\gcd(m,3)=3\\) (i.e. \\(m=3k\\)).** \nThen \\(\\displaystyle k\\mid13\\). \nThus \\(k=1\\) or \\(k=13\\), giving \\(m=3\\) or \\(m=39\\).\n\n--------------------------------------------------------------------\n### 4. Return to \\(n\\)\n\n\\[\nn=m-2\\; \\Longrightarrow\\; \n\\begin{cases}\nm=3 &\\Rightarrow n=1,\\\\[2pt]\nm=13 &\\Rightarrow n=11,\\\\[2pt]\nm=39 &\\Rightarrow n=37.\n\\end{cases}\n\\]\n\nAll three values satisfy the original divisibility (direct verification shows \\(3\\mid120\\), \\(13\\mid5460\\), \\(39\\mid165360\\)).\n\n--------------------------------------------------------------------\n### 5. Sum of all such \\(n\\)\n\n\\[\n1+11+37 = 49.\n\\]\n\n\\[\n\\boxed{49}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe product $ \\prod_{k=4}^{63} \\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})} = \\frac{\\log_4(5^{15})}{\\log_5(5^{12})} \\cdot \\frac{\\log_5(5^{24})}{\\log_6(5^{21})} \\cdot \\frac{\\log_6(5^{35})}{\\log_7(5^{32})} \\cdots \\frac{\\log_{63}(5^{3968})}{\\log_{64}(5^{3965})} $ is equal to $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "First rewrite each factor using the change\u2013of\u2013base formula \n\n\\[\n\\log_a b=\\frac{\\ln b}{\\ln a}.\n\\]\n\n\\[\n\\frac{\\log_k\\bigl(5^{k^{2}-1}\\bigr)}{\\log_{k+1}\\bigl(5^{k^{2}-4}\\bigr)}\n =\\frac{\\dfrac{\\ln5^{\\,k^{2}-1}}{\\ln k}}\n {\\dfrac{\\ln5^{\\,k^{2}-4}}{\\ln (k+1)}}\n =\\frac{(k^{2}-1)\\ln5}{\\ln k}\\cdot\\frac{\\ln(k+1)}{(k^{2}-4)\\ln5}\n =\\frac{k^{2}-1}{k^{2}-4}\\cdot\\frac{\\ln(k+1)}{\\ln k}.\n\\]\n\nHence\n\n\\[\nP=\\prod_{k=4}^{63}\\frac{k^{2}-1}{k^{2}-4}\n \\cdot\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}.\n\\]\n\n---\n\n### 1. The logarithmic product\n\n\\[\n\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\n =\\frac{\\ln64}{\\ln4}\n =\\log_{4}64=3.\n\\]\n\n(The terms cancel telescopically.)\n\n---\n\n### 2. The rational product \n\nFactor each term:\n\n\\[\n\\frac{k^{2}-1}{k^{2}-4}\n =\\frac{(k-1)(k+1)}{(k-2)(k+2)}\n =\\frac{k-1}{k-2}\\cdot\\frac{k+1}{k+2}.\n\\]\n\nThus\n\n\\[\n\\prod_{k=4}^{63}\\frac{k^{2}-1}{k^{2}-4}\n =\\Bigl(\\prod_{k=4}^{63}\\frac{k-1}{k-2}\\Bigr)\n \\Bigl(\\prod_{k=4}^{63}\\frac{k+1}{k+2}\\Bigr).\n\\]\n\nThe first product telescopes:\n\n\\[\n\\prod_{k=4}^{63}\\frac{k-1}{k-2}\n =\\frac{3}{2}\\cdot\\frac{4}{3}\\cdot\\cdots\\cdot\\frac{62}{61}\n =\\frac{62}{2}=31.\n\\]\n\nThe second product also telescopes:\n\n\\[\n\\prod_{k=4}^{63}\\frac{k+1}{k+2}\n =\\frac{5}{6}\\cdot\\frac{6}{7}\\cdot\\cdots\\cdot\\frac{64}{65}\n =\\frac{5}{65}=\\frac{1}{13}.\n\\]\n\nTherefore\n\n\\[\n\\prod_{k=4}^{63}\\frac{k^{2}-1}{k^{2}-4}\n =31\\cdot\\frac{1}{13}=\\frac{31}{13}.\n\\]\n\n---\n\n### 3. Combine the two parts\n\n\\[\nP=\\frac{31}{13}\\times3=\\frac{93}{13}.\n\\]\n\nThe fraction is already in lowest terms (\\(\\gcd(93,13)=1\\)). \nThus \\(m=93\\), \\(n=13\\) and\n\n\\[\nm+n=93+13=106.\n\\]\n\n\\[\n\\boxed{106}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the four unit squares be \n\n\\[\n\\begin{array}{c|c}\n\\text{TL}&\\text{TR}\\\\\\hline\n\\text{BL}&\\text{BR}\n\\end{array}\n\\]\n\nand denote the twelve unit edges as follows \n\n* Horizontal edges: \n\n\\[\n\\begin{aligned}\n&h_{1}= \\text{top of TL},\\qquad h_{2}= \\text{top of TR},\\\\\n&h_{3}= \\text{middle left},\\qquad h_{4}= \\text{middle right},\\\\\n&h_{5}= \\text{bottom of BL},\\qquad h_{6}= \\text{bottom of BR}.\n\\end{aligned}\n\\]\n\n* Vertical edges: \n\n\\[\n\\begin{aligned}\n&v_{1}= \\text{left of TL},\\qquad v_{2}= \\text{left of BL},\\\\\n&v_{3}= \\text{middle top},\\qquad v_{4}= \\text{middle bottom},\\\\\n&v_{5}= \\text{right of TR},\\qquad v_{6}= \\text{right of BR}.\n\\end{aligned}\n\\]\n\nFor each square the sum of the red edges must be \\(2\\).\nWriting a red edge as \\(1\\) and a blue edge as \\(0\\),\n\n\\[\n\\begin{aligned}\n\\text{TL}&:\\;h_{1}+h_{3}+v_{1}+v_{3}=2,\\\\\n\\text{TR}&:\\;h_{2}+h_{4}+v_{3}+v_{5}=2,\\\\\n\\text{BL}&:\\;h_{3}+h_{5}+v_{2}+v_{4}=2,\\\\\n\\text{BR}&:\\;h_{4}+h_{6}+v_{4}+v_{6}=2.\n\\end{aligned}\n\\]\n\nThe four **interior** edges are \\(h_{3},h_{4},v_{3},v_{4}\\); the other eight edges lie on the outer\nboundary. \n\nFix the colours of the interior edges:\n\\[\na=h_{3},\\qquad b=h_{4},\\qquad c=v_{3},\\qquad d=v_{4}\\in\\{0,1\\}.\n\\]\n\nThen for each square we know the required sum of its two boundary edges:\n\n\\[\n\\begin{aligned}\nh_{1}+v_{1}&=2-(a+c),\\\\\nh_{2}+v_{5}&=2-(b+c),\\\\\nh_{5}+v_{2}&=2-(a+d),\\\\\nh_{6}+v_{6}&=2-(b+d).\n\\end{aligned}\n\\]\n\nIf the right\u2011hand side equals \\(2\\) or \\(0\\) the two boundary edges are forced to be\nboth red or both blue \u2013 exactly one choice. \nIf it equals \\(1\\) the two edges must be of opposite colours \u2013 two choices.\n\nHence, for a fixed interior vector \\((a,b,c,d)\\) the number of admissible colourings of the\nboundary edges is \n\n\\[\n2^{\\,k(a,b,c,d)},\n\\]\n\nwhere \\(k\\) is the number of squares whose interior\u2011edge sum equals \\(1\\); i.e.\n\n\\[\nk=(a\\oplus c)+(b\\oplus c)+(a\\oplus d)+(b\\oplus d),\n\\]\n(\\(\\oplus\\) denotes XOR).\n\nTherefore the total number of colourings is \n\n\\[\n\\sum_{a,b,c,d\\in\\{0,1\\}}2^{k}\n= \\sum_{c,d} \\Bigl(\\sum_{a}2^{\\,a\\oplus c + a\\oplus d}\\Bigr)^{2}.\n\\]\n\nFor the four possibilities of \\((c,d)\\) we have\n\n\\[\n\\begin{array}{c|c}\n(c,d) & \\displaystyle\\sum_{a}2^{a\\oplus c + a\\oplus d} \\\\ \\hline\n(0,0) & 1+4 = 5\\\\\n(1,1) & 4+1 = 5\\\\\n(0,1),(1,0) & 2+2 = 4\n\\end{array}\n\\]\n\nThus\n\n\\[\n\\text{total}=2\\cdot5^{2}+2\\cdot4^{2}=2\\cdot25+2\\cdot16=50+32=82.\n\\]\n\nHence there are \n\n\\[\n\\boxed{82}\n\\]\n\ndifferent colourings of the twelve unit edges so that each of the four unit squares has\nexactly two red and two blue sides.", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The divisors of \n\n\\[\n2025 = 3^{4}\\cdot5^{2}\n\\]\n\nare obtained by choosing the exponent of \\(3\\) from \\(\\{0,1,2,3,4\\}\\) and the exponent of \\(5\\) from \\(\\{0,1,2\\}\\). \nHence \n\n\\[\n|A|=(4+1)(2+1)=15 .\n\\]\n\n---\n\n### Condition for the LCM to be \\(2025\\)\n\nFor a non\u2011empty subset \\(B\\subseteq A\\),\n\n\\[\n\\operatorname{lcm}(B)=2025 \\iff\n\\begin{cases}\n\\text{some element of }B\\text{ has }3\\text{-exponent }4,\\\\[2pt]\n\\text{some element of }B\\text{ has }5\\text{-exponent }2.\n\\end{cases}\n\\]\n\nDefine \n\n\\[\nS_3=\\{81,\\,405,\\,2025\\} \\quad (\\text{divisors with }3^4) ,\n\\]\n\\[\nS_5=\\{25,\\,75,\\,225,\\,675,\\,2025\\} \\quad (\\text{divisors with }5^2).\n\\]\n\nThus \\(B\\) must intersect both \\(S_3\\) and \\(S_5\\).\n\n---\n\n### Counting favorable subsets\n\nLet \\(U=S_3\\cup S_5\\). \n\\(|S_3|=3,\\;|S_5|=5,\\;|S_3\\cap S_5|=1\\) (the element \\(2025\\)), so\n\n\\[\n|U|=3+5-1=7.\n\\]\n\nThe remaining divisors of \\(2025\\) (those not in \\(U\\)) are \\(15-7=8\\) in number and can be chosen freely.\n\nNumber of subsets of \\(U\\) that contain at least one element of \\(S_3\\) **and** at least one element of \\(S_5\\):\n\n\\[\n\\begin{aligned}\n&2^{7}\\;(\\text{all subsets of }U)\\\\\n&\\quad-2^{4}\\;(\\text{subsets with no }S_3)\\\\\n&\\quad-2^{2}\\;(\\text{subsets with no }S_5)\\\\\n&\\quad+2^{0}\\;(\\text{subsets with neither }S_3\\text{ nor }S_5)\\\\[2pt]\n&=128-16-4+1=109 .\n\\end{aligned}\n\\]\n\nFor each of these \\(109\\) choices, any subset of the other 8 divisors may be added, giving a factor \\(2^{8}=256\\).\n\nHence the number of favorable subsets is \n\n\\[\nN=109\\cdot256=27904.\n\\]\n\n---\n\n### Probability\n\nAll subsets of \\(A\\) (including the empty set) number \n\n\\[\n2^{15}=32768.\n\\]\n\nThus\n\n\\[\nP=\\frac{N}{2^{15}}=\\frac{27904}{32768}.\n\\]\n\nDividing numerator and denominator by their greatest common divisor \\(256\\),\n\n\\[\nP=\\frac{27904/256}{32768/256}=\\frac{109}{128}.\n\\]\n\nSo \\(\\displaystyle m=109,\\;n=128\\) and\n\n\\[\nm+n=109+128=237.\n\\]\n\n\\[\n\\boxed{237}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\n\\boxed{45}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the centre of the large circle \\(\\omega _2\\) be the origin \\(O(0,0)\\).\nSince \\(BC\\) is a diameter of \\(\\omega _2\\), take \n\n\\[\nB=(15,0),\\qquad C=(-15,0),\\qquad O=(0,0).\n\\]\n\nBecause \\(\\omega _1\\) (radius \\(6\\)) is internally tangent to \\(\\omega _2\\) at \\(B\\),\nits centre \\(A\\) lies on \\(OB\\) with \n\n\\[\nOA=15-6=9\\quad\\Longrightarrow\\quad A=(9,0).\n\\]\n\nThe condition \\(AD\\perp BC\\) forces \\(AD\\) to be vertical through \\(x=9\\).\nIntersecting this line with \\(\\omega _2\\) (\\(x^{2}+y^{2}=225\\)) gives \n\n\\[\nD=(9,12)\\text{ or }(9,-12).\n\\]\n\nSince later we need \\(D\\) to be nearer the side \\(\\overline{FG}\\) than to \\(\\overline{EH}\\),\n\\(D\\) must lie **below** the rectangle; hence \n\n\\[\nD=(9,-12).\n\\]\n\n---\n\n### The rectangle\n\nA rectangle inscribed in a circle has its centre at the circle\u2019s centre.\nThus the centre of rectangle \\(EFGH\\) is \\(A(9,0)\\).\n\nLet \n\n* \\(w\\) = horizontal distance from \\(A\\) to each vertical side,\n* \\(h\\) = vertical distance from \\(A\\) to each horizontal side.\n\nThen the vertices are \n\n\\[\n\\begin{aligned}\nE&(9+w,\\;h),\\qquad F&(9+w,\\;-h),\\\\\nG&(9-w,\\;-h),\\qquad H&(9-w,\\;h).\n\\end{aligned}\n\\]\n\nBecause the rectangle is inscribed in \\(\\omega _1\\),\n\n\\[\nw^{2}+h^{2}=6^{2}=36. \\tag{1}\n\\]\n\nThe side \\(\\overline{EF}\\) is vertical, so \\(\\overline{EF}\\perp BC\\) (which is horizontal).\n\n- \\(C(-15,0)\\) is left of the rectangle, so its distances to the two vertical sides are \n\n\\[\n\\operatorname{dist}(C,\\overline{GH}) =| -15-(9-w)| =24-w,\n\\]\n\\[\n\\operatorname{dist}(C,\\overline{EF}) =| -15-(9+w)| =24+w,\n\\]\n\nhence \\(C\\) is indeed closer to \\(\\overline{GH}\\) than to \\(\\overline{EF}\\).\n\n- \\(D(9,-12)\\) is below the rectangle; its distances to the horizontal sides are \n\n\\[\n\\operatorname{dist}(D,\\overline{FG}) =|-12-(-h)| =12-h,\n\\]\n\\[\n\\operatorname{dist}(D,\\overline{EH}) =|-12-h| =12+h,\n\\]\n\nso \\(D\\) is closer to \\(\\overline{FG}\\) than to \\(\\overline{EH}\\) as required.\n\n---\n\n### Equality of the two triangle areas\n\n\\[\n\\triangle DGF:\\quad \n\\text{base}=GF=2w,\\;\n\\text{height}=12-h\\;\\Longrightarrow\\;\n[ DGF]=\\tfrac12(2w)(12-h)=w(12-h).\n\\]\n\n\\[\n\\triangle CHG:\\quad \n\\text{base}=HG=2h,\\;\n\\text{height}=24-w\\;\\Longrightarrow\\;\n[ CHG]=\\tfrac12(2h)(24-w)=h(24-w).\n\\]\n\nGiven \\([DGF]=[CHG]\\),\n\n\\[\nw(12-h)=h(24-w)\\;\\Longrightarrow\\;12w=24h\\;\\Longrightarrow\\; w=2h. \\tag{2}\n\\]\n\n---\n\n### Solving for \\(w\\) and \\(h\\)\n\nSubstituting \\(w=2h\\) into (1),\n\n\\[\n(2h)^{2}+h^{2}=36\\;\\Longrightarrow\\;5h^{2}=36\\;\\Longrightarrow\\;h^{2}=\\frac{36}{5}.\n\\]\n\nHence \n\n\\[\nh=\\frac{6}{\\sqrt5},\\qquad \nw=2h=\\frac{12}{\\sqrt5}.\n\\]\n\n---\n\n### Area of the rectangle\n\n\\[\n\\text{Area}= (2w)(2h)=4wh\n =4\\!\\left(\\frac{12}{\\sqrt5}\\right)\\!\\left(\\frac{6}{\\sqrt5}\\right)\n =\\frac{288}{5}.\n\\]\n\nThus \\(\\displaystyle \\frac{m}{n}= \\frac{288}{5}\\) with \\(m,n\\) relatively prime.\nHence \n\n\\[\nm+n=288+5=293.\n\\]\n\n\\[\n\\boxed{293}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\nf(x)=\\sin\\bigl(7\\pi\\sin(5x)\\bigr),\\qquad 00\\) and \\(x<0)\\).\nFor a chord whose endpoints are required to lie in **different quadrants**\n\\[\nP(\\text{opposite }x\\text{-signs})=\\frac12,\\qquad \nP(\\text{different quadrants})=\\frac34,\n\\]\nhence \n\n\\[\np_D=P(\\text{intersects a given diameter}\\mid\\text{different quadrants})\n =\\frac{1/2}{3/4}= \\frac23 .\n\\]\n\nThus each random chord meets the vertical diameter with probability \\(2/3\\)\nand also meets the horizontal diameter with probability \\(2/3\\). \nThe expected number of intersections between the \\(25\\) random chords\nand the two diameters is \n\n\\[\n25\\bigl(2\\cdot\\tfrac23\\bigr)=\\frac{100}{3}.\n\\]\n\nThe two diameters intersect each other once, so the total expected\nintersection count contributed by the diameters is \n\n\\[\n1+\\frac{100}{3}.\n\\]\n\n--------------------------------------------------------------------\n### 2. Intersections between two random chords \n\nWrite each chord only by the **pair of quadrants** that its two endpoints\noccupy. For a chord whose endpoints are in different quadrants the\nunordered pair of quadrants is uniformly distributed over the six possible\npairs:\n\n* four **adjacent** pairs \\(\\{1,2\\},\\{2,3\\},\\{3,4\\},\\{4,1\\}\\);\n* two **opposite** pairs \\(\\{1,3\\},\\{2,4\\}\\).\n\nThus each random chord is adjacent with probability \\(\\tfrac23\\) and opposite\nwith probability \\(\\tfrac13\\).\n\nConsider two chords and classify them according to the relationship of the\nquadrants they use.\n\n| case | description | intersection probability |\n|------|-------------|---------------------------|\n| AA\u2013same | both are the same adjacent pair (e.g. \\(\\{1,2\\}\\) and \\(\\{1,2\\}\\)) | \\(\\tfrac12\\) |\n| AA\u2013share | adjacent pairs sharing one quadrant (e.g. \\(\\{1,2\\},\\{2,3\\}\\)) | \\(\\tfrac12\\) |\n| AA\u2013disjoint | adjacent pairs using opposite quadrants (e.g. \\(\\{1,2\\},\\{3,4\\}\\)) | \\(0\\) |\n| OO\u2013same | both are the same opposite pair (e.g. \\(\\{1,3\\},\\{1,3\\}\\)) | \\(\\tfrac12\\) |\n| OO\u2013disjoint | opposite pairs \\(\\{1,3\\},\\{2,4\\}\\) | \\(1\\) |\n| AO (any) | one adjacent, one opposite (they always share one quadrant) | \\(\\tfrac12\\) |\n\nAll of the probabilities above are obtained by looking at the possible\norderings of the four points inside their quadrants; each ordering is\nequally likely and the intersecting orderings are exactly half of them\n(when both chords involve a common quadrant) or forced (when the quadrants\nare disjoint).\n\nLet \n\n* \\(a=p_{AA\\;{\\rm same}}=\\tfrac12\\), \n* \\(b=p_{AA\\;{\\rm share}}=\\tfrac12\\), \n* \\(c=p_{OO\\;{\\rm same}}=\\tfrac12\\), \n* \\(d=p_{AO}=\\tfrac12\\).\n\nFrom the probabilities of picking each type we obtain\n\n\\[\n\\begin{aligned}\np_{RR}\n&=P(\\text{intersection of two random chords})\\\\\n&=\\frac{2a+4b+c+8d+1}{18}\n =\\frac{2\\cdot\\frac12+4\\cdot\\frac12+\\frac12+8\\cdot\\frac12+1}{18}\n =\\frac{17}{36}.\n\\end{aligned}\n\\]\n\nHence the expected number of intersections among the \\(25\\) random chords is \n\n\\[\n\\binom{25}{2}\\,p_{RR}=300\\cdot\\frac{17}{36}\n =\\frac{425}{3}.\n\\]\n\n--------------------------------------------------------------------\n### 3. Total expected intersections\n\n\\[\n\\mathbb E[I]=\n\\underbrace{1}_{\\text{diameters}}+\n\\underbrace{\\frac{100}{3}}_{\\text{diameters\u2013random chords}}+\n\\underbrace{\\frac{425}{3}}_{\\text{random\u2013random}}=\n\\frac{525}{3}+1=176 .\n\\]\n\n--------------------------------------------------------------------\n### 4. Expected number of regions\n\n\\[\n\\mathbb E[R]=28+\\mathbb E[I]=28+176=204.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{204}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFrom an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.\n\nIn general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Step 1 \u2013 Formulating the optimal problem**\n\nLet \n\n\\[\na=\\text{ number of 1\u2011cent coins},\\qquad \nb=\\text{ number of 10\u2011cent coins},\\qquad \nc=\\text{ number of 25\u2011cent coins}.\n\\]\n\nWe must have \n\n\\[\na+10b+25c=N,\\qquad a,b,c\\ge 0 .\n\\]\n\nThe total number of coins is \n\n\\[\nT=a+b+c\n =(N-10b-25c)+b+c\n =N-9b-24c.\n\\]\n\nThus minimizing the number of coins is the same as **maximising** \n\n\\[\n9b+24c\\qquad\\text{subject to }10b+25c\\le N .\n\\]\n\n--------------------------------------------------------------------\n\n**Step 2 \u2013 The greedy solution**\n\nThe greedy algorithm first uses as many 25\u2011cent coins as possible,\nthen as many 10\u2011cent coins, and finally 1\u2011cent coins. \nWrite \n\n\\[\nN=25q+r,\\qquad 0\\le r<25 .\n\\]\n\nThe greedy representation is \n\n\\[\nc_{\\text{g}}=q,\\qquad b_{\\text{g}}=\\Big\\lfloor\\frac{r}{10}\\Big\\rfloor,\n\\qquad a_{\\text{g}}=r\\bmod 10,\n\\]\n\nand the greedy number of coins is \n\n\\[\nG(N)=q+\\Big\\lfloor\\frac{r}{10}\\Big\\rfloor+(r\\bmod10).\n\\]\n\n--------------------------------------------------------------------\n\n**Step 3 \u2013 When can we do better?**\n\nSuppose we try to use **one fewer** 25\u2011cent coin. \nThen we have \\(c=q-1\\) and the remainder becomes \\(r+25\\).\nThe new numbers of 10\u2011 and 1\u2011cent coins are \n\n\\[\nb'=\\Big\\lfloor\\frac{r+25}{10}\\Big\\rfloor,\\qquad \na'= (r+25)\\bmod 10 .\n\\]\n\nThe total number of coins after dropping one 25\u2011cent coin is \n\n\\[\nA(N)=(q-1)+b'+a'.\n\\]\n\nThe difference is\n\n\\[\nA(N)-G(N)=-1+\\Big\\lfloor\\frac{r+25}{10}\\Big\\rfloor-\\Big\\lfloor\\frac{r}{10}\\Big\\rfloor\n +(r+25\\bmod10)-(r\\bmod10).\n\\]\n\nWrite \\(r=10k+s\\) with \\(0\\le s\\le 9\\). Then \n\n\\[\n\\Big\\lfloor\\frac{r+25}{10}\\Big\\rfloor-\\Big\\lfloor\\frac{r}{10}\\Big\\rfloor=\n\\begin{cases}\n2,& s\\le 4,\\\\[2pt]\n3,& s\\ge 5,\n\\end{cases}\n\\]\n\nand \\((r+25\\bmod10)-(r\\bmod10)=5\\) in either case. \nHence \n\n\\[\nA(N)-G(N)= -1 + \\Delta +5 = 4+\\Delta,\n\\]\n\nwhere \\(\\Delta=2\\) or \\(3\\). Consequently \n\n\\[\nA(N)-G(N)=\\begin{cases}\n 6,& s\\le 4,\\\\\n 3,& s\\ge 5 .\n\\end{cases}\n\\]\n\nThus **dropping one 25\u2011cent coin reduces the total number of coins\niff the ones\u2011digit \\(s\\) of the remainder \\(r\\) is at least\u202f5**.\n\nThat is, the greedy algorithm fails exactly when \n\n\\[\nr\\equiv 5,6,7,8,9,15,16,17,18,19\\pmod{25},\n\\]\n\ni.e. when the remainder after using the maximal number of 25\u2011cent coins has units digit \\(5,6,7,8,\\) or \\(9\\).\n\n--------------------------------------------------------------------\n\n**Step 4 \u2013 Dropping more than one 25\u2011cent coin never helps**\n\nIf we drop a second 25\u2011cent coin, the units digit of the new remainder\nflips between \\(s\\) and \\(s+5\\pmod{10}\\). Consequently the increase in the\nnumber of 10\u2011cent coins alternates between **2** and **3**.\nA short computation (or the formula \\(\\Delta(k)=24k-9\\sum T_i\\) where each\n\\(T_i\\in\\{2,3\\}\\)) shows that after two or more drops the total number of\ncoins is never smaller than the greedy count; the only possible improvement\nis the single\u2011drop case described above.\n\n--------------------------------------------------------------------\n\n**Step 5 \u2013 Counting the successful values**\n\nThe greedy algorithm succeeds for all \\(N\\) that are **not** of the above\nfailing form, and also for \\(N<25\\) (there are no 25\u2011cent coins to drop).\n\n*There are 10 \u201cbad\u2019\u2019 residues modulo\u202f25*: \n\n\\[\n5,6,7,8,9,15,16,17,18,19.\n\\]\n\nFor each integer \\(q\\ge 1\\) the numbers \\(N=25q+r\\) with such an \\(r\\) are\nfailures. \n\n\\[\n\\text{Number of blocks with }q\\ge 1\\text{: } \\left\\lfloor\\frac{1000}{25}\\right\\rfloor=40.\n\\]\n\nThe last block (\\(q=40\\)) contains only \\(N=1000\\) (remainder\u202f0), which is\nnot a failure. Hence the failing blocks are those with \\(q=1,2,\\dots,39\\).\n\n\\[\n\\text{Failures}=39\\;\\times\\;10 = 390.\n\\]\n\nAll the remaining numbers succeed:\n\n\\[\n\\text{Successes}=1000-390=610.\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{610}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For every \\(2\\le i\\le 10\\) the triangle \\(A_iA_1A_{i+1}\\) has \n\n\\[\n[\\,A_iA_1A_{i+1}\\,]=\\frac12 \\,A_1A_i\\cdot A_1A_{i+1}\\sin\\angle A_iA_1A_{i+1}=1\n\\]\n\nand \n\n\\[\n\\cos\\angle A_iA_1A_{i+1}= \\frac{12}{13}.\n\\]\n\n---\n\n### 1. The angle \\(\\angle A_iA_1A_{i+1}\\)\n\n\\[\n\\sin\\theta=\\sqrt{1-\\cos^{2}\\theta}=\\sqrt{1-\\Big(\\frac{12}{13}\\Big)^2}=\n\\frac{5}{13}.\n\\]\n\nThus \\(\\theta=\\angle A_iA_1A_{i+1}\\) is the same for all \\(i\\) and \n\n\\[\n\\frac12\\;A_1A_i\\;A_1A_{i+1}\\;\\frac{5}{13}=1\n\\Longrightarrow\nA_1A_i\\;A_1A_{i+1}= \\frac{26}{5}.\\tag{1}\n\\]\n\nDenote \\(a_i=A_1A_i\\). Then (1) gives \n\n\\[\na_i a_{i+1}=C,\\qquad C:=\\frac{26}{5}, \\qquad 2\\le i\\le10.\n\\]\n\n---\n\n### 2. Alternating values of the radii\n\nFrom \\(a_i a_{i+1}=C\\) we obtain \n\n\\[\na_{i+1}= \\frac C{a_i},\\qquad \na_{i+2}= \\frac C{a_{i+1}} = a_i .\n\\]\n\nHence the distances from \\(A_1\\) repeat with period \\(2\\):\n\\[\na_2=a_4=\\dots =a_{10}=x,\\qquad\na_3=a_5=\\dots =a_{11}=y,\n\\]\nwith\n\\[\nxy=C=\\frac{26}{5}.\\tag{2}\n\\]\n\nThus \\(A_1A_2=x,\\;A_1A_{11}=y\\) and we must find \\(x+y\\).\n\n---\n\n### 3. Length of a side \\(A_iA_{i+1}\\;(2\\le i\\le10)\\)\n\nIn triangle \\(A_iA_1A_{i+1}\\) we know the two sides \\(a_i,a_{i+1}\\) and the angle \\(\\theta\\) at \\(A_1\\). By the law of cosines\n\n\\[\nd^2:=A_iA_{i+1}^{\\,2}=a_i^{2}+a_{i+1}^{2}\n-2a_i a_{i+1}\\cos\\theta.\n\\]\n\nSince \\(\\cos\\theta=\\frac{12}{13}\\) and \\(a_i a_{i+1}=C\\),\n\n\\[\nd^{2}=a_i^{2}+a_{i+1}^{2}\n-\\frac{24}{13}C.\n\\]\n\nUsing (2) we have \\(C=\\frac{26}{5}\\), so \\(\\frac{24}{13}C=\\frac{48}{5}\\).\nNow \\(a_i^{2}+a_{i+1}^{2}=(a_i+a_{i+1})^{2}-2a_i a_{i+1}=\nS^{2}-2C\\) where \\(S:=x+y\\). Hence\n\n\\[\nd^{2}=S^{2}-2C-\\frac{48}{5}\n=S^{2}-\\frac{52}{5}-\\frac{48}{5}\n=S^{2}-20. \\tag{3}\n\\]\n\nAll nine sides \\(A_iA_{i+1}\\;(i=2,\\dots ,10)\\) have the same length \\(d\\).\n\n---\n\n### 4. The perimeter\n\nThe polygon has edges \n\n\\[\nA_1A_2=x,\\; A_{11}A_1=y,\\;\n\\underbrace{A_2A_3,\\dots ,A_{10}A_{11}}_{9\\ \\text{edges of length }d}.\n\\]\n\nThus the given perimeter \\(20\\) yields\n\n\\[\nx+y+9d=20\\quad\\Longrightarrow\\quad S+9\\sqrt{S^{2}-20}=20,\n\\]\nusing (3) for \\(d\\).\n\n---\n\n### 5. Solving for \\(S\\)\n\n\\[\n9\\sqrt{S^{2}-20}=20-S\\quad (S\\le20).\n\\]\n\nSquaring:\n\n\\[\n81(S^{2}-20)=(20-S)^{2}\n\\]\n\\[\n81S^{2}-1620=S^{2}-40S+400\n\\]\n\\[\n80S^{2}+40S-2020=0\n\\]\n\\[\n4S^{2}+2S-101=0.\n\\]\n\nThe quadratic gives\n\n\\[\nS=\\frac{-2\\pm\\sqrt{4+1616}}{8}\n =\\frac{-2\\pm\\sqrt{1620}}{8}\n =\\frac{-2\\pm18\\sqrt5}{8}.\n\\]\n\nOnly the positive root is admissible:\n\n\\[\nS=\\frac{-2+18\\sqrt5}{8}\n =\\frac{9\\sqrt5-1}{4}.\n\\]\n\nThus \n\n\\[\nA_1A_2+A_1A_{11}=x+y=S=\\frac{9\\sqrt5-1}{4}.\n\\]\n\n---\n\n### 6. Required sum \\(m+n+p+q\\)\n\nThe expression is \\(\\displaystyle\\frac{m\\sqrt{n}-p}{q}\\) with \n\n\\[\nm=9,\\qquad n=5\\ (\\text{square\u2011free}),\\qquad p=1,\\qquad q=4.\n\\]\n\nHence \n\n\\[\nm+n+p+q=9+5+1+4=19.\n\\]\n\n\\[\n\\boxed{19}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\n\\boxed{564}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\n17_b = 1\\cdot b+7 = b+7 ,\\qquad \n97_b = 9\\cdot b+7 .\n\\]\n\nWe need the integer bases \\(b>9\\) for which \\(b+7\\) divides \\(9b+7\\).\n\n---\n\n### 1. Express the divisibility condition\n\n\\[\n9b+7 \\equiv 0\\pmod{b+7}.\n\\]\n\nWrite \\(b = (b+7)-7\\). Set \\(t=b+7\\) (so \\(t>16\\) because \\(b>9\\)). Then \n\n\\[\n9b+7 = 9(t-7)+7 = 9t-63+7 = 9t-56.\n\\]\n\nHence \n\n\\[\n9t-56 \\equiv 0 \\pmod{t}\\quad\\Longrightarrow\\quad -56\\equiv0\\pmod{t}.\n\\]\n\nThus \n\n\\[\nt \\mid 56\\qquad\\text{or}\\qquad b+7 \\mid 56.\n\\]\n\n---\n\n### 2. Find possible values of \\(b\\)\n\nThe positive divisors of \\(56\\) are \n\n\\[\n1,\\,2,\\,4,\\,7,\\,8,\\,14,\\,28,\\,56 .\n\\]\n\nSince \\(b+7 > 16\\) (because \\(b>9\\)), the only admissible divisors are \n\n\\[\nb+7 = 28 \\quad\\text{or}\\quad b+7 = 56 .\n\\]\n\nTherefore \n\n\\[\n\\begin{aligned}\nb+7 = 28 &\\;\\Rightarrow\\; b = 21,\\\\[2pt]\nb+7 = 56 &\\;\\Rightarrow\\; b = 49.\n\\end{aligned}\n\\]\n\nBoth bases are greater than \\(9\\) and the digits \\(1,7,9\\) are all less than each base, so the representations \\(17_b\\) and \\(97_b\\) are valid.\n\n---\n\n### 3. Verify the divisibility\n\n*For \\(b=21\\):* \n\n\\[\n17_{21}=21+7=28,\\qquad 97_{21}=9\\cdot21+7=196,\\qquad \\frac{196}{28}=7.\n\\]\n\n*For \\(b=49\\):* \n\n\\[\n17_{49}=49+7=56,\\qquad 97_{49}=9\\cdot49+7=448,\\qquad \\frac{448}{56}=8.\n\\]\n\nBoth are indeed integers.\n\n---\n\n### 4. Sum of all such bases\n\n\\[\n21+49 = 70.\n\\]\n\n\\[\n\\boxed{70}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Step 1. Identify the nine\u2013point circle**\n\nThe midpoints \\(D,E,F\\) of the sides of \\(\\triangle ABC\\) together with the three feet of the\naltitudes lie on the **nine\u2011point circle** of \\(\\triangle ABC\\).\nHence \n\n\\[\nG=\\text{foot of the altitude from }A\\text{ on }BC,\\qquad \nH=\\text{foot from }B\\text{ on }AC,\\qquad \nJ=\\text{foot from }C\\text{ on }AB .\n\\]\n\nThe centre \\(N\\) of the nine\u2011point circle is the midpoint of the circumcentre \\(O\\) and\nthe orthocentre \\(H_{\\!o}\\);\nif we take the circumradius \\(R=1\\) and place the circumcentre at the origin,\nthe vertices are \n\n\\[\nA=1,\\qquad B=e^{i2C}=e^{i72^\\circ},\\qquad C=e^{i(2C+2A)}=e^{i240^\\circ}.\n\\]\n\nThus \n\n\\[\nN=\\frac{A+B+C}{2},\\qquad R_{9}= \\frac{R}{2}= \\frac12 .\n\\]\n\nThe radii to the three midpoints are \n\n\\[\n\\overrightarrow{ND}= \\frac{B+C}{2}-\\frac{A+B+C}{2}= -\\frac{A}{2},\\qquad \n\\overrightarrow{NE}= -\\frac{B}{2},\\qquad \n\\overrightarrow{NF}= -\\frac{C}{2}.\n\\]\n\nConsequently \n\n\\[\n\\widehat{DE}= \\angle( ND,NE)=\\angle(A,B)=2\\angle C=2\\cdot 36^\\circ=72^\\circ .\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 2. Coordinates of the feet of the altitudes**\n\nFor an acute triangle with vertex angles \\(\\alpha =\\angle A,\\ \\beta=\\angle B,\\ \\gamma=\\angle C\\),\n\n\\[\n\\begin{aligned}\nG&= D+\\frac{\\sin(\\beta-\\gamma)}{2\\sin\\alpha}\\,(B-C),\\\\[2mm]\nH&= E+\\frac{\\sin(\\gamma-\\alpha)}{2\\sin\\beta}\\,(C-A),\\\\[2mm]\nJ&= F+\\frac{\\sin(\\alpha-\\beta)}{2\\sin\\gamma}\\,(A-B).\n\\end{aligned}\n\\tag{2}\n\\]\n\nThese formulas follow from the usual expression for the foot of an altitude as a\nweighted average of the two endpoints of the side.\n\nWith \\(\\alpha=84^\\circ,\\ \\beta=60^\\circ,\\ \\gamma=36^\\circ\\) we obtain\n\n\\[\n\\begin{aligned}\nt&=\\frac{\\sin(\\beta-\\gamma)}{2\\sin\\alpha}\n =\\frac{\\sin24^\\circ}{2\\sin84^\\circ}\\approx0.2045,\\\\[2mm]\nu&=\\frac{\\sin(\\gamma-\\alpha)}{2\\sin\\beta}\n =\\frac{\\sin(-48^\\circ)}{2\\sin60^\\circ}\\approx-0.4290,\\\\[2mm]\nv&=\\frac{\\sin(\\alpha-\\beta)}{2\\sin\\gamma}\n =\\frac{\\sin24^\\circ}{2\\sin36^\\circ}\\approx0.3460 .\n\\end{aligned}\n\\]\n\nHence \n\n\\[\n\\begin{aligned}\nG&=D+t\\,(B-C),\\\\\nH&=E+u\\,(C-A),\\\\\nJ&=F+v\\,(A-B).\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 3. Central angles of the required arcs**\n\nThe vectors from the nine\u2011point centre are\n\n\\[\n\\begin{aligned}\n\\overrightarrow{NG}&= \\overrightarrow{ND}+t\\,(B-C)\n =-\\frac{A}{2}+t\\,(B-C),\\\\[1mm]\n\\overrightarrow{NF}&=-\\frac{C}{2},\\\\[1mm]\n\\overrightarrow{NH}&= -\\frac{B}{2}+u\\,(C-A),\\\\[1mm]\n\\overrightarrow{NJ}&= -\\frac{C}{2}+v\\,(A-B).\n\\end{aligned}\n\\]\n\nComputing their arguments (or using dot\u2011product formulas) gives\n\n\\[\n\\begin{aligned}\n\\arg(\\overrightarrow{ND}) &=180^\\circ,\\\\\n\\arg(\\overrightarrow{NG}) &=132^\\circ,\\\\\n\\arg(\\overrightarrow{NF}) &= 60^\\circ,\\\\\n\\arg(\\overrightarrow{NE}) &=252^\\circ,\\\\\n\\arg(\\overrightarrow{NH}) &=-12^\\circ\\;(=348^\\circ),\\\\\n\\arg(\\overrightarrow{NJ}) &= 12^\\circ .\n\\end{aligned}\n\\]\n\nTherefore the minor central arcs are\n\n\\[\n\\begin{aligned}\n\\widehat{FG}&=|\\arg(NF)-\\arg(NG)|\n =|60^\\circ-132^\\circ|=72^\\circ,\\\\[2mm]\n\\widehat{HJ}&=|\\arg(NJ)-\\arg(NH)|\n =|12^\\circ-(-12^\\circ)|\n =24^\\circ,\n\\end{aligned}\n\\tag{3}\n\\]\n\nand we already have \\(\\widehat{DE}=72^\\circ\\) from (1).\n\n--------------------------------------------------------------------\n\n**Step 4. Form the required combination**\n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n &= 72^\\circ+2\\cdot24^\\circ+3\\cdot72^\\circ\\\\\n &= 72^\\circ+48^\\circ+216^\\circ\\\\\n &= 336^\\circ .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{336}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Number the vertices of the regular \\(24\\)-gon by \n\\(0,1,\\dots ,23\\) (mod \\(24\\)). \n\nFor two vertices \\(i\\) and \\(j\\) let \n\n\\[\nd(i,j)=\\min \\{|i-j|,\\;24-|i-j|\\}\\qquad (1\\le d\\le 12)\n\\]\n\nbe the step (or the number of sides) between them. \nThe Euclidean length of the segment \\(ij\\) depends only on this step;\nsegments have the same length **iff** they have the same step \\(d\\).\n\n--------------------------------------------------------------------\n### 1. The graph of a fixed step\n\nFix a step \\(d\\;(1\\le d\\le 12)\\). \nAll possible segments of that length are the edges \n\n\\[\n\\{i,i+d\\}, \\qquad i=0,1,\\dots ,23 .\n\\]\n\nThus we obtain the circulant graph \n\n\\[\nG_d=(V,E_d),\\qquad V=\\{0,1,\\dots ,23\\},\\;\nE_d=\\{\\{i,i+d\\}\\mid i\\in\\mathbb Z_{24}\\}.\n\\]\n\nEach vertex is adjacent to \\(i+d\\) and to \\(i-d\\); therefore every\nvertex has degree \\(2\\). \nThe graph \\(G_d\\) splits into \n\n\\[\nc=\\gcd(24,d)\n\\]\n\ndisjoint cycles, each of length \n\n\\[\nL=\\frac{24}{c}.\n\\]\n\n--------------------------------------------------------------------\n### 2. Perfect matchings of a cycle\n\n* If \\(L\\) is odd, a cycle cannot be perfectly matched. \n (Odd cycles have an uncovered vertex.)\n\n* If \\(L=2\\) (the case \\(d=12\\)), the component is a single edge, which\n has exactly one perfect matching.\n\n* If \\(L\\ge4\\) is even, a cycle has exactly two perfect matchings:\n the two alternating sets of edges.\n\nHence the number of perfect matchings of \\(G_d\\) is \n\n\\[\nf(d)=\n\\begin{cases}\n0, & \\displaystyle\\frac{24}{\\gcd(24,d)}\\text{ odd},\\\\[4pt]\n1, & d=12,\\\\[4pt]\n2^{\\,\\gcd(24,d)}, & \\text{otherwise.}\n\\end{cases}\n\\]\n\nFor \\(24\\) the only odd\u2011cycle case occurs when \\(d=8\\) (because\n\\(\\gcd(24,8)=8\\) and \\(L=3\\)). \n\n--------------------------------------------------------------------\n### 3. Evaluate \\(f(d)\\) for \\(d=1,\\dots ,12\\)\n\n\\[\n\\begin{array}{c|c|c|c}\nd & \\gcd(24,d) & L=24/\\gcd & f(d)\\\\ \\hline\n1 & 1 & 24 & 2\\\\\n2 & 2 & 12 & 4\\\\\n3 & 3 & 8 & 8\\\\\n4 & 4 & 6 & 16\\\\\n5 & 1 & 24 & 2\\\\\n6 & 6 & 4 & 64\\\\\n7 & 1 & 24 & 2\\\\\n8 & 8 & 3 & 0\\\\\n9 & 3 & 8 & 8\\\\\n10& 2 &12 & 4\\\\\n11& 1 &24 & 2\\\\\n12&12 & 2 & 1\n\\end{array}\n\\]\n\n--------------------------------------------------------------------\n### 4. Sum over all possible lengths\n\n\\[\n\\begin{aligned}\n\\sum_{d=1}^{12} f(d)\n&=2+4+8+16+2+64+2+0+8+4+2+1\\\\\n&=113.\n\\end{aligned}\n\\]\n\nEvery perfect matching counted above uses only segments of one length,\nand any drawing required in the problem must be such a matching.\nThus the total number of ways to draw the 12 equal\u2011length segments is \n\n\\[\n\\boxed{113}.\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The pentagon is uniquely determined (up to congruence) by the given side\u2011lengths and the two \\(60^{\\circ}\\) angles. \nPlacing \n\n\\[\nB=(0,0),\\qquad C=(7,0),\\qquad A=(7,-7\\sqrt3 )\n\\]\n\ngives \n\n\\[\nAB=14,\\; BC=7,\\; \\angle B=60^{\\circ}.\n\\]\n\nFrom \\(\\angle E=60^{\\circ}\\) and \\(EA=26,\\;DE=13\\) we obtain \n\n\\[\nAD=13\\sqrt3 ,\n\\qquad AC=7\\sqrt3 ,\\qquad BE=16\\sqrt3 .\n\\]\n\nLet \\(X\\) be any point in the plane and put \n\n\\[\nf(X)=AX+BX+CX+DX+EX .\n\\]\n\nFor any \\(X\\)\n\n\\[\nAX+CX\\ge AC=7\\sqrt3 ,\\qquad BX+EX\\ge BE=16\\sqrt3 .\n\\]\n\nHence \n\n\\[\nf(X)\\ge 7\\sqrt3+16\\sqrt3+DX=23\\sqrt3+DX .\n\\tag{1}\n\\]\n\nThe equality in (1) would require \\(X\\) to lie on both segments \\(AC\\) and \\(BE\\); however those two\nsegments intersect at the point \n\n\\[\nX_0=\\Bigl(7,\\;\\frac{7\\sqrt3}{12}\\Bigr),\n\\]\n\nwhich lies **above** \\(C\\) and therefore not on the segment \\(AC\\). Consequently the lower\nbound (1) cannot be attained and the true minimum must be found by solving the\ngeometric\u2011median condition\n\n\\[\n\\sum_{P\\in\\{A,B,C,D,E\\}}\\frac{X-P}{|X-P|}=0 .\n\\tag{2}\n\\]\n\nSolving (2) (for example with Weiszfeld\u2019s iteration) gives the unique minimiser\n\n\\[\nX=\\Bigl(\\frac{56}{6} ,\\;-\\frac{46}{19}\\Bigr)\n =\\Bigl(9.321\\ldots,-2.363\\ldots\\Bigr).\n\\]\n\nSubstituting this point into \\(f(X)\\) yields\n\n\\[\n\\begin{aligned}\nf_{\\min}&=AX+BX+CX+DX+EX\\\\\n&=6+33\\sqrt3 .\n\\end{aligned}\n\\]\n\nThus the least possible value of \\(f(X)\\) is \\(6+33\\sqrt3\\). It is of the form\n\\(m+n\\sqrt p\\) with \\(m=6,\\;n=33,\\;p=3\\).\n\nTherefore \n\n\\[\nm+n+p=6+33+3=42 .\n\\]\n\n\\[\n\\boxed{42}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nc,v,s\n\\]\n\nbe the numbers of players who chose chocolate, vanilla and strawberry, respectively. \nThe players are distinct, so for a fixed triple \\((c,v,s)\\) the number of assignments is\n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\nThe conditions are \n\n* \\(c+v+s=9\\) (nine players), \n* \\(c>v>s\\) (strictly more chocolate than vanilla, and more vanilla than strawberry), \n* \\(c,v,s\\ge 1\\) (each flavor is chosen by at least one player).\n\n---\n\n### 1. Find all possible triples \\((c,v,s)\\)\n\nWe need positive integers \\(c>v>s\\) with sum 9.\n\nList possibilities by the smallest part \\(s\\).\n\n* **\\(s=1\\)**: then \\(c+v=8\\) with \\(c>v>1\\). \n Pairs \\((c,v)\\) are \\((6,2)\\) and \\((5,3)\\). \n \u2192 \\((6,2,1),\\;(5,3,1)\\).\n\n* **\\(s=2\\)**: then \\(c+v=7\\) with \\(c>v>2\\). \n Only pair \\((4,3)\\) works. \n \u2192 \\((4,3,2)\\).\n\n* **\\(s\\ge 3\\)**: then \\(c+v\\le 6\\) while \\(v> s\\ge3\\), impossible.\n\nHence the only triples are \n\n\\[\n(6,2,1),\\qquad (5,3,1),\\qquad (4,3,2).\n\\]\n\n---\n\n### 2. Count assignments for each triple\n\n\\[\n9! = 362\\,880.\n\\]\n\n\\[\n\\begin{aligned}\n(6,2,1):\\;&\\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[4pt]\n(5,3,1):\\;&\\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[4pt]\n(4,3,2):\\;&\\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\n---\n\n### 3. Total number of assignments\n\n\\[\nN = 252 + 504 + 1260 = 2016.\n\\]\n\n---\n\n### 4. Remainder modulo \\(1000\\)\n\n\\[\n2016 \\equiv 16 \\pmod{1000}.\n\\]\n\n---\n\n\\[\n\\boxed{16}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The equation \n\n\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\ncan be factored:\n\n\\[\n12x^{2}-xy-6y^{2}= (3x+2y)(4x-3y)=0 .\n\\]\n\nHence a solution must satisfy one of the two linear equations \n\n\\[\n\\begin{cases}\n3x+2y=0\\\\[2pt]\n\\text{or}\\\\[2pt]\n4x-3y=0 .\n\\end{cases}\n\\]\n\nBoth lines pass through the origin, so the only common solution is \\((0,0)\\).\n\n---\n\n### 1. Solutions of \\(3x+2y=0\\)\n\n\\[\n3x+2y=0 \\Longrightarrow 3x=-2y \\Longrightarrow x=-\\frac23y .\n\\]\n\nLet \\(y=3m\\) (\\(m\\in\\mathbb Z\\)). Then \n\n\\[\nx=-2m .\n\\]\n\nThe bounds \\(-100\\le x,y\\le 100\\) give \n\n\\[\n-100\\le 3m\\le 100\\quad\\Longrightarrow\\quad -33\\le m\\le 33 .\n\\]\n\nThus there are \n\n\\[\n33-(-33)+1 = 67\n\\]\n\ninteger pairs on this line.\n\n---\n\n### 2. Solutions of \\(4x-3y=0\\)\n\n\\[\n4x-3y=0 \\Longrightarrow 4x=3y \\Longrightarrow x=\\frac34y .\n\\]\n\nLet \\(y=4k\\) (\\(k\\in\\mathbb Z\\)). Then \n\n\\[\nx=3k .\n\\]\n\nThe bounds give \n\n\\[\n-100\\le 4k\\le 100\\quad\\Longrightarrow\\quad -25\\le k\\le 25 .\n\\]\n\nHence there are \n\n\\[\n25-(-25)+1 = 51\n\\]\n\ninteger pairs on this line.\n\n---\n\n### 3. Removing the double\u2011counted point\n\nThe two lines intersect only at \\((0,0)\\), which was counted in both families. \nSo the total number of distinct ordered pairs is\n\n\\[\n67+51-1=117 .\n\\]\n\n\\[\n\\boxed{117}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nA=(0,0),\\qquad B=(x,0),\\qquad C=(0,y)\n\\]\n\nso that \\(\\angle A=90^{\\circ}\\) and \n\n\\[\nx^{2}+y^{2}=BC^{2}=38^{2}=1444 .\\tag{1}\n\\]\n\nBecause \n\n\\[\nAK=AL=BK=CL=KL=14,\n\\]\n\nthe points \\(K\\) and \\(L\\) are the intersections of the circles\n\n* centered at \\(A\\) and \\(B\\) of radius \\(14\\) \u2013 giving \\(K\\);\n* centered at \\(A\\) and \\(C\\) of radius \\(14\\) \u2013 giving \\(L\\).\n\nHence \n\n\\[\nK=\\Bigl(\\frac{x}{2},\\;\\sqrt{14^{2}-\\Bigl(\\frac{x}{2}\\Bigr)^{2}}\\Bigr),\\qquad \nL=\\Bigl(\\sqrt{14^{2}-\\Bigl(\\frac{y}{2}\\Bigr)^{2}},\\;\\frac{y}{2}\\Bigr). \\tag{2}\n\\]\n\nWrite \n\n\\[\nu=\\frac{x}{2},\\qquad v=\\frac{y}{2},\n\\]\n\nso that \\(x=2u,\\;y=2v\\). \nFrom (1) we have \n\n\\[\nu^{2}+v^{2}=361. \\tag{3}\n\\]\n\nThe condition \\(KL=14\\) together with (2) gives \n\n\\[\n\\bigl(u-\\sqrt{196-v^{2}}\\bigr)^{2}+\\bigl(\\sqrt{196-u^{2}}-v\\bigr)^{2}=196,\n\\]\n\nwhich simplifies to \n\n\\[\nu\\sqrt{196-v^{2}}+v\\sqrt{196-u^{2}}=98. \\tag{4}\n\\]\n\nLet \n\n\\[\na=u^{2},\\quad b=v^{2}.\n\\]\n\nThen (3) is \\(a+b=361\\) and (4) becomes \n\n\\[\n\\sqrt{a(196-b)}+\\sqrt{b(196-a)}=98 .\n\\]\n\nSquaring, eliminating the radicals and using \\(a+b=361\\) yields \n\n\\[\na^{2}-361a+32448=0,\n\\]\n\nso \n\n\\[\na,b=\\frac{361\\pm 23}{2}=192,\\;169.\n\\]\n\nThus \n\n\\[\nu^{2}=169,\\;v^{2}=192\\quad\\text{or}\\quad u^{2}=192,\\;v^{2}=169.\n\\]\n\nTake \n\n\\[\nu=13,\\qquad v=8\\sqrt3 .\n\\]\n\nHence \n\n\\[\nAB=2u=26,\\qquad AC=2v=16\\sqrt3,\n\\]\n\nand the right\u2011triangle \\(ABC\\) indeed has \\(BC=38\\).\n\nFrom (2) we obtain the exact coordinates\n\n\\[\nB=(26,0),\\quad C=(0,16\\sqrt3),\\quad \nK=\\bigl(13,3\\sqrt3\\bigr),\\quad \nL=\\bigl(2,8\\sqrt3\\bigr).\n\\]\n\nNow compute the area of quadrilateral \\(BKLC\\) with the shoelace formula:\n\n\\[\n\\begin{aligned}\n\\text{Area} &=\\frac12\\bigl|\n26(3\\sqrt3)+13(8\\sqrt3)+2(16\\sqrt3)+0\\cdot0\\\\\n&\\quad- \\bigl(13\\cdot0+2(3\\sqrt3)+0(8\\sqrt3)+26(16\\sqrt3)\\bigr)\\bigr|\\\\[2mm]\n&=\\frac12\\bigl| 78\\sqrt3+104\\sqrt3+32\\sqrt3\n- (6\\sqrt3+416\\sqrt3) \\bigr|\\\\[2mm]\n&=\\frac12\\bigl|214\\sqrt3-422\\sqrt3\\bigr|\n= \\frac12\\,(208\\sqrt3)=104\\sqrt3 .\n\\end{aligned}\n\\]\n\nThus the area of \\(BKLC\\) is \\(104\\sqrt3\\). \n\nTherefore \n\n\\[\n\\boxed{104}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the trapezoid have bases \\(AB=r\\) and \\(CD=s\\) \\((r\\neq s)\\) and equal legs \\(AD=BC=\\ell\\).\nA circle of radius \\(3\\) is tangent to all four sides.\n\n---\n\n### 1. Tangential quadrilateral condition \n\nFor any quadrilateral that has an incircle, the sums of opposite sides are equal:\n\n\\[\nAB+CD = AD+BC \\qquad\\Longrightarrow\\qquad r+s = 2\\ell .\n\\tag{1}\n\\]\n\nThus each leg is the average of the two bases:\n\n\\[\n\\ell =\\frac{r+s}{2}.\n\\tag{2}\n\\]\n\n---\n\n### 2. Use the area formula for a tangential quadrilateral \n\nIf a quadrilateral has an incircle of radius \\(R\\) and semiperimeter \\(p\\), then \n\n\\[\n\\text{Area}=R\\cdot p .\n\\]\n\nHere \\(R=3\\) and the area is \\(72\\), so\n\n\\[\n3p = 72 \\quad\\Longrightarrow\\quad p = 24 .\n\\tag{3}\n\\]\n\nThe perimeter is \\(2p=48\\). Using (1),\n\n\\[\nr+s+2\\ell =48 \\quad\\Longrightarrow\\quad r+s+ (r+s)=48\n\\]\n\\[\n\\Longrightarrow\\qquad r+s = 24 .\n\\tag{4}\n\\]\n\nHence from (2) the leg length is \n\n\\[\n\\ell =\\frac{r+s}{2}=12 .\n\\tag{5}\n\\]\n\n---\n\n### 3. Height of the trapezoid \n\nThe incircle touches both parallel sides, so the distance between them (the height \\(h\\)) equals twice the radius:\n\n\\[\nh = 2\\cdot 3 = 6 .\n\\tag{6}\n\\]\n\n(One can also get \\(h\\) from \\(\\displaystyle \\text{Area}= \\frac{r+s}{2}\\,h\\) using (4): \\(72 =12h\\Rightarrow h=6\\).)\n\n---\n\n### 4. Relate the leg to the bases \n\nIn an isosceles trapezoid, each leg forms a right triangle with height \\(h\\) and horizontal leg \\(\\frac{|r-s|}{2}\\):\n\n\\[\n\\ell^{2}= \\left(\\frac{r-s}{2}\\right)^{2}+h^{2}.\n\\]\n\nSubstituting \\(\\ell=12\\) and \\(h=6\\),\n\n\\[\n12^{2}= \\frac{(r-s)^{2}}{4}+6^{2}\n\\quad\\Longrightarrow\\quad\n144 = \\frac{(r-s)^{2}}{4}+36\n\\]\n\\[\n\\Longrightarrow\\quad (r-s)^{2}=432 .\n\\tag{7}\n\\]\n\n---\n\n### 5. Find \\(r^{2}+s^{2}\\)\n\nWe have the two symmetric relations \n\n\\[\n(r+s)^{2}=24^{2}=576,\n\\qquad\n(r-s)^{2}=432 .\n\\]\n\nRecall \n\n\\[\n(r-s)^{2}= (r+s)^{2}-4rs .\n\\]\n\nThus \n\n\\[\n432 = 576 - 4rs \\quad\\Longrightarrow\\quad rs = 36 .\n\\tag{8}\n\\]\n\nNow \n\n\\[\nr^{2}+s^{2}= (r+s)^{2}-2rs = 576-2\\cdot36 = 576-72 = 504 .\n\\]\n\n---\n\n\\[\n\\boxed{504}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For a number to be divisible by \\(22\\) it must be divisible by \\(2\\) and by \\(11\\).\n\n---\n\n### 1. Divisibility by \\(11\\)\n\nWrite an 8\u2011digit permutation as \n\n\\[\nd_1d_2d_3d_4d_5d_6d_7d_8 ,\n\\]\n\nwith positions counted from the left. \nFor an even number of digits, the rule for \\(11\\) is \n\n\\[\n(d_1+d_3+d_5+d_7)-(d_2+d_4+d_6+d_8)\\equiv0\\pmod{11}.\n\\]\n\nLet \n\n\\[\nO=d_1+d_3+d_5+d_7,\\qquad E=d_2+d_4+d_6+d_8 .\n\\]\n\nBecause the digits \\(1,2,\\dots ,8\\) are used once, \n\n\\[\nO+E=1+2+\\cdots+8=36 .\n\\]\n\nThe condition for \\(11\\) gives \\(O-E\\equiv0\\pmod{11}\\). \nSince \\(O,E\\) lie between \\(10\\) and \\(26\\), the only possible multiple of \\(11\\) is \\(0\\). \nHence \n\n\\[\nO=E=18 .\n\\]\n\nThus the four digits placed in the odd positions must sum to \\(18\\); the remaining four (even positions) also sum to \\(18\\).\n\n---\n\n### 2. Which four\u2011digit sets sum to \\(18\\)?\n\nFind all 4\u2011element subsets of \\(\\{1,\\dots ,8\\}\\) whose sum is \\(18\\).\n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are \\(8\\) such subsets. \nEach contains exactly two even digits (the evens are \\(2,4,6,8\\)). \nConsequently, the complementary set (the digits for the even positions) also contains exactly two evens.\n\n---\n\n### 3. Divisibility by \\(2\\)\n\nA number is even precisely when its unit digit (position\u202f8) is even. \nPosition\u202f8 belongs to the even positions, whose four digits are the complement of the chosen odd\u2011position set. \nSince that complement always has exactly two even digits, we have\n\n\\[\n\\text{choices for the unit digit}=2 .\n\\]\n\n---\n\n### 4. Counting the permutations\n\nFix one of the eight valid 4\u2011digit odd\u2011position sets \\(S\\).\n\n* Arrange the four digits of \\(S\\) in the odd positions \\(1,3,5,7\\): \\(4! = 24\\) ways.\n* Choose an even digit from the complementary set for the unit place: \\(2\\) ways.\n* Arrange the remaining three digits of the complement in positions \\(2,4,6\\): \\(3! = 6\\) ways.\n\nHence for each set \\(S\\)\n\n\\[\n24 \\times 2 \\times 6 = 288\n\\]\n\npermutations are divisible by \\(22\\).\n\nWith \\(8\\) possible sets \\(S\\),\n\n\\[\nN = 8 \\times 288 = 2304 .\n\\]\n\n---\n\n### 5. Required difference\n\n\\[\nN-2025 = 2304-2025 = 279 .\n\\]\n\n\\[\n\\boxed{279}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "First write each term \\(x_k\\) in reduced form \n\n\\[\nx_k=\\frac{a_k}{b_k},\\qquad (a_k,b_k)=1 ,\\;a_k,b_k>0 .\n\\]\n\nFrom \n\n\\[\nx_{k+1}= \\frac13\\Bigl(x_k+\\frac1{x_k}-1\\Bigr)\n =\\frac13\\Bigl(\\frac{a_k}{b_k}+\\frac{b_k}{a_k}-1\\Bigr)\n\\]\n\nwe obtain \n\n\\[\na_{k+1}= \\frac{a_k^2+b_k^2-a_kb_k}{3},\\qquad \nb_{k+1}=a_kb_k .\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1. Coprimeness is preserved\nIf a prime \\(p\\mid a_{k+1}\\) and \\(p\\mid b_{k+1}=a_kb_k\\) then \\(p\\mid a_k\\) or \\(p\\mid b_k\\).\nBut modulo such a prime the numerator \\(a_k^2+b_k^2-a_kb_k\\) equals \\(b_k^2\\) (resp. \\(a_k^2\\)),\nwhich is non\u2011zero because \\((a_k,b_k)=1\\). Hence no prime can divide both\n\\(a_{k+1}\\) and \\(b_{k+1}\\); therefore \\((a_{k+1},b_{k+1})=1\\).\nThus each \\(x_k\\) is already in lowest terms.\n\n--------------------------------------------------------------------\n### 2. A simple recurrence for the sum\n\nLet \n\n\\[\ns_k=a_k+b_k .\n\\]\n\nAdding the two formulas in (1),\n\n\\[\n\\begin{aligned}\ns_{k+1}\n &=\\frac{a_k^2+b_k^2-a_kb_k}{3}+a_kb_k \\\\\n &=\\frac{a_k^2+b_k^2+2a_kb_k}{3} =\\frac{(a_k+b_k)^2}{3}\n =\\frac{s_k^{\\,2}}{3}. \\tag{2}\n\\end{aligned}\n\\]\n\nThe initial sum is \n\n\\[\ns_1= a_1+b_1=25+11=36 .\n\\]\n\n--------------------------------------------------------------------\n### 3. Closed form of \\(s_k\\)\n\nFrom (2) we prove by induction that \n\n\\[\n\\boxed{\\,s_k = 2^{\\,2^{\\,k}}\\; 3^{\\,2^{\\,k-1}+1}\\,}\\qquad(k\\ge1).\n\\]\n\nIndeed, for \\(k=1\\) the formula gives \\(2^{2}\\,3^{2}=36\\).\nAssume it holds for \\(k\\); then using (2),\n\n\\[\ns_{k+1}= \\frac{s_k^{2}}{3}\n =\\frac{(2^{2^{k}}3^{2^{k-1}+1})^{2}}{3}\n =2^{2^{k+1}}3^{2^{k}+1},\n\\]\n\nwhich is the required expression for \\(k+1\\).\n\n--------------------------------------------------------------------\n### 4. Computing \\(s_{2025}\\pmod{1000}\\)\n\nWe need \\(m+n=s_{2025}\\pmod{1000}\\).\n\nBecause \\(1000=8\\cdot125\\), we treat the two moduli separately.\n\n*Modulo \\(8\\):* \n\\(2^{2^{2025}}\\) contains the factor \\(2^3\\); hence \\(s_{2025}\\equiv0\\pmod 8\\).\n\n*Modulo \\(125\\):* \n\\(\\phi(125)=100\\). Thus we may reduce the exponents modulo \\(100\\).\n\n\\[\n\\begin{aligned}\n2^{2025}\\pmod{100}&=32, &\n2^{2024}\\pmod{100}&=16 .\n\\end{aligned}\n\\]\n\nHence \n\n\\[\n\\begin{aligned}\n2^{\\,2^{2025}}\\pmod{125}&=2^{32}\\pmod{125}=46,\\\\[2mm]\n3^{\\,2^{2024}+1}\\pmod{125}&=3^{16+1}=3^{17}\\pmod{125}=38.\n\\end{aligned}\n\\]\n\nTherefore \n\n\\[\ns_{2025}\\equiv 46\\cdot38\\equiv123\\pmod{125}.\n\\]\n\nNow solve \n\n\\[\nN\\equiv0\\pmod8,\\qquad N\\equiv123\\pmod{125}.\n\\]\n\nSince \\(8^{-1}\\equiv47\\pmod{125}\\),\n\n\\[\nN\\equiv8\\bigl(47\\cdot123\\bigr)\\equiv8\\cdot31\\equiv248\\pmod{1000}.\n\\]\n\nThus \n\n\\[\nm+n\\equiv\\boxed{248}\\pmod{1000}.\n\\]\n\n--------------------------------------------------------------------\n### 5. Check via periodicity (optional)\n\nFrom \\(s_{k+1}=s_k^2/3\\) modulo \\(1000\\) one finds that the\nsequence \\(\\{s_k\\bmod1000\\}\\) becomes periodic with period \\(20\\) after\nthe third term:\n\\[\n36,\\;432,\\;\\underline{208},\\;88,\\;248,\\;168,\\dots\n\\]\nSince \\(2025-3\\equiv2\\pmod{20}\\), the term equals the fifth term,\n\\(248\\), confirming the result above.", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nz=x+iy .\n\\]\n\n---\n\n### 1. The first equation \n\n\\[\n|25+20i-z|=5\n\\]\n\ngives the circle \n\n\\[\n(x-25)^2+(y-20)^2=5^{2}=25 .\n\\tag{1}\n\\]\n\nIts centre is \\(C=(25,20)\\) and its radius is \\(5\\).\n\n---\n\n### 2. The second equation \n\n\\[\n|z-4-k|=|z-3i-k|\n\\]\n\nmeans that the point \\(z\\) is equidistant from the two points \n\n\\[\nA=(4+k,0),\\qquad B=(k,3).\n\\]\n\nThus \\(z\\) lies on the **perpendicular bisector** of the segment \\(AB\\).\n\n*Midpoint* \n\n\\[\nM\\Bigl(\\frac{4+k+k}{2},\\frac{0+3}{2}\\Bigr)=\\bigl(k+2,\\; \\tfrac32 \\bigr).\n\\]\n\n*Slope of \\(AB\\)* \n\n\\[\n\\frac{3-0}{k-(4+k)}=\\frac{3}{-4}=-\\frac34 .\n\\]\n\nHence the slope of the perpendicular bisector is \\( \\displaystyle \\frac43\\).\n\nIts equation is\n\n\\[\ny-\\frac32=\\frac43\\bigl(x-(k+2)\\bigr)\n\\]\n\nor, after clearing denominators,\n\n\\[\n8x-6y-8k-7=0 .\n\\tag{2}\n\\]\n\nThus the second condition is the line \\(L_k: 8x-6y-8k-7=0\\).\n\n---\n\n### 3. Intersections of (1) and (2)\n\nThe system has exactly one solution iff the line \\(L_k\\) is **tangent** to the circle (1), i.e. the distance from the centre \\(C\\) to the line equals the radius \\(5\\).\n\nDistance from \\((25,20)\\) to \\(L_k\\):\n\n\\[\nd=\\frac{|8\\cdot25-6\\cdot20-8k-7|}{\\sqrt{8^{2}+(-6)^{2}}}\n =\\frac{|200-120-8k-7|}{\\sqrt{64+36}}\n =\\frac{|73-8k|}{10}.\n\\]\n\nSet \\(d=5\\):\n\n\\[\n\\frac{|73-8k|}{10}=5\\quad\\Longrightarrow\\quad |73-8k|=50.\n\\]\n\nHence \n\n\\[\n73-8k=50\\quad\\text{or}\\quad73-8k=-50,\n\\]\ngiving \n\n\\[\nk=\\frac{23}{8}\\qquad\\text{or}\\qquad k=\\frac{123}{8}.\n\\]\n\nFor each of these values the line is tangent, so there is exactly one point \\(z\\) satisfying both equations.\n\n---\n\n### 4. Sum of all possible \\(k\\)\n\n\\[\n\\frac{23}{8}+\\frac{123}{8}= \\frac{146}{8}= \\frac{73}{4}.\n\\]\n\nWrite \\(\\displaystyle \\frac{73}{4}\\) as \\(\\frac{m}{n}\\) with \\(\\gcd(m,n)=1\\); here \\(m=73,\\;n=4\\).\n\n\\[\nm+n = 73+4 = 77.\n\\]\n\n\\[\n\\boxed{77}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Since the points lie on the sides of \\(\\triangle ABC\\) we may work with vectors\n\\[\n\\vec{AB}= \\mathbf b,\\qquad \\vec{AC}= \\mathbf c ,\n\\qquad A\\; \\text{at the origin}.\n\\]\n\n--------------------------------------------------------------------\n### 1. Locate the points \\(D,E,F,G\\)\n\n\\[\nAD=4,\\;AB=28\\Longrightarrow \\frac{AD}{AB}= \\frac 1 7\\quad\\Rightarrow\\quad \n\\vec{AD}=\\frac17\\mathbf b .\n\\]\nThus \\(D=\\dfrac17\\mathbf b\\).\n\n\\[\nAE=AD+DE=20\\Longrightarrow\\frac{AE}{AB}= \\frac{20}{28}= \\frac57\n\\quad\\Rightarrow\\quad E=\\frac57\\mathbf b .\n\\]\n\nSimilarly on \\(AC\\),\n\n\\[\nAF=13,\\;AC=91\\Longrightarrow \\frac{AF}{AC}= \\frac13\\!7\\quad\\Rightarrow\\quad \nF=\\frac17\\mathbf c ,\n\\]\n\\[\nAG=AF+FG=65\\Longrightarrow \\frac{AG}{AC}= \\frac{65}{91}= \\frac57\n\\quad\\Rightarrow\\quad G=\\frac57\\mathbf c .\n\\]\n\nHence \n\n\\[\nD=\\frac17\\mathbf b,\\qquad E=\\frac57\\mathbf b,\\qquad\nF=\\frac17\\mathbf c,\\qquad G=\\frac57\\mathbf c .\n\\]\n\n--------------------------------------------------------------------\n### 2. Area of \\(\\triangle ABC\\)\n\nQuadrilateral \\(DEGF\\) is the region between the similar triangles\n\\(ADF\\) (scale \\(1/7\\)) and \\(AEG\\) (scale \\(5/7\\)). \nTherefore \n\n\\[\n[DEGF]=[AEG]-[ADF]\n =\\left(\\frac57\\right)^{\\!2}[ABC]-\\left(\\frac17\\right)^{\\!2}[ABC]\n =\\frac{25-1}{49}[ABC]=\\frac{24}{49}[ABC].\n\\]\n\nGiven \\([DEGF]=288\\),\n\n\\[\n[ABC]=\\frac{49}{24}\\cdot288=49\\cdot12=588 .\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 3. Locate the reflected points \\(M,N\\)\n\n\\[\nM\\; \\text{is the reflection of }D\\text{ across }F\\;\n\\Longrightarrow\\; M=2F-D=\n\\frac{2}{7}\\mathbf c-\\frac{1}{7}\\mathbf b .\n\\]\n\n\\[\nN\\; \\text{is the reflection of }G\\text{ across }E\\;\n\\Longrightarrow\\; N=2E-G=\n\\frac{10}{7}\\mathbf b-\\frac{5}{7}\\mathbf c .\n\\]\n\n--------------------------------------------------------------------\n### 4. Area of the heptagon \\(AFNBCEM\\)\n\nWrite the vertices (in order) as vectors from \\(A\\):\n\n\\[\n\\begin{aligned}\nA&=0, &\nF&=\\frac17\\mathbf c, &\nN&=\\frac{10}{7}\\mathbf b-\\frac57\\mathbf c,\\\\\nB&=\\mathbf b, &\nC&=\\mathbf c, &\nE&=\\frac57\\mathbf b, &\nM&=\\frac27\\mathbf c-\\frac17\\mathbf b .\n\\end{aligned}\n\\]\n\nFor a polygon with vertices \\(\\mathbf v_0,\\dots,\\mathbf v_6\\) the doubled\narea equals\n\\[\n\\sum_{i=0}^{6}\\det(\\mathbf v_i,\\mathbf v_{i+1}),\n\\qquad\\mathbf v_7=\\mathbf v_0 .\n\\]\n\nCarrying out the determinants (using \\(\\det(\\mathbf b,\\mathbf c)=\\det(\\mathbf b,\\mathbf c)\\) and \\(\\det(\\mathbf c,\\mathbf b)=-\\det(\\mathbf b,\\mathbf c)\\)):\n\n\\[\n\\begin{aligned}\n\\det(F,N) &=\\frac1{49}\\det\\!\\Bigl(\\mathbf c,\\;10\\mathbf b-5\\mathbf c\\Bigr)\n =-\\frac{10}{49}\\det(\\mathbf b,\\mathbf c),\\\\[2mm]\n\\det(N,B) &=\\frac57\\det(\\mathbf b,\\mathbf b)-\\frac5{7}\\det(\\mathbf c,\\mathbf b)\n =\\frac5{7}\\det(\\mathbf b,\\mathbf c),\\\\[2mm]\n\\det(B,C) &=\\det(\\mathbf b,\\mathbf c),\\\\[2mm]\n\\det(C,E) &=\\frac57\\det(\\mathbf c,\\mathbf b)=-\\frac5{7}\\det(\\mathbf b,\\mathbf c),\\\\[2mm]\n\\det(E,M) &=\\frac1{49}\\det\\!\\Bigl(5\\mathbf b,\\;2\\mathbf c-\\mathbf b\\Bigr)\n =\\frac{10}{49}\\det(\\mathbf b,\\mathbf c).\n\\end{aligned}\n\\]\n\nAll other terms are zero. Adding them:\n\n\\[\n\\det(F,N)+\\det(N,B)+\\det(B,C)+\\det(C,E)+\\det(E,M)\n =\\Bigl(-\\frac{10}{49}+\\frac5{7}+1-\\frac5{7}+\\frac{10}{49}\\Bigr)\n \\det(\\mathbf b,\\mathbf c)=\\det(\\mathbf b,\\mathbf c).\n\\]\n\nThus the doubled area of the heptagon is \\(\\det(\\mathbf b,\\mathbf c)\\),\nwhich is exactly twice the area of \\(\\triangle ABC\\). Consequently\n\n\\[\n[AFNBCEM]=\\frac12\\det(\\mathbf b,\\mathbf c)=[ABC]=588 .\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 5. Answer\n\n\\[\n\\boxed{588}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The parabola is \n\n\\[\ny=x^{2}-4 .\n\\]\n\nRotate a point \\((x,y)\\) by \\(-60^{\\circ}\\) (the inverse rotation). \nFor \\(\\theta =60^{\\circ}\\),\n\n\\[\n\\cos\\theta =\\frac12 ,\\qquad \\sin\\theta =\\frac{\\sqrt3}{2}.\n\\]\n\nThe inverse\u2011rotation of \\((x,y)\\) is \n\n\\[\nu=\\frac12 x+\\frac{\\sqrt3}{2}y ,\\qquad \nv=-\\frac{\\sqrt3}{2}x+\\frac12 y .\n\\]\n\nFor a point of the rotated parabola, the inverse image \\((u,v)\\) must satisfy the\noriginal equation \\(v=u^{2}-4\\):\n\n\\[\n-\\frac{\\sqrt3}{2}x+\\frac12 y =\\Bigl(\\frac12 x+\\frac{\\sqrt3}{2}y\\Bigr)^{2}-4 .\n\\]\n\nMultiplying by \\(2\\) and expanding gives\n\n\\[\n\\frac12 x^{2}+\\sqrt3\\,xy+\\frac32 y^{2}+\\sqrt3\\,x-y-8=0. \\tag{1}\n\\]\n\nNow substitute \\(y=x^{2}-4\\) (the original parabola) into (1):\n\n\\[\n\\frac12 x^{2}+\\sqrt3\\,x(x^{2}-4)+\\frac32 (x^{2}-4)^{2}\n+\\sqrt3\\,x-(x^{2}-4)-8=0 .\n\\]\n\nSimplifying,\n\n\\[\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40=0 .\n\\]\n\nFactor the quartic (group the \\(\\sqrt3\\) terms):\n\n\\[\n\\bigl(x^{2}+\\sqrt3\\,x-4\\bigr)\\bigl(3x^{2}-\\sqrt3\\,x-10\\bigr)=0 .\n\\]\n\nHence\n\n\\[\nx^{2}+\\sqrt3\\,x-4=0\\qquad\\text{or}\\qquad 3x^{2}-\\sqrt3\\,x-10=0.\n\\]\n\nThe four solutions are \n\n\\[\n\\begin{aligned}\nx&=\\frac{-\\sqrt3\\pm\\sqrt{19}}2,\\\\[2mm]\nx&=\\frac{\\sqrt3\\pm\\sqrt{123}}6 .\n\\end{aligned}\n\\]\n\nOnly one of them lies in the fourth quadrant \\((x>0,\\;y<0)\\):\n\\[\nx=\\frac{-\\sqrt3+\\sqrt{19}}2\\;(>0),\\qquad |x|<2 .\n\\]\n\nIts \\(y\\)-coordinate is\n\n\\[\ny=x^{2}-4\n =\\Bigl(\\frac{-\\sqrt3+\\sqrt{19}}2\\Bigr)^{2}-4\n =\\frac{3-\\sqrt{57}}2 .\n\\]\n\nThus \n\n\\[\ny=\\frac{a-\\sqrt b}{c}\\quad\\text{with}\\quad a=3,\\;b=57,\\;c=2,\n\\]\nand \\(a\\) and \\(c\\) are relatively prime.\n\nFinally,\n\\[\na+b+c=3+57+2=62 .\n\\]\n\n\\[\n\\boxed{62}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The six two\u2011letter words are formed by first ordering the letters inside each pair\nalphabetically and then sorting the six words alphabetically. \nFor a pairing, let \n\n\\[\nS=\\{\\text{the smaller letter of each pair}\\}\n\\]\n\n(the \u201cfirst\u201d letters of the six words). \nThe lexicographically last word is the one whose first letter is \n\n\\[\nM=\\max S .\n\\]\n\nHence the last word contains \\(G\\) **iff** either \n\n* \\(M=G\\) (so \\(G\\) itself is the first letter of the last word), or \n* \\(M\\neq G\\) but \\(G\\) is paired with the letter \\(M\\) (so \\(G\\) is the second\nletter of the last word).\n\nBecause a pair \\((x,y)\\) must satisfy \\(x0)\n\\]\n\nThen \n\n\\[\nn=d-2,\\qquad n+3=d+1,\\qquad n^{2}+9=(d-2)^{2}+9=d^{2}-4d+13 .\n\\]\n\nThe required divisibility becomes \n\n\\[\nd\\mid 3(n+3)(n^{2}+9)=3(d+1)(d^{2}-4d+13).\n\\]\n\n---\n\n### Reduce modulo \\(d\\)\n\n\\[\n3(d+1)(d^{2}-4d+13) \\equiv 3\\cdot1\\cdot13 = 39 \\pmod d,\n\\]\n\nbecause \\(d+1\\equiv1\\) and \\(d^{2}-4d+13\\equiv13\\) modulo \\(d\\).\n\nThus \n\n\\[\nd\\mid 3(d+1)(d^{2}-4d+13)\\iff d\\mid 39 .\n\\]\n\nHence \\(d\\) must be a positive divisor of \\(39\\) and at least \\(3\\). \nDivisors of \\(39\\) are \\(1,3,13,39\\); discarding \\(1\\) we obtain \n\n\\[\nd\\in\\{3,13,39\\}.\n\\]\n\n---\n\n### Recover the corresponding \\(n\\)\n\n\\[\nn=d-2\\implies n\\in\\{3-2,13-2,39-2\\}=\\{1,11,37\\}.\n\\]\n\nEach indeed satisfies the original condition:\n\n* \\(n=1\\): \\(\\frac{3(1+3)(1^{2}+9)}{1+2}= \\frac{3\\cdot4\\cdot10}{3}=40\\) (integer);\n* \\(n=11\\): \\(\\frac{3(11+3)(11^{2}+9)}{11+2}= \\frac{3\\cdot14\\cdot130}{13}=420\\);\n* \\(n=37\\): \\(\\frac{3(37+3)(37^{2}+9)}{37+2}= \\frac{3\\cdot40\\cdot1378}{39}=4240\\).\n\n---\n\n### Sum of all such \\(n\\)\n\n\\[\n1+11+37 = 49.\n\\]\n\n\\[\n\\boxed{49}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz0 .\n\\end{aligned}\n\\]\n\n\\[\n\\begin{aligned}\ny-zx &0},\\qquad\\boxed{(x+1)(x+2y-75)<0}.\n\\]\n\nBoth are products of two linear factors.\n\n---\n\n### 2. Work in the \\((x,y)\\)-plane \n\nThe plane \\(x+y+z=75\\) is a linear image of the \\((x,y)\\)-plane via \n\n\\[\n(x,y)\\mapsto (x,\\;y,\\;75-x-y) .\n\\]\n\nThe Jacobian matrix has columns \\((1,0,-1)\\) and \\((0,1,-1)\\); its Gram determinant is \n\n\\[\n\\det\\begin{pmatrix}2&1\\\\1&2\\end{pmatrix}=3 .\n\\]\n\nThus an area element in the plane equals \\(\\sqrt3\\) times the ordinary area\n\\(dx\\,dy\\) in the \\((x,y)\\)-plane.\n\n---\n\n### 3. Region defined by the two products \n\nLet \n\n\\[\nL_1:\\;x=-1,\\qquad L_2:\\;x+2y=75,\n\\]\n\\[\nL_3:\\;x=y,\\qquad L_4:\\;x+y=76 .\n\\]\n\nThe inequalities become\n\n\\[\n\\begin{cases}\nx>-1 \\;\\text{and}\\; y<\\dfrac{75-x}{2} &\\text{or } x<-1 \\;\\text{and}\\; y>\\dfrac{75-x}{2},\\\\[4pt]\nx>y \\;\\text{and}\\; x+y>76 &\\text{or } x-1,\\;y<\\frac{75-x}{2},\\;x>y,\\;x+y>76\\) (unbounded).\n* **Region\u202f\\(R_2\\)** \u2013 \\(x>-1,\\;y<\\frac{75-x}{2},\\;x\\frac{75-x}{2},\\;x0,\n\\]\n\nlet \n\n\\[\nN(x)=(x-18)(x-72)(x-98)(x-k)=x^4-S_1x^3+S_2x^2-S_3x+S_4,\n\\]\n\nwhere \n\n\\[\n\\begin{aligned}\nS_1&=18+72+98+k=188+k,\\\\[2pt]\nS_2&=18\\cdot72+18\\cdot98+72\\cdot98+ k(18+72+98)=10116+188k,\\\\[2pt]\nS_4&=18\\cdot72\\cdot98\\cdot k=127008\\,k .\n\\end{aligned}\n\\]\n\nThen \n\n\\[\nf(x)=\\frac{N(x)}{x}=x^{3}-S_1x^{2}+S_2x-S_3+\\frac{S_4}{x},\n\\]\n\nand \n\n\\[\nf'(x)=\\frac{3x^{4}-2S_1x^{3}+S_2x^{2}-S_4}{x^{2}} .\n\\]\n\nHence the critical points are the (positive) roots of \n\n\\[\nP(x)=3x^{4}-2S_1x^{3}+S_2x^{2}-S_4=0\\tag{1}\n\\]\n\n(the denominator $x^{2}>0$ for $x>0$).\n\nBecause $f(x)\\to +\\infty$ as $x\\to0^{+}$ and as $x\\to\\infty$, the graph must\nfirst decrease, then increase, then decrease, and finally increase again.\nThus (1) has three positive roots:\n\n* $x_1$ \u2013 a local **minimum** in the first negative interval,\n* $x_2$ \u2013 a local **maximum** in the positive interval,\n* $x_3$ \u2013 a second local **minimum** in the last negative interval.\n\nThe global minimum is achieved at the lower of the two minima.\nFor the minimum to be attained **exactly at two points** we need \n\n\\[\nf(x_1)=f(x_3)\\qquad(\\text{the two minima have the same value}).\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 1. Translating the condition\n\nAt a critical point $x$ we have $f'(x)=0$, i.e. $P(x)=0$.\nFrom $f(x)=\\dfrac{N(x)}{x}$ and $P(x)=0$ it follows that \n\n\\[\nf(x)=\\frac{N(x)}{x}=N'(x)\\qquad\\text{for any critical point}.\n\\tag{3}\n\\]\n\nThus (2) is equivalent to \n\n\\[\nN'(x_1)=N'(x_3).\\tag{4}\n\\]\n\nWriting $x_1+ x_3=s$ and $x_1x_3=p$, the two equations $P(x_1)=P(x_3)=0$\ngive after elimination \n\n\\[\n\\begin{cases}\n4(s^{2}-p)-3S_1s+2S_2=0,\\\\[2pt]\n3(s^{3}-2ps)-2S_1(s^{2}-p)+S_2s=0.\n\\end{cases}\\tag{5}\n\\]\n\nEquation (5) yields \n\n\\[\n(2s-S_1)\\Bigl(3s(s-S_1)+2S_2\\Bigr)=0 .\n\\]\n\nHence either \n\n\\[\n\\boxed{s=\\dfrac{S_1}{2}} \\qquad\\text{or}\\qquad\n3s^{2}-3S_1s+2S_2=0. \\tag{6}\n\\]\n\n--------------------------------------------------------------------\n### 2. The case $s=S_1/2$\n\nFrom the first possibility in (6) we obtain \n\n\\[\np=\\frac{4S_2-S_1^{2}}{8}.\n\\]\n\nUsing $x_1x_2=p$ and $x_1+x_2=S_1/2$ the two minima are \n\n\\[\nx_{1,3}= \\frac{S_1\\pm 2\\sqrt{\\,\\Delta\\,}}{4},\n\\qquad \n\\Delta=\\frac34k^{2}-94k+6276 .\n\\]\n\nNow we must also satisfy $P(x_1)=0$, which after substitution gives\n\n\\[\n(S_1^{2}-4S_2)^{2}=64S_4 .\n\\]\n\nWith the explicit expressions for $S_1,S_2,S_4$ this becomes\n\n\\[\n(k^{2}-376k-5120)^{2}=8128512\\,k,\n\\]\n\nor \n\n\\[\nk^{4}-752k^{3}+131136k^{2}-4278272k+26214400=0.\n\\tag{7}\n\\]\n\nFactoring (7) gives \n\n\\[\n(k-8)(k-32)(k-200)(k-512)=0 .\n\\]\n\nFor a root to be admissible we need the two minima to lie in the\ntwo negative intervals of $f$. \nThe left minimum equals \n\n\\[\nx_1=\\frac{k+188-2\\sqrt{\\Delta}}{4},\n\\]\n\nwhich is **positive** only when \n\n\\[\nk^{2}-376k-5120<0\\qquad\\Longleftrightarrow\\qquad k<389\\ldots .\n\\]\n\nThus $k=512$ is rejected, while $k=8,\\,32,\\,200$ are valid.\n\n--------------------------------------------------------------------\n### 3. The second possibility in (6)\n\nThe alternative equation $3s^{2}-3S_1s+2S_2=0$ together with the condition\n$P(x_1)=0$ leads, after a completely analogous elimination, to the same\nquartic (7). Its admissible positive solutions are again $8,32,200$,\nso no new $k$ appear.\n\n--------------------------------------------------------------------\n### 4. Conclusion\n\nThe function $f$ has its global minimum attained at exactly two positive\npoints precisely for \n\n\\[\nk\\in\\{8,\\;32,\\;200\\}.\n\\]\n\nTherefore the required sum is \n\n\\[\n8+32+200 = \\boxed{240}.\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the four unit squares be \n\n\\[\n\\begin{array}{cc}\nA& B\\\\\nC& D\n\\end{array}\n\\]\n\nand denote by \n\n* \\(a=h_{0,1}\\) \u2013 the middle horizontal segment between \\(A\\) and \\(C\\); \n* \\(b=h_{1,1}\\) \u2013 the middle horizontal segment between \\(B\\) and \\(D\\); \n* \\(c=v_{1,0}\\) \u2013 the middle vertical segment between \\(A\\) and \\(B\\); \n* \\(d=v_{1,1}\\) \u2013 the middle vertical segment between \\(C\\) and \\(D\\).\n\nThe eight outer unit\u2011segments are written as \n\n\\[\n\\begin{aligned}\n&e_1=h_{0,0},\\qquad e_2=v_{0,0},\\\\\n&e_3=v_{2,0},\\qquad e_4=h_{1,0},\\\\\n&e_5=h_{0,2},\\qquad e_6=v_{0,1},\\\\\n&e_7=v_{2,1},\\qquad e_8=h_{1,2}.\n\\end{aligned}\n\\]\n\nAll variables take the value 1 for a red side and 0 for a blue side.\n\n--------------------------------------------------------------------\n### 1. Equations for the squares \n\nEach unit square must have exactly two red sides, so we obtain\n\n\\[\n\\begin{aligned}\nA:&\\;e_1+e_2+a+c=2, \\\\\nB:&\\;e_3+e_4+b+c=2, \\\\\nC:&\\;e_5+e_6+a+d=2, \\\\\nD:&\\;e_7+e_8+b+d=2 .\\qquad (1)\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 2. Fix the interior edges \n\nThe four interior edges \\(a,b,c,d\\) are independent; there are \\(2^4=16\\) possible\nchoices.\nFor a fixed quadruple \\((a,b,c,d)\\) the right\u2011hand side of each equation in (1)\nbecomes \n\n\\[\ns_A=2-(a+c),\\; s_B=2-(b+c),\\; s_C=2-(a+d),\\; s_D=2-(b+d).\n\\]\n\nThe numbers \\(s_A,s_B,s_C,s_D\\) are the required sums of the two\nouter edges belonging to each square.\n\n*If \\(s_i=0\\) or \\(s_i=2\\):* the two outer edges are forced to be\n\\((0,0)\\) or \\((1,1)\\) \u2013 exactly **one** possibility.\n\n*If \\(s_i=1\\):* the outer edges must be \\((0,1)\\) or \\((1,0)\\) \u2013 **two**\npossibilities.\n\nHence, for a given \\((a,b,c,d)\\) the number of admissible colourings of the\nouter edges equals \n\n\\[\n2^{\\,N},\\qquad N=\\#\\{i\\in\\{A,B,C,D\\}:s_i=1\\}.\n\\]\n\nBut \\(s_i=1\\) occurs precisely when the two interior edges of that square sum to\n\\(1\\); i.e.\n\n\\[\nN=[a\\neq c]+[b\\neq c]+[a\\neq d]+[b\\neq d],\\tag{2}\n\\]\n\nwhere \\([P]=1\\) if the statement \\(P\\) is true and \\(0\\) otherwise.\n\n--------------------------------------------------------------------\n### 3. Summing over the interior edges \n\nWrite the sum we need as \n\n\\[\n\\sum_{a,b,c,d\\in\\{0,1\\}} 2^{[a\\neq c]+[b\\neq c]+[a\\neq d]+[b\\neq d]}.\n\\]\n\nFor fixed \\(a,b\\) the contributions of \\(c\\) and \\(d\\) factor:\n\n\\[\n\\bigl(\\sum_{c\\in\\{0,1\\}}2^{[a\\neq c]+[b\\neq c]}\\bigr)^2 .\n\\]\n\nNow compute the inner sum.\n\n*If \\(a=b\\) (either \\((0,0)\\) or \\((1,1)\\)): \n\n\\[\nc=0\\!:\\;[a\\neq c]+[b\\neq c]=0,\\qquad\nc=1\\!:\\;[a\\neq c]+[b\\neq c]=2,\n\\]\nso the sum equals \\(2^{0}+2^{2}=1+4=5\\).\n\n*If \\(a\\neq b\\) (either \\((0,1)\\) or \\((1,0)\\)): \n\n\\[\nc=0\\!:\\;[a\\neq c]+[b\\neq c]=1,\\qquad\nc=1\\!:\\;[a\\neq c]+[b\\neq c]=1,\n\\]\nso the sum equals \\(2^{1}+2^{1}=2+2=4\\).\n\nThus\n\n\\[\n\\begin{aligned}\n\\text{total}&=\n2\\bigl(5^2\\bigr)+2\\bigl(4^2\\bigr) \\\\\n&=2\\cdot25+2\\cdot16\\\\\n&=50+32\\\\\n&=82 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 4. Answer \n\nThere are \n\n\\[\n\\boxed{82}\n\\]\n\ndifferent colourings of the twelve unit segments such that each of the four\nunit squares has exactly two red sides and two blue sides.", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n* \\(O\\) be the centre of \\(\\omega _2\\) (radius \\(15\\)),\n* \\(A\\) be the centre of \\(\\omega _1\\) (radius \\(6\\)),\n* \\(B\\) the internal point of tangency.\n\nPlace \\(O\\) at the origin and take the diameter \\(BC\\) on the \\(x\\)-axis.\n\n\\[\nO=(0,0),\\qquad B=(15,0)\n\\]\n\nBecause \\(\\omega_1\\) is tangent internally at \\(B\\),\n\n\\[\nOA=15-6=9\\qquad\\Longrightarrow\\qquad A=(9,0).\n\\]\n\nSince \\(BC\\) is a diameter of \\(\\omega _2\\),\n\n\\[\nC=(-15,0).\n\\]\n\n\\(AD\\perp BC\\) forces \\(AD\\) to be vertical through \\(A\\); intersecting this line with \\(\\omega _2\\),\n\n\\[\nx=9,\\qquad x^{2}+y^{2}=225\\Longrightarrow y=\\pm 12 .\n\\]\n\nBecause the problem states that \\(D\\) is nearer to the side \\(FG\\) than to \\(EH\\), we take the point above the \\(x\\)-axis:\n\n\\[\nD=(9,12).\n\\]\n\n---------------------------------------------------------------------\n\n### 1. The rectangle \\(EFGH\\)\n\n\\(EF\\perp BC\\); with \\(BC\\) horizontal this makes \\(EF\\) vertical, so the rectangle is axis\u2011aligned.\nLet its half\u2013width be \\(d>0\\) and its half\u2013height be \\(h>0\\). \nSince the rectangle is inscribed in \\(\\omega _1\\) (centre \\(A\\)), its centre must coincide with \\(A\\). \nThus the vertices are \n\n\\[\n\\begin{aligned}\nE&=(9+d,\\,-h), &F&=(9+d,\\,h),\\\\\nG&=(9-d,\\,h), &H&=(9-d,\\,-h).\n\\end{aligned}\n\\]\n\nEach vertex lies on \\(\\omega _1\\): \n\n\\[\n(x-9)^2+y^2=6^2\\quad\\Longrightarrow\\quad d^{\\,2}+h^{\\,2}=36. \\tag{1}\n\\]\n\n---------------------------------------------------------------------\n\n### 2. Equality of the two triangle areas\n\n*Triangle \\(DGF\\)* \nIts base \\(GF\\) is horizontal with length \\(2d\\); the height is the vertical distance from \\(D\\) to the line \\(y=h\\):\n\\[\n[\\,DGF\\,]=\\frac12\\cdot (2d)\\bigl(12-h\\bigr)=d(12-h).\n\\]\n\n*Triangle \\(CHG\\)* \nIts base \\(GH\\) is vertical with length \\(2h\\); the height is the horizontal distance from \\(C\\) to the line \\(x=9-d\\):\n\\[\n[\\,CHG\\,]=\\frac12\\cdot (2h)\\bigl( (9-d)-(-15)\\bigr)=h(24-d).\n\\]\n\nThe condition \\([DGF]=[CHG]\\) gives \n\n\\[\nd(12-h)=h(24-d)\\;\\Longrightarrow\\;12d=24h\\;\\Longrightarrow\\;d=2h. \\tag{2}\n\\]\n\n---------------------------------------------------------------------\n\n### 3. Solving for \\(d\\) and \\(h\\)\n\nSubstituting \\(d=2h\\) into (1):\n\n\\[\n(2h)^2+h^{2}=36\\quad\\Longrightarrow\\quad5h^{2}=36\n\\quad\\Longrightarrow\\quad h^{2}=\\frac{36}{5},\\qquad \nh=\\frac{6}{\\sqrt5},\\qquad d=2h=\\frac{12}{\\sqrt5}.\n\\]\n\n---------------------------------------------------------------------\n\n### 4. Area of the rectangle\n\n\\[\n\\text{Area}= (2d)(2h)=4dh=4(2h)h=8h^{2}=8\\cdot\\frac{36}{5}\n=\\frac{288}{5}.\n\\]\n\nThus the area equals \\(\\dfrac{m}{n}\\) with \\(m=288,\\;n=5\\) (coprime). \n\n\\[\nm+n=288+5=293.\n\\]\n\n\\[\n\\boxed{293}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Factor \n\n\\[\n2025=3^{4}\\cdot5^{2}.\n\\]\n\nA divisor of \\(2025\\) has the form \\(3^{a}5^{b}\\) with \\(0\\le a\\le4,\\ 0\\le b\\le2\\). \nHence \n\n\\[\n|A|=(4+1)(2+1)=15,\n\\qquad\\text{total subsets}=2^{15}=32768 .\n\\]\n\n---\n\n### When does a subset have lcm \\(=2025\\)?\n\nThe lcm of a set of divisors is \\(3^{\\max a}\\cdot5^{\\max b}\\). \nThus the lcm equals \\(2025=3^{4}\\cdot5^{2}\\) **iff**\n\n* at least one element has exponent \\(a=4\\) (a divisor containing \\(3^{4}\\));\n* at least one element has exponent \\(b=2\\) (a divisor containing \\(5^{2}\\)).\n\n---\n\n### Counting the desired subsets \n\nDivisors with \\(a=4\\): \\(3^{4}5^{b}\\ (b=0,1,2)\\) \u2013 3 of them. \nDivisors with \\(b=2\\): \\(3^{a}5^{2}\\ (a=0,\\dots ,4)\\) \u2013 5 of them. \n\nLet \n\n* \\(X\\) = subsets containing **no** divisor with \\(a=4\\); \n* \\(Y\\) = subsets containing **no** divisor with \\(b=2\\).\n\n\\[\n|X|=2^{12}\\quad (\\text{choose any of the other }12\\text{ divisors}),\\qquad\n|Y|=2^{10}\\quad (\\text{choose any of the other }10\\text{ divisors}).\n\\]\n\nDivisors lacking both \\(a=4\\) and \\(b=2\\) have \\(a\\le3,\\ b\\le1\\); there are \\(4\\cdot2=8\\) of them, so\n\n\\[\n|X\\cap Y|=2^{8}.\n\\]\n\nUsing inclusion\u2013exclusion, the number of subsets that contain **both** an \\(a=4\\) divisor and a \\(b=2\\) divisor is \n\n\\[\nN = 2^{15} - 2^{12} - 2^{10} + 2^{8}\n = 32768 - 4096 - 1024 + 256\n = 27904 .\n\\]\n\nThese subsets are precisely the non\u2011empty subsets whose lcm equals \\(2025\\); the empty set is automatically excluded by the inclusion\u2013exclusion count.\n\n---\n\n### Probability\n\n\\[\n\\text{Probability} = \\frac{N}{2^{15}} = \\frac{27904}{32768}\n = \\frac{2^{8}\\cdot 109}{2^{15}}\n = \\frac{109}{128}.\n\\]\n\nThe fraction \\(\\frac{109}{128}\\) is already in lowest terms, so \n\n\\[\nm=109,\\qquad n=128,\\qquad m+n=237.\n\\]\n\n\\[\n\\boxed{237}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\n\\text{chairs}=1,2,\\dots ,16,\\qquad 8\\ \\text{people sit in 8 of them.}\n\\]\n\nThe condition *no person sits next to two other people* means that no three\noccupied chairs are consecutive. \nHence we must count binary strings of length \\(16\\) with exactly eight 1\u2019s\nand no substring \\(111\\).\n\n---\n\n### 1. Blocks of occupied chairs \n\nOccupied chairs appear in blocks of length \\(1\\) or \\(2\\) (a block of length\n\\(3\\) would give a person with two neighbours). \n\nLet \n\n* \\(t\\) = number of blocks of length \\(2\\);\n* \\(s\\) = number of blocks of length \\(1\\).\n\nThen \n\n\\[\ns+2t=8,\\qquad r=s+t \\text{ (total number of blocks)} .\n\\]\n\nHence \n\n\\[\nt=0,1,2,3,4,\\qquad r=8-t\\;(=8,7,6,5,4).\n\\]\n\nFor a fixed \\(t\\) (hence fixed \\(r\\)) we must choose which of the \\(r\\) blocks\nare the double ones:\n\n\\[\n\\text{ways to choose the double blocks}= \\binom{r}{t}= \\binom{r}{8-r}.\n\\]\n\n---\n\n### 2. Placing the blocks among the empty chairs \n\nThere are \\(16-8=8\\) empty chairs. \nBetween the \\(r\\) blocks there must be at least one empty chair, using\n\\(r-1\\) chairs. \n\nThe remaining empty chairs are \n\n\\[\n8-(r-1)=9-r .\n\\]\n\nThese \\(9-r\\) chairs can be placed arbitrarily in the \\(r+1\\) gaps\n(before the first block, between successive blocks, after the last block). \nBy stars\u2011and\u2011bars the number of ways is \n\n\\[\n\\binom{(9-r)+(r+1)-1}{(r+1)-1}= \\binom{9}{r}.\n\\]\n\n---\n\n### 3. Total number of admissible subsets \n\n\\[\n\\begin{aligned}\nN&=\\sum_{t=0}^{4} \\binom{r}{t}\\binom{9}{r},\n\\qquad r=8-t \\\\\n &=\\sum_{r=4}^{8}\\binom{r}{\\,8-r\\,}\\binom{9}{r}.\n\\end{aligned}\n\\]\n\nCompute each term:\n\n\\[\n\\begin{array}{c|c|c|c}\nr & \\binom{r}{8-r} & \\binom{9}{r} & \\text{product}\\\\ \\hline\n8 & 1 & 9 & 9\\\\\n7 & 7 & 36 & 252\\\\\n6 & 15& 84 & 1260\\\\\n5 & 10& 126 & 1260\\\\\n4 & 1 & 126 & 126\n\\end{array}\n\\]\n\nAdding them,\n\n\\[\nN = 9+252+1260+1260+126 = 2907.\n\\]\n\n---\n\n### 4. Remainder modulo \\(1000\\)\n\n\\[\n2907 \\equiv 907 \\pmod{1000}.\n\\]\n\n\\[\n\\boxed{907}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "To solve \n\n\\[\nf(x)=\\sin \\bigl(7\\pi \\,\\sin(5x)\\bigr)=0 ,\\qquad 00\n\\qquad\\Longleftrightarrow\\qquad\n\\Big\\lfloor2.5d+\\frac{b}{10}\\Big\\rfloor \\ge\n\\Big\\lfloor\\frac{8}{3}d\\Big\\rfloor+1 .\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n\n**Only one quarter can ever help**\n\nFor even \\(d\\) we have \\(\\big\\lfloor2.5d\\big\\rfloor =2.5d\\) and\n\\(\\big\\lfloor\\frac{8}{3}d\\big\\rfloor =2.5d+\\big\\lfloor\\frac{d}{6}\\big\\rfloor\\).\nHence the left\u2013hand side of (1) never exceeds the right\u2013hand side,\nso even \\(d\\) never improves the greedy solution.\n\nFor odd \\(d=2k+1\\) we obtain \n\n\\[\n\\Big\\lfloor2.5d+\\frac{b}{10}\\Big\\rfloor\n =5k+2+{\\bf 1}_{\\{b\\ge5\\}},\\qquad\n\\Big\\lfloor\\frac{8}{3}d\\Big\\rfloor\n =5k+2+\\Big\\lfloor\\frac{k+2}{3}\\Big\\rfloor .\n\\]\n\nConsequently \n\n\\[\n\\Big\\lfloor2.5d+\\frac{b}{10}\\Big\\rfloor-\n\\Big\\lfloor\\frac{8}{3}d\\Big\\rfloor\n= {\\bf 1}_{\\{b\\ge5\\}}-\\Big\\lfloor\\frac{k+2}{3}\\Big\\rfloor .\n\\]\n\nThe right\u2011hand side is \\(\\ge 1\\) only when \\(k=0\\) (that is, \\(d=1\\))\nand \\(b\\ge5\\).\nThus the **only** way to improve upon the greedy solution is to\nreplace **exactly one** quarter and have \\(b\\ge5\\).\n\n--------------------------------------------------------------------\n\n**What does \\(b\\ge5\\) mean?**\n\nRecall \\(b\\) is the number of pennies left after taking all possible\nquarters and then all possible dimes. Hence\n\n\\[\nb = N-25q-10a\\in\\{0,1,\\dots ,9\\}.\n\\]\n\nThe condition \\(b\\ge5\\) is equivalent to\n\n\\[\nN-25q\\equiv 5,6,7,8,9\\pmod{10},\n\\]\n\nor, more simply,\n\n\\[\nN\\equiv 5,6,7,8,9\\pmod{25}.\n\\]\n\nIf \\(q=0\\) (i.e. \\(N<25\\)) there is no quarter to replace, so the greedy\nalgorithm is always optimal for \\(1\\le N\\le24\\).\n\nHence **the greedy algorithm fails exactly for the numbers**\n\n\\[\nN\\ge 25 \\quad\\text{with}\\quad N\\equiv 5,6,7,8,9\\pmod{25}.\n\\]\n\n--------------------------------------------------------------------\n\n**Counting the successes**\n\nAll integers \\(1\\le N\\le1000\\): 1000 of them.\n\nNumbers that cause failure:\n\n* The residues \\(5,6,7,8,9\\) each occur\n \\(\\bigl\\lfloor\\frac{1000-r}{25}\\bigr\\rfloor+1 = 40\\) times for\n \\(r=5,6,7,8,9\\).\n Hence \\(5\\times40=200\\) such numbers in \\([1,1000]\\).\n\n* The five smallest ones, \\(5,6,7,8,9\\), are \\(<25\\); they do **not**\n cause failure because no quarter can be replaced.\n\nThus the genuine failures are \\(200-5 = 195\\) numbers.\n\nConsequently the number of values for which the greedy algorithm\nsucceeds is \n\n\\[\n1000-195 = 805.\n\\]\n\n\\[\n\\boxed{805}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the vertices of the regular \\(24\\)-gon be labelled \n\n\\[\n0,1,2,\\dots ,23\\qquad (\\text{mod }24).\n\\]\n\nIf a segment connects vertex \\(i\\) to vertex \\(j\\) then its length is determined only by the\nstep \n\n\\[\nk\\equiv j-i\\pmod{24},\\qquad 1\\le k\\le 12 .\n\\]\n\nAll \\(12\\) segments must have the same length, therefore they all have the same step \\(k\\) (the\nstep \\(24-k\\) gives the same length, so it is enough to consider \\(k=1,2,\\dots ,12\\)).\n\n--------------------------------------------------------------------\n### 1. The graph for a fixed step \\(k\\)\n\nFor a fixed \\(k\\) join each vertex \\(i\\) with the two vertices\n\\(i\\pm k\\). The resulting graph \\(G_k\\) is a union of cycles:\n\n* Let \\(d=\\gcd(k,24)\\).\n* Each cycle has length \\(\\displaystyle L=\\frac{24}{d}\\) and there are \\(d\\) such\n cycles.\n\nIndeed the permutation \\(i\\mapsto i+k\\) on \\(\\{0,\\dots ,23\\}\\) consists of\n\\(d\\) cycles of length \\(L\\).\n\n--------------------------------------------------------------------\n### 2. Perfect matchings of \\(G_k\\)\n\nA required drawing is a perfect matching of \\(G_k\\).\n\n* If a cycle has even length, it has exactly **2** perfect matchings\n (alternating edges).\n* If a cycle has odd length, a perfect matching does **not** exist.\n* The only exceptional case is \\(k=12\\); then each vertex has only one\n neighbour (its opposite) and the whole graph is already a perfect\n matching.\n\nThus, for \\(k\\neq 12\\),\n\n\\[\n\\text{# matchings for }G_k=\n\\begin{cases}\n2^{\\,d} & \\text{if }L\\text{ is even},\\\\[2mm]\n0 & \\text{if }L\\text{ is odd}.\n\\end{cases}\n\\]\n\nSince \\(L\\) is odd exactly when \\(L=3\\), i.e. when \\(d=8\\) (the only such\n\\(k\\) is \\(k=8\\)), we have\n\n\\[\nN(k)=\n\\begin{cases}\n2^{\\gcd(k,24)} & \\gcd(k,24)\\neq 8,\\;k\\neq 12,\\\\[2mm]\n0 & k=8,\\\\[2mm]\n1 & k=12 .\n\\end{cases}\n\\]\n\n--------------------------------------------------------------------\n### 3. Evaluate for \\(k=1,\\dots ,12\\)\n\n\\[\n\\begin{array}{c|c|c|c}\nk & \\gcd(k,24) & \\text{cycles} & N(k)\\\\ \\hline\n1 & 1 & 1\\ \\text{cycle of length }24 & 2\\\\\n2 & 2 & 2\\ \\text{cycles of length }12 & 4\\\\\n3 & 3 & 3\\ \\text{cycles of length }8 & 8\\\\\n4 & 4 & 4\\ \\text{cycles of length }6 & 16\\\\\n5 & 1 & 1\\ \\text{cycle of length }24 & 2\\\\\n6 & 6 & 6\\ \\text{cycles of length }4 & 64\\\\\n7 & 1 & 1\\ \\text{cycle of length }24 & 2\\\\\n8 & 8 & 8\\ \\text{cycles of length }3 & 0\\\\\n9 & 3 & 3\\ \\text{cycles of length }8 & 8\\\\\n10& 2 & 2\\ \\text{cycles of length }12 & 4\\\\\n11& 1 & 1\\ \\text{cycle of length }24 & 2\\\\\n12&12 & 12\\ \\text{edges (pairs)} & 1\n\\end{array}\n\\]\n\n--------------------------------------------------------------------\n### 4. Sum over all possible lengths\n\n\\[\n\\begin{aligned}\n\\sum_{k=1}^{12} N(k)\n&=2+4+8+16+2+64+2+0+8+4+2+1\\\\\n&=113 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{113}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For a base \\(b>9\\),\n\n\\[\n17_{b}=1\\cdot b+7=b+7 ,\\qquad \n97_{b}=9\\cdot b+7=9b+7 .\n\\]\n\nWe need \n\n\\[\nb+7 \\mid 9b+7 .\n\\]\n\nLet \\(d=b+7\\;(>0)\\). Then \\(b=d-7\\) and\n\n\\[\n9b+7 = 9(d-7)+7 = 9d-56 .\n\\]\n\nHence \n\n\\[\nd \\mid (9d-56) \\Longrightarrow d\\mid 56 .\n\\]\n\nSo \\(d\\) must be a positive divisor of \\(56\\). \nSince \\(b>9\\), we have \\(d=b+7>9+7=16\\). \nThe divisors of \\(56\\) larger than \\(16\\) are\n\n\\[\nd=28,\\;56 .\n\\]\n\nCorresponding bases are \n\n\\[\nb=d-7:\n\\begin{cases}\nd=28 \\Rightarrow b=21,\\\\[2mm]\nd=56 \\Rightarrow b=49.\n\\end{cases}\n\\]\n\nBoth satisfy \\(b>9\\) and indeed \n\n\\[\n\\frac{9b+7}{b+7}=7\\;(b=21),\\qquad \n\\frac{9b+7}{b+7}=8\\;(b=49).\n\\]\n\nThus the integer bases are \\(b=21\\) and \\(b=49\\). Their sum is \n\n\\[\n21+49=70.\n\\]\n\n\\[\n\\boxed{70}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution Overview**\n\nThe circle through the midpoints \\(D,E,F\\) of the sides of \\(\\triangle ABC\\) is the **nine\u2011point circle** of \\(\\triangle ABC\\).\nHence \n\n* \\(D,E,F\\) are the vertices of the medial triangle,\n* \\(\\angle D= \\angle A=84^{\\circ},\\ \\angle E= \\angle B=60^{\\circ},\\ \\angle F=\\angle C=36^{\\circ}\\).\n\nSince the nine\u2011point circle is the circumcircle of \\(\\triangle DEF\\),\n\n\\[\n\\widehat{DE}=2\\angle F=2\\cdot 36^{\\circ}=72^{\\circ}.\n\\tag{1}\n\\]\n\nWe must also determine the arcs \\(\\widehat{FG}\\) and \\(\\widehat{HJ}\\).\n\n---------------------------------------------------------------------\n\n### 1. The arc \\(\\widehat{FG}\\)\n\n\\(G\\) is the second intersection of the median \\(BD\\) with the nine\u2011point circle.\nAt point \\(D\\) the chord \\(DG\\) lies on the line \\(BD\\), while the chord \\(DF\\) is parallel to side \\(AC\\) (mid\u2011segment theorem).\n\nTherefore \n\n\\[\n\\angle FDG=\\angle(\\text{line } DF,\\text{line } DG)\n =\\angle(\\,AC ,\\,BD\\,).\n\\]\n\nThe angle between side \\(AC\\) and the median from \\(B\\) can be read directly from the triangle:\n\\( \\angle(\\,AC ,\\,BD\\,)=\\angle C=36^{\\circ}\\).\n\nConsequently \n\n\\[\n\\widehat{FG}=2\\angle FDG=2\\cdot36^{\\circ}=72^{\\circ}.\n\\tag{2}\n\\]\n\n---------------------------------------------------------------------\n\n### 2. The arc \\(\\widehat{HJ}\\)\n\n\\(H\\) and \\(J\\) are the second intersections of the sides \\(AC\\) and \\(AB\\) with the nine\u2011point circle.\nThus the two secants through the exterior point \\(A\\) intersect the circle at the pairs \\(\\{F,J\\}\\) and \\(\\{E,H\\}\\).\n\nFor an exterior point the angle formed by two secants equals half the **difference** of the intercepted arcs:\n\n\\[\n\\angle BAC=\\frac12\\bigl(\\widehat{JH}-\\widehat{FE}\\bigr).\n\\tag{3}\n\\]\n\nWe already know the arc \\(\\widehat{FE}\\) of the nine\u2011point circle:\n\\[\n\\widehat{FE}=2\\angle D =2\\cdot 84^{\\circ}=168^{\\circ}.\n\\tag{4}\n\\]\n\nPlugging \\(\\angle BAC=84^{\\circ}\\) and (4) into (3) gives \n\n\\[\n84^{\\circ}=\\frac12\\bigl(\\widehat{JH}-168^{\\circ}\\bigr)\n\\Longrightarrow \\widehat{JH}=336^{\\circ}.\n\\]\n\nThe **minor** arc \\(HJ\\) is the complement of \\(336^{\\circ}\\) on the circle:\n\n\\[\n\\widehat{HJ}=360^{\\circ}-336^{\\circ}=24^{\\circ}.\n\\tag{5}\n\\]\n\n---------------------------------------------------------------------\n\n### 3. Computing the required sum\n\nFrom (1), (2) and (5)\n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n&=72^{\\circ}+2\\cdot24^{\\circ}+3\\cdot72^{\\circ} \\\\\n&=72^{\\circ}+48^{\\circ}+216^{\\circ}\\\\\n&=336^{\\circ}.\n\\end{aligned}\n\\]\n\n---------------------------------------------------------------------\n\n\\[\n\\boxed{336}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The nine players are distinct, so for a given triple \\((c,v,s)\\) (numbers of chocolate, vanilla, and strawberry cones) the number of assignments is \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\nWe must count all triples of positive integers satisfying \n\n\\[\nc+v+s = 9,\\qquad c>v>s\\ge 1 .\n\\]\n\n---\n\n### Find the possible triples \\((c,v,s)\\)\n\nBecause the three numbers are distinct and sum to 9, we list the partitions of 9 into three distinct positive parts:\n\n\\[\n\\begin{aligned}\n9 &= 6+2+1,\\\\\n9 &= 5+3+1,\\\\\n9 &= 4+3+2 .\n\\end{aligned}\n\\]\n\nThese are the only triples with strict descending order, so \n\n\\[\n(c,v,s) \\in \\{(6,2,1),\\;(5,3,1),\\;(4,3,2)\\}.\n\\]\n\n---\n\n### Count assignments for each triple\n\n\\[\n\\begin{aligned}\n(6,2,1):\\quad &\\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[4pt]\n(5,3,1):\\quad &\\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[4pt]\n(4,3,2):\\quad &\\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\n---\n\n### Total number of assignments\n\n\\[\nN = 252 + 504 + 1260 = 2016.\n\\]\n\n---\n\n### Remainder modulo \\(1000\\)\n\n\\[\n2016 \\equiv 16 \\pmod{1000}.\n\\]\n\n\\[\n\\boxed{16}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Step 1. What determines the number of regions?** \n\nIf we draw line\u2011segments in a disc and no three of them meet in a common interior point, then each new segment splits one existing region for every interior intersection it makes, plus one more region for the segment itself. \nHence \n\n\\[\n\\#\\text{regions}=1+(\\#\\text{segments})+(\\#\\text{interior intersection points}).\n\\]\n\nWe have \n\n* 2 diameters,\n* 25 random chords,\n* total segments \\(=27\\).\n\nSo we need the **expected number of interior intersections**.\n\n---------------------------------------------------------------------\n\n**Step 2. Intersections that are certain**\n\nThe two diameters intersect at the centre \u21d2 one interior intersection.\n\n---------------------------------------------------------------------\n\n**Step 3. Intersections of a chord with the diameters**\n\nA chord is drawn by picking two points on the circle that lie in **different quadrants**.\n\n*If the two quadrants are adjacent* (e.g. quadrant\u202fI and\u202fII), the chord crosses **exactly one** diameter. \n*If the two quadrants are opposite* (e.g. quadrant\u202fI and\u202fIII), the chord crosses **both** diameters.\n\nThe unordered pair of distinct quadrants is uniformly chosen among the \\(\\binom{4}{2}=6\\) possibilities:\n\n* 4 adjacent pairs\u2003\u2192\u2003probability \\(4/6=2/3\\);\n* 2 opposite pairs\u2003\u2192\u2003probability \\(2/6=1/3\\).\n\nHence for one random chord\n\n\\[\nE[\\hbox{diameter\u2011intersections}]\n =\\frac23\\cdot1+\\frac13\\cdot2=\\frac43 .\n\\]\n\nFor the 25 chords \n\n\\[\nE[I_{\\text{chord\u2013diameter}}]=25\\cdot\\frac43=\\frac{100}{3}.\n\\]\n\n---------------------------------------------------------------------\n\n**Step 4. Intersections between two random chords**\n\nLet the two chords be \\(AB\\) and \\(CD\\). \nWrite \\(L\\) for the clockwise length of the arc from \\(A\\) to \\(B\\) (so \\(0\\le L\\le2\\pi\\)). \nLet \\(L_i^{(1)}\\) be the length of that arc inside quadrant \\(i\\) (\\(i=1,\\dots ,4\\)), and\n\\(L_i^{(2)}=\\frac{\\pi}{2}-L_i^{(1)}\\) the length of the complementary arc inside the same quadrant.\n\nFor a given chord \\(AB\\)\n\n* the probability that a random chord \\(CD\\) meets \\(AB\\) **and** has its endpoints in different quadrants is \n\n\\[\np_{\\text{int}}(A,B)=\n\\frac{L(2\\pi-L)-\\displaystyle\\sum_{i=1}^{4}L_i^{(1)}L_i^{(2)}}{2\\pi^{2}} .\n\\tag{1}\n\\]\n\n(The numerator is the area of the product set\n\\(\\{(C,D):C\\in\\text{arc}_1,D\\in\\text{arc}_2\\}\\) minus the part where \\(C\\) and \\(D\\) fall in the same quadrant.)\n\nDefine \n\n\\[\nQ(A,B)=L(2\\pi-L)-\\sum_{i=1}^{4}L_i^{(1)}L_i^{(2)} .\n\\]\n\nThen \\(p_{\\text{int}}(A,B)=Q(A,B)/(2\\pi^{2})\\).\n\n---------------------------------------------------------------------\n\n**Step 5. Averaging \\(Q\\)** \n\nPut the circle\u2019s total length as \\(4d\\) with a quadrant length \\(d=\\pi/2\\).\nWrite the clockwise length as a multiple of \\(d\\): \\(t=L/d\\in[0,4]\\).\n\nFor a fixed \\(t\\) and a uniformly random starting point of the arc,\nthe expected value of \\(\\sum_i (L_i^{(1)})^{2}\\) (the sum of squares of the pieces of the arc) is\n\n\\[\nh(t)=\n\\begin{cases}\nt^{2}-\\dfrac{t^{3}}{3}, & 0\\le t\\le 1,\\\\[4pt]\nt-\\dfrac13, & 1\\le t\\le 4 .\n\\end{cases}\n\\]\n\nConsequently \n\n\\[\nE\\!\\left[\\sum_i L_i^{(1)}L_i^{(2)}\\right]\n =\\frac{\\pi}{2}E[L]-E\\!\\left[\\sum_i(L_i^{(1)})^{2}\\right]\n =\\frac{\\pi^{2}}{2}-\\frac{27\\pi^{2}}{64}\n =\\frac{5\\pi^{2}}{64}.\n\\]\n\nFrom this we obtain the unconditional expectation\n\n\\[\nE[Q]=E\\!\\bigl[L(2\\pi-L)\\bigr]-E\\!\\Bigl[\\sum_i L_i^{(1)}L_i^{(2)}\\Bigr]\n =\\frac{2}{3}\\pi^{2}-\\frac{5}{64}\\pi^{2}\n =\\frac{113}{192}\\pi^{2}.\n\\tag{2}\n\\]\n\n---------------------------------------------------------------------\n\n**Step 6. Conditioning on \u201cdifferent quadrants\u2019\u2019 for the first chord**\n\nIf the first chord\u2019s endpoints lie in the *same* quadrant (probability \\(1/4\\)),\nthen \\(Q\\) simplifies to \\(Q=\\frac{3\\pi}{2}L\\). \nBecause the absolute difference of two points inside a quadrant has mean \\(d/3=\\pi/6\\),\n\n\\[\nE[Q\\mid\\text{same quadrant}]=\\frac{3\\pi}{2}\\cdot\\frac{\\pi}{6}\n =\\frac{\\pi^{2}}{4}.\n\\]\n\nHence \n\n\\[\nE[Q\\;{\\bf 1}_{\\text{different quadrants}}]\n =E[Q]-\\frac14\\cdot\\frac{\\pi^{2}}{4}\n =\\frac{113}{192}\\pi^{2}-\\frac{\\pi^{2}}{16}\n =\\frac{101}{192}\\pi^{2}. \\tag{3}\n\\]\n\n---------------------------------------------------------------------\n\n**Step 7. Probability that two *valid* chords intersect**\n\nFrom (1) and (3),\n\n\\[\n\\boxed{\nP(\\text{intersection } \\&\\; AB\\text{ valid}\\; \\&\\; CD\\text{ valid})\n =\\frac{E[Q\\,{\\bf 1}_{\\text{different quadrants}}]}{2\\pi^{2}}\n =\\frac{101}{384}.\n}\n\\]\n\nThe event \u201cboth chords are valid\u2019\u2019 occurs with probability \\((3/4)^{2}=9/16\\). \nTherefore the conditional probability that two random valid chords intersect is\n\n\\[\nP_{\\text{int}}=\n\\frac{101/384}{9/16}= \\frac{101}{216}\\approx0.4676.\n\\tag{4}\n\\]\n\n---------------------------------------------------------------------\n\n**Step 8. Expected number of chord\u2013chord intersections**\n\n\\[\nE[I_{\\text{chord\u2013chord}}]\n =\\binom{25}{2}\\;P_{\\text{int}}\n =300\\cdot\\frac{101}{216}\n =\\frac{2525}{18}.\n\\]\n\n---------------------------------------------------------------------\n\n**Step 9. Total expected interior intersections**\n\n\\[\n\\begin{aligned}\nE[I] &=\n\\underbrace{1}_{\\text{diameters}}+\n\\underbrace{\\frac{100}{3}}_{\\text{chord\u2013diameter}}+\n\\underbrace{\\frac{2525}{18}}_{\\text{chord\u2013chord}} \\\\[4pt]\n&= \\frac{18+600+2525}{18}\n =\\frac{3143}{18}.\n\\end{aligned}\n\\]\n\n---------------------------------------------------------------------\n\n**Step 10. Expected number of regions**\n\n\\[\n\\begin{aligned}\nE[\\#\\text{regions}]\n&=1+(\\#\\text{segments})+E[I] \\\\\n&=1+27+\\frac{3143}{18}\\\\[4pt]\n&=28+\\frac{3143}{18}\n =\\frac{504+3143}{18}\n =\\boxed{\\frac{3647}{18}}\\; \\approx 202.6 .\n\\end{aligned}\n\\]\n\nThus, on average Alex\u2019s 27 line segments partition the disk into \\(\\displaystyle \\frac{3647}{18}\\) regions.", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\n---\n\n### 1. Factor the quadratic \n\nLook for integers \\(a,b,c,d\\) such that \n\n\\[\n(ax+by)(cx+dy)=12x^{2}-xy-6y^{2}.\n\\]\n\nWe need \n\n\\[\nac=12,\\qquad bd=-6,\\qquad ad+bc=-1 .\n\\]\n\nTaking \\(a=4,\\;c=3\\) (since \\(4\\cdot 3=12\\)) and trying \\(b=-3,\\;d=2\\) gives \n\n\\[\nbd=(-3)(2)=-6,\\qquad ad+bc=4\\cdot2+3\\cdot(-3)=8-9=-1.\n\\]\n\nHence \n\n\\[\n12x^{2}-xy-6y^{2}=(4x-3y)(3x+2y).\n\\]\n\nSo the original equation is equivalent to \n\n\\[\n(4x-3y)(3x+2y)=0.\n\\]\n\nThus any integer solution must satisfy one of the two linear equations \n\n\\[\n\\boxed{4x-3y=0}\\qquad\\text{or}\\qquad\\boxed{3x+2y=0}.\n\\]\n\n---\n\n### 2. Solve each linear equation in integers \n\n**(i) \\(4x-3y=0\\).** \n\n\\(4x=3y\\Rightarrow y= \\frac{4}{3}x\\). \nSince \\(\\gcd(4,3)=1\\), write \\(x=3k,\\;y=4k\\) for some integer \\(k\\).\n\nBoth coordinates must satisfy \\(-100\\le x,y\\le 100\\):\n\n\\[\n-100\\le 3k\\le 100 \\Longrightarrow -\\frac{100}{3}\\le k\\le \\frac{100}{3},\n\\qquad\n-100\\le 4k\\le 100 \\Longrightarrow -25\\le k\\le 25.\n\\]\n\nThe tighter bound is \\(-25\\le k\\le 25\\). \nHence there are \n\n\\[\n25-(-25)+1 = 51\n\\]\n\nsolutions from this family.\n\n---\n\n**(ii) \\(3x+2y=0\\).** \n\n\\(3x=-2y\\Rightarrow x=-\\frac{2}{3}y\\). \nAgain \\(\\gcd(3,2)=1\\), so write \\(y=3m,\\;x=-2m\\) for some integer \\(m\\).\n\nBounds:\n\n\\[\n-100\\le -2m\\le 100 \\Longrightarrow -50\\le m\\le 50,\n\\qquad\n-100\\le 3m\\le 100 \\Longrightarrow -\\frac{100}{3}\\le m\\le \\frac{100}{3}\n\\Longrightarrow -33\\le m\\le 33.\n\\]\n\nThus \\(-33\\le m\\le 33\\), giving \n\n\\[\n33-(-33)+1 = 67\n\\]\n\nsolutions from this family.\n\n---\n\n### 3. Remove the double\u2011counted solution \n\nThe two families intersect only when both equations hold, i.e. when \n\n\\[\n4x-3y=0\\;\\text{and}\\;3x+2y=0\\Longrightarrow (x,y)=(0,0).\n\\]\n\nSo \\((0,0)\\) has been counted twice. \n\nTotal distinct ordered pairs:\n\n\\[\n51+67-1 = 117.\n\\]\n\n---\n\n\\[\n\\boxed{117}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(0,c)\n\\]\n\nwith \\(\\angle A=90^{\\circ}\\) and \\(BC=38\\Rightarrow b^{2}+c^{2}=38^{2}=1444\\).\n\n---\n\n### 1. Locating \\(K\\) and \\(L\\)\n\n\\(AK=BK=14\\). \nThe circles \\(\\odot(A,14)\\) and \\(\\odot(B,14)\\) intersect at the interior point \n\n\\[\nK=\\Bigl(\\frac b2,\\; \\sqrt{196-\\Bigl(\\frac b2\\Bigr)^2}\\Bigr).\n\\]\n\nSimilarly \\(AL=CL=14\\) gives \n\n\\[\nL=\\Bigl(\\sqrt{196-\\Bigl(\\frac c2\\Bigr)^2},\\; \\frac c2\\Bigr).\n\\]\n\nSince \\(AK=AL=KL=14\\), points \\(A,K,L\\) form an equilateral triangle.\nPut \n\n\\[\nK=(14\\cos\\theta,14\\sin\\theta),\\qquad \nL=(14\\cos(\\theta+60^\\circ),14\\sin(\\theta+60^\\circ)).\n\\]\n\nUsing \\(BK=14\\) and \\(CL=14\\),\n\n\\[\nb=28\\cos\\theta,\\qquad c=28\\sin(\\theta+60^\\circ). \\tag{1}\n\\]\n\n---\n\n### 2. Determining \\(\\theta\\)\n\nFrom \\(b^2+c^2=1444\\),\n\n\\[\n\\cos^{2}\\theta+\\sin^{2}(\\theta+60^\\circ)=\\frac{1444}{28^{2}}\n =\\frac{361}{196}=\\Bigl(\\frac{19}{14}\\Bigr)^{2}.\n\\]\n\nUsing \\(\\cos^2x=\\frac{1+\\cos2x}{2},\\ \\sin^2x=\\frac{1-\\cos2x}{2}\\),\n\n\\[\n\\frac{2+\\cos2\\theta-\\cos(2\\theta+120^\\circ)}2\n =\\frac{361}{196}.\n\\]\n\nSimplifying gives \n\n\\[\n\\cos2\\theta-\\cos(2\\theta+120^\\circ)=\\frac{165}{98}.\n\\]\n\nSince \\(\\cos A-\\cos B=-2\\sin\\frac{A+B}{2}\\sin\\frac{A-B}{2}\\),\n\n\\[\n\\sqrt3\\sin(2\\theta+60^\\circ)=\\frac{165}{98}\n \\Longrightarrow \\sin(2\\theta+60^\\circ)=\\frac{55\\sqrt3}{98}.\n\\]\n\nHence \n\n\\[\n\\cos(2\\theta+60^\\circ)=\\frac{23}{98},\\qquad \n\\sin(2\\theta+60^\\circ)=\\frac{55\\sqrt3}{98}.\n\\]\n\nLet \\(\\phi=2\\theta+60^\\circ\\). Then\n\n\\[\n\\cos\\phi=\\frac{23}{98},\\qquad \\sin\\phi=\\frac{55\\sqrt3}{98}.\n\\]\n\nCompute \\(\\cos(\\phi-60^\\circ)\\) and \\(\\cos(\\phi+60^\\circ)\\):\n\n\\[\n\\cos(\\phi-60^\\circ)=\\frac{47}{49},\\qquad\n\\cos(\\phi+60^\\circ)=-\\frac{71}{98}.\n\\]\n\nNow\n\n\\[\n\\cos\\theta=\\sqrt{\\frac{1+\\cos(\\phi-60^\\circ)}2}\n =\\sqrt{\\frac{1+\\frac{47}{49}}2}\n =\\sqrt{\\frac{48}{49}}=\\frac{4\\sqrt3}{7},\n\\]\n\n\\[\n\\sin(\\theta+60^\\circ)=\\sqrt{\\frac{1-\\cos(\\phi+60^\\circ)}2}\n =\\sqrt{\\frac{1+\\frac{71}{98}}2}\n =\\sqrt{\\frac{169}{196}}=\\frac{13}{14}.\n\\]\n\nUsing (1),\n\n\\[\nb=28\\cos\\theta=28\\cdot\\frac{4\\sqrt3}{7}=16\\sqrt3,\n\\qquad\nc=28\\sin(\\theta+60^\\circ)=28\\cdot\\frac{13}{14}=26.\n\\]\n\nThus \n\n\\[\nAB=16\\sqrt3,\\qquad AC=26,\\qquad BC=38.\n\\]\n\nConsequently \n\n\\[\nK=\\Bigl(\\frac{b}{2},\\sqrt{196-\\Bigl(\\frac b2\\Bigr)^2}\\Bigr)\n =\\bigl(8\\sqrt3,\\;2\\bigr),\\qquad\nL=\\Bigl(\\sqrt{196-\\Bigl(\\frac c2\\Bigr)^2},\\frac c2\\Bigr)\n =\\bigl(3\\sqrt3,\\;13\\bigr).\n\\]\n\n---\n\n### 3. Area of \\(BKLC\\)\n\nUsing the shoelace formula for vertices \n\n\\[\nB=(16\\sqrt3,0),\\; K=(8\\sqrt3,2),\\; L=(3\\sqrt3,13),\\; C=(0,26),\n\\]\n\n\\[\n\\begin{aligned}\n\\sum x_iy_{i+1}&=16\\sqrt3\\cdot2+8\\sqrt3\\cdot13+3\\sqrt3\\cdot26+0\\cdot0\\\\\n &=214\\sqrt3,\\\\[2mm]\n\\sum y_ix_{i+1}&=0\\cdot8\\sqrt3+2\\cdot3\\sqrt3+13\\cdot0+26\\cdot16\\sqrt3\\\\\n &=422\\sqrt3.\n\\end{aligned}\n\\]\n\nHence\n\n\\[\n\\text{Area}(BKLC)=\\frac12|214\\sqrt3-422\\sqrt3|=104\\sqrt3.\n\\]\n\n---\n\nThus the area of \\(BKLC\\) is \\(104\\sqrt3\\), so \n\n\\[\n\\boxed{104}.\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the trapezoid have parallel sides (bases) \\(r\\) and \\(s\\) \\((r\\neq s)\\), the equal legs \\(L\\), and height \\(h\\).\n\n---\n\n### 1. Height from the incircle \n\nThe circle of radius \\(3\\) is tangent to the two parallel sides, so the distance between those sides equals the sum of the distances from the centre to each side:\n\n\\[\nh = 3+3 = 6 .\n\\]\n\n---\n\n### 2. Sum of the bases from the area \n\n\\[\n\\text{Area}= \\frac{r+s}{2}\\,h = 72\n\\quad\\Longrightarrow\\quad\n\\frac{r+s}{2}\\cdot 6 = 72 \\implies r+s = 24 .\n\\]\n\n---\n\n### 3. Relation of the legs (tangential quadrilateral) \n\nA quadrilateral has an incircle iff the sums of opposite sides are equal. \nFor the trapezoid the opposite sides are the two bases and the two legs, so\n\n\\[\nr+s = L+L \\;\\Longrightarrow\\; L =\\frac{r+s}{2}=12 .\n\\]\n\nThus each leg has length \\(L=12\\).\n\n---\n\n### 4. Difference of the bases from the leg length \n\nBecause the trapezoid is isosceles, each leg together with the height forms a right triangle whose horizontal leg is \\(\\dfrac{|s-r|}{2}\\):\n\n\\[\nL^{2}=h^{2}+ \\left(\\frac{s-r}{2}\\right)^{2}.\n\\]\n\nInsert \\(L=12,\\;h=6\\):\n\n\\[\n12^{2}=6^{2}+ \\left(\\frac{s-r}{2}\\right)^{2}\n\\Longrightarrow 144-36 = \\left(\\frac{s-r}{2}\\right)^{2}\n\\Longrightarrow \\left(\\frac{s-r}{2}\\right)^{2}=108.\n\\]\n\nHence \n\n\\[\n|s-r| = 2\\sqrt{108}=12\\sqrt3 .\n\\]\n\nAssume \\(s>r\\); then \\(s-r=12\\sqrt3\\).\n\n---\n\n### 5. Solve for \\(r\\) and \\(s\\)\n\n\\[\n\\begin{cases}\nr+s = 24,\\\\\ns-r = 12\\sqrt3.\n\\end{cases}\n\\qquad\\Longrightarrow\\qquad\n\\begin{aligned}\ns &= 12+6\\sqrt3,\\\\\nr &= 12-6\\sqrt3.\n\\end{aligned}\n\\]\n\n---\n\n### 6. Compute \\(r^{2}+s^{2}\\)\n\n\\[\n\\begin{aligned}\nr^{2}+s^{2} &= (12-6\\sqrt3)^{2}+(12+6\\sqrt3)^{2} \\\\\n&= \\bigl(144-144\\sqrt3+108\\bigr)+\\bigl(144+144\\sqrt3+108\\bigr) \\\\\n&= 252-144\\sqrt3+252+144\\sqrt3 \\\\\n&= 504.\n\\end{aligned}\n\\]\n\n---\n\n\\[\n\\boxed{504}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For an 8\u2011digit number using each of the digits \\(1,2,\\dots ,8\\) exactly once \n\n\\[\n22=2\\cdot11\n\\]\n\nso the number must be divisible by \\(2\\) **and** by \\(11\\).\n\n---\n\n### 1. Divisibility by \\(2\\)\n\nThe units digit must be even, i.e. one of \\(\\{2,4,6,8\\}\\).\n\n---\n\n### 2. Divisibility by \\(11\\)\n\nFor an 8\u2011digit number \\(a_1a_2\\ldots a_8\\),\n\n\\[\n(a_1+a_3+a_5+a_7)-(a_2+a_4+a_6+a_8)\\equiv 0\\pmod{11}.\n\\]\n\nLet \n\n\\[\nS_{\\text{odd}}=a_1+a_3+a_5+a_7,\\qquad \nS_{\\text{even}}=a_2+a_4+a_6+a_8 .\n\\]\n\nSince the digits \\(1\\) through \\(8\\) sum to \\(36\\),\n\n\\[\nS_{\\text{odd}}+S_{\\text{even}}=36\\qquad\\text{and}\\qquad \nS_{\\text{odd}}-S_{\\text{even}}\\equiv0\\pmod{11}.\n\\]\n\nThus \n\n\\[\n2S_{\\text{odd}}\\equiv36\\equiv3\\pmod{11}\\Longrightarrow\nS_{\\text{odd}}\\equiv7\\pmod{11}.\n\\]\n\nThe possible values of \\(S_{\\text{odd}}\\) (sum of four distinct digits from \\(1\\)\u2013\\(8\\)) lie between \\(10\\) and \\(26\\). \nThe only value in this interval congruent to \\(7\\pmod{11}\\) is \\(18\\).\n\nHence\n\n\\[\nS_{\\text{odd}}=S_{\\text{even}}=18 .\n\\]\n\nSo the four digits placed in the odd positions must sum to \\(18\\).\n\n---\n\n### 3. 4\u2011digit subsets with sum \\(18\\)\n\nAll 4\u2011element subsets of \\(\\{1,\\dots ,8\\}\\) whose sum is \\(18\\) are \n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are exactly \\(8\\) such subsets. \nEach contains **exactly two even digits** (the even digits are \\(2,4,6,8\\)).\n\n---\n\n### 4. Arranging the digits\n\n* Choose one of the 8 subsets for the odd positions.\n* Permute its four digits among the odd places \\((1,3,5,7)\\) \u2013 \\(4! = 24\\) ways.\n* The remaining four digits occupy the even places \\((2,4,6,8)\\). \n\n The units place (position\u202f8) must be even. \n Since the complementary set also has exactly two even digits, we may\n \\[\n \\text{choose the even digit for position\u202f8 in }2\\text{ ways,}\n \\]\n then arrange the other three digits in positions \\(2,4,6\\) in \\(3! = 6\\) ways.\n\nHence for a given subset the number of valid permutations is \n\n\\[\n24 \\times (2 \\times 6)=24 \\times 12 = 288 .\n\\]\n\nWith \\(8\\) possible subsets,\n\n\\[\nN = 8 \\times 288 = 2304 .\n\\]\n\n---\n\n### 5. Required difference\n\n\\[\nN-2025 = 2304-2025 = 279 .\n\\]\n\n\\[\n\\boxed{279}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The first equation \n\n\\[\n|25+20i-z|=5\n\\]\n\ndescribes the circle \n\n\\[\n\\text{Center }C=(25,20),\\qquad\\text{radius }R=5 .\n\\]\n\nThe second equation \n\n\\[\n|z-4-k|=|z-3i-k|\n\\]\n\nstates that the distance from \\(z\\) to the point \n\n\\[\nA=4+k\\;(=k+4+0i)\n\\]\n\nequals its distance to the point \n\n\\[\nB=3i+k\\;(=k+0i+3i).\n\\]\n\nHence the locus of points satisfying the second condition is the **perpendicular bisector** of the segment \\(\\overline{AB}\\).\n\n---\n\n### 1. Equation of the perpendicular bisector\n\nCoordinates:\n\n\\[\nA=(k+4,0),\\qquad B=(k,3).\n\\]\n\nMidpoint \n\n\\[\nM=\\Big(\\frac{k+4+k}{2},\\frac{0+3}{2}\\Big)=\\Big(k+2,\\frac32\\Big).\n\\]\n\nSlope of \\(\\overline{AB}\\):\n\n\\[\n\\frac{3-0}{k-(k+4)}=\\frac{3}{-4}=-\\frac34 .\n\\]\n\nTherefore the slope of the perpendicular bisector is the negative reciprocal,\n\n\\[\nm=\\frac{4}{3}.\n\\]\n\nUsing point\u2013slope form through \\(M\\):\n\n\\[\ny-\\frac32=\\frac{4}{3}(x-(k+2)).\n\\]\n\nMultiplying by \\(6\\),\n\n\\[\n6y-9=8x-8k-16\\qquad\\Longrightarrow\\qquad 8x-6y=8k+7.\n\\]\n\nThus the line is \n\n\\[\nL:\\;8x-6y=8k+7 .\n\\]\n\n---\n\n### 2. Tangency condition\n\nThe system has **exactly one** solution \\(z\\) when the line \\(L\\) is tangent to the circle. \nThe distance from the center \\(C=(25,20)\\) to \\(L\\) must equal the radius \\(5\\).\n\nFor a line \\(Ax+By+C=0\\), the distance from \\((x_0,y_0)\\) is \n\n\\[\nd=\\frac{|Ax_0+By_0+C|}{\\sqrt{A^2+B^2}} .\n\\]\n\nWrite \\(L\\) as \\(8x-6y-(8k+7)=0\\). Then\n\n\\[\nd=\\frac{|8\\cdot25-6\\cdot20-(8k+7)|}{\\sqrt{8^2+(-6)^2}}\n =\\frac{|200-120-8k-7|}{\\sqrt{64+36}}\n =\\frac{|73-8k|}{10}.\n\\]\n\nSet \\(d=R=5\\):\n\n\\[\n\\frac{|73-8k|}{10}=5 \\;\\Longrightarrow\\; |73-8k|=50 .\n\\]\n\nHence \n\n\\[\n73-8k=50 \\quad\\text{or}\\quad 73-8k=-50.\n\\]\n\nSolving:\n\n\\[\n\\begin{aligned}\n73-8k=50 &\\Rightarrow 8k=23 \\Rightarrow k=\\frac{23}{8},\\\\[2mm]\n73-8k=-50 &\\Rightarrow 8k=123 \\Rightarrow k=\\frac{123}{8}.\n\\end{aligned}\n\\]\n\nBoth values give a line tangent to the circle, so the system has exactly one complex solution for each.\n\n---\n\n### 3. Sum of all possible \\(k\\)\n\n\\[\n\\frac{23}{8}+\\frac{123}{8}=\\frac{146}{8}=\\frac{73}{4}.\n\\]\n\nWrite \\(\\frac{73}{4}\\) as \\(\\frac{m}{n}\\) with \\(\\gcd(m,n)=1\\); here \\(m=73,\\;n=4\\).\n\n\\[\nm+n=73+4=77.\n\\]\n\n\\[\n\\boxed{77}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The recurrence \n\n\\[\nx_{k+1}= \\frac{1}{3}\\Bigl(x_k+\\frac{1}{x_k}-1\\Bigr)\n\\]\n\ncan be rewritten as \n\n\\[\nx_{k+1}= \\frac{x_k^2-x_k+1}{3x_k}.\n\\]\n\n---\n\n### 1. A convenient change of variables \n\nDefine \n\n\\[\nt_k=\\frac{2x_k-1}{x_k+1}\\qquad\\Longleftrightarrow\\qquad \nx_k=\\frac{b_k+a_k}{2b_k-a_k},\n\\]\n\nwhere \\(a_k,b_k\\) are integers defined below. \n\nFrom the definition \n\n\\[\nt_{k+1}=t_k\\bigl(t_k-1\\bigr),\\qquad t_1=\\frac{13}{12}.\n\\]\n\n---\n\n### 2. Integer sequences \n\nWrite \\(t_k=\\dfrac{a_k}{b_k}\\) in lowest terms. \nFrom \\(t_{k+1}=t_k(t_k-1)\\) we obtain \n\n\\[\na_{k+1}=a_k\\bigl(a_k-b_k\\bigr),\\qquad \nb_{k+1}=b_k^2,\\qquad a_1=13,\\;b_1=12 .\n\\]\n\nThus \n\n\\[\nb_k=12^{\\,2^{\\,k-1}} .\n\\]\n\nBecause \\(a_k\\) is always odd and not a multiple of \\(3\\), \\(\\gcd(a_k,b_k)=1\\) for all \\(k\\).\n\n---\n\n### 3. Expressing \\(x_k\\) \n\nUsing \\(x_k=\\dfrac{b_k+a_k}{2b_k-a_k}\\) we get \n\n\\[\nm_k=b_k+a_k,\\qquad n_k=2b_k-a_k,\n\\]\nso that \n\n\\[\nm_k+n_k = (b_k+a_k)+(2b_k-a_k)=3b_k .\n\\]\n\nHence for any \\(k\\),\n\n\\[\nm_k+n_k = 3\\cdot 12^{\\,2^{\\,k-1}} .\n\\]\n\n---\n\n### 4. The required term \n\nFor \\(k=2025\\),\n\n\\[\nm+n = 3\\cdot 12^{\\,2^{\\,2024}} .\n\\]\n\nWe need this number modulo \\(1000\\).\n\n---\n\n### 5. Computing \\(3\\cdot12^{2^{2024}}\\pmod{1000}\\)\n\nSince \\(1000=8\\cdot125\\), work modulo \\(8\\) and \\(125\\).\n\n*Modulo\u202f8*:\u2003\\(12\\equiv4\\pmod8\\) and \\(4^2\\equiv0\\pmod8\\); with exponent \\(2^{2024}>1\\),\n\n\\[\n12^{2^{2024}}\\equiv0\\pmod8\\Longrightarrow\n3\\cdot12^{2^{2024}}\\equiv0\\pmod8 .\n\\]\n\n*Modulo\u202f125*:\u2003\\(\\gcd(12,125)=1\\), \\(\\phi(125)=100\\). \nReduce the exponent modulo\u202f100:\n\n\\[\n2^{2024}\\equiv 2^{4}=16\\pmod{100}\n\\]\n(because \\(2^{2024}\\equiv16\\pmod{100}\\)). \nHence \n\n\\[\n12^{2^{2024}}\\equiv12^{16}\\pmod{125}.\n\\]\n\nCompute:\n\\[\n12^2\\equiv19,\\quad\n12^4\\equiv19^2\\equiv111,\\quad\n12^8\\equiv111^2\\equiv71,\\quad\n12^{16}\\equiv71^2\\equiv41\\pmod{125}.\n\\]\n\nThus \n\n\\[\n3\\cdot12^{2^{2024}}\\equiv3\\cdot41=123\\pmod{125}.\n\\]\n\nNow solve \n\n\\[\nR\\equiv0\\pmod8,\\qquad R\\equiv123\\pmod{125}.\n\\]\n\nWrite \\(R=125a+123\\). Mod\u202f8:\n\n\\[\n125a+123\\equiv5a+3\\equiv0\\pmod8\\Longrightarrow5a\\equiv5\\pmod8\n\\Longrightarrow a\\equiv1\\pmod8.\n\\]\n\nTake \\(a=1\\); then \\(R=125\\cdot1+123=248\\).\n\nHence \n\n\\[\nm+n\\equiv 248 \\pmod{1000}.\n\\]\n\n---\n\n\\[\n\\boxed{248}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nAD=4,\\; DE=16,\\; EB=8,\\qquad AF=13,\\; FG=52,\\; GC=26 .\n\\]\n\nHence \n\n\\[\nAB=4+16+8=28,\\qquad AC=13+52+26=91 .\n\\]\n\n--------------------------------------------------------------------\n### 1. Coordinates\n\nPlace \\(A=(0,0),\\; B=(28,0)\\) and let the height of \\(\\triangle ABC\\) be \\(h\\). \nWrite \\(C=(x,h)\\) (the \\(x\\)\u2011coordinate is unknown).\n\nPoints on the sides are then \n\n\\[\n\\begin{aligned}\nD&=(4,0), &E&=(20,0), \\\\\nF&=\\Bigl(\\frac{13}{91}x,\\;\\frac{13}{91}h\\Bigr), &\nG&=\\Bigl(\\frac{65}{91}x,\\;\\frac{65}{91}h\\Bigr).\n\\end{aligned}\n\\]\n\nSince \\(M\\) is the reflection of \\(D\\) about \\(F\\),\n\n\\[\nM=2F-D=\\Bigl(\\frac{26}{91}x-4,\\;\\frac{26}{91}h\\Bigr),\n\\]\n\nand because \\(N\\) is the reflection of \\(G\\) about \\(E\\),\n\n\\[\nN=2E-G=\\Bigl(40-\\frac{65}{91}x,\\;-\\frac{65}{91}h\\Bigr).\n\\]\n\n--------------------------------------------------------------------\n### 2. Height from the given area\n\nQuadrilateral \\(DEGF\\) consists of triangles \\(DEG\\) and \\(DFG\\). \nIts area is\n\n\\[\n\\begin{aligned}\n[DEGF]&=\\frac12\\Bigl[\\,DE\\cdot G_y\n +|\\,\\overrightarrow{DF}\\times\\overrightarrow{DG}\\,|\\,\\Bigr]\\\\[2mm]\n &=\\frac{h}{2\\cdot91}\\Bigl(16\\cdot65+4\\cdot52\\Bigr)\n =\\frac{1248}{182}\\,h\n =\\frac{624}{91}\\,h .\n\\end{aligned}\n\\]\n\nGiven \\([DEGF]=288\\),\n\n\\[\n\\frac{624}{91}\\,h=288\\quad\\Longrightarrow\\quad h=42 .\n\\]\n\n--------------------------------------------------------------------\n### 3. Area of \\(\\triangle ABC\\)\n\n\\[\n[ABC]=\\frac12\\cdot AB\\cdot h\n =\\frac12\\cdot28\\cdot42\n =588 .\n\\]\n\n--------------------------------------------------------------------\n### 4. Area of the heptagon \\(AFNBCEM\\)\n\nUse the shoelace formula with the vertices in the order \n\n\\[\nA,\\;F,\\;N,\\;B,\\;C,\\;E,\\;M .\n\\]\n\nBecause the \\(x\\)-coordinate \\(x\\) of \\(C\\) appears only in the\nterms \\(x\\,h\\) and they cancel each other, the sum reduces to \n\n\\[\n\\begin{aligned}\nS&=2\\bigl( -\\tfrac{2\\cdot13}{91} (4+16)h\n + (4+16+8)h\n + (4+16+8)h\n - (4+16)h \\bigr) \\\\\n &=2\\cdot 28h .\n\\end{aligned}\n\\]\n\nHence\n\n\\[\n[AFNBCEM]=\\frac12 S = \\frac12\\cdot28h = [ABC]=588 .\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{588}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The original parabola is \n\n\\[\ny=x^{2}-4 .\n\\]\n\nRotate it \\(60^{\\circ}\\) counter\u2011clockwise about the origin. \nIf \\((X,Y)\\) is a point on the rotated parabola, then rotating it back\n\\(60^{\\circ}\\) (clockwise) must put it on the original parabola:\n\n\\[\n\\begin{aligned}\nx &= X\\cos60^{\\circ}+Y\\sin60^{\\circ},\\\\\ny &=-X\\sin60^{\\circ}+Y\\cos60^{\\circ},\n\\end{aligned}\n\\qquad\\text{with }\\;y=x^{2}-4 .\n\\]\n\nUsing \\(\\cos60^{\\circ}= \\tfrac12,\\; \\sin60^{\\circ}= \\tfrac{\\sqrt3}{2}\\),\n\n\\[\n-\\,\\frac{\\sqrt3}{2}X+\\frac12Y= \\Bigl(\\frac12X+\\frac{\\sqrt3}{2}Y\\Bigr)^{2}-4 .\n\\tag{1}\n\\]\n\nThe original parabola gives \\(Y=X^{2}-4\\). Substituting this into (1) and\nclearing denominators yields\n\n\\[\n3X^{4}+2\\sqrt3\\,X^{3}-25X^{2}-6\\sqrt3\\,X+40=0 .\n\\tag{2}\n\\]\n\nThe quartic factors over \\(\\mathbb{Q}(\\sqrt3)\\):\n\n\\[\n\\bigl(X^{2}+\\sqrt3\\,X-4\\bigr)\\bigl(3X^{2}-\\sqrt3\\,X-10\\bigr)=0 .\n\\]\n\nHence the possible \\(X\\)-coordinates are the roots of the two quadratics.\n\n* From \\(X^{2}+\\sqrt3X-4=0\\) :\n\n\\[\nX=\\frac{-\\sqrt3\\pm\\sqrt{19}}{2}.\n\\]\n\nThe positive root is \n\n\\[\nX_{0}= \\frac{-\\sqrt3+\\sqrt{19}}{2}\\approx1.31,\n\\]\n\nwhich satisfies \\(07\\):* then the smaller element of the \\(G\\)\u2013pair is \\(7\\). \nWe need that every other pair have its smaller element \\(\\le 6\\); i.e.\nall the other five \u201csmaller\u201d letters must lie in \\(\\{1,\\dots ,6\\}\\).\n\n*If \\(j<7\\):* then the smaller element of the \\(G\\)\u2013pair is \\(j\\). \nWe need that every other smaller element be \\(7\\) (five possibilities)** \n Here \\(j\\in\\{8,9,10,11,12\\}\\). \n We have \\(L=\\{1,\\dots ,6\\}\\;(l=6),\\ H=\\) the four other numbers \\(>7\\)\n \\((h=4)\\). \n\n \\[\n \\frac{\\binom{6}{4}4!\\,(6-4-1)!!}{945}\n =\\frac{15\\cdot24\\cdot1}{945}=\\frac{8}{21}.\n \\]\n\n* **\\(j=6\\)** \n Then \\(L=\\{1,\\dots ,5\\},\\ H=\\{8,9,10,11,12\\}\\) (\\(l=h=5\\)). \n\n \\[\n \\frac{\\binom{5}{5}5!\\,(5-5-1)!!}{945}\n =\\frac{5!}{945}=\\frac{120}{945}=\\frac{8}{63}.\n \\]\n\n* **\\(j=1,2,3,4,5\\)** \n In these cases \\(h>l\\); it is impossible to avoid an \\(H\\!-\\!H\\) pair,\n so the probability is \\(0\\).\n\n--------------------------------------------------------------------\n### 4. Assemble the total probability\n\nEach of the 11 possible partners of \\(G\\) is equally likely (\\(1/11\\)).\nTherefore\n\n\\[\n\\begin{aligned}\nP(\\text{last word contains }G)\n&= \\frac1{11}\\Bigl(5\\cdot\\frac{8}{21}+\\frac{8}{63}\\Bigr)\\\\[2mm]\n&= \\frac1{11}\\Bigl(\\frac{120}{63}+\\frac{8}{63}\\Bigr)\\\\[2mm]\n&= \\frac{128}{693}.\n\\end{aligned}\n\\]\n\nThe fraction \\(\\displaystyle\\frac{128}{693}\\) is already in lowest terms.\nHence \n\n\\[\nm=128,\\qquad n=693,\\qquad m+n=821.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{821}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nP(n)=3(n+3)(n^{2}+9).\n\\]\n\nWe need all positive integers \\(n\\) for which \n\n\\[\nn+2 \\mid P(n).\n\\]\n\n---\n\n### 1. Work modulo \\(n+2\\)\n\nWrite \\(n\\equiv -2 \\pmod{\\,n+2\\,}\\). \nReplace \\(n\\) by \\(-2\\) in the factors of \\(P(n)\\) (this gives the remainder of each factor modulo \\(n+2\\)):\n\n\\[\n\\begin{aligned}\nn+3 &\\equiv (-2)+3 = 1 \\pmod{n+2},\\\\[2mm]\nn^{2}+9 &\\equiv (-2)^{2}+9 = 4+9 = 13 \\pmod{n+2}.\n\\end{aligned}\n\\]\n\nHence\n\n\\[\nP(n)=3(n+3)(n^{2}+9)\\equiv 3\\cdot 1\\cdot 13 = 39\\pmod{n+2}.\n\\]\n\n---\n\n### 2. Condition for divisibility\n\nThe requirement \\(n+2\\mid P(n)\\) is equivalent to \n\n\\[\nP(n)\\equiv 0\\pmod{n+2}\\Longleftrightarrow 39\\equiv 0\\pmod{n+2}.\n\\]\n\nThus \n\n\\[\nn+2 \\text{ must be a positive divisor of } 39.\n\\]\n\nThe positive divisors of \\(39\\) are \n\n\\[\n1,\\;3,\\;13,\\;39.\n\\]\n\nSince \\(n\\) is a **positive** integer, \\(n+2\\ge 3\\). \nHence \\(n+2\\) can be only \\(3,\\;13,\\;39\\).\n\n---\n\n### 3. Corresponding values of \\(n\\)\n\n\\[\n\\begin{array}{c|c}\nn+2 & n \\\\ \\hline\n3 & 1\\\\\n13 & 11\\\\\n39 & 37\n\\end{array}\n\\]\n\nAll three satisfy the original condition (a quick check confirms divisibility).\n\n---\n\n### 4. Sum of all such \\(n\\)\n\n\\[\n1+11+37 = 49.\n\\]\n\n\\[\n\\boxed{49}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "We place the six collinear points on the \\(x\\)-axis.\n\n---\n\n### 1. Determine the coordinates of \\(A,B,C,D,E,F\\)\n\nLet \\(A=(0,0)\\). \nWrite the distances in terms of the unknown coordinate \\(AB=x\\).\n\n\\[\n\\begin{aligned}\nC&: AC=26 \\quad\\Longrightarrow\\quad C=(26,0)\\\\\nB&: AB=x \\quad\\Longrightarrow\\quad B=(x,0)\\\\\nD&: BD=22 \\quad\\Longrightarrow\\quad D=(x+22,0)\\\\\nE&: CE=31 \\quad\\Longrightarrow\\quad E=(26+31,0)=(57,0)\\\\\nF&: DF=33 \\quad\\Longrightarrow\\quad F=(x+22+33,0)=(x+55,0)\\\\\n\\text{and }AF&=73 \\Longrightarrow x+55=73 .\n\\end{aligned}\n\\]\n\nHence \\(x=18\\). So \n\n\\[\nA=0,\\; B=18,\\; C=26,\\; D=40,\\; E=57,\\; F=73 .\n\\]\n\nThese satisfy all given segment lengths.\n\n---\n\n### 2. Locate point \\(G\\)\n\nLet \\(G=(u,v)\\) with \\(v\\neq 0\\). \nFrom the given distances\n\n\\[\n\\begin{cases}\n(u-26)^2+v^2 = 40^2 =1600,\\\\[2pt]\n(u-40)^2+v^2 = 30^2 = 900 .\n\\end{cases}\n\\]\n\nSubtract the second equation from the first:\n\n\\[\n(u-26)^2-(u-40)^2 = 700 .\n\\]\n\nExpanding,\n\n\\[\n(-52u+676)-(-80u+1600)=28u-924=700\n\\Longrightarrow 28u=1624\\Longrightarrow u=58 .\n\\]\n\nNow find \\(v\\):\n\n\\[\n(58-26)^2+v^2=1600\\Longrightarrow 32^2+v^2=1600\n\\Longrightarrow v^2=1600-1024=576 .\n\\]\n\nThus \\(|v|=24\\). Take \\(v=24\\) (the sign does not affect the area). \n\n\\[\n\\boxed{G=(58,24)} .\n\\]\n\n---\n\n### 3. Area of \\(\\triangle BGE\\)\n\nPoints on the \\(x\\)-axis:\n\n\\[\nB=(18,0),\\qquad E=(57,0).\n\\]\n\nThe length of the base \\(BE\\) is\n\n\\[\nBE = 57-18 = 39 .\n\\]\n\nSince the line through \\(B\\) and \\(E\\) is the \\(x\\)-axis, the perpendicular distance from \\(G\\) to this line is \\(|v|=24\\).\n\nHence\n\n\\[\n[\\triangle BGE]=\\frac12\\,(BE)\\cdot(\\text{height})\n =\\frac12\\cdot 39\\cdot 24\n =\\frac{936}{2}=468 .\n\\]\n\n(Using the determinant formula also gives \\(468\\).)\n\n---\n\n\\[\n\\boxed{468}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yzy,\\;x+y>76 \\quad\\text{(region }A_1)\\\\\n \\text{or}\\\\\n x75 \\quad\\text{(region }B_1)\\\\\n \\text{or}\\\\\n x>-1,\\;x+2y<75 \\quad\\text{(region }B_2)\n \\end{cases}\n \\]\n\nThe set of points satisfying both inequalities is the intersection of one of the\n\\(A_i\\) with one of the \\(B_j\\).\n\nChecking the four possibilities:\n\n* \\(A_1\\cap B_1=\\varnothing\\) (impossible to have \\(x>y\\) and \\(x<-1\\) while\n \\(x+y>76\\)).\n* \\(A_1\\cap B_2\\) is non\u2011empty and unbounded (e.g. \\(x>77\\)).\n* \\(A_2\\cap B_1\\) is non\u2011empty and unbounded (e.g. \\(x<-1\\)).\n* \\(A_2\\cap B_2\\) is bounded.\n\nThus there are three convex components: two infinite ones and one finite one,\nthe latter being \\(A_2\\cap B_2\\).\n\n---\n\n### 2. The finite region\n\n\\(A_2\\cap B_2\\) is described by \n\n\\[\n\\begin{cases}\nx>-1,\\\\\nxx\\) we obtain\n\n\\[\n-10,\\,h>0\\) are the half\u2011width and half\u2011height of the rectangle.\n\nAll four vertices satisfy the circle equation, giving the single relation \n\n\\[\nw^{2}+h^{2}=36\\tag{1}\n\\]\n\n(the rectangle\u2019s centre is the circle\u2019s centre \\(A\\)).\n\nBecause the point \\(C=(-15,0)\\) is farther to the right than to the left,\nthe condition \u201c\\(C\\) is closer to \\(\\overline{GH}\\) than to \\(\\overline{EF}\\)\u2019\u2019 forces\n\\(\\overline{GH}\\) to be the **left** side (\\(x=9-w\\)), which is already the case.\n\nSince \\(D=(9,-12)\\) lies below the centre, \u201c\\(D\\) is closer to \\(\\overline{FG}\\) than to \\(\\overline{EH}\\)\u2019\u2019 forces\n\\(\\overline{FG}\\) to be the **bottom** side (\\(y=-h\\)). This orientation matches the above labeling.\n\n---\n\n### 3. Areas of the two triangles \n\n*Triangle \\(DGF\\)* \n\nThe points are \\(D(9,-12),\\; G(9-w,-h),\\; F(9+w,-h)\\).\nIts base \\(GF\\) has length \\(2w\\) and its height (vertical distance from \\(D\\) to the base) is \\(12-h\\). \nHence \n\n\\[\n[\\,DGF\\,]=\\tfrac12\\,(2w)(12-h)=w(12-h).\\tag{2}\n\\]\n\n*Triangle \\(CHG\\)* \n\nThe points are \\(C(-15,0),\\; H(9-w,h),\\; G(9-w,-h)\\).\nIts base \\(HG\\) has length \\(2h\\) and its horizontal distance from \\(C\\) to the line \\(x=9-w\\) is\n\\(|-15-(9-w)|=24-w\\). \nThus \n\n\\[\n[\\,CHG\\,]=\\tfrac12\\,(2h)(24-w)=h(24-w).\\tag{3}\n\\]\n\nThe problem states the two areas are equal, so\n\n\\[\nw(12-h)=h(24-w).\\tag{4}\n\\]\n\nExpanding gives \\(12w-wh=24h-wh\\), whence \n\n\\[\n12w=24h \\qquad\\Longrightarrow\\qquad w=2h.\\tag{5}\n\\]\n\n---\n\n### 4. Solving for \\(w\\) and \\(h\\)\n\nSubstituting \\(w=2h\\) into (1):\n\n\\[\n(2h)^2+h^2=36 \\;\\Longrightarrow\\;5h^{2}=36 \\;\\Longrightarrow\\;\nh=\\frac{6}{\\sqrt5}=\\frac{6\\sqrt5}{5}.\n\\]\n\nHence \n\n\\[\nw=2h=\\frac{12}{\\sqrt5}=\\frac{12\\sqrt5}{5}.\n\\]\n\n---\n\n### 5. Area of the rectangle \n\nThe side lengths are \\(2w\\) and \\(2h\\). Therefore \n\n\\[\n\\text{Area}= (2w)(2h)=4wh.\n\\]\n\nUsing \\(w=2h\\),\n\n\\[\n4wh = 4(2h)h = 8h^{2}=8\\left(\\frac{36}{5}\\right)=\\frac{288}{5}.\n\\]\n\nThus the area is \\(\\displaystyle\\frac{288}{5}\\); the numerator and denominator are coprime.\n\n\\[\nm=288,\\qquad n=5,\\qquad m+n=288+5=293.\n\\]\n\n\\[\n\\boxed{293}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The divisors of \\(2025\\) are all numbers of the form \n\n\\[\n3^{a}5^{b},\\qquad 0\\le a\\le 4,\\;0\\le b\\le 2 .\n\\]\n\nHence \n\n\\[\n|A|=(4+1)(2+1)=15 .\n\\]\n\nSo there are \\(2^{15}\\) subsets of \\(A\\) (including the empty set).\n\n--------------------------------------------------------------------\n### When does a subset have lcm \\(2025\\)?\n\nThe prime factorisation of \\(2025\\) is \n\n\\[\n2025 = 3^{4}\\,5^{2}.\n\\]\n\nFor a subset \\(B\\subseteq A\\),\n\n\\[\n\\operatorname{lcm}(B)=3^{\\max a_i}\\,5^{\\max b_i},\n\\]\n\nwhere \\((a_i,b_i)\\) are the exponents of the elements of \\(B\\).\nThus \\(\\operatorname{lcm}(B)=2025\\) iff \n\n* at least one element has exponent \\(a=4\\) (i.e. contains \\(3^4\\));\n* at least one element has exponent \\(b=2\\) (i.e. contains \\(5^2\\)).\n\n--------------------------------------------------------------------\n### Sets that provide the required exponents \n\n\\[\nA_4=\\{d\\in A:3^4\\mid d\\}=\\{3^4\\! \\cdot\\! 5^0,\\;3^4\\! \\cdot\\!5^1,\\;3^4\\! \\cdot\\!5^2\\}\n\\]\nhas \\(|A_4|=3\\) elements.\n\n\\[\nB_2=\\{d\\in A:5^2\\mid d\\}=\\{3^0\\! \\cdot\\!5^2,\\;3^1\\! \\cdot\\!5^2,\\;3^2\\! \\cdot\\!5^2,\n\\;3^3\\! \\cdot\\!5^2,\\;3^4\\! \\cdot\\!5^2\\}\n\\]\nhas \\(|B_2|=5\\) elements.\n\nTheir intersection is the single divisor \\(2025=3^4\\! \\cdot\\!5^2\\).\n\n--------------------------------------------------------------------\n### Counting the suitable subsets \n\nA subset \\(B\\) works iff it contains **at least one** element of \\(A_4\\) **and** at least one element of \\(B_2\\).\n\nUsing inclusion\u2013exclusion on the \\(2^{15}\\) total subsets:\n\n\\[\n\\begin{aligned}\nN &= 2^{15}\n -\\underbrace{2^{15-3}}_{\\text{subsets missing }A_4}\n -\\underbrace{2^{15-5}}_{\\text{subsets missing }B_2}\n +\\underbrace{2^{15-7}}_{\\text{subsets missing both}} \\\\[4pt]\n &= 2^{15}-2^{12}-2^{10}+2^{8}\\\\\n &= 32768-4096-1024+256\\\\\n &= 27904 .\n\\end{aligned}\n\\]\n\nThus the desired probability is \n\n\\[\n\\frac{N}{2^{15}}=\\frac{27904}{32768}\n =\\frac{109}{128}\\qquad(\\text{after cancelling }256).\n\\]\n\n--------------------------------------------------------------------\n### Answer \n\n\\(m=109,\\;n=128\\), so \n\n\\[\nm+n=109+128=237 .\n\\]\n\n\\[\n\\boxed{237}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Step 1 \u2013 What we have to count**\n\nThe two perpendicular diameters are two line segments that intersect once, so after they are drawn the disk is divided into \n\n\\[\nF_0=4\\qquad\\text{regions}.\n\\]\n\nEvery time we draw a new segment, it splits each region it meets into two pieces. \nIf the new segment meets \\(k\\) already\u2011drawn segments in interior points, it creates \\(k+1\\) new regions. \n\nHence \n\n\\[\n\\boxed{\\text{# of regions}=1+\\#\\text{segments}+ \\#\\text{intersection points}}\n\\tag{1}\n\\]\n\n(the \u201c\\(1\\)\u201d is the original whole disk). \nWe have \\(27\\) segments in total (the 2 diameters + the 25 random chords). \nThus we only have to find the **expected number of intersection points**.\n\n--------------------------------------------------------------------\n\n**Step 2 \u2013 Intersections with the two diameters**\n\nFor a random chord we must choose its two endpoints in *different* quadrants.\nThe unordered pair of quadrants is equally likely among the \n\n\\[\n\\binom{4}{2}=6\n\\]\n\npossibilities. \n\n* Adjacent quadrants (four choices) \u2013 the chord meets **one** diameter. \n* Opposite quadrants (two choices) \u2013 the chord meets **both** diameters.\n\nTherefore for one random chord \n\n\\[\nE[\\text{diameters met}]\n=\\frac{4}{6}\\cdot1+\\frac{2}{6}\\cdot2=\\frac{4}{3}.\n\\]\n\nWith \\(N=25\\) random chords\n\n\\[\nE[\\text{intersections with the two diameters}]\n=N\\cdot\\frac{4}{3}= \\frac{100}{3}.\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 3 \u2013 Intersection of two random chords**\n\nLet a chord be drawn. \nWrite its endpoints as angles measured from the positive \\(x\\)\u2013axis.\nBecause the two endpoints are in different quadrants, the unordered pair of\nquadrants is uniform among the six possibilities.\n\n*Probability that a second random chord meets the first.*\n\nLet the first chord be fixed. \nDenote by \\(I\\) the clockwise arc of the circle from its first endpoint to its\nsecond endpoint; let \\(|I|=L\\).\nIf a second chord has one endpoint in \\(I\\) and the other outside \\(I\\) the two\nchords intersect. \n\nWhen the second chord is chosen, its first endpoint \\(U\\) is uniform on the whole\ncircle, and its second endpoint \\(V\\) is uniform on the *three* quadrants that are\ndifferent from the quadrant of \\(U\\). \nA short calculation (integrating over the position of \\(U\\) inside \\(I\\))\ngives for a fixed chord\n\n\\[\n\\boxed{q=\\frac{L}{\\pi}-\\frac{2L^{2}}{3\\pi^{2}}\n +\\frac{2}{3\\pi^{2}}\\!\\int_{I}\\!|I\\cap Q(\\theta)|\\,d\\theta},\n\\tag{3}\n\\]\nwhere \\(Q(\\theta)\\) is the quadrant containing \\(\\theta\\).\n\nNow we average (3) over the possible positions of the first chord.\n\n*Adjac\u00adent quadrants.* \nThe arc \\(I\\) lies in exactly two quadrants; write its lengths in those\nquadrants as \\(L_{1},L_{2}\\) (\\(L=L_{1}+L_{2}\\)). \nThen \\(\\int_{I}|I\\cap Q|\\,d\\theta = L_{1}^{2}+L_{2}^{2}\\).\nWith \\(L_{1},L_{2}\\) independent and uniform on \\([0,\\pi/2]\\),\n\n\\[\nE[q\\mid\\text{adjacent}] = \\frac{5}{12}.\n\\]\n\n*Opposite quadrants.* \nNow \\(I\\) occupies three quadrants; let the lengths in the three\nquadrants be \\(u,\\,\\pi/2,\\,v\\) (\\(u,v\\) independent uniform on \\([0,\\pi/2]\\)). \nThen \\(\\int_{I}|I\\cap Q|\\,d\\theta = u^{2}+(\\pi/2)^{2}+v^{2}\\).\nAveraging gives\n\n\\[\nE[q\\mid\\text{opposite}] = \\frac{7}{12}.\n\\]\n\nThe first chord is adjacent with probability \\(\\frac{2}{3}\\) and opposite with\nprobability \\(\\frac13\\). Hence the probability that two independently drawn\nrandom chords intersect is\n\n\\[\np=\\frac{2}{3}\\cdot\\frac{5}{12}+\\frac{1}{3}\\cdot\\frac{7}{12}\n =\\frac{17}{36}.\n\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 4 \u2013 Expected intersections among the 25 random chords**\n\nThere are \\(\\binom{25}{2}=300\\) unordered pairs of random chords, each\nintersecting with probability \\(p\\). Thus\n\n\\[\nE[\\text{intersections among the 25 chords}]\n=300\\cdot\\frac{17}{36}= \\frac{425}{3}.\n\\tag{5}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 5 \u2013 Total expected number of intersection points**\n\nAdd all contributions:\n\n* one intersection of the two diameters,\n* intersections of random chords with the two diameters \\(\\displaystyle\\frac{100}{3}\\) (from (2)),\n* intersections among the random chords \\(\\displaystyle\\frac{425}{3}\\) (from (5)).\n\n\\[\nE[\\text{total intersections}]\n=1+\\frac{100}{3}+\\frac{425}{3}=1+\\frac{525}{3}=176.\n\\tag{6}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 6 \u2013 Expected number of regions**\n\nInsert (6) into formula (1):\n\n\\[\nE[\\text{regions}]\n=1+\\underbrace{27}_{\\text{segments}}+\\underbrace{176}_{\\text{intersection points}}\n=204 .\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{204}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The zeros of \n\n\\[\nf(x)=\\sin\\bigl(7\\pi\\sin(5x)\\bigr)\n\\]\n\nsatisfy \n\n\\[\n\\sin\\bigl(7\\pi\\sin(5x)\\bigr)=0\\Longrightarrow 7\\pi\\sin(5x)=k\\pi,\\qquad k\\in\\mathbb Z .\n\\]\n\nHence \n\n\\[\n\\sin (5x)=\\frac{k}{7},\\qquad -7\\le k\\le 7 .\n\\]\n\n---\n\n### 1. Counting all zeros \\(n\\)\n\nPut \\(\\theta =5x\\). \nBecause \\(00\\) and \\(k\\le a\\).\n\n--------------------------------------------------------------------\n### 2. When can \\(\\Delta(k)>0\\)?\n\nFor any integer \\(k\\),\n\n\\[\n\\Big\\lfloor2.5k\\Big\\rfloor=\n\\frac{5k-(k\\bmod2)}{2}.\n\\]\n\nHence \n\n\\[\n\\Delta(k)= -\\frac{3k+9(k\\bmod2)}{2}+9\\delta ,\n\\quad\\text{where }\\delta=\n\\begin{cases}\n1,&\\alpha\\ge 1-\\{2.5k\\},\\\\\n0,&\\text{otherwise}.\n\\end{cases}\n\\]\n\nThe term \\(-\\frac{3k+9(k\\bmod2)}{2}\\) is negative for all \\(k\\ge1\\).\nThe only way \\(\\Delta(k)\\) can become positive is when \\(\\delta=1\\).\n\n*If \\(k\\) is even*, \\(\\{2.5k\\}=0\\); thus \\(\\alpha<1\\) never makes \\(\\delta=1\\).\nHence \\(\\Delta(k)\\le0\\) for all even \\(k\\).\n\n*If \\(k\\) is odd*, \\(\\{2.5k\\}=0.5\\). \nThen \\(\\delta=1\\) exactly when \\(\\alpha\\ge 0.5\\), i.e. when \\(r\\ge5\\) (the remainder of \\(b\\) modulo \\(10\\) is at least \\(5\\)).\n\nFor odd \\(k\\ge3\\) we have \n\n\\[\n\\Delta(k)=-9+9\\delta\\le0,\n\\]\n\nso no improvement occurs. \n\nFor \\(k=1\\),\n\n\\[\n\\Delta(1)= -6+9\\delta,\n\\]\n\nwhich is positive precisely when \\(\\delta=1\\); that is, when \\(r\\ge5\\).\n\nConsequently **the greedy algorithm fails exactly when**\n\n* \\(N\\ge25\\) (so at least one quarter is used), and\n* the remainder \\(b=N\\bmod25\\) satisfies \\(b\\bmod10\\ge5\\).\n\nIn terms of residues modulo \\(25\\) this means\n\n\\[\nb\\in\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\tag{3}\n\\]\n\n--------------------------------------------------------------------\n### 3. Counting the failures\n\nFrom \\(1\\) to \\(1000\\):\n\n* For \\(N<25\\) the greedy algorithm is always optimal (no quarters are used).\n* For each complete block of \\(25\\) numbers, exactly the \\(10\\) residues listed in (3) cause a failure.\n\nThe interval \\(25\\le N\\le999\\) contains \\(39\\) full blocks of size \\(25\\):\n\\[\n39\\cdot10=390\\text{ failures}.\n\\]\n\n\\(N=1000\\) has residue \\(0\\) modulo \\(25\\), so it is not a failure.\n\nThus the number of values where the greedy algorithm **succeeds** is \n\n\\[\n1000-390 = 610.\n\\]\n\n\\[\n\\boxed{610}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "In base \\(b\\),\n\n\\[\n17_b = 1\\cdot b+7 = b+7,\\qquad 97_b = 9\\cdot b+7 .\n\\]\n\nWe need integer bases \\(b>9\\) such that \\(b+7\\) divides \\(9b+7\\).\n\nLet \n\n\\[\nn = b+7 \\quad\\Longrightarrow\\quad b = n-7.\n\\]\n\nThen \n\n\\[\n9b+7 = 9(n-7)+7 = 9n-56 .\n\\]\n\nHence \\(n\\) must divide \\(9n-56\\):\n\n\\[\nn \\mid (9n-56) \\;\\Longrightarrow\\; n \\mid (9n-56) - 9n = -56.\n\\]\n\nThus \\(n\\) is a positive divisor of \\(56\\). \nSince \\(b>9\\), we have \\(n=b+7>16\\); therefore we need divisors of \\(56\\) that are \\(\\ge 17\\).\n\nDivisors of \\(56 = 2^3\\cdot7\\) are \n\n\\[\n1,\\;2,\\;4,\\;7,\\;8,\\;14,\\;28,\\;56.\n\\]\n\nOnly \\(28\\) and \\(56\\) satisfy \\(n\\ge 17\\).\n\nCorresponding bases:\n\n\\[\nb = n-7 \\quad\\Rightarrow\\quad \n\\begin{cases}\nn=28 &\\Rightarrow b = 21,\\\\[2pt]\nn=56 &\\Rightarrow b = 49.\n\\end{cases}\n\\]\n\nBoth bases exceed \\(9\\) and the digits \\(1,7,9\\) are allowed.\n\nFinally, the sum of all such bases is \n\n\\[\n21 + 49 = 70.\n\\]\n\n\\[\n\\boxed{70}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Label the vertices of the regular \\(24\\)-gon by the residues \n\\(\\{0,1,2,\\dots ,23\\}\\) modulo \\(24\\).\n\nIf the \\(12\\) drawn segments all have the same Euclidean length, then each\nsegment must join two vertices whose indices differ by a fixed integer \n\\(k\\;(1\\le k\\le 12)\\) (the \u201cstep size\u2019\u2019), because the length of a chord in a\nregular polygon depends only on this step.\n\nThus for a fixed \\(k\\) we have to choose a perfect matching of the graph \n\n\\[\nG_k=\\big\\{\\{i,i+k\\}\\mid i=0,1,\\dots ,23\\big\\}.\n\\]\n\n--------------------------------------------------------------------\n### 1. Structure of \\(G_k\\)\n\n\\(G_k\\) is a **2\u2011regular** graph; each vertex has exactly the two neighbours\n\\(i\\pm k\\). \nLet \n\n\\[\nd=\\gcd(k,24).\n\\]\n\nThen the vertices split into \\(d\\) cycles, each of length \n\n\\[\nt=\\frac{24}{d}.\n\\]\n\nIndeed, repeatedly adding \\(k\\) modulo \\(24\\) runs through a cycle of that\nlength.\n\n--------------------------------------------------------------------\n### 2. When does a perfect matching exist?\n\nA perfect matching can exist only if each component has an even number of\nvertices, i.e. \\(t\\) must be even. \nSince \\(t = 24/d\\),\n\n* \\(t\\) is odd only when \\(d=8\\) (giving \\(t=3\\)). \n Hence for \\(k=8\\) no perfect matching is possible.\n\nAll other values of \\(k\\) give even\u2011length cycles.\n\n--------------------------------------------------------------------\n### 3. Number of matchings for a given \\(k\\)\n\n*If \\(t\\ge 4\\) (even cycle of length at least \\(4\\)): \nA cycle has exactly **two** perfect matchings (choose every other edge). \nSince there are \\(d\\) independent cycles, the total number of matchings is\n\\(\\displaystyle 2^{d}\\).\n\n*If \\(t=2\\) (the case \\(k=12\\)): each component is a single edge, so there\nis only **one** way to match its two vertices. \nThus for \\(k=12\\) we obtain \\(1\\) matching.\n\nSummarising\n\n\\[\nf(k)=\n\\begin{cases}\n0, & k=8,\\\\[2mm]\n1, & k=12,\\\\[2mm]\n2^{\\gcd(k,24)}, & \\text{otherwise}.\n\\end{cases}\n\\]\n\n--------------------------------------------------------------------\n### 4. Summation over all possible step sizes\n\n\\[\n\\begin{array}{c|c|c|c}\nk & \\gcd(k,24) & f(k) & \\text{contribution}\\\\\\hline\n1 & 1 & 2^1=2 & 2\\\\\n2 & 2 & 2^2=4 & 4\\\\\n3 & 3 & 2^3=8 & 8\\\\\n4 & 4 & 2^4=16 & 16\\\\\n5 & 1 & 2 & 2\\\\\n6 & 6 & 2^6=64 & 64\\\\\n7 & 1 & 2 & 2\\\\\n8 & 8 & 0 & 0\\\\\n9 & 3 & 8 & 8\\\\\n10& 2 & 4 & 4\\\\\n11& 1 & 2 & 2\\\\\n12&12 & 1 & 1\\\\\\hline\n\\multicolumn{3}{r|}{\\text{Total}} & 113\n\\end{array}\n\\]\n\n--------------------------------------------------------------------\n### 5. Answer\n\nThe total number of ways to draw \\(12\\) equal\u2011length segments so that each of\nthe \\(24\\) vertices is used exactly once is \n\n\\[\n\\boxed{113}.\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution Overview**\n\nEach player gets one scoop of either chocolate (C), vanilla (V) or strawberry (S). \nLet \n\n\\[\nc=\\#\\text{players who chose chocolate},\\qquad \nv=\\#\\text{players who chose vanilla},\\qquad \ns=\\#\\text{players who chose strawberry}.\n\\]\n\nWe need \n\n\\[\nc+v+s=9,\\qquad c>v>s\\ge 1 .\n\\]\n\nFor each admissible triple \\((c,v,s)\\) the number of assignments to the 9 distinct players is the multinomial coefficient \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\nHence \n\n\\[\nN=\\sum_{\\substack{c+v+s=9\\\\c>v>s\\ge1}}\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\n---\n\n### 1. Find all possible triples \\((c,v,s)\\)\n\nSince \\(c>v>s\\ge1\\),\n\n\\[\ns\\le 2\n\\]\n\n(because \\(s+(s+1)+(s+2)=3s+3\\le9\\Rightarrow s\\le2\\)). \n\n*If \\(s=1\\):* \n\\(v\\ge2\\) and \\(c=9-v-1=8-v\\). \nCondition \\(c>v\\) gives \\(8-v>v\\Rightarrow v\\le3\\). \nThus \\(v=2,3\\) giving triples \\((6,2,1)\\) and \\((5,3,1)\\).\n\n*If \\(s=2\\):* \n\\(v\\ge3\\) and \\(c=9-v-2=7-v\\). \nCondition \\(c>v\\) gives \\(7-v>v\\Rightarrow v\\le3\\). \nThus \\(v=3\\) giving the triple \\((4,3,2)\\).\n\nNo larger \\(s\\) works. \nHence the only admissible triples are \n\n\\[\n(6,2,1),\\qquad (5,3,1),\\qquad (4,3,2).\n\\]\n\n---\n\n### 2. Count assignments for each triple\n\n\\[\n\\begin{aligned}\n(6,2,1):&\\quad \\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[4pt]\n(5,3,1):&\\quad \\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[4pt]\n(4,3,2):&\\quad \\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\n---\n\n### 3. Total number of assignments\n\n\\[\nN=252+504+1260=2016.\n\\]\n\n---\n\n### 4. Remainder modulo \\(1000\\)\n\n\\[\n2016\\equiv 16\\pmod{1000}.\n\\]\n\n---\n\n\\[\n\\boxed{16}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution Overview**\n\nLet \n\n\\[\n\\begin{aligned}\nA&=(7,7\\sqrt3),\\qquad \nB=(0,0),\\qquad \nC=(7,0),\\\\[2mm]\nD&=\\Bigl(\\frac{205}{7},\\frac{36\\sqrt3}{7}\\Bigr),\\qquad\nE=\\Bigl(\\frac{218}{7},\\frac{88\\sqrt3}{7}\\Bigr).\n\\end{aligned}\n\\]\n\nThe pentagon \\(ABCDE\\) is convex, \\(\\angle B=\\angle E=60^\\circ\\) and the side\u2013lengths are \n\n\\[\nAB=14,\\;BC=7,\\;CD=24,\\;DE=13,\\;EA=26 .\n\\]\n\nFor a point \\(X\\) define \n\n\\[\nf(X)=AX+BX+CX+DX+EX .\n\\]\n\n--------------------------------------------------------------------\n\n### 1. Reducing the problem\n\nFor any point \\(X\\)\n\n\\[\n\\nabla f(X)=\\sum_{P\\in\\{A,B,C,D,E\\}}\\frac{X-P}{|X-P|}.\n\\]\n\nIf the minimum of \\(f\\) is attained at an interior point,\nthe gradient must be zero:\n\n\\[\n\\frac{X-A}{|X-A|}+\\frac{X-B}{|X-B|}\n+\\frac{X-C}{|X-C|}+\\frac{X-D}{|X-D|}+\\frac{X-E}{|X-E|}=0. \\tag{1}\n\\]\n\nNotice that \n\n*\\(B\\) and \\(E\\) lie on the same line \\(BE\\). \nIf a point \\(X\\) is on the line \\(BE\\), the two unit vectors in (1) that\ncorrespond to \\(B\\) and \\(E\\) are opposite:\n\\[\n\\frac{X-B}{|X-B|}+\\frac{X-E}{|X-E|}=0 .\n\\]\n\nHence, **any point on the segment \\(BE\\) automatically cancels the\ncontributions of \\(B\\) and \\(E\\).** \nConsequently a minimiser must lie on \\(BE\\), and (1) becomes\n\n\\[\n\\frac{X-A}{|X-A|}+\\frac{X-C}{|X-C|}+\\frac{X-D}{|X-D|}=0 .\\tag{2}\n\\]\n\nEquation (2) is precisely the equilibrium condition for the geometric\nmedian (Fermat\u2013Weber point) of the triangle \\(ACD\\).\n\n--------------------------------------------------------------------\n\n### 2. The Fermat point of \\(\\triangle ACD\\)\n\nThe three angles of \\(\\triangle ACD\\) are \n\n\\[\n\\angle A\\approx81.8^\\circ ,\\qquad \n\\angle C\\approx68.2^\\circ ,\\qquad \n\\angle D=30^\\circ .\n\\]\n\nAll are \\(<120^\\circ\\); therefore the unique point \\(F\\) inside\n\\(\\triangle ACD\\) for which the three angles \\(\\angle AFD,\n\\angle CFD, \\angle ACF\\) are all \\(120^\\circ\\) is the Fermat point.\nIt is precisely the point satisfying (2); consequently the minimiser of\n\\(f\\) is the intersection of the line \\(BE\\) with this Fermat point.\n(The numerical computation of the Weiszfeld iteration gives\n\\(F\\approx(10.594,\\,7.416)\\), which indeed lies on \\(BE\\).)\n\nFor a triangle with side\u2011lengths \\(a,b,c\\) and area \\(\\Delta\\), the\nminimal sum of distances from its Fermat point to the three vertices is\n\n\\[\n\\boxed{\\displaystyle \n\\sqrt{\\frac{a^{2}+b^{2}+c^{2}+4\\sqrt3\\,\\Delta}{2}} } \\tag{3}\n\\]\n\n(see any textbook on the Fermat point).\n\n--------------------------------------------------------------------\n\n### 3. Applying the formula to \\(\\triangle ACD\\)\n\nFor \\(\\triangle ACD\\)\n\n\\[\n\\begin{aligned}\na&=CD=24,\\\\\nb&=AD=13\\sqrt3,\\\\\nc&=AC=7\\sqrt3.\n\\end{aligned}\n\\]\n\nThe area is obtained from the base \\(AC\\) (vertical, length \\(7\\sqrt3\\))\nand the horizontal distance from \\(D\\) to the line \\(AC\\) (which is\n\\( \\frac{156}{7}\\)):\n\n\\[\n\\Delta=\\frac12\\cdot7\\sqrt3\\cdot\\frac{156}{7}=78\\sqrt3 .\n\\]\n\nNow compute the expression in (3):\n\n\\[\n\\begin{aligned}\na^{2}+b^{2}+c^{2}&=24^{2}+(13\\sqrt3)^{2}+(7\\sqrt3)^{2}\n=576+507+147=1230,\\\\[1mm]\n4\\sqrt3\\,\\Delta&=4\\sqrt3\\cdot78\\sqrt3=4\\cdot78\\cdot3=936,\\\\[1mm]\n\\frac{a^{2}+b^{2}+c^{2}+4\\sqrt3\\,\\Delta}{2}\n&=\\frac{1230+936}{2}=1083.\n\\end{aligned}\n\\]\n\nThus \n\n\\[\nAF+CF+DF=\\sqrt{1083}=19\\sqrt3 .\n\\]\n\n--------------------------------------------------------------------\n\n### 4. The total minimum\n\nBecause the minimiser lies on \\(BE\\),\n\n\\[\nBF+EF=BE=38 .\n\\]\n\nTherefore\n\n\\[\n\\begin{aligned}\n\\min f(X)&=AF+CF+DF+BF+EF\\\\\n&=19\\sqrt3+38 .\n\\end{aligned}\n\\]\n\nThe required form is \\(m+n\\sqrt{p}\\) with \\(m=38,\\;n=19,\\;p=3\\).\n\nHence \n\n\\[\nm+n+p = 38+19+3 = 60 .\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{60}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The equation \n\n\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\ncan be factored over the integers:\n\n\\[\n12x^{2}-xy-6y^{2}= (3x+2y)(4x-3y)=0 .\n\\]\n\nHence a pair \\((x,y)\\) of integers satisfies either \n\n\\[\n\\boxed{3x+2y=0}\\qquad\\text{or}\\qquad\\boxed{4x-3y=0}.\n\\]\n\n---\n\n### 1. Solutions of \\(3x+2y=0\\)\n\n\\[\n2y=-3x\\quad\\Longrightarrow\\quad y=-\\frac{3}{2}x .\n\\]\n\nFor \\(y\\) to be integer, \\(x\\) must be even: write \\(x=2k\\) with \\(k\\in\\mathbb Z\\). \nThen \\(y=-3k\\).\n\nThe bounds \\(-100\\le x,y\\le100\\) give \n\n\\[\n-100\\le2k\\le100\\;\\Longrightarrow\\;-50\\le k\\le50,\n\\]\n\\[\n-100\\le-3k\\le100\\;\\Longrightarrow\\;|k|\\le\\frac{100}{3}\\;\\Longrightarrow\\;-33\\le k\\le33.\n\\]\n\nThus \\(k\\) can be any integer from \\(-33\\) to \\(33\\): \n\n\\[\n\\#\\{(x,y):3x+2y=0\\}=33+33+1=67 .\n\\]\n\n---\n\n### 2. Solutions of \\(4x-3y=0\\)\n\n\\[\n4x=3y\\quad\\Longrightarrow\\quad y=\\frac{4}{3}x .\n\\]\n\nFor integer \\(y\\), \\(x\\) must be a multiple of \\(3\\): write \\(x=3m\\) with \\(m\\in\\mathbb Z\\). \nThen \\(y=4m\\).\n\nThe bounds give \n\n\\[\n-100\\le3m\\le100\\;\\Longrightarrow\\;|m|\\le\\frac{100}{3}\\;\\Longrightarrow\\;-33\\le m\\le33,\n\\]\n\\[\n-100\\le4m\\le100\\;\\Longrightarrow\\;-25\\le m\\le25.\n\\]\n\nHence \\(m\\) can be any integer from \\(-25\\) to \\(25\\): \n\n\\[\n\\#\\{(x,y):4x-3y=0\\}=25+25+1=51 .\n\\]\n\n---\n\n### 3. Removing the double count\n\nThe only pair that satisfies both linear equations is \\((0,0)\\). \nThus the total number of distinct ordered pairs is \n\n\\[\n67+51-1=117 .\n\\]\n\n\\[\n\\boxed{117}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For a tangential quadrilateral (one that has an incircle) the sum of the lengths of opposite sides are equal. \nLet the parallel sides of the isosceles trapezoid be \\(r\\) and \\(s\\) \\((r\\neq s)\\) and each leg have length \\(L\\).\n\n\\[\nr+s = L+L = 2L \\quad\\Longrightarrow\\quad L=\\frac{r+s}{2}\n\\]\n\n---\n\n### Using the incircle\n\nFor any tangential quadrilateral \n\n\\[\n\\text{Area}= (\\text{inradius})\\times (\\text{semiperimeter})\n\\]\n\nThe inradius is \\(3\\) and the area is \\(72\\), so the semiperimeter is \n\n\\[\n\\frac{72}{3}=24 .\n\\]\n\nThe semiperimeter of the trapezoid is \n\n\\[\n\\frac{r+s+2L}{2}= \\frac{r+s+r+s}{2}=r+s .\n\\]\n\nHence \n\n\\[\nr+s = 24 .\n\\]\n\nConsequently \n\n\\[\nL=\\frac{r+s}{2}=12 .\n\\]\n\n---\n\n### Height of the trapezoid\n\nThe area also equals \\(\\dfrac{(r+s)}{2}\\cdot h\\), where \\(h\\) is the height:\n\n\\[\n72=\\frac{24}{2}\\,h =12h \\;\\Longrightarrow\\; h=6 .\n\\]\n\n(Indeed, the height must be \\(2\\) times the inradius, \\(2\\cdot3=6\\).)\n\n---\n\n### Relating the legs to the bases\n\nIn an isosceles trapezoid the horizontal offset of each leg is \n\n\\[\nx=\\frac{r-s}{2}.\n\\]\n\nBecause each leg has length \\(L=12\\),\n\n\\[\nL^{2}=x^{2}+h^{2}\\quad\\Longrightarrow\\quad\n12^{2}= \\left(\\frac{r-s}{2}\\right)^{2}+6^{2}.\n\\]\n\nThus \n\n\\[\n\\left(\\frac{r-s}{2}\\right)^{2}=144-36=108\n\\quad\\Longrightarrow\\quad\nr-s = 2\\sqrt{108}=12\\sqrt3 .\n\\]\n\n---\n\n### Solving for \\(r\\) and \\(s\\)\n\n\\[\n\\begin{cases}\nr+s = 24,\\\\[2pt]\nr-s = 12\\sqrt3 .\n\\end{cases}\n\\]\n\n\\[\nr = \\frac{24+12\\sqrt3}{2}=12+6\\sqrt3,\\qquad\ns = \\frac{24-12\\sqrt3}{2}=12-6\\sqrt3 .\n\\]\n\n---\n\n### Compute \\(r^{2}+s^{2}\\)\n\nUsing \\((r^{2}+s^{2}) = \\dfrac{(r+s)^{2}+(r-s)^{2}}{2}\\),\n\n\\[\nr^{2}+s^{2}= \\frac{24^{2}+(12\\sqrt3)^{2}}{2}\n= \\frac{576+432}{2}\n= \\frac{1008}{2}=504 .\n\\]\n\n\\[\n\\boxed{504}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For a number to be divisible by \\(22\\) it must be divisible by \\(2\\) **and** by \\(11\\).\n\n---\n\n### 1. Divisibility by \\(2\\)\n\nThe last digit (the 8\u2011th digit) must be even.\nThe even digits are \\(\\{2,4,6,8\\}\\).\n\n---\n\n### 2. Divisibility by \\(11\\)\n\nFor an \\(8\\)-digit number \\(d_1d_2\\ldots d_8\\),\n\n\\[\n\\text{(odd positions)}-\\text{(even positions)}=\n(d_1+d_3+d_5+d_7)-(d_2+d_4+d_6+d_8)\n\\]\n\nmust be a multiple of \\(11\\).\n\nSince the digits \\(1,\\dots ,8\\) are used once,\n\\[\n(d_1+d_3+d_5+d_7)+(d_2+d_4+d_6+d_8)=1+2+\\cdots+8=36 .\n\\]\n\nLet \\(S=d_1+d_3+d_5+d_7\\). \nThen the alternating sum is \\(2S-36\\). \nIt must be a multiple of \\(11\\) and also even (because \\(2S-36\\) is even). \nThe only even multiple of \\(11\\) in the range \\([-16,16]\\) (the possible values of \\(2S-36\\)) is \\(0\\).\n\nHence \n\n\\[\n2S-36=0\\quad\\Longrightarrow\\quad S=18 .\n\\]\n\nSo the four digits occupying the odd positions must sum to \\(18\\)\n(and automatically the even positions also sum to \\(18\\)).\n\n---\n\n### 3. Choosing the odd\u2011position set\n\nWe need all \\(4\\)-element subsets of \\(\\{1,2,3,4,5,6,7,8\\}\\) whose sum is \\(18\\).\n\nListing them (or using a generating function) gives\n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThus there are **8** possible sets for the odd positions.\n\nEach such set contains exactly two even digits (any valid set must have\ntwo evens and two odds, because an odd number of evens would give an odd total).\n\n---\n\n### 4. Arranging the digits\n\n*Odd positions (1,3,5,7)* \u2013 the chosen 4 digits can be placed in \\(4! = 24\\) ways.\n\n*Even positions (2,4,6,8)* \u2013 the remaining four digits must be placed so that\nposition\u202f8 is even.\n\nIf the even\u2011position set contains \\(k\\) even digits, we have \\(k\\) choices for which even digit goes to position\u202f8, and the remaining three digits can be ordered in the other three even positions in \\(3! = 6\\) ways. \n\nFor every valid odd\u2011set we have exactly \\(k = 2\\) even digits in the even\u2011position set,\nso\n\n\\[\n\\text{arrangements of even positions}=2\\cdot 3! = 12 .\n\\]\n\nHence for each of the 8 possible odd\u2011sets we obtain\n\n\\[\n24 \\times 12 = 288\\text{ permutations}.\n\\]\n\n---\n\n### 5. Total number \\(N\\)\n\n\\[\nN = 8 \\times 288 = 2304 .\n\\]\n\n---\n\n### 6. Required difference\n\n\\[\nN - 2025 = 2304 - 2025 = 279 .\n\\]\n\n---\n\n\\[\n\\boxed{279}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The equations describe geometric loci in the complex plane.\n\n---\n\n### 1. The first equation \n\n\\[\n|25+20i-z|=5\n\\]\n\nis a circle \n\n\\[\nC:\\;(x-25)^2+(y-20)^2 =5^{\\,2}=25 .\n\\]\n\nIts centre is \\(C_0=(25,20)\\) and its radius is \\(r=5\\).\n\n---\n\n### 2. The second equation \n\n\\[\n|z-4-k|=|z-3i-k|\n\\]\n\nmeans that the point \\(z\\) is equidistant from the points \n\n\\[\nA=(4+k,0), \\qquad B=(k,3).\n\\]\n\nHence the locus is the **perpendicular bisector** of segment \\(\\overline{AB}\\).\n\n* Midpoint of \\(AB\\):\n\n\\[\nM=\\Bigl(\\frac{(k+4)+k}{2},\\frac{0+3}{2}\\Bigr)=(k+2,\\tfrac32).\n\\]\n\n* Direction vector of \\(AB\\): \n\n\\[\n\\vec{AB}=(-4,3) \\quad\\Longrightarrow\\quad \\text{slope of }AB =-\\frac34 .\n\\]\n\nThe perpendicular bisector therefore has slope the negative reciprocal, \\(\\frac43\\).\n\nThe equation of the line \\(L_k\\) (the bisector) is \n\n\\[\ny-\\tfrac32=\\frac43\\bigl(x-(k+2)\\bigr)\n\\]\n\nor, after clearing fractions,\n\n\\[\n8x-6y-(8k+7)=0. \\tag{1}\n\\]\n\n---\n\n### 3. Tangency condition \n\nThe system has **exactly one** solution precisely when the line \\(L_k\\) is tangent to the circle \\(C\\). \nTangency occurs when the distance from the centre \\(C_0=(25,20)\\) to the line equals the radius \\(5\\).\n\nFor the line \\(8x-6y-(8k+7)=0\\),\n\n\\[\n\\text{dist}(C_0,L_k)=\\frac{|8\\cdot25-6\\cdot20-(8k+7)|}{\\sqrt{8^2+(-6)^2}}\n =\\frac{|200-120-(8k+7)|}{10}\n =\\frac{|73-8k|}{10}.\n\\]\n\nSet this equal to the radius \\(5\\):\n\n\\[\n\\frac{|73-8k|}{10}=5\\quad\\Longrightarrow\\quad |73-8k|=50.\n\\]\n\nHence \n\n\\[\n73-8k=50 \\quad\\text{or}\\quad 73-8k=-50 .\n\\]\n\nSolving gives \n\n\\[\n\\begin{cases}\n73-8k=50 &\\Rightarrow\\; 8k=23 \\;\\Rightarrow\\; k=\\dfrac{23}{8},\\\\[4pt]\n73-8k=-50 &\\Rightarrow\\; 8k=123 \\;\\Rightarrow\\; k=\\dfrac{123}{8}.\n\\end{cases}\n\\]\n\nBoth values make the line tangent to the circle, so each yields exactly one solution \\(z\\).\n\n---\n\n### 4. Sum of all possible \\(k\\)\n\n\\[\nk_1+k_2=\\frac{23}{8}+\\frac{123}{8}=\\frac{146}{8}=\\frac{73}{4}.\n\\]\n\nThus \\(m=73,\\; n=4\\) (coprime), and\n\n\\[\nm+n=73+4=77.\n\\]\n\n---\n\n\\[\n\\boxed{77}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\n\\boxed{240}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nA=(0,0),\\qquad B=\\mathbf b ,\\qquad C=\\mathbf c .\n\\]\n\nThen \\(\\triangle ABC\\) has oriented area \n\n\\[\n[\\triangle ABC]=\\frac12\\,\\bigl(\\mathbf b\\times\\mathbf c\\bigr) .\n\\]\n\n--------------------------------------------------------------------\n### 1. Coordinates of the points on the sides \n\nOn \\(AB\\)\n\n\\[\nAD=4,\\;DE=16,\\;EB=8\\qquad\\Longrightarrow\\qquad AB=28 .\n\\]\n\nHence \n\n\\[\nD=\\frac{4}{28}\\mathbf b=\\frac17\\mathbf b ,\\qquad \nE=\\frac{20}{28}\\mathbf b=\\frac57\\mathbf b .\n\\]\n\nOn \\(AC\\)\n\n\\[\nAF=13,\\;FG=52,\\;GC=26\\qquad\\Longrightarrow\\qquad AC=91 .\n\\]\n\nThus \n\n\\[\nF=\\frac{13}{91}\\mathbf c ,\\qquad \nG=\\frac{65}{91}\\mathbf c .\n\\]\n\n--------------------------------------------------------------------\n### 2. Area of \\(DEGF\\)\n\nFor any two points \\(P=\\alpha_P\\mathbf b+\\beta_P\\mathbf c\\) and\n\\(Q=\\alpha_Q\\mathbf b+\\beta_Q\\mathbf c\\),\n\n\\[\nP\\times Q=(\\alpha_P\\beta_Q-\\beta_P\\alpha_Q)\\,(\\mathbf b\\times\\mathbf c).\n\\]\n\nWith the order \\(D\\to E\\to G\\to F\\) we obtain \n\n\\[\n\\begin{aligned}\n\\sum (P_i\\times P_{i+1})&=\n\\underbrace{D\\times E}_{0}\n+\\underbrace{E\\times G}_{\\frac{5}{7}\\frac{65}{91}\\,K}\n+\\underbrace{G\\times F}_{0}\n+\\underbrace{F\\times D}_{-\\frac{13}{91}\\frac1{7}\\,K} \\\\[2mm]\n&=\\Bigl(\\frac{5\\cdot65}{7\\cdot91}\n -\\frac{13}{7\\cdot91}\\Bigr)K\n =\\frac{312}{637}\\,K ,\n\\end{aligned}\n\\]\n\nwhere \\(K=\\mathbf b\\times\\mathbf c\\). \nTherefore \n\n\\[\n[DEGF]=\\frac12\\Bigl|\\frac{312}{637}K\\Bigr|\n =\\frac{156}{637}|K| .\n\\]\n\nGiven \\([DEGF]=288\\),\n\n\\[\n|K|=288\\cdot\\frac{637}{156}=1176 .\n\\]\n\nConsequently \n\n\\[\n[\\triangle ABC]=\\frac12|K|=588 .\n\\]\n\n--------------------------------------------------------------------\n### 3. The reflected points \n\nReflecting \\(D\\) across \\(F\\) gives \n\n\\[\nM=2F-D=\\frac{26}{91}\\mathbf c-\\frac{13}{91}\\mathbf b .\n\\]\n\nReflecting \\(G\\) across \\(E\\) gives \n\n\\[\nN=2E-G=\\frac{130}{91}\\mathbf b-\\frac{65}{91}\\mathbf c .\n\\]\n\n--------------------------------------------------------------------\n### 4. Area of the heptagon \\(AFNBCEM\\)\n\nList the vertices in the given order and write each as\n\\(P_i=\\alpha_i\\mathbf b+\\beta_i\\mathbf c\\):\n\n\\[\n\\begin{array}{c|c|c}\n\\text{vertex}&\\alpha_i&\\beta_i\\\\\\hline\nA&0&0\\\\\nF&0&\\dfrac{13}{91}\\\\\nN&\\dfrac{130}{91}&-\\dfrac{65}{91}\\\\\nB&1&0\\\\\nC&0&1\\\\\nE&\\dfrac57&0\\\\\nM&-\\dfrac{13}{91}&\\dfrac{26}{91}\n\\end{array}\n\\]\n\nFor the polygon the signed area is \n\n\\[\n\\frac12\\sum_{i=0}^{6}(\\alpha_i\\beta_{i+1}-\\beta_i\\alpha_{i+1})\\,K .\n\\]\n\nComputing the sum (using the common denominator \\(8281=91^{2}=7^{2}\\,13^{2}\\)) gives \n\n\\[\n\\sum_{i}(\\alpha_i\\beta_{i+1}-\\beta_i\\alpha_{i+1})=1 .\n\\]\n\nHence \n\n\\[\n[AFNBCEM]=\\frac12\\,K\n =\\frac12\\cdot1176\n =588 .\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{588}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(0,c) , \\qquad b^{2}+c^{2}=BC^{2}=38^{2}=1444 .\n\\]\n\n--------------------------------------------------------------------\n### 1. Coordinates of \\(K\\) and \\(L\\)\n\nBecause \\(AK=BK=14\\), the point \\(K\\) is on the perpendicular bisector of \\(\\overline{AB}\\); hence \n\n\\[\nK=\\Bigl(\\frac b2 ,\\; \\sqrt{14^{2}-\\Bigl(\\frac b2\\Bigr)^{2}}\\Bigr).\n\\]\n\nWrite \n\n\\[\nm=\\frac b2 ,\\qquad p=\\sqrt{196-m^{2}},\n\\]\n\nso \\(K=(m,p)\\) and \\(m^{2}+p^{2}=196\\).\n\nSimilarly \\(AL=CL=14\\) gives \n\n\\[\nL=\\Bigl(\\sqrt{196-n^{2}},\\; n\\Bigr),\n\\]\n\nwith \n\n\\[\nn=\\frac c2 ,\\qquad q=\\sqrt{196-n^{2}},\\qquad n^{2}+q^{2}=196 .\n\\]\n\n--------------------------------------------------------------------\n### 2. Trigonometric parametrisation \n\nSince \\(m^{2}+p^{2}=196\\) we may set \n\n\\[\nm=14\\cos\\theta ,\\qquad p=14\\sin\\theta ,\\qquad 0<\\theta<\\frac{\\pi}{2}.\n\\]\n\nLikewise \n\n\\[\nn=14\\sin\\psi ,\\qquad q=14\\cos\\psi ,\\qquad 0<\\psi<\\frac{\\pi}{2}.\n\\]\n\nBecause \\(AKL\\) is equilateral, \\(\\angle KAL=60^{\\circ}\\); therefore \n\n\\[\n\\psi-\\theta=60^{\\circ}\\qquad\\Longrightarrow\\qquad\\psi=\\theta+\\frac{\\pi}{3}.\n\\]\n\n--------------------------------------------------------------------\n### 3. The right\u2011triangle condition \n\n\\[\nb^{2}+c^{2}=4(m^{2}+n^{2})=1444\\quad\\Longrightarrow\\quad m^{2}+n^{2}=361 .\n\\]\n\nSubstituting the trigonometric expressions,\n\n\\[\n(14\\cos\\theta)^{2}+(14\\sin\\psi)^{2}=361\n\\Longrightarrow \n\\cos ^{2}\\theta+\\sin ^{2}(\\theta+60^{\\circ})=\\frac{361}{196}.\n\\]\n\nUsing \\(\\sin^{2}\\alpha=\\frac{1-\\cos2\\alpha}{2}\\) and simplifying we obtain \n\n\\[\n3\\cos2\\theta+\\sqrt3\\sin2\\theta=\\frac{165}{49}.\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 4. Area of \\(BKLC\\)\n\nThe region \\(BKLC\\) is the triangle \\(ABC\\) with three interior triangles removed:\n\n\\[\n[BKLC]=[ABC]-[ABK]-[ALC]-[AKL].\n\\]\n\nNow \n\n\\[\n[ABC]=\\frac{bc}{2}=2mn, \\qquad\n[ABK]=\\frac{b\\;y_{K}}{2}=mp, \\qquad\n[ALC]=\\frac{c\\;x_{L}}{2}=nq,\n\\]\n\nand \\([AKL]=\\frac{\\sqrt3}{4}\\,14^{2}=49\\sqrt3\\).\n\nHence \n\n\\[\nS=[BKLC]=2mn-mp-nq-49\\sqrt3 .\n\\tag{2}\n\\]\n\nInsert the trigonometric forms:\n\n\\[\n\\begin{aligned}\n2mn&=2(14\\cos\\theta)(14\\sin\\psi)=196\\bigl(2\\cos\\theta\\sin\\psi\\bigr),\\\\\nmp&=14^{2}\\cos\\theta\\sin\\theta=196(\\cos\\theta\\sin\\theta),\\\\\nnq&=14^{2}\\sin\\psi\\cos\\psi=196(\\sin\\psi\\cos\\psi).\n\\end{aligned}\n\\]\n\nThus \n\n\\[\nS=196\\bigl[2\\cos\\theta\\sin\\psi-(\\cos\\theta\\sin\\theta+\\sin\\psi\\cos\\psi)\\bigr]-49\\sqrt3 .\n\\tag{3}\n\\]\n\nUsing \\(\\psi=\\theta+60^{\\circ}\\) and elementary identities, (3) reduces to \n\n\\[\nS=49\\bigl[\\sqrt3\\,(4\\cos^{2}\\theta-1)-2\\sin(2\\theta+120^{\\circ})\\bigr].\n\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n### 5. Eliminate the trigonometric functions\n\nSet \n\n\\[\nA=\\cos(2\\theta-30^{\\circ}).\n\\]\n\nFrom (1),\n\n\\[\n3\\cos2\\theta+\\sqrt3\\sin2\\theta\n =\\frac{165}{49}\n =2\\sqrt3\\,A .\n\\]\n\nHence \n\n\\[\nA=\\frac{165}{98\\sqrt3}.\n\\tag{5}\n\\]\n\nExpress the right\u2013hand side of (4) in terms of \\(A\\). \nWrite \n\n\\[\n\\begin{aligned}\nX&=\\frac{\\sqrt3}{2}\\cos2\\theta,\\qquad\nY=\\frac12\\sin2\\theta,\n\\end{aligned}\n\\]\n\nso that \n\n\\[\nA=X+Y,\\qquad\n\\sin(2\\theta+120^{\\circ})=X-Y .\n\\]\n\nThen \n\n\\[\n\\sqrt3\\,(4\\cos^{2}\\theta-1)=\\sqrt3+4X,\n\\qquad\n-2\\sin(2\\theta+120^{\\circ})=-2(X-Y).\n\\]\n\nSubstituting these into (4) gives \n\n\\[\nS=49\\bigl(\\sqrt3+4X-2X+2Y\\bigr)\n =49\\bigl(\\sqrt3+2(X+Y)\\bigr)\n =49\\bigl(\\sqrt3+2A\\bigr).\n\\]\n\nFinally insert (5):\n\n\\[\nS=49\\left(\\sqrt3+\\frac{2\\cdot165}{98\\sqrt3}\\right)\n =49\\sqrt3+\\frac{165}{\\sqrt3}\n =\\frac{147+165}{\\sqrt3}\n =\\frac{312}{\\sqrt3}\n =104\\sqrt3 .\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{104}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the letters be numbered \n\n\\[\nA=1,\\;B=2,\\;\\dots ,\\;L=12 .\n\\]\n\nA random pairing of the 12 letters is a **perfect matching**. \nThe total number of unordered pairings is \n\n\\[\n(12-1)!!=\\frac{12!}{2!^{6}6!}=10395 .\n\\]\n\n---\n\n### 1. Fix the partner of \\(G\\)\n\nIn a random matching the partner of \\(G\\) is equally likely to be any of the other \\(11\\) letters. \nLet the partner be \\(X\\neq G\\). Write \n\n\\[\nm=\\min \\{G,X\\}.\n\\]\n\nThe pair containing \\(G\\) will be the last (lexicographically largest) word **iff** \nall minima of the other five pairs are less than \\(m\\). \nHence we must count, for each possible partner \\(X\\), the number of matchings of the\nremaining \\(10\\) letters whose minima are all \\(G\\) \n\nPossible partners: \\(H,I,J,K,L\\) (5 choices). \nHere \\(m=G\\). \nAmong the remaining letters we have \n\n\\[\nL=\\{A,B,C,D,E,F\\}\\;(a=6),\\qquad\nH=\\{\\text{the four letters }>G\\text{ other than }X\\}\\;(b=4).\n\\]\n\nThus \n\n\\[\n\\text{good}= \\frac{6!}{2^{1}\\cdot1!}=360,\n\\qquad\nP(\\text{good}\\mid X)=\\frac{360}{945}= \\frac{8}{21}.\n\\]\n\nContribution to the required probability:\n\n\\[\n5\\cdot\\frac1{11}\\cdot\\frac{8}{21}= \\frac{40}{231}.\n\\]\n\n#### (ii) \\(Xy,\\;x+y>76\\quad\\text{(region }A)\\\\\n\\text{or}\\\\\nx75\\quad\\text{(region }C)\\\\\n\\text{or}\\\\\nx>-1,\\;x+2y<75\\quad\\text{(region }D)\n\\end{cases}\n\\end{aligned}\n\\]\n\nIntersecting the possibilities gives four candidate regions:\n\n\\[\n\\begin{array}{c|c}\n\\text{Intersection} & \\text{Constraints}\\\\ \\hline\nA\\cap C & x>y,\\;x+y>76,\\;x<-1,\\;x+2y>75\\\\\nA\\cap D & x>y,\\;x+y>76,\\;x>-1,\\;x+2y<75\\\\\nB\\cap C & x75\\\\\nB\\cap D & x-1,\\;x+2y<75\n\\end{array}\n\\]\n\nThe first intersection is impossible (it would require \\(x>y\\) while \\(x<-1-1,\\\\[2pt]\nx-1\\) this forces\n\\[\n-10\\) is the perpendicular distance from \\(G\\) to the line.\n\nThe distances from \\(G\\) to \\(C\\) and \\(D\\) give\n\n\\[\n\\begin{cases}\n(x_G-26)^2+h^2 = 40^2 = 1600,\\\\[4pt]\n(x_G-40)^2+h^2 = 30^2 = 900 .\n\\end{cases}\n\\]\n\nSubtracting the second equation from the first:\n\n\\[\n(x_G-26)^2-(x_G-40)^2 = 1600-900 = 700 .\n\\]\n\nCompute the left side:\n\n\\[\n(x_G^2-52x_G+26^2)-(x_G^2-80x_G+40^2)\n=28x_G-924 .\n\\]\n\nHence \n\n\\[\n28x_G-924 = 700 \\quad\\Longrightarrow\\quad 28x_G = 1624\n\\quad\\Longrightarrow\\quad x_G = 58 .\n\\]\n\nNow find \\(h\\) using either distance equation; use the first:\n\n\\[\n(58-26)^2 + h^2 = 1600\n\\Longrightarrow 32^2 + h^2 = 1600\n\\Longrightarrow h^2 = 1600-1024 = 576\n\\Longrightarrow h = 24 .\n\\]\n\nThus \\(G=(58,24)\\). Its perpendicular projection onto the line is at \\(x=58\\), which lies between \\(E\\) and \\(F\\).\n\n---\n\n### 3. Area of \\(\\triangle BGE\\)\n\nThe base \\(BE\\) lies on the \\(x\\)-axis:\n\n\\[\nBE = x_E - x_B = 57-18 = 39 .\n\\]\n\nThe height from \\(G\\) to this base is the vertical distance \\(h=24\\).\n\nTherefore\n\n\\[\n\\text{Area} = \\frac12 \\times (\\text{base}) \\times (\\text{height})\n= \\frac12 \\times 39 \\times 24 = 39 \\times 12 = 468 .\n\\]\n\n---\n\n\\[\n\\boxed{468}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\n\\text{Find all }n\\in\\mathbb Z_{>0}\\text{ such that }(n+2)\\mid 3(n+3)(n^2+9).\n\\]\n\n---\n\n### 1. Replace \\(n+2\\) by a new variable \n\nSet \n\\[\nm=n+2\\qquad (m\\ge 3).\n\\]\n\nThen \n\n\\[\nn=m-2,\\qquad n+3=m+1,\\qquad n^2+9=(m-2)^2+9=m^{2}-4m+13 .\n\\]\n\nHence the divisibility condition becomes \n\n\\[\nm\\mid 3(m+1)(m^{2}-4m+13).\n\\tag{1}\n\\]\n\n---\n\n### 2. Reduce the right\u2013hand side modulo \\(m\\)\n\nModulo \\(m\\),\n\n\\[\nm+1\\equiv 1,\\qquad m^{2}-4m+13\\equiv 13 .\n\\]\n\nTherefore \n\n\\[\n3(m+1)(m^{2}-4m+13)\\equiv 3\\cdot1\\cdot13=39 \\pmod m .\n\\]\n\nSo (1) is equivalent to \n\n\\[\nm\\mid 39 .\n\\tag{2}\n\\]\n\nIndeed, if \\(m\\mid 39\\) then the right\u2013hand side of (1) equals \\(39+km\\) for some integer \\(k\\), hence is divisible by \\(m\\); conversely, if \\(m\\mid 3(m+1)(m^{2}-4m+13)\\) then \\(m\\mid 39\\).\n\n---\n\n### 3. List possible \\(m\\)\n\nThe positive divisors of \\(39\\) are \n\n\\[\n1,\\;3,\\;13,\\;39 .\n\\]\n\nSince \\(m=n+2\\ge 3\\) (because \\(n\\ge1\\)), we keep \n\n\\[\nm\\in\\{3,\\;13,\\;39\\}.\n\\]\n\n---\n\n### 4. Recover the corresponding \\(n\\)\n\n\\[\n\\begin{aligned}\nm=3 &\\;\\Rightarrow\\; n=m-2=1,\\\\[2pt]\nm=13 &\\;\\Rightarrow\\; n=11,\\\\[2pt]\nm=39 &\\;\\Rightarrow\\; n=37 .\n\\end{aligned}\n\\]\n\nAll three indeed satisfy the original divisibility (quick check: the quotients are \\(40,420,4240\\) respectively).\n\n---\n\n### 5. Sum of all such \\(n\\)\n\n\\[\n1+11+37=49.\n\\]\n\n\\[\n\\boxed{49}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nP:\\;y=x^{2}-4\n\\]\n\nand rotate \\(P\\) \\(60^{\\circ}\\) counter\u2011clockwise about the origin. \nIf \\((u,v)\\) is a point of \\(P\\) \\((v=u^{2}-4)\\), after the rotation we obtain \n\n\\[\n\\begin{aligned}\nx &=u\\cos 60^{\\circ}-v\\sin 60^{\\circ}\n =\\frac{u-\\sqrt3\\,(u^{2}-4)}2,\\\\[2mm]\ny &=u\\sin 60^{\\circ}+v\\cos 60^{\\circ}\n =\\frac{\\sqrt3\\,u+u^{2}-4}2 .\n\\end{aligned}\n\\tag{1}\n\\]\n\nA point \\((x,y)\\) that belongs to both the original parabola and its image\nmust satisfy \n\n\\[\ny=x^{2}-4 \\qquad\\text{and}\\qquad (x,y)=\\bigl(x(u),y(u)\\bigr)\\text{ for some }u .\n\\]\n\nUsing (1) and substituting \\(y=x^{2}-4\\) we get an equation for the\npre\u2011image coordinate \\(u\\):\n\n\\[\n\\Bigl(u-\\sqrt3\\,(u^{2}-4)\\Bigr)^{2}=2u^{2}+2\\sqrt3\\,u+8 .\n\\]\n\nSimplifying gives \n\n\\[\n3u^{4}-25u^{2}+40+2\\sqrt3\\,u\\,(3-u^{2})=0 .\n\\tag{2}\n\\]\n\nLet \\(t=u^{2}=x^{2}\\;(t\\ge0)\\). Equation (2) becomes \n\n\\[\n\\bigl(3t^{2}-25t+40\\bigr)^{2}=12t\\,(3-t)^{2},\n\\]\n\nor\n\n\\[\n9t^{4}-162t^{3}+937t^{2}-2108t+1600=0 .\n\\tag{3}\n\\]\n\nThe quartic factors over the integers:\n\n\\[\n\\begin{aligned}\n9t^{4}-162t^{3}+937t^{2}-2108t+1600\n &=\\bigl(t^{2}-11t+16\\bigr)\\bigl(9t^{2}-63t+100\\bigr).\n\\end{aligned}\n\\]\n\nThus the possible values of \\(t\\) are\n\n\\[\nt=\\frac{11\\pm\\sqrt{57}}2,\\qquad\nt=\\frac{63\\pm\\sqrt{369}}{18}.\n\\]\n\nRecall that \\(t=x^{2}\\) and that a genuine intersection must satisfy the\noriginal unsquared equation \n\n\\[\n3t^{2}-25t+40=2\\sqrt3\\,\\sqrt t\\,(3-t).\n\\tag{4}\n\\]\n\nChecking the sign of each side of (4) shows that only \n\n\\[\nt=\\frac{11-\\sqrt{57}}2\\approx1.725\n\\]\n\nsatisfies (4) with \\(x>0\\). (The other three roots correspond to the\ncase \\(3t^{2}-25t+40= -2\\sqrt3\\,\\sqrt t\\,(3-t)\\) or give \\(y>0\\).)\n\nSince \\(y=x^{2}-4=t-4\\),\n\n\\[\ny=\\frac{11-\\sqrt{57}}2-4=\\frac{3-\\sqrt{57}}2 .\n\\]\n\nHence the required numbers are \n\n\\[\na=3,\\qquad b=57,\\qquad c=2,\n\\]\n\nwith \\(\\gcd(a,c)=1\\). Therefore\n\n\\[\na+b+c=3+57+2=62 .\n\\]\n\n\\[\n\\boxed{62}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe product $ \\prod_{k=4}^{63} \\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})} = \\frac{\\log_4(5^{15})}{\\log_5(5^{12})} \\cdot \\frac{\\log_5(5^{24})}{\\log_6(5^{21})} \\cdot \\frac{\\log_6(5^{35})}{\\log_7(5^{32})} \\cdots \\frac{\\log_{63}(5^{3968})}{\\log_{64}(5^{3965})} $ is equal to $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\n\\prod_{k=4}^{63}\\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})}\n\\]\n\n---\n\n### 1. Rewrite each term using change of base \n\n\\[\n\\log_a b=\\frac{\\ln b}{\\ln a}\n\\]\n\nHence \n\n\\[\n\\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})}\n =\\frac{\\displaystyle\\frac{\\ln\\! \\big(5^{\\,k^2-1}\\big)}{\\ln k}}\n {\\displaystyle\\frac{\\ln\\! \\big(5^{\\,k^2-4}\\big)}{\\ln (k+1)}}\n =\\frac{(k^2-1)\\ln5}{\\ln k}\\cdot\\frac{\\ln (k+1)}{(k^2-4)\\ln5}\n =\\frac{k^2-1}{k^2-4}\\cdot\\frac{\\ln(k+1)}{\\ln k}.\n\\]\n\nThus the whole product becomes \n\n\\[\n\\Bigl[\\prod_{k=4}^{63}\\frac{k^2-1}{\\,k^2-4}\\Bigr]\\,\n\\Bigl[\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\\Bigr].\n\\]\n\n---\n\n### 2. The logarithmic factor telescopes \n\n\\[\n\\prod_{k=4}^{63}\\frac{\\ln(k+1)}{\\ln k}\n= \\frac{\\ln5}{\\ln4}\\cdot\\frac{\\ln6}{\\ln5}\\cdots\\frac{\\ln64}{\\ln63}\n= \\frac{\\ln64}{\\ln4}\n= \\frac{6\\ln2}{2\\ln2}=3.\n\\]\n\n---\n\n### 3. Simplify the rational factor \n\n\\[\n\\frac{k^2-1}{k^2-4}= \\frac{(k-1)(k+1)}{(k-2)(k+2)}.\n\\]\n\nHence \n\n\\[\n\\prod_{k=4}^{63}\\frac{k^2-1}{k^2-4}\n= \\Bigl[\\prod_{k=4}^{63}\\frac{k-1}{k-2}\\Bigr]\n \\Bigl[\\prod_{k=4}^{63}\\frac{k+1}{k+2}\\Bigr].\n\\]\n\n**First product**\n\n\\[\n\\prod_{k=4}^{63}\\frac{k-1}{k-2}\n= \\frac{3}{2}\\cdot\\frac{4}{3}\\cdot\\frac{5}{4}\\cdots\\frac{62}{61}\n= \\frac{62}{2}=31.\n\\]\n\n**Second product**\n\n\\[\n\\prod_{k=4}^{63}\\frac{k+1}{k+2}\n= \\frac{5}{6}\\cdot\\frac{6}{7}\\cdot\\frac{7}{8}\\cdots\\frac{64}{65}\n= \\frac{5}{65}= \\frac{1}{13}.\n\\]\n\nMultiplying,\n\n\\[\n\\prod_{k=4}^{63}\\frac{k^2-1}{k^2-4}=31\\cdot\\frac{1}{13}= \\frac{31}{13}.\n\\]\n\n---\n\n### 4. Combine the two parts \n\n\\[\n\\prod_{k=4}^{63}\\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})}\n= \\frac{31}{13}\\times 3 = \\frac{93}{13}.\n\\]\n\nThe fraction \\(\\frac{93}{13}\\) is already in lowest terms (\\(\\gcd(93,13)=1\\)). \n\nThus \\(m=93,\\; n=13\\) and \n\n\\[\nm+n = 93+13 = 106.\n\\]\n\n\\[\n\\boxed{106}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution Sketch**\n\nWrite every integer \\(a\\le 3^{6}=729\\) in its base\u2011\\(3\\) expansion \n\n\\[\na = a_{0}+a_{1}3+a_{2}3^{2}+a_{3}3^{3}+a_{4}3^{4}+a_{5}3^{5},\n\\qquad a_{i}\\in\\{0,1,2\\}.\n\\]\n\nLet \n\n\\[\nA(x)=a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}+a_{4}x^{4}+a_{5}x^{5}\\in\\mathbb{F}_{3}[x].\n\\]\n\nModulo \\(3^{7}\\) we have \n\n\\[\na^{3}\\equiv a_{0}^{3}+9a_{0}^{2}a_{1}+27\\bigl(a_{0}a_{1}^{2}+a_{0}^{2}a_{2}\\bigr)\n +\\; \\cdots\\;+3^{6}a_{2}^{3}\\pmod{3^{7}} .\n\\]\n\nHence\n\n\\[\na^{3}+b^{3}+c^{3}\\equiv \n\\sum_{i=0}^{2}3^{i}\\bigl(a_{i}^{3}+b_{i}^{3}+c_{i}^{3}\\bigr)\\pmod{3^{7}} .\n\\]\n\nBecause \\(x^{3}\\equiv x\\pmod 3\\) for \\(x\\in\\{0,1,2\\}\\), the condition\n\\(a^{3}+b^{3}+c^{3}\\equiv0\\pmod{3^{7}}\\) is equivalent to the three\nindependent linear equations \n\n\\[\na_{0}+b_{0}+c_{0}\\equiv0,\\qquad\na_{1}+b_{1}+c_{1}\\equiv0,\\qquad\na_{2}+b_{2}+c_{2}\\equiv0\\pmod 3 .\n\\]\n\nFor each digit\u2011position \\(i=0,1,2\\) the number of ordered triples\n\\((a_{i},b_{i},c_{i})\\) satisfying the linear condition is\n\\(3^{2}=9\\) (choose any two digits freely, the third one is forced).\nThe remaining higher digits \\(a_{3},a_{4},a_{5}\\) are unrestricted; each\nhas \\(3^{3}=27\\) possibilities (three choices for each of the three\nnumbers).\n\nTherefore the total number of admissible triples \\((a,b,c)\\) is \n\n\\[\nN = 9^{3}\\cdot 27^{3}=3^{15}=14\\,348\\,907 .\n\\]\n\nFinally we need the remainder of \\(N\\) modulo \\(1000\\):\n\n\\[\n14\\,348\\,907\\equiv 907\\pmod{1000}.\n\\]\n\n\\[\n\\boxed{907}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n* \\(a,b,c,d\\) be the four interior edges (the two interior vertical and the two interior horizontal sides). \n* The eight outer edges are the two edges that belong to each unit square but are on the boundary of the\n\\(2\\times2\\) grid.\n\nFor a particular unit square the number of its interior red sides is the number of red interior edges incident\nto it. \nIf a square has \\(s\\) interior red sides, then it needs exactly \\(2-s\\) red outer sides, because the total number\nof red sides must be \\(2\\). \n\nFor a given square\n\n\\[\n\\#\\text{ ways to colour its two outer edges}= \\binom{2}{\\,2-s\\,}=\n\\begin{cases}\n1,&s=0\\text{ or }2,\\\\[2pt]\n2,&s=1 .\n\\end{cases}\n\\]\n\nThus, once the interior edges are fixed, the outer edges can be coloured independently for each square.\nIf among the four squares exactly \\(k\\) of them have \\(s=1\\) (i.e. exactly one interior red edge incident to the\nsquare), the number of completions of the outer edges is \\(2^{k}\\).\n\n--------------------------------------------------------------------\n\n### Counting interior\u2013edge configurations\n\nThe interior edges form a 4\u2011cycle \n\n\\[\nA\\;-\\;B\\;-\\;D\\;-\\;C\\;-\\;A .\n\\]\n\nWe list all \\(2^{4}=16\\) subsets of these edges and, for each, count how many squares have one interior red\nedge.\n\n| # interior edges | type of selection | \\# of squares with \\(s=1\\) | \\# of such subsets | contributions |\n|------------------|-------------------|----------------------------|--------------------|---------------|\n| 0 | none | 0 | 1 | \\(2^{0}=1\\) |\n| 1 | any one edge | 2 (the two squares incident to the edge) | 4 | \\(4\\cdot2^{2}=16\\) |\n| 2 | adjacent edges (share a vertex) | 2 (the two squares adjacent to the common vertex) | 4 | \\(4\\cdot2^{2}=16\\) |\n| 2 | opposite edges (no common vertex) | 4 (each square gets one) | 2 | \\(2\\cdot2^{4}=32\\) |\n| 3 | all but one edge | 2 (the two squares not incident to the missing edge) | 4 | \\(4\\cdot2^{2}=16\\) |\n| 4 | all four edges | 0 | 1 | \\(1\\cdot2^{0}=1\\) |\n\nAdding the contributions:\n\n\\[\n1+16+16+32+16+1 = 82 .\n\\]\n\n--------------------------------------------------------------------\n\nTherefore there are \n\n\\[\n\\boxed{82}\n\\]\n\ndifferent ways to colour the 12 unit segments so that each of the four unit squares has exactly two red sides\n(and consequently two blue sides).", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\(2025=3^{4}\\cdot5^{2}\\).\n\nDivisors of \\(2025\\) are of the form \\(3^{a}5^{b}\\) with \n\\(0\\le a\\le4,\\;0\\le b\\le2\\); therefore \n\n\\[\n|A|=(4+1)(2+1)=15 .\n\\]\n\n--------------------------------------------------------------------\n### Condition for the LCM\n\nFor a subset \\(B\\subseteq A\\),\n\n\\[\n\\operatorname{lcm}(B)=3^{\\max a}\\,5^{\\max b}.\n\\]\n\nThus \\(\\operatorname{lcm}(B)=2025=3^{4}5^{2}\\) iff \n\n* at least one element of \\(B\\) has exponent \\(a=4\\) (i.e. is divisible by \\(3^{4}\\)), and \n* at least one element of \\(B\\) has exponent \\(b=2\\) (i.e. is divisible by \\(5^{2}\\)).\n\n--------------------------------------------------------------------\n### Relevant divisor families \n\n\\[\nX=\\{d\\in A\\mid 3^{4}\\mid d\\}=\\{81,405,2025\\},\\qquad |X|=3,\n\\]\n\n\\[\nY=\\{d\\in A\\mid 5^{2}\\mid d\\}=\\{25,75,225,675,2025\\},\\qquad |Y|=5.\n\\]\n\n\\(X\\cap Y=\\{2025\\}\\), so \\(|X\\cup Y|=3+5-1=7\\).\n\n--------------------------------------------------------------------\n### Counting subsets with the required property \n\nA subset \\(B\\) works iff it meets both \\(X\\) and \\(Y\\). \nUsing inclusion\u2013exclusion on all \\(2^{15}\\) subsets of \\(A\\):\n\n\\[\n\\begin{aligned}\n\\#\\{B:\\ B\\cap X\\neq\\varnothing,\\ B\\cap Y\\neq\\varnothing\\}\n&=2^{15}\n -2^{12}\\;(\\text{subsets missing }X)\n -2^{10}\\;(\\text{subsets missing }Y)\\\\\n&\\qquad +2^{8}\\;(\\text{subsets missing both }X\\cup Y)\\\\[2mm]\n&=32768-4096-1024+256\\\\\n&=27904 .\n\\end{aligned}\n\\]\n\nAll these subsets are non\u2011empty, so the numerator is \\(27904\\).\n\n--------------------------------------------------------------------\n### Probability\n\n\\[\nP=\\frac{27904}{2^{15}}=\\frac{27904}{32768}.\n\\]\n\nBoth numbers are divisible by \\(256\\):\n\n\\[\n\\frac{27904}{32768}=\\frac{27904/256}{32768/256}= \\frac{109}{128}.\n\\]\n\nThe fraction \\(\\frac{109}{128}\\) is already in lowest terms, so \n\\(m=109,\\;n=128\\).\n\n\\[\nm+n=109+128=237.\n\\]\n\n\\[\n\\boxed{237}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Step\u202f1 \u2013 How regions grow**\n\nWhen a new line segment is drawn in the disk, it either \n*does not meet any previous segment* \u2013 it creates **one** new region, or \n*meets \\(k\\) previous segments in interior points* \u2013 it creates **\\(k+1\\)** new regions \n(the segment is cut into \\(k+1\\) pieces, each of which separates a region).\n\nHence, if we start with one region (the whole disk),\n\n\\[\n\\#\\text{regions}=1+\\#\\text{segments}+\\#\\text{interior intersections } .\n\\tag{1}\n\\]\n\nThe two perpendicular diameters intersect once, giving the four initial\nquadrants. After the 25 random chords are added we will have \n\n\\[\n27\\text{ segments} = 2\\text{ diameters}+25\\text{ chords}.\n\\]\n\nSo we only have to find the **expected number of interior intersection points**.\n\n--------------------------------------------------------------------\n\n**Step\u202f2 \u2013 Intersections with the diameters**\n\nA random chord meets a fixed diameter iff its two endpoints lie on opposite\nsides of that diameter. \n\n*Horizontal diameter*\u2003(\\(y=0\\)): the endpoints must belong to one of the\nfour unordered quadrant pairs \n\n\\[\n\\{Q_1,Q_3\\},\\{Q_1,Q_4\\},\\{Q_2,Q_3\\},\\{Q_2,Q_4\\},\n\\]\n\ni.e. 4 out of the 6 possible unordered pairs of different quadrants.\nThus \n\n\\[\nP(\\text{chord meets a given diameter})=\\frac{4}{6}= \\frac23 .\n\\]\n\nThe same probability holds for the vertical diameter. \nHence the expected number of chord\u2011diameter intersections is \n\n\\[\n25\\;( \\text{chords})\\times 2\\;( \\text{diameters})\\times \\frac23\n =\\frac{100}{3}.\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n\n**Step\u202f3 \u2013 Intersections between two random chords**\n\nLet a chord be represented by the unordered pair of quadrants that contain its\nend\u2011points. \nThere are \n\n* 4 *adjacent* pairs \\(\\{0,1\\},\\{1,2\\},\\{2,3\\},\\{3,0\\}\\); \n* 2 *opposite* pairs \\(\\{0,2\\},\\{1,3\\}\\).\n\nThus the six possible chords are the six edges of the complete graph \\(K_4\\)\non the four quadrants.\n\nTwo chords may be:\n\n| Relation of the two edges | How many ordered pairs | Intersection probability |\n|---------------------------|-----------------------|--------------------------|\n| Same edge (both chords use the same pair) | 6 (4 adjacent\u202f+\u202f2 opposite) | \\(\\frac12\\) |\n| Share one vertex (adjacent edges) | 24 (8 both adjacent\u202f+\u202f16 one adjacent\u2013one opposite) | \\(\\frac12\\) |\n| Disjoint edges, both adjacent (e.g. \\{0,1\\} & \\{2,3\\}) | 4 | \\(0\\) |\n| Disjoint edges, both opposite ( \\{0,2\\} & \\{1,3\\}) | 2 | \\(1\\) |\n\n*Why these probabilities?* \n\n* Same edge \u2013 the two chords are independent copies inside the same two\nquadrants. A short calculation (or a symmetry argument) gives a crossing\nprobability of \\(\\frac12\\).\n* Share a vertex \u2013 one endpoint of the second chord lies in the same quadrant\nas an endpoint of the first chord. The second endpoint is always in a\ndifferent quadrant, so the second chord meets the first exactly when the\npoint that shares the vertex falls between the two endpoints of the first\nchord. Averaging over the uniform positions gives \\(\\frac12\\) again.\n* Disjoint adjacent edges lie completely on opposite sides of the\nhorizontal (or vertical) diameter, so they can never meet \u21d2 probability \\(0\\).\n* Disjoint opposite edges always cross the centre of the disk; any two such\nchords intersect \u21d2 probability \\(1\\).\n\nSumming the contributions of the \\(36\\) ordered pairs of chords,\n\n\\[\nS = 6\\!\\left(\\frac12\\right)+24\\!\\left(\\frac12\\right)+4\\cdot0+2\\cdot1 = 17 .\n\\]\n\nTherefore the probability that two independently chosen random chords intersect is \n\n\\[\np_{\\text{chord\u2013chord}} = \\frac{S}{36}= \\frac{17}{36}.\n\\tag{3}\n\\]\n\n--------------------------------------------------------------------\n\n**Step\u202f4 \u2013 Expected number of chord\u2013chord intersections**\n\nThere are \\(\\binom{25}{2}=300\\) unordered pairs of the 25 random chords. \nUsing (3),\n\n\\[\nE(\\text{chord\u2013chord intersections})=300\\cdot\\frac{17}{36}\n =\\frac{425}{3}=141\\frac{2}{3}.\n\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n\n**Step\u202f5 \u2013 Total expected interior intersections**\n\n\\[\n\\begin{aligned}\nE(\\text{total interior intersections})\n&= (\\text{diameters intersect})\\\\\n&\\qquad +(\\text{chord\u2013diameter intersections})\\\\\n&\\qquad +(\\text{chord\u2013chord intersections})\\\\[2mm]\n&= 1+\\frac{100}{3}+ \\frac{425}{3}= 176 .\n\\end{aligned}\n\\tag{5}\n\\]\n\n--------------------------------------------------------------------\n\n**Step\u202f6 \u2013 Expected number of regions**\n\nInsert (5) into formula (1) with the total of \\(27\\) segments:\n\n\\[\nE(\\text{regions}) = 1 + 27 + 176 = 204 .\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{204}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution Overview**\n\nPlace the two circles on a coordinate plane, compute the positions of the relevant points, and write the\nrectangle\u2019s vertices in terms of its side\u2013lengths. \nThe conditions \u201c\\(C\\) is closer to \\(\\overline{GH}\\) than to \\(\\overline{EF}\\)\u201d and \u201c\\(D\\) is closer to\n\\(\\overline{FG}\\) than to \\(\\overline{EH}\\)\u201d fix the orientation of the rectangle. \nUsing the equality of the two triangle areas we obtain a simple relation between the rectangle\u2019s width\nand height, which together with the fact that the rectangle is inscribed in the small circle yields the\nrequired dimensions and its area.\n\n--------------------------------------------------------------------\n\n### 1. Coordinate set\u2011up \n\nLet \n\n* \\(O\\) be the centre of the large circle \\(\\omega_2\\) (radius \\(15\\)).\n* \\(A\\) be the centre of the small circle \\(\\omega_1\\) (radius \\(6\\)).\n* \\(B\\) the common point of tangency.\n\nBecause the circles are internally tangent,\n\\[\nOA = 15-6=9,\n\\qquad AB=6,\n\\qquad OB =15 .\n\\]\n\nChoose the \\(x\\)\u2013axis along \\(\\overline{BC}\\). \nTake \n\n\\[\nO=(0,0),\\qquad B=(15,0).\n\\]\n\nThen \\(A\\) lies on the same line, nine units left of \\(B\\):\n\\[\nA=(9,0).\n\\]\n\nSince \\(BC\\) is a diameter of \\(\\omega_2\\), the opposite end of the diameter is\n\\[\nC=(-15,0).\n\\]\n\nThe condition \\(\\overline{BC}\\perp\\overline{AD}\\) makes \\(AD\\) vertical, so the points of\n\\(\\omega_2\\) with \\(x=9\\) are\n\\[\nD=(9,12)\\quad\\text{or}\\quad D=(9,-12).\n\\]\nBecause later we need \\(D\\) to be nearer the top side of the rectangle, we take \n\n\\[\n\\boxed{D=(9,12)} .\n\\]\n\n--------------------------------------------------------------------\n\n### 2. The rectangle \\(EFGH\\)\n\n\\(EF\\) is required to be perpendicular to \\(\\overline{BC}\\); hence \\(EF\\) is a vertical side.\nLet the rectangle have\n\n* width \\(w\\) (the horizontal side \\(\\overline{FG}\\)),\n* height \\(h\\) (the vertical side \\(\\overline{EF}= \\overline{GH}\\)).\n\nSince the rectangle is inscribed in \\(\\omega_1\\), its centre coincides with the centre of \\(\\omega_1\\),\nnamely \\(A=(9,0)\\). Consequently the vertices are\n\n\\[\n\\begin{aligned}\nE&=\\bigl(b,\\,-\\tfrac{h}{2}\\bigr), &\nF&=\\bigl(b, \\tfrac{h}{2}\\bigr),\\\\[2mm]\nG&=\\bigl(a, \\tfrac{h}{2}\\bigr), &\nH&=\\bigl(a,\\,-\\tfrac{h}{2}\\bigr),\n\\end{aligned}\n\\]\nwhere \n\n\\[\na = 9-\\frac{w}{2},\\qquad b = 9+\\frac{w}{2}.\n\\]\n\nBecause every vertex lies on \\(\\omega_1\\) (radius \\(6\\) and centre \\((9,0)\\)),\n\\[\n(a-9)^2+\\Bigl(\\frac{h}{2}\\Bigr)^2 = (b-9)^2+\\Bigl(\\frac{h}{2}\\Bigr)^2 = 6^{2}=36 .\n\\]\nBoth equations give the single relation \n\n\\[\n\\boxed{w^{2}+h^{2}=144}\\tag{1}\n\\]\n(the rectangle\u2019s diagonal is the diameter \\(12\\) of the small circle).\n\n--------------------------------------------------------------------\n\n### 3. Interpreting the \u201ccloser\u2011to\u201d conditions \n\nThe statement \u201c\\(C\\) is closer to \\(\\overline{GH}\\) than to \\(\\overline{EF}\\)\u201d forces \\(\\overline{GH}\\) to be\nthe left vertical side (smaller \\(x\\))-coordinate) and \\(\\overline{EF}\\) the right vertical side. \nSimilarly \u201c\\(D\\) is closer to \\(\\overline{FG}\\) than to \\(\\overline{EH}\\)\u201d places \\(\\overline{FG}\\) at the\ntop (larger \\(y\\))-coordinate.\n\nThus \n\n\\[\n\\begin{aligned}\n\\text{dist}(C,\\overline{GH})&=a-(-15)=a+15,\\\\\n\\text{dist}(C,\\overline{EF})&=b+15,\\\\[1mm]\n\\text{dist}(D,\\overline{FG})&=12-\\frac{h}{2},\\\\\n\\text{dist}(D,\\overline{EH})&=12+\\frac{h}{2},\n\\end{aligned}\n\\]\nand the above inequalities are automatically satisfied for any feasible rectangle\n(\\(a9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "In base \\(b\\) the numbers \n\n\\[\n17_b = 1\\cdot b + 7 = b+7 ,\\qquad \n97_b = 9\\cdot b + 7 .\n\\]\n\nWe need bases \\(b>9\\) (so that the digits \\(7\\) and \\(9\\) are allowed) such that \n\n\\[\nb+7 \\mid 9b+7 .\n\\]\n\n---\n\n### Reduce the divisibility condition\n\nIf \\(b+7\\) divides \\(9b+7\\), then it also divides any integer linear combination of these two numbers. \nConsider \n\n\\[\n9(b+7) - (9b+7) = 9b+63 - 9b - 7 = 56 .\n\\]\n\nHence \n\n\\[\nb+7 \\mid 56 .\n\\]\n\nConversely, if \\(b+7\\) divides \\(56\\) then\n\n\\[\n9b+7 = 9(b+7) - 56\n\\]\n\nis also a multiple of \\(b+7\\). Thus the condition is equivalent to \n\n\\[\nb+7 \\text{ is a positive divisor of } 56 .\n\\]\n\n---\n\n### Find admissible divisors\n\nThe positive divisors of \\(56\\) are \n\n\\[\n1,\\;2,\\;4,\\;7,\\;8,\\;14,\\;28,\\;56 .\n\\]\n\nSince \\(b>9\\), we have \\(b+7>16\\). The only divisors of \\(56\\) exceeding \\(16\\) are \\(28\\) and \\(56\\).\n\n\\[\n\\begin{aligned}\nb+7 &= 28 &\\implies&\\; b = 21,\\\\[2mm]\nb+7 &= 56 &\\implies&\\; b = 49 .\n\\end{aligned}\n\\]\n\nBoth satisfy \\(b>9\\) and the original divisibility:\n\\[\n\\begin{aligned}\nb=21:&\\quad 17_{21}=28,\\; 97_{21}=196=28\\cdot7;\\\\\nb=49:&\\quad 17_{49}=56,\\; 97_{49}=448=56\\cdot8.\n\\end{aligned}\n\\]\n\nNo other bases work.\n\n---\n\n### Sum of all such bases\n\n\\[\n21+49 = 70 .\n\\]\n\n\\[\n\\boxed{70}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(0,c),\\qquad b^2+c^2=BC^2=38^2=1444 .\n\\]\n\nPut \n\n\\[\nK=(x_k ,y_k),\\qquad L=(x_l ,y_l).\n\\]\n\nThe given distances give \n\n\\[\n\\begin{aligned}\n&AK=AL=BK=CL=KL=14,\\\\\n&x_k^2+y_k^2=196,\\quad (x_k-b)^2+y_k^2=196,\\\\[2mm]\n&x_l^2+y_l^2=196,\\quad x_l^2+(y_l-c)^2=196,\\\\[2mm]\n&(x_k-x_l)^2+(y_k-y_l)^2=196 .\n\\end{aligned}\n\\]\n\nFrom the first two equations \n\n\\[\nb=2x_k,\\qquad y_k=\\sqrt{196-x_k^2}.\n\\]\n\nFrom the next two \n\n\\[\nc=2y_l,\\qquad x_l=\\sqrt{196-y_l^2}.\n\\]\n\nThus \n\n\\[\nK=(b/2,\\;\\sqrt{196-b^{2}/4}),\\qquad \nL=(\\sqrt{196-c^{2}/4},\\;c/2).\n\\]\n\nSince \\(AK=AL=KL=14\\), the triangle \\(AKL\\) is equilateral; hence\nthe angle \\(\\angle KAL=60^\\circ\\). Write\n\n\\[\nK=14(\\cos\\alpha,\\sin\\alpha),\\qquad \nL=14(\\cos(\\alpha+60^\\circ),\\sin(\\alpha+60^\\circ))\n\\]\n\nfor some \\(\\alpha\\) with \\(0^\\circ<\\alpha<30^\\circ\\).\nComparing with the expressions for \\(K\\) and \\(L\\) gives \n\n\\[\nb=28\\cos\\alpha,\\qquad c=28\\sin(\\alpha+60^\\circ).\n\\]\n\nThe hypotenuse length yields\n\n\\[\nb^{2}+c^{2}=28^{2}\\bigl(\\cos^{2}\\alpha+\\sin^{2}(\\alpha+60^\\circ)\\bigr)=38^{2}=1444,\n\\]\n\nso \n\n\\[\n\\cos^{2}\\alpha+\\sin^{2}(\\alpha+60^\\circ)=\\frac{361}{196}.\n\\tag{1}\n\\]\n\nFrom (1) we obtain, after using \\(\\sin^{2}\\theta= \\tfrac12(1-\\cos2\\theta)\\),\n\n\\[\n\\sqrt3\\sin(2\\alpha+60^\\circ)=\\frac{165}{98},\n\\qquad\\Longrightarrow\\qquad\n\\sin(2\\alpha+60^\\circ)=\\frac{165}{98\\sqrt3}.\n\\tag{2}\n\\]\n\nNow compute the required area.\n\n*Area of \\(\\triangle ABC\\)* \n\n\\[\n[ABC]=\\tfrac12bc=\\tfrac12\\,(28\\cos\\alpha)(28\\sin(\\alpha+60^\\circ))\n =392\\cos\\alpha\\sin(\\alpha+60^\\circ).\n\\tag{3}\n\\]\n\n*Area of \\(\\triangle AKB\\)* \n\nThe altitude from \\(K\\) to \\(AB\\) is \\(y_k=14\\sin\\alpha\\), and \\(AB=28\\cos\\alpha\\); thus \n\n\\[\n[AKB]=\\tfrac12\\,(28\\cos\\alpha)(14\\sin\\alpha)=98\\sin2\\alpha .\n\\tag{4}\n\\]\n\n*Area of \\(\\triangle ALC\\)* \n\nAnalogously \n\n\\[\n[ALC]=\\tfrac12\\,(28\\sin(\\alpha+60^\\circ))(14\\cos(\\alpha+60^\\circ))\n =98\\sin\\bigl(2\\alpha+120^\\circ\\bigr).\n\\tag{5}\n\\]\n\n*Area of the equilateral \\(\\triangle AKL\\)* \n\n\\[\n[AKL]=\\frac{\\sqrt3}{4}\\cdot14^{2}=49\\sqrt3.\n\\tag{6}\n\\]\n\nHence \n\n\\[\n\\begin{aligned}\n[BKLC]&=[ABC]-[AKB]-[ALC]-[AKL] \\\\[2mm]\n&=392\\cos\\alpha\\sin(\\alpha+60^\\circ)\n -98\\sin2\\alpha-98\\sin(2\\alpha+120^\\circ)-49\\sqrt3 .\n\\end{aligned}\n\\]\n\nUsing \\(\\sin(\\alpha+60^\\circ)=\\tfrac12\\sin\\alpha+\\tfrac{\\sqrt3}{2}\\cos\\alpha\\) and\nsimplifying, the expression reduces to \n\n\\[\n[BKLC]=49\\Bigl(\\sin2\\alpha+\\sqrt3\\bigl(1+\\cos2\\alpha\\bigr)\\Bigr).\n\\tag{7}\n\\]\n\nFrom (2),\n\n\\[\n\\sin2\\alpha+\\sqrt3\\cos2\\alpha\n =2\\sin(2\\alpha+60^\\circ)=\\frac{165}{49\\sqrt3}.\n\\]\n\nInsert this into (7):\n\n\\[\n\\begin{aligned}\n[BKLC]&=49\\Bigl(\\frac{165}{49\\sqrt3}+\\sqrt3\\Bigr)\n =\\frac{165}{\\sqrt3}+49\\sqrt3\\\\[2mm]\n &=\\frac{165\\sqrt3}{3}+49\\sqrt3\n =55\\sqrt3+49\\sqrt3=104\\sqrt3.\n\\end{aligned}\n\\]\n\nThus the area of quadrilateral \\(BKLC\\) equals \\(104\\sqrt3\\).\n\n\\[\n\\boxed{104}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n* \\(A,B,C\\) be the vertices of the acute triangle with \n\\(\\angle A=84^{\\circ},\\ \\angle B=60^{\\circ},\\ \\angle C=36^{\\circ}\\);\n* \\(D,E,F\\) the midpoints of \\(BC,CA,AB\\);\n* \\(G,H,J\\) the second intersections of the nine\u2011point circle with\n\\(BC,CA,AB\\) respectively.\n\nThe circumcircle of \\(\\triangle DEF\\) is the nine\u2011point circle of \\(\\triangle ABC\\).\nHence \\(G,H,J\\) are the three feet of the altitudes of \\(\\triangle ABC\\); \nthey form the orthic triangle \\(G\\!H\\!J\\).\n\n--------------------------------------------------------------------\n### 1. Arc \\(\\widehat{DE}\\)\n\nOn the nine\u2011point circle the vectors from its centre \\(N\\) to the\nmidpoints are \n\n\\[\nND=-\\frac{\\mathbf a}{2},\\qquad NE=-\\frac{\\mathbf b}{2},\n\\]\n\nwhere \\(\\mathbf a,\\mathbf b,\\mathbf c\\) are the unit vectors of the\ncircumcircle of \\(\\triangle ABC\\). Consequently\n\n\\[\n\\widehat{DE}= \\angle(-\\mathbf a,-\\mathbf b)=\\angle(\\mathbf a,\\mathbf b)\n =2\\angle ACB=2C = 2\\cdot36^{\\circ}=72^{\\circ}.\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 2. Arc \\(\\widehat{HJ}\\)\n\n\\(H\\) and \\(J\\) are the feet of the altitudes from \\(B\\) and \\(C\\);\nthey are vertices of the orthic triangle \\(G\\!H\\!J\\).\nFor an acute triangle the angles of its orthic triangle are \n\n\\[\n\\angle G =180^{\\circ}-2A,\\qquad \n\\angle H =180^{\\circ}-2B,\\qquad \n\\angle J =180^{\\circ}-2C .\n\\]\n\nWith \\(A=84^{\\circ},B=60^{\\circ},C=36^{\\circ}\\),\n\n\\[\n\\angle G =12^{\\circ},\\quad\n\\angle H =60^{\\circ},\\quad\n\\angle J =108^{\\circ}.\n\\]\n\nSince the nine\u2011point circle is the circumcircle of\n\\(\\triangle G\\!H\\!J\\), the central arc opposite a vertex equals twice the\nopposite interior angle. Hence\n\n\\[\n\\widehat{HJ}= \\widehat{B'C'} = 2\\angle G\n =2\\bigl(180^{\\circ}-2A\\bigr)=360^{\\circ}-4A\n =360^{\\circ}-4\\cdot84^{\\circ}=24^{\\circ}.\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 3. Arc \\(\\widehat{FG}\\)\n\nThe points \\(D,E,F\\) are the midpoints of the sides; they satisfy \n\n\\[\n\\angle N D F =\\angle(-\\mathbf a,-\\mathbf c)=120^{\\circ},\n\\]\n\nso the minor arc \\(\\widehat{DF}\\) of the nine\u2011point circle measures\n\\(120^{\\circ}\\). The arc \\(\\widehat{DF}\\) is the sum of the two\nconsecutive arcs \\(\\widehat{DG}\\) and \\(\\widehat{GF}\\).\n\nThe central arc \\(\\widehat{DG}\\) equals the angle between the\nvectors \\(ND\\) (direction \\(-\\mathbf a\\)) and \\(NG\\) (direction of the\nfoot from \\(A\\) onto \\(BC\\)).\nA short angle chase using the orthic triangle gives\n\n\\[\n\\widehat{DG}=48^{\\circ}.\n\\]\n\nTherefore\n\n\\[\n\\widehat{FG}= \\widehat{DF}-\\widehat{DG}=120^{\\circ}-48^{\\circ}=72^{\\circ}.\n\\tag{3}\n\\]\n\n(One can also obtain \\(\\widehat{FG}=72^{\\circ}\\) directly from the fact\nthat the chord \\(FJ\\) subtends the angle \\(60^{\\circ}\\) at the centre,\nso the complementary chord \\(FG\\) subtends \\(72^{\\circ}\\).)\n\n--------------------------------------------------------------------\n### 4. Required sum\n\nFrom (1)\u2013(3),\n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n&= 72^{\\circ}+2\\cdot24^{\\circ}+3\\cdot72^{\\circ}\\\\[2mm]\n&= 72^{\\circ}+48^{\\circ}+216^{\\circ}\\\\\n&= 336^{\\circ}.\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{336}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The players are distinct, so an assignment of flavors is a function from the nine players to the three flavors. \nLet \n\n\\[\nc=\\#\\text{chocolate},\\qquad v=\\#\\text{vanilla},\\qquad s=\\#\\text{strawberry}.\n\\]\n\nWe need \n\n\\[\nc+v+s=9,\\qquad c>v>s\\ge 1 .\n\\]\n\n---\n\n### 1. Find all possible triples \\((c,v,s)\\).\n\nWrite \\(s=a\\), \\(v=a+d\\), \\(c=a+d+e\\) with \\(a,d,e\\ge1\\). \nThen \n\n\\[\na+(a+d)+(a+d+e)=9\\Longrightarrow 3a+2d+e=9 .\n\\]\n\nSearching integer solutions with \\(a,d,e\\ge1\\) gives only three possibilities:\n\n* \\(a=1,d=1,e=4\\)\u2003\u2192 \\((c,v,s)=(6,2,1)\\)\n* \\(a=1,d=2,e=2\\)\u2003\u2192 \\((c,v,s)=(5,3,1)\\)\n* \\(a=2,d=1,e=1\\)\u2003\u2192 \\((c,v,s)=(4,3,2)\\)\n\nNo other triples satisfy \\(c>v>s\\) and sum to 9.\n\n---\n\n### 2. Count assignments for each triple.\n\nFor a fixed triple \\((c,v,s)\\) the number of assignments equals the multinomial coefficient \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\n\\[\n\\begin{aligned}\n(6,2,1)&:\\ \\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[2mm]\n(5,3,1)&:\\ \\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[2mm]\n(4,3,2)&:\\ \\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\n---\n\n### 3. Total number of assignments.\n\n\\[\nN=252+504+1260=2016.\n\\]\n\n---\n\n### 4. Remainder modulo \\(1000\\).\n\n\\[\n2016\\equiv 16 \\pmod{1000}.\n\\]\n\n---\n\n\\[\n\\boxed{16}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "First factor the quadratic form.\n\n\\[\n12x^{2}-xy-6y^{2}= (4x-3y)(3x+2y)\n\\]\n\nHence \n\n\\[\n(4x-3y)(3x+2y)=0\\Longrightarrow \n\\begin{cases}\n4x-3y=0\\\\[2mm]\n\\text{or}\\\\[2mm]\n3x+2y=0\n\\end{cases}\n\\]\n\n---\n\n### 1. Solutions of \\(4x-3y=0\\)\n\n\\(4x=3y\\Rightarrow y=\\dfrac{4}{3}x\\). \nSince \\(x,y\\) are integers, \\(x\\) must be a multiple of \\(3\\): set \\(x=3k\\), then \n\n\\[\ny=4k,\\qquad k\\in\\mathbb Z .\n\\]\n\nBoth coordinates must satisfy \\(-100\\le x,y\\le100\\):\n\n\\[\n|3k|\\le100,\\qquad|4k|\\le100\\Longrightarrow |k|\\le \\Big\\lfloor\\frac{100}{4}\\Big\\rfloor =25 .\n\\]\n\nThus \\(k=-25,-24,\\dots ,25\\): \\(51\\) integer pairs.\n\n---\n\n### 2. Solutions of \\(3x+2y=0\\)\n\n\\(3x=-2y\\Rightarrow y=-\\dfrac{3}{2}x\\). \nFor integers we need \\(x\\) even: write \\(x=2m\\), then \n\n\\[\ny=-3m,\\qquad m\\in\\mathbb Z .\n\\]\n\nAgain \\(-100\\le x,y\\le100\\) gives \n\n\\[\n|2m|\\le100,\\qquad|3m|\\le100\\Longrightarrow |m|\\le\\Big\\lfloor\\frac{100}{3}\\Big\\rfloor =33 .\n\\]\n\nThus \\(m=-33,-32,\\dots ,33\\): \\(67\\) integer pairs.\n\n---\n\n### 3. Remove double counting\n\nThe two families intersect only at \\((0,0)\\) (when \\(k=m=0\\)). \nHence the total number of distinct ordered pairs is \n\n\\[\n51+67-1=117 .\n\\]\n\n\\[\n\\boxed{117}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The function \n\n\\[\nf(x)=\\frac{(x-18)(x-72)(x-98)(x-k)}{x}\\qquad (x>0)\n\\]\n\nhas zeros at \\(x=18,\\;72,\\;98,\\;k\\) and \n\\(\\displaystyle \\lim_{x\\to0^+}f(x)=\\lim_{x\\to\\infty}f(x)=+\\infty\\).\nHence \\(f\\) is positive near the ends and negative on each of the two\nintervals bounded by the smallest two zeros and by the largest two zeros.\nConsequently \\(f\\) has exactly two local minima (one in each negative\ninterval).\n\nLet the common minimal value be \\(m<0\\). At a minimum the graph of\n\\(y=f(x)\\) is tangent to the horizontal line \\(y=m\\); therefore the\nequation \n\n\\[\nf(x)=m\\quad\\Longleftrightarrow\\quad (x-18)(x-72)(x-98)(x-k)-mx=0\n\\]\n\nmust have a **double root** at each minimum. Thus the quartic polynomial\nmust be a perfect square of a quadratic:\n\n\\[\n(x-18)(x-72)(x-98)(x-k)-mx=(x^{2}-Sx+P)^{2},\n\\]\nwhere \\(S,P,m\\) are constants.\n\nExpanding and equating coefficients with \n\n\\[\nN(x)-mx=x^{4}-(188+k)x^{3}+(10116+188k)x^{2}-(127008+10116k+m)x+127008k\n\\]\n\ngives \n\n\\[\n\\begin{cases}\nS=\\dfrac{188+k}{2},\\\\[4pt]\nS^{2}+2P=10116+188k,\\\\[4pt]\nm=2SP-(127008+10116k),\\\\[4pt]\nP^{2}=127008\\,k .\n\\end{cases}\n\\]\n\nFrom \\(P^{2}=127008k\\) set \\(t=\\sqrt{2k}>0\\); then \n\n\\[\nP=252t,\\qquad k=\\dfrac{t^{2}}{2},\n\\quad S=\\frac{188+k}{2}=94+\\frac{t^{2}}{4}.\n\\]\n\nSubstituting these into \\(S^{2}+2P=10116+188k\\) yields an equation in\n\\(t\\):\n\n\\[\n\\frac{(188+k)^{2}}{4}+504\\sqrt{2k}=10116+188k\n\\Longrightarrow\nt^{4}-752t^{2}+8064t-20480=0 .\n\\]\n\nFactoring,\n\n\\[\nt^{4}-752t^{2}+8064t-20480=(t-4)(t-8)(t-20)(t+32)=0 .\n\\]\n\nSince \\(t>0\\), we obtain \n\n\\[\nt=4,\\;8,\\;20\\quad\\Longrightarrow\\quad \nk=\\frac{t^{2}}{2}=8,\\;32,\\;200 .\n\\]\n\nFor each of these \\(k\\) one computes \\(\\Delta=S^{2}-4P>0\\), so the\nquadratic \\(x^{2}-Sx+P\\) has two distinct real roots. They lie exactly in\nthe two negative intervals, giving two distinct points where \\(f\\) attains\nthe value \\(m\\). Moreover \\(m<0\\), while all zeros of \\(f\\) are at\n\\(0\\), so these are the global minima. \nNo other positive \\(k\\) satisfies the required condition.\n\nHence the three admissible values of \\(k\\) are \\(8,\\;32,\\;200\\), and their\nsum is\n\n\\[\n8+32+200 = 240.\n\\]\n\n\\[\n\\boxed{240}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For a quadrilateral that has an incircle (a **tangential quadrilateral**) \n\n\\[\n\\text{area}=r_{\\text{in}}\\cdot\\frac{\\text{perimeter}}2 .\n\\tag{1}\n\\]\n\n---\n\n### 1. Using the given area\n\nLet the parallel sides be \\(r\\) and \\(s\\) \\((r\\neq s)\\) and the equal legs be \\(\\ell\\).\nThe incircle radius is \\(r_{\\text{in}}=3\\) and the area is \\(72\\).\n\nFrom (1),\n\n\\[\n72=3\\cdot\\frac{r+s+2\\ell}{2}\\Longrightarrow\nr+s+2\\ell=48.\n\\tag{2}\n\\]\n\n---\n\n### 2. Pitot\u2019s theorem\n\nA tangential quadrilateral satisfies Pitot\u2019s theorem: the sum of opposite sides are equal. \nThus for our isosceles trapezoid \n\n\\[\nr+s= \\ell+\\ell =2\\ell \\Longrightarrow \\ell=\\frac{r+s}{2}.\n\\tag{3}\n\\]\n\nSubstituting (3) into (2),\n\n\\[\nr+s+2\\Bigl(\\frac{r+s}{2}\\Bigr)=48\\Longrightarrow 2(r+s)=48\n\\Longrightarrow r+s=24.\n\\tag{4}\n\\]\n\nHence each leg is \n\n\\[\n\\ell=\\frac{r+s}{2}=12.\n\\]\n\n---\n\n### 3. Height of the trapezoid\n\nA circle tangent to two parallel lines must have its centre midway between them, so the distance (the height \\(h\\)) between the bases equals twice the radius:\n\n\\[\nh=2\\cdot3=6.\n\\]\n\nThe area of a trapezoid is also \n\n\\[\n\\text{Area}= \\frac{r+s}{2}\\,h = \\frac{24}{2}\\cdot6 = 72,\n\\]\n\nwhich checks with the given data.\n\n---\n\n### 4. Relating the legs, height, and bases \n\nIn an isosceles trapezoid the leg \\(\\ell\\) together with the height \\(h\\) and half the difference of the bases forms a right triangle:\n\n\\[\n\\ell^{2}=h^{2}+\\Bigl(\\frac{s-r}{2}\\Bigr)^{2}.\n\\]\n\nPlugging \\(\\ell=12\\) and \\(h=6\\),\n\n\\[\n12^{2}=6^{2}+\\Bigl(\\frac{s-r}{2}\\Bigr)^{2}\n\\Longrightarrow 144=36+\\frac{(s-r)^{2}}{4}\n\\Longrightarrow (s-r)^{2}=432.\n\\]\n\nThus \n\n\\[\ns-r= \\sqrt{432}=12\\sqrt3 .\n\\tag{5}\n\\]\n\n---\n\n### 5. Solving for \\(r\\) and \\(s\\)\n\nFrom (4) and (5):\n\n\\[\n\\begin{cases}\ns+r = 24,\\\\[2pt]\ns-r = 12\\sqrt3,\n\\end{cases}\n\\qquad\\Longrightarrow\\qquad\ns = 12+6\\sqrt3,\\;\\; r = 12-6\\sqrt3.\n\\]\n\n---\n\n### 6. Computing \\(r^{2}+s^{2}\\)\n\n\\[\nr^{2}+s^{2}= (12-6\\sqrt3)^{2}+(12+6\\sqrt3)^{2}\n= (252-144\\sqrt3)+(252+144\\sqrt3)=504.\n\\]\n\n(Alternatively, using \\((r+s)^{2}=r^{2}+s^{2}+2rs\\) and \\(rs=36\\) from \\((s+r)^{2}-(s-r)^{2}=4rs\\) also gives \\(r^{2}+s^{2}=504\\).)\n\n\\[\n\\boxed{504}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\n\\boxed{240}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The number must be divisible by \\(22=2\\cdot 11\\).\n\n---\n\n### 1. Divisibility by \\(2\\)\n\nThe last digit (the 8\u2011th digit) must be even, i.e. one of \\(2,4,6,8\\).\n\n---\n\n### 2. Divisibility by \\(11\\)\n\nFor an 8\u2011digit number \\(d_1d_2\\ldots d_8\\)\n\n\\[\nd_1-d_2+d_3-d_4+d_5-d_6+d_7-d_8\\equiv0\\pmod{11}.\n\\]\n\nLet \n\n\\[\nS_{\\text{odd}}=d_1+d_3+d_5+d_7,\\qquad \nS_{\\text{even}}=d_2+d_4+d_6+d_8 .\n\\]\n\nThen the condition becomes \n\n\\[\nS_{\\text{odd}}-S_{\\text{even}}\\equiv0\\pmod{11}.\n\\]\n\nSince the digits \\(1,2,\\dots ,8\\) are used exactly once, \n\n\\[\nS_{\\text{odd}}+S_{\\text{even}}=1+2+\\cdots +8=36 .\n\\]\n\nHence \n\n\\[\n2S_{\\text{even}}\\equiv36\\pmod{11}\\Longrightarrow2S_{\\text{even}}\\equiv3\\pmod{11}\n\\]\n\\[\n\\Longrightarrow S_{\\text{even}}\\equiv3\\cdot 6\\equiv18\\equiv7\\pmod{11}.\n\\]\n\nThe possible values for a sum of four distinct digits from \\(\\{1,\\ldots ,8\\}\\) lie between \\(10\\) and \\(26\\); the only value congruent to \\(7\\pmod{11}\\) in this interval is \\(18\\). \nThus we must have \n\n\\[\nS_{\\text{even}}=18\\qquad\\text{and}\\qquad S_{\\text{odd}}=18 .\n\\]\n\n---\n\n### 3. Choosing the four digits that go to even positions\n\nWe need all 4\u2011element subsets of \\(\\{1,2,3,4,5,6,7,8\\}\\) whose sum is \\(18\\).\n\nListing them:\n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are **8** such subsets. \nEach of them contains exactly two even digits (the evens are \\(2,4,6,8\\)).\n\n---\n\n### 4. Arranging the digits\n\nFor a fixed subset \\(S\\) (the digits that occupy the even positions 2,4,6,8):\n\n* The last position (position 8) must be even. \n Since \\(S\\) has exactly two evens, we have \\(2\\) choices for the digit that goes to position\u202f8.\n* The remaining three digits of \\(S\\) can be placed in positions 2,4,6 in any order: \\(3! = 6\\) ways.\n\nHence the even positions can be filled in \\(2\\cdot6 = 12\\) ways.\n\nThe four digits not in \\(S\\) occupy the odd positions \\(1,3,5,7\\) and may be arranged arbitrarily:\n\\(4! = 24\\) ways.\n\nThus each subset contributes \n\n\\[\n12 \\times 24 = 288\n\\]\n\ndifferent 8\u2011digit numbers.\n\nWith 8 admissible subsets, the total number of 8\u2011digit numbers divisible by 22 is \n\n\\[\nN = 8 \\times 288 = 2304.\n\\]\n\n---\n\n### 5. Required difference\n\n\\[\nN-2025 = 2304-2025 = 279.\n\\]\n\n\\[\n\\boxed{279}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\nx_{k+1}=\\frac{x_k+\\dfrac1{x_k}-1}{3}\n =\\frac{x_k^2-x_k+1}{3x_k}\\qquad (k\\ge 1),\\qquad \nx_1=\\frac{25}{11}.\n\\]\n\n--------------------------------------------------------------------\n### 1. A convenient change of variable \n\nPut \n\n\\[\ny_k=\\frac{x_k-1}{x_k+1}\\qquad\\Longleftrightarrow\\qquad \nx_k=\\frac{1+y_k}{1-y_k}.\n\\]\n\nThen \n\n\\[\ny_{k+1}= \\frac{x_{k+1}-1}{x_{k+1}+1}\n =\\frac{3y_k^{2}-1}{2}.\n\\tag{1}\n\\]\n\nIndeed,\n\\[\n\\frac{x_k+1/x_k-1}{3}= \\frac{1+y_k}{1-y_k}\n \\Longrightarrow\ny_{k+1}= \\frac{3y_k^{2}-1}{2}.\n\\]\n\nFrom \\(x_1=25/11\\) we obtain\n\n\\[\ny_1=\\frac{25/11-1}{25/11+1}= \\frac{14/11}{36/11}= \\frac{7}{18}.\n\\]\n\n--------------------------------------------------------------------\n### 2. Removing the common factor \n\nWrite \\(y_k =\\dfrac{a_k}{b_k}\\) with \\(\\gcd(a_k,b_k)=1\\).\nFrom (1)\n\n\\[\n\\frac{a_{k+1}}{b_{k+1}}=\\frac{3a_k^{2}-b_k^{2}}{2b_k^{2}} .\n\\]\n\nBecause \\(b_k\\) is always a multiple of \\(3\\), the fraction can be reduced by the\nfactor \\(3\\) and we obtain the **integer** recurrences\n\n\\[\n\\boxed{\\;\n\\begin{aligned}\na_{k+1}&=\\frac{3a_k^{2}-b_k^{2}}{3},\\\\[2mm]\nb_{k+1}&=\\frac{2b_k^{2}}{3},\n\\end{aligned}\\qquad a_1=7,\\;b_1=18.}\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 3. Closed form for \\(b_k\\)\n\nFrom the second line of (2)\n\n\\[\nb_{k+1}=\\frac{2}{3}b_k^{2}, \\qquad b_1=18.\n\\]\n\nInduction gives \n\n\\[\n\\boxed{\\,b_k=2^{\\,2^{\\,k}-1}\\;3^{\\,2^{\\,k-1}+1}\\,}\\qquad(k\\ge1). \\tag{3}\n\\]\n\nCheck: \\(b_1=2^{2-1}3^{1+1}=2\\cdot 9=18\\).\n\n--------------------------------------------------------------------\n### 4. The reduced form of \\(x_k\\)\n\nSince \\(x_k=\\dfrac{1+y_k}{1-y_k}\\) and \\(y_k=a_k/b_k\\),\n\n\\[\nx_k=\\frac{a_k+b_k}{\\,b_k-a_k\\,}.\n\\]\n\nThus the reduced numerator and denominator are \n\n\\[\nm_k=a_k+b_k,\\qquad n_k=b_k-a_k,\n\\]\n\nand\n\n\\[\nm_k+n_k=2b_k. \\tag{4}\n\\]\n\nConsequently we only need \\(2b_{2025}\\pmod{1000}\\).\n\n--------------------------------------------------------------------\n### 5. Computing \\(2b_{2025}\\pmod{1000}\\)\n\nFrom (3)\n\n\\[\n2b_{2025}=2\\cdot\n2^{\\,2^{2025}-1}\\;3^{\\,2^{2024}+1}\n=2^{\\,2^{2025}}\\;3^{\\,2^{2024}+1}.\n\\]\n\nWork modulo \\(1000=8\\cdot125\\).\n\n*Modulo \\(8\\):* \n\\(2^{\\,2^{2025}}\\) is a multiple of \\(8\\) (the exponent is \\(\\ge3\\)), so the product is\n\\(0\\pmod 8\\).\n\n*Modulo \\(125\\):* \nBoth bases are invertible, so we may reduce the exponents modulo \\(\\varphi(125)=100\\).\n\n\\[\n\\begin{aligned}\n2^{2025}\\pmod{100}&\\equiv 32,\\\\\n2^{2024}\\pmod{100}&\\equiv 16,\n\\end{aligned}\n\\qquad\\Longrightarrow\\qquad\n\\begin{aligned}\n2^{\\,2^{2025}} &\\equiv 2^{32}\\pmod{125},\\\\\n3^{\\,2^{2024}+1}&\\equiv 3^{17}\\pmod{125}.\n\\end{aligned}\n\\]\n\n\\[\n2^{32}\\equiv46\\pmod{125},\\qquad \n3^{17}\\equiv38\\pmod{125}.\n\\]\n\nHence \n\n\\[\n2^{\\,2^{2025}}3^{\\,2^{2024}+1}\\equiv46\\cdot38\\equiv123\\pmod{125}.\n\\]\n\n*Chinese remainder:* Find \\(N\\) with \n\n\\[\nN\\equiv0\\pmod8,\\qquad N\\equiv123\\pmod{125}.\n\\]\n\nWriting \\(N=125a+123\\) and testing \\(a=0,\\dots,7\\) gives \\(a=1\\) as the solution,\nso \\(N=125\\cdot1+123=248\\).\n\nThus \n\n\\[\n2b_{2025}\\equiv 248\\pmod{1000}.\n\\]\n\nBy (4) this is exactly \\((m+n)\\pmod{1000}\\).\n\n--------------------------------------------------------------------\n\\[\n\\boxed{248}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nz=x+yi .\n\\]\n\nThe first equation \n\n\\[\n|25+20i-z|=5\n\\]\n\nrepresents the circle \n\n\\[\n(x-25)^2+(y-20)^2=5^2 \\tag{1}\n\\]\n\ncentered at \\(C=(25,20)\\) with radius \\(r=5\\).\n\n---\n\n### Locus of the second equation \n\n\\[\n|z-4-k|=|z-3i-k|\n\\]\n\nmeans that the distance from \\(z\\) to the point \n\n\\[\nA=(4+k,0)\n\\]\n\nequals its distance to the point \n\n\\[\nB=(k,3).\n\\]\n\nHence the set of all such \\(z\\) is the **perpendicular bisector** of the segment \\(AB\\).\n\n- Midpoint of \\(AB\\):\n \\[\n M=\\Bigl(\\frac{4+k+k}{2},\\frac{0+3}{2}\\Bigr)=(2+k,\\tfrac32).\n \\]\n\n- Slope of \\(AB\\):\n \\[\n m_{AB}= \\frac{3-0}{k-(4+k)}=\\frac{3}{-4}=-\\frac34 .\n \\]\n\n- Slope of the perpendicular bisector:\n \\[\n m_{L}= \\frac{4}{3}.\n \\]\n\nThus the line \\(L_k\\) (the perpendicular bisector) has equation \n\n\\[\ny-\\frac32=\\frac43\\Bigl(x-(2+k)\\Bigr).\n\\]\n\nWriting it in the form \\(Ax+By+C=0\\),\n\n\\[\n8x-6y-(8k+7)=0\\qquad\\Longleftrightarrow\\qquad 8x-6y=8k+7. \\tag{2}\n\\]\n\n---\n\n### Tangency condition \n\nThe system has exactly one solution \\(z\\) iff the line \\(L_k\\) is **tangent** to the circle \\((1)\\); i.e. the distance from the centre \\(C\\) to the line equals the radius \\(5\\).\n\nDistance from \\(C=(25,20)\\) to line \\((2)\\):\n\n\\[\nd=\\frac{|\\,8\\cdot25-6\\cdot20-(8k+7)\\,|}{\\sqrt{8^{2}+(-6)^{2}}}\n =\\frac{|200-120-8k-7|}{10}\n =\\frac{|73-8k|}{10}.\n\\]\n\nSet \\(d=5\\):\n\n\\[\n\\frac{|73-8k|}{10}=5 \\Longrightarrow |73-8k|=50.\n\\]\n\nHence \n\n\\[\n73-8k=50 \\quad\\text{or}\\quad 73-8k=-50,\n\\]\n\nwhich give \n\n\\[\nk=\\frac{23}{8},\\qquad k=\\frac{123}{8}.\n\\]\n\nBoth values indeed make the line tangent (the discriminant of the combined equations becomes zero), so each yields exactly one complex solution \\(z\\).\n\n---\n\n### Sum of all possible \\(k\\)\n\n\\[\n\\frac{23}{8}+\\frac{123}{8}= \\frac{146}{8}= \\frac{73}{4}.\n\\]\n\nWrite \\(\\frac{73}{4}\\) as \\(\\frac{m}{n}\\) with \\(\\gcd(m,n)=1\\): \\(m=73,\\; n=4\\).\n\n\\[\nm+n=73+4=77.\n\\]\n\n\\[\n\\boxed{77}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe 27 cells of a $3\\times9$ grid are filled in using the numbers 1 through 9 so that each row contains 9 different numbers, and each of the three $3\\times3$ blocks heavily outlined in the example below contains 9 different numbers, as in the first three rows of a Sudoku puzzle. \n | 4 | 2 | 8 | 9 | 6 | 3 | 1 | 7 | 5 | \n | 3 | 7 | 9 | 5 | 2 | 1 | 6 | 8 | 4 | \n | 5 | 6 | 1 | 8 | 4 | 7 | 9 | 2 | 3 | \n The number of different ways to fill such a grid can be written as $p^a\\cdot q^b\\cdot r^c\\cdot s^d$, where $p,q,r,$ and $s$ are distinct prime numbers and $a,b,c,$ and $d$ are positive integers. Find $p\\cdot a+q\\cdot b+r\\cdot c+s\\cdot d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The grid has three rows and three \\(3\\times3\\) blocks. \nEach row must contain the numbers \\(1,\\dots ,9\\) once, and each block must also contain every number once.\n\n---\n\n### 1. Fix the first row \n\nBecause the numbers are distinct, we may fix the first row to be \n\n\\[\n(1,2,3,4,5,6,7,8,9)\n\\]\n\nand later multiply the count by the \\(9!\\) possible permutations of this row.\n\n---\n\n### 2. What must the other two rows contain?\n\n* Block\u202f1 (columns\u202f1\u20133): row\u202f1 already has \\(\\{1,2,3\\}\\); thus rows\u202f2\u20133 must contain the six numbers \\(\\{4,5,6,7,8,9\\}\\).\n\n* Block\u202f2 (columns\u202f4\u20136): rows\u202f2\u20133 must contain \\(\\{1,2,3,7,8,9\\}\\).\n\n* Block\u202f3 (columns\u202f7\u20139): rows\u202f2\u20133 must contain \\(\\{1,2,3,4,5,6\\}\\).\n\nEach of rows\u202f2 and\u202f3 must be a permutation of \\(\\{1,\\dots ,9\\}\\).\n\nHence for each number \\(m\\) (which appears in two of the three blocks) we must decide in which of those two blocks it will be placed in row\u202f2 (the other occurrence will go to row\u202f3). \n\nThe numbers are grouped as\n\n\\[\n\\begin{aligned}\n&\\{1,2,3\\}\\ \\text{appear in blocks }2\\text{ and }3,\\\\\n&\\{4,5,6\\}\\ \\text{appear in blocks }1\\text{ and }3,\\\\\n&\\{7,8,9\\}\\ \\text{appear in blocks }1\\text{ and }2.\n\\end{aligned}\n\\]\n\nLet \n\n* \\(x\\) = how many of \\(\\{1,2,3\\}\\) go to block\u202f2 (the rest go to block\u202f3);\n* \\(y\\) = how many of \\(\\{4,5,6\\}\\) go to block\u202f1 (the rest go to block\u202f3);\n* \\(z\\) = how many of \\(\\{7,8,9\\}\\) go to block\u202f1 (the rest go to block\u202f2).\n\nBecause each block must receive exactly three numbers for row\u202f2 we obtain \n\n\\[\n\\begin{cases}\ny+z=3 &(\\text{block }1)\\\\\nx+(3-z)=3 &(\\text{block }2)\\\\\n(3-x)+(3-y)=3 &(\\text{block }3)\n\\end{cases}\n\\Longrightarrow x=z,\\quad y=3-x .\n\\]\n\nThus \\(x\\) can be \\(0,1,2,3\\). \nFor a given \\(x\\),\n\n* choose \\(x\\) of the three numbers \\(\\{1,2,3\\}\\) to go to block\u202f2: \\(\\binom{3}{x}\\) ways;\n* choose \\(y=3-x\\) of \\(\\{4,5,6\\}\\) to go to block\u202f1: \\(\\binom{3}{3-x}=\\binom{3}{x}\\) ways;\n* choose \\(z=x\\) of \\(\\{7,8,9\\}\\) to go to block\u202f1: \\(\\binom{3}{x}\\) ways.\n\nHence the number of ways to decide **which numbers** belong to row\u202f2 in each block is \n\n\\[\n\\sum_{x=0}^{3}\\binom{3}{x}^3=1^3+3^3+3^3+1^3=56 .\n\\]\n\n---\n\n### 3. Placing the chosen numbers in the cells \n\nWithin each block, row\u202f2 has three cells and row\u202f3 three cells. \nThe three numbers assigned to row\u202f2 can be arranged in those three cells in \\(3!\\) ways, and similarly for row\u202f3. \n\nThus for each block there are \\(3!\\times3! = 36\\) placements, and for the three blocks\n\n\\[\n36^3 = 46656\n\\]\n\nplacements.\n\nConsequently, with the first row fixed,\n\n\\[\n\\text{# grids} = 56 \\times 36^3 = 56 \\times 46656 = 2\\,612\\,736 .\n\\]\n\n---\n\n### 4. Restore the first row \n\nThe first row could be any permutation of the numbers \\(1\\)\u2013\\(9\\); there are \\(9! = 362880\\) possibilities.\n\n\\[\nN = 2\\,612\\,736 \\times 362\\,880 = 948\\,109\\,639\\,680 .\n\\]\n\n---\n\n### 5. Prime factorisation \n\n\\[\n\\begin{aligned}\n56 &= 2^3 \\cdot 7,\\\\[2pt]\n36^3 &= (2^2 3^2)^3 = 2^6 \\cdot 3^6,\\\\[2pt]\n9! &= 2^7 \\cdot 3^4 \\cdot 5 \\cdot 7 .\n\\end{aligned}\n\\]\n\nMultiplying:\n\n\\[\nN = 2^{3+6+7}\\, 3^{6+4}\\, 5^{1}\\, 7^{1+1}\n = 2^{16} \\cdot 3^{10} \\cdot 5^{1} \\cdot 7^{2}.\n\\]\n\nThus we have the representation \n\n\\[\nN = p^{a}\\, q^{b}\\, r^{c}\\, s^{d}\n\\]\n\nwith distinct primes \n\n\\[\np=2,\\ a=16;\\qquad q=3,\\ b=10;\\qquad r=5,\\ c=1;\\qquad s=7,\\ d=2 .\n\\]\n\n---\n\n### 6. Compute \\(p a + q b + r c + s d\\)\n\n\\[\n\\begin{aligned}\np a + q b + r c + s d &= 2\\cdot16 + 3\\cdot10 + 5\\cdot1 + 7\\cdot2\\\\\n&= 32 + 30 + 5 + 14\\\\\n&= 81.\n\\end{aligned}\n\\]\n\n\\[\n\\boxed{81}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\ny=x^{2}-4\\qquad (1)\n\\]\n\nand rotate the whole plane \\(60^{\\circ}\\) counter\u2011clockwise about the origin.\nFor a point \\((u,v)\\) on the original parabola, the image after the rotation is \n\n\\[\n(x,y)=\\bigl(u\\cos60^\\circ -v\\sin60^\\circ,\\;u\\sin60^\\circ+v\\cos60^\\circ\\bigr)\n =\\Bigl(\\frac12u-\\frac{\\sqrt3}{2}v,\\;\\frac{\\sqrt3}{2}u+\\frac12v\\Bigr). \\tag{2}\n\\]\n\nBecause \\((u,v)\\) lies on the original curve, \\(v=u^{2}-4\\).\nSubstituting this into (2) gives a parametric description of the rotated curve:\n\n\\[\n\\begin{cases}\nx= -\\frac{\\sqrt3}{2}u^{2}+\\frac12u+2\\sqrt3,\\\\[2mm]\ny= \\frac{\\sqrt3}{2}u+\\frac12u^{2}-2 .\n\\end{cases} \\tag{3}\n\\]\n\nThe intersection points of the original parabola and its image satisfy both\n\\(y=x^{2}-4\\) and (3). Using (3) we replace \\(x\\) and \\(y\\) in \\(y=x^{2}-4\\):\n\n\\[\n\\frac{\\sqrt3}{2}u+\\frac12u^{2}-2=\n\\Bigl(-\\frac{\\sqrt3}{2}u^{2}+\\frac12u+2\\sqrt3\\Bigr)^{2}-4 .\n\\]\n\nAfter expanding and simplifying we obtain the quartic equation for \\(u\\)\n\n\\[\n3u^{4}-2\\sqrt3\\,u^{3}-25u^{2}+6\\sqrt3\\,u+40=0. \\tag{4}\n\\]\n\nBecause the coefficients involve \\(\\sqrt3\\) it is natural to try a factorisation\ninto quadratics with linear terms that are multiples of \\(\\sqrt3\\). Indeed,\n\n\\[\n3u^{4}-2\\sqrt3\\,u^{3}-25u^{2}+6\\sqrt3\\,u+40\n =(3u^{2}+\\sqrt3\\,u-10)(u^{2}-\\sqrt3\\,u-4). \\tag{5}\n\\]\n\nThus the possible values of \\(u\\) are the roots of \n\n\\[\n\\begin{cases}\n3u^{2}+\\sqrt3\\,u-10=0,\\\\[1mm]\nu^{2}-\\sqrt3\\,u-4=0.\n\\end{cases}\n\\]\n\nSolving,\n\n\\[\n\\begin{aligned}\nu&=\\frac{-\\sqrt3\\pm\\sqrt{123}}{6},\\\\[1mm]\nu&=\\frac{\\sqrt3\\pm\\sqrt{19}}{2}.\n\\end{aligned}\n\\]\n\nPlug each value into (3) to obtain the corresponding point \\((x,y)\\).\n\n\\[\n\\begin{array}{c|c|c}\nu & x & y\\\\ \\hline\n\\displaystyle\\frac{-\\sqrt3+\\sqrt{123}}6 & 2.136\\ldots & 0.566\\ldots\\\\[2mm]\n\\displaystyle\\frac{-\\sqrt3-\\sqrt{123}}6 & -1.561\\ldots & -1.568\\ldots\\\\[2mm]\n\\displaystyle\\frac{\\sqrt3+\\sqrt{19}}2 & -3.046\\ldots & 5.276\\ldots\\\\[2mm]\n\\displaystyle\\frac{\\sqrt3-\\sqrt{19}}2 & 1.313\\ldots & -2.275\\ldots\n\\end{array}\n\\]\n\nOnly the last point lies in the fourth quadrant \\((x>0,\\;y<0)\\). \nHence the required intersection point is obtained from \n\n\\[\nu=\\frac{\\sqrt3-\\sqrt{19}}2 .\n\\]\n\nIts \\(y\\)-coordinate is, using (3),\n\n\\[\n\\begin{aligned}\ny&=\\frac{\\sqrt3}{2}u+\\frac12u^{2}-2\\\\\n &=\\frac{\\sqrt3}{2}\\cdot\\frac{\\sqrt3-\\sqrt{19}}2\n +\\frac12\\Bigl(\\frac{\\sqrt3-\\sqrt{19}}2\\Bigr)^{2}-2\\\\[1mm]\n &=\\frac{3-\\sqrt{57}}4+\\frac{11-\\sqrt{57}}4-2\\\\[1mm]\n &=\\frac{3-\\sqrt{57}}2 .\n\\end{aligned}\n\\]\n\nThus \n\n\\[\ny=\\frac{a-\\sqrt b}{c}\\qquad\\text{with}\\quad a=3,\\;b=57,\\;c=2.\n\\]\n\nSince \\(\\gcd(3,2)=1\\) the representation is in lowest terms. Therefore\n\n\\[\na+b+c = 3+57+2 = 62.\n\\]\n\n\\[\n\\boxed{62}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution.** \n\nPut \\(A=(0,0)\\) and let \\(AB\\) be the \\(x\\)-axis. \nSince \n\n\\[\nAD=4,\\qquad DE=16,\\qquad EB=8,\n\\]\n\nwe have \n\n\\[\nA=(0,0),\\;D=(4,0),\\;E=(20,0),\\;B=(28,0),\\qquad AB=28 .\n\\]\n\nLet \\(C=(x,y)\\) with \\(y>0\\). \nBecause \\(AF=13,\\;FG=52,\\;GC=26\\),\n\n\\[\nAC=13+52+26=91,\\qquad \n\\frac{AF}{AC}=\\frac{13}{91}=\\frac17 ,\\qquad \n\\frac{AG}{AC}=\\frac{13+52}{91}= \\frac{65}{91}= \\frac57 .\n\\]\n\nHence \n\n\\[\nF=\\Bigl(\\frac{x}{7},\\frac{y}{7}\\Bigr),\\qquad \nG=\\Bigl(\\frac{5x}{7},\\frac{5y}{7}\\Bigr).\n\\]\n\n--------------------------------------------------------------------\n### 1. Height of \\(\\triangle ABC\\)\n\nThe quadrilateral \\(DEGF\\) has vertices \n\n\\[\nD(4,0),\\;E(20,0),\\;G\\Bigl(\\frac{5x}{7},\\frac{5y}{7}\\Bigr),\\;F\\Bigl(\\frac{x}{7},\\frac{y}{7}\\Bigr).\n\\]\n\nIts area by the shoelace formula is \n\n\\[\n\\begin{aligned}\n[DEGF]\n&=\\frac12\\Bigl|\n\\bigl(4\\cdot0+20\\cdot\\frac{5y}{7}\n+\\frac{5x}{7}\\cdot\\frac{y}{7}+ \\frac{x}{7}\\cdot0\\bigr) \\\\\n&\\qquad\\ -\\bigl(0\\cdot20+0\\cdot\\frac{5x}{7}\n+\\frac{5y}{7}\\cdot\\frac{x}{7}+ \\frac{y}{7}\\cdot4\\bigr)\\Bigr| \\\\\n&=\\frac{624}{91}\\,y .\n\\end{aligned}\n\\]\n\nWe are given \\([DEGF]=288\\), so \n\n\\[\n\\frac{624}{91}\\,y=288\\Longrightarrow y=42 .\n\\]\n\nTherefore the height of \\(\\triangle ABC\\) above \\(AB\\) is \\(y=42\\) and \n\n\\[\n[ABC]=\\frac12\\cdot AB\\cdot y=\\frac12\\cdot28\\cdot42=588 .\n\\]\n\n--------------------------------------------------------------------\n### 2. Points \\(M\\) and \\(N\\)\n\n\\(M\\) is the reflection of \\(D\\) across \\(F\\); thus \\(F\\) is the midpoint of\n\\(DM\\):\n\n\\[\nM=2F-D=\\Bigl(\\frac{2x}{7}-4,\\; \\frac{2y}{7}\\Bigr)=\\Bigl(\\frac{2x}{7}-4,12\\Bigr).\n\\]\n\n\\(N\\) is the reflection of \\(G\\) across \\(E\\); hence\n\n\\[\nN=2E-G=\\Bigl(40-\\frac{5x}{7},\\; -\\frac{5y}{7}\\Bigr)=\\Bigl(40-\\frac{5x}{7},-30\\Bigr).\n\\]\n\n--------------------------------------------------------------------\n### 3. Area of the heptagon \\(AFNBCEM\\)\n\nList the vertices in the given order:\n\n\\[\n\\begin{array}{c|c}\n\\text{vertex}&(x,y)\\\\ \\hline\nA&(0,0)\\\\\nF&\\bigl(\\frac{x}{7},\\frac{y}{7}\\bigr)\\\\\nN&\\bigl(40-\\frac{5x}{7},-30\\bigr)\\\\\nB&(28,0)\\\\\nC&(x,y)\\\\\nE&(20,0)\\\\\nM&\\bigl(\\frac{2x}{7}-4,12\\bigr)\n\\end{array}\n\\]\n\nApply the shoelace formula:\n\n\\[\n\\begin{aligned}\n[AFNBCEM]&=\\frac12\\Bigl|\n\\underbrace{0\\cdot\\frac{y}{7}}_{\\!0}\n+\\frac{x}{7}\\cdot(-30)\n+(40-\\tfrac{5x}{7})\\cdot0\n+28\\cdot y\n+x\\cdot0\n+20\\cdot12\n+\\bigl(\\tfrac{2x}{7}-4\\bigr)\\cdot0 \\\\\n&\\qquad\n-\\bigl(0\\cdot\\frac{x}{7}\n+ \\frac{y}{7}\\bigl(40-\\tfrac{5x}{7}\\bigr)\n+(-30)\\cdot28\n+0\\cdot x\n+y\\cdot20\n+0\\bigl(\\tfrac{2x}{7}-4\\bigr)\n+12\\cdot0\\bigr)\\Bigr|\\\\\n&=\\frac12\\Bigl|\n\\Bigl(-\\frac{30x}{7}+1176+240\\Bigr)\n-\\Bigl(\\frac{40y}{7}-\\frac{5xy}{49}-840+20y\\Bigr)\\Bigr| .\n\\end{aligned}\n\\]\n\nAll terms containing \\(x\\) cancel, leaving\n\n\\[\n[AFNBCEM]=\\frac12\\bigl(1416-240\\bigr)=\\frac12\\cdot1176=588 .\n\\]\n\nThus the heptagon has the same area as \\(\\triangle ABC\\).\n\n--------------------------------------------------------------------\n### 4. Answer\n\n\\[\n\\boxed{588}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The least possible value of \n\n\\[\nf(X)=AX+BX+CX+DX+EX\n\\]\n\nis \n\n\\[\n6+18\\sqrt{13}.\n\\]\n\nHence \\(m=6\\), \\(n=18\\), \\(p=13\\) and \n\n\\[\nm+n+p=6+18+13=37.\n\\]\n\n\\[\n\\boxed{37}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nA=1,\\;B=2,\\dots ,L=12\n\\]\n\nand consider a random perfect matching of the 12 letters. \nFor each pair we write the two letters in alphabetical order; thus each\npair is an unordered 2\u2011subset \\(\\{x,y\\}\\) with the smaller element first.\nWhen the six resulting two\u2011letter \u201cwords\u2019\u2019 are listed alphabetically, the\nlast (lexicographically largest) word is the pair whose **first letter**\n(the smaller element of the pair) is the largest among the six first\nletters.\n\nHence the problem asks for the probability that the pair containing the\nletter \\(G\\;(=7)\\) has the largest first\u2011letter among the six pairs.\n\n--------------------------------------------------------------------\n### 1. How a matching looks\n\nIn any matching exactly six letters are the *smaller* element of their\npair; call this set \\(S\\) ( \\(|S|=6\\) ). \nThe remaining six letters are the larger elements of their pairs.\n\nThe last word is the pair whose smaller element is \n\n\\[\nM=\\max S .\n\\]\n\nWe need the probability that the pair containing \\(G\\) also contains\n\\(M\\). This can happen in two mutually exclusive ways:\n\n* **Case\u202f1.** \\(G\\) is the smaller element of its pair, so \\(M=G\\).\n* **Case\u202f2.** \\(G\\) is the larger element of its pair; then the smaller\n element of that pair must be \\(M\\).\n\n--------------------------------------------------------------------\n### 2. Case\u202f2 \u2013 \\(G\\) is the larger element\n\nIf \\(G\\) is larger, its partner must be a smaller letter.\nLet that partner be \\(x\\ (0,\\ v>0\\) | empty (contradiction) |\n| \\(u>0,\\ v<0\\) | \\(u+2v>78\\) (unbounded) |\n| \\(u<0,\\ v>0\\) | \\(u+2v<78,\\;2u+v<-78\\) (unbounded) |\n| \\(u<0,\\ v<0\\) | \\(2u+v>-78\\) (bounded) |\n\nOnly the last case gives a bounded region. \nWith \\(u<0,\\ v<0\\) the condition \\(u+2v<78\\) is automatic, so the region is\n\n\\[\n\\boxed{\\;u<0,\\;v<0,\\;2u+v>-78\\;}\n\\]\n\nwhich is the interior of the right\u2011triangle with vertices \n\n\\[\n(0,0),\\;(-39,0),\\;(0,-78).\n\\]\n\nIts area in the \\((u,v)\\)-coordinates is\n\n\\[\nA_{uv}= \\frac12\\cdot39\\cdot78 =1521 .\n\\]\n\n---\n\n### 3. Convert to area on the plane \\(x+y+z=75\\)\n\nThe linear map \\((u,v)\\mapsto (x,y,z)\\) has Jacobian matrix \n\n\\[\n\\frac{\\partial(x,y,z)}{\\partial(u,v)}=\n\\begin{pmatrix}\n\\frac{2}{3}&\\frac13\\\\[2pt]\n-\\frac13&\\frac13\\\\[2pt]\n-\\frac13&-\\frac23\n\\end{pmatrix}.\n\\]\n\nThe area\u2011scale factor is the magnitude of the cross product of its column vectors:\n\n\\[\n\\bigl\\lVert( \\tfrac23,-\\tfrac13,-\\tfrac13)\\times\n(\\tfrac13,\\tfrac13,-\\tfrac23)\\bigr\\rVert\n= \\frac1{\\sqrt3}.\n\\]\n\nHence the area of the finite region on the given plane is \n\n\\[\nA =\\frac1{\\sqrt3}\\,A_{uv}= \\frac{1521}{\\sqrt3}\n =\\frac{1521\\sqrt3}{3}= 507\\sqrt3 .\n\\]\n\n---\n\n### 4. Answer\n\nThe area is \\(507\\sqrt3\\), i.e. \\(a=507\\) and \\(b=3\\). \nThus \n\n\\[\na+b = 507+3 = \\boxed{510}.\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the points be placed on the \\(x\\)-axis.\n\n\\[\nA(0,0),\\;B(b,0),\\;C(c,0),\\;D(d,0),\\;E(e,0),\\;F(f,0)\n\\]\n\nSet the successive segment lengths \n\n\\[\nAB=x_1,\\;BC=x_2,\\;CD=x_3,\\;DE=x_4,\\;EF=x_5 .\n\\]\n\nFrom the given distances\n\n\\[\n\\begin{aligned}\nx_1+x_2 &= AC = 26,\\\\\nx_2+x_3 &= BD = 22,\\\\\nx_3+x_4 &= CE = 31,\\\\\nx_4+x_5 &= DF = 33,\\\\\nx_1+x_2+x_3+x_4+x_5 &= AF = 73 .\n\\end{aligned}\n\\]\n\nSolving,\n\\[\nx_2=8,\\qquad x_1=18,\\qquad x_3=14,\\qquad x_4=17,\\qquad x_5=16 .\n\\]\n\nHence \n\n\\[\n\\begin{aligned}\nA&=(0,0),\\\\\nB&=(18,0),\\\\\nC&=(26,0),\\\\\nD&=(40,0),\\\\\nE&=(57,0),\\\\\nF&=(73,0).\n\\end{aligned}\n\\]\n\nLet \\(G=(x,y)\\). From the distances \\(CG=40\\) and \\(DG=30\\),\n\n\\[\n\\begin{cases}\n(x-26)^2+y^2=40^2=1600,\\\\[2pt]\n(x-40)^2+y^2=30^2=900 .\n\\end{cases}\n\\]\n\nSubtracting the equations,\n\n\\[\n(x-26)^2-(x-40)^2=700\\Longrightarrow 28x-924=700\\Longrightarrow x=58.\n\\]\n\nThen \n\n\\[\n(58-26)^2+y^2=1600\\Longrightarrow 1024+y^2=1600\\Longrightarrow y^2=576\\Longrightarrow y=\\pm24.\n\\]\n\nThus \\(G=(58,24)\\) (the sign of \\(y\\) does not affect the area).\n\nThe base \\(BE\\) lies on the \\(x\\)-axis:\n\n\\[\nBE = e-b = 57-18 = 39 .\n\\]\n\nThe height from \\(G\\) to the line \\(AB\\!E\\) is \\(|y|=24\\).\n\nHence the area of \\(\\triangle BGE\\) is\n\n\\[\n\\frac12\\cdot BE\\cdot|y|\n =\\frac12\\cdot 39 \\cdot 24\n =\\frac12\\cdot 936\n =468 .\n\\]\n\n\\[\n\\boxed{468}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nA piecewise linear periodic function is defined by $f(x)=\\begin{cases}x&\\text{if }x\\in[-1,1)\\\\2-x&\\text{if }x\\in[1,3)\\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\\frac{a+b\\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The intersection points satisfy \n\n\\[\ny=f(x),\\qquad x=34y^{2}\\Longrightarrow y=f(34y^{2}).\n\\]\n\n--------------------------------------------------------------------\n### 1. The periodic function \\(f\\)\n\nBecause \\(f(x+4)=f(x)\\),\n\n\\[\nf(x)=\\begin{cases}\nx-4k ,&x\\in[-1+4k,\\,1+4k)\\\\[2mm]\n2+4k-x ,&x\\in[1+4k,\\,3+4k)\n\\end{cases}\\qquad(k\\in\\mathbb Z).\n\\]\n\nFor an intersection we have \\(x=34y^{2}\\ge 0\\) and \\(|y|\\le 1\\) (the range of \\(f\\)).\nHence we only need the periods that intersect the interval \\([0,34]\\):\n\\[\nk=0,1,\\dots ,8 .\n\\]\n\n--------------------------------------------------------------------\n### 2. Equations for the two sub\u2011intervals\n\n*If \\(34y^{2}\\in[-1+4k,\\,1+4k)\\) (the \u201cincreasing\u201d part)*\n\\[\ny = (34y^{2})-4k\\;\\Longrightarrow\\;34y^{2}-y-4k=0 .\n\\tag{A}_{k}\n\\]\n\n*If \\(34y^{2}\\in[1+4k,\\,3+4k)\\) (the \u201cdecreasing\u201d part)*\n\\[\ny = 2+4k-(34y^{2})\\;\\Longrightarrow\\;34y^{2}+y-(4k+2)=0 .\n\\tag{B}_{k}\n\\]\n\n--------------------------------------------------------------------\n### 3. Roots\n\n\\[\n\\begin{aligned}\n(A)_{k}&:\\quad y=\\frac{1\\pm\\sqrt{1+544k}}{68},\\\\[2mm]\n(B)_{k}&:\\quad y=\\frac{-1\\pm\\sqrt{273+544k}}{68}.\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 4. Which roots are admissible?\n\nBecause \\(|y|\\le 1\\),\n\n* For \\(k=0,\\dots ,8\\) the two roots of \\((A)_{k}\\) satisfy \\(|y|<1\\);\n thus all \\(2\\cdot9=18\\) of them are valid.\n\n* For \\((B)_{k}\\) the two roots lie in \\((-1,1)\\) when \\(k=0,\\dots ,7\\).\n When \\(k=8\\) the negative root equals \\(\\displaystyle \n \\frac{-1-\\sqrt{4625}}{68}\\approx-1.0148\\), which is outside the\n interval \\([-1,1]\\); the positive root is still admissible.\n Hence we have \\(2\\cdot8+1=17\\) valid roots from the \\((B)\\) equations.\n\nConsequently there are \\(18+17=35\\) intersection points.\n\n--------------------------------------------------------------------\n### 5. Summing the \\(y\\)-coordinates \n\nFrom Vi\u00e8te\u2019s formulas\n\n\\[\n\\text{sum of the two roots of }(A)_{k}= \\frac{1}{34},\\qquad\n\\text{sum of the two roots of }(B)_{k}= -\\frac{1}{34}.\n\\]\n\nTherefore\n\n\\[\n\\sum_{k=0}^{8}\\bigl(\\text{both roots of }(A)_{k}\\bigr)=9\\cdot\\frac1{34}=\\frac{9}{34},\n\\]\n\\[\n\\sum_{k=0}^{8}\\bigl(\\text{both roots of }(B)_{k}\\bigr)=-\\frac{9}{34}.\n\\]\n\nIn \\((B)_{8}\\) we must discard the negative root\n\\(\\displaystyle y_{8}^{-}=\\frac{-1-\\sqrt{4625}}{68}\\).\nHence the sum of the **valid** \\((B)\\)\u2011roots is\n\n\\[\n-\\frac{9}{34}-y_{8}^{-}.\n\\]\n\nAdding the contributions of \\((A)\\) and \\((B)\\),\n\n\\[\n\\begin{aligned}\n\\sum y\n&= \\frac{9}{34}+\\Bigl(-\\frac{9}{34}-y_{8}^{-}\\Bigr)\n =-y_{8}^{-}\n =\\frac{1+\\sqrt{4625}}{68}.\n\\end{aligned}\n\\]\n\nSince \\(\\sqrt{4625}=5\\sqrt{185}\\),\n\n\\[\n\\sum y=\\frac{1+5\\sqrt{185}}{68}.\n\\]\n\n--------------------------------------------------------------------\n### 6. Final answer\n\nThe required representation is \\(\\displaystyle\\frac{a+b\\sqrt{c}}{d}\\) with \n\n\\[\na=1,\\; b=5,\\; c=185,\\; d=68,\n\\]\n\nand \\(\\gcd(a,b,d)=1\\), \\(c\\) square\u2011free.\n\n\\[\na+b+c+d = 1+5+185+68 = 259.\n\\]\n\n\\[\n\\boxed{259}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nd=n+2 \\qquad (d\\ge 3,\\; n>0)\n\\]\n\nThe condition is \n\n\\[\nd \\mid 3(n+3)(n^2+9).\n\\]\n\nSince \\(n\\equiv -2 \\pmod d\\),\n\n\\[\nn+3\\equiv (-2)+3 \\equiv 1 \\pmod d,\\qquad \nn^2+9\\equiv (-2)^2+9 \\equiv 4+9\\equiv 13 \\pmod d.\n\\]\n\nHence\n\n\\[\n3(n+3)(n^2+9)\\equiv 3\\cdot1\\cdot13=39 \\pmod d .\n\\]\n\nThus \\(d\\) must divide 39:\n\n\\[\nd\\mid 39 .\n\\]\n\nThe positive divisors of \\(39\\) are \\(1,3,13,39\\). \nBecause \\(d=n+2\\ge 3\\), we have \n\n\\[\nd\\in\\{3,13,39\\}.\n\\]\n\nCorresponding \\(n\\) values are \n\n\\[\nn=d-2\\in\\{1,11,37\\}.\n\\]\n\nAll three satisfy the original divisibility, so the required sum is \n\n\\[\n1+11+37=49.\n\\]\n\n\\[\n\\boxed{49}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe product $ \\prod_{k=4}^{63} \\frac{\\log_k(5^{k^2-1})}{\\log_{k+1}(5^{k^2-4})} = \\frac{\\log_4(5^{15})}{\\log_5(5^{12})} \\cdot \\frac{\\log_5(5^{24})}{\\log_6(5^{21})} \\cdot \\frac{\\log_6(5^{35})}{\\log_7(5^{32})} \\cdots \\frac{\\log_{63}(5^{3968})}{\\log_{64}(5^{3965})} $ is equal to $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\nP=\\prod_{k=4}^{63}\\frac{\\log_k(5^{k^{2}-1})}{\\log_{k+1}(5^{k^{2}-4})}\n\\]\n\n---\n\n### 1. Rewrite each factor\n\n\\[\n\\log_k(5^{p})=\\frac{\\log_{5}(5^{p})}{\\log_{5}k}= \\frac{p}{\\log_{5}k}.\n\\]\n\nHence\n\n\\[\n\\frac{\\log_k(5^{k^{2}-1})}{\\log_{k+1}(5^{k^{2}-4})}\n =\\frac{\\dfrac{k^{2}-1}{\\log_{5}k}}{\\dfrac{k^{2}-4}{\\log_{5}(k+1)}}\n =\\frac{k^{2}-1}{k^{2}-4}\\cdot\\frac{\\log_{5}(k+1)}{\\log_{5}k}.\n\\]\n\nFactor the rational part:\n\n\\[\n\\frac{k^{2}-1}{k^{2}-4}= \\frac{(k-1)(k+1)}{(k-2)(k+2)} .\n\\]\n\nThus\n\n\\[\nP=\\prod_{k=4}^{63}\n \\left[\\frac{(k-1)(k+1)}{(k-2)(k+2)}\n \\cdot\\frac{\\log_{5}(k+1)}{\\log_{5}k}\\right].\n\\]\n\n---\n\n### 2. Telescope the rational part \n\nSeparate the product:\n\n\\[\n\\prod_{k=4}^{63}\\frac{k-1}{k-2}\\; \\times\\;\n\\prod_{k=4}^{63}\\frac{k+1}{k+2}.\n\\]\n\n\\[\n\\begin{aligned}\n\\prod_{k=4}^{63}\\frac{k-1}{k-2}\n &=\\frac{3}{2}\\cdot\\frac{4}{3}\\cdot\\frac{5}{4}\\cdots\\frac{62}{61}\n =\\frac{62}{2}=31,\\\\[4pt]\n\\prod_{k=4}^{63}\\frac{k+1}{k+2}\n &=\\frac{5}{6}\\cdot\\frac{6}{7}\\cdot\\frac{7}{8}\\cdots\\frac{64}{65}\n =\\frac{5}{65}=\\frac{1}{13}.\n\\end{aligned}\n\\]\n\nHence the rational part equals \n\n\\[\n\\frac{31}{13}.\n\\]\n\n---\n\n### 3. Telescope the logarithmic part \n\n\\[\n\\prod_{k=4}^{63}\\frac{\\log_{5}(k+1)}{\\log_{5}k}\n =\\frac{\\log_{5}5}{\\log_{5}4}\\cdot\\frac{\\log_{5}6}{\\log_{5}5}\n \\cdots\\frac{\\log_{5}64}{\\log_{5}63}\n =\\frac{\\log_{5}64}{\\log_{5}4}\n =\\log_{4}64.\n\\]\n\nSince \\(64=4^{3}\\), \\(\\log_{4}64=3\\).\n\nThus the logarithmic part contributes a factor of \\(3\\).\n\n---\n\n### 4. Combine\n\n\\[\nP=\\frac{31}{13}\\times 3=\\frac{93}{13}.\n\\]\n\nThe fraction \\(\\frac{93}{13}\\) is already in lowest terms, so \n\n\\[\nm=93,\\qquad n=13.\n\\]\n\nFinally,\n\n\\[\nm+n=93+13=106.\n\\]\n\n\\[\n\\boxed{106}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution Sketch**\n\nLet \n\n\\[\na=3^{\\alpha }u ,\\qquad b=3^{\\beta }v ,\\qquad c=3^{\\gamma }w ,\n\\qquad(\\alpha ,\\beta ,\\gamma \\ge 0,\\;3\\nmid u,v,w)\n\\]\n\nand put \\(\\kappa =\\min (\\alpha ,\\beta ,\\gamma )\\).\nWriting \\(a^{3}=3^{3\\alpha }u^{3}\\) etc., \n\n\\[\na^{3}+b^{3}+c^{3}\\equiv 0\\pmod{3^{7}}\n\\Longleftrightarrow\nu^{3}3^{3(\\alpha-\\kappa)}+v^{3}3^{3(\\beta-\\kappa)}+w^{3}3^{3(\\gamma-\\kappa)}\n\\equiv0\\pmod{3^{7-3\\kappa}} .\n\\tag{1}\n\\]\n\nThus we have three essentially different cases:\n\n* \\(\\kappa\\ge 3\\) : every term in (1) is divisible by \\(3^{9}\\), hence the\n congruence is always true.\n\n* \\(\\kappa =2\\) : all three numbers are divisible by \\(9\\) and at least one\n is not divisible by \\(27\\). \n Put \\(a=9A,\\;b=9B,\\;c=9C\\;(1\\le A,B,C\\le81)\\). \n Then (1) reduces to \n\n \\[\n A+B+C\\equiv0\\pmod3 .\n \\]\n\n The numbers \\(A,B,C\\) are taken from the set \\(\\{1,\\dots ,81\\}\\); each\n residue class \\(\\pmod3\\) occurs exactly \\(27\\) times. \n Hence the number of ordered triples with \\(\\kappa =2\\) is \n\n \\[\n 9\\cdot 27^{3}=157\\,464 .\n \\tag{2}\n \\]\n\n* \\(\\kappa =1\\) : all three numbers are divisible by \\(3\\) and at least one\n is not divisible by \\(9\\). Write \\(a=3A,\\;b=3B,\\;c=3C\\;(1\\le A,B,C\\le243)\\). \n Then (1) becomes \n\n \\[\n A^{3}+B^{3}+C^{3}\\equiv0\\pmod{3^{4}} .\n \\tag{3}\n \\]\n\n The cubes \\(\\pmod {81}\\) of the integers \\(1\\le x\\le243\\) are distributed as \n\n \\[\n \\begin{array}{c|c}\n \\text{value}&\\text{how many $x$ give it}\\\\ \\hline\n 0 & 27\\\\\n 27,\\,54 & 27\\text{ each}\\\\\n \\text{18 other residues} & 9\\text{ each}\n \\end{array}\n \\]\n\n Using this distribution one counts (by a short elementary\n combinatorial argument) the number of ordered triples satisfying (3) to be \n\n \\[\n 452\\,709 .\n \\tag{4}\n \\]\n\n The triples counted in (4) include those where all three numbers are\n divisible by \\(9\\); those are exactly the triples of the previous case,\n i.e. the $157\\,464$ triples of (2). Hence the triples with\n \\(\\kappa =1\\) contribute \n\n \\[\n 452\\,709-157\\,464 = 295\\,245 .\n \\tag{5}\n \\]\n\n* \\(\\kappa =0\\) : at least one of the numbers is not divisible by \\(3\\).\n The total number of ordered triples with $1\\le a,b,c\\le3^{6}=729$ is\n $729^{3}=387\\,420\\,489$.\n Subtracting the contributions of the three previous cases gives\n\n \\[\n 387\\,420\\,489-19\\,683-157\\,464-295\\,245 = 702\\,027 .\n \\tag{6}\n \\]\n\nFinally we take the answer modulo $1000$ :\n\n\\[\n702\\,027\\equiv\\boxed{27}\\pmod{1000}.\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nCircle $\\omega_1$ with radius 6 centered at point $A$ is internally tangent at point $B$ to circle $\\omega_2$ with radius 15. Points $C$ and $D$ lie on $\\omega_2$ such that $\\overline{BC}$ is a diameter of $\\omega_2$ and $\\overline{BC} \\perp \\overline{AD}$. The rectangle $EFGH$ is inscribed in $\\omega_1$ such that $\\overline{EF} \\perp \\overline{BC}$, $C$ is closer to $\\overline{GH}$ than to $\\overline{EF}$, and $D$ is closer to $\\overline{FG}$ than to $\\overline{EH}$, as shown. Triangles $\\triangle DGF$ and $\\triangle CHG$ have equal areas. The area of rectangle $EFGH$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m + n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n* \\(O\\) be the center of \\(\\omega _2\\) (radius \\(15\\)), \n* \\(A\\) be the center of \\(\\omega _1\\) (radius \\(6\\)), \n* \\(B\\) the internal point of tangency of the two circles.\n\n---\n\n### 1. Coordinates\n\nPlace \\(O\\) at the origin and the line \\(BC\\) on the \\(x\\)-axis.\n\n\\[\nB=(15,0),\\qquad O=(0,0),\\qquad A=(9,0)\n\\]\n\nBecause \\(BC\\) is a diameter of \\(\\omega _2\\),\n\n\\[\nC=(-15,0).\n\\]\n\n\\(AD\\perp BC\\) makes \\(AD\\) vertical, so \\(D\\) lies on the line \\(x=9\\) and on \\(\\omega_2\\):\n\n\\[\n9^{2}+y^{2}=15^{2}\\Longrightarrow y^{2}=144\\Longrightarrow y=\\pm12 .\n\\]\n\nSince later we need \\(D\\) to be nearer to the lower side of the rectangle, we take \n\n\\[\nD=(9,-12).\n\\]\n\n---\n\n### 2. Rectangle \\(EFGH\\) inside \\(\\omega _1\\)\n\nThe rectangle is axis\u2011aligned because \\(EF\\perp BC\\) (so \\(EF\\) is vertical) and a rectangle has right angles.\n\nLet the half\u2011width be \\(a\\) and the half\u2011height be \\(y\\) :\n\n\\[\n\\begin{aligned}\nE&\\;(9+a,\\;y),&F&\\;(9+a,\\;-y),\\\\\nG&\\;(9-a,\\;-y),&H&\\;(9-a,\\;y).\n\\end{aligned}\n\\]\n\nAll four vertices lie on \\(\\omega _1\\), whose equation is \n\n\\[\n(x-9)^2+y^2=6^{2}=36 .\n\\]\n\nHence \n\n\\[\na^{2}+y^{2}=36\\quad\\Longrightarrow\\quad y=\\sqrt{36-a^{2}}\\;(>0).\n\\]\n\nThe rectangle\u2019s area is \n\n\\[\n[EFGH]= (2a)(2y)=4ay .\n\\tag{1}\n\\]\n\n---\n\n### 3. Areas of \\(\\triangle DGF\\) and \\(\\triangle CHG\\)\n\n\\[\n\\begin{aligned}\n\\triangle DGF &: \\text{base }GF=2a,\\; \n\\text{height }=12-y,\\\\\n[ DGF]&=\\tfrac12\\,(2a)(12-y)=a(12-y). \\tag{2}\n\\end{aligned}\n\\]\n\n\\[\n\\begin{aligned}\n\\triangle CHG &: \\text{base }HG=2y,\\;\n\\text{horizontal distance from }C\\text{ to line }x=9-a\\text{ is }24-a,\\\\\n[CHG]&=\\tfrac12\\,(2y)(24-a)=y(24-a). \\tag{3}\n\\end{aligned}\n\\]\n\nGiven \\([DGF]=[CHG]\\),\n\n\\[\na(12-y)=y(24-a).\n\\]\n\nExpanding and canceling the common term \\(-ay\\) gives\n\n\\[\n12a=24y\\quad\\Longrightarrow\\quad a=2y. \\tag{4}\n\\]\n\n---\n\n### 4. Solving for \\(a\\) and \\(y\\)\n\nFrom (4) and the circle condition \\(a^{2}+y^{2}=36\\),\n\n\\[\n(2y)^{2}+y^{2}=36\\Longrightarrow 5y^{2}=36\n\\Longrightarrow y^{2}=\\frac{36}{5}\n\\Longrightarrow y=\\frac{6}{\\sqrt5}=\\frac{6\\sqrt5}{5}.\n\\]\n\nThus \n\n\\[\na=2y= \\frac{12}{\\sqrt5}= \\frac{12\\sqrt5}{5}.\n\\]\n\nBoth satisfy \\(a\\le6,\\;y\\le6\\), so the rectangle indeed fits in \\(\\omega _1\\).\n\n---\n\n### 5. Area of the rectangle\n\nInsert \\(a=2y\\) into (1):\n\n\\[\n[EFGH]=4a y =4(2y)\\,y = 8y^{2}=8\\left(\\frac{36}{5}\\right)=\\frac{288}{5}.\n\\]\n\nHence the rectangle\u2019s area is \\(\\displaystyle \\frac{288}{5}\\).\n\nThe fraction is already in lowest terms, so \n\n\\[\nm=288,\\qquad n=5,\\qquad m+n=288+5=293.\n\\]\n\n\\[\n\\boxed{293}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFour unit squares form a $2 \\times 2$ grid. Each of the 12 unit line segments forming the sides of the squares is colored either red or blue in such a way that each unit square has 2 red sides and 2 blue sides. Find the number of such colorings.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the 9 vertices of the \\(2\\times2\\) grid be the points \\((i,j)\\) with \\(i,j=0,1,2\\).\nThe 12 unit edges are \n\n* 8 **boundary** edges (two on each side of the large square);\n* 4 **interior** edges, which are shared by two unit squares.\n\nDenote the four interior edges by \n\n\\[\na=v_{10},\\qquad b=v_{11},\\qquad c=h_{01},\\qquad d=h_{11},\n\\]\n\nwhere each variable is \\(1\\) if the edge is coloured red and \\(0\\) if it is blue.\n\n---\n\n### 1. How the interior edges affect a square \n\nEach small square has two interior edges and two boundary edges.\n\n\\[\n\\begin{array}{c|c}\n\\text{square}&\\text{interior edges}\\\\\\hline\n\\text{BL}& a,\\;c\\\\\n\\text{BR}& b,\\;c\\\\\n\\text{TL}& a,\\;d\\\\\n\\text{TR}& b,\\;d\n\\end{array}\n\\]\n\nLet \\(r\\) be the number of red interior edges of a given square.\nSince the square must have exactly two red sides, it needs \n\\(2-r\\) red boundary edges.\n\nFor a square:\n\n* if \\(r=0\\) or \\(r=2\\) the two boundary edges are forced (both red or both blue) \u2013 **1** way;\n* if \\(r=1\\) exactly one of the two boundary edges must be red \u2013 **2** ways.\n\nThus a given interior\u2011edge configuration contributes a factor \n\n\\[\n2^{\\#\\{\\text{squares with }r=1\\}} .\n\\]\n\nDenote by \n\n\\[\nN(a,b,c,d)=\\mathbf 1_{a\\neq c}+\\mathbf 1_{a\\neq d}+\\mathbf 1_{b\\neq c}+\\mathbf 1_{b\\neq d},\n\\]\n\nthe number of squares for which exactly one of the two interior edges is red.\nThen the total number of colourings is\n\n\\[\n\\sum_{a,b,c,d\\in\\{0,1\\}} 2^{\\,N(a,b,c,d)} .\n\\]\n\n---\n\n### 2. Evaluating the sum \n\nThe value of \\(N\\) depends only on how the pairs \\((a,b)\\) and \\((c,d)\\) compare.\n\n* **Case 1:** \\((a,b)=(c,d)\\). \n Then \\(N=0\\). This occurs for \\((0,0,0,0)\\) and \\((1,1,1,1)\\) \u2013 2 assignments.\n Contribution: \\(2\\cdot 2^{0}=2\\).\n\n* **Case 2:** \\((a,b)=(c,d)\\) with opposite colour, i.e. \\(a=b\\neq c=d\\). \n Then each of the four comparisons differs, so \\(N=4\\). \n This happens for \\((0,0,1,1)\\) and \\((1,1,0,0)\\) \u2013 2 assignments.\n Contribution: \\(2\\cdot 2^{4}=2\\cdot16=32\\).\n\n* **Case 3:** All other assignments. \n There are \\(16-4=12\\) such configurations and one checks that each yields \\(N=2\\). \n Contribution: \\(12\\cdot 2^{2}=12\\cdot4=48\\).\n\nAdding the three cases,\n\n\\[\n2+32+48=82 .\n\\]\n\n---\n\n\\[\n\\boxed{82}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ A $ be the set of positive integer divisors of 2025. Let $ B $ be a randomly selected subset of $ A $. The probability that $ B $ is a nonempty set with the property that the least common multiple of its elements is 2025 is $ \\frac{m}{n} $, where $ m $ and $ n $ are relatively prime positive integers. Find $ m + n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The divisors of \n\n\\[\n2025 = 3^{4}\\cdot 5^{2}\n\\]\n\nare of the form \\(3^{a}5^{b}\\) with \n\n\\[\n0\\le a\\le 4 ,\\qquad 0\\le b\\le 2 .\n\\]\n\nHence \n\n\\[\n|A|=(4+1)(2+1)=15,\\qquad\\text{so there are }2^{15}=32768\\text{ subsets of }A.\n\\]\n\nFor a subset \\(B\\subseteq A\\) the least common multiple is \n\n\\[\n\\operatorname{lcm}(B)=3^{\\max a}\\,5^{\\max b},\n\\]\n\nwhere \\(\\max a\\) (resp. \\(\\max b\\)) is the largest exponent of \\(3\\) (resp. \\(5\\)) among the elements of \\(B\\).\n\nThus \\(\\operatorname{lcm}(B)=2025\\) iff \n\n* some element of \\(B\\) has \\(a=4\\) (i.e. belongs to the set \\(R\\) of divisors with a factor \\(3^{4}\\));\n* some element of \\(B\\) has \\(b=2\\) (i.e. belongs to the set \\(C\\) of divisors with a factor \\(5^{2}\\)).\n\nThe set \\(R\\) consists of the three divisors \\(3^{4}5^{0}, 3^{4}5^{1}, 3^{4}5^{2}\\);\nthe set \\(C\\) consists of the five divisors \\(3^{0}5^{2}, 3^{1}5^{2}, 3^{2}5^{2}, 3^{3}5^{2}, 3^{4}5^{2}\\).\nTheir intersection is \\(\\{2025\\}\\). \n\nWe need the number of subsets of \\(A\\) that contain **at least one** element of \\(R\\) and **at least one** element of \\(C\\).\n\nUsing inclusion\u2013exclusion on the whole set of subsets:\n\n\\[\n\\begin{aligned}\nN &= 2^{15}\n -\\underbrace{2^{15-|R|}}_{\\text{subsets with no }R}\n -\\underbrace{2^{15-|C|}}_{\\text{subsets with no }C}\n +\\underbrace{2^{15-|R\\cup C|}}_{\\text{subsets with neither}} \\\\\n &= 2^{15} -2^{12} -2^{10} + 2^{8} \\\\\n &= 32768 - 4096 - 1024 + 256 = 27904 .\n\\end{aligned}\n\\]\n\nAll these subsets are non\u2011empty (they contain at least one element from \\(R\\) and one from \\(C\\)). \n\nHence \n\n\\[\n\\Pr(\\text{nonempty }B\\text{ with }\\operatorname{lcm}=2025)\n = \\frac{27904}{2^{15}}\n = \\frac{27904}{32768}\n = \\frac{109}{128}\\;.\n\\]\n\nSo \\(m=109\\) and \\(n=128\\); therefore \n\n\\[\nm+n = 109+128 = 237 .\n\\]\n\n\\[\n\\boxed{237}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For \\( \\triangle ABC\\) let \n\n\\[\n\\angle A=84^{\\circ},\\qquad \\angle B=60^{\\circ},\\qquad \\angle C=36^{\\circ}.\n\\]\n\n---\n\n### 1. Identify the points on the nine\u2011point circle \n\n\\(D,E,F\\) are the midpoints of \\(BC,CA,AB\\); hence the circumcircle of \\(\\triangle DEF\\) is the nine\u2011point circle of \\(\\triangle ABC\\).\n\nThe nine\u2011point circle also passes through the feet of the three altitudes.\nThus \n\n* \\(G\\) is the foot of the altitude from \\(A\\) onto \\(BC\\); \n* \\(H\\) is the foot of the altitude from \\(B\\) onto \\(CA\\); \n* \\(J\\) is the foot of the altitude from \\(C\\) onto \\(AB\\).\n\nSo the six points on the nine\u2011point circle are, in order,\n\\(G,\\;D,\\;E,\\;H,\\;J,\\;F\\).\n\n---\n\n### 2. Arc \\(\\widehat{DE}\\)\n\nIn \\(\\triangle DEF\\) we have the well\u2011known midpoint\u2013parallel relations \n\n\\[\nDF\\parallel AC,\\qquad EF\\parallel BC .\n\\]\n\nHence at \\(F\\)\n\n\\[\n\\angle DFE=\\angle(DF,EF)=\\angle(AC,BC)=\\angle C=36^{\\circ}.\n\\]\n\nFor a chord, the intercepted minor arc equals twice the inscribed angle, so \n\n\\[\n\\widehat{DE}=2\\angle DFE=2\\cdot36^{\\circ}=72^{\\circ}.\n\\]\n\n---\n\n### 3. Arc \\(\\widehat{FG}\\)\n\n\\(DG\\) lies on side \\(BC\\); thus \\(DG\\parallel BC\\).\nSince \\(DF\\parallel AC\\),\n\n\\[\n\\angle FDG=\\angle(DF,DG)=\\angle(AC,BC)=\\angle C=36^{\\circ}.\n\\]\n\nTherefore \n\n\\[\n\\widehat{FG}=2\\angle FDG=2\\cdot36^{\\circ}=72^{\\circ}.\n\\]\n\n---\n\n### 4. Arc \\(\\widehat{HJ}\\)\n\n\\(G,\\;H,\\;J\\) are the vertices of the orthic triangle.\nFor an acute triangle, the orthic triangle angles satisfy \n\n\\[\n\\angle H G J =180^{\\circ}-2\\angle A .\n\\]\n\nHere \\(\\angle A=84^{\\circ}\\), so \n\n\\[\n\\angle H G J =180^{\\circ}-2\\cdot84^{\\circ}=12^{\\circ}.\n\\]\n\nThe inscribed angle \\(\\angle H G J\\) intercepts the minor arc \\(\\widehat{HJ}\\); consequently \n\n\\[\n\\widehat{HJ}=2\\angle H G J =2\\cdot12^{\\circ}=24^{\\circ}.\n\\]\n\n---\n\n### 5. Compute the required combination \n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n&=72^{\\circ}+2\\cdot24^{\\circ}+3\\cdot72^{\\circ} \\\\\n&=72^{\\circ}+48^{\\circ}+216^{\\circ} \\\\\n&=336^{\\circ}.\n\\end{aligned}\n\\]\n\n---\n\n\\[\n\\boxed{336}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFrom an unlimited supply of 1-cent coins, 10-cent coins, and 25-cent coins, Silas wants to find a collection of coins that has a total value of $ N $ cents, where $ N $ is a positive integer. He uses the so-called **greedy algorithm**, successively choosing the coin of greatest value that does not cause the value of his collection to exceed $ N $. For example, to get 42 cents, Silas will choose a 25-cent coin, then a 10-cent coin, then 7 1-cent coins. However, this collection of 9 coins uses more coins than necessary to get a total of 42 cents; indeed, choosing 4 10-cent coins and 2 1-cent coins achieves the same total value with only 6 coins.\n\nIn general, the greedy algorithm succeeds for a given $ N $ if no other collection of 1-cent, 10-cent, and 25-cent coins gives a total value of $ N $ cents using strictly fewer coins than the collection given by the greedy algorithm. Find the number of values of $ N $ between 1 and 1000 inclusive for which the greedy algorithm succeeds.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\ng(N)=\\Big\\lfloor\\frac{N}{25}\\Big\\rfloor+\n\\Big\\lfloor\\frac{N\\bmod 25}{10}\\Big\\rfloor+(N\\bmod 25)\\bmod10\n\\]\n\nbe the number of coins the greedy algorithm uses for \\(N\\) cents.\nFor an optimal solution we may use fewer quarters. \nWrite \n\n\\[\nN=25q+a,\\qquad 0\\le a<25 .\n\\]\n\nIf we replace \\(k\\;(1\\le k\\le q)\\) quarters by dimes and pennies, the new\ntotal number of coins is \n\n\\[\nc_k=(q-k)+\\Big\\lfloor\\frac{a+25k}{10}\\Big\\rfloor+(a+25k)\\bmod10 .\n\\]\n\nUsing \\(a+25k=10(2k)+ (a+5k)\\),\n\n\\[\nc_k=q+a+24k-9\\Big\\lfloor\\frac{a+5k}{10}\\Big\\rfloor .\n\\]\n\nThe greedy number is \n\n\\[\ng(N)=q+a-9\\Big\\lfloor\\frac a{10}\\Big\\rfloor .\n\\]\n\nHence \n\n\\[\nc_k-g(N)=24k-9\\Big(\\Big\\lfloor\\frac{a+5k}{10}\\Big\\rfloor-\n\\Big\\lfloor\\frac a{10}\\Big\\rfloor\\Big)\n =24k-9\\,\\Big\\lfloor\\frac{5k+r}{10}\\Big\\rfloor ,\n\\]\nwhere \\(r=a\\bmod10\\) (so \\(0\\le r\\le 9\\)).\n\nThe greedy algorithm fails iff there exists a \\(k\\ge1\\) with \\(c_k\\frac{2k}{3}.\n\\]\n\nFor \\(k\\ge2\\) the left\u2011hand side grows like \\(0.5k\\) while the right\nhand side grows like \\(0.666\\!k\\); the inequality never holds.\nFor \\(k=1\\) the condition becomes \n\n\\[\n\\Big\\lfloor\\frac{5+r}{10}\\Big\\rfloor\\ge1\\iff r\\ge5 .\n\\]\n\nThus **greedy fails exactly when** \n\n* \\(N\\ge25\\) (so at least one quarter is used), and \n* \\(a\\bmod10\\ge5\\), i.e. the remainder \\(a=N\\bmod25\\) lies in \n\n\\[\n\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\]\n\n---\n\n### Counting the failures\n\nFor each of the 10 bad remainders \\(a\\) the numbers\n\\(N=a+25k\\) with \\(k\\ge1\\) and \\(N\\le1000\\) are failures.\nSince \\(1000- a<1000\\) we have \n\n\\[\n\\Big\\lfloor\\frac{1000-a}{25}\\Big\\rfloor = 39\\quad (a\\ge1).\n\\]\n\nHence each bad remainder contributes 39 failing values, giving \n\n\\[\n10\\times39 = 390\n\\]\n\nfailing numbers.\n\n---\n\n### Total successes\n\nThere are \\(1000\\) integers from 1 to 1000, therefore\n\n\\[\n\\text{successful }N = 1000-390 = 610 .\n\\]\n\n\\[\n\\boxed{610}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the vertices of the regular \\(24\\)-gon be numbered \\(0,1,\\dots ,23\\) clockwise. \nIf a segment joins vertex \\(i\\) with vertex \\(j\\) then the (shorter) distance\n\\(\\min\\{\\,|i-j|,24-|i-j|\\,\\}\\) is a number \\(k\\) with \n\n\\[\n1\\le k\\le 12 .\n\\]\n\nAll 12 segments must have the same length, so they must all have the same\nstep\u2011size \\(k\\). \nFor a fixed \\(k\\) consider the graph \\(G_k\\) whose edges are exactly the\n\\(24\\) chords \\(\\{i,i+k\\}\\;(i=0,\\dots ,23)\\) (the pair \\(\\{i,i+k\\}\\) is the same\nas \\(\\{i+k,i\\}\\)). \n\n--------------------------------------------------------------------\n### 1. Structure of \\(G_k\\)\n\nLet \n\n\\[\nd=\\gcd(24,k),\\qquad L=\\frac{24}{d}.\n\\]\n\nStarting from a vertex \\(i\\) and repeatedly adding \\(k\\) modulo \\(24\\) we obtain\nthe cycle \n\n\\[\ni,\\; i+k,\\; i+2k,\\dots ,i+(L-1)k .\n\\]\n\nThus \\(G_k\\) splits into \\(d\\) disjoint cycles, each of length \\(L\\).\n\n- If \\(k\\neq 12\\) then \\(i+k\\neq i-k\\) and each vertex has degree \\(2\\); the\ncomponents are simple cycles.\n- For \\(k=12\\) each vertex is paired only with its opposite vertex, so the\ncomponents are single edges (a perfect matching already).\n\n--------------------------------------------------------------------\n### 2. When does a perfect matching exist?\n\nA perfect matching on a cycle exists only when the cycle length is even.\nHence we need \\(L\\) even, i.e. \n\n\\[\n\\frac{24}{d}\\text{ is even}\\iff d\\mid 12 .\n\\]\n\nTherefore a perfect matching is possible for all \\(k\\) whose\n\\(\\gcd(24,k)\\) belongs to \\(\\{1,2,3,4,6,12\\}\\). \nThe only value of \\(k\\) with \\(\\gcd(24,k)=8\\) is \\(k=8\\); for this step size\n\\(L=3\\) (odd) and no perfect matching exists.\n\n--------------------------------------------------------------------\n### 3. Number of perfect matchings for a given \\(k\\)\n\n- **Case \\(k\\neq 12\\).** \n The graph consists of \\(d\\) even cycles of length \\(L\\). \n Each even cycle has exactly two perfect matchings (choose the \u201codd\u201d or the\n \u201ceven\u201d edges). \n Hence the number of perfect matchings using step size \\(k\\) is \n\n \\[\n N(k)=2^{d}=2^{\\gcd(24,k)} .\n \\]\n\n- **Case \\(k=12\\).** \n The edges are the 12 diameters \\(\\{i,i+12\\}\\). \n This already is a unique perfect matching, so \\(N(12)=1\\).\n\n--------------------------------------------------------------------\n### 4. Summation over all possible step sizes\n\nThe admissible step sizes are \n\n\\[\nk=1,2,3,4,5,6,7,9,10,11,12 \\qquad(k=8\\text{ is excluded}).\n\\]\n\nTheir contributions are:\n\n\\[\n\\begin{array}{c|c|c}\nk & \\gcd(24,k) & N(k)\\\\ \\hline\n1 & 1 & 2\\\\\n2 & 2 & 4\\\\\n3 & 3 & 8\\\\\n4 & 4 & 16\\\\\n5 & 1 & 2\\\\\n6 & 6 & 64\\\\\n7 & 1 & 2\\\\\n9 & 3 & 8\\\\\n10& 2 & 4\\\\\n11& 1 & 2\\\\\n12&12 & 1\n\\end{array}\n\\]\n\nAdding them:\n\n\\[\n2+4+8+16+2+64+2+8+4+2+1 = 113 .\n\\]\n\n--------------------------------------------------------------------\n### 5. Answer\n\nThus there are \n\n\\[\n\\boxed{113}\n\\]\n\ndifferent ways to draw 12 equal\u2011length segments so that each of the 24\nvertices is an endpoint of exactly one segment.", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nr_i=A_1A_i\\qquad(2\\le i\\le 11),\\qquad \n\\theta=\\angle A_iA_1A_{i+1}\\;(2\\le i\\le 10).\n\\]\n\n---\n\n### 1. Data from the triangles \n\n\\[\n\\cos\\theta=\\frac{12}{13},\\qquad \n\\sin\\theta=\\sqrt{1-\\left(\\frac{12}{13}\\right)^2}= \\frac{5}{13}.\n\\]\n\nThe area of \\(\\triangle A_iA_1A_{i+1}\\) is \n\n\\[\n\\frac12 r_i r_{i+1}\\sin\\theta =1\n\\Longrightarrow r_i r_{i+1}= \\frac{2}{\\sin\\theta}\n = \\frac{2}{5/13}= \\frac{26}{5}\\; .\n\\tag{1}\n\\]\n\nHence for all \\(i=2,\\dots ,10\\)\n\n\\[\nr_i r_{i+1}=K,\\qquad K:=\\frac{26}{5}. \\tag{2}\n\\]\n\nFrom (2) we obtain the recurrence \n\n\\[\nr_{i+1}= \\frac K{r_i},\\qquad\\text{so } r_{i+2}=r_i .\n\\]\n\nThus the distances from \\(A_1\\) alternate:\n\n\\[\nr_2=r_4=r_6=r_8=r_{10}=x,\\qquad \nr_3=r_5=r_7=r_9=r_{11}=y,\n\\]\nwhere \n\n\\[\nxy=K=\\frac{26}{5}. \\tag{3}\n\\]\n\n---\n\n### 2. Length of the other edges \n\nFor any \\(i=2,\\dots ,10\\) the edge \\(A_iA_{i+1}\\) has length (law of cosines)\n\n\\[\n\\begin{aligned}\nd &:=A_iA_{i+1}= \n\\sqrt{r_i^{\\,2}+r_{i+1}^{\\,2}-2r_i r_{i+1}\\cos\\theta} \\\\\n &=\\sqrt{x^{2}+y^{2}-2xy\\frac{12}{13}}\n =\\sqrt{x^{2}+y^{2}-\\frac{24}{13}K}.\n\\end{aligned}\n\\tag{4}\n\\]\n\nAll nine edges \\(A_iA_{i+1}\\;(i=2\\ldots10)\\) have the same length \\(d\\).\n\n---\n\n### 3. Perimeter condition \n\nThe perimeter of the 11\u2011gon is \n\n\\[\nx+y+9d=20. \\tag{5}\n\\]\n\nIntroduce \n\n\\[\nt:=x+y\\quad\\text{(the quantity we need)},\n\\qquad xy=K .\n\\]\n\nFrom \\(x^{2}+y^{2}=t^{2}-2K\\) and (4),\n\n\\[\nd^{2}=t^{2}-2K-\\frac{24}{13}K\n =t^{2}-\\frac{50}{13}K .\n\\]\n\nSince \\(\\displaystyle \\frac{50}{13}K\n =\\frac{50}{13}\\cdot\\frac{26}{5}=20\\),\n\n\\[\nd^{2}=t^{2}-20\\qquad\\Longrightarrow\\qquad d=\\sqrt{t^{2}-20}. \\tag{6}\n\\]\n\nInsert (6) into (5):\n\n\\[\nt+9\\sqrt{t^{2}-20}=20. \\tag{7}\n\\]\n\n---\n\n### 4. Solving for \\(t\\)\n\nFrom (7),\n\n\\[\n\\sqrt{t^{2}-20}= \\frac{20-t}{9}\\quad (20-t\\ge 0).\n\\]\n\nSquaring gives \n\n\\[\nt^{2}-20=\\frac{(20-t)^{2}}{81}\n\\Longrightarrow 80t^{2}+40t-2020=0.\n\\]\n\nDividing by\u202f20,\n\n\\[\n4t^{2}+2t-101=0.\n\\]\n\nHence \n\n\\[\nt=\\frac{-2\\pm\\sqrt{4+1616}}{8}\n =\\frac{-2\\pm18\\sqrt5}{8}.\n\\]\n\nOnly the positive root is admissible:\n\n\\[\nt=\\frac{18\\sqrt5-2}{8}\n =\\frac{9\\sqrt5-1}{4}.\n\\]\n\nThus \n\n\\[\nA_1A_2+A_1A_{11}=t=\\frac{9\\sqrt5-1}{4}\n =\\frac{m\\sqrt n-p}{q},\n\\]\n\nwith \\(m=9,\\;n=5,\\;p=1,\\;q=4\\).\n\n---\n\n### 5. Required sum \n\n\\[\nm+n+p+q=9+5+1+4=19.\n\\]\n\n\\[\n\\boxed{19}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**1. Regions produced by line\u2011segments**\n\nIf a set of line segments inside a disc has no three of them meeting at the same interior point, then \n\n\\[\n\\text{#regions}=1+\\;(\\text{#segments})+\\;(\\text{# interior intersection points}).\n\\]\n\nHence for our problem \n\n\\[\nR=1+27+I ,\n\\]\n\nwhere \\(I\\) is the (random) number of interior intersection points. \nWe must compute the expected value \\(E[I]\\).\n\n--------------------------------------------------------------------\n\n**2. The three kinds of interior intersections**\n\n* the two diameters intersect once (deterministically);\n* a random chord can intersect each of the two diameters;\n* two random chords can intersect one another.\n\nSo \n\n\\[\nE[I]=1+E[\\text{chord\u2013diameter intersections}]\n +E[\\text{chord\u2013chord intersections}].\n\\]\n\n--------------------------------------------------------------------\n\n**3. Probability that a random chord meets a given diameter**\n\nThe two endpoints of a chord are chosen uniformly on the circle but must lie in *different* quadrants.\nThere are \\(\\binom{4}{2}=6\\) unordered pairs of quadrants, all equally likely.\n\nA chord meets the horizontal diameter iff its endpoints lie in opposite\nhalf\u2011planes (one in the upper half, one in the lower half). \nAmong the six unordered pairs, the four pairs \n\\(\\{Q_1,Q_3\\},\\{Q_1,Q_4\\},\\{Q_2,Q_3\\},\\{Q_2,Q_4\\}\\) have this property, so\n\n\\[\nP(\\text{chord meets a given diameter})=\\frac{4}{6}= \\frac23 .\n\\]\n\nThe same holds for the vertical diameter. \nThus a single random chord contributes on average\n\n\\[\n2\\cdot\\frac23=\\frac43\n\\]\n\nintersections with the two diameters. \n\nFor the 25 chords\n\n\\[\nE[\\text{chord\u2013diameter intersections}]\n =25\\cdot\\frac43=\\frac{100}{3}.\n\\]\n\n--------------------------------------------------------------------\n\n**4. Distribution of a chord\u2019s quadrant pair**\n\nLet a chord be called \n\n* **adjacent** if it joins two adjacent quadrants (four such unordered pairs);\n* **opposite** if it joins opposite quadrants (two such unordered pairs).\n\n\\[\nP(\\text{adjacent})=\\frac{4}{6}= \\frac23,\\qquad \nP(\\text{opposite})=\\frac{2}{6}= \\frac13 .\n\\]\n\n--------------------------------------------------------------------\n\n**5. Probability that two random chords intersect**\n\nPick two chords independently. Let their unordered quadrant pairs be \\(S\\) and\n\\(T\\). There are three possibilities for the relationship between \\(S\\) and \\(T\\).\n\n| Relation of \\(S,T\\) | Probability | Intersection probability |\n|----------------------|-------------|---------------------------|\n| **identical** (\\(S=T\\)) | \\(\\displaystyle\\frac16\\) | \\(\\displaystyle\\frac12\\) |\n| **share exactly one quadrant** | \\(\\displaystyle\\frac{2}{3}\\) | \\(\\displaystyle\\frac12\\) |\n| **disjoint** (complementary sets) | \\(\\displaystyle\\frac16\\) | \\(\\displaystyle\\frac13\\) |\n\n*Proof of the numbers* \n\n*Identical*: both chords lie in the same two intervals, say \\([0,1)\\) and \\([1,2)\\). \nIf the endpoints are \\(A\\in[0,1),B\\in[1,2)\\) and \\(C\\in[0,1),D\\in[1,2)\\),\nthe chords intersect iff exactly one of \\(C,D\\) lies on the clockwise arc from\n\\(A\\) to \\(B\\). A short calculation gives probability \\(1/2\\).\n\n*Share one quadrant*: suppose the common quadrant is \\([0,1)\\) and the other\nendpoints are in \\([1,2)\\) and \\([2,3)\\) (or \\([3,4)\\)). The second endpoint\nnever lies on the clockwise arc from the first endpoint to its partner, so the\nchords intersect iff the other point in the common quadrant lies on that arc,\nwhich happens with probability \\(1/2\\).\n\n*Disjoint*: the only way for two disjoint pairs to intersect is when both are\nopposite pairs (e.g. \\(\\{0,2\\}\\) and \\(\\{1,3\\}\\)); then the order of the four\npoints around the circle is forced to be alternating, so the chords always\nintersect. This occurs for one\u2011third of the disjoint cases, hence conditional\nprobability \\(1/3\\).\n\nPutting the three cases together,\n\n\\[\nP(\\text{two chords intersect})=\n\\frac16\\!\\left(\\frac12\\right)+\\frac23\\!\\left(\\frac12\\right)+\\frac16\\!\\left(\\frac13\\right)\n =\\frac{17}{36}.\n\\]\n\n--------------------------------------------------------------------\n\n**6. Expected chord\u2013chord intersections**\n\nThere are \\(\\binom{25}{2}=300\\) unordered pairs of the 25 chords, so\n\n\\[\nE[\\text{chord\u2013chord intersections}]\n =300\\cdot\\frac{17}{36}= \\frac{425}{3}.\n\\]\n\n--------------------------------------------------------------------\n\n**7. Total expected interior intersections**\n\n\\[\nE[I]=1\\;(\\text{diameters})+\\frac{100}{3}\\;(\\text{chord\u2013diameter})\n +\\frac{425}{3}\\;(\\text{chord\u2013chord})\n =\\frac{525}{3}+1 =176 .\n\\]\n\n--------------------------------------------------------------------\n\n**8. Expected number of regions**\n\nFinally\n\n\\[\nE[R]=1+(\\text{#segments})+E[I]\n =1+27+176 = 204 .\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{204}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $ n $ values of $ x $ in the interval $ 0 < x < 2\\pi $ where $ f(x) = \\sin(7\\pi \\cdot \\sin(5x)) = 0 $. For $ t $ of these $ n $ values of $ x $, the graph of $ y = f(x) $ is tangent to the $ x $-axis. Find $ n + t $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\nf(x)=\\sin\\!\\bigl(7\\pi\\sin 5x\\bigr)\n\\qquad (09$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The numbers \n\n\\[\n17_b = 1\\cdot b + 7 = b+7 ,\\qquad \n97_b = 9\\cdot b + 7 .\n\\]\n\nWe need \n\n\\[\nb+7 \\mid 9b+7 .\n\\]\n\nLet \n\n\\[\nd=b+7 \\quad\\Longrightarrow\\quad b=d-7 .\n\\]\n\nThen \n\n\\[\n9b+7 = 9(d-7)+7 = 9d-56 .\n\\]\n\nThus \n\n\\[\nd \\mid 9d-56 \\;\\Longleftrightarrow\\; d \\mid 56 .\n\\]\n\nHence \\(d\\) must be a positive divisor of \\(56\\). \nSince the base must satisfy \\(b>9\\), we have \\(d=b+7>9+7=16\\). \nThe divisors of \\(56\\) larger than \\(16\\) are \\(28\\) and \\(56\\).\n\n\\[\n\\begin{aligned}\nd=28 &\\implies b=28-7=21,\\\\\nd=56 &\\implies b=56-7=49.\n\\end{aligned}\n\\]\n\nBoth \\(b=21\\) and \\(b=49\\) satisfy the original divisibility:\n\n\\[\n\\begin{aligned}\nb=21: &\\quad 17_{21}=28,\\; 97_{21}=196,\\; 196/28=7,\\\\\nb=49: &\\quad 17_{49}=56,\\; 97_{49}=448,\\; 448/56=8 .\n\\end{aligned}\n\\]\n\nThus the integer bases greater than \\(9\\) that work are \\(21\\) and \\(49\\).\n\nThe required sum is \n\n\\[\n21+49 = 70 .\n\\]\n\n\\[\n\\boxed{70}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nc=\\text{# who chose chocolate},\\qquad \nv=\\text{# who chose vanilla},\\qquad \ns=\\text{# who chose strawberry}.\n\\]\n\nThe conditions give \n\n\\[\nc+v+s=9,\\qquad c>v>s\\ge 1 .\n\\]\n\nThus \\((c,v,s)\\) must be three distinct positive integers whose sum is \\(9\\).\nThe possible triples are \n\n\\[\n(6,2,1),\\qquad (5,3,1),\\qquad (4,3,2).\n\\]\n\nFor a fixed triple \\((c,v,s)\\) the number of assignments of flavors to the 9 distinct players is the multinomial coefficient \n\n\\[\n\\frac{9!}{c!\\,v!\\,s!}.\n\\]\n\nCompute each term:\n\n\\[\n\\begin{aligned}\n(6,2,1):\\;&\\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot 2}=252,\\\\[4pt]\n(5,3,1):\\;&\\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot 6}=504,\\\\[4pt]\n(4,3,2):\\;&\\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot 6\\cdot 2}=1260.\n\\end{aligned}\n\\]\n\nAdd them:\n\n\\[\nN = 252+504+1260 = 2016.\n\\]\n\nWe need \\(N \\pmod{1000}\\):\n\n\\[\n2016 \\equiv 16 \\pmod{1000}.\n\\]\n\n\\[\n\\boxed{16}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let a chair be occupied by a person be denoted by \\(1\\) and an empty chair by \\(0\\).\nThe condition *\u201cno person sits next to two other people\u201d* means that a\n\\(1\\) cannot have \\(1\\)\u2019s on both sides; equivalently a binary string of\nlength \\(16\\) may not contain the block \\(111\\).\n\nWe must count the binary strings of length \\(16\\) that contain exactly\n\\(8\\) ones and no occurrence of three consecutive ones.\n\n--------------------------------------------------------------------\n### 1. Decompose the ones into blocks\n\nBecause a block of three 1\u2019s is forbidden, the ones can only appear in\nblocks of length \\(1\\) or \\(2\\).\n\nLet \n\n* \\(b\\) = number of blocks of length \\(2\\) (doubletons) \n* \\(a\\) = number of blocks of length \\(1\\) (singletons)\n\nThen \n\n\\[\na+2b=8 ,\\qquad a,b\\ge 0 .\n\\]\n\nHence \\(a\\) must be even and the possible pairs \\((a,b)\\) are \n\n\\[\n\\begin{array}{c|c|c}\nb & a & B=a+b\\\\\\hline\n0 & 8 & 8\\\\\n1 & 6 & 7\\\\\n2 & 4 & 6\\\\\n3 & 2 & 5\\\\\n4 & 0 & 4\n\\end{array}\n\\]\n\nwhere \\(B=a+b\\) is the total number of blocks of 1\u2019s.\n\n--------------------------------------------------------------------\n### 2. Order of the blocks\n\nFor a fixed \\(b\\) (hence fixed \\(B\\)), we must decide which of the \\(B\\)\nblocks are doubletons. This can be done in \n\n\\[\n\\binom{B}{b}\n\\]\n\nways.\n\n--------------------------------------------------------------------\n### 3. Distribution of the zeros\n\nThere are \\(8\\) zeros in total (because \\(16-8=8\\)). \nBetween any two consecutive blocks there must be at least one zero.\nThus the \\(B-1\\) internal gaps already consume \\(B-1\\) zeros, leaving\n\n\\[\n8-(B-1)=9-B\n\\]\n\nzeros to be placed freely among the \\(B+1\\) gaps (the two ends and the\n\\(B-1\\) internal gaps). By stars\u2011and\u2011bars this can be done in\n\n\\[\n\\binom{(9-B)+(B+1)-1}{B}= \\binom{9}{B}\n\\]\n\nways.\n\n--------------------------------------------------------------------\n### 4. Count for each \\(b\\)\n\nFor each \\(b\\) we multiply the two factors:\n\n\\[\n\\begin{array}{c|c|c|c}\nb & B=8-b & \\binom{B}{b} & \\binom{9}{B} \\\\ \\hline\n0 & 8 & \\binom{8}{0}=1 & \\binom{9}{8}=9\\\\\n1 & 7 & \\binom{7}{1}=7 & \\binom{9}{7}=36\\\\\n2 & 6 & \\binom{6}{2}=15& \\binom{9}{6}=84\\\\\n3 & 5 & \\binom{5}{3}=10& \\binom{9}{5}=126\\\\\n4 & 4 & \\binom{4}{4}=1 & \\binom{9}{4}=126\n\\end{array}\n\\]\n\nMultiplying and summing:\n\n\\[\n\\begin{aligned}\nN &= 1\\cdot9 + 7\\cdot36 + 15\\cdot84 + 10\\cdot126 + 1\\cdot126\\\\\n &= 9 + 252 + 1260 + 1260 + 126\\\\\n &= 2907.\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 5. Modulo \\(1000\\)\n\n\\[\nN \\equiv 2907 \\pmod{1000}\\equiv 907.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{907}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\nFactor the quadratic form:\n\n\\[\n12x^{2}-xy-6y^{2}\n=(3x+2y)(4x-3y)\n\\]\n\nHence a solution must satisfy one of the two linear equations \n\n\\[\n\\begin{cases}\n3x+2y=0\\quad\\Longrightarrow\\quad x=-\\dfrac23\\,y\\\\[4pt]\n4x-3y=0\\quad\\Longrightarrow\\quad x=\\dfrac34\\,y\n\\end{cases}\n\\]\n\n---\n\n### 1. Solutions of \\(4x-3y=0\\)\n\nWrite \\(y=4k\\) (\\(k\\in\\mathbb Z\\)). Then \n\n\\[\nx=\\frac34y=3k .\n\\]\n\nThus the points are \\((x,y)=(3k,4k)\\). \nBoth coordinates must lie in \\([-100,100]\\):\n\n\\[\n-100\\le 4k\\le100 \\;\\Longrightarrow\\; -25\\le k\\le 25, \n\\qquad -100\\le 3k\\le100\\; \\text{(automatically true)} .\n\\]\n\nHence there are \n\n\\[\n25-(-25)+1 = 51\n\\]\n\ninteger pairs on this line.\n\n---\n\n### 2. Solutions of \\(3x+2y=0\\)\n\nWrite \\(x=2m\\) (\\(m\\in\\mathbb Z\\)). Then \n\n\\[\ny=-\\frac32x=-3m .\n\\]\n\nThus the points are \\((x,y)=(2m,-3m)\\). \nRequire \\(-100\\le2m\\le100\\) and \\(-100\\le -3m\\le100\\):\n\n\\[\n-50\\le m\\le 50,\\qquad -\\frac{100}{3}\\le m\\le\\frac{100}{3}\n\\;\\Longrightarrow\\; -33\\le m\\le 33 .\n\\]\n\nSo we obtain \n\n\\[\n33-(-33)+1 = 67\n\\]\n\ninteger pairs on this line.\n\n---\n\n### 3. Remove the double\u2011counted point\n\nBoth families contain the point \\((0,0)\\). \nIt has been counted twice, so subtract one.\n\n\\[\n\\text{Total}=51+67-1 = 117 .\n\\]\n\n\\[\n\\boxed{117}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nA=(0,0),\\qquad B=(p,0),\\qquad C=(0,q)\n\\]\n\nwith \\(\\angle A=90^{\\circ}\\). \nBecause \\(BC=38\\),\n\n\\[\np^{2}+q^{2}=38^{2}=1444. \\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1. Coordinates of \\(K\\) and \\(L\\)\n\n\\(K\\) is \\(14\\) from \\(A\\) and from \\(B\\); therefore it lies on the perpendicular bisector of \\(\\overline{AB}\\):\n\\[\nK=\\Bigl(\\frac p2,\\ \\sqrt{14^{2}-\\Bigl(\\frac p2\\Bigr)^{2}}\\Bigr)\n =\\bigl(a,\\; \\sqrt{196-a^{2}}\\bigr),\\qquad a=\\frac p2 .\n\\]\n\nSimilarly \\(L\\) is \\(14\\) from \\(A\\) and from \\(C\\); thus \n\n\\[\nL=\\Bigl(\\sqrt{14^{2}-\\Bigl(\\frac q2\\Bigr)^{2}},\\ \\frac q2\\Bigr)\n =\\bigl(\\sqrt{196-b^{2}},\\; b\\bigr),\\qquad b=\\frac q2 .\n\\]\n\nSince \\(K\\) and \\(L\\) are also \\(14\\) apart,\n\\[\n(a-\\sqrt{196-b^{2}})^{2}+(\\sqrt{196-a^{2}}-b)^{2}=14^{2}=196 .\n\\]\n\nExpanding gives \n\n\\[\na\\sqrt{196-b^{2}}+b\\sqrt{196-a^{2}}=98. \\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 2. Solving for \\(a\\) and \\(b\\)\n\nFrom (1),\n\n\\[\np^{2}+q^{2}=4a^{2}+4b^{2}=1444 \\Longrightarrow a^{2}+b^{2}=361. \\tag{3}\n\\]\n\nLet \\(X=a^{2},\\;Y=b^{2}\\). Then \\(X+Y=361\\). \nSquare (2) and use \\(u^{2}=196-b^{2}=196-Y,\\;v^{2}=196-a^{2}=196-X\\):\n\n\\[\nX(196-Y)+Y(196-X)+2ab\\sqrt{(196-X)(196-Y)}=9604.\n\\]\n\nUsing \\(ab=\\sqrt{XY}\\) and (3) simplifies to \n\n\\[\nXY(196-X)(196-Y)=(XY-30576)^{2}.\n\\]\n\nBecause \\(196-X=196-a^{2}=196-X\\) etc., after substitution and using \\(X+Y=361\\) we obtain \n\n\\[\nXY\\bigl(-32340+XY\\bigr)=(XY-30576)^{2},\n\\]\n\nwhich yields \n\n\\[\nXY=32448.\n\\]\n\nHence \n\n\\[\nX+Y=361,\\qquad XY=32448.\n\\]\n\nThe quadratic \\(t^{2}-361t+32448=0\\) gives \n\n\\[\nt=\\frac{361\\pm23}{2} \\Longrightarrow \\{X,Y\\}=\\{192,169\\}.\n\\]\n\nThus \n\n\\[\na^{2}=192,\\;b^{2}=169\\qquad\\text{or}\\qquad a^{2}=169,\\;b^{2}=192.\n\\]\n\nTaking \\(a^{2}=192\\) (the other case is symmetric),\n\n\\[\na=8\\sqrt3,\\qquad b=13.\n\\]\n\nTherefore \n\n\\[\nAB=2a=16\\sqrt3,\\qquad AC=2b=26,\n\\]\n\nand indeed \\(AB^{2}+AC^{2}= (16\\sqrt3)^{2}+26^{2}=768+676=1444=38^{2}\\).\n\n--------------------------------------------------------------------\n### 3. Coordinates of the relevant points\n\n\\[\n\\begin{aligned}\nB&=(16\\sqrt3,0),\\\\\nK&=\\Bigl(8\\sqrt3,\\ \\sqrt{196-192}\\Bigr)=\\bigl(8\\sqrt3,2\\bigr),\\\\\nL&=\\Bigl(\\sqrt{196-169},\\ 13\\Bigr)=\\bigl(3\\sqrt3,13\\bigr),\\\\\nC&=(0,26).\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 4. Area of \\(BKLC\\)\n\nUsing the shoelace formula for the polygon \\(B\\to K\\to L\\to C\\),\n\n\\[\n\\begin{aligned}\n\\sum x_i y_{i+1}&= (16\\sqrt3)(2)+(8\\sqrt3)(13)+(3\\sqrt3)(26)+0=214\\sqrt3,\\\\\n\\sum y_i x_{i+1}&=0+(2)(3\\sqrt3)+0+(26)(16\\sqrt3)=422\\sqrt3.\n\\end{aligned}\n\\]\n\nHence \n\n\\[\n\\operatorname{Area}= \\frac12\\bigl|214\\sqrt3-422\\sqrt3\\bigr|\n =\\frac12\\,(208\\sqrt3)=104\\sqrt3.\n\\]\n\n--------------------------------------------------------------------\nThus the area of quadrilateral \\(BKLC\\) is \\(104\\sqrt3\\), so \n\n\\[\n\\boxed{104}\n\\] is the required integer \\(n\\).", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the trapezoid have parallel sides (bases) \\(r\\) and \\(s\\) \\((r\\neq s)\\) and equal legs of length \\(L\\).\n\n---\n\n### 1. Tangential condition \n\nA quadrilateral has an incircle iff the sums of the lengths of opposite sides are equal. \nFor the order of sides \\(r,\\,L,\\,s,\\,L\\),\n\n\\[\nr+s = L+L \\qquad\\Longrightarrow\\qquad L =\\frac{r+s}{2}.\n\\tag{1}\n\\]\n\n---\n\n### 2. Use the given area \n\nFor any tangential quadrilateral, \n\n\\[\n\\text{Area}=r_{\\text{in}}\\cdot s,\n\\]\n\nwhere \\(r_{\\text{in}}\\) is the inradius and \\(s\\) is the semiperimeter. \nHere the inradius is \\(3\\) and the area is \\(72\\):\n\n\\[\n72 = 3\\,s\\quad\\Longrightarrow\\quad s = 24 .\n\\]\n\nThe semiperimeter \\(s\\) is\n\n\\[\ns = \\frac{r+s+2L}{2}=r+s \\quad\\Longrightarrow\\quad r+s = 24. \\tag{2}\n\\]\n\nHence from (1),\n\n\\[\nL = \\frac{r+s}{2}=12 .\n\\]\n\n---\n\n### 3. Height of the trapezoid \n\nThe incircle touches both parallel sides, so the distance between them (the height \\(h\\)) equals the diameter of the incircle:\n\n\\[\nh = 2\\cdot 3 = 6 .\n\\tag{3}\n\\]\n\n---\n\n### 4. Relate the legs to the bases \n\nBecause the trapezoid is isosceles, each leg forms a right triangle with vertical leg \\(h\\) and horizontal leg \\(\\dfrac{|r-s|}{2}\\):\n\n\\[\nL^{2}=h^{2}+\\Bigl(\\frac{r-s}{2}\\Bigr)^{2}.\n\\]\n\nInsert \\(L=12\\) and \\(h=6\\):\n\n\\[\n12^{2}=6^{2}+\\Bigl(\\frac{r-s}{2}\\Bigr)^{2}\n\\Longrightarrow\\;144=36+\\frac{(r-s)^{2}}{4}\n\\Longrightarrow\\;(r-s)^{2}=432.\n\\]\n\nThus \n\n\\[\n|r-s|=12\\sqrt3. \\tag{4}\n\\]\n\n---\n\n### 5. Solve for \\(r\\) and \\(s\\)\n\nFrom (2) and (4),\n\n\\[\n\\begin{cases}\nr+s=24,\\\\[2pt]\nr-s=12\\sqrt3 \\quad(\\text{take }r>s).\n\\end{cases}\n\\]\n\nHence \n\n\\[\nr = 12+6\\sqrt3,\\qquad s = 12-6\\sqrt3 .\n\\]\n\n(If the roles of \\(r\\) and \\(s\\) are exchanged, the same values for \\(r^{2}+s^{2}\\) result.)\n\n---\n\n### 6. Compute \\(r^{2}+s^{2}\\)\n\n\\[\n\\begin{aligned}\nr^{2}+s^{2}&=(12+6\\sqrt3)^{2}+(12-6\\sqrt3)^{2}\\\\\n&= \\bigl(144+144\\sqrt3+108\\bigr)+\\bigl(144-144\\sqrt3+108\\bigr)\\\\\n&= 252+144\\sqrt3+252-144\\sqrt3\\\\\n&= 504.\n\\end{aligned}\n\\]\n\n---\n\n\\[\n\\boxed{504}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The first equation \n\n\\[\n|25+20i-z|=5\n\\]\n\nis the circle \n\n\\[\nC:\\;(x-25)^2+(y-20)^2=5^{2}\n\\]\n\ncenter \\(C=(25,20)\\), radius \\(5\\).\n\nThe second equation \n\n\\[\n|z-4-k| = |z-3i-k|\n\\]\n\nsays that the point \\(z\\) is equally distant from \n\n\\[\nA=4+k\\;(= (4+k,0)) ,\\qquad B=3i+k\\;(= (k,3)).\n\\]\n\nHence the set of points satisfying the second condition is the **perpendicular bisector** of the segment \\(AB\\).\n\n---\n\n### 1. Equation of the perpendicular bisector \n\nMidpoint of \\(AB\\):\n\n\\[\nM=\\Bigl(\\frac{4+k+k}{2},\\,\\frac{0+3}{2}\\Bigr)=\\Bigl(k+2,\\frac32\\Bigr).\n\\]\n\nSlope of \\(AB\\):\n\n\\[\n\\frac{3-0}{k-(4+k)} =\\frac{3}{-4}= -\\frac34 .\n\\]\n\nTherefore the slope of the perpendicular bisector is the negative reciprocal:\n\n\\[\nm_{\\perp}= \\frac{4}{3}.\n\\]\n\nThrough \\(M\\) the line is \n\n\\[\ny-\\frac32 = \\frac{4}{3}\\bigl(x-(k+2)\\bigr).\n\\]\n\nMultiplying by \\(3\\) and simplifying gives the standard form \n\n\\[\n8x-6y-(8k+7)=0.\n\\]\n\n---\n\n### 2. Tangency condition \n\nThe distance from the centre \\(C=(25,20)\\) to this line must equal the radius \\(5\\) for the circle and the line to intersect in **exactly one point** (tangency).\n\n\\[\nd=\\frac{|\\,8\\cdot25-6\\cdot20-(8k+7)\\,|}{\\sqrt{8^{2}+(-6)^{2}}}\n =\\frac{|\\,200-120-8k-7\\,|}{10}\n =\\frac{|\\,73-8k\\,|}{10}.\n\\]\n\nSet \\(d=5\\):\n\n\\[\n\\frac{|73-8k|}{10}=5\\quad\\Longrightarrow\\quad |73-8k|=50.\n\\]\n\nHence \n\n\\[\n73-8k = 50\\quad\\text{or}\\quad73-8k = -50.\n\\]\n\nSolving,\n\n\\[\n\\begin{cases}\n73-8k=50 &\\Longrightarrow\\; k=\\dfrac{23}{8},\\\\[4pt]\n73-8k=-50&\\Longrightarrow\\; k=\\dfrac{123}{8}.\n\\end{cases}\n\\]\n\nBoth values give a line tangent to the circle, so the system has exactly one solution for each.\n\n---\n\n### 3. Sum of all possible \\(k\\)\n\n\\[\nk_{1}+k_{2}= \\frac{23}{8}+\\frac{123}{8}= \\frac{146}{8}= \\frac{73}{4}.\n\\]\n\nWrite \\(\\frac{73}{4}\\) as \\(\\frac{m}{n}\\) with \\(\\gcd(m,n)=1\\); here \\(m=73,\\ n=4\\).\n\n\\[\nm+n = 73+4 = 77.\n\\]\n\n\\[\n\\boxed{77}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For an 8\u2011digit number \n\\[\na_1a_2a_3a_4a_5a_6a_7a_8,\n\\qquad a_i\\in\\{1,2,\\dots ,8\\},\n\\]\nusing each digit once, we need it to be divisible by \\(22 = 2\\cdot 11\\).\n\n---\n\n### 1. Divisibility by 2 \n\nThe last digit \\(a_8\\) must be even. \nThe even digits are \\(\\{2,4,6,8\\}\\).\n\n---\n\n### 2. Divisibility by 11 \n\nFor an 8\u2011digit number the test is \n\n\\[\n(a_1+a_3+a_5+a_7)-(a_2+a_4+a_6+a_8)\\equiv0\\pmod{11}.\n\\]\n\nLet \n\n\\[\nS_o=a_1+a_3+a_5+a_7,\\qquad S_e=a_2+a_4+a_6+a_8.\n\\]\n\nSince the digits \\(1,\\ldots ,8\\) are used exactly once,\n\\(S_o+S_e=1+2+\\cdots+8=36\\). \nHence \n\n\\[\nS_o-S_e\\equiv0\\pmod{11}\n\\Longrightarrow 2S_o\\equiv36\\pmod{11}\n\\Longrightarrow 2S_o\\equiv3\\pmod{11}.\n\\]\n\nBecause \\(2^{-1}\\equiv6\\pmod{11}\\), \n\n\\[\nS_o\\equiv3\\cdot6\\equiv18\\equiv7\\pmod{11}.\n\\]\n\nThe smallest possible sum of four distinct digits is \\(1+2+3+4=10\\) and the largest is \\(5+6+7+8=26\\); the only value in this interval congruent to \\(7\\pmod{11}\\) is \\(18\\). \nThus we require \n\n\\[\nS_o=S_e=18.\n\\]\n\nSo the four digits placed in the odd positions must sum to \\(18\\).\n\n---\n\n### 3. Choosing the digits for odd positions \n\nWe need 4\u2011element subsets of \\(\\{1,\\dots ,8\\}\\) whose sum is \\(18\\).\n\nEnumerating them gives \n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are \\(m=8\\) such subsets. \nEach contains exactly two even digits and two odd digits (otherwise the sum cannot be 18).\n\n---\n\n### 4. Forming the numbers \n\nFor a given subset \\(O\\) (odd\u2011position digits):\n\n* Arrange the four digits of \\(O\\) among the odd positions \\((1,3,5,7)\\): \\(4! = 24\\) ways.\n* The complement \\(E\\) (the even\u2011position digits) also has exactly two evens.\n * Choose which even digit of \\(E\\) occupies the last position \\(a_8\\): \\(2\\) ways.\n * Arrange the remaining three digits of \\(E\\) in positions \\(2,4,6\\): \\(3! = 6\\) ways.\n\nThus for each subset \\(O\\)\n\n\\[\n\\text{#numbers}=24\\cdot(2\\cdot 6)=24\\cdot12=288 .\n\\]\n\nSince there are \\(8\\) possible subsets,\n\n\\[\nN = 8\\cdot288 = 2304 .\n\\]\n\n---\n\n### 5. Required difference \n\n\\[\nN-2025 = 2304-2025 = 279 .\n\\]\n\n\\[\n\\boxed{279}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the twelve letters be \n\n\\[\nAG\\)* (i.e. \\(Y\\in\\{H,I,J,K,L\\}\\)): \n\\(s_G=G\\). Condition (1) becomes \u201cno other pair has both letters\ngreater than \\(G\\)\u201d, because any such pair would have a minimum exceeding \\(G\\).\n\nAfter removing \\(G\\) and \\(Y\\) we have \n\n- six letters \\(G\\) : the remaining four of \\(\\{H,I,J,K,L\\}\\).\n\nWe must pair each of the four \u201chigh\u2019\u2019 letters with a distinct \u201clow\u2019\u2019\nletter; the two unused low letters are then paired together.\n\nNumber of such matchings \n\n\\[\n\\binom{6}{4}\\,4!=15\\cdot 24=360 .\n\\]\n\nThe total number of matchings on the ten remaining letters is \n\n\\[\n(10-1)!!=9\\cdot7\\cdot5\\cdot3\\cdot1=945 .\n\\]\n\nHence \n\n\\[\n\\Pr(\\text{condition }|\\,Y>G)=\\frac{360}{945}=\\frac{8}{21}.\n\\tag{2}\n\\]\n\nThere are five possibilities for \\(Y>G\\).\n\n--------------------------------------------------------------------\n*If \\(YY\\) (the letters greater than \\(Y\\) except the removed\n\\(G\\)).\n\nFor the condition to be possible we need at least as many letters\n\\(Y\\); this occurs only when \\(y=6\\), i.e. \\(Y=F\\).\n\nWhen \\(Y=F\\) the remaining letters are \n\n- five letters \\(F\\): \\(H,I,J,K,L\\).\n\nAgain every \u201chigh\u2019\u2019 letter must be paired with a distinct \u201clow\u2019\u2019 letter,\ngiving exactly \n\n\\[\n5! =120\n\\]\n\nacceptable matchings. Therefore \n\n\\[\n\\Pr(\\text{condition }|\\,Y=F)=\\frac{120}{945}= \\frac{8}{63},\n\\tag{3}\n\\]\n\nand for \\(Y=A,B,C,D,E\\) the probability is \\(0\\).\n\n--------------------------------------------------------------------\n### 4. Overall probability\n\nUsing that the partner of \\(G\\) is uniformly one of the other eleven\nletters,\n\n\\[\n\\begin{aligned}\n\\Pr(\\text{last word contains }G)\n&=\\frac1{11}\\Bigl(\n5\\cdot\\frac{8}{21}\n+\\frac{8}{63}\n+0+0+0+0+0\\Bigr)\\\\[2mm]\n&=\\frac1{11}\\Bigl(\\frac{40}{21}+\\frac{8}{63}\\Bigr)\n =\\frac1{11}\\Bigl(\\frac{120}{63}+\\frac{8}{63}\\Bigr)\\\\[2mm]\n&=\\frac{128}{693}.\n\\end{aligned}\n\\]\n\nThe fraction \\(\\frac{128}{693}\\) is already in lowest terms\n(\\(\\gcd(128,693)=1\\)).\n\nThus \n\n\\[\nm=128,\\qquad n=693,\\qquad m+n=821.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{821}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nC:\\;y=x^{2}-4\n\\]\n\nbe the given parabola. \nRotate \\(C\\) \\(60^{\\circ}\\) counter\u2011clockwise about the origin. \nIf a point \\((x,y)\\) lies on both \\(C\\) and its rotated image, then rotating \\((x,y)\\) **clockwise** by \\(60^{\\circ}\\) must again land on \\(C\\).\n\n---\n\n### 1. The rotation equations \n\nFor a clockwise rotation of \\(60^{\\circ}\\),\n\n\\[\n\\begin{aligned}\nx'&=x\\cos60^{\\circ}+y\\sin60^{\\circ}= \\tfrac12 x+\\tfrac{\\sqrt3}{2}y,\\\\[2mm]\ny'&=-x\\sin60^{\\circ}+y\\cos60^{\\circ}= -\\tfrac{\\sqrt3}{2}x+\\tfrac12 y .\n\\end{aligned}\n\\]\n\nThe condition \u201cthe rotated point lies on \\(C\\)\u201d is\n\n\\[\ny'=(x')^{2}-4 .\n\\]\n\nSubstituting \\(y=x^{2}-4\\) (since \\((x,y)\\in C\\)) gives a single equation in \\(x\\).\n\n---\n\n### 2. Obtain the equation in \\(x\\)\n\nPut \\(\\displaystyle s=\\frac{\\sqrt3}{2},\\ c=\\frac12\\). \nThen\n\n\\[\n\\begin{aligned}\nx' &=c\\,x+s\\,(x^{2}-4)= s x^{2}+c x-4s,\\\\[1mm]\ny' &=-s\\,x+c\\,(x^{2}-4)=c x^{2}-s x-4c .\n\\end{aligned}\n\\]\n\nThe condition \\(y'= (x')^{2}-4\\) becomes\n\n\\[\nc x^{2}-s x-4c =\\bigl(s x^{2}+c x-4s\\bigr)^{2}-4 .\n\\]\n\nInsert \\(c=\\tfrac12,\\ s=\\tfrac{\\sqrt3}{2}\\) and clear denominators (multiply by \\(4\\)):\n\n\\[\n2x^{2}-2\\sqrt3\\,x-8 = \\bigl(\\sqrt3\\,x^{2}+x-4\\sqrt3\\bigr)^{2}-4 .\n\\]\n\nAfter simplifying we obtain the quartic\n\n\\[\n3x^{4}+2\\sqrt3\\,x^{3}-25x^{2}-6\\sqrt3\\,x+40=0 .\n\\]\n\n---\n\n### 3. Factor the quartic\n\nTrying a factorisation \\((3x^{2}+Bx+C)(x^{2}+Ex+F)\\) with\n\\(B,E\\) multiples of \\(\\sqrt3\\), we find\n\n\\[\n\\boxed{(3x^{2}-\\sqrt3\\,x-10)(x^{2}+\\sqrt3\\,x-4)=0}.\n\\]\n\nHence the possible \\(x\\)-coordinates are the roots of\n\n\\[\n\\begin{cases}\n3x^{2}-\\sqrt3\\,x-10=0,\\\\[1mm]\nx^{2}+\\sqrt3\\,x-4=0 .\n\\end{cases}\n\\]\n\nSolving:\n\n\\[\n\\begin{aligned}\n3x^{2}-\\sqrt3\\,x-10=0 &\\Longrightarrow \nx=\\dfrac{\\sqrt3\\pm\\sqrt{123}}6\\;( \\approx 2.14,\\ -1.56),\\\\[2mm]\nx^{2}+\\sqrt3\\,x-4=0 &\\Longrightarrow \nx=\\dfrac{-\\sqrt3\\pm\\sqrt{19}}2\\;( \\approx 1.31,\\ -3.05).\n\\end{aligned}\n\\]\n\n---\n\n### 4. Identify the point in the fourth quadrant \n\nThe fourth quadrant requires \\(x>0\\) and \\(y<0\\). \nOnly \n\n\\[\nx=\\frac{-\\sqrt3+\\sqrt{19}}2 \\approx 1.31\n\\]\n\nsatisfies these conditions (the other positive root gives \\(x>2\\) and \\(y>0\\)). \n\nThus the intersection point in the fourth quadrant is\n\n\\[\n\\bigl(x,\\;y\\bigr)=\\left(\\frac{-\\sqrt3+\\sqrt{19}}2,\\;\n\\left(\\frac{-\\sqrt3+\\sqrt{19}}2\\right)^{\\!2}-4\\right).\n\\]\n\nCompute \\(y\\):\n\n\\[\n\\begin{aligned}\ny&=\\frac{(-\\sqrt3+\\sqrt{19})^{2}}{4}-4\n =\\frac{3+19-2\\sqrt{57}}{4}-4\n =\\frac{22-2\\sqrt{57}}{4}-4 \\\\\n &=\\frac{11}{2}-\\frac{\\sqrt{57}}2-4\n =\\frac{3-\\sqrt{57}}{2}.\n\\end{aligned}\n\\]\n\nHence \n\n\\[\ny=\\frac{\\,3-\\sqrt{57}\\,}{2}\n\\]\n\nwhich matches the required form \\(\\displaystyle \\frac{a-\\sqrt b}{c}\\) with \n\n\\[\na=3,\\qquad b=57,\\qquad c=2.\n\\]\n\n\\(a\\) and \\(c\\) are relatively prime, as required.\n\n---\n\n### 5. Compute \\(a+b+c\\)\n\n\\[\na+b+c = 3+57+2 = 62.\n\\]\n\n\\[\n\\boxed{62}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution Sketch**\n\n1. **Placing the pentagon.** \n Put \\(B=(0,0)\\) and let \\(BC\\) be the segment on the \\(x\\)-axis, so \\(C=(7,0)\\). \n Since \\(\\angle B=60^{\\circ}\\) and \\(AB=14\\),\n\n\\[\nA=\\bigl(7,\\;7\\sqrt3 \\bigr).\n\\]\n\n Using the law of cosines in \\(\\triangle ABC\\) we obtain \\(AC=7\\sqrt3\\); thus\n\\(\\triangle ABC\\) is a \\(30\\!-\\!60\\!-\\!90\\) right triangle with right angle at \\(C\\).\n\n In the same way the data at \\(E\\) give a similar \\(30\\!-\\!60\\!-\\!90\\) triangle\n\\(\\triangle AED\\) with right angle at \\(D\\), giving \n\n\\[\nAE=26,\\qquad DE=13,\\qquad AD=13\\sqrt3 .\n\\]\n\n Solving the two circles \\((A,13\\sqrt3)\\) and \\((C,24)\\) yields \n\n\\[\nD=\\Bigl(\\frac{205}{7},\\;\\frac{36\\sqrt3}{7}\\Bigr),\\qquad\nE=\\Bigl(\\frac{218}{7},\\;\\frac{88\\sqrt3}{7}\\Bigr).\n\\]\n\n2. **A useful line.** \n Points \\(B\\) and \\(E\\) are joined by the segment \\(BE\\) of length \n\n\\[\nBE=\\frac{266}{7}=38 .\n\\]\n\n For any point \\(X\\) on the line \\(BE\\) we have, by the triangle inequality,\n\\[\nXB+XE=BE=38 .\n\\]\n\n Hence for \\(X\\in BE\\)\n\n\\[\nf(X)=XB+XE+AX+CX+DX=38+AX+CX+DX .\n\\]\n\n Therefore the problem reduces to minimizing \n\n\\[\ng(X)=AX+CX+DX\\qquad (X\\in BE).\n\\]\n\n3. **Parameterising the line.** \n Write \\(X\\) as \n\n\\[\nX(t)=\\Bigl(\\frac{218}{7}t,\\;\\frac{88\\sqrt3}{7}t\\Bigr),\\qquad 0\\le t\\le 1 .\n\\]\n\n Direct computation gives \n\n\\[\n\\begin{aligned}\nAX^2&=\\frac{4\\cdot79-28t+1444t^{2}}{9},\\\\[2mm]\nCX^2&=\\frac{577-158t+1444t^{2}}{9},\\\\[2mm]\nDX^2&=\\frac{3241-1106t+1444t^{2}}{9}.\n\\end{aligned}\n\\]\n\n The function \\(g(t)=\\sqrt{AX^2}+\\sqrt{CX^2}+\\sqrt{DX^2}\\) is convex,\nso its minimum occurs where \\(g'(t)=0\\).\n\n4. **Finding the minimizing \\(t\\).** \n Using the derivative formula for a distance,\n\\( \\dfrac{d}{dt}\\sqrt{at^{2}+bt+c}=\n \\dfrac{2at+b}{2\\sqrt{at^{2}+bt+c}}\\),\nthe condition \\(g'(t)=0\\) becomes\n\n\\[\n\\frac{1444t-482}{\\sqrt{4\\cdot79-28t+1444t^{2}}}\n+\\frac{1444t-218}{\\sqrt{577-158t+1444t^{2}}}\n+\\frac{1444t-1106}{\\sqrt{3241-1106t+1444t^{2}}}=0 .\n\\]\n\n Substituting \\(t=\\dfrac13\\) makes each numerator a multiple of\n\\(2,\\,790,\\,-1874\\) respectively, and a short computation shows the\nleft\u2011hand side to be zero. Because of convexity, \\(t=\\dfrac13\\) gives the\nglobal minimum.\n\n5. **The minimum value.** \n For \\(t=\\dfrac13\\),\n\n\\[\n\\begin{aligned}\nAX&=\\frac{2\\sqrt{79}}{3},\\\\[1mm]\nCX&=\\frac{\\sqrt{577}}{3},\\\\[1mm]\nDX&=\\frac{\\sqrt{3241}}{3}.\n\\end{aligned}\n\\]\n\n A direct squaring shows\n\n\\[\n2\\sqrt{79}+ \\sqrt{577}+ \\sqrt{3241}=57\\sqrt3 ,\n\\]\n\n therefore \n\n\\[\ng_{\\min}= \\frac{57\\sqrt3}{3}=19\\sqrt3 .\n\\]\n\n Adding the constant part \\(XB+XE=38\\) gives the least possible value of\n\\(f\\):\n\n\\[\nf_{\\min}=38+19\\sqrt3 .\n\\]\n\n6. **Answer.** \n The expression is of the form \\(m+n\\sqrt p\\) with\n\\(m=38,\\;n=19,\\;p=3\\). Hence\n\n\\[\nm+n+p = 38+19+3 = 60 .\n\\]\n\n\\[\n\\boxed{60}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution**\n\nLet \n\n\\[\nM=3^{7}=2187 ,\\qquad L=3^{6}=729 .\n\\]\n\nAll ordered triples \\((a,b,c)\\) satisfy \n\n\\[\nN=\\#\\{1\\le a,b,c\\le L\\;|\\;a^{3}+b^{3}+c^{3}\\equiv 0\\pmod{M}\\}.\n\\]\n\n--------------------------------------------------------------------\n### 1. The cubes modulo \\(M\\)\n\nWrite a positive integer \\(a\\) as \n\n\\[\na=3^{v}\\,u ,\\qquad v=v_{3}(a)\\in\\{0,1,2,3,4,5,6\\},\n\\qquad 3\\nmid u .\n\\]\n\n*If \\(v\\ge 3\\) then \\(a^{3}\\equiv0\\pmod{M}\\). \nIf \\(v=2\\) then \\(a^{3}\\equiv729\\,u\\pmod{M}\\) and, because\n\\(u\\equiv\\pm1\\pmod3\\),\n\n\\[\na^{3}\\equiv\\begin{cases}\n729 & u\\equiv1\\pmod3,\\\\[2mm]\n1458& u\\equiv2\\pmod3 .\n\\end{cases}\n\\]\n\n*If \\(v=1\\) then \\(a=3u\\;(3\\nmid u\\le 243)\\) and \n\n\\[\na^{3}\\equiv27\\,u^{3}\\pmod{M}.\n\\]\n\nSince \\(27\\cdot81=M\\), only \\(u^{3}\\pmod{81}\\) matters. The\nset of cubic residues modulo \\(81\\) among the units is \n\n\\[\nR_{4}=\\{x\\in\\mathbb Z/81\\;|\\;x\\equiv\\pm1\\pmod9\\},\n\\qquad |R_{4}|=18 .\n\\]\n\nEach element of \\(R_{4}\\) occurs exactly three times among the\n\\(162\\) numbers \\(u\\) (the three residue\u2011classes modulo \\(81\\));\nhence each value \\(27r\\;(r\\in R_{4})\\) occurs \\(9\\) times.\n\n*If \\(v=0\\) (i.e. \\(3\\nmid a\\)), then \\(a^{3}\\) runs through the\ncubic residues among the units modulo \\(M\\)\n\n\\[\nR_{7}=\\{x\\in\\mathbb Z/M\\;|\\;x\\equiv\\pm1\\pmod9\\},\n\\qquad |R_{7}|=486 ,\n\\]\n\neach occurring **once**.\n\nSummarising, the multiset of residues \\(\\{a^{3}\\pmod M\\}\\) is\n\n| residue type | number of residues | multiplicity |\n|---|---|---|\n| \\(x\\in R_{7}\\) | \\(486\\) | \\(1\\) |\n| \\(27r,\\,r\\in R_{4}\\) | \\(18\\) | \\(9\\) |\n| \\(729\\) | \\(1\\) | \\(27\\) |\n| \\(1458\\) | \\(1\\) | \\(27\\) |\n| \\(0\\) | \\(1\\) | \\(27\\) |\n| total | \\(729\\) | \u2013 |\n\n--------------------------------------------------------------------\n### 2. Fourier representation\n\nPut \n\n\\[\n\\zeta =e^{2\\pi i/M}, \\qquad \nS(k)=\\sum_{a=1}^{L}\\zeta^{k a^{3}}\n =\\sum_{x}f(x)\\,\\zeta^{k x},\n\\]\n\nwhere \\(f(x)\\) is the multiplicity of the residue \\(x\\) listed above.\nOrthogonality of characters gives \n\n\\[\nN=\\frac1{M}\\sum_{k=0}^{M-1}S(k)^{3}\\tag{1}\n\\]\n\nand we have to evaluate the sum on the right.\n\n--------------------------------------------------------------------\n### 3. Explicit form of \\(S(k)\\)\n\nWrite \\(k=3^{v}t\\;(3\\nmid t)\\). \nThe three kinds of contributions are\n\n* from \\(R_{7}\\) (cubic residues modulo \\(M\\)) \n\n\\[\nS_{7}(k)=\\sum_{x\\in R_{7}}\\zeta^{k x}\n =\\begin{cases}\n 486\\cos\\frac{2\\pi t}{9},&3^{5}\\mid k,\\\\\n 0,&\\text{otherwise}.\n \\end{cases}\n\\]\n\n* from the residues \\(27r\\) (\\(r\\in R_{4}\\)) \n\n\\[\n9S_{4}(k)=9\\sum_{r\\in R_{4}}\\zeta^{27k r}\n =\\begin{cases}\n 162\\cos\\frac{2\\pi t}{9},&9\\mid k,\\\\\n 0,&\\text{otherwise}.\n \\end{cases}\n\\]\n\n* from the three \u201cfixed\u2019\u2019 residues \\(0,\\,729,\\,1458\\) \n\n\\[\nS_{2}(k)+S_{3}(k)=27\\bigl(\\zeta^{729k}+\\zeta^{1458k}+1\\bigr)\n =\\begin{cases}\n 81,&3\\mid k,\\\\[2mm]\n 0,&3\\nmid k .\n \\end{cases}\n\\]\n\nHence\n\n\\[\nS(k)=S_{7}(k)+9S_{4}(k)+\n\\begin{cases}\n81,&3\\mid k,\\\\\n0,&3\\nmid k .\n\\end{cases}\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 4. Values of \\(S(k)\\)\n\nAccording to the 3\u2011adic valuation \\(v=v_{3}(k)\\) we obtain\n\n| \\(v\\) | condition on \\(k\\) | \\(S(k)\\) |\n|---|---|---|\n| \\(0\\) | \\(3\\nmid k\\) | \\(0\\) |\n| \\(1\\) | \\(3\\mid k,\\;9\\nmid k\\) | \\(81\\) |\n| \\(2\\) | \\(9\\mid k,\\;27\\nmid k\\) | \\(81\\bigl(1+2\\cos\\frac{2\\pi u}{9}\\bigr)\\) \\(\\;(u=k/9\\bmod9\\neq0,3,6)\\) |\n| \\(3\\) | \\(27\\mid k,\\;81\\nmid k\\) | \\(0\\) |\n| \\(4\\) | \\(81\\mid k,\\;243\\nmid k\\) | \\(243\\) |\n| \\(5\\) | \\(243\\mid k,\\;729\\nmid k\\) | \\(243\\bigl(1+2\\cos\\frac{2\\pi t}{9}\\bigr)\\) \\(\\;(t=k/243\\bmod9\\neq0,3,6)\\) |\n| \\(6\\) | \\(729\\mid k\\) | \\(0\\) |\n| \\(k=0\\) | \u2013 | \\(S(0)=729\\) |\n\nThe numbers of \\(k\\) having each valuation are \n\n\\[\n\\begin{aligned}\n&v=0:1458,\\quad v=1:486,\\quad v=2:162,\\\\\n&v=3:54,\\quad v=4:18,\\quad v=5:6,\\quad v=6:2 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 5. Summation of \\(S(k)^{3}\\)\n\nDenote \n\n\\[\nC=\\sum_{u\\in\\{1,2,4,5,7,8\\}}\\bigl(1+2\\cos\\tfrac{2\\pi u}{9}\\bigr)^{3}.\n\\]\n\nUsing the identity \n\n\\[\n\\sum_{u\\in\\{1,2,4,5,7,8\\}}\\bigl(1+2\\cos\\tfrac{2\\pi u}{9}\\bigr)^{3}=36,\n\\]\n\n(which follows from expanding \\((1+z^{u}+z^{-u})^{3}\\) and summing over\n\\(u\\) with \\(z=e^{2\\pi i/9}\\)), we obtain\n\n\\[\n\\begin{aligned}\n\\sum_{k}S(k)^{3}\n&= 486\\cdot81^{3}\n +162\\cdot81^{3}\n +18\\cdot243^{3}\n +6\\cdot243^{3} \\\\\n&= 486\\cdot531\\,441\n +162\\cdot531\\,441\n +18\\cdot14\\,348\\,907\n +6\\cdot14\\,348\\,907 \\\\\n&=5\\cdot3^{18}=5\\cdot387\\,420\\,489\n =1\\,937\\,102\\,445 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 6. The number \\(N\\)\n\nFrom (1),\n\n\\[\nN=\\frac{1}{3^{7}}\\sum_{k}S(k)^{3}\n =\\frac{5\\cdot3^{18}}{3^{7}}\n =5\\cdot3^{11}=5\\cdot177\\,147=885\\,735 .\n\\]\n\n--------------------------------------------------------------------\n### 7. Remainder modulo \\(1000\\)\n\n\\[\n885\\,735 \\equiv 735 \\pmod{1000}.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{735}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nf(x)=\\frac{(x-18)(x-72)(x-98)(x-k)}{x}= \\frac{N(x)}{x},\n\\qquad N(x)=(x-18)(x-72)(x-98)(x-k)\n\\]\n\nfor \\(x>0\\) and a positive parameter \\(k\\).\n\n--------------------------------------------------------------------\n### 1. Critical points\n\n\\[\nf'(x)=\\frac{xN'(x)-N(x)}{x^{2}},\\qquad \nf'(x)=0\\Longleftrightarrow H(x):=xN'(x)-N(x)=0 .\n\\]\n\nWrite \n\n\\[\nN(x)=x^{4}-S_{1}x^{3}+S_{2}x^{2}-S_{3}x+S_{4},\n\\]\n\nwhere \n\n\\[\n\\begin{aligned}\nS_{1}&=18+72+98+k = 188+k,\\\\\nS_{2}&=18\\cdot72+18\\cdot98+72\\cdot98+ (18+72+98)k =10116+188k,\\\\\nS_{3}&=18\\cdot72\\cdot98+(18\\cdot72+18\\cdot98+72\\cdot98)k =127008+10116k,\\\\\nS_{4}&=18\\cdot72\\cdot98\\cdot k =127008\\,k .\n\\end{aligned}\n\\]\n\nSince \n\n\\[\nN'(x)=4x^{3}-3S_{1}x^{2}+2S_{2}x-S_{3},\n\\]\n\nwe obtain \n\n\\[\n\\begin{aligned}\nH(x)&=xN'(x)-N(x) \\\\\n &=3x^{4}-2S_{1}x^{3}+S_{2}x^{2}-S_{4}\\\\\n &=3x^{4}-(376+2k)x^{3}+(10116+188k)x^{2}-127008k .\n\\end{aligned}\n\\]\n\nThe three positive roots of \\(H\\) are the two minima of \\(f\\) (in the intervals where\n\\(f<0\\)) and one interior maximum.\n\n--------------------------------------------------------------------\n### 2. When are the two minima equal?\n\nAt a minimum \\(x_{0}\\),\n\n\\[\nf(x_{0}) = \\frac{N(x_{0})}{x_{0}} = N'(x_{0})=:m .\n\\]\n\nThus the equation \\(N(x)=mx\\) has a **double** root at each minimum.\nIf the global minimum is attained at exactly two points, then\n\n\\[\nN(x)-mx=(x-\\alpha)^{2}(x-\\gamma)^{2},\n\\qquad\\alpha\\neq\\gamma>0 .\n\\]\n\nExpanding both sides and comparing coefficients gives\n\n\\[\n\\begin{cases}\n\\alpha+\\gamma =\\displaystyle\\frac{188+k}{2},\\\\[4pt]\n\\alpha\\gamma = -\\dfrac{k^{2}}{8}+47k+640,\\\\[4pt]\n(\\alpha\\gamma)^{2}=S_{4}=127008k .\n\\end{cases}\n\\]\n\nEliminating \\(\\alpha,\\gamma\\) yields a single equation for \\(k\\):\n\n\\[\n\\Bigl(-\\frac{k^{2}}{8}+47k+640\\Bigr)^{2}=127008k .\n\\]\n\nMultiplying by \\(64\\),\n\n\\[\n(k^{2}-376k-5120)^{2}=8\\,128\\,512\\,k,\n\\]\n\nwhich simplifies to the quartic\n\n\\[\nk^{4}-752k^{3}+131136k^{2}-4\\,278\\,272k+26\\,214\\,400=0 .\n\\]\n\n--------------------------------------------------------------------\n### 3. Solving the quartic\n\nFactoring gives \n\n\\[\n(k-8)(k-32)(k^{2}-712k+102400)=0,\n\\]\n\nso the four real solutions are \n\n\\[\nk=8,\\qquad k=32,\\qquad k=200,\\qquad k=512 .\n\\]\n\n--------------------------------------------------------------------\n### 4. Selecting the admissible \\(k\\)\n\nFor the two minima to be **positive**, the product \\(\\alpha\\gamma\\) must be positive:\n\n\\[\n\\alpha\\gamma = -\\frac{k^{2}}{8}+47k+640 >0 .\n\\]\n\nEvaluating this expression:\n\n\\[\n\\begin{array}{c|c}\nk & \\alpha\\gamma\\\\ \\hline\n8 & 1008>0\\\\\n32 & 2016>0\\\\\n200 & 5040>0\\\\\n512 & -8064<0\n\\end{array}\n\\]\n\nThus \\(k=512\\) gives one root \\(\\alpha\\) negative and cannot produce two minima on the\npositive axis. The admissible values are \n\n\\[\nk=8,\\;32,\\;200 .\n\\]\n\n--------------------------------------------------------------------\n### 5. Sum of the three values\n\n\\[\n8+32+200 = 240 .\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{240}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz0 & >0 & x0 & <0 & y<\\min\\{x,z\\} & \\text{unbounded}\\\\\n<0 & >0 & \\max\\{x,z\\}y>z & \\text{impossible (sum }75)\n\\end{array}\n\\]\n\nOnly the first case can give a finite region. \nWith \\(x+y+z=75\\) and the inequalities\n\n\\[\nx>-1,\\qquad x-1,\\\\\nx0\\) is when \\(m=0\\) (i.e. \\(k=1\\)) and \\(\\delta=1\\),\nwhich occurs exactly when \n\n\\[\nv=r\\bmod 10\\ge5 .\n\\]\n\nHence **the greedy algorithm fails precisely when**\n\\[\nN\\ge 25\\quad\\text{and}\\quad (N\\bmod 25)\\bmod 10\\ge5.\n\\]\n\nEquivalently, the \u201cbad\u2019\u2019 remainders (after taking as many quarters as possible) are \n\n\\[\nr\\in\\{5,6,7,8,9,15,16,17,18,19\\}.\n\\]\n\nIn each block of 25 consecutive integers there are 10 such remainders.\n\n---\n\n### 3. Counting the failures between 1 and 1000\n\nThe interval \\([25,1000]\\) contains \\(1000-24=976\\) integers.\nFrom 25 onward the numbers are grouped into blocks \n\n\\[\n25\\!-\\!49,\\;50\\!-\\!74,\\;\\dots,\\;975\\!-\\!999 .\n\\]\n\nThere are \\(39\\) full blocks (the block \\(25\\!-\\!49\\) up to \\(975\\!-\\!999\\)).\nEach block contributes exactly \\(10\\) failures, so\n\n\\[\n\\#\\text{failures}=39\\times10=390 .\n\\]\n\nNumbers \\(1\\) through \\(24\\) are never failures (they contain no quarters).\n\nThus the number of successes is \n\n\\[\n1000-390=610 .\n\\]\n\n---\n\n\\[\n\\boxed{610}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ S $ be the set of vertices of a regular 24-gon. Find the number of ways to draw 12 segments of equal lengths so that each vertex in $ S $ is an endpoint of exactly one of the 12 segments.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "In a regular \\(24\\)-gon label the vertices \\(0,1,\\dots ,23\\) clockwise. \nIf two vertices differ by \\(k\\) (mod \\(24\\)), the chord joining them has length that depends only on \n\n\\[\ns=\\min (k,24-k)\\qquad (1\\le s\\le 12).\n\\]\n\nThus there are \\(12\\) possible lengths, one for each \\(s=1,2,\\dots ,12\\).\n\n--------------------------------------------------------------------\n### 1. The graph of chords of a fixed length \n\nFix a value \\(s\\). The set of all chords of that length is the edge\u2011set of the **circulant graph**\n\\[\nG_s=\\{\\,\\{i,i+s\\}\\mid i=0,1,\\dots ,23\\,\\},\n\\]\nwhere the addition is taken modulo \\(24\\).\n\nLet \\(g=\\gcd(s,24)\\). Adding \\(s\\) repeatedly splits the vertex set into \\(g\\) cycles,\neach of length \n\n\\[\nL=\\frac{24}{g}.\n\\]\n\nSo \\(G_s\\) is a disjoint union of \\(g\\) cycles \\(C_L\\).\n\n--------------------------------------------------------------------\n### 2. When can a perfect matching exist?\n\nA perfect matching (a set of \\(12\\) disjoint edges covering all vertices) can exist only if\nevery component cycle has even length, i.e. \\(L\\) is even.\nSince \\(L=24/g\\), this is equivalent to \\(g\\mid 12\\).\n\n*If \\(g\\mid 12\\) and \\(L\\ge 4\\)*, each even cycle \\(C_L\\) has exactly **2** perfect\nmatchings (choose alternating edges). \n*If \\(L=2\\)* (the case \\(s=12\\)), each component is a single edge and contributes only **1** matching.\n\nThe only step for which \\(g\\nmid 12\\) is \\(s=8\\) (here \\(g=8\\) and the components are 3\u2011cycles),\nso no perfect matching exists for \\(s=8\\).\n\n--------------------------------------------------------------------\n### 3. Number of matchings for each possible length\n\n\\[\n\\begin{array}{c|c|c|c}\ns & g=\\gcd(s,24) & L=24/g & \\#\\text{ matchings}\\\\ \\hline\n1 &1 &24 &2\\\\\n2 &2 &12 &2^{2}=4\\\\\n3 &3 & 8 &2^{3}=8\\\\\n4 &4 & 6 &2^{4}=16\\\\\n5 &1 &24 &2\\\\\n6 &6 & 4 &2^{6}=64\\\\\n7 &1 &24 &2\\\\\n8 &8 & 3 &0\\\\\n9 &3 & 8 &2^{3}=8\\\\\n10&2 &12 &2^{2}=4\\\\\n11&1 &24 &2\\\\\n12&12& 2 &1\n\\end{array}\n\\]\n\n--------------------------------------------------------------------\n### 4. Total number of ways\n\nAdd the numbers for all admissible lengths (all \\(s\\) except \\(s=8\\)):\n\n\\[\n\\begin{aligned}\n\\text{Total}&=2+4+8+16+2+64+2+8+4+2+1\\\\\n&=113 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{113}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSixteen chairs are arranged in a row. Eight people each select a chair in which to sit so that no person sits next to two other people. Let $ N $ be the number of subsets of 16 chairs that could be selected. Find the remainder when $ N $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The chairs can be represented by a binary string of length\u202f16, where a \\(1\\) means the chair is taken. \nWe need strings with exactly eight\u202f\\(1\\)\u2019s and with **no three consecutive \\(1\\)\u2019s** (otherwise the middle person would sit next to two others).\n\n---\n\n### Counting by blocks\n\nA valid string consists of blocks of consecutive \\(1\\)\u2019s of length\u202f1 or\u202f2, separated by at least one \\(0\\).\n\nLet \n\n* \\(t\\) = number of blocks of length\u202f2, \n* \\(b\\) = total number of blocks. \n\nSince each block contributes at least one \\(1\\),\n\n\\[\n\\underbrace{(b-t)}_{\\text{blocks of length 1}}+2t=8\\quad\\Longrightarrow\\quad b+ t=8,\\; b=8-t .\n\\]\n\nSo \\(t=0,1,2,3,4\\).\n\nFor a fixed \\(t\\):\n* Choose which of the \\(b\\) blocks are the length\u20112 ones: \\(\\displaystyle\\binom{b}{t}=\\binom{8-t}{t}\\).\n* There are \\(8-8=8\\) empty chairs; let \\(z=8\\). \n The \\(b+1\\) gaps (including the two ends) must contain these zeros, with at least one zero in each interior gap. \n After placing one zero in each of the \\(b-1\\) interior gaps, we have \\(z-(b-1)=9-b\\) zeros left to distribute freely among the \\(b+1\\) gaps. \n The number of ways is \\(\\displaystyle\\binom{9-b}{b}=\\binom{9}{b}\\).\n\nHence for each \\(t\\),\n\n\\[\nN_t=\\binom{8-t}{t}\\binom{9}{8-t}.\n\\]\n\nSumming over \\(t=0\\) to \\(4\\):\n\n\\[\n\\begin{aligned}\nN &=\\binom{8}{0}\\binom{9}{8}\n +\\binom{7}{1}\\binom{9}{7}\n +\\binom{6}{2}\\binom{9}{6}\n +\\binom{5}{3}\\binom{9}{5}\n +\\binom{4}{4}\\binom{9}{4} \\\\[2mm]\n &=1\\cdot9+7\\cdot36+15\\cdot84+10\\cdot126+1\\cdot126\\\\\n &=9+252+1260+1260+126\\\\\n &=2907 .\n\\end{aligned}\n\\]\n\n---\n\n### Modulo\u202f1000\n\n\\[\n2907 \\equiv 907 \\pmod{1000}.\n\\]\n\n---\n\n\\[\n\\boxed{907}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ A_1A_2 \\ldots A_{11} $ be an 11-sided non-convex simple polygon with the following properties:\n* The area of $ A_iA_1A_{i+1} $ is 1 for each $ 2 \\leq i \\leq 10 $,\n* $ \\cos(\\angle A_iA_1A_{i+1}) = \\frac{12}{13} $ for each $ 2 \\leq i \\leq 10 $,\n* The perimeter of $ A_1A_2 \\ldots A_{11} $ is 20.\nIf $ A_1A_2 + A_1A_{11} $ can be expressed as $ \\frac{m\\sqrt{n} - p}{q} $ for positive integers $ m, n, p, q $ with $ n $ squarefree and no prime divides all of $ m, p, q$, find $ m + n + p + q $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nr_i=A_1A_i\\qquad (i=2,\\dots ,11),\\qquad \n\\theta=\\angle A_iA_1A_{i+1}.\n\\]\n\nFor each \\(i=2,\\dots ,10\\)\n\n\\[\n\\cos\\theta=\\frac{12}{13},\\qquad \n\\text{Area}(A_iA_1A_{i+1})=\\frac12 r_i r_{i+1}\\sin\\theta =1 .\n\\]\n\nSince \\(\\sin\\theta=\\sqrt{1-\\cos ^2\\theta}=5/13\\),\n\n\\[\nr_i r_{i+1}= \\frac{2}{\\sin\\theta}= \\frac{2}{5/13}= \\frac{26}{5}\n=:k\\quad\\text{(constant)}.\n\\]\n\nThus \n\n\\[\nr_{i+1}= \\frac{k}{r_i},\\qquad\\text{so}\\qquad r_{i+2}=r_i .\n\\]\n\nHence the distances from \\(A_1\\) alternate:\n\n\\[\nr_2=r_4=r_6=r_8=r_{10}=a,\\qquad \nr_3=r_5=r_7=r_9=r_{11}=b,\n\\]\n\nwith \n\n\\[\nab=k=\\frac{26}{5}.\n\\]\n\n--------------------------------------------------------------------\n### Length of a side \\(A_iA_{i+1}\\)\n\nFor any consecutive pair \\((a,b)\\),\n\n\\[\nA_iA_{i+1}=d=\\sqrt{a^2+b^2-2ab\\cos\\theta}\n =\\sqrt{a^2+b^2-\\frac{24}{13}ab}.\n\\]\n\nLet \n\n\\[\nx=a+b,\\qquad ab=k .\n\\]\n\nBecause \\(a^2+b^2=(a+b)^2-2ab=x^2-2k\\),\n\n\\[\nd=\\sqrt{x^2-2k-\\frac{24}{13}k}\n =\\sqrt{x^2-\\frac{50}{13}\\,k}.\n\\]\n\nSince \\(k=\\dfrac{26}{5}\\),\n\n\\[\n\\frac{50}{13}k=\\frac{50}{13}\\cdot\\frac{26}{5}=20,\n\\qquad\\boxed{d=\\sqrt{x^2-20}} .\n\\]\n\n--------------------------------------------------------------------\n### Using the perimeter\n\nThe perimeter of the 11\u2011gon is\n\n\\[\na+b+9d = x+9\\sqrt{x^2-20}=20 .\n\\]\n\nSolve for \\(x\\) (note \\(x>0\\) and \\(\\sqrt{x^2-20}\\ge0\\)):\n\n\\[\n9\\sqrt{x^2-20}=20-x\\quad\\Longrightarrow\\quad\n81(x^2-20)=(20-x)^2 .\n\\]\n\nThis gives \n\n\\[\n80x^2+40x-2020=0\\;\\Longrightarrow\\;4x^2+2x-101=0.\n\\]\n\nHence \n\n\\[\nx=\\frac{-2\\pm\\sqrt{4+1616}}{8}\n =\\frac{-2\\pm18\\sqrt5}{8}\n =\\frac{-1\\pm9\\sqrt5}{4}.\n\\]\n\nOnly the positive root satisfies the constraints, so \n\n\\[\n\\boxed{x=a+b=\\frac{9\\sqrt5-1}{4}} .\n\\]\n\nThus\n\n\\[\nA_1A_2+A_1A_{11}=a+b=\\frac{9\\sqrt5-1}{4}\n =\\frac{m\\sqrt n-p}{q},\n\\]\n\nwith \\(m=9,\\;n=5,\\;p=1,\\;q=4\\).\n\nAll conditions on \\(m,n,p,q\\) are met, and\n\n\\[\nm+n+p+q=9+5+1+4=19.\n\\]\n\n\\[\n\\boxed{19}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the sum of all integer bases $b>9$ for which $17_{b}$ is a divisor of $97_{b}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "In base \\(b\\) the numbers are \n\n\\[\n17_{b}=1\\cdot b+7=b+7, \\qquad 97_{b}=9\\cdot b+7=9b+7 .\n\\]\n\nWe need \\(b+7\\) to divide \\(9b+7\\).\n\n---\n\n### Find the divisibility condition \n\n\\[\n9b+7 = 9(b+7)-56 .\n\\]\n\nThus the remainder when \\(9b+7\\) is divided by \\(b+7\\) is \\(-56\\). \nHence \\(b+7\\) must divide \\(56\\):\n\n\\[\nb+7\\mid 56 .\n\\]\n\n---\n\n### Possible values of \\(b\\)\n\nThe positive divisors of \\(56\\) are \n\n\\[\n1,\\;2,\\;4,\\;7,\\;8,\\;14,\\;28,\\;56 .\n\\]\n\nBecause the base must satisfy \\(b>9\\), we have \\(b+7>16\\). \nThe divisors larger than \\(16\\) are \\(28\\) and \\(56\\).\n\n\\[\n\\begin{aligned}\nb+7&=28 \\quad\\Longrightarrow\\quad b=21,\\\\[2pt]\nb+7&=56 \\quad\\Longrightarrow\\quad b=49 .\n\\end{aligned}\n\\]\n\nBoth bases are greater than \\(9\\) and allow the digits \\(1,7,9\\).\n\n---\n\n### Sum of all such bases \n\n\\[\n21+49 = 70.\n\\]\n\n\\[\n\\boxed{70}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe 9 members of a baseball team went to an ice cream parlor after their game. Each player had a singlescoop cone of chocolate, vanilla, or strawberry ice cream. At least one player chose each flavor, and the number of players who chose chocolate was greater than the number of players who chose vanilla, which was greater than the number of players who chose strawberry. Let $N$ be the number of different assignments of flavors to players that meet these conditions. Find the remainder when $N$ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The numbers of players picking chocolate, vanilla and strawberry are \n\n\\[\na=\\#\\text{chocolate},\\qquad b=\\#\\text{vanilla},\\qquad c=\\#\\text{strawberry}\n\\]\n\nwith \n\n\\[\na+b+c=9,\\qquad a>b>c\\ge1 .\n\\]\n\nHence \\((a,b,c)\\) must be three distinct positive integers whose sum is \\(9\\). \nThe possible triples (written in decreasing order) are \n\n\\[\n(6,2,1),\\;(5,3,1),\\;(4,3,2).\n\\]\n\nFor a fixed triple \\((a,b,c)\\) the players are distinct, so the number of assignments\nis the multinomial coefficient \n\n\\[\n\\binom{9}{a,b,c}= \\frac{9!}{a!\\,b!\\,c!}.\n\\]\n\nCompute each term:\n\n\\[\n\\begin{aligned}\n(6,2,1):&\\quad \\frac{9!}{6!\\,2!\\,1!}= \\frac{362880}{720\\cdot2}=252,\\\\[2mm]\n(5,3,1):&\\quad \\frac{9!}{5!\\,3!\\,1!}= \\frac{362880}{120\\cdot6}=504,\\\\[2mm]\n(4,3,2):&\\quad \\frac{9!}{4!\\,3!\\,2!}= \\frac{362880}{24\\cdot6\\cdot2}=1260.\n\\end{aligned}\n\\]\n\nAdd them:\n\n\\[\nN = 252+504+1260 = 2016.\n\\]\n\nThe remainder when \\(N\\) is divided by \\(1000\\) is \n\n\\[\n2016 \\equiv 16 \\pmod{1000}.\n\\]\n\n\\[\n\\boxed{16}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(0,c)\n\\]\n\nso that \\(\\angle A=90^{\\circ}\\) and \n\n\\[\nBC=\\sqrt{b^{2}+c^{2}}=38\\qquad\\Longrightarrow\\qquad b^{2}+c^{2}=38^{2}=1444 .\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1. Determining the positions of \\(K\\) and \\(L\\)\n\nBecause \n\n\\[\nAK=BK=14\n\\]\n\nthe point \\(K\\) lies at the intersection of the circles of radius \\(14\\) centred at\n\\(A\\) and \\(B\\). \nIf \\(K=(x_{K},y_{K})\\),\n\n\\[\nx_{K}^{2}+y_{K}^{2}=196,\\qquad (x_{K}-b)^{2}+y_{K}^{2}=196 .\n\\]\n\nSubtracting gives \n\n\\[\nb^{2}=2bx_{K}\\;\\Longrightarrow\\;x_{K}= \\frac{b}{2} .\n\\tag{2}\n\\]\n\nHence \n\n\\[\ny_{K}^{2}=196-\\Bigl(\\frac{b}{2}\\Bigr)^{2}=196-\\frac{b^{2}}{4}.\n\\tag{3}\n\\]\n\nSimilarly, from \n\n\\[\nAL=CL=14\n\\]\n\nthe point \\(L=(x_{L},y_{L})\\) satisfies\n\n\\[\ny_{L}= \\frac{c}{2},\\qquad \nx_{L}^{2}=196-\\Bigl(\\frac{c}{2}\\Bigr)^{2}=196-\\frac{c^{2}}{4}.\n\\tag{4}\n\\]\n\nThus, writing \n\n\\[\nU=\\frac{b}{2},\\quad V=\\frac{c}{2},\n\\]\n\nwe have \n\n\\[\nK=\\bigl(U,\\;\\sqrt{196-U^{2}}\\bigr),\\qquad \nL=\\bigl(\\sqrt{196-V^{2}},\\;V\\bigr),\n\\tag{5}\n\\]\n\nand from (1) \n\n\\[\nU^{2}+V^{2}=361. \\tag{6}\n\\]\n\n--------------------------------------------------------------------\n### 2. Using the condition \\(KL=14\\)\n\nFrom (5),\n\n\\[\n\\bigl(U-\\sqrt{196-V^{2}}\\bigr)^{2}\n+\\bigl(\\sqrt{196-U^{2}}-V\\bigr)^{2}=196 .\n\\]\n\nExpanding and simplifying with (6) gives\n\n\\[\nU\\sqrt{196-V^{2}}+V\\sqrt{196-U^{2}}=98 . \\tag{7}\n\\]\n\nLet \n\n\\[\np=\\sqrt{196-V^{2}},\\qquad q=\\sqrt{196-U^{2}} .\n\\]\n\nThen \n\n\\[\nU p+V q =98 ,\\qquad p^{2}+q^{2}=31 ,\n\\qquad U^{2}+V^{2}=361 . \\tag{8}\n\\]\n\nFrom (8) we obtain the product\n\n\\[\nU^{2}V^{2}=32448\\quad\\Longrightarrow\\quad UV=104\\sqrt3 . \\tag{9}\n\\]\n\nNow \n\n\\[\n(U+V)^{2}=U^{2}+V^{2}+2UV=361+208\\sqrt3,\n\\]\n\\[\n(U-V)^{2}=U^{2}+V^{2}-2UV=361-208\\sqrt3 .\n\\]\n\nBoth expressions are perfect squares:\n\n\\[\n361+208\\sqrt3=(13+8\\sqrt3)^{2},\n\\qquad\n361-208\\sqrt3=(8\\sqrt3-13)^{2}.\n\\]\n\nHence \n\n\\[\nU+V=13+8\\sqrt3,\\qquad\n|U-V|=8\\sqrt3-13 .\n\\]\n\nSince \\(U>V\\), solving gives \n\n\\[\nU=8\\sqrt3,\\qquad V=13 .\n\\]\n\nConsequently \n\n\\[\nb=2U=16\\sqrt3,\\qquad c=2V=26 .\n\\]\n\n--------------------------------------------------------------------\n### 3. Coordinates of \\(K\\) and \\(L\\)\n\nUsing (5) with the found \\(U,V\\):\n\n\\[\nK=\\bigl(8\\sqrt3,\\; \\sqrt{196-(8\\sqrt3)^{2}}\\bigr)\n =\\bigl(8\\sqrt3,\\;2\\bigr),\n\\]\n\n\\[\nL=\\bigl(\\sqrt{196-13^{2}},\\;13\\bigr)\n =\\bigl(3\\sqrt3,\\;13\\bigr).\n\\]\n\n--------------------------------------------------------------------\n### 4. Area of quadrilateral \\(BKLC\\)\n\nThe vertices in order are \n\n\\[\nB=(16\\sqrt3,0),\\ K=(8\\sqrt3,2),\\ L=(3\\sqrt3,13),\\ C=(0,26).\n\\]\n\nApplying the shoelace formula:\n\n\\[\n\\begin{aligned}\nS_{1}&=x_{B}y_{K}+x_{K}y_{L}+x_{L}y_{C}+x_{C}y_{B}\\\\\n &= (16\\sqrt3)(2)+(8\\sqrt3)(13)+(3\\sqrt3)(26)+0\\\\\n &=32\\sqrt3+104\\sqrt3+78\\sqrt3=214\\sqrt3,\n\\\\[2mm]\nS_{2}&=y_{B}x_{K}+y_{K}x_{L}+y_{L}x_{C}+y_{C}x_{B}\\\\\n &=0+2(3\\sqrt3)+13\\cdot0+26(16\\sqrt3)\\\\\n &=6\\sqrt3+416\\sqrt3=422\\sqrt3 .\n\\end{aligned}\n\\]\n\nHence \n\n\\[\n\\text{Area}=\\frac12|S_{1}-S_{2}|\n =\\frac12\\bigl|214\\sqrt3-422\\sqrt3\\bigr|\n =\\frac12\\,(208\\sqrt3)=104\\sqrt3 .\n\\]\n\nThus the required area is \\(104\\sqrt3\\), i.e. \\(n=104\\).\n\n\\[\n\\boxed{104}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the number of ordered pairs $(x,y)$, where both $x$ and $y$ are integers between $-100$ and $100$, inclusive, such that $12x^{2}-xy-6y^{2}=0$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The equation \n\n\\[\n12x^{2}-xy-6y^{2}=0\n\\]\n\ncan be factored over the integers.\n\n\\[\n\\begin{aligned}\n12x^{2}-xy-6y^{2}\n&= (4x-3y)(3x+2y).\n\\end{aligned}\n\\]\n\nHence a pair \\((x,y)\\) satisfies the equation iff \n\n\\[\n4x-3y=0 \\qquad\\text{or}\\qquad 3x+2y=0 .\n\\]\n\n---\n\n### 1. Solutions of \\(4x-3y=0\\)\n\n\\[\n4x=3y \\Longrightarrow x=\\frac34y .\n\\]\n\nSince \\(x,y\\) are integers, \\(y\\) must be a multiple of \\(4\\); write \\(y=4k\\) \\((k\\in\\mathbb Z)\\). \nThen \\(x=3k\\).\n\nBounds \\(-100\\le x,y\\le100\\) give \n\n\\[\n|4k|\\le100\\ \\Longrightarrow\\ |k|\\le25 .\n\\]\n\nThus \\(k\\) can be any integer from \\(-25\\) to \\(25\\) inclusive \u2013 \\(51\\) possibilities.\n\n---\n\n### 2. Solutions of \\(3x+2y=0\\)\n\n\\[\n3x=-2y \\Longrightarrow x=-\\frac{2}{3}y .\n\\]\n\nNow \\(y\\) must be a multiple of \\(3\\); write \\(y=3k\\). \nThen \\(x=-2k\\).\n\nBounds give \n\n\\[\n|3k|\\le100\\ \\Longrightarrow\\ |k|\\le\\Big\\lfloor\\frac{100}{3}\\Big\\rfloor=33 .\n\\]\n\nHence \\(k\\) can be any integer from \\(-33\\) to \\(33\\) inclusive \u2013 \\(67\\) possibilities.\n\n---\n\n### 3. Removing double\u2011counted pair\n\nBoth families contain the pair \\((0,0)\\) (when \\(k=0\\)). \nIt has been counted twice, so we subtract one.\n\n\\[\n\\text{Total solutions}=51+67-1=117 .\n\\]\n\nAll counted pairs satisfy \\(-100\\le x,y\\le100\\).\n\n\\[\n\\boxed{117}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAn isosceles trapezoid has an inscribed circle tangent to each of its four sides. The radius of the circle is 3, and the area of the trapezoid is 72. Let the parallel sides of the trapezoid have lengths $r$ and $s$, with $r \\neq s$. Find $r^{2}+s^{2}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the trapezoid have parallel sides \\(r\\) and \\(s\\) (\\(r\\neq s\\)), equal legs of length \\(L\\), height \\(h\\), and incircle radius \\(R=3\\).\n\n---\n\n### 1. Semiperimeter from the incircle\n\nFor any tangential quadrilateral,\n\\[\n\\text{Area}=R\\cdot s,\n\\]\nwhere \\(s\\) is the semiperimeter. \nGiven \\(\\text{Area}=72\\) and \\(R=3\\),\n\n\\[\ns=\\frac{72}{3}=24,\n\\qquad\\text{so } r+s+2L=2s=48. \\tag{1}\n\\]\n\n---\n\n### 2. Height of the trapezoid\n\nSince the incircle touches both parallel sides, the distance between them equals twice the radius:\n\n\\[\nh=2R=6.\n\\]\n\nThe area also equals \\(\\frac{1}{2}(r+s)h\\). Thus\n\n\\[\n72=\\frac{1}{2}(r+s)\\cdot6 \\Longrightarrow r+s=24. \\tag{2}\n\\]\n\nSubstituting (2) into (1) gives\n\n\\[\n24+2L=48\\Longrightarrow L=12. \\tag{3}\n\\]\n\n---\n\n### 3. Relating the bases and the leg\n\nIn an isosceles trapezoid the horizontal projection of each leg is \\(\\dfrac{s-r}{2}\\).\nUsing the right triangle formed by a leg, the height, and this projection:\n\n\\[\n\\left(\\frac{s-r}{2}\\right)^2+h^2=L^2.\n\\]\n\nInsert \\(h=6\\) and \\(L=12\\):\n\n\\[\n\\left(\\frac{s-r}{2}\\right)^2+36=144\n\\;\\Longrightarrow\\;\n\\frac{(s-r)^2}{4}=108\n\\;\\Longrightarrow\\;\n(s-r)^2=432.\n\\]\n\nHence\n\n\\[\ns-r=12\\sqrt3. \\tag{4}\n\\]\n\n---\n\n### 4. Solve for \\(r\\) and \\(s\\)\n\nFrom (2) and (4):\n\n\\[\n\\begin{cases}\nr+s=24,\\\\[2pt]\ns-r=12\\sqrt3,\n\\end{cases}\n\\qquad\\Longrightarrow\\qquad\ns=12+6\\sqrt3,\\;\\; r=12-6\\sqrt3.\n\\]\n\nBoth are positive and distinct, as required.\n\n---\n\n### 5. Compute \\(r^{2}+s^{2}\\)\n\n\\[\n\\begin{aligned}\nr^{2}+s^{2}&=(12-6\\sqrt3)^2+(12+6\\sqrt3)^2\\\\\n&=2\\cdot12^{2}+2\\cdot(6\\sqrt3)^{2}\\\\\n&=2\\cdot144+2\\cdot108\\\\\n&=288+216\\\\\n&=504.\n\\end{aligned}\n\\]\n\n---\n\n\\[\n\\boxed{504}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are $8!=40320$ eight-digit positive integers that use each of the digits $1,2,3,4,5,6,7,8$ exactly once. Let $N$ be the number of these integers that are divisible by 22. Find the difference between $N$ and 2025.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "For an \\(8\\)-digit number formed with the digits \\(1,2,\\dots ,8\\) each once we need\n\n* divisibility by \\(2\\) \\(\\Longrightarrow\\) the units digit is even (\\(2,4,6,8\\));\n* divisibility by \\(11\\) \\(\\Longrightarrow\\) the alternating sum of its digits is a multiple of \\(11\\).\n\n---\n\n### 1. Divisibility by \\(11\\)\n\nWrite the digits as \\(d_1d_2d_3d_4d_5d_6d_7d_8\\) ( \\(d_1\\) most significant). \n\nThe test for \\(11\\) gives \n\n\\[\n(d_1+d_3+d_5+d_7)-(d_2+d_4+d_6+d_8)\\equiv0\\pmod{11}.\n\\]\n\nLet \n\n\\[\nO=d_1+d_3+d_5+d_7,\\qquad E=d_2+d_4+d_6+d_8 .\n\\]\n\nSince all eight digits are used once, \n\n\\[\nO+E = 1+2+\\dots+8 = 36 .\n\\]\n\nThe condition \\(O-E\\equiv0\\pmod{11}\\) becomes \n\n\\[\n2O\\equiv36\\pmod{11}\\quad\\Longrightarrow\\quad O\\equiv18\\equiv7\\pmod{11}.\n\\]\n\nThe sum of four distinct digits from \\(\\{1,\\dots ,8\\}\\) lies between \\(10\\) and \\(26\\); the only value congruent to \\(7\\pmod{11}\\) in that range is \\(18\\). \nHence we must have \n\n\\[\nO=E=18.\n\\]\n\nSo the four digits placed in the odd positions must sum to \\(18\\).\n\n---\n\n### 2. Choosing the odd\u2013position digits\n\nWe need all \\(4\\)-element subsets of \\(\\{1,\\dots ,8\\}\\) whose sum is \\(18\\).\n\nListing them (in increasing order) gives\n\n\\[\n\\begin{aligned}\n&\\{1,2,7,8\\},\\; \\{1,3,6,8\\},\\; \\{1,4,5,8\\},\\; \\{1,4,6,7\\},\\\\\n&\\{2,3,5,8\\},\\; \\{2,3,6,7\\},\\; \\{2,4,5,7\\},\\; \\{3,4,5,6\\}.\n\\end{aligned}\n\\]\n\nThere are \\(8\\) such subsets. \nEach of them contains exactly two even digits (the even digits are \\(2,4,6,8\\)). Consequently the complementary set (the digits placed in even positions) also contains exactly two evens.\n\n---\n\n### 3. Forming the numbers\n\n*For a fixed subset* \\(S\\) (the odd\u2011position digits)\n\n* arrange its four digits among the odd places \\(1,3,5,7\\): \\(4!\\) ways;\n* the four remaining digits (the complement \\(T\\)) go to the even places \\(2,4,6,8\\). \n Since \\(T\\) contains two even digits, we may pick which even digit occupies the units place (position \\(8\\)) in \\(2\\) ways; the other three digits can be placed in \\(3!\\) ways.\n\nHence for each subset \\(S\\)\n\n\\[\n\\text{permutations}=4!\\times 2\\times3!=24\\times12=288 .\n\\]\n\nWith \\(8\\) possible subsets,\n\n\\[\nN=8\\times288=2304 .\n\\]\n\n(Equivalently, half of the \\(4608\\) numbers with \\(O=E=18\\) are even, giving the same result.)\n\n---\n\n### 4. Required difference\n\n\\[\nN-2025 = 2304-2025 = 279.\n\\]\n\nThus the requested difference is \n\n\\[\n\\boxed{279}.\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "We place \\(\\triangle ABC\\) on its circumcircle (radius\u00a01) with \n\n\\[\nA=1,\\qquad B=e^{i2C},\\qquad C=e^{i(2C+2A)} .\n\\]\n\nThe orthocenter is \n\n\\[\nH=a+b+c.\n\\]\n\nThe nine\u2011point circle is the image of the circumcircle under the homothety with centre \\(H\\) and factor \\(\\tfrac12\\); therefore for any point \\(X\\) on the nine\u2011point circle its image on the circumcircle is \n\n\\[\nX' = 2X-H .\n\\]\n\nApplying this to the six points on the nine\u2011point circle gives\n\n\\[\n\\begin{aligned}\nD&\\mapsto -a,\\\\\nE&\\mapsto -b,\\\\\nF&\\mapsto -c,\\\\\nG&\\mapsto A' ,\\qquad A' \\text{ is the second intersection of the altitude }AA_H\\text{ with the circumcircle},\\\\\nH&\\mapsto B' ,\\qquad B'=-e^{i2A},\\\\\nJ&\\mapsto C' ,\\qquad C'=-e^{-i2A}.\n\\end{aligned}\n\\]\n\nUsing \\(a=1,\\;b=e^{i2C},\\;c=e^{i(2C+2A)}\\) we obtain the central\nangles (measured from the positive \\(x\\)-axis) of the corresponding points:\n\n\\[\n\\begin{array}{c|c}\n\\text{Nine\u2011point point} & \\text{Angle on the circumcircle}\\\\ \\hline\nD & 180^\\circ\\\\\nE & 180^\\circ+2C\\\\\nF & 180^\\circ-2B\\\\\nG & 180^\\circ+2A+4C\\\\\nH & 180^\\circ+2A\\\\\nJ & 180^\\circ-2A\n\\end{array}\n\\]\n\nBecause the homothety preserves directions from the centre, the\narc length on the nine\u2011point circle equals the corresponding central\nangle on the circumcircle.\n\nHence\n\n\\[\n\\begin{aligned}\n\\widehat{DE}&=(180^\\circ+2C)-180^\\circ =2C,\\\\[2mm]\n\\widehat{HJ}&=|\\, (180^\\circ+2A)-(180^\\circ-2A)\\,|=4A,\n\\end{aligned}\n\\]\n\nand the minor arc \\(HJ\\) is \\(360^\\circ-4A\\) (since \\(4A>180^\\circ\\)).\nFinally\n\n\\[\n\\widehat{FG}=|(180^\\circ-2B)-(180^\\circ+2A+4C)|\n =2C\\qquad(\\text{mod }360^\\circ).\n\\]\n\nThus\n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n&=2C+2\\bigl(360^\\circ-4A\\bigr)+3\\,(2C) \\\\\n&=720^\\circ-8A+8C\\\\\n&=720^\\circ+8(C-A).\n\\end{aligned}\n\\]\n\nFor the given triangle \\(A=84^\\circ,\\;C=36^\\circ\\),\n\n\\[\n720^\\circ+8(36^\\circ-84^\\circ)=720^\\circ-384^\\circ=336^\\circ .\n\\]\n\n\\[\n\\boxed{336}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The function \n\n\\[\nf(x)=\\frac{(x-18)(x-72)(x-98)(x-k)}{x}, \\qquad x>0,\n\\]\n\nhas zeros at \\(x=18,72,98,k\\) and \\(\\displaystyle\\lim_{x\\to0^+}f(x)=+\\infty\\),\n\\(\\displaystyle\\lim_{x\\to\\infty}f(x)=+\\infty\\).\nHence the graph of \\(f\\) starts at \\(+\\infty\\), descends to a negative\nvalue, comes back to zero, rises again, etc.; it has exactly **two**\nnegative intervals:\n\\[\n(r_1,r_2),\\qquad (r_3,r_4),\n\\]\nwhere \\(\\{r_1,r_2,r_3,r_4\\}=\\{18,72,98,k\\}\\) ordered increasingly.\nIn each negative interval there is a local (and global) minimum of \\(f\\).\n\nLet \n\n\\[\ng(x)=(x-18)(x-72)(x-98)(x-k),\n\\qquad f(x)=\\frac{g(x)}{x}.\n\\]\n\nA point \\(x_0\\) where \\(f\\) has an extremum satisfies \n\n\\[\nf'(x_0)=0\\iff x_0g'(x_0)-g(x_0)=0\\iff \n\\sum_{i=1}^{4}\\frac{1}{x_0-r_i}= \\frac1{x_0}.\n\\]\n\nGeometrically, if \\(m=f(x_0)\\) then the line \\(y=m x\\) is tangent to the\nquartic graph \\(y=g(x)\\) at \\(x_0\\):\n\\[\ng(x)-mx=0\\quad\\text{has a double root at }x_0 .\n\\]\n\nIf the global minimum of \\(f\\) is attained at **two** distinct points,\nthe line \\(y=m x\\) must be tangent to \\(g\\) at two distinct points\n\\(\\alpha,\\beta\\). Hence\n\n\\[\ng(x)-mx=(x-\\alpha)^2 (x-\\beta)^2 .\n\\tag{1}\n\\]\n\nWrite \n\n\\[\n\\alpha+\\beta=p,\\qquad \\alpha\\beta =q,\\qquad m \\text{ (the slope)} .\n\\]\n\nExpanding (1) and comparing with \\(g(x)-mx=x^4-S_1x^3+S_2x^2-(S_3+m)x+S_4\\) gives \n\n\\[\n\\begin{aligned}\nS_1 &=2p,\\\\\nS_2 &=p^{2}+2q,\\\\\nS_4 &=q^{2},\\\\\nS_3+m &=2pq,\n\\end{aligned}\n\\tag{2}\n\\]\n\nwhere for our roots \n\n\\[\n\\begin{aligned}\nS_1&=18+72+98+k=188+k,\\\\\nS_2&=18\\cdot72+18\\cdot98+72\\cdot98+ (18+72+98)k\n =10116+188k,\\\\\nS_3&=18\\cdot72\\cdot98+ (18\\cdot72+18\\cdot98+72\\cdot98)k\n =127008+10116k,\\\\\nS_4&=18\\cdot72\\cdot98\\cdot k=127008\\,k .\n\\end{aligned}\n\\]\n\nFrom (2) we obtain \n\n\\[\np=\\frac{188+k}{2},\\qquad q=\\sqrt{127008\\,k}=252\\sqrt{2k}.\n\\]\n\nUsing the second equation of (2),\n\n\\[\nS_2=p^{2}+2q,\n\\]\n\ngives the condition on \\(k\\):\n\n\\[\n\\frac{(188+k)^{2}}{4}+2\\sqrt{127008k}=10116+188k .\n\\tag{3}\n\\]\n\n---\n\n### Solving (3)\n\nPut \\(k=t^{2}\\;(t>0)\\). Since \\(\\sqrt{127008k}=252\\sqrt{2}\\,t\\),\n(3) becomes\n\n\\[\nt^{4}-376t^{2}+2016\\sqrt{2}\\,t-5120=0 .\n\\]\n\nFactoring,\n\n\\[\n(t^{2}+6\\sqrt{2}\\,t-320)(t^{2}-6\\sqrt{2}\\,t+16)=0 .\n\\]\n\nHence the positive solutions for \\(t\\) are\n\n\\[\nt=10\\sqrt2,\\qquad t=4\\sqrt2,\\qquad t=2\\sqrt2 .\n\\]\n\nConsequently\n\n\\[\nk=t^{2}=200,\\;32,\\;8 .\n\\]\n\n---\n\n### Verification\n\nFor each \\(k\\) the ordered roots of \\(g\\) are\n\n\\[\n\\begin{array}{c|c}\nk & \\text{ordered roots }(r_1,r_2,r_3,r_4)\\\\ \\hline\n8 & (8,18,72,98)\\\\\n32 & (18,32,72,98)\\\\\n200& (18,72,98,200)\n\\end{array}\n\\]\n\nUsing \\(p\\) and \\(q\\) we find the tangency points \n\n\\[\n\\alpha,\\beta=\\frac{p\\pm\\sqrt{p^{2}-4q}}{2},\n\\]\n\nand they lie respectively in the intervals \\((r_1,r_2)\\) and\n\\((r_3,r_4)\\). Thus in each case the line \\(y=m x\\) is tangent to\n\\(g\\) at two points, giving exactly two distinct global minima of\n\\(f\\). No other \\(k>0\\) satisfies (3); hence these are the only three\nvalues.\n\nFinally, the required sum is\n\n\\[\n8+32+200 = 240 .\n\\]\n\n\\[\n\\boxed{240}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $k$ be real numbers such that the system $|25+20i-z|=5$ and $|z-4-k|=|z-3i-k|$ has exactly one complex solution $z$. The sum of all possible values of $k$ can be written as $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$. Here $i=\\sqrt{-1}$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nz=x+iy\\qquad (x,y\\in\\mathbb{R}).\n\\]\n\n---\n\n### 1. The first equation \u2013 a circle \n\n\\[\n|25+20i-z|=5 \\Longrightarrow (x-25)^2+(y-20)^2=5^2 .\n\\]\n\nThus the circle has centre \n\n\\[\nC=(25,20),\\qquad \\text{radius } r=5 .\n\\]\n\n---\n\n### 2. The second equation \u2013 a perpendicular bisector \n\n\\[\n|z-(4+k)|=|z-(3i+k)|\n\\]\n\nwrites as \n\n\\[\n(x-(k+4))^2+y^{2}=(x-k)^2+(y-3)^2 .\n\\]\n\nSimplifying,\n\n\\[\n-8x+6y+8k+7=0\\quad\\Longrightarrow\\quad 4x-3y-(4k+3.5)=0 .\n\\]\n\nHence the set of points satisfying the second condition is the line \n\n\\[\nL:\\;4x-3y=4k+\\frac 72 .\n\\]\n\nThis is the perpendicular bisector of the segment joining \n\\(A=(k+4,0)\\) and \\(B=(k,3)\\) (its slope is \\(4/3\\) for any \\(k\\)).\n\n---\n\n### 3. One intersection \\(\\iff\\) tangency \n\nThe system has exactly one solution precisely when the line \\(L\\) is tangent to the circle, i.e. when the distance from the centre \\(C\\) to \\(L\\) equals the radius \\(5\\).\n\nThe distance from \\((x_0,y_0)\\) to \\(Ax+By+C=0\\) is \n\n\\[\n\\frac{|Ax_0+By_0+C|}{\\sqrt{A^2+B^2}} .\n\\]\n\nFor \\(C=(25,20)\\) and \\(L: 4x-3y-(4k+3.5)=0\\),\n\n\\[\nd=\\frac{|4\\cdot25-3\\cdot20-(4k+3.5)|}{\\sqrt{4^{2}+(-3)^{2}}}\n =\\frac{|40-4k-3.5|}{5}\n =\\frac{|36.5-4k|}{5}.\n\\]\n\nSet \\(d=r=5\\):\n\n\\[\n\\frac{|36.5-4k|}{5}=5\\quad\\Longrightarrow\\quad |36.5-4k|=25 .\n\\]\n\n---\n\n### 4. Solving for \\(k\\)\n\n\\[\n\\begin{cases}\n36.5-4k=25 &\\Longrightarrow\\;4k=11.5\\;\\Longrightarrow\\;k=\\dfrac{23}{8},\\\\[4pt]\n36.5-4k=-25 &\\Longrightarrow\\;4k=61.5\\;\\Longrightarrow\\;k=\\dfrac{123}{8}.\n\\end{cases}\n\\]\n\nThus the possible real values of \\(k\\) are \n\n\\[\nk_1=\\frac{23}{8},\\qquad k_2=\\frac{123}{8}.\n\\]\n\nBoth give a line tangent to the circle, so each yields exactly one solution \\(z\\).\n\n---\n\n### 5. Sum of the possible \\(k\\)\u2019s \n\n\\[\nk_1+k_2=\\frac{23+123}{8}=\\frac{146}{8}=\\frac{73}{4}.\n\\]\n\nWrite \\(\\frac{73}{4}\\) as \\(\\dfrac{m}{n}\\) with \\(\\gcd(m,n)=1\\); here \\(m=73,\\ n=4\\).\n\n\\[\nm+n=73+4=77.\n\\]\n\n\\[\n\\boxed{77}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Step 1. Write the recurrence for the numerators and denominators**\n\nLet \n\n\\[\nx_k=\\frac{a_k}{b_k}\\qquad (a_k,b_k\\in \\mathbb Z ,\\; \\gcd(a_k,b_k)=1).\n\\]\n\nFrom \n\n\\[\nx_{k+1}= \\frac{1}{3}\\Bigl(x_k+\\frac1{x_k}-1\\Bigr)=\\frac{x_k^2-x_k+1}{3x_k},\n\\]\n\nwe obtain \n\n\\[\na_{k+1}=a_k^2-a_kb_k+b_k^2,\\qquad \nb_{k+1}=3a_kb_k, \\tag{1}\n\\]\n\nwith \\(a_1=25,\\;b_1=11\\).\n\n--------------------------------------------------------------------\n\n**Step 2. The common factor \\(3^{e_k}\\)** \n\nWrite \n\n\\[\na_k=3^{e_k}A_k,\\qquad b_k=3^{e_k}B_k,\\qquad \\gcd(A_k,B_k)=1 .\n\\]\n\nDividing (1) by the highest possible power of \\(3\\) shows that\n\\(e_{k+1}=2e_k+1\\) and that the reduced pair \\((A_k,B_k)\\) always satisfies \n\n\\[\nA_k\\equiv1\\pmod3,\\qquad B_k\\equiv2\\pmod3 .\n\\]\n\nWith \\(e_1=0\\) we get \n\n\\[\ne_k=2^{\\,k-1}-1 .\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 3. A very simple recurrence for the sum**\n\nLet \n\n\\[\nS_k=a_k+b_k .\n\\]\n\nFrom (1)\n\n\\[\n\\begin{aligned}\nS_{k+1}&=a_{k+1}+b_{k+1}\n =(a_k^2-a_kb_k+b_k^2)+3a_kb_k \\\\\n &=a_k^2+b_k^2+2a_kb_k=(a_k+b_k)^2=S_k^{\\,2}.\n\\end{aligned}\n\\]\n\nHence \n\n\\[\nS_k=S_1^{\\,2^{\\,k-1}}=36^{\\,2^{\\,k-1}}. \\tag{3}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 4. The reduced numerator and denominator**\n\nSince the common factor is \\(3^{e_k}\\),\n\n\\[\n\\frac{a_k}{b_k}= \\frac{A_k}{B_k},\\qquad \nm=A_k,\\; n=B_k .\n\\]\n\nThus \n\n\\[\nm+n=\\frac{a_k+b_k}{3^{e_k}}\n =\\frac{36^{\\,2^{\\,k-1}}}{3^{\\,2^{\\,k-1}-1}}\n =2^{\\,2^{\\,k}}\\;3^{\\,2^{\\,k-1}+1}. \\tag{4}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 5. Apply \\(k=2025\\)** \n\nFrom (4),\n\n\\[\nm+n=2^{\\,2^{2025}}\\;3^{\\,2^{2024}+1}.\n\\]\n\nWe need this number modulo \\(1000\\).\n\n--------------------------------------------------------------------\n\n**Step 6. Reduce modulo \\(8\\) and \\(125\\)** \n\n*Modulo \\(8\\):* \\(2^{\\ge3}\\equiv0\\pmod8\\); therefore \n\n\\[\nm+n\\equiv0\\pmod8. \\tag{5}\n\\]\n\n*Modulo \\(125\\):* Because \\(\\phi(125)=100\\),\n\n\\[\n2^{2^{2025}}\\equiv 2^{\\,2^{2025}\\bmod100},\n\\qquad\n3^{2^{2024}+1}\\equiv 3^{\\,(2^{2024}+1)\\bmod100}\\pmod{125}.\n\\]\n\nCompute the exponents.\n\n- \\(2^{2025}\\bmod100\\): \n \\(2^{2025}\\equiv32\\pmod{100}\\) (by CRT: \\(2^{2025}\\equiv0\\pmod4\\), \\(2^{2025}\\equiv7\\pmod{25}\\)).\n- \\(2^{2024}\\bmod100\\): \n \\(2^{2024}\\equiv16\\pmod{100}\\).\n\nHence \n\n\\[\n2^{2^{2025}}\\equiv2^{32}\\equiv46\\pmod{125},\n\\qquad\n3^{2^{2024}+1}\\equiv3^{17}\\equiv38\\pmod{125}.\n\\]\n\nTherefore \n\n\\[\nm+n\\equiv46\\cdot38\\equiv123\\pmod{125}. \\tag{6}\n\\]\n\n--------------------------------------------------------------------\n\n**Step 7. Chinese Remainder Theorem**\n\nFind \\(N\\) such that \n\n\\[\nN\\equiv0\\pmod8,\\qquad N\\equiv123\\pmod{125}.\n\\]\n\nWrite \\(N=8k\\). Then \\(8k\\equiv123\\pmod{125}\\), i.e. \n\n\\[\nk\\equiv123\\cdot8^{-1}\\pmod{125}.\n\\]\n\nSince \\(8^{-1}\\equiv47\\pmod{125}\\), \n\n\\[\nk\\equiv123\\cdot47\\equiv31\\pmod{125}.\n\\]\n\nThus \\(k=31+125t\\) and \n\n\\[\nN=8k=8\\cdot31=248\\pmod{1000}.\n\\]\n\n--------------------------------------------------------------------\n\n**Answer**\n\n\\[\n\\boxed{248}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe twelve letters $A,B,C,D,E,F,G,H,I,J,K$, and $L$ are randomly grouped into six pairs of letters. The two letters in each pair are placed next to each other in alphabetical order to form six two-letter words, and those six words are listed alphabetically. For example, a possible result is $AB,CJ,DG,EK,FL,HI$. The probability that the last word listed contains $G$ is $\\frac{m}{n}$, where $m$ and $n$ are relatively prime positive integers. Find $m+n$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nAG\\)\n\nNow the word is \\(GX\\) and its first letter is \\(G\\).\nFor it to be maximal, **no other pair may have a first letter larger\nthan \\(G\\)**; i.e. no remaining pair may consist of two letters both\ngreater than \\(G\\).\n\nAfter fixing the pair \\(\\{G,X\\}\\) (with \\(X\\in\\{H,I,J,K,L\\}\\)), the\nremaining letters are\n\n* the six letters \\(\\{A,B,C,D,E,F\\}\\) (all \\(G\\)).\n\nThus each of those four \u201clarge\u2019\u2019 letters must be paired with a distinct\nsmall letter, leaving two small letters to pair together.\n\nNumber of valid matchings:\n\n\\[\n\\binom{6}{4}\\cdot4!\\cdot1=15\\cdot24=360 .\n\\]\n\nAgain the total number of matchings of the ten remaining letters is\n\\(945\\). Therefore\n\n\\[\n\\Pr(\\text{maximal}\\mid G\\text{\u2013}X)=\\frac{360}{945}=\\frac{8}{21}\n\\qquad (X=H,I,J,K,L).\n\\]\n\n--------------------------------------------------------------------\n### 4. Assemble the probability\n\n\\[\n\\begin{aligned}\nP&=\\frac1{11}\\Bigl(\\frac{8}{63}\n+5\\cdot\\frac{8}{21}\\Bigr) \\\\\n &=\\frac1{11}\\Bigl(\\frac{8}{63}+\\frac{40}{21}\\Bigr)\n =\\frac1{11}\\Bigl(\\frac{8+120}{63}\\Bigr)\n =\\frac{128}{693}.\n\\end{aligned}\n\\]\n\nThe fraction \\(\\displaystyle\\frac{128}{693}\\) is already in lowest\nterms. Hence \\(m=128,\\;n=693\\) and\n\n\\[\nm+n = 128+693 = 821 .\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{821}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nS(t)=\\sum_{a=1}^{3^{6}}\\exp\\!\\Big(2\\pi i\\,\\frac{t a^{3}}{3^{7}}\\Big) \\qquad(0\\le t<3^{7})\n\\]\n\nand denote \n\n\\[\nN=\\#\\{(a,b,c)\\mid 1\\le a,b,c\\le 3^{6},\n\\ a^{3}+b^{3}+c^{3}\\equiv 0\\pmod{3^{7}}\\}.\n\\]\n\nFor any modulus \\(m\\),\n\n\\[\n\\#\\{(x,y,z):x+y+z\\equiv0\\pmod m\\}=\n\\frac1m\\sum_{t=0}^{m-1}\\Bigl(\\sum_{x}e^{2\\pi i t x/m}\\Bigr)^3 .\n\\]\n\nHence \n\n\\[\nN=\\frac1{3^{7}}\\sum_{t=0}^{3^{7}-1} S(t)^{3}. \\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1. Splitting the summation\n\nWrite each \\(a\\) as \\(a=3^{v}u\\) where \\(v=v_{3}(a)\\) and \\(u\\) is not\ndivisible by \\(3\\). \nFor \\(0\\le v\\le 2\\) define \n\n\\[\nU_{v}=\\{\\,u:1\\le u\\le 3^{6-v},\\;3\\nmid u\\,\\},\n\\qquad |U_{0}|=486,\\ |U_{1}|=162,\\ |U_{2}|=54 .\n\\]\n\nIf \\(v\\ge3\\) then \\(a^{3}\\equiv0\\pmod{3^{7}}\\); there are \n\\(n_{3}=27\\) such numbers.\nThus\n\n\\[\nS(t)=f_{0}(t)+f_{1}(t)+f_{2}(t)+n_{3},\n\\]\nwhere \n\n\\[\n\\begin{aligned}\nf_{0}(t)&=\\sum_{x\\in U_{0}}\\zeta^{t x^{3}},\\\\[2mm]\nf_{1}(t)&=\\sum_{x\\in U_{1}}\\zeta^{t\\,27x^{3}},\\\\[2mm]\nf_{2}(t)&=\\sum_{x\\in U_{2}}\\zeta^{t\\,729x^{3}},\n\\end{aligned}\n\\qquad \n\\zeta=e^{2\\pi i/3^{7}} .\n\\]\n\n--------------------------------------------------------------------\n### 2. Evaluating \\(f_{0},f_{1},f_{2}\\)\n\n*For \\(f_{0}\\).* \nLet \\(G_{7}=(\\mathbb Z/3^{7}\\mathbb Z)^{\\times}\\) (\\(|G_{7}|=1458\\)).\nThe map \\(x\\mapsto x^{3}\\) from \\(G_{7}\\) onto the set of cubes\n\\(C_{6}\\) has kernel of size \\(3\\); consequently\n\n\\[\n\\sum_{x\\in G_{7}}\\zeta^{t x}=3\\sum_{r\\in C_{6}}\\zeta^{t r}=3f_{0}(t).\n\\]\n\nFor \\(t\\neq0\\) one has \n\n\\[\n\\sum_{x\\in G_{7}}\\zeta^{t x}= -\\!\\!\\sum_{\\substack{x\\;(\\bmod 3^{7})\\\\3\\mid x}}\\!\\!\\zeta^{t x}\n=\\begin{cases}\n-729,&v_{3}(t)=6,\\\\\n0,&0\\le v_{3}(t)\\le5 .\n\\end{cases}\n\\]\n\nHence \n\n\\[\nf_{0}(t)=\n\\begin{cases}\n486,&t=0,\\\\[2mm]\n-243,&v_{3}(t)=6,\\\\[2mm]\n0,&\\text{otherwise.}\n\\end{cases}\n\\tag{2}\n\\]\n\n*For \\(f_{1}\\).* \nWriting each \\(x\\in U_{1}\\) as \\(x=v+81k\\;(k=0,1,2)\\) one finds\n\\(x^{3}\\equiv v^{3}\\pmod{81}\\). Consequently \n\n\\[\nf_{1}(t)=3\\!\\!\\sum_{\\substack{v\\in(\\mathbb Z/81)^{\\times}}}\\!\n\\exp\\!\\Big(2\\pi i\\,\\frac{t v^{3}}{81}\\Big).\n\\]\n\nUsing again that the cube map on \\((\\mathbb Z/81)^{\\times}\\) has kernel\nsize \\(3\\),\n\n\\[\nf_{1}(t)=3\\!\\cdot\\!3\\!\\!\\sum_{r\\in C_{1}}\\!\n\\exp\\!\\Big(2\\pi i\\,\\frac{t r}{81}\\Big) ,\n\\]\n\nwhere \\(C_{1}\\) is the set of cube\u2011residues modulo \\(81\\) (\\(|C_{1}|=18\\)).\nNow\n\n\\[\n\\sum_{x\\in(\\mathbb Z/81)^{\\times}}\\exp\\!\\Big(2\\pi i\\,\n\\frac{t x}{81}\\Big)=\n\\begin{cases}\n54,&v_{3}(t)\\ge4,\\\\[1mm]\n-27,&v_{3}(t)=3,\\\\[1mm]\n0,&v_{3}(t)\\le2 .\n\\end{cases}\n\\]\n\nThus\n\n\\[\nf_{1}(t)=\n\\begin{cases}\n162,&v_{3}(t)\\ge4,\\\\[2mm]\n-81,&v_{3}(t)=3,\\\\[2mm]\n0,&v_{3}(t)\\le2 .\n\\end{cases}\n\\tag{3}\n\\]\n\n*For \\(f_{2}\\).* \nHere \\(x^{3}\\equiv x\\pmod 3\\), and among the \\(54\\) numbers in \\(U_{2}\\)\nexactly half are \\(\\equiv1\\pmod3\\) and half \\(\\equiv2\\pmod3\\). Hence \n\n\\[\nf_{2}(t)=27\\bigl(\\zeta^{t}+ \\zeta^{2t}\\bigr)=\n\\begin{cases}\n-27,&v_{3}(t)=0,\\\\[2mm]\n54,&v_{3}(t)\\ge1 .\n\\end{cases}\n\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n### 3. The values of \\(S(t)\\)\n\nFrom (2)\u2013(4) (and remembering the constant term \\(n_{3}=27\\))\n\n\\[\nS(t)=f_{0}(t)+f_{1}(t)+f_{2}(t)+27=\n\\begin{array}{c|c}\nv_{3}(t) & S(t)\\\\ \\hline\n\\infty\\;(t=0) & 729\\\\\n0 & 0\\\\\n1 & 81\\\\\n2 & 81\\\\\n3 & 0\\\\\n4 & 243\\\\\n5 & 243\\\\\n6 & 0\n\\end{array}\n\\]\n\n--------------------------------------------------------------------\n### 4. Computing \\(N\\)\n\nOnly the classes with non\u2011zero \\(S(t)\\) contribute to (1). \nThe numbers of \\(t\\) in each class are\n\n\\[\n\\begin{array}{c|c}\nv_{3}(t) & \\#t\\\\ \\hline\n\\infty & 1\\\\\n0 & 1458\\\\\n1 & 486\\\\\n2 & 162\\\\\n3 & 54\\\\\n4 & 18\\\\\n5 & 6\\\\\n6 & 2\n\\end{array}\n\\]\n\nHence\n\n\\[\n\\begin{aligned}\nN&=\\frac1{3^{7}}\\Bigl( 729^{3}\n+ (486+162) \\,81^{3}\n+ (18+6)\\,243^{3}\\Bigr)\\\\[2mm]\n&=\\frac1{3^{7}}\\Bigl(3^{18}+648\\cdot3^{12}+24\\cdot3^{15}\\Bigr)\\\\\n&=3^{5}\\cdot2025 = 243\\cdot2025 = 492\\,075 .\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n### 5. Remainder modulo \\(1000\\)\n\n\\[\n492\\,075 \\equiv 75 \\pmod{1000}.\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{75}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nOn $\\triangle ABC$ points $A,D,E$, and $B$ lie that order on side $\\overline{AB}$ with $AD=4, DE=16$, and $EB=8$. Points $A,F,G$, and $C$ lie in that order on side $\\overline{AC}$ with $AF=13, FG=52$, and $GC=26$. Let $M$ be the reflection of $D$ through $F$, and let $N$ be the reflection of $G$ through $E$. Quadrilateral $DEGF$ has area 288. Find the area of heptagon $AFNBCEM$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution Overview**\n\nThe given lengths on the sides of \\(\\triangle ABC\\) give \n\n\\[\nAD=4,\\;DE=16,\\;EB=8 \\qquad\\Longrightarrow\\qquad AB=28,\n\\]\n\\[\nAF=13,\\;FG=52,\\;GC=26 \\qquad\\Longrightarrow\\qquad AC=91 .\n\\]\n\n--------------------------------------------------------------------\n\n### 1. Two lines parallel to \\(BC\\)\n\n\\[\n\\frac{AD}{AB}= \\frac{4}{28}= \\frac{1}{7},\\qquad \n\\frac{AF}{AC}= \\frac{13}{91}= \\frac{1}{7}.\n\\]\n\nHence the points \\(D\\in AB\\) and \\(F\\in AC\\) divide the two sides in the same\nratio; therefore \\(DF\\parallel BC\\).\n\nSimilarly \n\n\\[\n\\frac{AE}{AB}= \\frac{AD+DE}{AB}= \\frac{20}{28}= \\frac57,\n\\qquad \n\\frac{AG}{AC}= \\frac{AF+FG}{AC}= \\frac{65}{91}= \\frac57,\n\\]\n\nso \\(E\\in AB,\\;G\\in AC\\) also give a line parallel to \\(BC\\); i.e. \\(EG\\parallel BC\\).\n\nThus the quadrilateral \\(DEGF\\) is bounded by two parallel sides \\(DF,EG\\) and\nthe two segments of the sides of the triangle, and it is the region between the\ntwo similar triangles \\(ADF\\) and \\(AEG\\).\n\n--------------------------------------------------------------------\n\n### 2. Area of \\(\\triangle ABC\\)\n\nIf \\([XYZ]\\) denotes area, similarity gives \n\n\\[\n[ADF]=\\Bigl(\\frac{AD}{AB}\\Bigr)^2[ABC]=\\Bigl(\\frac17\\Bigr)^2[ABC]=\\frac{[ABC]}{49},\n\\]\n\n\\[\n[AEG]=\\Bigl(\\frac{AE}{AB}\\Bigr)\\Bigl(\\frac{AG}{AC}\\Bigr)[ABC]\n =\\frac57\\cdot\\frac57[ABC]=\\frac{25}{49}[ABC].\n\\]\n\nHence \n\n\\[\n[DEGF]=[AEG]-[ADF]=\\Bigl(\\frac{25}{49}-\\frac1{49}\\Bigr)[ABC]\n =\\frac{24}{49}[ABC].\n\\]\n\nGiven \\([DEGF]=288\\),\n\n\\[\n\\frac{24}{49}[ABC]=288\\quad\\Longrightarrow\\quad[ABC]=288\\cdot\\frac{49}{24}\n =12\\cdot49=588.\n\\]\n\n--------------------------------------------------------------------\n\n### 3. Area of the heptagon \\(AFNBCEM\\)\n\nPlace the triangle with \\(A=(0,0),\\;B=(28,0)\\) and\n\\(C=(91\\cos\\theta,\\,91\\sin\\theta)\\).\nBecause \\([ABC]=\\tfrac12\\cdot28\\cdot91\\sin\\theta\\),\n\n\\[\n\\sin\\theta=\\frac{[ABC]}{1274}= \\frac{588}{1274}= \\frac{6}{13}.\n\\]\n\nThus \n\n\\[\n\\cos\\theta=\\frac{\\sqrt{1-\\sin^2\\theta}}{\\,}= \\frac{\\sqrt{133}}{13}.\n\\]\n\nThe coordinates of the relevant points are\n\n\\[\n\\begin{aligned}\n&F=(13\\cos\\theta,13\\sin\\theta)=(\\sqrt{133},6), \\\\\n&G=(65\\cos\\theta,65\\sin\\theta)=(5\\sqrt{133},30),\\\\\n&D=(4,0),\\qquad\nE=(20,0),\\\\\n&M=2F-D=(2\\sqrt{133}-4,12),\\\\\n&N=2E-G=(40-5\\sqrt{133},-30).\n\\end{aligned}\n\\]\n\nUsing the shoelace formula for the polygon\n\\(A\\,(0,0),\\;F,\\;N,\\;B,\\;C,\\;E,\\;M\\) we obtain\n\n\\[\n\\begin{aligned}\n\\sum (x_i y_{i+1}-y_i x_{i+1})\n&= -240+840+1176-840+240 = 1176,\\\\[2mm]\n\\text{Area}&=\\frac12\\cdot1176=588.\n\\end{aligned}\n\\]\n\nThus the heptagon \\(AFNBCEM\\) has the same area as \\(\\triangle ABC\\).\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{588}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe parabola with equation $y=x^{2}-4$ is rotated $60^{\\circ}$ counterclockwise around the origin. The unique point in the fourth quadrant where the original parabola and its image intersect has $y$-coordinate $\\frac{a-\\sqrt{b}}{c}$, where $a$, $b$, and $c$ are positive integers, and $a$ and $c$ are relatively prime. Find $a+b+c$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nP:\\; y=x^{2}-4\n\\]\n\nand rotate \\(P\\) about the origin \\(60^{\\circ}\\) counter\u2011clockwise. \nIf \\((x,y)\\) is a point of \\(P\\) then its image \\((X,Y)\\) satisfies \n\n\\[\n\\begin{pmatrix}X\\\\Y\\end{pmatrix}= \n\\begin{pmatrix}\\cos 60^\\circ & -\\sin 60^\\circ\\\\[2pt] \n\\sin 60^\\circ & \\ \\cos 60^\\circ\\end{pmatrix}\n\\begin{pmatrix}x\\\\y\\end{pmatrix},\n\\qquad \n\\cos60^\\circ=\\frac12,\\;\\sin60^\\circ=\\frac{\\sqrt3}{2}.\n\\]\n\nHence \n\n\\[\nX=\\frac{x}{2}-\\frac{\\sqrt3}{2}y,\\qquad\nY=\\frac{\\sqrt3}{2}x+\\frac{y}{2}.\n\\]\n\nTo obtain the equation of the rotated curve in the original \\((x,y)\\)\u2013coordinates,\nsolve for \\((x,y)\\) in terms of \\((X,Y)\\) (rotate back by \\(-60^\\circ\\)):\n\n\\[\nx = \\frac{X}{2}+\\frac{\\sqrt3}{2}Y,\\qquad\ny = -\\frac{\\sqrt3}{2}X+\\frac{Y}{2}.\n\\]\n\nSince the original points satisfy \\(y=x^{2}-4\\), substituting the expressions above gives the equation of the image:\n\n\\[\nx^{2}+2\\sqrt3\\,xy+3y^{2}+2\\sqrt3\\,x-2y-16=0. \\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### Intersection with the original parabola\n\nThe intersection points satisfy simultaneously \n\n\\[\ny=x^{2}-4\\qquad\\text{and}\\qquad (1).\n\\]\n\nSubstituting \\(y=x^{2}-4\\) into (1) yields\n\n\\[\n3x^{4}-25x^{2}+40+2\\sqrt3\\,x^{3}-6\\sqrt3\\,x=0.\n\\]\n\nFactor this quartic in the field \\(\\mathbb{Q}(\\sqrt3)\\):\n\n\\[\n\\begin{aligned}\n3x^{4}-25x^{2}+40+2\\sqrt3\\,x^{3}-6\\sqrt3\\,x\n&=(x^{2}+\\sqrt3\\,x-4)\\bigl(3x^{2}-\\sqrt3\\,x-10\\bigr).\n\\end{aligned}\n\\]\n\nThus the intersection points satisfy one of \n\n\\[\n\\begin{cases}\nx^{2}+\\sqrt3\\,x-4=0,\\\\[2pt]\n\\text{or}\\\\[2pt]\n3x^{2}-\\sqrt3\\,x-10=0 .\n\\end{cases}\n\\]\n\n--------------------------------------------------------------------\n### Selecting the point in the fourth quadrant\n\n*From* \\(x^{2}+\\sqrt3\\,x-4=0\\)\n\n\\[\nx=\\frac{-\\sqrt3\\pm\\sqrt{19}}{2}.\n\\]\n\nThe root \\(\\displaystyle x=\\frac{-\\sqrt3+\\sqrt{19}}{2}>0\\) gives \n\n\\[\ny=x^{2}-4=\\frac{11-\\sqrt{57}}{2}-4=\\frac{3-\\sqrt{57}}{2}<0,\n\\]\n\nso \\((x,y)\\) lies in the fourth quadrant.\n\n*From* \\(3x^{2}-\\sqrt3\\,x-10=0\\)\n\n\\[\nx=\\frac{\\sqrt3\\pm\\sqrt{123}}{6},\n\\]\n\nwhich yields either \\(y>0\\) (first root) or \\(x<0\\) (second root); neither point is in the fourth quadrant.\n\nHence the unique fourth\u2011quadrant intersection point is \n\n\\[\n\\Bigl(\\frac{-\\sqrt3+\\sqrt{19}}{2}\\,,\\; \\frac{3-\\sqrt{57}}{2}\\Bigr).\n\\]\n\n--------------------------------------------------------------------\n### Required \\(y\\)-coordinate\n\nThe \\(y\\)-coordinate is \\(\\displaystyle \\frac{3-\\sqrt{57}}{2}\\).\n\nWrite it as \\(\\frac{a-\\sqrt{b}}{c}\\) with \\(a,b,c\\) positive integers and \\(\\gcd(a,c)=1\\):\n\\[\na=3,\\qquad b=57,\\qquad c=2.\n\\]\n\nTherefore \n\n\\[\na+b+c = 3+57+2 = 62.\n\\]\n\n\\[\n\\boxed{62}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSix points $ A, B, C, D, E, $ and $ F $ lie in a straight line in that order. Suppose that $ G $ is a point not on the line and that $ AC = 26 $, $ BD = 22 $, $ CE = 31 $, $ DF = 33 $, $ AF = 73 $, $ CG = 40 $, and $ DG = 30 $. Find the area of $ \\triangle BGE $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let the line containing \\(A,B,C,D,E,F\\) be the \\(x\\)-axis.\n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(c,0),\\qquad D=(d,0),\\qquad \nE=(e,0),\\qquad F=(f,0)\n\\]\n\nBecause the points are in the order \\(A,B,C,D,E,F\\),\n\n\\[\nc-b=AC-AB,\\; d-b=BD,\\; e-c=CE,\\; f-d=DF,\\; f-0=AF.\n\\]\n\nTake \\(A\\) at the origin. From the data\n\n\\[\nAC=26\\implies c=26,\n\\]\n\\[\nBD=22\\implies d=b+22,\n\\]\n\\[\nCE=31\\implies e=c+31=57,\n\\]\n\\[\nDF=33\\implies f=d+33=b+55,\n\\]\n\\[\nAF=73\\implies f=73.\n\\]\n\nHence \\(b+55=73\\Rightarrow b=18\\). \nThus the coordinates are \n\n\\[\nB=(18,0),\\; C=(26,0),\\; D=(40,0),\\; E=(57,0),\\; F=(73,0).\n\\]\n\n---\n\n### Locate \\(G\\)\n\n\\(G\\) is off the line and satisfies \n\n\\[\nCG=40,\\qquad DG=30.\n\\]\n\nLet \\(G=(x,y)\\) with \\(y\\neq0\\). Then \n\n\\[\n(x-26)^2+y^{2}=40^{2}=1600,\\tag{1}\n\\]\n\\[\n(x-40)^2+y^{2}=30^{2}=900.\\tag{2}\n\\]\n\nSubtract (2) from (1):\n\n\\[\n(x-26)^2-(x-40)^2=700.\n\\]\n\nExpanding,\n\n\\[\n[x^{2}-52x+676]-[x^{2}-80x+1600]=28x-924=700,\n\\]\n\\[\n28x=1624\\quad\\Longrightarrow\\quad x=58.\n\\]\n\nPlugging \\(x=58\\) into (2):\n\n\\[\n(58-40)^{2}+y^{2}=900\\;\\Longrightarrow\\;18^{2}+y^{2}=900\n\\]\n\\[\ny^{2}=576\\;\\Longrightarrow\\;|y|=24.\n\\]\n\nSo \\(G=(58,\\,24)\\) (the point \\((58,-24)\\) gives the same area).\n\n---\n\n### Area of \\(\\triangle BGE\\)\n\nPoints \\(B\\) and \\(E\\) lie on the \\(x\\)-axis, so the base \\(BE\\) has length\n\n\\[\nBE = e-b = 57-18 = 39.\n\\]\n\nThe altitude from \\(G\\) to the line \\(BE\\) (the \\(x\\)-axis) is \\(|y| = 24\\).\n\nHence \n\n\\[\n\\text{Area} = \\frac12 \\times BE \\times \\text{height}\n= \\frac12 \\times 39 \\times 24 = 468.\n\\]\n\n\\[\n\\boxed{468}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nFind the sum of all positive integers $ n $ such that $ n + 2 $ divides the product $ 3(n + 3)(n^2 + 9) $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "We need the positive integers \\(n\\) such that \n\n\\[\nn+2\\mid 3(n+3)(n^{2}+9).\n\\]\n\n---\n\n### 1. Replace \\(n+2\\) by a new variable \n\nLet \n\n\\[\nk=n+2\\qquad (k\\ge 3), \\qquad n=k-2 .\n\\]\n\nThen \n\n\\[\n\\begin{aligned}\nn+3 &= (k-2)+3 = k+1,\\\\[2pt]\nn^{2}+9 &= (k-2)^{2}+9 = k^{2}-4k+13 .\n\\end{aligned}\n\\]\n\nHence \n\n\\[\n3(n+3)(n^{2}+9)=3(k+1)(k^{2}-4k+13).\n\\]\n\nThe condition becomes \n\n\\[\nk \\mid 3(k+1)(k^{2}-4k+13).\n\\]\n\n---\n\n### 2. Reduce modulo \\(k\\)\n\nModulo \\(k\\),\n\n\\[\nk+1\\equiv 1,\\qquad k^{2}-4k+13\\equiv 13,\n\\]\n\nbecause \\(k\\equiv 0\\) gives \\(k^{2}\\equiv 0\\) and \\(-4k\\equiv 0\\).\n\nThus \n\n\\[\n3(k+1)(k^{2}-4k+13)\\equiv 3\\cdot 1\\cdot 13=39 \\pmod{k}.\n\\]\n\nHence the divisibility condition is equivalent to \n\n\\[\nk\\mid 39.\n\\]\n\n---\n\n### 3. Find admissible \\(k\\) and corresponding \\(n\\)\n\nThe positive divisors of \\(39\\) are \\(1,3,13,39\\).\nSince \\(k=n+2\\ge 3\\), we keep \n\n\\[\nk\\in \\{3,13,39\\}.\n\\]\n\nTherefore \n\n\\[\nn=k-2\\in\\{1,11,37\\}.\n\\]\n\nAll three values satisfy the original condition (a quick check confirms the division).\n\n---\n\n### 4. Sum of all such \\(n\\)\n\n\\[\n1+11+37 = 49.\n\\]\n\n\\[\n\\boxed{49}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThe set of points in 3-dimensional coordinate space that lie in the plane $x+y+z=75$ whose coordinates satisfy the inequalities $x-yz0,\\qquad (75-x-2y)(1+x)>0 .\n\\tag{1}\n\\]\n\nDefine in the \\(xy\\)-plane the lines \n\n\\[\n\\begin{aligned}\nL_1 &: y=x,\\\\\nL_2 &: x+y=76,\\\\\nL_3 &: x=-1,\\\\\nL_4 &: x+2y=75\\;(y=(75-x)/2).\n\\end{aligned}\n\\]\n\nFrom (1) we obtain two possibilities for each product, giving four possible\nintersections of half\u2011planes. One of these intersections is empty; the other three\nare convex. The region for which both products in (1) are **positive** is\n\n\\[\n\\begin{cases}\ny>x,\\\\\nx+y<76,\\\\\ny<(75-x)/2,\\\\\nx>-1,\n\\end{cases}\n\\]\n\nwhich in the \\(xy\\)-plane is the interior of the triangle with vertices\n\n\\[\nA(-1,-1),\\qquad B(-1,38),\\qquad C(25,25).\n\\]\n\nThe other two regions are unbounded. Hence the finite region is this triangle.\n\n---\n\n### Area in the \\(xy\\)-plane\n\n\\[\n\\text{Area}_{xy}= \\frac12\\bigl|AB\\times AC\\bigr|\n =\\frac12\\bigl| (0,39)\\times (26,26)\\bigr|\n =\\frac12\\cdot1014 = 507 .\n\\]\n\n---\n\n### Area on the plane \\(x+y+z=75\\)\n\nThe plane is given by \\(z=75-x-y\\). Its area element satisfies \n\n\\[\ndS = \\sqrt{1+(\\partial_xz)^2+(\\partial_yz)^2}\\;dx\\,dy\n =\\sqrt{1+1+1}\\;dx\\,dy =\\sqrt3\\,dx\\,dy .\n\\]\n\nHence \n\n\\[\n\\text{Area}_{\\text{plane}} = \\sqrt3\\;\\text{Area}_{xy}\n = 507\\sqrt3 .\n\\]\n\nSo the area can be written as \\(a\\sqrt b\\) with \\(a=507,\\ b=3\\).\nTherefore \n\n\\[\na+b = 507+3 = 510 .\n\\]\n\n\\[\n\\boxed{510}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nA piecewise linear periodic function is defined by $f(x)=\\begin{cases}x&\\text{if }x\\in[-1,1)\\\\2-x&\\text{if }x\\in[1,3)\\end{cases}$ and $f(x+4)=f(x)$ for all real numbers $x$. The graph of $f(x)$ has the sawtooth pattern. The parabola $x=34y^2$ intersects the graph of $f(x)$ at finitely many points. The sum of the $y$-coordinates of these intersection points can be expressed in the form $\\frac{a+b\\sqrt{c}}{d}$, where $a,b,c,$ and $d$ are positive integers, $a,b,$ and $d$ have greatest common divisor equal to 1, and $c$ is not divisible by the square of any prime. Find $a+b+c+d$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The intersection points satisfy \n\n\\[\ny=f(x),\\qquad x=34y^{2}\\;( \\ge 0).\n\\]\n\nBecause \\(f\\) has period \\(4\\),\n\n\\[\nf(x)=\\begin{cases}\nx-4k ,&x\\in[-1+4k,\\,1+4k),\\\\[2mm]\n2+4k-x ,&x\\in[1+4k,\\,3+4k),\n\\end{cases}\\qquad k\\in\\mathbb Z .\n\\]\n\n--------------------------------------------------------------------\n### 1. Equations for the two linear pieces \n\n*Ascending piece* \\((x-4k)\\): \n\n\\[\ny=x-4k,\\qquad x=34y^{2}\n\\Longrightarrow 34y^{2}-y-4k=0. \\tag{1}\n\\]\n\n*Descending piece* \\((2+4k-x)\\): \n\n\\[\ny=2+4k-x,\\qquad x=34y^{2}\n\\Longrightarrow 34y^{2}+y-(2+4k)=0. \\tag{2}\n\\]\n\nBoth are quadratics in \\(y\\); each can give at most two real roots.\n\n--------------------------------------------------------------------\n### 2. Which integers \\(k\\) give admissible roots?\n\nBecause \\(|y|\\le 1\\) (the range of \\(f\\)), the roots must lie in \\([-1,1]\\).\n\n*For (1):* \nThe sum of the two roots equals \\(\\frac{1}{34}\\); the product is \\(-\\frac{4k}{34}\\). \nThe discriminant must be non\u2011negative:\n\n\\[\n\\Delta_1=1+544k\\ge 0\\Longrightarrow k\\ge0 .\n\\]\n\nFor a root to be in \\([-1,1)\\) we also need \n\n\\[\n-1\\le\\frac{1\\pm\\sqrt{1+544k}}{68}<1 .\n\\]\n\nThe last inequality forces \\(k\\le8\\). Hence (1) yields real admissible roots for \n\n\\[\nk=0,1,\\dots ,8 .\n\\]\n\nBoth roots are in \\([-1,1)\\) for each of these values.\n\n*For (2):* \n\\[\n\\Delta_2=273+544k\\ge0\\Longrightarrow k\\ge0 .\n\\]\n\nThe condition \\(-10\\). Then \\(s=20-9t\\) and\n\n\\[\nt^{2}=s^{2}-20=(20-9t)^{2}-20.\n\\]\n\nSolving,\n\n\\[\nt^{2}=380-360t+81t^{2}\n\\Longrightarrow 80t^{2}-360t+380=0\n\\Longrightarrow 4t^{2}-18t+19=0.\n\\]\n\nHence \n\n\\[\nt=\\frac{18\\pm\\sqrt{324-304}}{8}\n =\\frac{18\\pm2\\sqrt5}{8}\n =\\frac{9\\pm\\sqrt5}{4}.\n\\]\n\nIf the plus sign is taken, \\(t>\\frac{20}{9}\\) and \\(s=20-9t<0\\), impossible.\nThus \n\n\\[\nt=\\frac{9-\\sqrt5}{4},\n\\qquad\ns=20-9t=\\frac{9\\sqrt5-1}{4}.\n\\]\n\nConsequently \n\n\\[\nA_1A_2+A_1A_{11}=s=\\frac{9\\sqrt5-1}{4}.\n\\]\n\nWritten as \\(\\dfrac{m\\sqrt n-p}{q}\\) we have \n\n\\[\nm=9,\\;n=5,\\;p=1,\\;q=4,\n\\]\n\nso \n\n\\[\nm+n+p+q=9+5+1+4=19.\n\\]\n\n\\[\n\\boxed{19}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nAlex divides a disk into four quadrants with two perpendicular diameters intersecting at the center of the disk. He draws 25 more line segments through the disk, drawing each segment by selecting two points at random on the perimeter of the disk in different quadrants and connecting those two points. Find the expected number of regions into which these 27 line segments divide the disk.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Step 1. Regions created by chords**\n\nIf a circle already has \\(k\\) chords drawn in its interior, then a new chord\nadds one region for itself plus one extra region for every interior\nintersection it creates. \nThus for a set of \\(n\\) chords\n\n\\[\n\\text{# regions}=n+1+\\text{# interior intersection points.}\n\\]\n\nIn our problem we have \n\n* 2 fixed diameters (the two perpendicular ones), \n* 25 random chords.\n\nHence \\(n=27\\). \nWe only have to find the expected number \\(I\\) of interior intersection\npoints.\n\n\\[\nE[\\text{regions}]=27+1+E[I]=28+E[I].\n\\]\n\n--------------------------------------------------------------------\n\n**Step 2. Intersections involving the two diameters**\n\nLet the horizontal diameter be the line that separates the *upper* quadrants\n\\(Q_{1},Q_{2}\\) from the *lower* quadrants \\(Q_{3},Q_{4}\\).\n\nA random chord has its two endpoints in different quadrants.\nThe chord meets the horizontal diameter exactly when the endpoints lie in\ndifferent half\u2011planes, i.e. one endpoint is in \\(\\{Q_{1},Q_{2}\\}\\) and the\nother in \\(\\{Q_{3},Q_{4}\\}\\).\n\nFor the ordered pair of quadrants of a random chord there are \n\\(12\\) equally likely possibilities (the \\(4\\cdot 3\\) ordered pairs with\ndifferent quadrants). \nExactly \\(8\\) of them have the endpoints in opposite half\u2011planes, hence\n\n\\[\np_d=\\Pr(\\text{a random chord meets a given diameter})=\\frac{8}{12}=\n\\frac{2}{3}.\n\\]\n\nTherefore\n\n\\[\n\\boxed{\\text{Expected intersections of the 25 chords with one diameter}=25\\cdot\\frac23}\n\\]\n\nand with the two diameters together\n\n\\[\nE[I_{\\text{diameters}}]=2\\cdot25\\cdot\\frac23=\\frac{100}{3}.\n\\]\n\nThe two diameters intersect each other once, so add \\(1\\) more interior\nintersection.\n\n--------------------------------------------------------------------\n\n**Step 3. Intersections of two random chords**\n\nDenote the four endpoints by \n\\(\\alpha_1,\\alpha_2\\) (chord 1) and \\(\\beta_1,\\beta_2\\) (chord 2). \nAll four points are independent uniform on the circle.\n\nLet \n\n\\[\nA=\\{\\text{endpoints of chord 1 lie in different quadrants}\\},\\qquad \nB=\\{\\text{endpoints of chord 2 lie in different quadrants}\\}.\n\\]\n\n\\[\nP(A)=P(B)=\\frac34 .\n\\]\n\nTwo chords intersect iff the endpoints are interleaved on the circle,\ni.e. exactly one of \\(\\beta_1,\\beta_2\\) lies on the clockwise arc from\n\\(\\alpha_1\\) to \\(\\alpha_2\\).\n\nFix \\(\\alpha_1=x\\) and \\(\\alpha_2=y\\) (with \\(x\\neq y\\)).\nLet \\(I=(x,y)\\) be the clockwise arc from \\(x\\) to \\(y\\) and let\n\\(d=|I|\\) be its length. \nFor independent uniform \\(\\beta_1,\\beta_2\\),\n\n* the probability that exactly one lies in \\(I\\) is \\(2d(1-d)\\);\n* the probability that the two \\(\\beta\\)\u2019s are in *different* quadrants\n is \\(\\frac34\\).\n\nConditioning on the actual placement of the interval \\(I\\) with respect\nto the four quarter\u2011arcs yields (after a short computation)\n\n\\[\n\\Pr(\\beta_1,\\beta_2\\text{ satisfy both conditions}\\mid x,y)=\n2\\Bigl[d\\Bigl(\\tfrac34-d\\Bigr)+\\sum_{q=0}^{3}a_q^{\\,2}\\Bigr],\n\\tag{1}\n\\]\n\nwhere \\(a_q\\) is the length of the part of \\(I\\) that lies in quadrant\n\\(q\\).\n\nNow average (1) over all ordered pairs \\((x,y)\\) that are in different\nquadrants. By symmetry it suffices to place \\(x\\) in the first quadrant\n\\([0,\\tfrac14)\\) and let \\(y\\) run in the three other quadrants.\nCarrying out the integration (splitting the three possible clockwise\ndistances) gives\n\n\\[\n\\int\\!\\!\\int_{x\\in Q_0,\\;y\\in Q_m}\n2\\Bigl[d\\Bigl(\\tfrac34-d\\Bigr)+\\sum a_q^{\\,2}\\Bigr]\\,dy\\,dx\n =\\frac{17}{64}\\qquad(m=1,2,3\\text{ summed}).\n\\]\n\nThus\n\n\\[\nP(A\\cap B\\cap\\{\\text{the chords intersect}\\})=\\frac{17}{64}.\n\\]\n\nFinally\n\n\\[\np_r=\n\\Pr(\\text{intersection}\\mid A\\cap B)=\n\\frac{P(A\\cap B\\cap\\text{intersect})}{P(A)P(B)}\n=\\frac{17/64}{(3/4)^2}\n=\\frac{16}{9}\\cdot\\frac{17}{64}\n=\\frac{17}{36}.\n\\]\n\n--------------------------------------------------------------------\n\n**Step 4. Expected interior intersections**\n\n* Intersections of the two diameters: \\(1\\).\n* Intersections of the 25 random chords with the two diameters:\n \\(\\displaystyle \\frac{100}{3}\\).\n* Intersections among the 25 random chords:\n \\(\\displaystyle \\binom{25}{2}\\,p_r\n =300\\cdot\\frac{17}{36}= \\frac{425}{3}\\).\n\nHence\n\n\\[\nE[I]=1+\\frac{100}{3}+\\frac{425}{3}\n =1+\\frac{525}{3}=1+175=176.\n\\]\n\n--------------------------------------------------------------------\n\n**Step 5. Expected number of regions**\n\n\\[\nE[\\text{regions}]=27+1+E[I]=28+176=204.\n\\]\n\n--------------------------------------------------------------------\n\n\\[\n\\boxed{204}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nSuppose $ \\triangle ABC $ has angles $ \\angle BAC = 84^\\circ $, $ \\angle ABC = 60^\\circ $, and $ \\angle ACB = 36^\\circ $. Let $ D, E, $ and $ F $ be the midpoints of sides $ \\overline{BC} $, $ \\overline{AC} $, and $ \\overline{AB} $, respectively. The circumcircle of $ \\triangle DEF $ intersects $ \\overline{BD} $, $ \\overline{AE} $, and $ \\overline{AF} $ at points $ G, H, $ and $ J $, respectively. The points $ G, D, E, H, J, $ and $ F $ divide the circumcircle of $ \\triangle DEF $ into six minor arcs, as shown. Find $ \\widehat{DE} + 2 \\cdot \\widehat{HJ} + 3 \\cdot \\widehat{FG} $, where the arcs are measured in degrees.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\n\\triangle ABC\\qquad \n\\angle A=84^{\\circ},\\; \\angle B=60^{\\circ},\\; \\angle C=36^{\\circ}.\n\\]\n\nDenote \n\n\\[\nD,E,F \\text{ \u2013 the midpoints of }BC,CA,AB,\n\\]\n\\[\nG,H,J \\text{ \u2013 the second intersections of }BD,AE,AF\\text{ with the circumcircle of } \\triangle DEF .\n\\]\n\n--------------------------------------------------------------------\n### 1. The points \\(G,H,J\\) are the feet of the altitudes \n\nThe nine\u2011point circle of \\(\\triangle ABC\\) passes through the three midpoints \\(D,E,F\\) **and** through the three feet of the altitudes. \nBecause \n\n* \\(BD\\) lies on the side \\(BC\\), \n* \\(AE\\) lies on the side \\(CA\\), \n* \\(AF\\) lies on the side \\(AB\\),\n\nthe second intersection of each of these sides with the nine\u2011point circle must be the corresponding foot of an altitude:\n\n\\[\n\\begin{aligned}\nG&= \\text{foot from }A\\text{ onto }BC,\\\\[2mm]\nH&= \\text{foot from }B\\text{ onto }CA,\\\\[2mm]\nJ&= \\text{foot from }C\\text{ onto }AB .\n\\end{aligned}\n\\]\n\nThus \\(G,H,J\\) are the vertices of the orthic triangle.\n\n--------------------------------------------------------------------\n### 2. Arc \\(\\widehat{DE}\\)\n\nThe medial triangle \\(\\triangle DEF\\) is similar to \\(\\triangle ABC\\) (ratio \\(1\\!:\\!2\\)). \nConsequently \n\n\\[\n\\angle DFE = \\angle C = 36^{\\circ}.\n\\]\n\nFor any inscribed angle, the intercepted minor arc is twice the angle; hence \n\n\\[\n\\widehat{DE}=2\\angle DFE = 2\\cdot 36^{\\circ}=72^{\\circ}.\n\\]\n\n--------------------------------------------------------------------\n### 3. Arc \\(\\widehat{FG}\\)\n\nSince \\(D\\) and \\(G\\) both lie on side \\(BC\\), the chord \\(DG\\) is a part of \\(BC\\). \nThe chord \\(DF\\) joins the midpoints of \\(AB\\) and \\(BC\\); by the Midpoint Theorem \n\n\\[\nDF \\parallel AC .\n\\]\n\nTherefore \n\n\\[\n\\angle FDG =\\angle (\\text{line }DF,\\text{ line }DG)\n =\\angle (AC,BC)=\\angle C=36^{\\circ}.\n\\]\n\nThus \n\n\\[\n\\widehat{FG}=2\\angle FDG = 2\\cdot 36^{\\circ}=72^{\\circ}.\n\\]\n\n--------------------------------------------------------------------\n### 4. Arc \\(\\widehat{HJ}\\)\n\n\\(H,J,G\\) are the vertices of the orthic triangle. \nA standard fact about the orthic triangle is that its angles are \n\n\\[\n\\angle HGJ = 180^{\\circ}-2\\angle A,\\qquad\n\\angle GJH = 180^{\\circ}-2\\angle B,\\qquad\n\\angle JHG = 180^{\\circ}-2\\angle C .\n\\]\n\n(The fact follows from simple angle\u2011chasing with the right\u2011angles at the feet of the altitudes.)\n\nHence the minor arc opposite \\(G\\) \u2013 that is, \\(\\widehat{HJ}\\) \u2013 satisfies \n\n\\[\n\\widehat{HJ}=2\\angle HGJ =2\\bigl(180^{\\circ}-2A\\bigr)\n =360^{\\circ}-4A.\n\\]\n\nWith \\(\\angle A =84^{\\circ}\\),\n\n\\[\n\\widehat{HJ}=360^{\\circ}-4\\cdot84^{\\circ}=24^{\\circ}.\n\\]\n\n--------------------------------------------------------------------\n### 5. Required sum\n\n\\[\n\\begin{aligned}\n\\widehat{DE}+2\\widehat{HJ}+3\\widehat{FG}\n&= 72^{\\circ}+2\\cdot24^{\\circ}+3\\cdot72^{\\circ}\\\\\n&= 72^{\\circ}+48^{\\circ}+216^{\\circ}\\\\[2mm]\n&= 336^{\\circ}.\n\\end{aligned}\n\\]\n\n--------------------------------------------------------------------\n\\[\n\\boxed{336}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ \\triangle ABC $ be a right triangle with $ \\angle A = 90^\\circ $ and $ BC = 38 $. There exist points $ K $ and $ L $ inside the triangle such that $ AK = AL = BK = CL = KL = 14. $ The area of the quadrilateral $ BKLC $ can be expressed as $ n \\sqrt{3} $ for some positive integer $ n $. Find $ n $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\n\\angle A =90^\\circ ,\\qquad BC =38 .\n\\]\n\nPlace \n\n\\[\nA=(0,0),\\qquad B=(b,0),\\qquad C=(0,c)\n\\]\n\nso that the legs are \n\n\\[\nAB=b,\\qquad AC=c,\\qquad b^{2}+c^{2}=38^{2}=1444 .\n\\tag{1}\n\\]\n\n--------------------------------------------------------------------\n### 1. Coordinates of \\(K\\) and \\(L\\)\n\nBecause \n\n\\[\nAK=BK=14,\n\\]\n\n\\(K\\) lies on the perpendicular bisector of \\(\\overline{AB}\\); hence \n\n\\[\nK=\\Bigl(\\frac b2,\\;\\sqrt{14^{2}-\\Bigl(\\frac b2\\Bigr)^{2}}\\Bigr)\n =\\bigl( X,\\;U\\bigr)\n\\]\n\nwith \n\n\\[\nX=\\frac b2,\\qquad U=\\sqrt{196-X^{2}} .\\tag{2}\n\\]\n\nSimilarly \n\n\\[\nAL=CL=14\\Longrightarrow \nL=\\Bigl(\\sqrt{196-\\Bigl(\\frac c2\\Bigr)^{2}},\\;\\frac c2\\Bigr)\n =(V,Y),\\qquad \nY=\\frac c2,\\;V=\\sqrt{196-Y^{2}} .\\tag{3}\n\\]\n\nThus \n\n\\[\nX^{2}+Y^{2}= \\frac{b^{2}+c^{2}}{4}\n =\\frac{1444}{4}=361 .\\tag{4}\n\\]\n\n--------------------------------------------------------------------\n### 2. The equilateral triangle \\(AKL\\)\n\nAll three sides of \\(\\triangle AKL\\) equal \\(14\\), so \\(\\angle KAL=60^\\circ\\).\nUsing the vectors \\(\\overrightarrow{AK}=(X,U)\\) and \\(\\overrightarrow{AL}=(V,Y)\\),\n\n\\[\n\\overrightarrow{AK}\\cdot\\overrightarrow{AL}=|AK||AL|\\cos 60^\\circ\n\\Longrightarrow\nXV+YU=98 .\\tag{5}\n\\]\n\nFrom (2)\u2013(5) we have the system\n\n\\[\n\\begin{cases}\nX^{2}+Y^{2}=361,\\\\[2pt]\nX\\sqrt{196-Y^{2}}+Y\\sqrt{196-X^{2}}=98 .\n\\end{cases}\n\\]\n\n--------------------------------------------------------------------\n### 3. Solving the system\n\nSet \n\n\\[\nX=14\\cos\\alpha ,\\qquad U=14\\sin\\alpha ,\\qquad \nY=14\\cos\\beta ,\\qquad V=14\\sin\\beta .\n\\]\n\nThen (5) becomes \n\n\\[\n14^{2}\\bigl(\\cos\\alpha\\sin\\beta+\\cos\\beta\\sin\\alpha\\bigr)\n =196\\sin(\\alpha+\\beta)=98,\n\\]\n\nhence \n\n\\[\n\\sin(\\alpha+\\beta)=\\frac12\\Longrightarrow\\alpha+\\beta=\\frac{\\pi}{6}\\;(30^\\circ). \\tag{6}\n\\]\n\nFrom \\(X^{2}+Y^{2}=361\\),\n\n\\[\n196\\bigl(\\cos^{2}\\alpha+\\cos^{2}\\beta\\bigr)=361\n\\Longrightarrow\n\\cos^{2}\\alpha+\\cos^{2}\\beta= \\frac{361}{196}=1+\\frac{165}{196}.\n\\]\n\nUsing \\(\\cos^{2}\\alpha+\\cos^{2}\\beta=\n1+\\cos(\\alpha+\\beta)\\cos(\\alpha-\\beta)\\) gives \n\n\\[\n\\cos\\frac{\\pi}{6}\\,\\cos(\\alpha-\\beta)=\\frac{165}{196}\n\\Longrightarrow\n\\cos(\\alpha-\\beta)=\\frac{165}{98\\sqrt3}\n =\\frac{55\\sqrt3}{98}.\n\\]\n\nHence \n\n\\[\n\\sin(\\alpha-\\beta)=\\sqrt{1-\\Bigl(\\frac{55\\sqrt3}{98}\\Bigr)^{2}}\n =\\frac{23}{98}.\n\\]\n\nNow compute \\(\\cos\\alpha\\) and \\(\\cos\\beta\\):\n\\[\n\\cos\\alpha=\\sqrt{\\frac{1+\\cos(\\alpha+\\beta)}{2}}\n =\\sqrt{\\frac{1+\\frac{71}{98}}{2}}\n =\\frac{13}{14},\n\\qquad\n\\cos\\beta =\\sqrt{\\frac{1+\\cos(\\alpha-\\beta)}{2}}\n =\\sqrt{\\frac{1+\\frac{47}{49}}{2}}\n =\\frac{4\\sqrt3}{7}.\n\\]\n\nTherefore \n\n\\[\nX=14\\cos\\alpha =13,\\qquad \nY=14\\cos\\beta =8\\sqrt3 .\n\\]\n\nConsequently \n\n\\[\nb=2X=26,\\qquad c=2Y=16\\sqrt3 .\n\\]\n\nOne easily checks that \\(b^{2}+c^{2}=26^{2}+ (16\\sqrt3)^{2}=1444\\), i.e. \\(BC=38\\).\n\n--------------------------------------------------------------------\n### 4. Area of \\(BKLC\\)\n\nThe right\u2011triangle \\(ABC\\) has area \n\n\\[\n[ABC]=\\frac12\\,b\\,c\n =\\frac12\\cdot26\\cdot16\\sqrt3\n =208\\sqrt3 .\n\\]\n\nThe three small triangles cut off by \\(K\\) and \\(L\\) have areas \n\n\\[\n\\begin{aligned}\n[ABK]&=\\frac12\\cdot b\\cdot U\n =\\frac12\\cdot26\\cdot3\\sqrt3=39\\sqrt3,\\\\[2pt]\n[ALC]&=\\frac12\\cdot c\\cdot V\n =\\frac12\\cdot16\\sqrt3\\cdot2=16\\sqrt3,\\\\[2pt]\n[AKL]&=\\frac{\\sqrt3}{4}\\cdot14^{2}=49\\sqrt3 .\n\\end{aligned}\n\\]\n\nThus\n\n\\[\n\\begin{aligned}\n[BKLC] &=[ABC]-[ABK]-[ALC]-[AKL]\\\\\n &=208\\sqrt3-(39\\sqrt3+16\\sqrt3+49\\sqrt3)\\\\\n &=104\\sqrt3 .\n\\end{aligned}\n\\]\n\nHence the area of \\(BKLC\\) is \\(n\\sqrt3\\) with \n\n\\[\n\\boxed{n=104}.\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet the sequence of rationals $ x_1, x_2, \\ldots $ be defined such that $ x_1 = \\frac{25}{11} $ and\n$ x_{k+1} = \\frac{1}{3} \\left( x_k + \\frac{1}{x_k} - 1 \\right). $\n$ x_{2025} $ can be expressed as $ \\frac{m}{n} $ for relatively prime positive integers $ m $ and $ n $. Find the remainder when $ m + n $ is divided by 1000.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution**\n\n\\[\nx_{k+1}= \\frac13\\Bigl(x_k+\\frac1{x_k}-1\\Bigr),\\qquad \nx_1=\\frac{25}{11}\n\\]\n\nWrite each term as a reduced fraction \n\n\\[\nx_k=\\frac{p_k}{q_k},\\qquad \\gcd(p_k,q_k)=1 .\n\\]\n\nThen \n\n\\[\nx_{k+1}= \\frac{p_k^2+q_k^2-p_kq_k}{3p_kq_k}\n =\\frac{p_{k+1}}{q_{k+1}}\n\\]\n\nwhere \n\n\\[\np_{k+1}= \\frac{p_k^2+q_k^2-p_kq_k}{3},\n\\qquad \nq_{k+1}=p_kq_k . \\tag{1}\n\\]\n\n(The numerator is always divisible by \\(3\\); one checks that\n\\(\\gcd(p_{k+1},q_{k+1})=1\\) for every \\(k\\).)\n\n--------------------------------------------------------------------\n### 1. A simple recurrence for the sum \n\nLet \n\n\\[\ns_k=p_k+q_k .\n\\]\n\nAdding the two formulas in (1),\n\n\\[\n\\begin{aligned}\ns_{k+1}&=p_{k+1}+q_{k+1}\n =\\frac{p_k^2+q_k^2-p_kq_k}{3}+p_kq_k \\\\\n &=\\frac{p_k^2+2p_kq_k+q_k^2}{3}\n =\\frac{(p_k+q_k)^2}{3}\n =\\frac{s_k^{\\,2}}{3}.\n\\end{aligned}\n\\]\n\nThus \n\n\\[\ns_{k+1}= \\frac{s_k^{\\,2}}{3},\\qquad s_1=p_1+q_1=25+11=36.\n\\tag{2}\n\\]\n\n--------------------------------------------------------------------\n### 2. Closed form\n\nSet \\(t_k=s_k/3\\). From (2)\n\n\\[\nt_{k+1}=t_k^{\\,2},\\qquad t_1=\\frac{36}{3}=12 .\n\\]\n\nHence \n\n\\[\nt_k=12^{\\,2^{\\,k-1}},\\qquad \ns_k=3t_k=3\\cdot 12^{\\,2^{\\,k-1}} . \\tag{3}\n\\]\n\nTherefore \n\n\\[\np_{2025}+q_{2025}=s_{2025}=3\\cdot 12^{\\,2^{2024}} .\n\\]\n\n--------------------------------------------------------------------\n### 3. Computing the last three digits \n\nWe need \n\n\\[\nM=3\\cdot 12^{\\,2^{2024}}\\pmod{1000}.\n\\]\n\nBecause \\(1000=8\\cdot125\\) we compute the two residues separately.\n\n*Modulo \\(8\\)* \n\n\\(12\\equiv4\\pmod8\\) and \\(4^{2}=0\\pmod8\\). \nSince the exponent \\(2^{2024}\\ge2\\),\n\n\\[\n12^{\\,2^{2024}}\\equiv0\\pmod8 .\n\\]\n\nHence \\(M\\equiv0\\pmod8\\).\n\n*Modulo \\(125\\)* \n\n\\(\\gcd(12,125)=1\\) and \\(\\varphi(125)=100\\), so \n\\(12^{100}\\equiv1\\pmod{125}\\). \nThus only the exponent modulo \\(100\\) matters:\n\n\\[\ne=2^{2024}\\pmod{100}.\n\\]\n\nFor \\(n\\ge2\\) the powers of \\(2\\) modulo \\(100\\) have period \\(20\\):\n\\(2^{n+20}\\equiv2^n\\pmod{100}\\).\nSince \\(2024\\equiv4\\pmod{20}\\),\n\n\\[\ne\\equiv2^{4}=16\\pmod{100}.\n\\]\n\nNow compute \\(12^{16}\\pmod{125}\\):\n\n\\[\n\\begin{aligned}\n12^{2}&\\equiv144\\equiv19,\\\\\n12^{4}&\\equiv19^{2}=361\\equiv111,\\\\\n12^{8}&\\equiv111^{2}=12321\\equiv71,\\\\\n12^{16}&\\equiv71^{2}=5041\\equiv41\\pmod{125}.\n\\end{aligned}\n\\]\n\nHence \n\n\\[\n12^{\\,2^{2024}}\\equiv41\\pmod{125}.\n\\]\n\n*Chinese remainder theorem* \n\nFind \\(A\\) such that \n\n\\[\nA\\equiv0\\pmod8,\\qquad A\\equiv41\\pmod{125}.\n\\]\n\nWrite \\(A=8k\\). Then \\(8k\\equiv41\\pmod{125}\\Rightarrow\nk\\equiv41\\cdot8^{-1}\\pmod{125}\\).\nSince \\(8^{-1}\\equiv47\\pmod{125}\\),\n\n\\[\nk\\equiv41\\cdot47\\equiv52\\pmod{125},\n\\]\nso \\(k=52+125t\\) and \n\n\\[\nA=8k=416+1000t\\equiv416\\pmod{1000}.\n\\]\n\nFinally \n\n\\[\nM=3A\\equiv3\\cdot416=1248\\equiv\\boxed{248}\\pmod{1000}.\n\\]\n\nThus the remainder of \\(m+n\\) when divided by \\(1000\\) is **248**.", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nThere are exactly three positive real numbers $ k $ such that the function\n$ f(x) = \\frac{(x - 18)(x - 72)(x - 98)(x - k)}{x} $\ndefined over the positive real numbers achieves its minimum value at exactly two positive real numbers $ x $. Find the sum of these three values of $ k $.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "Let \n\n\\[\nf_k(x)=\\frac{(x-18)(x-72)(x-98)(x-k)}{x}= \\frac{N(x)}{x},\\qquad x>0 ,\n\\]\n\nwhere \n\n\\[\nN(x)=(x-18)(x-72)(x-98)(x-k)\n =x^{4}-(188+k)x^{3}+(10116+188k)x^{2}-(127008+10116k)x+127008k .\n\\]\n\n--------------------------------------------------------------------\n### 1. What does \u201cthe minimum is attained at exactly two points\u2019\u2019 mean?\n\nIf the global minimum value is \\(m\\), then for every \\(x>0\\)\n\n\\[\n\\frac{N(x)}{x}\\ge m\\qquad\\Longleftrightarrow\\qquad N(x)-mx\\ge0 .\n\\]\n\nEquality occurs exactly at the points where the minimum is attained.\nSince \\(N(x)-mx\\) is a quartic polynomial, the only way it can be\nnon\u2011negative for all \\(x\\) and vanish at exactly two distinct points is\n\n\\[\nN(x)-mx=(x-a)^{2}(x-b)^{2}\\qquad(a\\neq b,\\;a,b>0).\n\\]\n\nThus there are numbers \\(a,b,m\\) such that \n\n\\[\n\\begin{cases}\nN(a)=ma,\\quad N'(a)=m,\\\\[2pt]\nN(b)=mb,\\quad N'(b)=m .\n\\end{cases}\n\\]\n\n--------------------------------------------------------------------\n### 2. Coefficient comparison\n\nWrite\n\n\\[\n(x-a)^{2}(x-b)^{2}=(x^{2}-Sx+P)^{2},\n\\qquad\nS=a+b,\\;P=ab .\n\\]\n\nEquating coefficients of \\(N(x)-mx\\) and \\((x^{2}-Sx+P)^{2}\\) yields \n\n\\[\n\\begin{aligned}\nS&=\\frac{188+k}{2},\\tag{1}\\\\[2pt]\nS^{2}+2P&=10116+188k,\\tag{2}\\\\[2pt]\n2SP&=127008+10116k+m,\\tag{3}\\\\[2pt]\nP^{2}&=127008\\,k.\\tag{4}\n\\end{aligned}\n\\]\n\nFrom (1) and (4)\n\n\\[\nS=\\frac{188+k}{2},\\qquad P=\\sqrt{127008\\,k}.\n\\]\n\nInsert these in (2):\n\n\\[\n\\frac{(188+k)^{2}}{4}+2\\sqrt{127008\\,k}=10116+188k .\n\\]\n\nMultiplying by \\(4\\) and using \\(\\sqrt{127008}=252\\sqrt2\\) gives \n\n\\[\nk^{2}-376k-5120+2016\\sqrt{2k}=0. \\tag{5}\n\\]\n\n--------------------------------------------------------------------\n### 3. Solving for \\(k\\)\n\nSet \\(u=\\sqrt{k}>0\\). Then \\(\\sqrt{2k}=u\\sqrt2\\) and (5) becomes \n\n\\[\nu^{4}-376u^{2}+2016\\sqrt2\\,u-5120=0 .\n\\]\n\nWrite \\(u=a\\sqrt2\\;(a>0)\\); the equation reduces to \n\n\\[\na^{4}-188a^{2}+1008a-1280=0 .\n\\]\n\nFactoring,\n\n\\[\n(a^{2}-6a+8)(a^{2}+6a-160)=0,\n\\]\n\nso \n\n\\[\na=2,\\;4,\\;10\\quad(\\text{the root }a=-16\\text{ gives }u<0\\text{ and is discarded}).\n\\]\n\nSince \\(k=u^{2}=2a^{2}\\),\n\n\\[\nk=2\\cdot2^{2}=8,\\qquad\nk=2\\cdot4^{2}=32,\\qquad\nk=2\\cdot10^{2}=200 .\n\\]\n\nFor each of these values the discriminant \n\n\\[\n\\Delta=S^{2}-4P>0\n\\]\n\nso the quadratic \\(x^{2}-Sx+P\\) has two distinct positive roots; consequently\n\\(f_{k}(x)\\) attains its global minimum at exactly those two points.\n\n--------------------------------------------------------------------\n### 4. Sum of the admissible \\(k\\)\n\n\\[\n8+32+200 = 240 .\n\\]\n\n\\[\n\\boxed{240}\n\\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $N$ denote the number of ordered triples of positive integers $(a,b,c)$ such that $a,b,c\\leq3^6$ and $a^3+b^3+c^3$ is a multiple of $3^7$. Find the remainder when $N$ is divided by $1000$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "**Solution Outline**\n\n1. Let \\(M=3^{7}=2187\\) and \\(A=\\{1,\\ldots ,3^{6}\\}= \\{1,\\dots ,729\\}\\).\n For each \\(a\\in A\\) put \\(r(a)=a^{3}\\pmod{M}\\).\n The required number \n\n \\[\n N=\\#\\{(a,b,c)\\in A^{3}:r(a)+r(b)+r(c)\\equiv0\\pmod M\\}\n \\]\n\n is the weighted convolution of the distribution of the residues\n \\(r(a)\\).\n\n2. Write each \\(a\\) as \\(a=3^{v}a'\\) with \\(\\gcd(a',3)=1\\).\n\n| \\(v\\) | range of \\(a\\) | # of such \\(a\\) | residue \\(a^{3}\\) (mod\u202f\\(M\\)) | weight |\n|-------|----------------|-----------------|-------------------------------|--------|\n| 0 | not divisible by 3 | \\(486\\) | \\(a^{\\prime\\,3}\\) (unit cube) | \\(1\\) |\n| 1 | \\(3\\mid a,9\\nmid a\\) | \\(162\\) | \\(27a^{\\prime\\,3}\\) | \\(9\\) |\n| 2 | \\(9\\mid a,27\\nmid a\\) | \\(54\\) | \\(729a^{\\prime\\,3}\\) | \\(27\\) |\n| \\(\\ge3\\) | \\(27\\mid a\\) | \\(27\\) | \\(0\\) | \\(27\\)\n\nHence the possible residues and their multiplicities are \n\n* 0\u2003\u2003\u2003\u2003\u2003\u2003weight\u202f\\(27\\);\n* the two residues \\(729,\\,1458\\)\u2003weight\u202f\\(27\\) each;\n* 18 residues (the cubes of the unit group modulo\u202f\\(81\\))\u2003weight\u202f\\(9\\) each;\n* 486 residues (the cubes of the unit group modulo\u202f\\(3^{7}\\))\u2003weight\u202f\\(1\\) each.\n\nDenote by \n\n* \\(D\\) the 486 unit\u2011cube residues (weight\u202f1);\n* \\(C\\) the 18 residues \\(27\\cdot u\\) with \\(u\\) a unit\u2011cube modulo\u202f\\(81\\) (weight\u202f9);\n* \\(B\\) the two residues \\(729,1458\\) (weight\u202f27);\n* \\(0\\) the zero residue (weight\u202f27).\n\n3. Split the count according to how many zero\u2011terms occur.\n Let \n\n \\[\n w(x)=\\text{weight of residue }x.\n \\]\n\n For \\(x\\neq0\\) put \\(R'=\\{D\\cup C\\cup B\\}\\). Then\n\n \\[\n N=N_{0}+N_{1}+N_{2},\n \\]\n\n where \n\n * \\(N_{2}=w(0)^{3}=27^{3}=19683\\) (all three residues zero);\n * \\(N_{1}=3\\,w(0)\\displaystyle\\sum_{\\substack{y+z\\equiv0\\\\y,z\\in R'}}\n w(y)w(z) =3\\cdot27\\cdot3402=275\\,562\\);\n * \\(N_{0}\\) counts triples with no zero term.\n\n The sum in \\(N_{1}\\) is obtained easily:\n each \\(x\\in D\\) pairs with its inverse, giving \\(486\\) ordered pairs,\n each \\(x\\in C\\) gives \\(18\\) ordered pairs (weight \\(9^{2}=81\\)), and each\n \\(x\\in B\\) gives \\(2\\) ordered pairs (weight \\(27^{2}=729\\)).\n Hence \\(\\displaystyle\\sum_{y+z\\equiv0}w(y)w(z)=486+1458+1458=3402\\).\n\n4. Compute \\(N_{0}\\).\n After factoring the common factor \\(27\\) from the elements of \\(C\\cup B\\),\n the condition \\(x+y+z\\equiv0\\pmod{M}\\) becomes\n\n \\[\n u+v+w\\equiv0\\pmod{81},\n \\]\n\n where \\(u,v,w\\) belong to \n\n * the set \\(S\\) of the 18 unit\u2011cubes modulo\u202f\\(81\\) (weight\u202f9);\n * the two residues \\(27,54\\) (weight\u202f27).\n\n For the set \\(S\\) one has the simple description \n\n \\[\n S=\\{x\\pmod{81}:x\\equiv\\pm1\\pmod9\\}.\n \\]\n\n Using this description we compute the additive convolution on \\(\\mathbb Z/81\\).\n\n * For any \\(t\\equiv0\\pmod9\\) we have \\(\\#\\{(s_{1},s_{2})\\in S^{2}:s_{1}+s_{2}\\equiv t\\}=18\\).\n * For any \\(t\\equiv\\pm2\\pmod9\\) the count equals \\(9\\).\n * For any other residue the count is \\(0\\).\n\n Consequently\n\n * there are no triples \\(s_{1}+s_{2}+s_{3}\\equiv0\\) with all three from \\(S\\);\n * ordered triples with exactly one element from \\(\\{27,54\\}\\) and two from \\(S\\) are possible.\n For each of the two choices \\(\\{27,54\\}\\) there are\n \\((A*A)(27)=(A*A)(54)=18\\) ordered pairs from \\(S\\); \n with three possible positions for the \u201c\\(B\\)\u2019\u2019 element we obtain \n\n \\[\n 2\\cdot3\\cdot18=108\n \\]\n\n ordered triples. Their weight is \\(27\\cdot9^{2}=2187\\), giving a contribution \n\n \\[\n 108\\cdot2187=236\\,196 .\n \\]\n\n * triples consisting only of the two \u201c\\(B\\)\u201d residues satisfy the condition\n only when all three are equal, giving two ordered triples,\n each of weight \\(27^{3}=19683\\); contribution \n\n \\[\n 2\\cdot19683=39\\,366 .\n \\]\n\n Adding these contributions:\n\n \\[\n N_{0}=236\\,196+39\\,366=275\\,562 .\n \\]\n\n5. Assemble all parts:\n\n \\[\n N=N_{0}+N_{1}+N_{2}=275\\,562+275\\,562+19\\,683=570\\,807 .\n \\]\n\n6. The required remainder is \n\n \\[\n N\\bmod1000 = 570\\,807\\bmod1000 = \\boxed{807}.\n \\]", + "role": "assistant" + } + ], + [ + { + "role": "user", + "content": "\nLet $ABCDE$ be a convex pentagon with $AB=14, BC=7, CD=24, DE=13, EA=26,$ and $\\angle B=\\angle E=60^\\circ$. For each point $X$ in the plane, define $f(X)=AX+BX+CX+DX+EX$. The least possible value of $f(X)$ can be expressed as $m+n\\sqrt{p}$, where $m$ and $n$ are positive integers and $p$ is not divisible by the square of any prime. Find $m+n+p$.\nPlease reason step by step, and put your final answer within \\boxed{}.\n" + }, + { + "content": "The minimum value of \\(f(X)\\) works out to be \n\n\\[\nf_{\\min}=18+20\\sqrt7 .\n\\]\n\nThus \\(m=18,\\; n=20,\\; p=7\\) and \n\n\\[\nm+n+p = 18+20+7 = 45 .\n\\]\n\n\\[\n\\boxed{45}\n\\]", + "role": "assistant" + } + ] + ], + "metadata": { + "example_level_metadata": [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ] + } +} \ No newline at end of file diff --git a/benches/dgx-spark.md b/benches/dgx-spark/dgx-spark.md similarity index 100% rename from benches/dgx-spark.md rename to benches/dgx-spark/dgx-spark.md diff --git a/benches/dgx-spark/run-aime-120b-t8-x8-high.log b/benches/dgx-spark/run-aime-120b-t8-x8-high.log new file mode 100644 index 0000000000..5c5e2c5c96 --- /dev/null +++ b/benches/dgx-spark/run-aime-120b-t8-x8-high.log @@ -0,0 +1,11 @@ +nohup: ignoring input +Running with args Namespace(model='openai/gpt-oss-120b', reasoning_effort='high', sampler='chat_completions', base_url='http://localhost:8066/v1', eval='aime25', temperature=1.0, n_threads=8, debug=False, examples=None) + +Running the following evals: {'aime25': } +Running evals for the following models: {'openai/gpt-oss-120b-high': } + 0%| | 0/240 [00:00 Date: Mon, 10 Nov 2025 10:19:39 +0100 Subject: [PATCH 46/69] cuda/vulkan : bicubic interpolation (#17022) * vulkan : implement upscale with bicubic interpolation * cuda : implement upscale with bicubic interpolation * tests : add ggml_interpolate with GGML_SCALE_MODE_BICUBIC to backend tests * adapt OpenCL backend to not support the OP in that case so tests don't fail * print scale mode & flags in test-backend-ops --- ggml/src/ggml-cuda/upscale.cu | 93 +++++++++++++++++-- ggml/src/ggml-opencl/ggml-opencl.cpp | 7 +- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 5 +- .../ggml-vulkan/vulkan-shaders/upscale.comp | 37 ++++++++ tests/test-backend-ops.cpp | 21 +++-- 5 files changed, 148 insertions(+), 15 deletions(-) diff --git a/ggml/src/ggml-cuda/upscale.cu b/ggml/src/ggml-cuda/upscale.cu index 35b7e61d80..687c669304 100644 --- a/ggml/src/ggml-cuda/upscale.cu +++ b/ggml/src/ggml-cuda/upscale.cu @@ -81,6 +81,70 @@ static __global__ void upscale_f32_bilinear(const float * x, float * dst, dst[index] = result; } +namespace bicubic_interpolation { +// https://en.wikipedia.org/wiki/Bicubic_interpolation#Bicubic_convolution_algorithm +__device__ const float a = -0.75f; // use alpha = -0.75 (same as PyTorch) + +static __device__ float weight1(float x) { return ((a + 2) * x - (a + 3)) * x * x + 1; }; +static __device__ float weight2(float x) { return ((a * x - 5 * a) * x + 8 * a) * x - 4 * a; }; + +static __device__ float bicubic(float p0, float p1, float p2, float p3, float x) { + const float w0 = weight2(x + 1); + const float w1 = weight1(x + 0); + const float w2 = weight1(1 - x); + const float w3 = weight2(2 - x); + return p0 * w0 + p1 * w1 + p2 * w2 + p3 * w3; +}; +} // namespace bicubic_interpolation + +static __global__ void upscale_f32_bicubic(const float * x, float * dst, + const int nb00, const int nb01, const int nb02, const int nb03, + const int ne00_src, const int ne01_src, + const int ne10_dst, const int ne11_dst, const int ne12_dst, const int ne13_dst, + const float sf0, const float sf1, const float sf2, const float sf3, + const float pixel_offset) { + using bicubic_interpolation::bicubic; + + const int64_t index = threadIdx.x + blockIdx.x * blockDim.x; + const int64_t dst_total_elements = ne10_dst * ne11_dst * ne12_dst * ne13_dst; + + if (index >= dst_total_elements) { + return; + } + + const int i10_dst = index % ne10_dst; + const int i11_dst = (index / ne10_dst) % ne11_dst; + const int i12_dst = (index / (ne10_dst * ne11_dst)) % ne12_dst; + const int i13_dst = index / (ne10_dst * ne11_dst * ne12_dst); + + const int i02_src = (int)(i12_dst / sf2); + const int i03_src = (int)(i13_dst / sf3); + + const float y_src_f = ((float)i11_dst + pixel_offset) / sf1 - pixel_offset; + const int y0_src = (int)floorf(y_src_f); + const float dy = y_src_f - (float)y0_src; + + const float x_src_f = ((float)i10_dst + pixel_offset) / sf0 - pixel_offset; + const int x0_src = (int)floorf(x_src_f); + const float dx = x_src_f - (float)x0_src; + + const char * x_base = (const char *)x + (int64_t)i02_src * nb02 + (int64_t)i03_src * nb03; + + auto load = [=](int x_off, int y_off) -> float { + int i00_src = max(0, min(x0_src + x_off, ne00_src - 1)); + int i01_src = max(0, min(y0_src + y_off, ne01_src - 1)); + return *(const float *)(x_base + (int64_t)i00_src * nb00 + (int64_t)i01_src * nb01); + }; + + const float result = bicubic( + bicubic(load(-1,-1), load(0,-1), load(1,-1), load(2,-1), dx), + bicubic(load(-1, 0), load(0, 0), load(1, 0), load(2, 0), dx), + bicubic(load(-1, 1), load(0, 1), load(1, 1), load(2, 1), dx), + bicubic(load(-1, 2), load(0, 2), load(1, 2), load(2, 2), dx), dy); + + dst[index] = result; +} + static void upscale_f32_cuda(const float * x, float * dst, const int nb00, const int nb01, const int nb02, const int nb03, const int ne10, const int ne11, const int ne12, const int ne13, @@ -104,6 +168,18 @@ static void upscale_f32_bilinear_cuda(const float * x, float * dst, upscale_f32_bilinear<<>>(x, dst, nb00, nb01, nb02, nb03, ne00_src, ne01_src, ne10_dst, ne11_dst, ne12_dst, ne13_dst, sf0, sf1, sf2, sf3, pixel_offset); } +static void upscale_f32_bicubic_cuda(const float * x, float * dst, + const int nb00, const int nb01, const int nb02, const int nb03, + const int ne00_src, const int ne01_src, + const int ne10_dst, const int ne11_dst, const int ne12_dst, const int ne13_dst, + const float sf0, const float sf1, const float sf2, const float sf3, + const float pixel_offset, cudaStream_t stream) { + const int64_t dst_size = ne10_dst * ne11_dst * ne12_dst * ne13_dst; + const int64_t num_blocks = (dst_size + CUDA_UPSCALE_BLOCK_SIZE - 1) / CUDA_UPSCALE_BLOCK_SIZE; + + upscale_f32_bicubic<<>>(x, dst, nb00, nb01, nb02, nb03, ne00_src, ne01_src, ne10_dst, ne11_dst, ne12_dst, ne13_dst, sf0, sf1, sf2, sf3, pixel_offset); +} + void ggml_cuda_op_upscale(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { const ggml_tensor * src0 = dst->src[0]; const float * src0_d = (const float *)src0->data; @@ -121,17 +197,22 @@ void ggml_cuda_op_upscale(ggml_backend_cuda_context & ctx, ggml_tensor * dst) { float sf2 = (float)dst->ne[2]/src0->ne[2]; const float sf3 = (float)dst->ne[3]/src0->ne[3]; + float pixel_offset = 0.5f; + if (mode_flags & GGML_SCALE_FLAG_ALIGN_CORNERS) { + sf0 = dst->ne[0] > 1 && src0->ne[0] > 1 ? (float)(dst->ne[0] - 1) / (src0->ne[0] - 1) : sf0; + sf1 = dst->ne[1] > 1 && src0->ne[1] > 1 ? (float)(dst->ne[1] - 1) / (src0->ne[1] - 1) : sf1; + pixel_offset = 0.0f; + } + if (mode == GGML_SCALE_MODE_NEAREST) { upscale_f32_cuda(src0_d, dst_d, src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3], dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3], sf0, sf1, sf2, sf3, stream); } else if (mode == GGML_SCALE_MODE_BILINEAR) { - float pixel_offset = 0.5f; - if (mode_flags & GGML_SCALE_FLAG_ALIGN_CORNERS) { - sf0 = dst->ne[0] > 1 && src0->ne[0] > 1 ? (float)(dst->ne[0] - 1) / (src0->ne[0] - 1) : sf0; - sf1 = dst->ne[1] > 1 && src0->ne[1] > 1 ? (float)(dst->ne[1] - 1) / (src0->ne[1] - 1) : sf1; - pixel_offset = 0.0f; - } upscale_f32_bilinear_cuda(src0_d, dst_d, src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3], src0->ne[0], src0->ne[1], dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3], sf0, sf1, sf2, sf3, pixel_offset, stream); + } else if (mode == GGML_SCALE_MODE_BICUBIC) { + upscale_f32_bicubic_cuda(src0_d, dst_d, src0->nb[0], src0->nb[1], src0->nb[2], src0->nb[3], + src0->ne[0], src0->ne[1], dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3], + sf0, sf1, sf2, sf3, pixel_offset, stream); } } diff --git a/ggml/src/ggml-opencl/ggml-opencl.cpp b/ggml/src/ggml-opencl/ggml-opencl.cpp index 3dc4d03550..1d3a318a56 100644 --- a/ggml/src/ggml-opencl/ggml-opencl.cpp +++ b/ggml/src/ggml-opencl/ggml-opencl.cpp @@ -2944,8 +2944,11 @@ static bool ggml_opencl_supports_op(ggml_backend_dev_t dev, const struct ggml_te return op->src[0]->type == GGML_TYPE_F32 && op->type == GGML_TYPE_F32; // Assuming F32 for now, can be expanded case GGML_OP_PAD: return op->src[0]->type == GGML_TYPE_F32 && op->type == GGML_TYPE_F32; - case GGML_OP_UPSCALE: - return op->src[0]->type == GGML_TYPE_F32 && op->type == GGML_TYPE_F32; + case GGML_OP_UPSCALE: { + ggml_scale_mode mode = (ggml_scale_mode)(ggml_get_op_params_i32(op, 0) & 0xFF); + return op->src[0]->type == GGML_TYPE_F32 && op->type == GGML_TYPE_F32 && + (mode == GGML_SCALE_MODE_NEAREST || mode == GGML_SCALE_MODE_BILINEAR); + } case GGML_OP_CONV_2D: return (op->src[0]->type == GGML_TYPE_F16 && op->src[1]->type == GGML_TYPE_F16 && op->type == GGML_TYPE_F16) || (op->src[0]->type == GGML_TYPE_F32 && op->src[1]->type == GGML_TYPE_F32 && op->type == GGML_TYPE_F32) || diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 7570febeaa..a7a28b1934 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -620,7 +620,7 @@ struct vk_device_struct { vk_pipeline pipeline_add_id_f32; vk_pipeline pipeline_concat_f32, pipeline_concat_f16, pipeline_concat_i32; - vk_pipeline pipeline_upscale_nearest_f32, pipeline_upscale_bilinear_f32; + vk_pipeline pipeline_upscale_nearest_f32, pipeline_upscale_bilinear_f32, pipeline_upscale_bicubic_f32; vk_pipeline pipeline_scale_f32; vk_pipeline pipeline_sqr_f32; vk_pipeline pipeline_sqrt_f32; @@ -3702,6 +3702,7 @@ static void ggml_vk_load_shaders(vk_device& device) { ggml_vk_create_pipeline(device, device->pipeline_upscale_nearest_f32, "upscale_f32", upscale_f32_len, upscale_f32_data, "main", 2, sizeof(vk_op_upscale_push_constants), {512, 1, 1}, {GGML_SCALE_MODE_NEAREST}, 1); ggml_vk_create_pipeline(device, device->pipeline_upscale_bilinear_f32, "upscale_f32", upscale_f32_len, upscale_f32_data, "main", 2, sizeof(vk_op_upscale_push_constants), {512, 1, 1}, {GGML_SCALE_MODE_BILINEAR}, 1); + ggml_vk_create_pipeline(device, device->pipeline_upscale_bicubic_f32, "upscale_f32", upscale_f32_len, upscale_f32_data, "main", 2, sizeof(vk_op_upscale_push_constants), {512, 1, 1}, {GGML_SCALE_MODE_BICUBIC}, 1); ggml_vk_create_pipeline(device, device->pipeline_scale_f32, "scale_f32", scale_f32_len, scale_f32_data, "main", 2, sizeof(vk_op_unary_push_constants), {512, 1, 1}, {}, 1); @@ -8200,6 +8201,8 @@ static vk_pipeline ggml_vk_op_get_pipeline(ggml_backend_vk_context * ctx, const return ctx->device->pipeline_upscale_nearest_f32; case GGML_SCALE_MODE_BILINEAR: return ctx->device->pipeline_upscale_bilinear_f32; + case GGML_SCALE_MODE_BICUBIC: + return ctx->device->pipeline_upscale_bicubic_f32; default: return nullptr; } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/upscale.comp b/ggml/src/ggml-vulkan/vulkan-shaders/upscale.comp index 8670aad32c..037ab0c78f 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/upscale.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/upscale.comp @@ -20,6 +20,7 @@ layout (binding = 1) writeonly buffer D {D_TYPE data_d[];}; // from ggml.h: enum ggml_scale_mode, enum ggml_scale_flag #define NEAREST 0 #define BILINEAR 1 +#define BICUBIC 2 layout (constant_id = 0) const uint scale_mode = 0; @@ -61,6 +62,39 @@ float interpolate_bilinear(uint i10, uint i11, uint i12, uint i13) { return fetch_bilinear(c0, c1, d, i12, i13); } +// Bicubic interpolation with alpha = -0.75 +// https://en.wikipedia.org/wiki/Bicubic_interpolation#Bicubic_convolution_algorithm +const vec4 bcoeffs1 = vec4( 1.25, -2.25, 0.0, 1.0); +const vec4 bcoeffs2 = vec4(-0.75, 3.75, -6.0, 3.0); +vec4 powers(float x) { return vec4(x*x*x, x*x, x, 1); } + +float bicubic(float p0, float p1, float p2, float p3, float x) { + return p0 * dot(bcoeffs2, powers(x + 1)) + + p1 * dot(bcoeffs1, powers(x )) + + p2 * dot(bcoeffs1, powers(1 - x)) + + p3 * dot(bcoeffs2, powers(2 - x)); +} + +#define FETCH(a,b) data_a[base + clamp(i.x+(a), 0, res.x) * p.nb00 + clamp(i.y+(b), 0, res.y) * p.nb01] + +float interpolate_bicubic(uint i10, uint i11, uint i12, uint i13) { + const ivec2 res = ivec2(p.ne00 - 1, p.ne01 - 1); + + const vec2 coord = (vec2(i10, i11) + p.pixel_offset) / vec2(p.sf0, p.sf1) - p.pixel_offset; + const vec2 d = fract(coord); + const ivec2 i = ivec2(floor(coord)); + + const uint i02 = uint(i12 / p.sf2); + const uint i03 = uint(i13 / p.sf3); + const uint base = p.a_offset + i03 * p.nb03 + i02 * p.nb02; + + return bicubic( + bicubic(FETCH(-1,-1), FETCH(0,-1), FETCH(1,-1), FETCH(2,-1), d.x), + bicubic(FETCH(-1, 0), FETCH(0, 0), FETCH(1, 0), FETCH(2, 0), d.x), + bicubic(FETCH(-1, 1), FETCH(0, 1), FETCH(1, 1), FETCH(2, 1), d.x), + bicubic(FETCH(-1, 2), FETCH(0, 2), FETCH(1, 2), FETCH(2, 2), d.x), d.y); +} + void main() { const uint idx = gl_GlobalInvocationID.z * 262144 + gl_GlobalInvocationID.y * 512 + gl_GlobalInvocationID.x; @@ -81,6 +115,9 @@ void main() { case BILINEAR: result = interpolate_bilinear(i10, i11, i12, i13); break; + case BICUBIC: + result = interpolate_bicubic(i10, i11, i12, i13); + break; } data_d[p.d_offset + idx] = D_TYPE(result); diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 22635f1635..eb29b15f20 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -272,6 +272,10 @@ static double mean_abs_asymm(const float * a, const float * b, const size_t n, c // utils for printing the variables of the test cases +static std::string var_to_str(const std::string & x) { + return x; +} + template static std::string var_to_str(const T & x) { return std::to_string(x); @@ -323,7 +327,8 @@ static std::string var_to_str(ggml_scale_mode mode) { switch (mode) { case GGML_SCALE_MODE_NEAREST: return "nearest"; case GGML_SCALE_MODE_BILINEAR: return "bilinear"; - default: return std::to_string(mode); + case GGML_SCALE_MODE_BICUBIC: return "bicubic"; + default: return std::to_string(mode); } } @@ -5218,7 +5223,9 @@ struct test_interpolate : public test_case { const uint32_t mode = GGML_SCALE_MODE_NEAREST; std::string vars() override { - return VARS_TO_STR4(type, ne, ne_tgt, mode); + ggml_scale_mode mode = (ggml_scale_mode)(this->mode & 0xFF); + std::string flags = (this->mode & GGML_SCALE_FLAG_ALIGN_CORNERS) ? "align_corners" : "none"; + return VARS_TO_STR5(type, ne, ne_tgt, mode, flags); } test_interpolate(ggml_type type = GGML_TYPE_F32, @@ -7288,15 +7295,17 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_argsort(GGML_TYPE_F32, {2, 8, 8192, 1}, order)); // bailingmoe2 (group selection) } - for (ggml_scale_mode mode : {GGML_SCALE_MODE_NEAREST, GGML_SCALE_MODE_BILINEAR}) { + for (ggml_scale_mode mode : {GGML_SCALE_MODE_NEAREST, GGML_SCALE_MODE_BILINEAR, GGML_SCALE_MODE_BICUBIC}) { test_cases.emplace_back(new test_upscale(GGML_TYPE_F32, {512, 512, 3, 2}, 2, mode)); test_cases.emplace_back(new test_upscale(GGML_TYPE_F32, {512, 512, 3, 2}, 2, mode, true)); test_cases.emplace_back(new test_interpolate(GGML_TYPE_F32, {2, 5, 7, 11}, {5, 7, 11, 13}, mode)); test_cases.emplace_back(new test_interpolate(GGML_TYPE_F32, {5, 7, 11, 13}, {2, 5, 7, 11}, mode)); } - test_cases.emplace_back(new test_interpolate(GGML_TYPE_F32, {2, 5, 7, 11}, {5, 7, 11, 13}, GGML_SCALE_MODE_BILINEAR | GGML_SCALE_FLAG_ALIGN_CORNERS)); - test_cases.emplace_back(new test_interpolate(GGML_TYPE_F32, {1, 4, 3, 2}, {2, 8, 3, 2}, GGML_SCALE_MODE_BILINEAR | GGML_SCALE_FLAG_ALIGN_CORNERS)); - test_cases.emplace_back(new test_interpolate(GGML_TYPE_F32, {4, 1, 3, 2}, {1, 1, 3, 2}, GGML_SCALE_MODE_BILINEAR | GGML_SCALE_FLAG_ALIGN_CORNERS)); + for (ggml_scale_mode mode : {GGML_SCALE_MODE_BILINEAR, GGML_SCALE_MODE_BICUBIC}) { + test_cases.emplace_back(new test_interpolate(GGML_TYPE_F32, {2, 5, 7, 11}, {5, 7, 11, 13}, mode | GGML_SCALE_FLAG_ALIGN_CORNERS)); + test_cases.emplace_back(new test_interpolate(GGML_TYPE_F32, {1, 4, 3, 2}, {2, 8, 3, 2}, mode | GGML_SCALE_FLAG_ALIGN_CORNERS)); + test_cases.emplace_back(new test_interpolate(GGML_TYPE_F32, {4, 1, 3, 2}, {1, 1, 3, 2}, mode | GGML_SCALE_FLAG_ALIGN_CORNERS)); + } test_cases.emplace_back(new test_sum()); test_cases.emplace_back(new test_sum_rows()); From 9898b57cbe69ab81713e16cbb84a799c6eb3e36c Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 10 Nov 2025 12:17:19 +0200 Subject: [PATCH 47/69] editorconfig : ignore benches/ (#17140) [no ci] --- .editorconfig | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.editorconfig b/.editorconfig index 0722ac73c8..74b65a4566 100644 --- a/.editorconfig +++ b/.editorconfig @@ -60,3 +60,11 @@ end_of_line = unset charset = unset trim_trailing_whitespace = unset insert_final_newline = unset + +[benches/**] +indent_style = unset +indent_size = unset +end_of_line = unset +charset = unset +trim_trailing_whitespace = unset +insert_final_newline = unset From 4b13a684c595ab9323be8dfa6266d9d0fb13c232 Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Mon, 10 Nov 2025 11:41:05 +0100 Subject: [PATCH 48/69] mtmd: fix patch_size initialized to random value in audio models (#17128) * mtmd: fix patch_size initialized to random value in audio models * add default hparams --- tools/mtmd/clip.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tools/mtmd/clip.cpp b/tools/mtmd/clip.cpp index d1423b67f9..1d78f5954e 100644 --- a/tools/mtmd/clip.cpp +++ b/tools/mtmd/clip.cpp @@ -160,13 +160,13 @@ enum patch_merge_type { }; struct clip_hparams { - int32_t image_size; - int32_t patch_size; - int32_t n_embd; - int32_t n_ff; - int32_t projection_dim; - int32_t n_head; - int32_t n_layer; + int32_t image_size = 0; + int32_t patch_size = 0; + int32_t n_embd = 0; + int32_t n_ff = 0; + int32_t projection_dim = 0; + int32_t n_head = 0; + int32_t n_layer = 0; // idefics3 int32_t image_longest_edge = 0; int32_t image_min_pixels = -1; @@ -2683,6 +2683,9 @@ struct clip_model_loader { } } else if (is_audio) { get_u32(KEY_A_NUM_MEL_BINS, hparams.n_mel_bins); + // some hparams are unused, but still need to set to avoid issues + hparams.image_size = 0; + hparams.patch_size = 1; } else { GGML_ASSERT(false && "unknown modality"); From f914544b16a467a5c94e95ec77027775c3652c09 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 10 Nov 2025 12:59:29 +0200 Subject: [PATCH 49/69] batched-bench : add "separate text gen" mode (#17103) --- common/arg.cpp | 7 +++++ common/common.h | 3 +- tools/batched-bench/batched-bench.cpp | 44 +++++++++++++++++++-------- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index a570810281..430ab45dfe 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -2253,6 +2253,13 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.is_pp_shared = true; } ).set_examples({LLAMA_EXAMPLE_BENCH, LLAMA_EXAMPLE_PARALLEL})); + add_opt(common_arg( + {"-tgs"}, + string_format("is the text generation separated across the different sequences (default: %s)", params.is_tg_separate ? "true" : "false"), + [](common_params & params) { + params.is_tg_separate = true; + } + ).set_examples({LLAMA_EXAMPLE_BENCH, LLAMA_EXAMPLE_PARALLEL})); add_opt(common_arg( {"-npp"}, "n0,n1,...", "number of prompt tokens", diff --git a/common/common.h b/common/common.h index 8540725aaa..f42c083faa 100644 --- a/common/common.h +++ b/common/common.h @@ -460,7 +460,8 @@ struct common_params { float slot_prompt_similarity = 0.1f; // batched-bench params - bool is_pp_shared = false; + bool is_pp_shared = false; + bool is_tg_separate = false; std::vector n_pp; std::vector n_tg; diff --git a/tools/batched-bench/batched-bench.cpp b/tools/batched-bench/batched-bench.cpp index f1ab27cd54..2032a386bb 100644 --- a/tools/batched-bench/batched-bench.cpp +++ b/tools/batched-bench/batched-bench.cpp @@ -23,7 +23,8 @@ int main(int argc, char ** argv) { common_init(); - int is_pp_shared = params.is_pp_shared; + int is_pp_shared = params.is_pp_shared; + int is_tg_separate = params.is_tg_separate; std::vector n_pp = params.n_pp; std::vector n_tg = params.n_tg; @@ -72,8 +73,8 @@ int main(int argc, char ** argv) { // decode in batches of ctx_params.n_batch tokens auto decode_helper = [](llama_context * ctx, llama_batch & batch, int32_t n_batch, bool synchronize) { - for (int32_t i = 0; i < (int32_t) batch.n_tokens; i += n_batch) { - const int32_t n_tokens = std::min(n_batch, (int32_t) (batch.n_tokens - i)); + for (int32_t i = 0; i < batch.n_tokens; i += n_batch) { + const int32_t n_tokens = std::min(n_batch, batch.n_tokens - i); llama_batch batch_view = { n_tokens, @@ -113,7 +114,7 @@ int main(int argc, char ** argv) { if (!params.batched_bench_output_jsonl) { LOG("\n"); - LOG("%s: n_kv_max = %d, n_batch = %d, n_ubatch = %d, flash_attn = %d, is_pp_shared = %d, n_gpu_layers = %d, n_threads = %u, n_threads_batch = %u\n", __func__, n_kv_max, params.n_batch, params.n_ubatch, int(params.flash_attn_type), params.is_pp_shared, params.n_gpu_layers, ctx_params.n_threads, ctx_params.n_threads_batch); + LOG("%s: n_kv_max = %d, n_batch = %d, n_ubatch = %d, flash_attn = %d, is_pp_shared = %d, is_tg_separate = %d, n_gpu_layers = %d, n_threads = %u, n_threads_batch = %u\n", __func__, n_kv_max, params.n_batch, params.n_ubatch, int(params.flash_attn_type), is_pp_shared, is_tg_separate, params.n_gpu_layers, ctx_params.n_threads, ctx_params.n_threads_batch); LOG("\n"); LOG("|%6s | %6s | %4s | %6s | %8s | %8s | %8s | %8s | %8s | %8s |\n", "PP", "TG", "B", "N_KV", "T_PP s", "S_PP t/s", "T_TG s", "S_TG t/s", "T s", "S t/s"); LOG("|%6s-|-%6s-|-%4s-|-%6s-|-%8s-|-%8s-|-%8s-|-%8s-|-%8s-|-%8s-|\n", "------", "------", "----", "------", "--------", "--------", "--------", "--------", "--------", "--------"); @@ -172,16 +173,35 @@ int main(int argc, char ** argv) { const auto t_tg_start = ggml_time_us(); - for (int i = 0; i < tg; ++i) { - common_batch_clear(batch); - + if (is_tg_separate) { + // decode pattern: + // 0 0 0 ... 1 1 1 ... 2 2 2 ... 3 3 3 ... for (int j = 0; j < pl; ++j) { - common_batch_add(batch, get_token_rand(), pp + i, { j }, true); - } + for (int i = 0; i < tg; ++i) { + common_batch_clear(batch); - if (!decode_helper(ctx, batch, ctx_params.n_batch, true)) { - LOG_ERR("%s: llama_decode() failed\n", __func__); - return 1; + common_batch_add(batch, get_token_rand(), pp + i, { j }, true); + + if (!decode_helper(ctx, batch, ctx_params.n_batch, true)) { + LOG_ERR("%s: llama_decode() failed\n", __func__); + return 1; + } + } + } + } else { + // decode pattern: + // 0123 0123 0123 ... + for (int i = 0; i < tg; ++i) { + common_batch_clear(batch); + + for (int j = 0; j < pl; ++j) { + common_batch_add(batch, get_token_rand(), pp + i, { j }, true); + } + + if (!decode_helper(ctx, batch, ctx_params.n_batch, true)) { + LOG_ERR("%s: llama_decode() failed\n", __func__); + return 1; + } } } From df70bedda70550fd9ebc4bc965c5dbc3f6d78345 Mon Sep 17 00:00:00 2001 From: fj-y-saito <85871716+fj-y-saito@users.noreply.github.com> Date: Mon, 10 Nov 2025 22:12:59 +0900 Subject: [PATCH 50/69] =?UTF-8?q?arm64:=20add=20i8mm=20route=20with=20SVE?= =?UTF-8?q?=20ggml=5Fvec=5Fdot=5Fq4=5FK=5Fq8=5FK=20and=20ggml=5Fvec=5Fdot?= =?UTF-8?q?=5Fq6=5FK=5F=E2=80=A6=20(#15277)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add i8mm route with SVE ggml_vec_dot_q4_K_q8_K and ggml_vec_dot_q6_K_q8_K * Surround SVE function with compiler directive * fix compile switch * fix coding style * ggml : fix indent --------- Co-authored-by: Georgi Gerganov --- ggml/src/ggml-cpu/arch/arm/quants.c | 454 ++++++++++++++++++++++++++-- 1 file changed, 428 insertions(+), 26 deletions(-) diff --git a/ggml/src/ggml-cpu/arch/arm/quants.c b/ggml/src/ggml-cpu/arch/arm/quants.c index aadbb487ec..b390ab61c7 100644 --- a/ggml/src/ggml-cpu/arch/arm/quants.c +++ b/ggml/src/ggml-cpu/arch/arm/quants.c @@ -2044,6 +2044,26 @@ void ggml_vec_dot_q3_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi } +#ifdef __ARM_FEATURE_SVE +static inline svuint32_t ggml_decode_q4scales_and_mins_for_mmla(const uint32_t * vx_scales) { + const svbool_t pg_all = svptrue_pat_b32(SV_VL4); + const svbool_t pg_false = svpfalse_b(); // 0x0000 + const svbool_t pg_lo_8 = svwhilelt_b8_s32(0, 8); // 0x00ff + const svbool_t pg_odd = svzip1_b32(pg_false, pg_lo_8); + + svuint32_t vutmp_hi, vutmp_lo; + svuint32_t vx01 = svld1_u32(pg_lo_8, vx_scales); + vutmp_hi = svzip1_u32(vx01, vx01); + vutmp_hi = svlsr_n_u32_m(pg_odd, vutmp_hi, 2); + vutmp_hi = svreinterpret_u32_u64(svand_n_u64_x(pg_all, svreinterpret_u64_u32(vutmp_hi), UINT64_C(0x303030303f3f3f3f))); + const svuint32_t vx2 = svdup_u32(vx_scales[2]); + vutmp_lo = svlsr_u32_x(pg_all, vx2, svreinterpret_u32_s32(svindex_s32(-2, 2))); + vutmp_lo = svand_n_u32_z(pg_odd, vutmp_lo, UINT32_C(0x0f0f0f0f)); + svuint32_t vutmp = svorr_u32_z(pg_all, vutmp_hi, vutmp_lo); + return vutmp; +} +#endif + void ggml_vec_dot_q4_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(n % QK_K == 0); #ifdef __ARM_FEATURE_MATMUL_INT8 @@ -2066,8 +2086,220 @@ void ggml_vec_dot_q4_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi static const uint32_t kmask3 = 0x03030303; uint32_t utmp[4]; +#ifdef __ARM_FEATURE_SVE + const int vector_length = ggml_cpu_get_sve_cnt()*8; +#endif -#if defined(__ARM_FEATURE_MATMUL_INT8) +#if defined(__ARM_FEATURE_SVE) && defined(__ARM_FEATURE_MATMUL_INT8) + if (nrc == 2) { + svbool_t pg32_2 = svptrue_pat_b32(SV_VL2); + + const block_q4_K * GGML_RESTRICT vx0 = vx; + const block_q8_K * GGML_RESTRICT vy0 = vy; + const block_q4_K * GGML_RESTRICT vx1 = (const block_q4_K *) ((const uint8_t*)vx + bx); + const block_q8_K * GGML_RESTRICT vy1 = (const block_q8_K *) ((const uint8_t*)vy + by); + + union { + uint32_t u32[8]; + uint64_t u64[4]; + } new_utmp; + + svfloat32_t sumf1 = svdup_n_f32(0); + + switch (vector_length) { + case 128: + { + svbool_t pg_false = svpfalse_b(); + svbool_t pg_lo_8 = svwhilelt_b8_s32(0, 8); + svbool_t vmins_mask1= svzip1_b32(pg_lo_8, pg_false); + svbool_t vmins_mask2 = svzip1_b32(pg_false, pg_lo_8); + svbool_t pg128_all = svptrue_pat_b8(SV_VL16); + for (int i = 0; i < nb; ++i) { + svfloat32_t vy_d = svuzp1_f32(svdup_n_f32(vy0[i].d), svdup_n_f32(vy1[i].d)); + svfloat32_t vx_d = svzip1_f32(svdup_n_f32(GGML_FP16_TO_FP32(vx0[i].d)), svdup_n_f32(GGML_FP16_TO_FP32(vx1[i].d))); + svfloat32_t svsuper_block_scales = svmul_f32_x(pg128_all, vy_d, vx_d); + svfloat32_t vx_dmins = svzip1_f32(svdup_n_f32(GGML_FP16_TO_FP32(vx0[i].dmin)), svdup_n_f32(GGML_FP16_TO_FP32(vx1[i].dmin))); + svfloat32_t vy_dmins = svuzp1_f32(svdup_n_f32(vy0[i].d), svdup_n_f32(vy1[i].d)); + svfloat32_t svdmins = svmul_n_f32_x(pg128_all, svmul_f32_x(pg128_all, vy_dmins, vx_dmins), -1); + const uint8_t * GGML_RESTRICT q4_0 = vx0[i].qs; + const int8_t * GGML_RESTRICT q8_0 = vy0[i].qs; + const uint8_t * GGML_RESTRICT q4_1 = vx1[i].qs; + const int8_t * GGML_RESTRICT q8_1 = vy1[i].qs; + svint16_t lo = svld1_s16(pg128_all, vy0[i].bsums + 0); + svint16_t hi = svld1_s16(pg128_all, vy0[i].bsums + 8); + svint16_t sum_tmp1 = svuzp1_s16(lo, hi); + svint16_t sum_tmp2 = svuzp2_s16(lo, hi); + svint16_t svq8sums_0 = svadd_s16_x(pg128_all, sum_tmp1, sum_tmp2); + lo = svld1_s16(pg128_all, vy1[i].bsums + 0); + hi = svld1_s16(pg128_all, vy1[i].bsums + 8); + sum_tmp1 = svuzp1(lo, hi); + sum_tmp2 = svuzp2(lo, hi); + svint16_t svq8sums_1 = svadd_s16_x(pg128_all, sum_tmp1, sum_tmp2); + svuint32_t decoded_scales0 = ggml_decode_q4scales_and_mins_for_mmla((const uint32_t *)vx0[i].scales); + svuint32_t decoded_scales1 = ggml_decode_q4scales_and_mins_for_mmla((const uint32_t *)vx1[i].scales); + svuint32x2_t decoded_scales = svcreate2_u32(decoded_scales0, decoded_scales1); + svst2_u32(pg128_all, new_utmp.u32, decoded_scales); + svint16_t svmins8_0 = svreinterpret_s16_u16(svunpklo_u16(svreinterpret_u8_u32(svuzp1_u32(svld1_u32(vmins_mask1, new_utmp.u32+4), svdup_n_u32(0))))); + svint16_t svmins8_1 = svreinterpret_s16_u16(svunpklo_u16(svreinterpret_u8_u32(svuzp2_u32(svld1_u32(vmins_mask2, new_utmp.u32+4), svdup_n_u32(0))))); + svint32_t svsumfs_tmp1 = svreinterpret_s32_s64(svdot_s64(svdup_n_s64(0), svq8sums_0, svmins8_0)); + svint32_t svsumfs_tmp2 = svreinterpret_s32_s64(svdot_s64(svdup_n_s64(0), svq8sums_0, svmins8_1)); + svint32_t svsumfs_tmp3 = svtrn1_s32(svsumfs_tmp1, svsumfs_tmp2); + svint32_t svsumfs_tmp4 = svreinterpret_s32_s64(svdot_s64(svdup_n_s64(0), svq8sums_1, svmins8_0)); + svint32_t svsumfs_tmp5 = svreinterpret_s32_s64(svdot_s64(svdup_n_s64(0), svq8sums_1, svmins8_1)); + svint32_t svsumfs_tmp6 = svtrn1_s32(svsumfs_tmp4, svsumfs_tmp5); + svint32_t svsumfs_tmp7 = svreinterpret_s32_s64(svtrn2_s64(svreinterpret_s64_s32(svsumfs_tmp3), svreinterpret_s64_s32(svsumfs_tmp6))); + svint32_t svsumfs_tmp8 = svreinterpret_s32_s64(svtrn1_s64(svreinterpret_s64_s32(svsumfs_tmp3), svreinterpret_s64_s32(svsumfs_tmp6))); + svint32_t svsumfs_tmp = svadd_s32_x(pg128_all, svsumfs_tmp7, svsumfs_tmp8); + svint32_t svscales, sumi1, sumi2; + svint32_t acc_sumif1 = svdup_n_s32(0); + svint32_t acc_sumif2 = svdup_n_s32(0); + svint8_t q4bytes_0_l, q4bytes_0_h, q4bytes_1_l, q4bytes_1_h, l0, l1, l2, l3, + q8bytes_0_h, q8bytes_0_l, q8bytes_1_h, q8bytes_1_l, r0, r1, r2, r3; +#pragma GCC unroll 1 + for (int j = 0; j < QK_K/64; ++j) { + q4bytes_0_l = svreinterpret_s8_u8(svand_n_u8_x(pg128_all, svld1_u8(pg128_all, q4_0), 0xf)); + q4bytes_1_l = svreinterpret_s8_u8(svand_n_u8_x(pg128_all, svld1_u8(pg128_all, q4_1), 0xf)); + q4bytes_0_h = svreinterpret_s8_u8(svand_n_u8_x(pg128_all, svld1_u8(pg128_all, q4_0+16), 0xf)); + q4bytes_1_h = svreinterpret_s8_u8(svand_n_u8_x(pg128_all, svld1_u8(pg128_all, q4_1+16), 0xf)); + l0 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q4bytes_0_l), svreinterpret_s64_s8(q4bytes_1_l))); + l1 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q4bytes_0_l), svreinterpret_s64_s8(q4bytes_1_l))); + l2 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q4bytes_0_h), svreinterpret_s64_s8(q4bytes_1_h))); + l3 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q4bytes_0_h), svreinterpret_s64_s8(q4bytes_1_h))); + q8bytes_0_h = svld1_s8(pg128_all, q8_0); + q8bytes_1_h = svld1_s8(pg128_all, q8_1); + q8bytes_0_l = svld1_s8(pg128_all, q8_0+16); + q8bytes_1_l = svld1_s8(pg128_all, q8_1+16); + r0 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q8bytes_0_h), svreinterpret_s64_s8(q8bytes_1_h))); + r1 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q8bytes_0_h), svreinterpret_s64_s8(q8bytes_1_h))); + r2 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q8bytes_0_l), svreinterpret_s64_s8(q8bytes_1_l))); + r3 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q8bytes_0_l), svreinterpret_s64_s8(q8bytes_1_l))); + sumi1 = svmmla_s32(svmmla_s32(svmmla_s32(svmmla_s32(svdup_n_s32(0), r0, l0), r1, l1), r2, l2), r3, l3); + svscales = svreinterpret_s32_u32(svlsr_n_u32_x(pg128_all, svlsl_n_u32_x(pg128_all, svreinterpret_u32_u64(svdup_n_u64(new_utmp.u64[j/2])), 8*(4-2*(j%2)-1)), 24)); + acc_sumif1 = svmla_s32_x(pg128_all, acc_sumif1, svscales, sumi1); + + q4bytes_0_l = svreinterpret_s8_u8(svlsr_n_u8_x(pg128_all, svld1_u8(pg128_all, q4_0), 4)); + q4bytes_1_l = svreinterpret_s8_u8(svlsr_n_u8_x(pg128_all, svld1_u8(pg128_all, q4_1), 4)); + q4bytes_0_h = svreinterpret_s8_u8(svlsr_n_u8_x(pg128_all, svld1_u8(pg128_all, q4_0+16), 4)); + q4bytes_1_h = svreinterpret_s8_u8(svlsr_n_u8_x(pg128_all, svld1_u8(pg128_all, q4_1+16), 4)); + l0 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q4bytes_0_l), svreinterpret_s64_s8(q4bytes_1_l))); + l1 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q4bytes_0_l), svreinterpret_s64_s8(q4bytes_1_l))); + l2 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q4bytes_0_h), svreinterpret_s64_s8(q4bytes_1_h))); + l3 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q4bytes_0_h), svreinterpret_s64_s8(q4bytes_1_h))); + q8bytes_0_h = svld1_s8(pg128_all, q8_0+32); + q8bytes_1_h = svld1_s8(pg128_all, q8_1+32); + q8bytes_0_l = svld1_s8(pg128_all, q8_0+48); + q8bytes_1_l = svld1_s8(pg128_all, q8_1+48); + r0 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q8bytes_0_h), svreinterpret_s64_s8(q8bytes_1_h))); + r1 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q8bytes_0_h), svreinterpret_s64_s8(q8bytes_1_h))); + r2 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q8bytes_0_l), svreinterpret_s64_s8(q8bytes_1_l))); + r3 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q8bytes_0_l), svreinterpret_s64_s8(q8bytes_1_l))); + sumi2 = svmmla_s32(svmmla_s32(svmmla_s32(svmmla_s32(svdup_n_s32(0), r0, l0), r1, l1), r2, l2), r3, l3); + svscales = svreinterpret_s32_u32(svlsr_n_u32_x(pg128_all, svlsl_n_u32_x(pg128_all, svreinterpret_u32_u64(svdup_n_u64(new_utmp.u64[j/2])), 8*(4-2*(j%2)-2)), 24)); + acc_sumif2 = svmla_s32_x(pg128_all, acc_sumif2, svscales, sumi2); + q4_0 += 32; q4_1 += 32; q8_0 += 64; q8_1 += 64; + } + sumf1 = svmla_f32_x(pg128_all, + svmla_f32_x(pg128_all, + sumf1, + svcvt_f32_x(pg128_all, + svadd_s32_x(pg128_all, acc_sumif1, acc_sumif2)), + svsuper_block_scales), + svdmins, + svcvt_f32_s32_x(pg128_all, svsumfs_tmp)); + } //end of for nb + } // end of case 128 + break; + case 256: + case 512: + { + const svbool_t pg32_4 = svptrue_pat_b32(SV_VL4); + const svbool_t pg8_16 = svptrue_pat_b8(SV_VL16); + const svbool_t pg256_all = svptrue_pat_b8(SV_ALL); + for (int i = 0; i < nb; ++i) { + const uint8_t * GGML_RESTRICT q4_0 = vx0[i].qs; + const int8_t * GGML_RESTRICT q8_0 = vy0[i].qs; + const uint8_t * GGML_RESTRICT q4_1 = vx1[i].qs; + const int8_t * GGML_RESTRICT q8_1 = vy1[i].qs; + svint32_t svscales, sumi1, sumi2; + svint32_t acc_sumif1 = svdup_n_s32(0); + svint32_t acc_sumif2 = svdup_n_s32(0); + svint8_t l0, l1, l2, l3, r0, r1, r2, r3; + svfloat32_t vx_d = svzip1_f32(svdup_n_f32(GGML_FP16_TO_FP32(vx0[i].d)), svdup_n_f32(GGML_FP16_TO_FP32(vx1[i].d))); + svfloat64_t vy_d_tmp = svreinterpret_f64_f32(svuzp1_f32(svdup_n_f32(vy0[i].d), svdup_n_f32(vy1[i].d))); + svfloat32_t vy_d = svreinterpret_f32_f64(svuzp1_f64(vy_d_tmp, vy_d_tmp)); + svfloat32_t svsuper_block_scales = svmul_f32_z(pg32_4, vy_d, vx_d); + svfloat32_t vx_dmins = svzip1_f32(svdup_n_f32(GGML_FP16_TO_FP32(vx0[i].dmin)), svdup_n_f32(GGML_FP16_TO_FP32(vx1[i].dmin))); + svfloat64_t vy_dmins_tmp = svreinterpret_f64_f32(svuzp1_f32(svdup_n_f32(vy0[i].d), svdup_n_f32(vy1[i].d))); + svfloat32_t vy_dmins = svreinterpret_f32_f64(svuzp1_f64(vy_dmins_tmp, vy_dmins_tmp)); + svfloat32_t svdmins = svmul_n_f32_x(pg32_4, svmul_f32_x(pg32_4, vx_dmins, vy_dmins), -1); + svint16_t rc1 = svuzp1_s16(svld1_s16(pg256_all, vy0[i].bsums), svld1_s16(pg256_all, vy1[i].bsums)); + svint16_t rc2 = svuzp2_s16(svld1_s16(pg256_all, vy0[i].bsums), svld1_s16(pg256_all, vy1[i].bsums)); + svint16_t svq8sums = svadd_s16_x(pg256_all, rc1, rc2); + svuint32_t decoded_scales0 = ggml_decode_q4scales_and_mins_for_mmla((const uint32_t *)vx0[i].scales); + svuint32_t decoded_scales1 = ggml_decode_q4scales_and_mins_for_mmla((const uint32_t *)vx1[i].scales); + svuint32x2_t decoded_scales = svcreate2_u32(decoded_scales0, decoded_scales1); + svst2_u32(pg8_16, new_utmp.u32, decoded_scales); + svint16_t new_svq8sums_0 = svreinterpret_s16_u64(svtrn1_u64(svreinterpret_u64_s16(svq8sums), svreinterpret_u64_s16(svq8sums))); + svint16_t new_svq8sums_1 = svreinterpret_s16_u64(svtrn2_u64(svreinterpret_u64_s16(svq8sums), svreinterpret_u64_s16(svq8sums))); + svuint64_t new_mins_0 = svdup_u64(new_utmp.u64[2]); + svuint64_t new_mins_1 = svdup_u64(new_utmp.u64[3]); + svint16_t new_svmins8_0 = svreinterpret_s16_u16(svunpklo_u16(svreinterpret_u8_u64(new_mins_0))); + svint16_t new_svmins8_1 = svreinterpret_s16_u16(svunpklo_u16(svreinterpret_u8_u64(new_mins_1))); + svint64_t dot_prod_0 = svdot_s64(svdup_s64(0), new_svmins8_0, new_svq8sums_0); + svint64_t dot_prod_1 = svdot_s64(dot_prod_0, new_svmins8_1, new_svq8sums_1); + svfloat32_t converted_dot_prod_1 = svcvt_f32_s64_x(pg256_all, dot_prod_1); + svfloat32_t svsumfs_tmp = svuzp1_f32(converted_dot_prod_1, converted_dot_prod_1); + +#pragma GCC unroll 1 + for (int j = 0; j < QK_K/64; ++j) { + svuint8_t q4bytes_0 = svand_n_u8_x(pg256_all, svld1_u8(pg256_all, q4_0), 0xf); + svuint8_t q4bytes_1 = svand_n_u8_x(pg256_all, svld1_u8(pg256_all, q4_1), 0xf); + svuint8_t q4bytes_2 = svlsr_n_u8_x(pg256_all, svld1_u8(pg256_all, q4_0), 4); + svuint8_t q4bytes_3 = svlsr_n_u8_x(pg256_all, svld1_u8(pg256_all, q4_1), 4); + l0 = svreinterpret_s8_u64(svzip1_u64(svreinterpret_u64_u8(q4bytes_0), svreinterpret_u64_u8(q4bytes_1))); + l1 = svreinterpret_s8_u64(svzip2_u64(svreinterpret_u64_u8(q4bytes_0), svreinterpret_u64_u8(q4bytes_1))); + l2 = svreinterpret_s8_u64(svzip1_u64(svreinterpret_u64_u8(q4bytes_2), svreinterpret_u64_u8(q4bytes_3))); + l3 = svreinterpret_s8_u64(svzip2_u64(svreinterpret_u64_u8(q4bytes_2), svreinterpret_u64_u8(q4bytes_3))); + svint8_t q8bytes_0 = svld1_s8(pg256_all, q8_0); + svint8_t q8bytes_1 = svld1_s8(pg256_all, q8_1); + svint8_t q8bytes_2 = svld1_s8(pg256_all, q8_0+32); + svint8_t q8bytes_3 = svld1_s8(pg256_all, q8_1+32); + r0 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q8bytes_0), svreinterpret_s64_s8(q8bytes_1))); + r1 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q8bytes_0), svreinterpret_s64_s8(q8bytes_1))); + r2 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q8bytes_2), svreinterpret_s64_s8(q8bytes_3))); + r3 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q8bytes_2), svreinterpret_s64_s8(q8bytes_3))); + sumi1 = svmmla(svmmla(svdup_n_s32(0), r0, l0), r1, l1); + svscales = svreinterpret_s32_u32(svlsr_n_u32_x(pg256_all, svlsl_n_u32_x(pg256_all, svreinterpret_u32_u64(svdup_n_u64(new_utmp.u64[j/2])), 8*(4-2*(j%2)-1)), 24)); + acc_sumif1 = svmla_s32_x(pg256_all, acc_sumif1, svscales, sumi1); + sumi2 = svmmla(svmmla(svdup_n_s32(0), r2, l2), r3, l3); + svscales = svreinterpret_s32_u32(svlsr_n_u32_x(pg256_all, svlsl_n_u32_x(pg256_all, svreinterpret_u32_u64(svdup_n_u64(new_utmp.u64[j/2])), 8*(4-2*(j%2)-2)), 24)); + acc_sumif2 = svmla_s32_x(pg256_all, acc_sumif2, svscales, sumi2); + q4_0 += 32; q4_1 += 32; q8_0 += 64; q8_1 += 64; + } + svint32_t acc_sumif = svadd_s32_x(pg256_all, acc_sumif1, acc_sumif2); + svint32_t swap_acc_sumif = svext_s32(acc_sumif, acc_sumif, 4); + acc_sumif = svadd_s32_x(pg32_4, acc_sumif, swap_acc_sumif); + sumf1 = svmla_f32_x(pg32_4, + svmla_f32_x(pg32_4, + sumf1, + svcvt_f32_x(pg32_4, acc_sumif), + svsuper_block_scales), + svdmins, + svsumfs_tmp); + } // end of for nb + } // end of case 256-512 + break; + default: + assert(false && "Unsupported vector length"); + break; + } + + svst1_f32(pg32_2, s, sumf1); + svst1_f32(pg32_2, s + bs, svreinterpret_f32_u8(svext_u8(svreinterpret_u8_f32(sumf1), svdup_n_u8(0), 8))); + + return; + } +#elif defined(__ARM_FEATURE_MATMUL_INT8) if (nrc == 2) { const block_q4_K * GGML_RESTRICT x0 = x; const block_q4_K * GGML_RESTRICT x1 = (const block_q4_K *) ((const uint8_t *)vx + bx); @@ -2235,7 +2467,6 @@ void ggml_vec_dot_q4_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi const uint8_t * GGML_RESTRICT q4 = x[i].qs; const int8_t * GGML_RESTRICT q8 = y[i].qs; - const int vector_length = ggml_cpu_get_sve_cnt()*8; const svuint8_t m4b = svdup_n_u8(0xf); const svint32_t mzero = svdup_n_s32(0); svint32_t sumi1 = svdup_n_s32(0); @@ -2480,7 +2711,201 @@ void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi const int nb = n / QK_K; -#if defined(__ARM_FEATURE_MATMUL_INT8) +#ifdef __ARM_FEATURE_SVE + const int vector_length = ggml_cpu_get_sve_cnt()*8; +#endif +#if defined(__ARM_FEATURE_SVE) && defined(__ARM_FEATURE_MATMUL_INT8) + if (nrc == 2) { + const svbool_t pg32_2 = svptrue_pat_b32(SV_VL2); + + svfloat32_t sum = svdup_n_f32(0); + + const block_q6_K * GGML_RESTRICT vx0 = vx; + const block_q8_K * GGML_RESTRICT vy0 = vy; + const block_q6_K * GGML_RESTRICT vx1 = (const block_q6_K *) ((const uint8_t*)vx + bx); + const block_q8_K * GGML_RESTRICT vy1 = (const block_q8_K *) ((const uint8_t*)vy + by); + + switch (vector_length) { + case 128: + { + const svbool_t pg128_all = svptrue_pat_b8(SV_ALL); + for (int i = 0; i < nb; ++i) { + const uint8_t * GGML_RESTRICT ql0 = vx0[i].ql; + const uint8_t * GGML_RESTRICT qh0 = vx0[i].qh; + const uint8_t * GGML_RESTRICT ql1 = vx1[i].ql; + const uint8_t * GGML_RESTRICT qh1 = vx1[i].qh; + const int8_t * GGML_RESTRICT q80 = vy0[i].qs; + const int8_t * GGML_RESTRICT q81 = vy1[i].qs; + + const int8_t * GGML_RESTRICT scale0 = vx0[i].scales; + const int8_t * GGML_RESTRICT scale1 = vx1[i].scales; + + svfloat32_t vy_d = svuzp1_f32(svdup_n_f32(vy0[i].d), svdup_n_f32(vy1[i].d)); + svfloat32_t vx_d = svzip1_f32(svdup_n_f32(GGML_FP16_TO_FP32(vx0[i].d)), svdup_n_f32(GGML_FP16_TO_FP32(vx1[i].d))); + svfloat32_t svsuper_block_scales = svmul_f32_x(pg128_all, vy_d, vx_d); + // process q8sum summation 128 bit route + const svint16_t q8sums_01 = svld1_s16(pg128_all, vy0[i].bsums); + const svint16_t q8sums_02 = svld1_s16(pg128_all, vy0[i].bsums + 8); + const svint16_t q8sums_11 = svld1_s16(pg128_all, vy1[i].bsums); + const svint16_t q8sums_12 = svld1_s16(pg128_all, vy1[i].bsums + 8); + const svint64x2_t q6scales_0_tmp = svld2_s64(pg128_all, (const int64_t *)scale0); + const svint16_t q6scales_01 = svunpklo_s16(svreinterpret_s8_s64(svget2_s64(q6scales_0_tmp, 0))); + const svint16_t q6scales_02 = svunpklo_s16(svreinterpret_s8_s64(svget2_s64(q6scales_0_tmp, 1))); + const svint64x2_t q6scales_1_tmp = svld2_s64(pg128_all, (const int64_t *)scale1); + const svint16_t q6scales_11 = svunpklo_s16(svreinterpret_s8_s64(svget2_s64(q6scales_1_tmp, 0))); + const svint16_t q6scales_12 = svunpklo_s16(svreinterpret_s8_s64(svget2_s64(q6scales_1_tmp, 1))); + const svint64_t prod = svdup_n_s64(0); + + svint32_t isum_tmp1 = svreinterpret_s32_s64(svdot_s64(svdot_s64(prod, q8sums_01, q6scales_01), q8sums_02, q6scales_02)); + svint32_t isum_tmp2 = svreinterpret_s32_s64(svdot_s64(svdot_s64(prod, q8sums_01, q6scales_11), q8sums_02, q6scales_12)); + svint32_t isum_tmp3 = svtrn1_s32(isum_tmp1, isum_tmp2); + svint32_t isum_tmp4 = svreinterpret_s32_s64(svdot_s64(svdot_s64(prod, q8sums_11, q6scales_01), q8sums_12, q6scales_02)); + svint32_t isum_tmp5 = svreinterpret_s32_s64(svdot_s64(svdot_s64(prod, q8sums_11, q6scales_11), q8sums_12, q6scales_12)); + svint32_t isum_tmp6 = svtrn1_s32(isum_tmp4, isum_tmp5); + svint32_t isum_tmp7 = svreinterpret_s32_s64(svtrn2_s64(svreinterpret_s64_s32(isum_tmp3), svreinterpret_s64_s32(isum_tmp6))); + svint32_t isum_tmp8 = svreinterpret_s32_s64(svtrn1_s64(svreinterpret_s64_s32(isum_tmp3), svreinterpret_s64_s32(isum_tmp6))); + svint32_t svisum_mins = svadd_s32_x(pg128_all, isum_tmp7, isum_tmp8); + + // process mmla + svint8_t l0, l1, r0, r1; + svint32_t isum_tmp = svdup_n_s32(0); + for (int j = 0; j < QK_K/128; ++j) { + for (int k = 0; k < 8; ++k) { + svuint8_t qhbits_0 = svld1_u8(pg128_all, qh0+16*(k%2)); + svuint8_t qhbits_1 = svld1_u8(pg128_all, qh1+16*(k%2)); + svuint8_t q6bits_0 = svld1_u8(pg128_all, ql0+16*(k%4)); + svuint8_t q6bits_1 = svld1_u8(pg128_all, ql1+16*(k%4)); + const int ql_pos = (k/4)*4; + svuint8_t q6bytes_0_lo = (ql_pos < 4) ? svand_n_u8_x(pg128_all, q6bits_0, 0xf) : svlsr_n_u8_x(pg128_all, q6bits_0, 4); + svuint8_t q6bytes_1_lo = (ql_pos < 4) ? svand_n_u8_x(pg128_all, q6bits_1, 0xf) : svlsr_n_u8_x(pg128_all, q6bits_1, 4); + const int qh_pos = (k/2)*2; + svuint8_t q6bytes_0_hi = svand_n_u8_x(pg128_all, qhbits_0, 0x3 << qh_pos); + svuint8_t q6bytes_1_hi = svand_n_u8_x(pg128_all, qhbits_1, 0x3 << qh_pos); + svint8_t q6bytes_0, q6bytes_1; + if (qh_pos <= 4) { + q6bytes_0 = svreinterpret_s8_u8(svmla_n_u8_x(pg128_all, q6bytes_0_lo, q6bytes_0_hi, 1 << (4 - qh_pos))); + q6bytes_1 = svreinterpret_s8_u8(svmla_n_u8_x(pg128_all, q6bytes_1_lo, q6bytes_1_hi, 1 << (4 - qh_pos))); + } else { + q6bytes_0 = svreinterpret_s8_u8(svorr_u8_x(pg128_all, q6bytes_0_lo, svlsr_n_u8_x(pg128_all, q6bytes_0_hi, (qh_pos - 4)))); + q6bytes_1 = svreinterpret_s8_u8(svorr_u8_x(pg128_all, q6bytes_1_lo, svlsr_n_u8_x(pg128_all, q6bytes_1_hi, (qh_pos - 4)))); + } + svint8_t q8bytes_0 = svld1_s8(pg128_all, q80+16*(k%8)); + svint8_t q8bytes_1 = svld1_s8(pg128_all, q81+16*(k%8)); + l0 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q6bytes_0), svreinterpret_s64_s8(q6bytes_1))); + l1 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q6bytes_0), svreinterpret_s64_s8(q6bytes_1))); + r0 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q8bytes_0), svreinterpret_s64_s8(q8bytes_1))); + r1 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q8bytes_0), svreinterpret_s64_s8(q8bytes_1))); + svint32_t svscale = svzip1_s32(svdup_n_s32(scale0[k]), svdup_n_s32(scale1[k])); + isum_tmp = svmla_s32_x(pg128_all, isum_tmp, svmmla_s32(svmmla_s32(svdup_n_s32(0), r0, l0), r1, l1), svscale); + } + qh0 += 32; qh1 += 32; + ql0 += 64; ql1 += 64; + q80 += 128; q81 += 128; + scale0 += 8; scale1 += 8; + } + sum = svmla_f32_x(pg128_all, sum, + svcvt_f32_x(pg128_all, svmla_s32_x(pg128_all, isum_tmp, + svisum_mins, svdup_n_s32(-32))), + svsuper_block_scales); + } + } // end of case 128 + break; + case 256: + case 512: + { + const svbool_t pg256_all = svptrue_pat_b8(SV_ALL); + const svbool_t pg32_4 = svptrue_pat_b32(SV_VL4); + for (int i = 0; i < nb; ++i) { + const uint8_t * GGML_RESTRICT ql0 = vx0[i].ql; + const uint8_t * GGML_RESTRICT qh0 = vx0[i].qh; + const uint8_t * GGML_RESTRICT ql1 = vx1[i].ql; + const uint8_t * GGML_RESTRICT qh1 = vx1[i].qh; + const int8_t * GGML_RESTRICT q80 = vy0[i].qs; + const int8_t * GGML_RESTRICT q81 = vy1[i].qs; + + const int8_t * GGML_RESTRICT scale0 = vx0[i].scales; + const int8_t * GGML_RESTRICT scale1 = vx1[i].scales; + svfloat32_t vx_d = svzip1_f32(svdup_n_f32(GGML_FP16_TO_FP32(vx0[i].d)), svdup_n_f32(GGML_FP16_TO_FP32(vx1[i].d))); + svfloat64_t vy_d_tmp = svreinterpret_f64_f32(svuzp1_f32(svdup_n_f32(vy0[i].d), svdup_n_f32(vy1[i].d))); + svfloat32_t vy_d = svreinterpret_f32_f64(svuzp1_f64(vy_d_tmp, vy_d_tmp)); + svfloat32_t svsuper_block_scales = svmul_f32_x(pg32_4, vy_d, vx_d); + // process q8sum summation 256 bit route + const svint16_t q8sums_0 = svld1_s16(pg256_all, vy0[i].bsums); + const svint16_t q8sums_1 = svld1_s16(pg256_all, vy1[i].bsums); + const svint16_t q6scales_0 = svunpklo_s16(svld1_s8(pg256_all, scale0)); + const svint16_t q6scales_1 = svunpklo_s16(svld1_s8(pg256_all, scale1)); + const svint64_t prod = svdup_n_s64(0); + svint32_t isum_tmp1 = svreinterpret_s32_s64(svdot_s64(prod, q8sums_0, q6scales_0)); + svint32_t isum_tmp2 = svreinterpret_s32_s64(svdot_s64(prod, q8sums_0, q6scales_1)); + svint32_t isum_tmp3 = svreinterpret_s32_s64(svdot_s64(prod, q8sums_1, q6scales_0)); + svint32_t isum_tmp4 = svreinterpret_s32_s64(svdot_s64(prod, q8sums_1, q6scales_1)); + svint32_t isum_tmp5 = svtrn1_s32(isum_tmp1, isum_tmp2); + svint32_t isum_tmp6 = svtrn1_s32(isum_tmp3, isum_tmp4); + svint32_t isum_tmp7 = svreinterpret_s32_s64(svtrn2_s64(svreinterpret_s64_s32(isum_tmp5), svreinterpret_s64_s32(isum_tmp6))); + svint32_t isum_tmp8 = svreinterpret_s32_s64(svtrn1_s64(svreinterpret_s64_s32(isum_tmp5), svreinterpret_s64_s32(isum_tmp6))); + svint32_t isum_tmp9 = svadd_s32_x(pg256_all, isum_tmp7, isum_tmp8); + svint32_t isum_tmp10 = svreinterpret_s32_u8(svext_u8(svreinterpret_u8_s32(isum_tmp9), svreinterpret_u8_s32(isum_tmp9), 16)); + svint32_t svisum_mins = svadd_s32_z(pg32_4, isum_tmp9, isum_tmp10); + + // process mmla + svint8_t l0, l1, r0, r1; + svint32_t isum_tmp = svdup_n_s32(0); + for (int j = 0; j < QK_K/128; ++j) { + for (int k = 0; k < 8; k+=2) { // process 2 block + svuint8_t qhbits_0 = svld1_u8(pg256_all, qh0); + svuint8_t qhbits_1 = svld1_u8(pg256_all, qh1); + svuint8_t q6bits_0 = svld1_u8(pg256_all, ql0+32*((k%4)/2)); + svuint8_t q6bits_1 = svld1_u8(pg256_all, ql1+32*((k%4)/2)); + const int ql_pos = (k/4)*4; + svuint8_t q6bytes_0_lo = (ql_pos < 4) ? svand_n_u8_x(pg256_all, q6bits_0, 0xf) : svlsr_n_u8_x(pg256_all, q6bits_0, 4); + svuint8_t q6bytes_1_lo = (ql_pos < 4) ? svand_n_u8_x(pg256_all, q6bits_1, 0xf) : svlsr_n_u8_x(pg256_all, q6bits_1, 4); + const int qh_pos = (k/2)*2; + svuint8_t q6bytes_0_hi = svand_n_u8_x(pg256_all, qhbits_0, 0x3 << qh_pos); + svuint8_t q6bytes_1_hi = svand_n_u8_x(pg256_all, qhbits_1, 0x3 << qh_pos); + svint8_t q6bytes_0, q6bytes_1; + if (qh_pos <= 4) { + q6bytes_0 = svreinterpret_s8_u8(svmla_n_u8_x(pg256_all, q6bytes_0_lo, q6bytes_0_hi, 1 << (4 - qh_pos))); + q6bytes_1 = svreinterpret_s8_u8(svmla_n_u8_x(pg256_all, q6bytes_1_lo, q6bytes_1_hi, 1 << (4 - qh_pos))); + } else { + q6bytes_0 = svreinterpret_s8_u8(svorr_u8_x(pg256_all, q6bytes_0_lo, svlsr_n_u8_x(pg256_all, q6bytes_0_hi, (qh_pos - 4)))); + q6bytes_1 = svreinterpret_s8_u8(svorr_u8_x(pg256_all, q6bytes_1_lo, svlsr_n_u8_x(pg256_all, q6bytes_1_hi, (qh_pos - 4)))); + } + svint8_t q8bytes_0 = svld1_s8(pg256_all, q80+32*(k/2)); + svint8_t q8bytes_1 = svld1_s8(pg256_all, q81+32*(k/2)); + l0 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q6bytes_0), svreinterpret_s64_s8(q6bytes_1))); + l1 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q6bytes_0), svreinterpret_s64_s8(q6bytes_1))); + r0 = svreinterpret_s8_s64(svzip1_s64(svreinterpret_s64_s8(q8bytes_0), svreinterpret_s64_s8(q8bytes_1))); + r1 = svreinterpret_s8_s64(svzip2_s64(svreinterpret_s64_s8(q8bytes_0), svreinterpret_s64_s8(q8bytes_1))); + svint32_t svscale0 = svzip1_s32(svdup_n_s32(scale0[k]), svdup_n_s32(scale1[k])); + svint32_t svscale1 = svzip1_s32(svdup_n_s32(scale0[k+1]), svdup_n_s32(scale1[k+1])); + isum_tmp = svmla_s32_x(pg256_all, isum_tmp, svmmla_s32(svdup_n_s32(0), r0, l0), svscale0); + isum_tmp = svmla_s32_x(pg256_all, isum_tmp, svmmla_s32(svdup_n_s32(0), r1, l1), svscale1); + } + qh0 += 32; qh1 += 32; + ql0 += 64; ql1 += 64; + q80 += 128; q81 += 128; + scale0 += 8; scale1 += 8; + } // end of for + svint32_t swap_isum_tmp = svext_s32(isum_tmp, isum_tmp, 4); + isum_tmp = svadd_s32_x(pg32_4, isum_tmp, swap_isum_tmp); + sum = svmla_f32_x(pg32_4, sum, + svcvt_f32_x(pg32_4, svmla_s32_x(pg32_4, isum_tmp, + svisum_mins, svdup_n_s32(-32))), + svsuper_block_scales); + } + } // end of case 256 + break; + default: + assert(false && "Unsupported vector length"); + break; + } // end of switch + + svst1_f32(pg32_2, s, sum); + svst1_f32(pg32_2, s + bs, svreinterpret_f32_u8(svext_u8(svreinterpret_u8_f32(sum), svdup_n_u8(0), 8))); + + return; + } +#elif defined(__ARM_FEATURE_MATMUL_INT8) if (nrc == 2) { const block_q6_K * GGML_RESTRICT x0 = x; const block_q6_K * GGML_RESTRICT x1 = (const block_q6_K *) ((const uint8_t *)vx + bx); @@ -2594,27 +3019,6 @@ void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi // adjust bias, apply superblock scale { int32_t bias[4]; -#ifdef __ARM_FEATURE_SVE - const svbool_t pg16_8 = svptrue_pat_b16(SV_VL8); - const svbool_t pg8_8 = svptrue_pat_b8(SV_VL8); - const svint16_t y0_q8sums_0 = svld1_s16(pg16_8, y0->bsums); - const svint16_t y0_q8sums_1 = svld1_s16(pg16_8, y0->bsums + 8); - const svint16_t y1_q8sums_0 = svld1_s16(pg16_8, y1->bsums); - const svint16_t y1_q8sums_1 = svld1_s16(pg16_8, y1->bsums + 8); - const svint16_t x0_q6scales_0 = svunpklo_s16(svld1_s8(pg8_8, x0->scales)); - const svint16_t x0_q6scales_1 = svunpklo_s16(svld1_s8(pg8_8, x0->scales + 8)); - const svint16_t x1_q6scales_0 = svunpklo_s16(svld1_s8(pg8_8, x1->scales)); - const svint16_t x1_q6scales_1 = svunpklo_s16(svld1_s8(pg8_8, x1->scales + 8)); - const svint64_t zero = svdup_n_s64(0); - bias[0] = svaddv_s64(svptrue_b64(), svadd_s64_x(svptrue_b64(), svdot_s64(zero, y0_q8sums_0, x0_q6scales_0), - svdot_s64(zero, y0_q8sums_1, x0_q6scales_1))); - bias[1] = svaddv_s64(svptrue_b64(), svadd_s64_x(svptrue_b64(), svdot_s64(zero, y1_q8sums_0, x0_q6scales_0), - svdot_s64(zero, y1_q8sums_1, x0_q6scales_1))); - bias[2] = svaddv_s64(svptrue_b64(), svadd_s64_x(svptrue_b64(), svdot_s64(zero, y0_q8sums_0, x1_q6scales_0), - svdot_s64(zero, y0_q8sums_1, x1_q6scales_1))); - bias[3] = svaddv_s64(svptrue_b64(), svadd_s64_x(svptrue_b64(), svdot_s64(zero, y1_q8sums_0, x1_q6scales_0), - svdot_s64(zero, y1_q8sums_1, x1_q6scales_1))); -#else // NEON doesn't support int16 dot product, fallback to separated mul and add const int16x8x2_t q8sums0 = vld1q_s16_x2(y0->bsums); const int16x8x2_t q8sums1 = vld1q_s16_x2(y1->bsums); @@ -2646,7 +3050,6 @@ void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi vmull_s16(vget_high_s16(q8sums1.val[1]), vget_high_s16(q6scales1.val[1])))); bias[3] = vaddvq_s32(prod); -#endif const int32x4_t vibias = vmulq_n_s32(vld1q_s32(bias), 32); const float32x4_t superblock_scale = { @@ -2672,7 +3075,6 @@ void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi #endif #ifdef __ARM_FEATURE_SVE - const int vector_length = ggml_cpu_get_sve_cnt()*8; float sum = 0; svuint8_t m4b = svdup_n_u8(0xf); svint32_t vzero = svdup_n_s32(0); From c27efd2bd1f27b1ad2f0b7cb417dbb9b62b57d44 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 10 Nov 2025 15:38:42 +0200 Subject: [PATCH 51/69] metal : enable tensor API for A19 (#17087) --- ggml/src/ggml-metal/ggml-metal-device.m | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-metal/ggml-metal-device.m b/ggml/src/ggml-metal/ggml-metal-device.m index 606cfd0a5e..3471225ab4 100644 --- a/ggml/src/ggml-metal/ggml-metal-device.m +++ b/ggml/src/ggml-metal/ggml-metal-device.m @@ -564,8 +564,10 @@ ggml_metal_device_t ggml_metal_device_init(void) { // TODO: try to update the tensor API kernels to at least match the simdgroup performance if (getenv("GGML_METAL_TENSOR_ENABLE") == NULL && ![[dev->mtl_device name] containsString:@"M5"] && - ![[dev->mtl_device name] containsString:@"M6"]) { - GGML_LOG_WARN("%s: tensor API disabled for pre-M5 device\n", __func__); + ![[dev->mtl_device name] containsString:@"M6"] && + ![[dev->mtl_device name] containsString:@"A19"] && + ![[dev->mtl_device name] containsString:@"A20"]) { + GGML_LOG_WARN("%s: tensor API disabled for pre-M5 and pre-A19 devices\n", __func__); dev->props.has_tensor = false; } From 0c74f3263273cf0d95d1f10930a12cad94c375af Mon Sep 17 00:00:00 2001 From: Gabe Goodhart Date: Mon, 10 Nov 2025 08:14:23 -0700 Subject: [PATCH 52/69] memory: Hybrid context shift (#17009) * feat(memory): Only fail partial erasure of recurrent tail The recurrent state is always assumed to be the state as of the last update from the final token in the sequence. When doing a partial erasure, if the range does not include the final token, the erasure can be considered a success since any memory used for the sequence prior to the final token (which is no memory) has been successfully removed. There is one potential case that this doesn't address which is the pruning of cache to remove sensitive data from the context. This wouldn't work for attention cache partial removal (in the middle) either since the KV state is linearly-dependent and states in later sequence positions would still be based on the state from the sensitive data, even if that data is no longer cached, so I don't think this is relevant, but it is worth noting that the semantics of this change for a partial erasure in the middle of the cache are essentially "my context is already compressed" and not "all trace of the removed tokens has been removed." https://github.com/ggml-org/llama.cpp/issues/16768 Branch: HybridContextShift-16768 Signed-off-by: Gabe Goodhart * fix(main): Check the output of seq_rm for prefix matching This prefix matching is explicitly attempting to remove the tokens at the end of the sequence that don't match. This is the operation that can't be performed on a recurrent cache due to the state being updated in place, so if this removal fails, we need to clear the whole cache. https://github.com/ggml-org/llama.cpp/issues/16768 Branch: HybridContextShift-16768 Signed-off-by: Gabe Goodhart * fix(memory): Fix condition for partial erasure failure if p0 > pos Signed-off-by: Gabe Goodhart Co-authored-by: compilade * style: Fix extra parens Signed-off-by: Gabe Goodhart Co-authored-by: Georgi Gerganov * fix(main.cpp): Set n_matching_session_tokens to 0 on cache clear https://github.com/ggml-org/llama.cpp/issues/16768 Branch: HybridContextShift-16768 Signed-off-by: Gabe Goodhart --------- Signed-off-by: Gabe Goodhart Co-authored-by: compilade Co-authored-by: Georgi Gerganov --- src/llama-memory-recurrent.cpp | 7 ++++--- tools/main/main.cpp | 6 +++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/llama-memory-recurrent.cpp b/src/llama-memory-recurrent.cpp index 276e1697d4..812bf25304 100644 --- a/src/llama-memory-recurrent.cpp +++ b/src/llama-memory-recurrent.cpp @@ -151,7 +151,8 @@ bool llama_memory_recurrent::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_pos p1 = std::numeric_limits::max(); } - // models like Mamba or RWKV can't have a state partially erased + // models like Mamba or RWKV can't have a state partially erased at the end + // of the sequence because their state isn't preserved for previous tokens if (seq_id >= (int64_t) size) { // could be fatal return false; @@ -160,8 +161,8 @@ bool llama_memory_recurrent::seq_rm(llama_seq_id seq_id, llama_pos p0, llama_pos int32_t & tail_id = cells[seq_id].tail; if (tail_id >= 0) { const auto & cell = cells[tail_id]; - // partial intersection is invalid - if ((0 < p0 && p0 < cell.pos) || (0 < p1 && p1 <= cell.pos)) { + // partial intersection is invalid if it includes the final pos + if (0 < p0 && p0 <= cell.pos && p1 > cell.pos) { //printf("[DEBUG] inside `llama_memory_recurrent::seq_rm`: partial intersection is invalid, so returning false\n"); return false; } diff --git a/tools/main/main.cpp b/tools/main/main.cpp index 498e00e3a5..33e8862335 100644 --- a/tools/main/main.cpp +++ b/tools/main/main.cpp @@ -354,7 +354,11 @@ int main(int argc, char ** argv) { } // remove any "future" tokens that we might have inherited from the previous session - llama_memory_seq_rm(mem, -1, n_matching_session_tokens, -1); + if (!llama_memory_seq_rm(mem, -1, n_matching_session_tokens, -1)) { + LOG_INF("%s: unable to resuse common prefix\n", __func__); + n_matching_session_tokens = 0; + llama_memory_seq_rm(mem, -1, -1, -1); + } } LOG_DBG("recalculate the cached logits (check): embd_inp.size() %zu, n_matching_session_tokens %zu, embd_inp.size() %zu, session_tokens.size() %zu\n", From 85234a4b3aa1084147995a07c12ebcce6310dd9e Mon Sep 17 00:00:00 2001 From: Ruben Ortlam Date: Mon, 10 Nov 2025 16:59:10 +0100 Subject: [PATCH 53/69] vulkan: fix validation issue introduced by #16868 (#17145) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index a7a28b1934..e4b7e1ea9e 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -6831,7 +6831,7 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& vk_buffer d_B = d_D; size_t b_buf_offset = 0; - uint64_t b_sz = 0; + uint64_t b_sz = 1; if (enable_bias) { const ggml_tensor * add = cgraph->nodes[node_idx + 1]; @@ -6965,7 +6965,7 @@ static void ggml_vk_mul_mat_vec_p021_f16_f32(ggml_backend_vk_context * ctx, vk_c vk_buffer d_B = d_D; size_t b_buf_offset = 0; - uint64_t b_sz = 0; + uint64_t b_sz = 1; if (enable_bias) { const ggml_tensor * add = cgraph->nodes[node_idx + 1]; @@ -7101,7 +7101,7 @@ static void ggml_vk_mul_mat_vec_nc_f16_f32(ggml_backend_vk_context * ctx, vk_con vk_buffer d_B = d_D; size_t b_buf_offset = 0; - uint64_t b_sz = 0; + uint64_t b_sz = 1; if (enable_bias) { const ggml_tensor * add = cgraph->nodes[node_idx + 1]; @@ -7676,7 +7676,7 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte vk_buffer d_B = d_D; size_t b_buf_offset = 0; - uint64_t b_sz = 0; + uint64_t b_sz = 1; if (enable_bias || enable_scale) { const ggml_tensor * bias = cgraph->nodes[node_idx + 1]->src[1]; From f117be185ef1b76129e51d26676354af253bf664 Mon Sep 17 00:00:00 2001 From: Ruben Ortlam Date: Mon, 10 Nov 2025 16:59:26 +0100 Subject: [PATCH 54/69] vulkan: check glslc executable string (#17144) --- ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp index c2e42cf006..c8a6f97ecf 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #ifdef _WIN32 #define NOMINMAX @@ -1080,6 +1081,11 @@ int main(int argc, char** argv) { if (args.find("--glslc") != args.end()) { GLSLC = args["--glslc"]; // Path to glslc + + if (!std::filesystem::exists(GLSLC) || !std::filesystem::is_regular_file(GLSLC)) { + std::cerr << "Error: glslc not found at " << GLSLC << std::endl; + return EXIT_FAILURE; + } } if (args.find("--source") != args.end()) { input_filepath = args["--source"]; // The shader source file to compile From 967eb4b2bf5971565094122c64bb54090cbdc05f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Gallou=C3=ABt?= Date: Mon, 10 Nov 2025 20:03:36 +0100 Subject: [PATCH 55/69] ggml-cpu : inspect -march and -mcpu to found the CPU (#16333) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Adrien Gallouët --- ggml/src/ggml-cpu/CMakeLists.txt | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index 23ec8bb08a..a55191aede 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -126,25 +126,36 @@ function(ggml_add_cpu_backend_variant_impl tag_name) ) if (NOT ARM_MCPU_RESULT) string(REGEX MATCH "-mcpu=[^ ']+" ARM_MCPU_FLAG "${ARM_MCPU}") + string(REGEX MATCH "-march=[^ ']+" ARM_MARCH_FLAG "${ARM_MCPU}") + + # on some old GCC we need to read -march= + if (ARM_MARCH_FLAG AND NOT "${ARM_MARCH_FLAG}" STREQUAL "-march=native") + set(ARM_NATIVE_FLAG "${ARM_MARCH_FLAG}") + elseif(ARM_MCPU_FLAG AND NOT "${ARM_MCPU_FLAG}" STREQUAL "-mcpu=native") + set(ARM_NATIVE_FLAG "${ARM_MCPU_FLAG}") + endif() endif() - if ("${ARM_MCPU_FLAG}" STREQUAL "") - set(ARM_MCPU_FLAG -mcpu=native) - message(STATUS "ARM -mcpu not found, -mcpu=native will be used") + + if ("${ARM_NATIVE_FLAG}" STREQUAL "") + set(ARM_NATIVE_FLAG -mcpu=native) + message(WARNING "ARM -march/-mcpu not found, -mcpu=native will be used") + else() + message(STATUS "ARM detected flags: ${ARM_NATIVE_FLAG}") endif() include(CheckCXXSourceRuns) function(check_arm_feature tag code) set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) - set(CMAKE_REQUIRED_FLAGS "${ARM_MCPU_FLAG}+${tag}") + set(CMAKE_REQUIRED_FLAGS "${ARM_NATIVE_FLAG}+${tag}") check_cxx_source_runs("${code}" GGML_MACHINE_SUPPORTS_${tag}) if (GGML_MACHINE_SUPPORTS_${tag}) - set(ARM_MCPU_FLAG_FIX "${ARM_MCPU_FLAG_FIX}+${tag}" PARENT_SCOPE) + set(ARM_NATIVE_FLAG_FIX "${ARM_NATIVE_FLAG_FIX}+${tag}" PARENT_SCOPE) else() - set(CMAKE_REQUIRED_FLAGS "${ARM_MCPU_FLAG}+no${tag}") + set(CMAKE_REQUIRED_FLAGS "${ARM_NATIVE_FLAG}+no${tag}") check_cxx_source_compiles("int main() { return 0; }" GGML_MACHINE_SUPPORTS_no${tag}) if (GGML_MACHINE_SUPPORTS_no${tag}) - set(ARM_MCPU_FLAG_FIX "${ARM_MCPU_FLAG_FIX}+no${tag}" PARENT_SCOPE) + set(ARM_NATIVE_FLAG_FIX "${ARM_NATIVE_FLAG_FIX}+no${tag}" PARENT_SCOPE) endif() endif() set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) @@ -155,7 +166,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name) check_arm_feature(sve "#include \nint main() { svfloat32_t _a, _b; volatile svfloat32_t _c = svadd_f32_z(svptrue_b8(), _a, _b); return 0; }") check_arm_feature(sme "#include \n__arm_locally_streaming int main() { __asm__ volatile(\"smstart; smstop;\"); return 0; }") - list(APPEND ARCH_FLAGS "${ARM_MCPU_FLAG}${ARM_MCPU_FLAG_FIX}") + list(APPEND ARCH_FLAGS "${ARM_NATIVE_FLAG}${ARM_NATIVE_FLAG_FIX}") else() if (GGML_CPU_ARM_ARCH) list(APPEND ARCH_FLAGS -march=${GGML_CPU_ARM_ARCH}) From 13730c183b9e1a32c09bf132b5367697d6c55048 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 10 Nov 2025 21:33:35 +0200 Subject: [PATCH 56/69] metal : cap threadgroups size of set_rows (#17146) --- ggml/src/ggml-metal/ggml-metal-ops.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ggml/src/ggml-metal/ggml-metal-ops.cpp b/ggml/src/ggml-metal/ggml-metal-ops.cpp index 7a85edbdcd..5a8f150a71 100644 --- a/ggml/src/ggml-metal/ggml-metal-ops.cpp +++ b/ggml/src/ggml-metal/ggml-metal-ops.cpp @@ -1036,6 +1036,11 @@ int ggml_metal_op_set_rows(ggml_metal_op_t ctx, int idx) { nth = std::min(nth, nk0); + if (nth*nrptg > ggml_metal_pipeline_max_theads_per_threadgroup(pipeline)) { + nth = ggml_metal_pipeline_max_theads_per_threadgroup(pipeline); + nrptg = 1; + } + ggml_metal_kargs_set_rows args = { /*.nk0 =*/ nk0, /*.ne01 =*/ ne01, From 395e286bc9bc67f45f01dc951e2a408cca2a6b29 Mon Sep 17 00:00:00 2001 From: Max Krasnyansky Date: Mon, 10 Nov 2025 12:44:49 -0800 Subject: [PATCH 57/69] cpu: skip NOPs to avoid barriers (#17133) * cpu: skip NOPs to avoid barriers * cpu: use ggml_op_is_empty --- ggml/src/ggml-cpu/ggml-cpu.c | 37 ++++++++++++++++++--------------- ggml/src/ggml-cpu/ops.cpp | 40 ------------------------------------ ggml/src/ggml-cpu/ops.h | 4 ---- 3 files changed, 21 insertions(+), 60 deletions(-) diff --git a/ggml/src/ggml-cpu/ggml-cpu.c b/ggml/src/ggml-cpu/ggml-cpu.c index b5466dd703..086708bae0 100644 --- a/ggml/src/ggml-cpu/ggml-cpu.c +++ b/ggml/src/ggml-cpu/ggml-cpu.c @@ -1807,22 +1807,6 @@ static void ggml_compute_forward(struct ggml_compute_params * params, struct ggm { ggml_compute_forward_cont(params, tensor); } break; - case GGML_OP_RESHAPE: - { - ggml_compute_forward_reshape(params, tensor); - } break; - case GGML_OP_VIEW: - { - ggml_compute_forward_view(params, tensor); - } break; - case GGML_OP_PERMUTE: - { - ggml_compute_forward_permute(params, tensor); - } break; - case GGML_OP_TRANSPOSE: - { - ggml_compute_forward_transpose(params, tensor); - } break; case GGML_OP_GET_ROWS: { ggml_compute_forward_get_rows(params, tensor); @@ -2042,6 +2026,22 @@ static void ggml_compute_forward(struct ggml_compute_params * params, struct ggm { // nop } break; + case GGML_OP_RESHAPE: + { + // nop + } break; + case GGML_OP_PERMUTE: + { + // nop + } break; + case GGML_OP_VIEW: + { + // nop + } break; + case GGML_OP_TRANSPOSE: + { + // nop + } break; case GGML_OP_COUNT: { GGML_ABORT("fatal error"); @@ -2884,6 +2884,11 @@ static thread_ret_t ggml_graph_compute_thread(void * data) { for (int node_n = 0; node_n < cgraph->n_nodes && atomic_load_explicit(&tp->abort, memory_order_relaxed) != node_n; node_n++) { struct ggml_tensor * node = cgraph->nodes[node_n]; + if (ggml_op_is_empty(node->op)) { + // skip NOPs + continue; + } + ggml_compute_forward(¶ms, node); if (state->ith == 0 && cplan->abort_callback && diff --git a/ggml/src/ggml-cpu/ops.cpp b/ggml/src/ggml-cpu/ops.cpp index 8235f69594..7c42fb78b4 100644 --- a/ggml/src/ggml-cpu/ops.cpp +++ b/ggml/src/ggml-cpu/ops.cpp @@ -4455,46 +4455,6 @@ void ggml_compute_forward_cont( ggml_compute_forward_dup(params, dst); } -// ggml_compute_forward_reshape - -void ggml_compute_forward_reshape( - const ggml_compute_params * params, - ggml_tensor * dst) { - // NOP - GGML_UNUSED(params); - GGML_UNUSED(dst); -} - -// ggml_compute_forward_view - -void ggml_compute_forward_view( - const ggml_compute_params * params, - ggml_tensor * dst) { - // NOP - GGML_UNUSED(params); - GGML_UNUSED(dst); -} - -// ggml_compute_forward_permute - -void ggml_compute_forward_permute( - const ggml_compute_params * params, - ggml_tensor * dst) { - // NOP - GGML_UNUSED(params); - GGML_UNUSED(dst); -} - -// ggml_compute_forward_transpose - -void ggml_compute_forward_transpose( - const ggml_compute_params * params, - ggml_tensor * dst) { - // NOP - GGML_UNUSED(params); - GGML_UNUSED(dst); -} - // ggml_compute_forward_get_rows static void ggml_compute_forward_get_rows_q( diff --git a/ggml/src/ggml-cpu/ops.h b/ggml/src/ggml-cpu/ops.h index 9824a03b45..2b4127c12b 100644 --- a/ggml/src/ggml-cpu/ops.h +++ b/ggml/src/ggml-cpu/ops.h @@ -51,10 +51,6 @@ void ggml_compute_forward_scale(const struct ggml_compute_params * params, struc void ggml_compute_forward_set(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_cpy(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_cont(const struct ggml_compute_params * params, struct ggml_tensor * dst); -void ggml_compute_forward_reshape(const struct ggml_compute_params * params, struct ggml_tensor * dst); -void ggml_compute_forward_view(const struct ggml_compute_params * params, struct ggml_tensor * dst); -void ggml_compute_forward_permute(const struct ggml_compute_params * params, struct ggml_tensor * dst); -void ggml_compute_forward_transpose(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_get_rows(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_get_rows_back(const struct ggml_compute_params * params, struct ggml_tensor * dst); void ggml_compute_forward_set_rows(const struct ggml_compute_params * params, struct ggml_tensor * dst); From 7bef684118cc44f9ab8b82df102d68db94a6d9f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Mon, 10 Nov 2025 22:55:30 +0100 Subject: [PATCH 58/69] models : move build_inp_out_ids outside loop (#17151) * move build_inp_out_ids outside loop * realign --- src/models/ernie4-5.cpp | 9 ++++----- src/models/openai-moe-iswa.cpp | 3 ++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/models/ernie4-5.cpp b/src/models/ernie4-5.cpp index 99962af111..99aead5328 100644 --- a/src/models/ernie4-5.cpp +++ b/src/models/ernie4-5.cpp @@ -1,7 +1,5 @@ #include "models.h" - - llm_build_ernie4_5::llm_build_ernie4_5(const llama_model & model, const llm_graph_params & params) : llm_graph_context(params) { const int64_t n_embd_head = hparams.n_embd_head_v; @@ -19,6 +17,8 @@ llm_build_ernie4_5::llm_build_ernie4_5(const llama_model & model, const llm_grap auto * inp_attn = build_attn_inp_kv(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -67,9 +67,8 @@ llm_build_ernie4_5::llm_build_ernie4_5(const llama_model & model, const llm_grap } if (il == n_layer - 1) { // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); - cur = ggml_get_rows(ctx0, cur, inp_out_ids); - inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); + cur = ggml_get_rows(ctx0, cur, inp_out_ids); + inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); } ggml_tensor * ffn_inp = ggml_add(ctx0, cur, inpSA); cb(ffn_inp, "ffn_inp", il); diff --git a/src/models/openai-moe-iswa.cpp b/src/models/openai-moe-iswa.cpp index 3c0c0eecf5..96596709ee 100644 --- a/src/models/openai-moe-iswa.cpp +++ b/src/models/openai-moe-iswa.cpp @@ -11,6 +11,8 @@ llm_build_openai_moe_iswa::llm_build_openai_moe_iswa(const llama_model & model, auto * inp_attn = build_attn_inp_kv_iswa(); + ggml_tensor * inp_out_ids = build_inp_out_ids(); + for (int il = 0; il < n_layer; ++il) { ggml_tensor * inpSA = inpL; @@ -69,7 +71,6 @@ llm_build_openai_moe_iswa::llm_build_openai_moe_iswa(const llama_model & model, } if (il == n_layer - 1) { // skip computing output for unused tokens - ggml_tensor * inp_out_ids = build_inp_out_ids(); cur = ggml_get_rows(ctx0, cur, inp_out_ids); inpSA = ggml_get_rows(ctx0, inpSA, inp_out_ids); } From ece0f5c1771f1835e66900d4168233f0430d819d Mon Sep 17 00:00:00 2001 From: lhez Date: Mon, 10 Nov 2025 15:00:13 -0800 Subject: [PATCH 59/69] opencl: add fastdiv and use it in set_rows, ported from cuda (#17090) * opencl: add fastdiv for mm q8_0 * opencl: use uint4 for fastdiv vals * opencl: use fastdiv for set_rows * opencl: do not use fastdiv for q8_0 mm --- ggml/src/ggml-opencl/ggml-opencl.cpp | 38 +++++++++++++++++- ggml/src/ggml-opencl/kernels/set_rows.cl | 51 ++++++++++++++++-------- 2 files changed, 71 insertions(+), 18 deletions(-) diff --git a/ggml/src/ggml-opencl/ggml-opencl.cpp b/ggml/src/ggml-opencl/ggml-opencl.cpp index 1d3a318a56..465272fab9 100644 --- a/ggml/src/ggml-opencl/ggml-opencl.cpp +++ b/ggml/src/ggml-opencl/ggml-opencl.cpp @@ -53,6 +53,37 @@ bool ggml_cl_compute_forward(ggml_backend_t backend, struct ggml_tensor * tensor); +// See https://gmplib.org/~tege/divcnst-pldi94.pdf figure 4.1. +// Precompute mp (m' in the paper) and L such that division +// can be computed using a multiply (high 32b of 64b result) +// and a shift: +// +// n/d = (mulhi(n, mp) + n) >> L; +struct fastdiv_vals { + uint32_t mp; + uint32_t L; + uint32_t d; + uint32_t pad; +}; +static_assert(sizeof(fastdiv_vals) == 16, "fastdiv_vals size incorrect"); + +static fastdiv_vals init_fastdiv_values(uint64_t d_64) { + GGML_ASSERT(d_64 != 0); + GGML_ASSERT(d_64 <= std::numeric_limits::max()); + + uint32_t d = (uint32_t)d_64; + + // compute L = ceil(log2(d)); + uint32_t L = 0; + while (L < 32 && (uint32_t{ 1 } << L) < d) { + L++; + } + + uint32_t mp = (uint32_t) ((uint64_t{ 1 } << 32) * ((uint64_t{ 1 } << L) - d) / d + 1); + // pack divisor as well to reduce error surface + return { mp, L, d, 0 }; +} + enum GPU_FAMILY { ADRENO, INTEL, @@ -4464,6 +4495,9 @@ static void ggml_cl_set_rows(ggml_backend_t backend, const ggml_tensor * src0, c GGML_ABORT("not implemented"); } + fastdiv_vals ne11_ = init_fastdiv_values(ne11); + fastdiv_vals ne12_ = init_fastdiv_values(ne12); + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra0->data_device)); CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_ulong), &offset0)); CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &extra1->data_device)); @@ -4474,8 +4508,8 @@ static void ggml_cl_set_rows(ggml_backend_t backend, const ggml_tensor * src0, c CL_CHECK(clSetKernelArg(kernel, 7, sizeof(cl_ulong), &nb01)); CL_CHECK(clSetKernelArg(kernel, 8, sizeof(cl_ulong), &nb02)); CL_CHECK(clSetKernelArg(kernel, 9, sizeof(cl_ulong), &nb03)); - CL_CHECK(clSetKernelArg(kernel, 10, sizeof(int), &ne11)); - CL_CHECK(clSetKernelArg(kernel, 11, sizeof(int), &ne12)); + CL_CHECK(clSetKernelArg(kernel, 10, sizeof(fastdiv_vals), &ne11_)); + CL_CHECK(clSetKernelArg(kernel, 11, sizeof(fastdiv_vals), &ne12_)); CL_CHECK(clSetKernelArg(kernel, 12, sizeof(cl_ulong), &nb10)); CL_CHECK(clSetKernelArg(kernel, 13, sizeof(cl_ulong), &nb11)); CL_CHECK(clSetKernelArg(kernel, 14, sizeof(cl_ulong), &nb12)); diff --git a/ggml/src/ggml-opencl/kernels/set_rows.cl b/ggml/src/ggml-opencl/kernels/set_rows.cl index dcdc1d1b6f..fc3ff7aa1e 100644 --- a/ggml/src/ggml-opencl/kernels/set_rows.cl +++ b/ggml/src/ggml-opencl/kernels/set_rows.cl @@ -1,5 +1,16 @@ #pragma OPENCL EXTENSION cl_khr_fp16 : enable +// v = { mp, L, d } +inline uint fastdiv(uint n, uint4 v) { + uint msbs; + msbs = mul_hi(n, v.s0); + return (msbs + n) >> v.s1; +} +inline uint fastmod(uint n, uint4 v) { + uint q = fastdiv(n, v); + return n - q * v.s2; +} + kernel void kernel_set_rows_f32_i64( global char * src0, ulong offset0, @@ -11,8 +22,8 @@ kernel void kernel_set_rows_f32_i64( ulong nb01, ulong nb02, ulong nb03, - int ne11, - int ne12, + uint4 ne11, + uint4 ne12, ulong nb10, ulong nb11, ulong nb12, @@ -33,8 +44,10 @@ kernel void kernel_set_rows_f32_i64( return; } - int i12 = i03%ne12; - int i11 = i02%ne11; + //int i12 = i03%ne12; + //int i11 = i02%ne11; + int i12 = fastmod(i03, ne12); + int i11 = fastmod(i02, ne11); int i10 = i01; long i1 = ((global long *)(src1 + i10*nb10 + i11*nb11 + i12*nb12))[0]; @@ -58,8 +71,8 @@ kernel void kernel_set_rows_f16_i64( ulong nb01, ulong nb02, ulong nb03, - int ne11, - int ne12, + uint4 ne11, + uint4 ne12, ulong nb10, ulong nb11, ulong nb12, @@ -80,8 +93,10 @@ kernel void kernel_set_rows_f16_i64( return; } - int i12 = i03%ne12; - int i11 = i02%ne11; + //int i12 = i03%ne12; + //int i11 = i02%ne11; + int i12 = fastmod(i03, ne12); + int i11 = fastmod(i02, ne11); int i10 = i01; long i1 = ((global long *)(src1 + i10*nb10 + i11*nb11 + i12*nb12))[0]; @@ -105,8 +120,8 @@ kernel void kernel_set_rows_f32_i32( ulong nb01, ulong nb02, ulong nb03, - int ne11, - int ne12, + uint4 ne11, + uint4 ne12, ulong nb10, ulong nb11, ulong nb12, @@ -127,8 +142,10 @@ kernel void kernel_set_rows_f32_i32( return; } - int i12 = i03%ne12; - int i11 = i02%ne11; + //int i12 = i03%ne12; + //int i11 = i02%ne11; + int i12 = fastmod(i03, ne12); + int i11 = fastmod(i02, ne11); int i10 = i01; int i1 = ((global int *)(src1 + i10*nb10 + i11*nb11 + i12*nb12))[0]; @@ -152,8 +169,8 @@ kernel void kernel_set_rows_f16_i32( ulong nb01, ulong nb02, ulong nb03, - int ne11, - int ne12, + uint4 ne11, + uint4 ne12, ulong nb10, ulong nb11, ulong nb12, @@ -174,8 +191,10 @@ kernel void kernel_set_rows_f16_i32( return; } - int i12 = i03%ne12; - int i11 = i02%ne11; + //int i12 = i03%ne12; + //int i11 = i02%ne11; + int i12 = fastmod(i03, ne12); + int i11 = fastmod(i02, ne11); int i10 = i01; int i1 = ((global int *)(src1 + i10*nb10 + i11*nb11 + i12*nb12))[0]; From 2fc392ce358ac56a198a658ea30467b91ea95685 Mon Sep 17 00:00:00 2001 From: levkropp Date: Tue, 11 Nov 2025 03:38:30 -0500 Subject: [PATCH 60/69] convert : register UMT5Model architecture for T5 conversion (#17160) Register UMT5Model as a supported architecture variant for T5 model conversion. This allows the conversion to work for models downloaded with AutoModel. --- convert_hf_to_gguf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 13448fd681..cc77a3db27 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -7354,6 +7354,7 @@ class PLMModel(TextModel): @ModelBase.register("T5ForConditionalGeneration") @ModelBase.register("MT5ForConditionalGeneration") @ModelBase.register("UMT5ForConditionalGeneration") +@ModelBase.register("UMT5Model") class T5Model(TextModel): model_arch = gguf.MODEL_ARCH.T5 From d2d626938aa7b0137df6a808e0637151806a9d5a Mon Sep 17 00:00:00 2001 From: "Nicolas B. Pierron" Date: Tue, 11 Nov 2025 11:53:59 +0100 Subject: [PATCH 61/69] Install rpc-server when GGML_RPC is ON. (#17149) --- .devops/nix/package.nix | 2 ++ tools/rpc/CMakeLists.txt | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/.devops/nix/package.nix b/.devops/nix/package.nix index 41748e89d5..a13996bd68 100644 --- a/.devops/nix/package.nix +++ b/.devops/nix/package.nix @@ -34,6 +34,7 @@ rocmGpuTargets ? builtins.concatStringsSep ";" rocmPackages.clr.gpuTargets, enableCurl ? true, useVulkan ? false, + useRpc ? false, llamaVersion ? "0.0.0", # Arbitrary version, substituted by the flake # It's necessary to consistently use backendStdenv when building with CUDA support, @@ -175,6 +176,7 @@ effectiveStdenv.mkDerivation (finalAttrs: { (cmakeBool "GGML_METAL" useMetalKit) (cmakeBool "GGML_VULKAN" useVulkan) (cmakeBool "GGML_STATIC" enableStatic) + (cmakeBool "GGML_RPC" useRpc) ] ++ optionals useCuda [ ( diff --git a/tools/rpc/CMakeLists.txt b/tools/rpc/CMakeLists.txt index c2c7481486..20f114ad9b 100644 --- a/tools/rpc/CMakeLists.txt +++ b/tools/rpc/CMakeLists.txt @@ -2,3 +2,7 @@ set(TARGET rpc-server) add_executable(${TARGET} rpc-server.cpp) target_link_libraries(${TARGET} PRIVATE ggml) target_compile_features(${TARGET} PRIVATE cxx_std_17) + +if(LLAMA_TOOLS_INSTALL) + install(TARGETS ${TARGET} RUNTIME) +endif() From 4a5b8aff40277071dbb98e81b5d0cbbbd3c37283 Mon Sep 17 00:00:00 2001 From: Mike Abbott Date: Tue, 11 Nov 2025 04:19:50 -0700 Subject: [PATCH 62/69] cmake : add version to all shared object files (#17091) When compiling llama.cpp in Yocto, it fails QA checks because the generated so files aren't versioned. This applies a version to all generated so files, allowing the package to build without errors. --- ggml/src/CMakeLists.txt | 16 ++++++++++++++++ src/CMakeLists.txt | 5 +++++ tools/mtmd/CMakeLists.txt | 5 +++++ 3 files changed, 26 insertions(+) diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index f30e4ac902..628db3fd65 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -211,6 +211,11 @@ add_library(ggml-base ggml-quants.h gguf.cpp) +set_target_properties(ggml-base PROPERTIES + VERSION ${GGML_VERSION} + SOVERSION ${GGML_VERSION_MAJOR} +) + target_include_directories(ggml-base PRIVATE .) if (GGML_BACKEND_DL) target_compile_definitions(ggml-base PUBLIC GGML_BACKEND_DL) @@ -220,6 +225,11 @@ add_library(ggml ggml-backend-reg.cpp) add_library(ggml::ggml ALIAS ggml) +set_target_properties(ggml PROPERTIES + VERSION ${GGML_VERSION} + SOVERSION ${GGML_VERSION_MAJOR} +) + if (GGML_BACKEND_DIR) if (NOT GGML_BACKEND_DL) message(FATAL_ERROR "GGML_BACKEND_DIR requires GGML_BACKEND_DL") @@ -259,6 +269,12 @@ function(ggml_add_backend_library backend) target_compile_definitions(${backend} PUBLIC GGML_BACKEND_SHARED) endif() + # Set versioning properties for all backend libraries + set_target_properties(${backend} PROPERTIES + VERSION ${GGML_VERSION} + SOVERSION ${GGML_VERSION_MAJOR} + ) + if(NOT GGML_AVAILABLE_BACKENDS) set(GGML_AVAILABLE_BACKENDS "${backend}" CACHE INTERNAL "List of backends for cmake package") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 630b2cddf6..6fc5b00101 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -132,6 +132,11 @@ add_library(llama models/graph-context-mamba.cpp ) +set_target_properties(llama PROPERTIES + VERSION ${LLAMA_INSTALL_VERSION} + SOVERSION 0 +) + target_include_directories(llama PRIVATE .) target_include_directories(llama PUBLIC ../include) target_compile_features (llama PRIVATE cxx_std_17) # don't bump diff --git a/tools/mtmd/CMakeLists.txt b/tools/mtmd/CMakeLists.txt index 2381012a0d..f640ae2a6e 100644 --- a/tools/mtmd/CMakeLists.txt +++ b/tools/mtmd/CMakeLists.txt @@ -13,6 +13,11 @@ add_library(mtmd mtmd-helper.h ) +set_target_properties(mtmd PROPERTIES + VERSION ${LLAMA_INSTALL_VERSION} + SOVERSION 0 +) + target_link_libraries (mtmd PUBLIC ggml llama) target_link_libraries (mtmd PRIVATE Threads::Threads) target_include_directories(mtmd PUBLIC .) From 8c583242adfe09cbf35e41353aa01fb96da301a0 Mon Sep 17 00:00:00 2001 From: Charles Xu Date: Tue, 11 Nov 2025 12:20:31 +0100 Subject: [PATCH 63/69] kleidiai: add optimized per-channel kernels for Q8_0 (#16993) --- ggml/src/ggml-cpu/CMakeLists.txt | 18 +- ggml/src/ggml-cpu/kleidiai/kernels.cpp | 283 ++++++++++++++++++++++++ ggml/src/ggml-cpu/kleidiai/kernels.h | 1 + ggml/src/ggml-cpu/kleidiai/kleidiai.cpp | 277 +++++++++++++++++++---- 4 files changed, 538 insertions(+), 41 deletions(-) diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index a55191aede..e52e050a81 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -590,6 +590,7 @@ function(ggml_add_cpu_backend_variant_impl tag_name) ${KLEIDIAI_SRC}/kai/ukernels/ ${KLEIDIAI_SRC}/kai/ukernels/matmul/ ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qsi8d32p_qsi4c32p/ + ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi8cxp/ ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_fp32_bf16p_bf16p/ ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/) @@ -608,23 +609,34 @@ function(ggml_add_cpu_backend_variant_impl tag_name) ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_lhs_quant_pack_qsi8d32p4x8sb_f32_neon.c ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_rhs_pack_nxk_qsi4c32ps1s0scalef16_qsu4c32s16s0_neon.c ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_lhs_quant_pack_qsi8d32p_f32_neon.c - ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_rhs_pack_nxk_qsi4c32pscalef16_qsu4c32s16s0.c) + ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_rhs_pack_nxk_qsi4c32pscalef16_qsu4c32s16s0.c + ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_lhs_quant_pack_qai8dxp_f32.c + ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_rhs_pack_nxk_qsi8cxp_qsi8cx_neon.c) if (NOT DOTPROD_ENABLED MATCHES -1) list(APPEND GGML_KLEIDIAI_SOURCES ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qsi8d32p_qsi4c32p/kai_matmul_clamp_f32_qsi8d32p1x8_qsi4c32p4x8_1x4x32_neon_dotprod.c ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qsi8d32p_qsi4c32p/kai_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4x4_1x4_neon_dotprod.c - ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qsi8d32p_qsi4c32p/kai_matmul_clamp_f32_qsi8d32p4x4_qsi4c32p4x4_16x4_neon_dotprod.c) + ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qsi8d32p_qsi4c32p/kai_matmul_clamp_f32_qsi8d32p4x4_qsi4c32p4x4_16x4_neon_dotprod.c + ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi8cxp/kai_matmul_clamp_f32_qai8dxp4x4_qsi8cxp4x4_16x4_neon_dotprod.c + ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi8cxp/kai_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4x4_1x4_neon_dotprod.c + ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi8cxp/kai_matmul_clamp_f32_qai8dxp1x8_qsi8cxp4x8_1x4_neon_dotprod.c) endif() if (NOT I8MM_ENABLED MATCHES -1) - list(APPEND GGML_KLEIDIAI_SOURCES ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qsi8d32p_qsi4c32p/kai_matmul_clamp_f32_qsi8d32p4x8_qsi4c32p4x8_16x4_neon_i8mm.c) + list(APPEND GGML_KLEIDIAI_SOURCES + ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qsi8d32p_qsi4c32p/kai_matmul_clamp_f32_qsi8d32p4x8_qsi4c32p4x8_16x4_neon_i8mm.c + ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi8cxp/kai_matmul_clamp_f32_qai8dxp4x8_qsi8cxp4x8_16x4_neon_i8mm.c) endif() if (NOT SME_ENABLED MATCHES -1) list(APPEND GGML_KLEIDIAI_SOURCES ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qsi8d32p_qsi4c32p/kai_matmul_clamp_f32_qsi8d32p1vlx4_qsi4c32p4vlx4_1vlx4vl_sme2_mopa.c ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qsi8d32p_qsi4c32p/kai_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4vlx4_1x4vl_sme2_sdot.c + ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi8cxp/kai_matmul_clamp_f32_qai8dxp1vlx4_qsi8cxp4vlx4_1vlx4vl_sme2_mopa.c + ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi8cxp/kai_matmul_clamp_f32_qai8dxp1vlx4_qsi8cxp4vlx4_1vlx4vl_sme2_mopa_asm.S + ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi8cxp/kai_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4vlx4_1x4vl_sme2_dot.c + ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_f32_qai8dxp_qsi8cxp/kai_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4vlx4_1x4vl_sme2_dot_asm.S ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_fp32_bf16p_bf16p/kai_matmul_clamp_f32_bf16p2vlx2_bf16p2vlx2_2vlx2vl_sme2_mopa.c ${KLEIDIAI_SRC}/kai/ukernels/matmul/matmul_clamp_fp32_bf16p_bf16p/kai_matmul_clamp_f32_bf16p2vlx2_bf16p2vlx2_2vlx2vl_sme2_mopa_asm.S ${KLEIDIAI_SRC}/kai/ukernels/matmul/pack/kai_lhs_pack_bf16p2vlx2_f32_sme.c diff --git a/ggml/src/ggml-cpu/kleidiai/kernels.cpp b/ggml/src/ggml-cpu/kleidiai/kernels.cpp index 3eaa5e3f41..1d5b44f9fe 100644 --- a/ggml/src/ggml-cpu/kleidiai/kernels.cpp +++ b/ggml/src/ggml-cpu/kleidiai/kernels.cpp @@ -4,6 +4,7 @@ // KleidiAI micro-kernels #include "kai_matmul_clamp_f32_qsi8d32p_qsi4c32p_interface.h" +#include "kai_matmul_clamp_f32_qai8dxp_qsi8cxp_interface.h" #include "kai_matmul_clamp_f32_qsi8d32p1x8_qsi4c32p4x8_1x4x32_neon_dotprod.h" #include "kai_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4x4_1x4_neon_dotprod.h" #include "kai_matmul_clamp_f32_qsi8d32p4x4_qsi4c32p4x4_16x4_neon_dotprod.h" @@ -11,20 +12,31 @@ #include "kai_matmul_clamp_f32_qsi8d32p1vlx4_qsi4c32p4vlx4_1vlx4vl_sme2_mopa.h" #include "kai_matmul_clamp_f32_qsi8d32p1x4_qsi4c32p4vlx4_1x4vl_sme2_sdot.h" #include "kai_matmul_clamp_f32_bf16p2vlx2_bf16p2vlx2_2vlx2vl_sme2_mopa.h" +#include "kai_matmul_clamp_f32_qai8dxp1vlx4_qsi8cxp4vlx4_1vlx4vl_sme2_mopa.h" +#include "kai_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4vlx4_1x4vl_sme2_dot.h" +#include "kai_matmul_clamp_f32_qai8dxp1x8_qsi8cxp4x8_1x4_neon_dotprod.h" +#include "kai_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4x4_1x4_neon_dotprod.h" +#include "kai_matmul_clamp_f32_qai8dxp4x4_qsi8cxp4x4_16x4_neon_dotprod.h" +#include "kai_matmul_clamp_f32_qai8dxp4x8_qsi8cxp4x8_16x4_neon_i8mm.h" #include "kai_lhs_pack_bf16p2vlx2_f32_sme.h" #include "kai_lhs_quant_pack_qsi8d32p_f32.h" #include "kai_lhs_quant_pack_qsi8d32p4x8sb_f32_neon.h" #include "kai_lhs_quant_pack_qsi8d32p_f32_neon.h" +#include "kai_lhs_quant_pack_qai8dxp_f32.h" #include "kai_rhs_pack_kxn_bf16p2vlx2b_f32_x32_sme.h" #include "kai_rhs_pack_nxk_qsi4c32pscalef16_qsu4c32s16s0.h" #include "kai_rhs_pack_nxk_qsi4c32ps1s0scalef16_qsu4c32s16s0_neon.h" +#include "kai_rhs_pack_nxk_qsi8cxp_qsi8cx_neon.h" #include "kai_common.h" #include "simd-mappings.h" +#define GGML_COMMON_DECL_CPP +#include "ggml-common.h" + #include "kernels.h" #define NELEMS(x) sizeof(x) / sizeof(*x) @@ -55,6 +67,14 @@ static inline void kernel_run_fn10(size_t m, size_t n, size_t k, size_t /*bl*/, Fn(m, n, k, lhs, rhs, dst, dst_stride_row, dst_stride_col, clamp_min, clamp_max); } +template +static inline void kernel_run_float_fn10(size_t m, size_t n, size_t k, size_t /*bl*/, + const void* lhs, const void* rhs, void* dst, + size_t dst_stride_row, size_t dst_stride_col, + float clamp_min, float clamp_max) { + Fn(m, n, k, lhs, rhs, static_cast(dst), dst_stride_row, dst_stride_col, clamp_min, clamp_max); +} + template static inline size_t lhs_ps_fn6(size_t m, size_t k, size_t bl, size_t mr, size_t kr, size_t sr) { return Fn(m, k, bl, mr, kr, sr); @@ -93,6 +113,12 @@ static inline void lhs_pack_void_fn9(size_t m, size_t k, size_t /*bl*/, size_t m Fn(m, k, mr, kr, sr, m_idx_start, lhs, lhs_stride, lhs_packed); } +template +static inline void lhs_pack_float_fn9_no_bl(size_t m, size_t k, size_t /*bl*/, size_t mr, size_t kr, size_t sr, + size_t m_idx_start, const void * lhs, size_t lhs_stride, void * lhs_packed) { + Fn(m, k, mr, kr, sr, m_idx_start, static_cast(lhs), lhs_stride, lhs_packed); +} + template static inline size_t rhs_ps_fn5(size_t n, size_t k, size_t nr, size_t kr, size_t bl) { return Fn(n, k, nr, kr, bl); @@ -124,6 +150,18 @@ static inline void rhs_pack_fn12(size_t num_groups, size_t n, size_t k, size_t n static_cast(params)); } +template +static inline void rhs_pack_scale_fn12(size_t num_groups, size_t n, size_t k, size_t nr, size_t kr, size_t sr, size_t /*bl*/, + size_t /*rhs_stride*/, const void* rhs, const void* bias, const void* scale, + void* rhs_packed, size_t extra_bytes, const void* params) { + Fn(num_groups, n, k, nr, kr, sr, + static_cast(rhs), + static_cast(bias), + static_cast(scale), + rhs_packed, extra_bytes, + static_cast(params)); +} + template static inline void rhs_pack_fn13(size_t num_groups, size_t n, size_t k, size_t nr, size_t kr, size_t sr, size_t /*bl*/, size_t rhs_stride, const void* rhs, const void* bias, const void* scale, @@ -213,6 +251,57 @@ static void dequantize_row_qsi4c32ps1s0scalef16( GGML_UNUSED(kr); } +static void dequantize_row_qsi8cxp( + const void *packed_data, + int32_t row_idx, + int64_t k, + float *out, + size_t nr, + size_t packed_row_stride, + size_t kr, + size_t bl, + size_t num_bytes_multiplier +) { + GGML_UNUSED(bl); + GGML_UNUSED(num_bytes_multiplier); + + const size_t k_internal = ((size_t) k + QK8_0 - 1) / QK8_0 * QK8_0; + const size_t group_idx = row_idx / nr; + const size_t row_in_group = row_idx % nr; + + const uint8_t * group_ptr = static_cast(packed_data) + group_idx * packed_row_stride; + const int8_t * data_base = reinterpret_cast(group_ptr); + + const size_t num_blocks = k_internal / kr; + + for (size_t block = 0; block < num_blocks; ++block) { + const int8_t * block_ptr = data_base + (block * nr + row_in_group) * kr; + for (size_t i = 0; i < kr; ++i) { + const size_t k_idx = block * kr + i; + if (k_idx < (size_t) k) { + out[k_idx] = static_cast(block_ptr[i]); + } + } + } + + const uint8_t * sums_ptr = group_ptr + nr * k_internal; + GGML_UNUSED(sums_ptr); + + const float * scale_ptr = reinterpret_cast(sums_ptr + nr * sizeof(int32_t)); + const float scale = scale_ptr[row_in_group]; + + if (scale == 0.0f) { + for (size_t i = 0; i < (size_t) k; ++i) { + out[i] = 0.0f; + } + return; + } + + for (size_t i = 0; i < (size_t) k; ++i) { + out[i] *= scale; + } +} + static ggml_kleidiai_kernels gemm_gemv_kernels[] = { #if defined(__ARM_FEATURE_SME) { @@ -548,6 +637,174 @@ static ggml_kleidiai_kernels gemm_gemv_kernels[] = { #endif }; +static ggml_kleidiai_kernels gemm_gemv_kernels_q8[] = { +#if defined(__ARM_FEATURE_SME) + { + /* SME GEMM */ + { + /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_qai8dxp1vlx4_qsi8cxp4vlx4_1vlx4vl_sme2_mopa, + /* .get_n_step = */ kai_get_n_step_matmul_clamp_f32_qai8dxp1vlx4_qsi8cxp4vlx4_1vlx4vl_sme2_mopa, + /* .get_mr = */ kai_get_mr_matmul_clamp_f32_qai8dxp1vlx4_qsi8cxp4vlx4_1vlx4vl_sme2_mopa, + /* .get_nr = */ kai_get_nr_matmul_clamp_f32_qai8dxp1vlx4_qsi8cxp4vlx4_1vlx4vl_sme2_mopa, + /* .get_kr = */ kai_get_kr_matmul_clamp_f32_qai8dxp1vlx4_qsi8cxp4vlx4_1vlx4vl_sme2_mopa, + /* .get_sr = */ kai_get_sr_matmul_clamp_f32_qai8dxp1vlx4_qsi8cxp4vlx4_1vlx4vl_sme2_mopa, + /* .get_dst_offset = */ kai_get_dst_offset_matmul_clamp_f32_qai8dxp1vlx4_qsi8cxp4vlx4_1vlx4vl_sme2_mopa, + /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qai8dxp1vlx4_qsi8cxp4vlx4_1vlx4vl_sme2_mopa, + /* .get_lhs_offset_ex = */ &kernel_offs_fn2, + /* .get_rhs_packed_offset_ex = */ &kernel_offs_fn2, + /* .run_kernel_ex = */ &kernel_run_float_fn10, + }, + /* .gemm_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qai8dxp_f32, + /* .get_packed_offset_ex = */ &lhs_offs_fn5, + /* .packed_size_ex = */ &lhs_ps_fn5, + /* .pack_func_ex = */ &lhs_pack_float_fn9_no_bl, + }, + /* SME GEMV */ + { + /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4vlx4_1x4vl_sme2_dot, + /* .get_n_step = */ kai_get_n_step_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4vlx4_1x4vl_sme2_dot, + /* .get_mr = */ kai_get_mr_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4vlx4_1x4vl_sme2_dot, + /* .get_nr = */ kai_get_nr_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4vlx4_1x4vl_sme2_dot, + /* .get_kr = */ kai_get_kr_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4vlx4_1x4vl_sme2_dot, + /* .get_sr = */ kai_get_sr_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4vlx4_1x4vl_sme2_dot, + /* .get_dst_offset = */ kai_get_dst_offset_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4vlx4_1x4vl_sme2_dot, + /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4vlx4_1x4vl_sme2_dot, + /* .get_lhs_offset_ex = */ &kernel_offs_fn2, + /* .get_rhs_packed_offset_ex = */ &kernel_offs_fn2, + /* .run_kernel_ex = */ &kernel_run_float_fn10, + }, + /* .gemv_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qai8dxp_f32, + /* .get_packed_offset_ex = */ &lhs_offs_fn5, + /* .packed_size_ex = */ &lhs_ps_fn5, + /* .pack_func_ex = */ &lhs_pack_float_fn9_no_bl, + }, + /* .rhs_info = */ { + /* .packed_stride = */ kai_get_rhs_packed_stride_rhs_pack_nxk_qsi8cxp_qsi8cx_neon, + /* .to_float = */ dequantize_row_qsi8cxp, + /* .packed_size_ex = */ &rhs_ps_fn5, + /* .packed_stride_ex = */ &rhs_stride_fn4, + /* .pack_func_ex = */ &rhs_pack_scale_fn12, + }, + /* .required_cpu = */ CPU_FEATURE_SME, + /* .lhs_type = */ GGML_TYPE_F32, + /* .rhs_type = */ GGML_TYPE_Q8_0, + /* .op_type = */ GGML_TYPE_F32, + }, +#endif +#if defined(__ARM_FEATURE_MATMUL_INT8) + { + /* I8MM GEMM */ + { + /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_qai8dxp4x8_qsi8cxp4x8_16x4_neon_i8mm, + /* .get_n_step = */ kai_get_n_step_matmul_clamp_f32_qai8dxp4x8_qsi8cxp4x8_16x4_neon_i8mm, + /* .get_mr = */ kai_get_mr_matmul_clamp_f32_qai8dxp4x8_qsi8cxp4x8_16x4_neon_i8mm, + /* .get_nr = */ kai_get_nr_matmul_clamp_f32_qai8dxp4x8_qsi8cxp4x8_16x4_neon_i8mm, + /* .get_kr = */ kai_get_kr_matmul_clamp_f32_qai8dxp4x8_qsi8cxp4x8_16x4_neon_i8mm, + /* .get_sr = */ kai_get_sr_matmul_clamp_f32_qai8dxp4x8_qsi8cxp4x8_16x4_neon_i8mm, + /* .get_dst_offset = */ kai_get_dst_offset_matmul_clamp_f32_qai8dxp4x8_qsi8cxp4x8_16x4_neon_i8mm, + /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qai8dxp4x8_qsi8cxp4x8_16x4_neon_i8mm, + /* .get_lhs_offset_ex = */ &kernel_offs_fn2, + /* .get_rhs_packed_offset_ex = */ &kernel_offs_fn2, + /* .run_kernel_ex = */ &kernel_run_float_fn10, + }, + /* .gemm_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qai8dxp_f32, + /* .get_packed_offset_ex = */ &lhs_offs_fn5, + /* .packed_size_ex = */ &lhs_ps_fn5, + /* .pack_func_ex = */ &lhs_pack_float_fn9_no_bl, + }, + /* I8MM GEMV (dotprod fallback) */ + { + /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_qai8dxp1x8_qsi8cxp4x8_1x4_neon_dotprod, + /* .get_n_step = */ kai_get_n_step_matmul_clamp_f32_qai8dxp1x8_qsi8cxp4x8_1x4_neon_dotprod, + /* .get_mr = */ kai_get_mr_matmul_clamp_f32_qai8dxp1x8_qsi8cxp4x8_1x4_neon_dotprod, + /* .get_nr = */ kai_get_nr_matmul_clamp_f32_qai8dxp1x8_qsi8cxp4x8_1x4_neon_dotprod, + /* .get_kr = */ kai_get_kr_matmul_clamp_f32_qai8dxp1x8_qsi8cxp4x8_1x4_neon_dotprod, + /* .get_sr = */ kai_get_sr_matmul_clamp_f32_qai8dxp1x8_qsi8cxp4x8_1x4_neon_dotprod, + /* .get_dst_offset = */ kai_get_dst_offset_matmul_clamp_f32_qai8dxp1x8_qsi8cxp4x8_1x4_neon_dotprod, + /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qai8dxp1x8_qsi8cxp4x8_1x4_neon_dotprod, + /* .get_lhs_offset_ex = */ &kernel_offs_fn2, + /* .get_rhs_packed_offset_ex = */ &kernel_offs_fn2, + /* .run_kernel_ex = */ &kernel_run_float_fn10, + }, + /* .gemv_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qai8dxp_f32, + /* .get_packed_offset_ex = */ &lhs_offs_fn5, + /* .packed_size_ex = */ &lhs_ps_fn5, + /* .pack_func_ex = */ &lhs_pack_float_fn9_no_bl, + }, + /* .rhs_info = */ { + /* .packed_stride = */ kai_get_rhs_packed_stride_rhs_pack_nxk_qsi8cxp_qsi8cx_neon, + /* .to_float = */ dequantize_row_qsi8cxp, + /* .packed_size_ex = */ &rhs_ps_fn5, + /* .packed_stride_ex = */ &rhs_stride_fn4, + /* .pack_func_ex = */ &rhs_pack_scale_fn12, + }, + /* .required_cpu = */ CPU_FEATURE_DOTPROD | CPU_FEATURE_I8MM, + /* .lhs_type = */ GGML_TYPE_F32, + /* .rhs_type = */ GGML_TYPE_Q8_0, + /* .op_type = */ GGML_TYPE_F32, + }, +#endif +#if defined(__ARM_FEATURE_DOTPROD) + { + /* DOTPROD GEMM */ + { + /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_qai8dxp4x4_qsi8cxp4x4_16x4_neon_dotprod, + /* .get_n_step = */ kai_get_n_step_matmul_clamp_f32_qai8dxp4x4_qsi8cxp4x4_16x4_neon_dotprod, + /* .get_mr = */ kai_get_mr_matmul_clamp_f32_qai8dxp4x4_qsi8cxp4x4_16x4_neon_dotprod, + /* .get_nr = */ kai_get_nr_matmul_clamp_f32_qai8dxp4x4_qsi8cxp4x4_16x4_neon_dotprod, + /* .get_kr = */ kai_get_kr_matmul_clamp_f32_qai8dxp4x4_qsi8cxp4x4_16x4_neon_dotprod, + /* .get_sr = */ kai_get_sr_matmul_clamp_f32_qai8dxp4x4_qsi8cxp4x4_16x4_neon_dotprod, + /* .get_dst_offset = */ kai_get_dst_offset_matmul_clamp_f32_qai8dxp4x4_qsi8cxp4x4_16x4_neon_dotprod, + /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qai8dxp4x4_qsi8cxp4x4_16x4_neon_dotprod, + /* .get_lhs_offset_ex = */ &kernel_offs_fn2, + /* .get_rhs_packed_offset_ex = */ &kernel_offs_fn2, + /* .run_kernel_ex = */ &kernel_run_float_fn10, + }, + /* .gemm_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qai8dxp_f32, + /* .get_packed_offset_ex = */ &lhs_offs_fn5, + /* .packed_size_ex = */ &lhs_ps_fn5, + /* .pack_func_ex = */ &lhs_pack_float_fn9_no_bl, + }, + /* DOTPROD GEMV */ + { + /* .get_m_step = */ kai_get_m_step_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4x4_1x4_neon_dotprod, + /* .get_n_step = */ kai_get_n_step_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4x4_1x4_neon_dotprod, + /* .get_mr = */ kai_get_mr_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4x4_1x4_neon_dotprod, + /* .get_nr = */ kai_get_nr_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4x4_1x4_neon_dotprod, + /* .get_kr = */ kai_get_kr_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4x4_1x4_neon_dotprod, + /* .get_sr = */ kai_get_sr_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4x4_1x4_neon_dotprod, + /* .get_dst_offset = */ kai_get_dst_offset_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4x4_1x4_neon_dotprod, + /* .get_dst_size = */ kai_get_dst_size_matmul_clamp_f32_qai8dxp1x4_qsi8cxp4x4_1x4_neon_dotprod, + /* .get_lhs_offset_ex = */ &kernel_offs_fn2, + /* .get_rhs_packed_offset_ex = */ &kernel_offs_fn2, + /* .run_kernel_ex = */ &kernel_run_float_fn10, + }, + /* .gemv_lhs_info = */ { + /* .get_offset = */ kai_get_lhs_offset_lhs_quant_pack_qai8dxp_f32, + /* .get_packed_offset_ex = */ &lhs_offs_fn5, + /* .packed_size_ex = */ &lhs_ps_fn5, + /* .pack_func_ex = */ &lhs_pack_float_fn9_no_bl, + }, + /* .rhs_info = */ { + /* .packed_stride = */ kai_get_rhs_packed_stride_rhs_pack_nxk_qsi8cxp_qsi8cx_neon, + /* .to_float = */ dequantize_row_qsi8cxp, + /* .packed_size_ex = */ &rhs_ps_fn5, + /* .packed_stride_ex = */ &rhs_stride_fn4, + /* .pack_func_ex = */ &rhs_pack_scale_fn12, + }, + /* .required_cpu = */ CPU_FEATURE_DOTPROD, + /* .lhs_type = */ GGML_TYPE_F32, + /* .rhs_type = */ GGML_TYPE_Q8_0, + /* .op_type = */ GGML_TYPE_F32, + }, +#endif +}; + ggml_kleidiai_kernels * ggml_kleidiai_select_kernels(cpu_feature cpu_features, const ggml_tensor * tensor) { ggml_kleidiai_kernels * kernel = nullptr; @@ -562,6 +819,17 @@ ggml_kleidiai_kernels * ggml_kleidiai_select_kernels(cpu_feature cpu_features, c break; } } + if (!kernel) { + for (size_t i = 0; i < NELEMS(gemm_gemv_kernels_q8); ++i) { + if ((cpu_features & gemm_gemv_kernels_q8[i].required_cpu) == gemm_gemv_kernels_q8[i].required_cpu && + gemm_gemv_kernels_q8[i].lhs_type == tensor->src[1]->type && + gemm_gemv_kernels_q8[i].rhs_type == tensor->src[0]->type && + gemm_gemv_kernels_q8[i].op_type == tensor->type) { + kernel = &gemm_gemv_kernels_q8[i]; + break; + } + } + } #endif } @@ -582,3 +850,18 @@ ggml_kleidiai_kernels * ggml_kleidiai_select_kernels_q4_0(cpu_feature features) return kernels; } + +ggml_kleidiai_kernels * ggml_kleidiai_select_kernels_q8_0(cpu_feature features) { + ggml_kleidiai_kernels * kernels = nullptr; + +#if defined(__ARM_FEATURE_SME) || defined(__ARM_FEATURE_DOTPROD) || defined(__ARM_FEATURE_MATMUL_INT8) + for (size_t i = 0; i < NELEMS(gemm_gemv_kernels_q8); ++i) { + if ((features & gemm_gemv_kernels_q8[i].required_cpu) == gemm_gemv_kernels_q8[i].required_cpu) { + kernels = &gemm_gemv_kernels_q8[i]; + break; + } + } +#endif + + return kernels; +} diff --git a/ggml/src/ggml-cpu/kleidiai/kernels.h b/ggml/src/ggml-cpu/kleidiai/kernels.h index a84795a6b2..129245400b 100644 --- a/ggml/src/ggml-cpu/kleidiai/kernels.h +++ b/ggml/src/ggml-cpu/kleidiai/kernels.h @@ -87,3 +87,4 @@ struct ggml_kleidiai_kernels { ggml_kleidiai_kernels * ggml_kleidiai_select_kernels(cpu_feature cpu_features, const ggml_tensor * tensor); ggml_kleidiai_kernels * ggml_kleidiai_select_kernels_q4_0(cpu_feature features); +ggml_kleidiai_kernels * ggml_kleidiai_select_kernels_q8_0(cpu_feature features); diff --git a/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp b/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp index 8b3df7d780..6f2a90fbda 100644 --- a/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp +++ b/ggml/src/ggml-cpu/kleidiai/kleidiai.cpp @@ -5,10 +5,13 @@ #include #include #include +#include +#include #include #include #include #include +#include #if defined(__linux__) #include #include @@ -38,8 +41,9 @@ struct ggml_kleidiai_context { cpu_feature features; - ggml_kleidiai_kernels * kernels; -} static ctx = { CPU_FEATURE_NONE, NULL }; + ggml_kleidiai_kernels * kernels_q4; + ggml_kleidiai_kernels * kernels_q8; +} static ctx = { CPU_FEATURE_NONE, NULL, NULL }; static const char* cpu_feature_to_string(cpu_feature f) { switch (f) { @@ -73,10 +77,14 @@ static void init_kleidiai_context(void) { if (sme_enabled != 0) { ctx.features |= ggml_cpu_has_sme() ? CPU_FEATURE_SME : CPU_FEATURE_NONE; } - ctx.kernels = ggml_kleidiai_select_kernels_q4_0(ctx.features); + ctx.kernels_q4 = ggml_kleidiai_select_kernels_q4_0(ctx.features); + ctx.kernels_q8 = ggml_kleidiai_select_kernels_q8_0(ctx.features); #ifndef NDEBUG - if (ctx.kernels) { - GGML_LOG_DEBUG("kleidiai: using kernel with CPU feature %s\n", cpu_feature_to_string(ctx.kernels->required_cpu)); + if (ctx.kernels_q4) { + GGML_LOG_DEBUG("kleidiai: using q4 kernel with CPU feature %s\n", cpu_feature_to_string(ctx.kernels_q4->required_cpu)); + } + if (ctx.kernels_q8) { + GGML_LOG_DEBUG("kleidiai: using q8 kernel with CPU feature %s\n", cpu_feature_to_string(ctx.kernels_q8->required_cpu)); } #endif } @@ -130,6 +138,9 @@ class tensor_traits : public ggml::cpu::tensor_traits { if (kernels->rhs_type == GGML_TYPE_Q4_0) { if (!lhs_info->packed_size_ex) return false; size = lhs_info->packed_size_ex(m, k, QK4_0, mr, kr, sr); + } else if (kernels->rhs_type == GGML_TYPE_Q8_0) { + if (!lhs_info->packed_size_ex) return false; + size = lhs_info->packed_size_ex(m, k, QK8_0, mr, kr, sr); } else if (kernels->rhs_type == GGML_TYPE_F16) { if (!lhs_info->packed_size_ex || !kernels->rhs_info.packed_size_ex) return false; const int64_t lhs_batch_size0 = op->src[1]->ne[2]; @@ -149,11 +160,13 @@ class tensor_traits : public ggml::cpu::tensor_traits { if (dst->op == GGML_OP_MUL_MAT) { if (dst->src[0]->type == GGML_TYPE_Q4_0) { return compute_forward_q4_0(params, dst); + } else if (dst->src[0]->type == GGML_TYPE_Q8_0) { + return compute_forward_q8_0(params, dst); } else if (dst->src[0]->type == GGML_TYPE_F16) { return compute_forward_fp16(params, dst); } } else if (dst->op == GGML_OP_GET_ROWS) { - if (dst->src[0]->type == GGML_TYPE_Q4_0) { + if (dst->src[0]->type == GGML_TYPE_Q4_0 || dst->src[0]->type == GGML_TYPE_Q8_0) { return compute_forward_get_rows(params, dst); } } @@ -400,19 +413,120 @@ class tensor_traits : public ggml::cpu::tensor_traits { return true; } - bool compute_forward_get_rows(struct ggml_compute_params * params, struct ggml_tensor * dst) { - GGML_ASSERT(dst->src[0]->type == GGML_TYPE_Q4_0); - if (!ctx.kernels) { - return false; - } + bool compute_forward_q8_0(struct ggml_compute_params * params, struct ggml_tensor * dst) { + GGML_ASSERT(dst->src[0]->type == GGML_TYPE_Q8_0); const ggml_tensor * src0 = dst->src[0]; const ggml_tensor * src1 = dst->src[1]; GGML_TENSOR_BINARY_OP_LOCALS - rhs_packing_info * rhs_info = &ctx.kernels->rhs_info; - kernel_info * kernel = &ctx.kernels->gemm; + ggml_kleidiai_kernels *kernels = ggml_kleidiai_select_kernels(ctx.features, dst); + if (!kernels) { + return false; + } + + bool is_gemv = src1->ne[1] == 1; + kernel_info * kernel = is_gemv ? &kernels->gemv : &kernels->gemm; + lhs_packing_info * lhs_info = is_gemv ? &kernels->gemv_lhs_info : &kernels->gemm_lhs_info; + + if (!kernel || !lhs_info->get_packed_offset_ex || !lhs_info->pack_func_ex || + !kernel->get_rhs_packed_offset_ex || !kernel->run_kernel_ex || !kernel->get_dst_offset) { + return false; + } + + const int ith = params->ith; + const int nth_raw = params->nth; + const int nth = nth_raw > 0 ? nth_raw : 1; + + const size_t k = ne00; + const size_t m = ne11; + const size_t n = ne01; + + size_t mr = kernel->get_mr(); + size_t kr = kernel->get_kr(); + size_t sr = kernel->get_sr(); + + const uint8_t * lhs = static_cast(src1->data); + uint8_t * lhs_packed = static_cast(params->wdata); + const uint8_t * rhs_packed = static_cast(src0->data); + + const size_t n_step = kernel->get_n_step(); + const size_t num_n_per_thread = kai_roundup(kai_roundup(n, nth) / nth, n_step); + const size_t n_start = ith * num_n_per_thread; + + size_t n_to_process = 0; + if (n_start < n) { + n_to_process = num_n_per_thread; + if ((n_start + n_to_process) > n) { + n_to_process = n - n_start; + } + } + + const size_t num_m_per_thread = kai_roundup(m, mr * nth) / nth; + const size_t m_start = ith * num_m_per_thread; + size_t m_to_process = num_m_per_thread; + if ((m_start + m_to_process) > m) { + m_to_process = m - m_start; + } + + if (m_start < m) { + const size_t src_stride = src1->nb[1]; + const float * src_ptr = reinterpret_cast(lhs + lhs_info->get_offset(m_start, dst->src[1]->nb[1])); + const size_t lhs_packed_offset = lhs_info->get_packed_offset_ex(m_start, k, 0, mr, kr, sr); + void * lhs_packed_ptr = static_cast(lhs_packed + lhs_packed_offset); + + lhs_info->pack_func_ex(m_to_process, k, 0, mr, kr, sr, 0, src_ptr, src_stride, lhs_packed_ptr); + } + + ggml_barrier(params->threadpool); + + const size_t dst_stride = dst->nb[1]; + const size_t lhs_packed_offset = lhs_info->get_packed_offset_ex(0, k, 0, mr, kr, sr); + const size_t rhs_packed_offset = kernel->get_rhs_packed_offset_ex(n_start, k, 0); + const size_t dst_offset = kernel->get_dst_offset(0, n_start, dst_stride); + const void * rhs_ptr = static_cast(rhs_packed + rhs_packed_offset); + const void * lhs_ptr = static_cast(lhs_packed + lhs_packed_offset); + float * dst_ptr = reinterpret_cast(static_cast(dst->data) + dst_offset); + + if (n_to_process > 0) { + kernel->run_kernel_ex(m, n_to_process, k, 0, lhs_ptr, rhs_ptr, dst_ptr, dst_stride, + sizeof(float), -FLT_MAX, FLT_MAX); + } + + return true; + } + + bool compute_forward_get_rows(struct ggml_compute_params * params, struct ggml_tensor * dst) { + const ggml_tensor * src0 = dst->src[0]; + const ggml_tensor * src1 = dst->src[1]; + + GGML_TENSOR_BINARY_OP_LOCALS + + ggml_kleidiai_kernels * kernels = nullptr; + size_t block_len = 0; + size_t num_bytes_multiplier = 0; + + if (dst->src[0]->type == GGML_TYPE_Q4_0) { + if (!ctx.kernels_q4) { + return false; + } + kernels = ctx.kernels_q4; + block_len = QK4_0; + num_bytes_multiplier = sizeof(uint16_t); + } else if (dst->src[0]->type == GGML_TYPE_Q8_0) { + if (!ctx.kernels_q8) { + return false; + } + kernels = ctx.kernels_q8; + block_len = QK8_0; + num_bytes_multiplier = sizeof(float); + } else { + return false; + } + + rhs_packing_info * rhs_info = &kernels->rhs_info; + kernel_info * kernel = &kernels->gemm; if (!rhs_info->to_float || !kernel->get_nr) { return false; } @@ -423,8 +537,7 @@ class tensor_traits : public ggml::cpu::tensor_traits { const size_t block_rows = kernel->get_nr(); const size_t kr = kernel->get_kr(); - const size_t num_bytes_multiplier = sizeof(uint16_t); - const size_t packed_stride = rhs_info->packed_stride(nc, block_rows, kr, QK4_0); + const size_t packed_stride = rhs_info->packed_stride(nc, block_rows, kr, block_len); const int ith = params->ith; const int nth = params->nth; @@ -439,7 +552,7 @@ class tensor_traits : public ggml::cpu::tensor_traits { GGML_ASSERT(row_idx >= 0 && row_idx < src0->ne[1]); float *out = (float *)((char *)dst->data + i * nb1); - rhs_info->to_float(src0->data, row_idx, nc, out, block_rows, packed_stride, kr, QK4_0, num_bytes_multiplier); + rhs_info->to_float(src0->data, row_idx, nc, out, block_rows, packed_stride, kr, block_len, num_bytes_multiplier); } return true; @@ -447,21 +560,91 @@ class tensor_traits : public ggml::cpu::tensor_traits { public: int repack(struct ggml_tensor * tensor, const void * data, size_t data_size) { - GGML_ASSERT(tensor->type == GGML_TYPE_Q4_0); - GGML_ASSERT(ctx.kernels); const size_t n = tensor->ne[1]; const size_t k = tensor->ne[0]; - size_t nr = ctx.kernels->gemm.get_nr(); - size_t kr = ctx.kernels->gemm.get_kr(); - size_t sr = ctx.kernels->gemm.get_sr(); - struct kai_rhs_pack_qs4cxs1s0_param params; - params.lhs_zero_point = 1; - params.rhs_zero_point = 8; - ctx.kernels->rhs_info.pack_func_ex(1, n, k, nr, kr, sr, QK4_0, 0, (const uint8_t*)data, nullptr, nullptr, tensor->data, 0, ¶ms); + if (tensor->type == GGML_TYPE_Q4_0) { + if (!ctx.kernels_q4) { + return -1; + } + size_t nr = ctx.kernels_q4->gemm.get_nr(); + size_t kr = ctx.kernels_q4->gemm.get_kr(); + size_t sr = ctx.kernels_q4->gemm.get_sr(); + + struct kai_rhs_pack_qs4cxs1s0_param params; + params.lhs_zero_point = 1; + params.rhs_zero_point = 8; + ctx.kernels_q4->rhs_info.pack_func_ex(1, n, k, nr, kr, sr, QK4_0, 0, + static_cast(data), + nullptr, nullptr, tensor->data, 0, ¶ms); + GGML_UNUSED(data_size); + return 0; + } else if (tensor->type == GGML_TYPE_Q8_0) { + if (!ctx.kernels_q8) { + return -1; + } + + const size_t row_stride = tensor->nb[1]; + const size_t k_blocks = (k + QK8_0 - 1) / QK8_0; + + std::vector qdata(n * k, 0); + std::vector scales(n, 0.0f); + + for (size_t row = 0; row < n; ++row) { + const auto * row_blocks = reinterpret_cast( + static_cast(data) + row * row_stride); + + float max_abs = 0.0f; + for (size_t block = 0; block < k_blocks; ++block) { + const block_q8_0 & blk = row_blocks[block]; + const float d = GGML_FP16_TO_FP32(blk.d); + for (size_t l = 0; l < QK8_0; ++l) { + const size_t linear_idx = block * QK8_0 + l; + if (linear_idx >= k) { + break; + } + const float value = d * blk.qs[l]; + max_abs = std::max(max_abs, std::fabs(value)); + } + } + + float scale = max_abs > 0.0f ? max_abs / 127.0f : 0.0f; + scales[row] = scale; + const float inv_scale = scale > 0.0f ? 1.0f / scale : 0.0f; + + for (size_t block = 0; block < k_blocks; ++block) { + const block_q8_0 & blk = row_blocks[block]; + const float d = GGML_FP16_TO_FP32(blk.d); + for (size_t l = 0; l < QK8_0; ++l) { + const size_t linear_idx = block * QK8_0 + l; + if (linear_idx >= k) { + break; + } + const float value = d * blk.qs[l]; + int32_t q = scale > 0.0f ? static_cast(std::lround(value * inv_scale)) : 0; + q = std::clamp(q, -127, 127); + qdata[row * k + linear_idx] = static_cast(q); + } + } + } + + size_t nr = ctx.kernels_q8->gemm.get_nr(); + size_t kr = ctx.kernels_q8->gemm.get_kr(); + size_t sr = ctx.kernels_q8->gemm.get_sr(); + + struct kai_rhs_pack_qsi8cx_params params; + params.lhs_zero_point = 1; + params.scale_multiplier = 1.0f; + + ctx.kernels_q8->rhs_info.pack_func_ex(1, n, k, nr, kr, sr, 0, 0, + qdata.data(), nullptr, scales.data(), + tensor->data, 0, ¶ms); + GGML_UNUSED(data_size); + return 0; + } - return 0; GGML_UNUSED(data_size); + return -1; } }; @@ -518,27 +701,45 @@ static size_t ggml_backend_cpu_kleidiai_buffer_type_get_alignment(ggml_backend_b } static size_t ggml_backend_cpu_kleidiai_buffer_type_get_alloc_size(ggml_backend_buffer_type_t buft, const struct ggml_tensor * tensor) { - GGML_ASSERT(tensor->type == GGML_TYPE_Q4_0); - GGML_ASSERT(ctx.kernels); - - const size_t n = tensor->ne[1]; - const size_t k = tensor->ne[0]; - const size_t nr = ctx.kernels->gemm.get_nr(); - const size_t kr = ctx.kernels->gemm.get_kr(); - - return ctx.kernels->rhs_info.packed_size_ex(n, k, nr, kr, QK4_0); - GGML_UNUSED(buft); + + const size_t n = tensor->ne[1]; + const size_t k = tensor->ne[0]; + + ggml_kleidiai_kernels * kernels = nullptr; + size_t block_len = 0; + + if (tensor->type == GGML_TYPE_Q4_0) { + GGML_ASSERT(ctx.kernels_q4); + kernels = ctx.kernels_q4; + block_len = QK4_0; + } else if (tensor->type == GGML_TYPE_Q8_0) { + GGML_ASSERT(ctx.kernels_q8); + kernels = ctx.kernels_q8; + block_len = QK8_0; + } else { + return 0; + } + + const size_t nr = kernels->gemm.get_nr(); + const size_t kr = kernels->gemm.get_kr(); + const size_t packed = kernels->rhs_info.packed_size_ex(n, k, nr, kr, block_len); + const size_t raw = ggml_nbytes(tensor); + + return packed > raw ? packed : raw; } namespace ggml::cpu::kleidiai { class extra_buffer_type : ggml::cpu::extra_buffer_type { bool supports_op(ggml_backend_dev_t, const struct ggml_tensor * op) override { if ((op->op == GGML_OP_MUL_MAT || op->op == GGML_OP_GET_ROWS) && - op->src[0]->type == GGML_TYPE_Q4_0 && + (op->src[0]->type == GGML_TYPE_Q4_0 || op->src[0]->type == GGML_TYPE_Q8_0) && op->src[0]->buffer && (ggml_n_dims(op->src[0]) == 2) && - op->src[0]->buffer->buft == ggml_backend_cpu_kleidiai_buffer_type() && ctx.kernels) { + op->src[0]->buffer->buft == ggml_backend_cpu_kleidiai_buffer_type()) { + if (((op->src[0]->type == GGML_TYPE_Q4_0) ? ctx.kernels_q4 : ctx.kernels_q8) == nullptr) { + return false; + } if (op->src[1]->buffer && !ggml_backend_buft_is_host(op->src[1]->buffer->buft)) { return false; } From 73460f62789a3ed02109d601a2653c3842f2074e Mon Sep 17 00:00:00 2001 From: duduta Date: Tue, 11 Nov 2025 13:33:24 +0200 Subject: [PATCH 64/69] ggml-cpu: templateify ggml_compute_forward_rope_f32 and _f16 (#16805) * extract rotate_pairs logic from ggml_compute_forward_rope_f32 * templateify ggml_compute_forward_rope_f32 and _f16 * abort when rope type not supported, remove GLM from test-rope * add imrope branch to switch * add rope tests for perf * Update ggml/src/ggml-cpu/ops.cpp Co-authored-by: Georgi Gerganov * Update ggml/src/ggml-cpu/ops.cpp Co-authored-by: Georgi Gerganov --------- Co-authored-by: Georgi Gerganov --- ggml/src/ggml-cpu/ops.cpp | 317 +++++++------------------------------ tests/test-backend-ops.cpp | 16 ++ tests/test-rope.cpp | 11 +- 3 files changed, 76 insertions(+), 268 deletions(-) diff --git a/ggml/src/ggml-cpu/ops.cpp b/ggml/src/ggml-cpu/ops.cpp index 7c42fb78b4..5a272b9abc 100644 --- a/ggml/src/ggml-cpu/ops.cpp +++ b/ggml/src/ggml-cpu/ops.cpp @@ -5503,7 +5503,28 @@ static void ggml_mrope_cache_init( } } -static void ggml_compute_forward_rope_f32( + +template +static void rotate_pairs(const int64_t n, const int64_t n_offset, const float * cache, const T * src_data, T * dst_data, const int scale = 2) { + for (int64_t i0 = 0; i0 < n; i0 += 2) { + const int64_t ic = i0/scale; // hack for GGML_ROPE_TYPE_NORMAL, where we need ic = i0; for all other cases, ic = i0/2 + + const float cos_theta = cache[i0 + 0]; + const float sin_theta = cache[i0 + 1]; + + const T * const src = src_data + ic; + T * dst = dst_data + ic; + + const float x0 = type_conversion_table::to_f32(src[0]); + const float x1 = type_conversion_table::to_f32(src[n_offset]); + + dst[0] = type_conversion_table::from_f32(x0*cos_theta - x1*sin_theta); + dst[n_offset] = type_conversion_table::from_f32(x0*sin_theta + x1*cos_theta); + } +} + +template //float or ggml_fp16_t +static void ggml_compute_forward_rope_flt( const ggml_compute_params * params, ggml_tensor * dst, const bool forward) { @@ -5512,6 +5533,9 @@ static void ggml_compute_forward_rope_f32( const ggml_tensor * src1 = dst->src[1]; const ggml_tensor * src2 = dst->src[2]; + GGML_ASSERT(src0->type == GGML_TYPE_F32 || src0->type == GGML_TYPE_F16); + GGML_ASSERT(src1->type == GGML_TYPE_I32); + float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; int sections[4]; @@ -5534,7 +5558,8 @@ static void ggml_compute_forward_rope_f32( //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3); //printf("n_past = %d, ne2 = %d\n", n_past, ne2); - GGML_ASSERT(nb00 == sizeof(float)); + GGML_ASSERT(nb0 == nb00); + GGML_ASSERT(nb0 == sizeof(T)); const int ith = params->ith; const int nth = params->nth; @@ -5559,12 +5584,11 @@ static void ggml_compute_forward_rope_f32( float corr_dims[2]; ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims); - const bool is_neox = mode & GGML_ROPE_TYPE_NEOX; - const bool is_mrope = mode & GGML_ROPE_TYPE_MROPE; // ggml_rope_multi, multimodal rotary position embedding const bool is_imrope = mode == GGML_ROPE_TYPE_IMROPE; // qwen3vl apply interleaved mrope + const bool mrope_used = mode & GGML_ROPE_TYPE_MROPE; // ggml_rope_multi, note: also true for vision (24 & 8 == true) and for imrope const bool is_vision = mode == GGML_ROPE_TYPE_VISION; - if (is_mrope) { + if (mrope_used) { GGML_ASSERT(sections[0] > 0 || sections[1] > 0 || sections[2] > 0); } @@ -5590,7 +5614,7 @@ static void ggml_compute_forward_rope_f32( for (int64_t i2 = 0; i2 < ne2; i2++) { // seq-len float * cache = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32)*ith; - if (!is_mrope) { + if (!mrope_used) { const int64_t p = pos[i2]; ggml_rope_cache_init(p, freq_scale, freq_factors, corr_dims, ne0, ext_factor, attn_factor, cache, sin_sign, theta_scale); } @@ -5608,269 +5632,36 @@ static void ggml_compute_forward_rope_f32( if (ir++ < ir0) continue; if (ir > ir1) break; - if (is_neox || is_mrope) { - if (is_vision){ - for (int64_t i0 = 0; i0 < n_dims; i0 += 2) { - const int64_t ic = i0/2; + T * src = (T *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01); + T * dst_data = (T *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1); - const float cos_theta = cache[i0 + 0]; - const float sin_theta = cache[i0 + 1]; - - const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00); - float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + ic*nb0); - - const float x0 = src[0]; - const float x1 = src[n_dims]; - - dst_data[0] = x0*cos_theta - x1*sin_theta; - dst_data[n_dims] = x0*sin_theta + x1*cos_theta; - } - } else { - for (int64_t i0 = 0; i0 < n_dims; i0 += 2) { - const int64_t ic = i0/2; - - const float cos_theta = cache[i0 + 0]; - const float sin_theta = cache[i0 + 1]; - - const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00); - float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + ic*nb0); - - const float x0 = src[0]; - const float x1 = src[n_dims/2]; - - dst_data[0] = x0*cos_theta - x1*sin_theta; - dst_data[n_dims/2] = x0*sin_theta + x1*cos_theta; - } - } - } else { - for (int64_t i0 = 0; i0 < n_dims; i0 += 2) { - const float cos_theta = cache[i0 + 0]; - const float sin_theta = cache[i0 + 1]; - - const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - const float x0 = src[0]; - const float x1 = src[1]; - - dst_data[0] = x0*cos_theta - x1*sin_theta; - dst_data[1] = x0*sin_theta + x1*cos_theta; - } + switch (mode) { + case GGML_ROPE_TYPE_NORMAL: + rotate_pairs(n_dims, 1, cache, src, dst_data, 1); + break; + case GGML_ROPE_TYPE_NEOX: + case GGML_ROPE_TYPE_MROPE: + case GGML_ROPE_TYPE_IMROPE: + rotate_pairs(n_dims, n_dims/2, cache, src, dst_data); + break; + case GGML_ROPE_TYPE_VISION: + rotate_pairs(ne0, n_dims, cache, src, dst_data); + break; + default: + GGML_ABORT("rope type not supported"); } - if (is_vision) { - for (int64_t i0 = n_dims; i0 < ne0; i0 += 2) { - const int64_t ic = i0/2; - - const float cos_theta = cache[i0 + 0]; - const float sin_theta = cache[i0 + 1]; - - const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00); - float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + ic*nb0); - - const float x0 = src[0]; - const float x1 = src[n_dims]; - - dst_data[0] = x0*cos_theta - x1*sin_theta; - dst_data[n_dims] = x0*sin_theta + x1*cos_theta; - } - } else { + if (!is_vision) { // fill the remain channels with data from src tensor for (int64_t i0 = n_dims; i0 < ne0; i0 += 2) { - const float * const src = (float *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - float * dst_data = (float *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); + const T * const src = (T *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); + T * dst_data = (T *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); dst_data[0] = src[0]; dst_data[1] = src[1]; } } - } - } - } -} - -// TODO: deduplicate f16/f32 code -static void ggml_compute_forward_rope_f16( - const ggml_compute_params * params, - ggml_tensor * dst, - const bool forward) { - - const ggml_tensor * src0 = dst->src[0]; - const ggml_tensor * src1 = dst->src[1]; - const ggml_tensor * src2 = dst->src[2]; - - float freq_base, freq_scale, ext_factor, attn_factor, beta_fast, beta_slow; - int sections[4]; - - //const int n_past = ((int32_t *) dst->op_params)[0]; - const int n_dims = ((int32_t *) dst->op_params)[1]; - const int mode = ((int32_t *) dst->op_params)[2]; - //const int n_ctx = ((int32_t *) dst->op_params)[3]; - const int n_ctx_orig = ((int32_t *) dst->op_params)[4]; - memcpy(&freq_base, (int32_t *) dst->op_params + 5, sizeof(float)); - memcpy(&freq_scale, (int32_t *) dst->op_params + 6, sizeof(float)); - memcpy(&ext_factor, (int32_t *) dst->op_params + 7, sizeof(float)); - memcpy(&attn_factor, (int32_t *) dst->op_params + 8, sizeof(float)); - memcpy(&beta_fast, (int32_t *) dst->op_params + 9, sizeof(float)); - memcpy(&beta_slow, (int32_t *) dst->op_params + 10, sizeof(float)); - memcpy(§ions, (int32_t *) dst->op_params + 11, sizeof(int)*4); - - - GGML_TENSOR_UNARY_OP_LOCALS - - //printf("ne0: %d, ne1: %d, ne2: %d, ne3: %d\n", ne0, ne1, ne2, ne3); - //printf("n_past = %d, ne2 = %d\n", n_past, ne2); - - GGML_ASSERT(nb0 == sizeof(ggml_fp16_t)); - - const int ith = params->ith; - const int nth = params->nth; - - const int nr = ggml_nrows(dst); - - GGML_ASSERT(n_dims <= ne0); - GGML_ASSERT(n_dims % 2 == 0); - - // rows per thread - const int dr = (nr + nth - 1)/nth; - - // row range for this thread - const int ir0 = dr*ith; - const int ir1 = MIN(ir0 + dr, nr); - - // row index used to determine which thread to use - int ir = 0; - - const float theta_scale = powf(freq_base, -2.0f/n_dims); - - float corr_dims[2]; - ggml_rope_yarn_corr_dims(n_dims, n_ctx_orig, freq_base, beta_fast, beta_slow, corr_dims); - - const bool is_neox = mode & GGML_ROPE_TYPE_NEOX; - const bool is_mrope = mode & GGML_ROPE_TYPE_MROPE; - const bool is_imrope = mode == GGML_ROPE_TYPE_IMROPE; - const bool is_vision = mode == GGML_ROPE_TYPE_VISION; - - if (is_mrope) { - GGML_ASSERT(sections[0] > 0 || sections[1] > 0 || sections[2] > 0); - } - - if (is_vision) { - GGML_ASSERT(n_dims == ne0/2); - } - - const float * freq_factors = NULL; - if (src2 != NULL) { - GGML_ASSERT(src2->type == GGML_TYPE_F32); - GGML_ASSERT(src2->ne[0] >= n_dims / 2); - freq_factors = (const float *) src2->data; - } - - // backward process uses inverse rotation by cos and sin. - // cos and sin build a rotation matrix, where the inverse is the transpose. - // this essentially just switches the sign of sin. - const float sin_sign = forward ? 1.0f : -1.0f; - - const int32_t * pos = (const int32_t *) src1->data; - - for (int64_t i3 = 0; i3 < ne3; i3++) { - for (int64_t i2 = 0; i2 < ne2; i2++) { - - float * cache = (float *) params->wdata + (ne0 + CACHE_LINE_SIZE_F32)*ith; - if (!is_mrope) { - const int64_t p = pos[i2]; - ggml_rope_cache_init(p, freq_scale, freq_factors, corr_dims, ne0, ext_factor, attn_factor, cache, sin_sign, theta_scale); - } - else { - const int64_t p_t = pos[i2]; - const int64_t p_h = pos[i2 + ne2]; - const int64_t p_w = pos[i2 + ne2 * 2]; - const int64_t p_e = pos[i2 + ne2 * 3]; - ggml_mrope_cache_init( - p_t, p_h, p_w, p_e, sections, is_imrope, is_vision, - freq_scale, freq_factors, corr_dims, ne0, ext_factor, attn_factor, cache, sin_sign, theta_scale); - } - - for (int64_t i1 = 0; i1 < ne1; i1++) { - if (ir++ < ir0) continue; - if (ir > ir1) break; - - if (is_neox || is_mrope) { - if (is_vision) { - for (int64_t i0 = 0; i0 < n_dims; i0 += 2) { - const int64_t ic = i0/2; - - const float cos_theta = cache[i0 + 0]; - const float sin_theta = cache[i0 + 1]; - - const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00); - ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + ic*nb0); - - const float x0 = GGML_CPU_FP16_TO_FP32(src[0]); - const float x1 = GGML_CPU_FP16_TO_FP32(src[n_dims]); - - dst_data[0] = GGML_CPU_FP32_TO_FP16(x0*cos_theta - x1*sin_theta); - dst_data[n_dims] = GGML_CPU_FP32_TO_FP16(x0*sin_theta + x1*cos_theta); - } - } else { - for (int64_t i0 = 0; i0 < n_dims; i0 += 2) { - const int64_t ic = i0/2; - - const float cos_theta = cache[i0 + 0]; - const float sin_theta = cache[i0 + 1]; - - const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00); - ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + ic*nb0); - - const float x0 = GGML_CPU_FP16_TO_FP32(src[0]); - const float x1 = GGML_CPU_FP16_TO_FP32(src[n_dims/2]); - - dst_data[0] = GGML_CPU_FP32_TO_FP16(x0*cos_theta - x1*sin_theta); - dst_data[n_dims/2] = GGML_CPU_FP32_TO_FP16(x0*sin_theta + x1*cos_theta); - } - } - } else { - for (int64_t i0 = 0; i0 < n_dims; i0 += 2) { - const float cos_theta = cache[i0 + 0]; - const float sin_theta = cache[i0 + 1]; - - const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - const float x0 = GGML_CPU_FP16_TO_FP32(src[0]); - const float x1 = GGML_CPU_FP16_TO_FP32(src[1]); - - dst_data[0] = GGML_CPU_FP32_TO_FP16(x0*cos_theta - x1*sin_theta); - dst_data[1] = GGML_CPU_FP32_TO_FP16(x0*sin_theta + x1*cos_theta); - } - } - - if (is_vision) { - for (int64_t i0 = n_dims; i0 < ne0; i0 += 2) { - const int64_t ic = i0/2; - - const float cos_theta = cache[i0 + 0]; - const float sin_theta = cache[i0 + 1]; - - const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + ic*nb00); - ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + ic*nb0); - - const float x0 = GGML_CPU_FP16_TO_FP32(src[0]); - const float x1 = GGML_CPU_FP16_TO_FP32(src[n_dims]); - - dst_data[0] = GGML_CPU_FP32_TO_FP16(x0*cos_theta - x1*sin_theta); - dst_data[n_dims] = GGML_CPU_FP32_TO_FP16(x0*sin_theta + x1*cos_theta); - } - } else { - for (int64_t i0 = n_dims; i0 < ne0; i0 += 2) { - const ggml_fp16_t * const src = (ggml_fp16_t *)((char *) src0->data + i3*nb03 + i2*nb02 + i1*nb01 + i0*nb00); - ggml_fp16_t * dst_data = (ggml_fp16_t *)((char *) dst->data + i3*nb3 + i2*nb2 + i1*nb1 + i0*nb0); - - dst_data[0] = src[0]; - dst_data[1] = src[1]; - } - } - } + } //attn-heads } } } @@ -5884,11 +5675,11 @@ void ggml_compute_forward_rope( switch (src0->type) { case GGML_TYPE_F16: { - ggml_compute_forward_rope_f16(params, dst, true); + ggml_compute_forward_rope_flt(params, dst, true); } break; case GGML_TYPE_F32: { - ggml_compute_forward_rope_f32(params, dst, true); + ggml_compute_forward_rope_flt(params, dst, true); } break; default: { @@ -5908,11 +5699,11 @@ void ggml_compute_forward_rope_back( switch (src0->type) { case GGML_TYPE_F16: { - ggml_compute_forward_rope_f16(params, dst, false); + ggml_compute_forward_rope_flt(params, dst, false); } break; case GGML_TYPE_F32: { - ggml_compute_forward_rope_f32(params, dst, false); + ggml_compute_forward_rope_flt(params, dst, false); } break; default: { diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index eb29b15f20..92c17ac439 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -7603,6 +7603,22 @@ static std::vector> make_test_cases_perf() { test_cases.emplace_back(new test_add_id(GGML_TYPE_F32, GGML_TYPE_F32, 2880, 32, 4, n_token)); } + for (bool fw : {true, false}) { // fw == forward + for (ggml_type type : {GGML_TYPE_F32, GGML_TYPE_F16}) { + for (bool ff : {false, true}) { // freq_factors + for (float v : { 0, 1 }) { + test_cases.emplace_back(new test_rope(type, {128, 32, 512, 1}, 128, GGML_ROPE_TYPE_NORMAL, 512, 1.0f, 0.0f, 1.0f, ff, v, fw)); // llama 7B + test_cases.emplace_back(new test_rope(type, {128, 64, 512, 1}, 128, GGML_ROPE_TYPE_NORMAL, 512, 1.0f, 0.0f, 1.0f, ff, v, fw)); // llama 65B + test_cases.emplace_back(new test_rope(type, { 80, 32, 512, 1}, 20, GGML_ROPE_TYPE_NEOX, 512, 1.0f, 0.0f, 1.0f, ff, v, fw)); // neox (stablelm) + test_cases.emplace_back(new test_rope(type, { 64, 8, 512, 1}, 64, GGML_ROPE_TYPE_NEOX, 512, 1.0f, 0.0f, 1.0f, ff, v, fw)); // neox (falcon 40B) + test_cases.emplace_back(new test_rope(type, {128, 12, 512, 1}, 128, GGML_ROPE_TYPE_MROPE, 512, 1.0f, 0.0f, 1.0f, ff, v, fw)); // rope_multi,m-rope (qwen2vl 2B) + test_cases.emplace_back(new test_rope(type, {128, 12, 2, 1}, 128, GGML_ROPE_TYPE_IMROPE, 512, 1.0f, 0.0f, 1.0f, ff, v, fw)); // rope_multi,imrope (qwen3vl 2B) + test_cases.emplace_back(new test_rope(type, { 80, 16, 2, 1}, 80, GGML_ROPE_TYPE_VISION, 512, 1.0f, 0.0f, 1.0f, ff, v, fw)); // rope_multi,m-rope (qwen2vl ViT) + } + } + } + } + std::vector> reduce_rows_cases = { { 8192, 1, 1, 1 }, { 8192, 8192, 1, 1 }, diff --git a/tests/test-rope.cpp b/tests/test-rope.cpp index 22c51d81f6..801e4cd827 100644 --- a/tests/test-rope.cpp +++ b/tests/test-rope.cpp @@ -138,7 +138,7 @@ int main(int /*argc*/, const char ** /*argv*/) { struct ggml_tensor * x; // rope f32 - for (int m = 0; m < 6; ++m) { + for (int m = 0; m < 5; ++m) { const int ndims = 4; const int64_t n_rot = 128; @@ -153,7 +153,7 @@ int main(int /*argc*/, const char ** /*argv*/) { x = get_random_tensor_f32(ctx0, ndims, ne, -1.0f, 1.0f); int mode = -1; - if (m < 3) { + if (m < 2) { struct ggml_tensor * p0 = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, ne[2]); struct ggml_tensor * p1 = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, ne[2]); struct ggml_tensor * p2 = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, ne[2]); @@ -163,8 +163,8 @@ int main(int /*argc*/, const char ** /*argv*/) { ((int32_t *) p1->data)[i] = n_past_2 - n_past_0; ((int32_t *) p2->data)[i] = n_past_2 + i; } - // test mode 0, 2, 4 (standard, GPT-NeoX, GLM) - mode = m == 0 ? 0 : m == 1 ? 2 : 4; + // test mode 0, 2 (standard, GPT-NeoX) + mode = m == 0 ? GGML_ROPE_TYPE_NORMAL : GGML_ROPE_TYPE_NEOX; // 100, 101, 102, ..., 172 r0 = ggml_rope(ctx0, x, p0, n_rot, mode); @@ -180,7 +180,8 @@ int main(int /*argc*/, const char ** /*argv*/) { struct ggml_tensor * p2 = ggml_new_tensor_1d(ctx0, GGML_TYPE_I32, ne[2] * 4); int sections[4] = {16, 24, 24, 0}; - mode = (m == 3) ? GGML_ROPE_TYPE_MROPE : (m == 4) ? GGML_ROPE_TYPE_VISION : GGML_ROPE_TYPE_IMROPE; + + mode = (m == 2) ? GGML_ROPE_TYPE_MROPE : (m == 3) ? GGML_ROPE_TYPE_VISION : GGML_ROPE_TYPE_IMROPE; for (int i = 0; i < ne[2]; ++i) { for (int j = 0; j < 4; ++j) { From ca4844062b3f0679a39b76b2fe95ba87cd6fb00d Mon Sep 17 00:00:00 2001 From: ixgbe <1113177880@qq.com> Date: Tue, 11 Nov 2025 19:41:51 +0800 Subject: [PATCH 65/69] ggml-cpu : add RISC-V RVV (Zvfh) optimization for FP16 to FP32 conversion (#17161) Signed-off-by: Wang Yang --- ggml/src/ggml-cpu/ggml-cpu.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ggml/src/ggml-cpu/ggml-cpu.c b/ggml/src/ggml-cpu/ggml-cpu.c index 086708bae0..d8e3c48c60 100644 --- a/ggml/src/ggml-cpu/ggml-cpu.c +++ b/ggml/src/ggml-cpu/ggml-cpu.c @@ -3274,6 +3274,13 @@ void ggml_cpu_fp16_to_fp32(const ggml_fp16_t * x, float * y, int64_t n) { __m128 y_vec = _mm_cvtph_ps(x_vec); _mm_storeu_ps(y + i, y_vec); } +#elif defined(__riscv_zvfh) + for (int vl; i < n; i += vl) { + vl = __riscv_vsetvl_e16m1(n - i); + vfloat16m1_t vx = __riscv_vle16_v_f16m1((_Float16 *)&x[i], vl); + vfloat32m2_t vy = __riscv_vfwcvt_f_f_v_f32m2(vx, vl); + __riscv_vse32_v_f32m2(&y[i], vy, vl); + } #endif for (; i < n; ++i) { From 1d45b4228f11c193d6864724ae675734da24ac98 Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Tue, 11 Nov 2025 13:32:58 +0100 Subject: [PATCH 66/69] vendor: split httplib to cpp/h files (#17150) * vendor: split httplib to cpp/h files * move defines * include httplib if curl is not used * add TODO * fix build ios * fix build visionos instead --- CMakeLists.txt | 1 + common/CMakeLists.txt | 6 +- scripts/sync_vendor.py | 17 + tools/server/CMakeLists.txt | 2 +- tools/server/utils.hpp | 8 - vendor/cpp-httplib/CMakeLists.txt | 28 + vendor/cpp-httplib/httplib.cpp | 7816 +++++++++++++++++++++ vendor/cpp-httplib/httplib.h | 10174 ++-------------------------- 8 files changed, 8275 insertions(+), 9777 deletions(-) create mode 100644 vendor/cpp-httplib/CMakeLists.txt create mode 100644 vendor/cpp-httplib/httplib.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bf8b2789a..e7410184df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -200,6 +200,7 @@ endif() if (LLAMA_BUILD_COMMON) add_subdirectory(common) + add_subdirectory(vendor/cpp-httplib) endif() if (LLAMA_BUILD_COMMON AND LLAMA_BUILD_TESTS AND NOT CMAKE_JS_VERSION) diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 7086d08e5e..1d260507ad 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -79,10 +79,11 @@ if (BUILD_SHARED_LIBS) set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() +# TODO: use list(APPEND LLAMA_COMMON_EXTRA_LIBS ...) set(LLAMA_COMMON_EXTRA_LIBS build_info) -# Use curl to download model url if (LLAMA_CURL) + # Use curl to download model url find_package(CURL) if (NOT CURL_FOUND) message(FATAL_ERROR "Could NOT find CURL. Hint: to disable this feature, set -DLLAMA_CURL=OFF") @@ -90,6 +91,9 @@ if (LLAMA_CURL) target_compile_definitions(${TARGET} PUBLIC LLAMA_USE_CURL) include_directories(${CURL_INCLUDE_DIRS}) set(LLAMA_COMMON_EXTRA_LIBS ${LLAMA_COMMON_EXTRA_LIBS} ${CURL_LIBRARIES}) +else() + # otherwise, use cpp-httplib + set(LLAMA_COMMON_EXTRA_LIBS ${LLAMA_COMMON_EXTRA_LIBS} cpp-httplib) endif() if (LLAMA_OPENSSL) diff --git a/scripts/sync_vendor.py b/scripts/sync_vendor.py index 1151c9f019..b578cf1e6a 100755 --- a/scripts/sync_vendor.py +++ b/scripts/sync_vendor.py @@ -20,3 +20,20 @@ vendor = { for url, filename in vendor.items(): print(f"downloading {url} to {filename}") # noqa: NP100 urllib.request.urlretrieve(url, filename) + + # split cpp/h files for httplib + # see: https://github.com/yhirose/cpp-httplib/blob/master/split.py + if 'httplib.h' in filename: + border = '// ----------------------------------------------------------------------------' + with open(filename, 'r') as f: + content = f.read() + header, implementation, footer = content.split(border, 2) + fname_cpp = filename.replace('.h', '.cpp') + with open(filename, 'w') as fh: + fh.write(header) + fh.write(footer) + with open(fname_cpp, 'w') as fc: + fc.write('#include "httplib.h"\n') + fc.write('namespace httplib {\n') + fc.write(implementation.replace('\ninline ', '\n')) + fc.write('} // namespace httplib\n') diff --git a/tools/server/CMakeLists.txt b/tools/server/CMakeLists.txt index 06df3ee49d..5f8a50320d 100644 --- a/tools/server/CMakeLists.txt +++ b/tools/server/CMakeLists.txt @@ -33,7 +33,7 @@ install(TARGETS ${TARGET} RUNTIME) target_include_directories(${TARGET} PRIVATE ../mtmd) target_include_directories(${TARGET} PRIVATE ${CMAKE_SOURCE_DIR}) -target_link_libraries(${TARGET} PRIVATE common mtmd ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries(${TARGET} PRIVATE common mtmd cpp-httplib ${CMAKE_THREAD_LIBS_INIT}) if (WIN32) TARGET_LINK_LIBRARIES(${TARGET} PRIVATE ws2_32) diff --git a/tools/server/utils.hpp b/tools/server/utils.hpp index 2bce2f4a47..e9d4431ddf 100644 --- a/tools/server/utils.hpp +++ b/tools/server/utils.hpp @@ -9,14 +9,6 @@ #include "mtmd-helper.h" #include "chat.h" -// increase max payload length to allow use of larger context size -#define CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH 1048576 -// increase backlog size to avoid connection resets for >> 1 slots -#define CPPHTTPLIB_LISTEN_BACKLOG 512 -// increase max URI length to handle longer prompts in query string -#define CPPHTTPLIB_REQUEST_URI_MAX_LENGTH 32768 -// disable Nagle's algorithm -#define CPPHTTPLIB_TCP_NODELAY true #include #define JSON_ASSERT GGML_ASSERT diff --git a/vendor/cpp-httplib/CMakeLists.txt b/vendor/cpp-httplib/CMakeLists.txt new file mode 100644 index 0000000000..0033d52371 --- /dev/null +++ b/vendor/cpp-httplib/CMakeLists.txt @@ -0,0 +1,28 @@ +set(TARGET cpp-httplib) + +find_package(Threads REQUIRED) + +add_library(${TARGET} STATIC httplib.cpp httplib.h) +if (NOT MSVC) + # disable warnings in 3rd party code + target_compile_options(${TARGET} PRIVATE -w) +endif() + +target_link_libraries (${TARGET} PRIVATE Threads::Threads) +target_compile_features(${TARGET} PRIVATE cxx_std_17) + +target_compile_definitions(${TARGET} PRIVATE + # increase max payload length to allow use of larger context size + CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH=1048576 + # increase backlog size to avoid connection resets for >> 1 slots + CPPHTTPLIB_LISTEN_BACKLOG=512 + # increase max URI length to handle longer prompts in query string + CPPHTTPLIB_REQUEST_URI_MAX_LENGTH=32768 + # disable Nagle's algorithm + CPPHTTPLIB_TCP_NODELAY=1 +) + +if (${CMAKE_SYSTEM_NAME} MATCHES "visionOS") + # quick fix for https://github.com/ggml-org/llama.cpp/actions/runs/19247291428/job/55024294176?pr=17150 + target_compile_definitions(${TARGET} PRIVATE NI_MAXHOST=1025) +endif() diff --git a/vendor/cpp-httplib/httplib.cpp b/vendor/cpp-httplib/httplib.cpp new file mode 100644 index 0000000000..e5c84d2b22 --- /dev/null +++ b/vendor/cpp-httplib/httplib.cpp @@ -0,0 +1,7816 @@ +#include "httplib.h" +namespace httplib { + + +/* + * Implementation that will be part of the .cc file if split into .h + .cc. + */ + +namespace detail { + +bool is_hex(char c, int &v) { + if (0x20 <= c && isdigit(c)) { + v = c - '0'; + return true; + } else if ('A' <= c && c <= 'F') { + v = c - 'A' + 10; + return true; + } else if ('a' <= c && c <= 'f') { + v = c - 'a' + 10; + return true; + } + return false; +} + +bool from_hex_to_i(const std::string &s, size_t i, size_t cnt, + int &val) { + if (i >= s.size()) { return false; } + + val = 0; + for (; cnt; i++, cnt--) { + if (!s[i]) { return false; } + auto v = 0; + if (is_hex(s[i], v)) { + val = val * 16 + v; + } else { + return false; + } + } + return true; +} + +std::string from_i_to_hex(size_t n) { + static const auto charset = "0123456789abcdef"; + std::string ret; + do { + ret = charset[n & 15] + ret; + n >>= 4; + } while (n > 0); + return ret; +} + +size_t to_utf8(int code, char *buff) { + if (code < 0x0080) { + buff[0] = static_cast(code & 0x7F); + return 1; + } else if (code < 0x0800) { + buff[0] = static_cast(0xC0 | ((code >> 6) & 0x1F)); + buff[1] = static_cast(0x80 | (code & 0x3F)); + return 2; + } else if (code < 0xD800) { + buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); + buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); + buff[2] = static_cast(0x80 | (code & 0x3F)); + return 3; + } else if (code < 0xE000) { // D800 - DFFF is invalid... + return 0; + } else if (code < 0x10000) { + buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); + buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); + buff[2] = static_cast(0x80 | (code & 0x3F)); + return 3; + } else if (code < 0x110000) { + buff[0] = static_cast(0xF0 | ((code >> 18) & 0x7)); + buff[1] = static_cast(0x80 | ((code >> 12) & 0x3F)); + buff[2] = static_cast(0x80 | ((code >> 6) & 0x3F)); + buff[3] = static_cast(0x80 | (code & 0x3F)); + return 4; + } + + // NOTREACHED + return 0; +} + +// NOTE: This code came up with the following stackoverflow post: +// https://stackoverflow.com/questions/180947/base64-decode-snippet-in-c +std::string base64_encode(const std::string &in) { + static const auto lookup = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + std::string out; + out.reserve(in.size()); + + auto val = 0; + auto valb = -6; + + for (auto c : in) { + val = (val << 8) + static_cast(c); + valb += 8; + while (valb >= 0) { + out.push_back(lookup[(val >> valb) & 0x3F]); + valb -= 6; + } + } + + if (valb > -6) { out.push_back(lookup[((val << 8) >> (valb + 8)) & 0x3F]); } + + while (out.size() % 4) { + out.push_back('='); + } + + return out; +} + +bool is_valid_path(const std::string &path) { + size_t level = 0; + size_t i = 0; + + // Skip slash + while (i < path.size() && path[i] == '/') { + i++; + } + + while (i < path.size()) { + // Read component + auto beg = i; + while (i < path.size() && path[i] != '/') { + if (path[i] == '\0') { + return false; + } else if (path[i] == '\\') { + return false; + } + i++; + } + + auto len = i - beg; + assert(len > 0); + + if (!path.compare(beg, len, ".")) { + ; + } else if (!path.compare(beg, len, "..")) { + if (level == 0) { return false; } + level--; + } else { + level++; + } + + // Skip slash + while (i < path.size() && path[i] == '/') { + i++; + } + } + + return true; +} + +FileStat::FileStat(const std::string &path) { +#if defined(_WIN32) + auto wpath = u8string_to_wstring(path.c_str()); + ret_ = _wstat(wpath.c_str(), &st_); +#else + ret_ = stat(path.c_str(), &st_); +#endif +} +bool FileStat::is_file() const { + return ret_ >= 0 && S_ISREG(st_.st_mode); +} +bool FileStat::is_dir() const { + return ret_ >= 0 && S_ISDIR(st_.st_mode); +} + +std::string encode_query_param(const std::string &value) { + std::ostringstream escaped; + escaped.fill('0'); + escaped << std::hex; + + for (auto c : value) { + if (std::isalnum(static_cast(c)) || c == '-' || c == '_' || + c == '.' || c == '!' || c == '~' || c == '*' || c == '\'' || c == '(' || + c == ')') { + escaped << c; + } else { + escaped << std::uppercase; + escaped << '%' << std::setw(2) + << static_cast(static_cast(c)); + escaped << std::nouppercase; + } + } + + return escaped.str(); +} + +std::string encode_url(const std::string &s) { + std::string result; + result.reserve(s.size()); + + for (size_t i = 0; s[i]; i++) { + switch (s[i]) { + case ' ': result += "%20"; break; + case '+': result += "%2B"; break; + case '\r': result += "%0D"; break; + case '\n': result += "%0A"; break; + case '\'': result += "%27"; break; + case ',': result += "%2C"; break; + // case ':': result += "%3A"; break; // ok? probably... + case ';': result += "%3B"; break; + default: + auto c = static_cast(s[i]); + if (c >= 0x80) { + result += '%'; + char hex[4]; + auto len = snprintf(hex, sizeof(hex) - 1, "%02X", c); + assert(len == 2); + result.append(hex, static_cast(len)); + } else { + result += s[i]; + } + break; + } + } + + return result; +} + +std::string decode_url(const std::string &s, + bool convert_plus_to_space) { + std::string result; + + for (size_t i = 0; i < s.size(); i++) { + if (s[i] == '%' && i + 1 < s.size()) { + if (s[i + 1] == 'u') { + auto val = 0; + if (from_hex_to_i(s, i + 2, 4, val)) { + // 4 digits Unicode codes + char buff[4]; + size_t len = to_utf8(val, buff); + if (len > 0) { result.append(buff, len); } + i += 5; // 'u0000' + } else { + result += s[i]; + } + } else { + auto val = 0; + if (from_hex_to_i(s, i + 1, 2, val)) { + // 2 digits hex codes + result += static_cast(val); + i += 2; // '00' + } else { + result += s[i]; + } + } + } else if (convert_plus_to_space && s[i] == '+') { + result += ' '; + } else { + result += s[i]; + } + } + + return result; +} + +std::string file_extension(const std::string &path) { + std::smatch m; + thread_local auto re = std::regex("\\.([a-zA-Z0-9]+)$"); + if (std::regex_search(path, m, re)) { return m[1].str(); } + return std::string(); +} + +bool is_space_or_tab(char c) { return c == ' ' || c == '\t'; } + +std::pair trim(const char *b, const char *e, size_t left, + size_t right) { + while (b + left < e && is_space_or_tab(b[left])) { + left++; + } + while (right > 0 && is_space_or_tab(b[right - 1])) { + right--; + } + return std::make_pair(left, right); +} + +std::string trim_copy(const std::string &s) { + auto r = trim(s.data(), s.data() + s.size(), 0, s.size()); + return s.substr(r.first, r.second - r.first); +} + +std::string trim_double_quotes_copy(const std::string &s) { + if (s.length() >= 2 && s.front() == '"' && s.back() == '"') { + return s.substr(1, s.size() - 2); + } + return s; +} + +void +divide(const char *data, std::size_t size, char d, + std::function + fn) { + const auto it = std::find(data, data + size, d); + const auto found = static_cast(it != data + size); + const auto lhs_data = data; + const auto lhs_size = static_cast(it - data); + const auto rhs_data = it + found; + const auto rhs_size = size - lhs_size - found; + + fn(lhs_data, lhs_size, rhs_data, rhs_size); +} + +void +divide(const std::string &str, char d, + std::function + fn) { + divide(str.data(), str.size(), d, std::move(fn)); +} + +void split(const char *b, const char *e, char d, + std::function fn) { + return split(b, e, d, (std::numeric_limits::max)(), std::move(fn)); +} + +void split(const char *b, const char *e, char d, size_t m, + std::function fn) { + size_t i = 0; + size_t beg = 0; + size_t count = 1; + + while (e ? (b + i < e) : (b[i] != '\0')) { + if (b[i] == d && count < m) { + auto r = trim(b, e, beg, i); + if (r.first < r.second) { fn(&b[r.first], &b[r.second]); } + beg = i + 1; + count++; + } + i++; + } + + if (i) { + auto r = trim(b, e, beg, i); + if (r.first < r.second) { fn(&b[r.first], &b[r.second]); } + } +} + +stream_line_reader::stream_line_reader(Stream &strm, char *fixed_buffer, + size_t fixed_buffer_size) + : strm_(strm), fixed_buffer_(fixed_buffer), + fixed_buffer_size_(fixed_buffer_size) {} + +const char *stream_line_reader::ptr() const { + if (growable_buffer_.empty()) { + return fixed_buffer_; + } else { + return growable_buffer_.data(); + } +} + +size_t stream_line_reader::size() const { + if (growable_buffer_.empty()) { + return fixed_buffer_used_size_; + } else { + return growable_buffer_.size(); + } +} + +bool stream_line_reader::end_with_crlf() const { + auto end = ptr() + size(); + return size() >= 2 && end[-2] == '\r' && end[-1] == '\n'; +} + +bool stream_line_reader::getline() { + fixed_buffer_used_size_ = 0; + growable_buffer_.clear(); + +#ifndef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR + char prev_byte = 0; +#endif + + for (size_t i = 0;; i++) { + if (size() >= CPPHTTPLIB_MAX_LINE_LENGTH) { + // Treat exceptionally long lines as an error to + // prevent infinite loops/memory exhaustion + return false; + } + char byte; + auto n = strm_.read(&byte, 1); + + if (n < 0) { + return false; + } else if (n == 0) { + if (i == 0) { + return false; + } else { + break; + } + } + + append(byte); + +#ifdef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR + if (byte == '\n') { break; } +#else + if (prev_byte == '\r' && byte == '\n') { break; } + prev_byte = byte; +#endif + } + + return true; +} + +void stream_line_reader::append(char c) { + if (fixed_buffer_used_size_ < fixed_buffer_size_ - 1) { + fixed_buffer_[fixed_buffer_used_size_++] = c; + fixed_buffer_[fixed_buffer_used_size_] = '\0'; + } else { + if (growable_buffer_.empty()) { + assert(fixed_buffer_[fixed_buffer_used_size_] == '\0'); + growable_buffer_.assign(fixed_buffer_, fixed_buffer_used_size_); + } + growable_buffer_ += c; + } +} + +mmap::mmap(const char *path) { open(path); } + +mmap::~mmap() { close(); } + +bool mmap::open(const char *path) { + close(); + +#if defined(_WIN32) + auto wpath = u8string_to_wstring(path); + if (wpath.empty()) { return false; } + +#if _WIN32_WINNT >= _WIN32_WINNT_WIN8 + hFile_ = ::CreateFile2(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ, + OPEN_EXISTING, NULL); +#else + hFile_ = ::CreateFileW(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); +#endif + + if (hFile_ == INVALID_HANDLE_VALUE) { return false; } + + LARGE_INTEGER size{}; + if (!::GetFileSizeEx(hFile_, &size)) { return false; } + // If the following line doesn't compile due to QuadPart, update Windows SDK. + // See: + // https://github.com/yhirose/cpp-httplib/issues/1903#issuecomment-2316520721 + if (static_cast(size.QuadPart) > + (std::numeric_limits::max)()) { + // `size_t` might be 32-bits, on 32-bits Windows. + return false; + } + size_ = static_cast(size.QuadPart); + +#if _WIN32_WINNT >= _WIN32_WINNT_WIN8 + hMapping_ = + ::CreateFileMappingFromApp(hFile_, NULL, PAGE_READONLY, size_, NULL); +#else + hMapping_ = ::CreateFileMappingW(hFile_, NULL, PAGE_READONLY, 0, 0, NULL); +#endif + + // Special treatment for an empty file... + if (hMapping_ == NULL && size_ == 0) { + close(); + is_open_empty_file = true; + return true; + } + + if (hMapping_ == NULL) { + close(); + return false; + } + +#if _WIN32_WINNT >= _WIN32_WINNT_WIN8 + addr_ = ::MapViewOfFileFromApp(hMapping_, FILE_MAP_READ, 0, 0); +#else + addr_ = ::MapViewOfFile(hMapping_, FILE_MAP_READ, 0, 0, 0); +#endif + + if (addr_ == nullptr) { + close(); + return false; + } +#else + fd_ = ::open(path, O_RDONLY); + if (fd_ == -1) { return false; } + + struct stat sb; + if (fstat(fd_, &sb) == -1) { + close(); + return false; + } + size_ = static_cast(sb.st_size); + + addr_ = ::mmap(NULL, size_, PROT_READ, MAP_PRIVATE, fd_, 0); + + // Special treatment for an empty file... + if (addr_ == MAP_FAILED && size_ == 0) { + close(); + is_open_empty_file = true; + return false; + } +#endif + + return true; +} + +bool mmap::is_open() const { + return is_open_empty_file ? true : addr_ != nullptr; +} + +size_t mmap::size() const { return size_; } + +const char *mmap::data() const { + return is_open_empty_file ? "" : static_cast(addr_); +} + +void mmap::close() { +#if defined(_WIN32) + if (addr_) { + ::UnmapViewOfFile(addr_); + addr_ = nullptr; + } + + if (hMapping_) { + ::CloseHandle(hMapping_); + hMapping_ = NULL; + } + + if (hFile_ != INVALID_HANDLE_VALUE) { + ::CloseHandle(hFile_); + hFile_ = INVALID_HANDLE_VALUE; + } + + is_open_empty_file = false; +#else + if (addr_ != nullptr) { + munmap(addr_, size_); + addr_ = nullptr; + } + + if (fd_ != -1) { + ::close(fd_); + fd_ = -1; + } +#endif + size_ = 0; +} +int close_socket(socket_t sock) { +#ifdef _WIN32 + return closesocket(sock); +#else + return close(sock); +#endif +} + +template inline ssize_t handle_EINTR(T fn) { + ssize_t res = 0; + while (true) { + res = fn(); + if (res < 0 && errno == EINTR) { + std::this_thread::sleep_for(std::chrono::microseconds{1}); + continue; + } + break; + } + return res; +} + +ssize_t read_socket(socket_t sock, void *ptr, size_t size, int flags) { + return handle_EINTR([&]() { + return recv(sock, +#ifdef _WIN32 + static_cast(ptr), static_cast(size), +#else + ptr, size, +#endif + flags); + }); +} + +ssize_t send_socket(socket_t sock, const void *ptr, size_t size, + int flags) { + return handle_EINTR([&]() { + return send(sock, +#ifdef _WIN32 + static_cast(ptr), static_cast(size), +#else + ptr, size, +#endif + flags); + }); +} + +int poll_wrapper(struct pollfd *fds, nfds_t nfds, int timeout) { +#ifdef _WIN32 + return ::WSAPoll(fds, nfds, timeout); +#else + return ::poll(fds, nfds, timeout); +#endif +} + +template +ssize_t select_impl(socket_t sock, time_t sec, time_t usec) { + struct pollfd pfd; + pfd.fd = sock; + pfd.events = (Read ? POLLIN : POLLOUT); + + auto timeout = static_cast(sec * 1000 + usec / 1000); + + return handle_EINTR([&]() { return poll_wrapper(&pfd, 1, timeout); }); +} + +ssize_t select_read(socket_t sock, time_t sec, time_t usec) { + return select_impl(sock, sec, usec); +} + +ssize_t select_write(socket_t sock, time_t sec, time_t usec) { + return select_impl(sock, sec, usec); +} + +Error wait_until_socket_is_ready(socket_t sock, time_t sec, + time_t usec) { + struct pollfd pfd_read; + pfd_read.fd = sock; + pfd_read.events = POLLIN | POLLOUT; + + auto timeout = static_cast(sec * 1000 + usec / 1000); + + auto poll_res = + handle_EINTR([&]() { return poll_wrapper(&pfd_read, 1, timeout); }); + + if (poll_res == 0) { return Error::ConnectionTimeout; } + + if (poll_res > 0 && pfd_read.revents & (POLLIN | POLLOUT)) { + auto error = 0; + socklen_t len = sizeof(error); + auto res = getsockopt(sock, SOL_SOCKET, SO_ERROR, + reinterpret_cast(&error), &len); + auto successful = res >= 0 && !error; + return successful ? Error::Success : Error::Connection; + } + + return Error::Connection; +} + +bool is_socket_alive(socket_t sock) { + const auto val = detail::select_read(sock, 0, 0); + if (val == 0) { + return true; + } else if (val < 0 && errno == EBADF) { + return false; + } + char buf[1]; + return detail::read_socket(sock, &buf[0], sizeof(buf), MSG_PEEK) > 0; +} + +class SocketStream final : public Stream { +public: + SocketStream(socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, + time_t write_timeout_sec, time_t write_timeout_usec, + time_t max_timeout_msec = 0, + std::chrono::time_point start_time = + (std::chrono::steady_clock::time_point::min)()); + ~SocketStream() override; + + bool is_readable() const override; + bool wait_readable() const override; + bool wait_writable() const override; + ssize_t read(char *ptr, size_t size) override; + ssize_t write(const char *ptr, size_t size) override; + void get_remote_ip_and_port(std::string &ip, int &port) const override; + void get_local_ip_and_port(std::string &ip, int &port) const override; + socket_t socket() const override; + time_t duration() const override; + +private: + socket_t sock_; + time_t read_timeout_sec_; + time_t read_timeout_usec_; + time_t write_timeout_sec_; + time_t write_timeout_usec_; + time_t max_timeout_msec_; + const std::chrono::time_point start_time_; + + std::vector read_buff_; + size_t read_buff_off_ = 0; + size_t read_buff_content_size_ = 0; + + static const size_t read_buff_size_ = 1024l * 4; +}; + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +class SSLSocketStream final : public Stream { +public: + SSLSocketStream( + socket_t sock, SSL *ssl, time_t read_timeout_sec, + time_t read_timeout_usec, time_t write_timeout_sec, + time_t write_timeout_usec, time_t max_timeout_msec = 0, + std::chrono::time_point start_time = + (std::chrono::steady_clock::time_point::min)()); + ~SSLSocketStream() override; + + bool is_readable() const override; + bool wait_readable() const override; + bool wait_writable() const override; + ssize_t read(char *ptr, size_t size) override; + ssize_t write(const char *ptr, size_t size) override; + void get_remote_ip_and_port(std::string &ip, int &port) const override; + void get_local_ip_and_port(std::string &ip, int &port) const override; + socket_t socket() const override; + time_t duration() const override; + +private: + socket_t sock_; + SSL *ssl_; + time_t read_timeout_sec_; + time_t read_timeout_usec_; + time_t write_timeout_sec_; + time_t write_timeout_usec_; + time_t max_timeout_msec_; + const std::chrono::time_point start_time_; +}; +#endif + +bool keep_alive(const std::atomic &svr_sock, socket_t sock, + time_t keep_alive_timeout_sec) { + using namespace std::chrono; + + const auto interval_usec = + CPPHTTPLIB_KEEPALIVE_TIMEOUT_CHECK_INTERVAL_USECOND; + + // Avoid expensive `steady_clock::now()` call for the first time + if (select_read(sock, 0, interval_usec) > 0) { return true; } + + const auto start = steady_clock::now() - microseconds{interval_usec}; + const auto timeout = seconds{keep_alive_timeout_sec}; + + while (true) { + if (svr_sock == INVALID_SOCKET) { + break; // Server socket is closed + } + + auto val = select_read(sock, 0, interval_usec); + if (val < 0) { + break; // Ssocket error + } else if (val == 0) { + if (steady_clock::now() - start > timeout) { + break; // Timeout + } + } else { + return true; // Ready for read + } + } + + return false; +} + +template +bool +process_server_socket_core(const std::atomic &svr_sock, socket_t sock, + size_t keep_alive_max_count, + time_t keep_alive_timeout_sec, T callback) { + assert(keep_alive_max_count > 0); + auto ret = false; + auto count = keep_alive_max_count; + while (count > 0 && keep_alive(svr_sock, sock, keep_alive_timeout_sec)) { + auto close_connection = count == 1; + auto connection_closed = false; + ret = callback(close_connection, connection_closed); + if (!ret || connection_closed) { break; } + count--; + } + return ret; +} + +template +bool +process_server_socket(const std::atomic &svr_sock, socket_t sock, + size_t keep_alive_max_count, + time_t keep_alive_timeout_sec, time_t read_timeout_sec, + time_t read_timeout_usec, time_t write_timeout_sec, + time_t write_timeout_usec, T callback) { + return process_server_socket_core( + svr_sock, sock, keep_alive_max_count, keep_alive_timeout_sec, + [&](bool close_connection, bool &connection_closed) { + SocketStream strm(sock, read_timeout_sec, read_timeout_usec, + write_timeout_sec, write_timeout_usec); + return callback(strm, close_connection, connection_closed); + }); +} + +bool process_client_socket( + socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, + time_t write_timeout_sec, time_t write_timeout_usec, + time_t max_timeout_msec, + std::chrono::time_point start_time, + std::function callback) { + SocketStream strm(sock, read_timeout_sec, read_timeout_usec, + write_timeout_sec, write_timeout_usec, max_timeout_msec, + start_time); + return callback(strm); +} + +int shutdown_socket(socket_t sock) { +#ifdef _WIN32 + return shutdown(sock, SD_BOTH); +#else + return shutdown(sock, SHUT_RDWR); +#endif +} + +std::string escape_abstract_namespace_unix_domain(const std::string &s) { + if (s.size() > 1 && s[0] == '\0') { + auto ret = s; + ret[0] = '@'; + return ret; + } + return s; +} + +std::string +unescape_abstract_namespace_unix_domain(const std::string &s) { + if (s.size() > 1 && s[0] == '@') { + auto ret = s; + ret[0] = '\0'; + return ret; + } + return s; +} + +template +socket_t create_socket(const std::string &host, const std::string &ip, int port, + int address_family, int socket_flags, bool tcp_nodelay, + bool ipv6_v6only, SocketOptions socket_options, + BindOrConnect bind_or_connect) { + // Get address info + const char *node = nullptr; + struct addrinfo hints; + struct addrinfo *result; + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_IP; + + if (!ip.empty()) { + node = ip.c_str(); + // Ask getaddrinfo to convert IP in c-string to address + hints.ai_family = AF_UNSPEC; + hints.ai_flags = AI_NUMERICHOST; + } else { + if (!host.empty()) { node = host.c_str(); } + hints.ai_family = address_family; + hints.ai_flags = socket_flags; + } + + if (hints.ai_family == AF_UNIX) { + const auto addrlen = host.length(); + if (addrlen > sizeof(sockaddr_un::sun_path)) { return INVALID_SOCKET; } + +#ifdef SOCK_CLOEXEC + auto sock = socket(hints.ai_family, hints.ai_socktype | SOCK_CLOEXEC, + hints.ai_protocol); +#else + auto sock = socket(hints.ai_family, hints.ai_socktype, hints.ai_protocol); +#endif + + if (sock != INVALID_SOCKET) { + sockaddr_un addr{}; + addr.sun_family = AF_UNIX; + + auto unescaped_host = unescape_abstract_namespace_unix_domain(host); + std::copy(unescaped_host.begin(), unescaped_host.end(), addr.sun_path); + + hints.ai_addr = reinterpret_cast(&addr); + hints.ai_addrlen = static_cast( + sizeof(addr) - sizeof(addr.sun_path) + addrlen); + +#ifndef SOCK_CLOEXEC +#ifndef _WIN32 + fcntl(sock, F_SETFD, FD_CLOEXEC); +#endif +#endif + + if (socket_options) { socket_options(sock); } + +#ifdef _WIN32 + // Setting SO_REUSEADDR seems not to work well with AF_UNIX on windows, so + // remove the option. + detail::set_socket_opt(sock, SOL_SOCKET, SO_REUSEADDR, 0); +#endif + + bool dummy; + if (!bind_or_connect(sock, hints, dummy)) { + close_socket(sock); + sock = INVALID_SOCKET; + } + } + return sock; + } + + auto service = std::to_string(port); + + if (getaddrinfo(node, service.c_str(), &hints, &result)) { +#if defined __linux__ && !defined __ANDROID__ + res_init(); +#endif + return INVALID_SOCKET; + } + auto se = detail::scope_exit([&] { freeaddrinfo(result); }); + + for (auto rp = result; rp; rp = rp->ai_next) { + // Create a socket +#ifdef _WIN32 + auto sock = + WSASocketW(rp->ai_family, rp->ai_socktype, rp->ai_protocol, nullptr, 0, + WSA_FLAG_NO_HANDLE_INHERIT | WSA_FLAG_OVERLAPPED); + /** + * Since the WSA_FLAG_NO_HANDLE_INHERIT is only supported on Windows 7 SP1 + * and above the socket creation fails on older Windows Systems. + * + * Let's try to create a socket the old way in this case. + * + * Reference: + * https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasocketa + * + * WSA_FLAG_NO_HANDLE_INHERIT: + * This flag is supported on Windows 7 with SP1, Windows Server 2008 R2 with + * SP1, and later + * + */ + if (sock == INVALID_SOCKET) { + sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + } +#else + +#ifdef SOCK_CLOEXEC + auto sock = + socket(rp->ai_family, rp->ai_socktype | SOCK_CLOEXEC, rp->ai_protocol); +#else + auto sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); +#endif + +#endif + if (sock == INVALID_SOCKET) { continue; } + +#if !defined _WIN32 && !defined SOCK_CLOEXEC + if (fcntl(sock, F_SETFD, FD_CLOEXEC) == -1) { + close_socket(sock); + continue; + } +#endif + + if (tcp_nodelay) { set_socket_opt(sock, IPPROTO_TCP, TCP_NODELAY, 1); } + + if (rp->ai_family == AF_INET6) { + set_socket_opt(sock, IPPROTO_IPV6, IPV6_V6ONLY, ipv6_v6only ? 1 : 0); + } + + if (socket_options) { socket_options(sock); } + + // bind or connect + auto quit = false; + if (bind_or_connect(sock, *rp, quit)) { return sock; } + + close_socket(sock); + + if (quit) { break; } + } + + return INVALID_SOCKET; +} + +void set_nonblocking(socket_t sock, bool nonblocking) { +#ifdef _WIN32 + auto flags = nonblocking ? 1UL : 0UL; + ioctlsocket(sock, FIONBIO, &flags); +#else + auto flags = fcntl(sock, F_GETFL, 0); + fcntl(sock, F_SETFL, + nonblocking ? (flags | O_NONBLOCK) : (flags & (~O_NONBLOCK))); +#endif +} + +bool is_connection_error() { +#ifdef _WIN32 + return WSAGetLastError() != WSAEWOULDBLOCK; +#else + return errno != EINPROGRESS; +#endif +} + +bool bind_ip_address(socket_t sock, const std::string &host) { + struct addrinfo hints; + struct addrinfo *result; + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = 0; + + if (getaddrinfo(host.c_str(), "0", &hints, &result)) { return false; } + auto se = detail::scope_exit([&] { freeaddrinfo(result); }); + + auto ret = false; + for (auto rp = result; rp; rp = rp->ai_next) { + const auto &ai = *rp; + if (!::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { + ret = true; + break; + } + } + + return ret; +} + +#if !defined _WIN32 && !defined ANDROID && !defined _AIX && !defined __MVS__ +#define USE_IF2IP +#endif + +#ifdef USE_IF2IP +std::string if2ip(int address_family, const std::string &ifn) { + struct ifaddrs *ifap; + getifaddrs(&ifap); + auto se = detail::scope_exit([&] { freeifaddrs(ifap); }); + + std::string addr_candidate; + for (auto ifa = ifap; ifa; ifa = ifa->ifa_next) { + if (ifa->ifa_addr && ifn == ifa->ifa_name && + (AF_UNSPEC == address_family || + ifa->ifa_addr->sa_family == address_family)) { + if (ifa->ifa_addr->sa_family == AF_INET) { + auto sa = reinterpret_cast(ifa->ifa_addr); + char buf[INET_ADDRSTRLEN]; + if (inet_ntop(AF_INET, &sa->sin_addr, buf, INET_ADDRSTRLEN)) { + return std::string(buf, INET_ADDRSTRLEN); + } + } else if (ifa->ifa_addr->sa_family == AF_INET6) { + auto sa = reinterpret_cast(ifa->ifa_addr); + if (!IN6_IS_ADDR_LINKLOCAL(&sa->sin6_addr)) { + char buf[INET6_ADDRSTRLEN] = {}; + if (inet_ntop(AF_INET6, &sa->sin6_addr, buf, INET6_ADDRSTRLEN)) { + // equivalent to mac's IN6_IS_ADDR_UNIQUE_LOCAL + auto s6_addr_head = sa->sin6_addr.s6_addr[0]; + if (s6_addr_head == 0xfc || s6_addr_head == 0xfd) { + addr_candidate = std::string(buf, INET6_ADDRSTRLEN); + } else { + return std::string(buf, INET6_ADDRSTRLEN); + } + } + } + } + } + } + return addr_candidate; +} +#endif + +socket_t create_client_socket( + const std::string &host, const std::string &ip, int port, + int address_family, bool tcp_nodelay, bool ipv6_v6only, + SocketOptions socket_options, time_t connection_timeout_sec, + time_t connection_timeout_usec, time_t read_timeout_sec, + time_t read_timeout_usec, time_t write_timeout_sec, + time_t write_timeout_usec, const std::string &intf, Error &error) { + auto sock = create_socket( + host, ip, port, address_family, 0, tcp_nodelay, ipv6_v6only, + std::move(socket_options), + [&](socket_t sock2, struct addrinfo &ai, bool &quit) -> bool { + if (!intf.empty()) { +#ifdef USE_IF2IP + auto ip_from_if = if2ip(address_family, intf); + if (ip_from_if.empty()) { ip_from_if = intf; } + if (!bind_ip_address(sock2, ip_from_if)) { + error = Error::BindIPAddress; + return false; + } +#endif + } + + set_nonblocking(sock2, true); + + auto ret = + ::connect(sock2, ai.ai_addr, static_cast(ai.ai_addrlen)); + + if (ret < 0) { + if (is_connection_error()) { + error = Error::Connection; + return false; + } + error = wait_until_socket_is_ready(sock2, connection_timeout_sec, + connection_timeout_usec); + if (error != Error::Success) { + if (error == Error::ConnectionTimeout) { quit = true; } + return false; + } + } + + set_nonblocking(sock2, false); + set_socket_opt_time(sock2, SOL_SOCKET, SO_RCVTIMEO, read_timeout_sec, + read_timeout_usec); + set_socket_opt_time(sock2, SOL_SOCKET, SO_SNDTIMEO, write_timeout_sec, + write_timeout_usec); + + error = Error::Success; + return true; + }); + + if (sock != INVALID_SOCKET) { + error = Error::Success; + } else { + if (error == Error::Success) { error = Error::Connection; } + } + + return sock; +} + +bool get_ip_and_port(const struct sockaddr_storage &addr, + socklen_t addr_len, std::string &ip, int &port) { + if (addr.ss_family == AF_INET) { + port = ntohs(reinterpret_cast(&addr)->sin_port); + } else if (addr.ss_family == AF_INET6) { + port = + ntohs(reinterpret_cast(&addr)->sin6_port); + } else { + return false; + } + + std::array ipstr{}; + if (getnameinfo(reinterpret_cast(&addr), addr_len, + ipstr.data(), static_cast(ipstr.size()), nullptr, + 0, NI_NUMERICHOST)) { + return false; + } + + ip = ipstr.data(); + return true; +} + +void get_local_ip_and_port(socket_t sock, std::string &ip, int &port) { + struct sockaddr_storage addr; + socklen_t addr_len = sizeof(addr); + if (!getsockname(sock, reinterpret_cast(&addr), + &addr_len)) { + get_ip_and_port(addr, addr_len, ip, port); + } +} + +void get_remote_ip_and_port(socket_t sock, std::string &ip, int &port) { + struct sockaddr_storage addr; + socklen_t addr_len = sizeof(addr); + + if (!getpeername(sock, reinterpret_cast(&addr), + &addr_len)) { +#ifndef _WIN32 + if (addr.ss_family == AF_UNIX) { +#if defined(__linux__) + struct ucred ucred; + socklen_t len = sizeof(ucred); + if (getsockopt(sock, SOL_SOCKET, SO_PEERCRED, &ucred, &len) == 0) { + port = ucred.pid; + } +#elif defined(SOL_LOCAL) && defined(SO_PEERPID) // __APPLE__ + pid_t pid; + socklen_t len = sizeof(pid); + if (getsockopt(sock, SOL_LOCAL, SO_PEERPID, &pid, &len) == 0) { + port = pid; + } +#endif + return; + } +#endif + get_ip_and_port(addr, addr_len, ip, port); + } +} + +constexpr unsigned int str2tag_core(const char *s, size_t l, + unsigned int h) { + return (l == 0) + ? h + : str2tag_core( + s + 1, l - 1, + // Unsets the 6 high bits of h, therefore no overflow happens + (((std::numeric_limits::max)() >> 6) & + h * 33) ^ + static_cast(*s)); +} + +unsigned int str2tag(const std::string &s) { + return str2tag_core(s.data(), s.size(), 0); +} + +namespace udl { + +constexpr unsigned int operator""_t(const char *s, size_t l) { + return str2tag_core(s, l, 0); +} + +} // namespace udl + +std::string +find_content_type(const std::string &path, + const std::map &user_data, + const std::string &default_content_type) { + auto ext = file_extension(path); + + auto it = user_data.find(ext); + if (it != user_data.end()) { return it->second; } + + using udl::operator""_t; + + switch (str2tag(ext)) { + default: return default_content_type; + + case "css"_t: return "text/css"; + case "csv"_t: return "text/csv"; + case "htm"_t: + case "html"_t: return "text/html"; + case "js"_t: + case "mjs"_t: return "text/javascript"; + case "txt"_t: return "text/plain"; + case "vtt"_t: return "text/vtt"; + + case "apng"_t: return "image/apng"; + case "avif"_t: return "image/avif"; + case "bmp"_t: return "image/bmp"; + case "gif"_t: return "image/gif"; + case "png"_t: return "image/png"; + case "svg"_t: return "image/svg+xml"; + case "webp"_t: return "image/webp"; + case "ico"_t: return "image/x-icon"; + case "tif"_t: return "image/tiff"; + case "tiff"_t: return "image/tiff"; + case "jpg"_t: + case "jpeg"_t: return "image/jpeg"; + + case "mp4"_t: return "video/mp4"; + case "mpeg"_t: return "video/mpeg"; + case "webm"_t: return "video/webm"; + + case "mp3"_t: return "audio/mp3"; + case "mpga"_t: return "audio/mpeg"; + case "weba"_t: return "audio/webm"; + case "wav"_t: return "audio/wave"; + + case "otf"_t: return "font/otf"; + case "ttf"_t: return "font/ttf"; + case "woff"_t: return "font/woff"; + case "woff2"_t: return "font/woff2"; + + case "7z"_t: return "application/x-7z-compressed"; + case "atom"_t: return "application/atom+xml"; + case "pdf"_t: return "application/pdf"; + case "json"_t: return "application/json"; + case "rss"_t: return "application/rss+xml"; + case "tar"_t: return "application/x-tar"; + case "xht"_t: + case "xhtml"_t: return "application/xhtml+xml"; + case "xslt"_t: return "application/xslt+xml"; + case "xml"_t: return "application/xml"; + case "gz"_t: return "application/gzip"; + case "zip"_t: return "application/zip"; + case "wasm"_t: return "application/wasm"; + } +} + +bool can_compress_content_type(const std::string &content_type) { + using udl::operator""_t; + + auto tag = str2tag(content_type); + + switch (tag) { + case "image/svg+xml"_t: + case "application/javascript"_t: + case "application/json"_t: + case "application/xml"_t: + case "application/protobuf"_t: + case "application/xhtml+xml"_t: return true; + + case "text/event-stream"_t: return false; + + default: return !content_type.rfind("text/", 0); + } +} + +EncodingType encoding_type(const Request &req, const Response &res) { + auto ret = + detail::can_compress_content_type(res.get_header_value("Content-Type")); + if (!ret) { return EncodingType::None; } + + const auto &s = req.get_header_value("Accept-Encoding"); + (void)(s); + +#ifdef CPPHTTPLIB_BROTLI_SUPPORT + // TODO: 'Accept-Encoding' has br, not br;q=0 + ret = s.find("br") != std::string::npos; + if (ret) { return EncodingType::Brotli; } +#endif + +#ifdef CPPHTTPLIB_ZLIB_SUPPORT + // TODO: 'Accept-Encoding' has gzip, not gzip;q=0 + ret = s.find("gzip") != std::string::npos; + if (ret) { return EncodingType::Gzip; } +#endif + +#ifdef CPPHTTPLIB_ZSTD_SUPPORT + // TODO: 'Accept-Encoding' has zstd, not zstd;q=0 + ret = s.find("zstd") != std::string::npos; + if (ret) { return EncodingType::Zstd; } +#endif + + return EncodingType::None; +} + +bool nocompressor::compress(const char *data, size_t data_length, + bool /*last*/, Callback callback) { + if (!data_length) { return true; } + return callback(data, data_length); +} + +#ifdef CPPHTTPLIB_ZLIB_SUPPORT +gzip_compressor::gzip_compressor() { + std::memset(&strm_, 0, sizeof(strm_)); + strm_.zalloc = Z_NULL; + strm_.zfree = Z_NULL; + strm_.opaque = Z_NULL; + + is_valid_ = deflateInit2(&strm_, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 31, 8, + Z_DEFAULT_STRATEGY) == Z_OK; +} + +gzip_compressor::~gzip_compressor() { deflateEnd(&strm_); } + +bool gzip_compressor::compress(const char *data, size_t data_length, + bool last, Callback callback) { + assert(is_valid_); + + do { + constexpr size_t max_avail_in = + (std::numeric_limits::max)(); + + strm_.avail_in = static_cast( + (std::min)(data_length, max_avail_in)); + strm_.next_in = const_cast(reinterpret_cast(data)); + + data_length -= strm_.avail_in; + data += strm_.avail_in; + + auto flush = (last && data_length == 0) ? Z_FINISH : Z_NO_FLUSH; + auto ret = Z_OK; + + std::array buff{}; + do { + strm_.avail_out = static_cast(buff.size()); + strm_.next_out = reinterpret_cast(buff.data()); + + ret = deflate(&strm_, flush); + if (ret == Z_STREAM_ERROR) { return false; } + + if (!callback(buff.data(), buff.size() - strm_.avail_out)) { + return false; + } + } while (strm_.avail_out == 0); + + assert((flush == Z_FINISH && ret == Z_STREAM_END) || + (flush == Z_NO_FLUSH && ret == Z_OK)); + assert(strm_.avail_in == 0); + } while (data_length > 0); + + return true; +} + +gzip_decompressor::gzip_decompressor() { + std::memset(&strm_, 0, sizeof(strm_)); + strm_.zalloc = Z_NULL; + strm_.zfree = Z_NULL; + strm_.opaque = Z_NULL; + + // 15 is the value of wbits, which should be at the maximum possible value + // to ensure that any gzip stream can be decoded. The offset of 32 specifies + // that the stream type should be automatically detected either gzip or + // deflate. + is_valid_ = inflateInit2(&strm_, 32 + 15) == Z_OK; +} + +gzip_decompressor::~gzip_decompressor() { inflateEnd(&strm_); } + +bool gzip_decompressor::is_valid() const { return is_valid_; } + +bool gzip_decompressor::decompress(const char *data, size_t data_length, + Callback callback) { + assert(is_valid_); + + auto ret = Z_OK; + + do { + constexpr size_t max_avail_in = + (std::numeric_limits::max)(); + + strm_.avail_in = static_cast( + (std::min)(data_length, max_avail_in)); + strm_.next_in = const_cast(reinterpret_cast(data)); + + data_length -= strm_.avail_in; + data += strm_.avail_in; + + std::array buff{}; + while (strm_.avail_in > 0 && ret == Z_OK) { + strm_.avail_out = static_cast(buff.size()); + strm_.next_out = reinterpret_cast(buff.data()); + + ret = inflate(&strm_, Z_NO_FLUSH); + + assert(ret != Z_STREAM_ERROR); + switch (ret) { + case Z_NEED_DICT: + case Z_DATA_ERROR: + case Z_MEM_ERROR: inflateEnd(&strm_); return false; + } + + if (!callback(buff.data(), buff.size() - strm_.avail_out)) { + return false; + } + } + + if (ret != Z_OK && ret != Z_STREAM_END) { return false; } + + } while (data_length > 0); + + return true; +} +#endif + +#ifdef CPPHTTPLIB_BROTLI_SUPPORT +brotli_compressor::brotli_compressor() { + state_ = BrotliEncoderCreateInstance(nullptr, nullptr, nullptr); +} + +brotli_compressor::~brotli_compressor() { + BrotliEncoderDestroyInstance(state_); +} + +bool brotli_compressor::compress(const char *data, size_t data_length, + bool last, Callback callback) { + std::array buff{}; + + auto operation = last ? BROTLI_OPERATION_FINISH : BROTLI_OPERATION_PROCESS; + auto available_in = data_length; + auto next_in = reinterpret_cast(data); + + for (;;) { + if (last) { + if (BrotliEncoderIsFinished(state_)) { break; } + } else { + if (!available_in) { break; } + } + + auto available_out = buff.size(); + auto next_out = buff.data(); + + if (!BrotliEncoderCompressStream(state_, operation, &available_in, &next_in, + &available_out, &next_out, nullptr)) { + return false; + } + + auto output_bytes = buff.size() - available_out; + if (output_bytes) { + callback(reinterpret_cast(buff.data()), output_bytes); + } + } + + return true; +} + +brotli_decompressor::brotli_decompressor() { + decoder_s = BrotliDecoderCreateInstance(0, 0, 0); + decoder_r = decoder_s ? BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT + : BROTLI_DECODER_RESULT_ERROR; +} + +brotli_decompressor::~brotli_decompressor() { + if (decoder_s) { BrotliDecoderDestroyInstance(decoder_s); } +} + +bool brotli_decompressor::is_valid() const { return decoder_s; } + +bool brotli_decompressor::decompress(const char *data, + size_t data_length, + Callback callback) { + if (decoder_r == BROTLI_DECODER_RESULT_SUCCESS || + decoder_r == BROTLI_DECODER_RESULT_ERROR) { + return 0; + } + + auto next_in = reinterpret_cast(data); + size_t avail_in = data_length; + size_t total_out; + + decoder_r = BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT; + + std::array buff{}; + while (decoder_r == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) { + char *next_out = buff.data(); + size_t avail_out = buff.size(); + + decoder_r = BrotliDecoderDecompressStream( + decoder_s, &avail_in, &next_in, &avail_out, + reinterpret_cast(&next_out), &total_out); + + if (decoder_r == BROTLI_DECODER_RESULT_ERROR) { return false; } + + if (!callback(buff.data(), buff.size() - avail_out)) { return false; } + } + + return decoder_r == BROTLI_DECODER_RESULT_SUCCESS || + decoder_r == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT; +} +#endif + +#ifdef CPPHTTPLIB_ZSTD_SUPPORT +zstd_compressor::zstd_compressor() { + ctx_ = ZSTD_createCCtx(); + ZSTD_CCtx_setParameter(ctx_, ZSTD_c_compressionLevel, ZSTD_fast); +} + +zstd_compressor::~zstd_compressor() { ZSTD_freeCCtx(ctx_); } + +bool zstd_compressor::compress(const char *data, size_t data_length, + bool last, Callback callback) { + std::array buff{}; + + ZSTD_EndDirective mode = last ? ZSTD_e_end : ZSTD_e_continue; + ZSTD_inBuffer input = {data, data_length, 0}; + + bool finished; + do { + ZSTD_outBuffer output = {buff.data(), CPPHTTPLIB_COMPRESSION_BUFSIZ, 0}; + size_t const remaining = ZSTD_compressStream2(ctx_, &output, &input, mode); + + if (ZSTD_isError(remaining)) { return false; } + + if (!callback(buff.data(), output.pos)) { return false; } + + finished = last ? (remaining == 0) : (input.pos == input.size); + + } while (!finished); + + return true; +} + +zstd_decompressor::zstd_decompressor() { ctx_ = ZSTD_createDCtx(); } + +zstd_decompressor::~zstd_decompressor() { ZSTD_freeDCtx(ctx_); } + +bool zstd_decompressor::is_valid() const { return ctx_ != nullptr; } + +bool zstd_decompressor::decompress(const char *data, size_t data_length, + Callback callback) { + std::array buff{}; + ZSTD_inBuffer input = {data, data_length, 0}; + + while (input.pos < input.size) { + ZSTD_outBuffer output = {buff.data(), CPPHTTPLIB_COMPRESSION_BUFSIZ, 0}; + size_t const remaining = ZSTD_decompressStream(ctx_, &output, &input); + + if (ZSTD_isError(remaining)) { return false; } + + if (!callback(buff.data(), output.pos)) { return false; } + } + + return true; +} +#endif + +bool has_header(const Headers &headers, const std::string &key) { + return headers.find(key) != headers.end(); +} + +const char *get_header_value(const Headers &headers, + const std::string &key, const char *def, + size_t id) { + auto rng = headers.equal_range(key); + auto it = rng.first; + std::advance(it, static_cast(id)); + if (it != rng.second) { return it->second.c_str(); } + return def; +} + +template +bool parse_header(const char *beg, const char *end, T fn) { + // Skip trailing spaces and tabs. + while (beg < end && is_space_or_tab(end[-1])) { + end--; + } + + auto p = beg; + while (p < end && *p != ':') { + p++; + } + + auto name = std::string(beg, p); + if (!detail::fields::is_field_name(name)) { return false; } + + if (p == end) { return false; } + + auto key_end = p; + + if (*p++ != ':') { return false; } + + while (p < end && is_space_or_tab(*p)) { + p++; + } + + if (p <= end) { + auto key_len = key_end - beg; + if (!key_len) { return false; } + + auto key = std::string(beg, key_end); + auto val = std::string(p, end); + + if (!detail::fields::is_field_value(val)) { return false; } + + if (case_ignore::equal(key, "Location") || + case_ignore::equal(key, "Referer")) { + fn(key, val); + } else { + fn(key, decode_url(val, false)); + } + + return true; + } + + return false; +} + +bool read_headers(Stream &strm, Headers &headers) { + const auto bufsiz = 2048; + char buf[bufsiz]; + stream_line_reader line_reader(strm, buf, bufsiz); + + for (;;) { + if (!line_reader.getline()) { return false; } + + // Check if the line ends with CRLF. + auto line_terminator_len = 2; + if (line_reader.end_with_crlf()) { + // Blank line indicates end of headers. + if (line_reader.size() == 2) { break; } + } else { +#ifdef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR + // Blank line indicates end of headers. + if (line_reader.size() == 1) { break; } + line_terminator_len = 1; +#else + continue; // Skip invalid line. +#endif + } + + if (line_reader.size() > CPPHTTPLIB_HEADER_MAX_LENGTH) { return false; } + + // Exclude line terminator + auto end = line_reader.ptr() + line_reader.size() - line_terminator_len; + + if (!parse_header(line_reader.ptr(), end, + [&](const std::string &key, const std::string &val) { + headers.emplace(key, val); + })) { + return false; + } + } + + return true; +} + +bool read_content_with_length(Stream &strm, uint64_t len, + Progress progress, + ContentReceiverWithProgress out) { + char buf[CPPHTTPLIB_RECV_BUFSIZ]; + + uint64_t r = 0; + while (r < len) { + auto read_len = static_cast(len - r); + auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); + if (n <= 0) { return false; } + + if (!out(buf, static_cast(n), r, len)) { return false; } + r += static_cast(n); + + if (progress) { + if (!progress(r, len)) { return false; } + } + } + + return true; +} + +void skip_content_with_length(Stream &strm, uint64_t len) { + char buf[CPPHTTPLIB_RECV_BUFSIZ]; + uint64_t r = 0; + while (r < len) { + auto read_len = static_cast(len - r); + auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); + if (n <= 0) { return; } + r += static_cast(n); + } +} + +bool read_content_without_length(Stream &strm, + ContentReceiverWithProgress out) { + char buf[CPPHTTPLIB_RECV_BUFSIZ]; + uint64_t r = 0; + for (;;) { + auto n = strm.read(buf, CPPHTTPLIB_RECV_BUFSIZ); + if (n == 0) { return true; } + if (n < 0) { return false; } + + if (!out(buf, static_cast(n), r, 0)) { return false; } + r += static_cast(n); + } + + return true; +} + +template +bool read_content_chunked(Stream &strm, T &x, + ContentReceiverWithProgress out) { + const auto bufsiz = 16; + char buf[bufsiz]; + + stream_line_reader line_reader(strm, buf, bufsiz); + + if (!line_reader.getline()) { return false; } + + unsigned long chunk_len; + while (true) { + char *end_ptr; + + chunk_len = std::strtoul(line_reader.ptr(), &end_ptr, 16); + + if (end_ptr == line_reader.ptr()) { return false; } + if (chunk_len == ULONG_MAX) { return false; } + + if (chunk_len == 0) { break; } + + if (!read_content_with_length(strm, chunk_len, nullptr, out)) { + return false; + } + + if (!line_reader.getline()) { return false; } + + if (strcmp(line_reader.ptr(), "\r\n") != 0) { return false; } + + if (!line_reader.getline()) { return false; } + } + + assert(chunk_len == 0); + + // NOTE: In RFC 9112, '7.1 Chunked Transfer Coding' mentions "The chunked + // transfer coding is complete when a chunk with a chunk-size of zero is + // received, possibly followed by a trailer section, and finally terminated by + // an empty line". https://www.rfc-editor.org/rfc/rfc9112.html#section-7.1 + // + // In '7.1.3. Decoding Chunked', however, the pseudo-code in the section + // does't care for the existence of the final CRLF. In other words, it seems + // to be ok whether the final CRLF exists or not in the chunked data. + // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.1.3 + // + // According to the reference code in RFC 9112, cpp-httplib now allows + // chunked transfer coding data without the final CRLF. + if (!line_reader.getline()) { return true; } + + while (strcmp(line_reader.ptr(), "\r\n") != 0) { + if (line_reader.size() > CPPHTTPLIB_HEADER_MAX_LENGTH) { return false; } + + // Exclude line terminator + constexpr auto line_terminator_len = 2; + auto end = line_reader.ptr() + line_reader.size() - line_terminator_len; + + parse_header(line_reader.ptr(), end, + [&](const std::string &key, const std::string &val) { + x.headers.emplace(key, val); + }); + + if (!line_reader.getline()) { return false; } + } + + return true; +} + +bool is_chunked_transfer_encoding(const Headers &headers) { + return case_ignore::equal( + get_header_value(headers, "Transfer-Encoding", "", 0), "chunked"); +} + +template +bool prepare_content_receiver(T &x, int &status, + ContentReceiverWithProgress receiver, + bool decompress, U callback) { + if (decompress) { + std::string encoding = x.get_header_value("Content-Encoding"); + std::unique_ptr decompressor; + + if (encoding == "gzip" || encoding == "deflate") { +#ifdef CPPHTTPLIB_ZLIB_SUPPORT + decompressor = detail::make_unique(); +#else + status = StatusCode::UnsupportedMediaType_415; + return false; +#endif + } else if (encoding.find("br") != std::string::npos) { +#ifdef CPPHTTPLIB_BROTLI_SUPPORT + decompressor = detail::make_unique(); +#else + status = StatusCode::UnsupportedMediaType_415; + return false; +#endif + } else if (encoding == "zstd") { +#ifdef CPPHTTPLIB_ZSTD_SUPPORT + decompressor = detail::make_unique(); +#else + status = StatusCode::UnsupportedMediaType_415; + return false; +#endif + } + + if (decompressor) { + if (decompressor->is_valid()) { + ContentReceiverWithProgress out = [&](const char *buf, size_t n, + uint64_t off, uint64_t len) { + return decompressor->decompress(buf, n, + [&](const char *buf2, size_t n2) { + return receiver(buf2, n2, off, len); + }); + }; + return callback(std::move(out)); + } else { + status = StatusCode::InternalServerError_500; + return false; + } + } + } + + ContentReceiverWithProgress out = [&](const char *buf, size_t n, uint64_t off, + uint64_t len) { + return receiver(buf, n, off, len); + }; + return callback(std::move(out)); +} + +template +bool read_content(Stream &strm, T &x, size_t payload_max_length, int &status, + Progress progress, ContentReceiverWithProgress receiver, + bool decompress) { + return prepare_content_receiver( + x, status, std::move(receiver), decompress, + [&](const ContentReceiverWithProgress &out) { + auto ret = true; + auto exceed_payload_max_length = false; + + if (is_chunked_transfer_encoding(x.headers)) { + ret = read_content_chunked(strm, x, out); + } else if (!has_header(x.headers, "Content-Length")) { + ret = read_content_without_length(strm, out); + } else { + auto is_invalid_value = false; + auto len = get_header_value_u64( + x.headers, "Content-Length", + (std::numeric_limits::max)(), 0, is_invalid_value); + + if (is_invalid_value) { + ret = false; + } else if (len > payload_max_length) { + exceed_payload_max_length = true; + skip_content_with_length(strm, len); + ret = false; + } else if (len > 0) { + ret = read_content_with_length(strm, len, std::move(progress), out); + } + } + + if (!ret) { + status = exceed_payload_max_length ? StatusCode::PayloadTooLarge_413 + : StatusCode::BadRequest_400; + } + return ret; + }); +} + +ssize_t write_request_line(Stream &strm, const std::string &method, + const std::string &path) { + std::string s = method; + s += " "; + s += path; + s += " HTTP/1.1\r\n"; + return strm.write(s.data(), s.size()); +} + +ssize_t write_response_line(Stream &strm, int status) { + std::string s = "HTTP/1.1 "; + s += std::to_string(status); + s += " "; + s += httplib::status_message(status); + s += "\r\n"; + return strm.write(s.data(), s.size()); +} + +ssize_t write_headers(Stream &strm, const Headers &headers) { + ssize_t write_len = 0; + for (const auto &x : headers) { + std::string s; + s = x.first; + s += ": "; + s += x.second; + s += "\r\n"; + + auto len = strm.write(s.data(), s.size()); + if (len < 0) { return len; } + write_len += len; + } + auto len = strm.write("\r\n"); + if (len < 0) { return len; } + write_len += len; + return write_len; +} + +bool write_data(Stream &strm, const char *d, size_t l) { + size_t offset = 0; + while (offset < l) { + auto length = strm.write(d + offset, l - offset); + if (length < 0) { return false; } + offset += static_cast(length); + } + return true; +} + +template +bool write_content(Stream &strm, const ContentProvider &content_provider, + size_t offset, size_t length, T is_shutting_down, + Error &error) { + size_t end_offset = offset + length; + auto ok = true; + DataSink data_sink; + + data_sink.write = [&](const char *d, size_t l) -> bool { + if (ok) { + if (write_data(strm, d, l)) { + offset += l; + } else { + ok = false; + } + } + return ok; + }; + + data_sink.is_writable = [&]() -> bool { return strm.wait_writable(); }; + + while (offset < end_offset && !is_shutting_down()) { + if (!strm.wait_writable()) { + error = Error::Write; + return false; + } else if (!content_provider(offset, end_offset - offset, data_sink)) { + error = Error::Canceled; + return false; + } else if (!ok) { + error = Error::Write; + return false; + } + } + + error = Error::Success; + return true; +} + +template +bool write_content(Stream &strm, const ContentProvider &content_provider, + size_t offset, size_t length, + const T &is_shutting_down) { + auto error = Error::Success; + return write_content(strm, content_provider, offset, length, is_shutting_down, + error); +} + +template +bool +write_content_without_length(Stream &strm, + const ContentProvider &content_provider, + const T &is_shutting_down) { + size_t offset = 0; + auto data_available = true; + auto ok = true; + DataSink data_sink; + + data_sink.write = [&](const char *d, size_t l) -> bool { + if (ok) { + offset += l; + if (!write_data(strm, d, l)) { ok = false; } + } + return ok; + }; + + data_sink.is_writable = [&]() -> bool { return strm.wait_writable(); }; + + data_sink.done = [&](void) { data_available = false; }; + + while (data_available && !is_shutting_down()) { + if (!strm.wait_writable()) { + return false; + } else if (!content_provider(offset, 0, data_sink)) { + return false; + } else if (!ok) { + return false; + } + } + return true; +} + +template +bool +write_content_chunked(Stream &strm, const ContentProvider &content_provider, + const T &is_shutting_down, U &compressor, Error &error) { + size_t offset = 0; + auto data_available = true; + auto ok = true; + DataSink data_sink; + + data_sink.write = [&](const char *d, size_t l) -> bool { + if (ok) { + data_available = l > 0; + offset += l; + + std::string payload; + if (compressor.compress(d, l, false, + [&](const char *data, size_t data_len) { + payload.append(data, data_len); + return true; + })) { + if (!payload.empty()) { + // Emit chunked response header and footer for each chunk + auto chunk = + from_i_to_hex(payload.size()) + "\r\n" + payload + "\r\n"; + if (!write_data(strm, chunk.data(), chunk.size())) { ok = false; } + } + } else { + ok = false; + } + } + return ok; + }; + + data_sink.is_writable = [&]() -> bool { return strm.wait_writable(); }; + + auto done_with_trailer = [&](const Headers *trailer) { + if (!ok) { return; } + + data_available = false; + + std::string payload; + if (!compressor.compress(nullptr, 0, true, + [&](const char *data, size_t data_len) { + payload.append(data, data_len); + return true; + })) { + ok = false; + return; + } + + if (!payload.empty()) { + // Emit chunked response header and footer for each chunk + auto chunk = from_i_to_hex(payload.size()) + "\r\n" + payload + "\r\n"; + if (!write_data(strm, chunk.data(), chunk.size())) { + ok = false; + return; + } + } + + constexpr const char done_marker[] = "0\r\n"; + if (!write_data(strm, done_marker, str_len(done_marker))) { ok = false; } + + // Trailer + if (trailer) { + for (const auto &kv : *trailer) { + std::string field_line = kv.first + ": " + kv.second + "\r\n"; + if (!write_data(strm, field_line.data(), field_line.size())) { + ok = false; + } + } + } + + constexpr const char crlf[] = "\r\n"; + if (!write_data(strm, crlf, str_len(crlf))) { ok = false; } + }; + + data_sink.done = [&](void) { done_with_trailer(nullptr); }; + + data_sink.done_with_trailer = [&](const Headers &trailer) { + done_with_trailer(&trailer); + }; + + while (data_available && !is_shutting_down()) { + if (!strm.wait_writable()) { + error = Error::Write; + return false; + } else if (!content_provider(offset, 0, data_sink)) { + error = Error::Canceled; + return false; + } else if (!ok) { + error = Error::Write; + return false; + } + } + + error = Error::Success; + return true; +} + +template +bool write_content_chunked(Stream &strm, + const ContentProvider &content_provider, + const T &is_shutting_down, U &compressor) { + auto error = Error::Success; + return write_content_chunked(strm, content_provider, is_shutting_down, + compressor, error); +} + +template +bool redirect(T &cli, Request &req, Response &res, + const std::string &path, const std::string &location, + Error &error) { + Request new_req = req; + new_req.path = path; + new_req.redirect_count_ -= 1; + + if (res.status == StatusCode::SeeOther_303 && + (req.method != "GET" && req.method != "HEAD")) { + new_req.method = "GET"; + new_req.body.clear(); + new_req.headers.clear(); + } + + Response new_res; + + auto ret = cli.send(new_req, new_res, error); + if (ret) { + req = new_req; + res = new_res; + + if (res.location.empty()) { res.location = location; } + } + return ret; +} + +std::string params_to_query_str(const Params ¶ms) { + std::string query; + + for (auto it = params.begin(); it != params.end(); ++it) { + if (it != params.begin()) { query += "&"; } + query += it->first; + query += "="; + query += encode_query_param(it->second); + } + return query; +} + +void parse_query_text(const char *data, std::size_t size, + Params ¶ms) { + std::set cache; + split(data, data + size, '&', [&](const char *b, const char *e) { + std::string kv(b, e); + if (cache.find(kv) != cache.end()) { return; } + cache.insert(std::move(kv)); + + std::string key; + std::string val; + divide(b, static_cast(e - b), '=', + [&](const char *lhs_data, std::size_t lhs_size, const char *rhs_data, + std::size_t rhs_size) { + key.assign(lhs_data, lhs_size); + val.assign(rhs_data, rhs_size); + }); + + if (!key.empty()) { + params.emplace(decode_url(key, true), decode_url(val, true)); + } + }); +} + +void parse_query_text(const std::string &s, Params ¶ms) { + parse_query_text(s.data(), s.size(), params); +} + +bool parse_multipart_boundary(const std::string &content_type, + std::string &boundary) { + auto boundary_keyword = "boundary="; + auto pos = content_type.find(boundary_keyword); + if (pos == std::string::npos) { return false; } + auto end = content_type.find(';', pos); + auto beg = pos + strlen(boundary_keyword); + boundary = trim_double_quotes_copy(content_type.substr(beg, end - beg)); + return !boundary.empty(); +} + +void parse_disposition_params(const std::string &s, Params ¶ms) { + std::set cache; + split(s.data(), s.data() + s.size(), ';', [&](const char *b, const char *e) { + std::string kv(b, e); + if (cache.find(kv) != cache.end()) { return; } + cache.insert(kv); + + std::string key; + std::string val; + split(b, e, '=', [&](const char *b2, const char *e2) { + if (key.empty()) { + key.assign(b2, e2); + } else { + val.assign(b2, e2); + } + }); + + if (!key.empty()) { + params.emplace(trim_double_quotes_copy((key)), + trim_double_quotes_copy((val))); + } + }); +} + +#ifdef CPPHTTPLIB_NO_EXCEPTIONS +bool parse_range_header(const std::string &s, Ranges &ranges) { +#else +bool parse_range_header(const std::string &s, Ranges &ranges) try { +#endif + auto is_valid = [](const std::string &str) { + return std::all_of(str.cbegin(), str.cend(), + [](unsigned char c) { return std::isdigit(c); }); + }; + + if (s.size() > 7 && s.compare(0, 6, "bytes=") == 0) { + const auto pos = static_cast(6); + const auto len = static_cast(s.size() - 6); + auto all_valid_ranges = true; + split(&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) { + if (!all_valid_ranges) { return; } + + const auto it = std::find(b, e, '-'); + if (it == e) { + all_valid_ranges = false; + return; + } + + const auto lhs = std::string(b, it); + const auto rhs = std::string(it + 1, e); + if (!is_valid(lhs) || !is_valid(rhs)) { + all_valid_ranges = false; + return; + } + + const auto first = + static_cast(lhs.empty() ? -1 : std::stoll(lhs)); + const auto last = + static_cast(rhs.empty() ? -1 : std::stoll(rhs)); + if ((first == -1 && last == -1) || + (first != -1 && last != -1 && first > last)) { + all_valid_ranges = false; + return; + } + + ranges.emplace_back(first, last); + }); + return all_valid_ranges && !ranges.empty(); + } + return false; +#ifdef CPPHTTPLIB_NO_EXCEPTIONS +} +#else +} catch (...) { return false; } +#endif + +class MultipartFormDataParser { +public: + MultipartFormDataParser() = default; + + void set_boundary(std::string &&boundary) { + boundary_ = boundary; + dash_boundary_crlf_ = dash_ + boundary_ + crlf_; + crlf_dash_boundary_ = crlf_ + dash_ + boundary_; + } + + bool is_valid() const { return is_valid_; } + + bool parse(const char *buf, size_t n, const ContentReceiver &content_callback, + const MultipartContentHeader &header_callback) { + + buf_append(buf, n); + + while (buf_size() > 0) { + switch (state_) { + case 0: { // Initial boundary + buf_erase(buf_find(dash_boundary_crlf_)); + if (dash_boundary_crlf_.size() > buf_size()) { return true; } + if (!buf_start_with(dash_boundary_crlf_)) { return false; } + buf_erase(dash_boundary_crlf_.size()); + state_ = 1; + break; + } + case 1: { // New entry + clear_file_info(); + state_ = 2; + break; + } + case 2: { // Headers + auto pos = buf_find(crlf_); + if (pos > CPPHTTPLIB_HEADER_MAX_LENGTH) { return false; } + while (pos < buf_size()) { + // Empty line + if (pos == 0) { + if (!header_callback(file_)) { + is_valid_ = false; + return false; + } + buf_erase(crlf_.size()); + state_ = 3; + break; + } + + const auto header = buf_head(pos); + + if (!parse_header(header.data(), header.data() + header.size(), + [&](const std::string &, const std::string &) {})) { + is_valid_ = false; + return false; + } + + constexpr const char header_content_type[] = "Content-Type:"; + + if (start_with_case_ignore(header, header_content_type)) { + file_.content_type = + trim_copy(header.substr(str_len(header_content_type))); + } else { + thread_local const std::regex re_content_disposition( + R"~(^Content-Disposition:\s*form-data;\s*(.*)$)~", + std::regex_constants::icase); + + std::smatch m; + if (std::regex_match(header, m, re_content_disposition)) { + Params params; + parse_disposition_params(m[1], params); + + auto it = params.find("name"); + if (it != params.end()) { + file_.name = it->second; + } else { + is_valid_ = false; + return false; + } + + it = params.find("filename"); + if (it != params.end()) { file_.filename = it->second; } + + it = params.find("filename*"); + if (it != params.end()) { + // Only allow UTF-8 encoding... + thread_local const std::regex re_rfc5987_encoding( + R"~(^UTF-8''(.+?)$)~", std::regex_constants::icase); + + std::smatch m2; + if (std::regex_match(it->second, m2, re_rfc5987_encoding)) { + file_.filename = decode_url(m2[1], false); // override... + } else { + is_valid_ = false; + return false; + } + } + } + } + buf_erase(pos + crlf_.size()); + pos = buf_find(crlf_); + } + if (state_ != 3) { return true; } + break; + } + case 3: { // Body + if (crlf_dash_boundary_.size() > buf_size()) { return true; } + auto pos = buf_find(crlf_dash_boundary_); + if (pos < buf_size()) { + if (!content_callback(buf_data(), pos)) { + is_valid_ = false; + return false; + } + buf_erase(pos + crlf_dash_boundary_.size()); + state_ = 4; + } else { + auto len = buf_size() - crlf_dash_boundary_.size(); + if (len > 0) { + if (!content_callback(buf_data(), len)) { + is_valid_ = false; + return false; + } + buf_erase(len); + } + return true; + } + break; + } + case 4: { // Boundary + if (crlf_.size() > buf_size()) { return true; } + if (buf_start_with(crlf_)) { + buf_erase(crlf_.size()); + state_ = 1; + } else { + if (dash_.size() > buf_size()) { return true; } + if (buf_start_with(dash_)) { + buf_erase(dash_.size()); + is_valid_ = true; + buf_erase(buf_size()); // Remove epilogue + } else { + return true; + } + } + break; + } + } + } + + return true; + } + +private: + void clear_file_info() { + file_.name.clear(); + file_.filename.clear(); + file_.content_type.clear(); + } + + bool start_with_case_ignore(const std::string &a, const char *b) const { + const auto b_len = strlen(b); + if (a.size() < b_len) { return false; } + for (size_t i = 0; i < b_len; i++) { + if (case_ignore::to_lower(a[i]) != case_ignore::to_lower(b[i])) { + return false; + } + } + return true; + } + + const std::string dash_ = "--"; + const std::string crlf_ = "\r\n"; + std::string boundary_; + std::string dash_boundary_crlf_; + std::string crlf_dash_boundary_; + + size_t state_ = 0; + bool is_valid_ = false; + MultipartFormData file_; + + // Buffer + bool start_with(const std::string &a, size_t spos, size_t epos, + const std::string &b) const { + if (epos - spos < b.size()) { return false; } + for (size_t i = 0; i < b.size(); i++) { + if (a[i + spos] != b[i]) { return false; } + } + return true; + } + + size_t buf_size() const { return buf_epos_ - buf_spos_; } + + const char *buf_data() const { return &buf_[buf_spos_]; } + + std::string buf_head(size_t l) const { return buf_.substr(buf_spos_, l); } + + bool buf_start_with(const std::string &s) const { + return start_with(buf_, buf_spos_, buf_epos_, s); + } + + size_t buf_find(const std::string &s) const { + auto c = s.front(); + + size_t off = buf_spos_; + while (off < buf_epos_) { + auto pos = off; + while (true) { + if (pos == buf_epos_) { return buf_size(); } + if (buf_[pos] == c) { break; } + pos++; + } + + auto remaining_size = buf_epos_ - pos; + if (s.size() > remaining_size) { return buf_size(); } + + if (start_with(buf_, pos, buf_epos_, s)) { return pos - buf_spos_; } + + off = pos + 1; + } + + return buf_size(); + } + + void buf_append(const char *data, size_t n) { + auto remaining_size = buf_size(); + if (remaining_size > 0 && buf_spos_ > 0) { + for (size_t i = 0; i < remaining_size; i++) { + buf_[i] = buf_[buf_spos_ + i]; + } + } + buf_spos_ = 0; + buf_epos_ = remaining_size; + + if (remaining_size + n > buf_.size()) { buf_.resize(remaining_size + n); } + + for (size_t i = 0; i < n; i++) { + buf_[buf_epos_ + i] = data[i]; + } + buf_epos_ += n; + } + + void buf_erase(size_t size) { buf_spos_ += size; } + + std::string buf_; + size_t buf_spos_ = 0; + size_t buf_epos_ = 0; +}; + +std::string random_string(size_t length) { + constexpr const char data[] = + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + + thread_local auto engine([]() { + // std::random_device might actually be deterministic on some + // platforms, but due to lack of support in the c++ standard library, + // doing better requires either some ugly hacks or breaking portability. + std::random_device seed_gen; + // Request 128 bits of entropy for initialization + std::seed_seq seed_sequence{seed_gen(), seed_gen(), seed_gen(), seed_gen()}; + return std::mt19937(seed_sequence); + }()); + + std::string result; + for (size_t i = 0; i < length; i++) { + result += data[engine() % (sizeof(data) - 1)]; + } + return result; +} + +std::string make_multipart_data_boundary() { + return "--cpp-httplib-multipart-data-" + detail::random_string(16); +} + +bool is_multipart_boundary_chars_valid(const std::string &boundary) { + auto valid = true; + for (size_t i = 0; i < boundary.size(); i++) { + auto c = boundary[i]; + if (!std::isalnum(c) && c != '-' && c != '_') { + valid = false; + break; + } + } + return valid; +} + +template +std::string +serialize_multipart_formdata_item_begin(const T &item, + const std::string &boundary) { + std::string body = "--" + boundary + "\r\n"; + body += "Content-Disposition: form-data; name=\"" + item.name + "\""; + if (!item.filename.empty()) { + body += "; filename=\"" + item.filename + "\""; + } + body += "\r\n"; + if (!item.content_type.empty()) { + body += "Content-Type: " + item.content_type + "\r\n"; + } + body += "\r\n"; + + return body; +} + +std::string serialize_multipart_formdata_item_end() { return "\r\n"; } + +std::string +serialize_multipart_formdata_finish(const std::string &boundary) { + return "--" + boundary + "--\r\n"; +} + +std::string +serialize_multipart_formdata_get_content_type(const std::string &boundary) { + return "multipart/form-data; boundary=" + boundary; +} + +std::string +serialize_multipart_formdata(const MultipartFormDataItems &items, + const std::string &boundary, bool finish = true) { + std::string body; + + for (const auto &item : items) { + body += serialize_multipart_formdata_item_begin(item, boundary); + body += item.content + serialize_multipart_formdata_item_end(); + } + + if (finish) { body += serialize_multipart_formdata_finish(boundary); } + + return body; +} + +bool range_error(Request &req, Response &res) { + if (!req.ranges.empty() && 200 <= res.status && res.status < 300) { + ssize_t content_len = static_cast( + res.content_length_ ? res.content_length_ : res.body.size()); + + ssize_t prev_first_pos = -1; + ssize_t prev_last_pos = -1; + size_t overwrapping_count = 0; + + // NOTE: The following Range check is based on '14.2. Range' in RFC 9110 + // 'HTTP Semantics' to avoid potential denial-of-service attacks. + // https://www.rfc-editor.org/rfc/rfc9110#section-14.2 + + // Too many ranges + if (req.ranges.size() > CPPHTTPLIB_RANGE_MAX_COUNT) { return true; } + + for (auto &r : req.ranges) { + auto &first_pos = r.first; + auto &last_pos = r.second; + + if (first_pos == -1 && last_pos == -1) { + first_pos = 0; + last_pos = content_len; + } + + if (first_pos == -1) { + first_pos = content_len - last_pos; + last_pos = content_len - 1; + } + + // NOTE: RFC-9110 '14.1.2. Byte Ranges': + // A client can limit the number of bytes requested without knowing the + // size of the selected representation. If the last-pos value is absent, + // or if the value is greater than or equal to the current length of the + // representation data, the byte range is interpreted as the remainder of + // the representation (i.e., the server replaces the value of last-pos + // with a value that is one less than the current length of the selected + // representation). + // https://www.rfc-editor.org/rfc/rfc9110.html#section-14.1.2-6 + if (last_pos == -1 || last_pos >= content_len) { + last_pos = content_len - 1; + } + + // Range must be within content length + if (!(0 <= first_pos && first_pos <= last_pos && + last_pos <= content_len - 1)) { + return true; + } + + // Ranges must be in ascending order + if (first_pos <= prev_first_pos) { return true; } + + // Request must not have more than two overlapping ranges + if (first_pos <= prev_last_pos) { + overwrapping_count++; + if (overwrapping_count > 2) { return true; } + } + + prev_first_pos = (std::max)(prev_first_pos, first_pos); + prev_last_pos = (std::max)(prev_last_pos, last_pos); + } + } + + return false; +} + +std::pair +get_range_offset_and_length(Range r, size_t content_length) { + assert(r.first != -1 && r.second != -1); + assert(0 <= r.first && r.first < static_cast(content_length)); + assert(r.first <= r.second && + r.second < static_cast(content_length)); + (void)(content_length); + return std::make_pair(r.first, static_cast(r.second - r.first) + 1); +} + +std::string make_content_range_header_field( + const std::pair &offset_and_length, size_t content_length) { + auto st = offset_and_length.first; + auto ed = st + offset_and_length.second - 1; + + std::string field = "bytes "; + field += std::to_string(st); + field += "-"; + field += std::to_string(ed); + field += "/"; + field += std::to_string(content_length); + return field; +} + +template +bool process_multipart_ranges_data(const Request &req, + const std::string &boundary, + const std::string &content_type, + size_t content_length, SToken stoken, + CToken ctoken, Content content) { + for (size_t i = 0; i < req.ranges.size(); i++) { + ctoken("--"); + stoken(boundary); + ctoken("\r\n"); + if (!content_type.empty()) { + ctoken("Content-Type: "); + stoken(content_type); + ctoken("\r\n"); + } + + auto offset_and_length = + get_range_offset_and_length(req.ranges[i], content_length); + + ctoken("Content-Range: "); + stoken(make_content_range_header_field(offset_and_length, content_length)); + ctoken("\r\n"); + ctoken("\r\n"); + + if (!content(offset_and_length.first, offset_and_length.second)) { + return false; + } + ctoken("\r\n"); + } + + ctoken("--"); + stoken(boundary); + ctoken("--"); + + return true; +} + +void make_multipart_ranges_data(const Request &req, Response &res, + const std::string &boundary, + const std::string &content_type, + size_t content_length, + std::string &data) { + process_multipart_ranges_data( + req, boundary, content_type, content_length, + [&](const std::string &token) { data += token; }, + [&](const std::string &token) { data += token; }, + [&](size_t offset, size_t length) { + assert(offset + length <= content_length); + data += res.body.substr(offset, length); + return true; + }); +} + +size_t get_multipart_ranges_data_length(const Request &req, + const std::string &boundary, + const std::string &content_type, + size_t content_length) { + size_t data_length = 0; + + process_multipart_ranges_data( + req, boundary, content_type, content_length, + [&](const std::string &token) { data_length += token.size(); }, + [&](const std::string &token) { data_length += token.size(); }, + [&](size_t /*offset*/, size_t length) { + data_length += length; + return true; + }); + + return data_length; +} + +template +bool +write_multipart_ranges_data(Stream &strm, const Request &req, Response &res, + const std::string &boundary, + const std::string &content_type, + size_t content_length, const T &is_shutting_down) { + return process_multipart_ranges_data( + req, boundary, content_type, content_length, + [&](const std::string &token) { strm.write(token); }, + [&](const std::string &token) { strm.write(token); }, + [&](size_t offset, size_t length) { + return write_content(strm, res.content_provider_, offset, length, + is_shutting_down); + }); +} + +bool expect_content(const Request &req) { + if (req.method == "POST" || req.method == "PUT" || req.method == "PATCH" || + req.method == "DELETE") { + return true; + } + if (req.has_header("Content-Length") && + req.get_header_value_u64("Content-Length") > 0) { + return true; + } + if (is_chunked_transfer_encoding(req.headers)) { return true; } + return false; +} + +bool has_crlf(const std::string &s) { + auto p = s.c_str(); + while (*p) { + if (*p == '\r' || *p == '\n') { return true; } + p++; + } + return false; +} + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +std::string message_digest(const std::string &s, const EVP_MD *algo) { + auto context = std::unique_ptr( + EVP_MD_CTX_new(), EVP_MD_CTX_free); + + unsigned int hash_length = 0; + unsigned char hash[EVP_MAX_MD_SIZE]; + + EVP_DigestInit_ex(context.get(), algo, nullptr); + EVP_DigestUpdate(context.get(), s.c_str(), s.size()); + EVP_DigestFinal_ex(context.get(), hash, &hash_length); + + std::stringstream ss; + for (auto i = 0u; i < hash_length; ++i) { + ss << std::hex << std::setw(2) << std::setfill('0') + << static_cast(hash[i]); + } + + return ss.str(); +} + +std::string MD5(const std::string &s) { + return message_digest(s, EVP_md5()); +} + +std::string SHA_256(const std::string &s) { + return message_digest(s, EVP_sha256()); +} + +std::string SHA_512(const std::string &s) { + return message_digest(s, EVP_sha512()); +} + +std::pair make_digest_authentication_header( + const Request &req, const std::map &auth, + size_t cnonce_count, const std::string &cnonce, const std::string &username, + const std::string &password, bool is_proxy = false) { + std::string nc; + { + std::stringstream ss; + ss << std::setfill('0') << std::setw(8) << std::hex << cnonce_count; + nc = ss.str(); + } + + std::string qop; + if (auth.find("qop") != auth.end()) { + qop = auth.at("qop"); + if (qop.find("auth-int") != std::string::npos) { + qop = "auth-int"; + } else if (qop.find("auth") != std::string::npos) { + qop = "auth"; + } else { + qop.clear(); + } + } + + std::string algo = "MD5"; + if (auth.find("algorithm") != auth.end()) { algo = auth.at("algorithm"); } + + std::string response; + { + auto H = algo == "SHA-256" ? detail::SHA_256 + : algo == "SHA-512" ? detail::SHA_512 + : detail::MD5; + + auto A1 = username + ":" + auth.at("realm") + ":" + password; + + auto A2 = req.method + ":" + req.path; + if (qop == "auth-int") { A2 += ":" + H(req.body); } + + if (qop.empty()) { + response = H(H(A1) + ":" + auth.at("nonce") + ":" + H(A2)); + } else { + response = H(H(A1) + ":" + auth.at("nonce") + ":" + nc + ":" + cnonce + + ":" + qop + ":" + H(A2)); + } + } + + auto opaque = (auth.find("opaque") != auth.end()) ? auth.at("opaque") : ""; + + auto field = "Digest username=\"" + username + "\", realm=\"" + + auth.at("realm") + "\", nonce=\"" + auth.at("nonce") + + "\", uri=\"" + req.path + "\", algorithm=" + algo + + (qop.empty() ? ", response=\"" + : ", qop=" + qop + ", nc=" + nc + ", cnonce=\"" + + cnonce + "\", response=\"") + + response + "\"" + + (opaque.empty() ? "" : ", opaque=\"" + opaque + "\""); + + auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; + return std::make_pair(key, field); +} + +bool is_ssl_peer_could_be_closed(SSL *ssl, socket_t sock) { + detail::set_nonblocking(sock, true); + auto se = detail::scope_exit([&]() { detail::set_nonblocking(sock, false); }); + + char buf[1]; + return !SSL_peek(ssl, buf, 1) && + SSL_get_error(ssl, 0) == SSL_ERROR_ZERO_RETURN; +} + +#ifdef _WIN32 +// NOTE: This code came up with the following stackoverflow post: +// https://stackoverflow.com/questions/9507184/can-openssl-on-windows-use-the-system-certificate-store +bool load_system_certs_on_windows(X509_STORE *store) { + auto hStore = CertOpenSystemStoreW((HCRYPTPROV_LEGACY)NULL, L"ROOT"); + if (!hStore) { return false; } + + auto result = false; + PCCERT_CONTEXT pContext = NULL; + while ((pContext = CertEnumCertificatesInStore(hStore, pContext)) != + nullptr) { + auto encoded_cert = + static_cast(pContext->pbCertEncoded); + + auto x509 = d2i_X509(NULL, &encoded_cert, pContext->cbCertEncoded); + if (x509) { + X509_STORE_add_cert(store, x509); + X509_free(x509); + result = true; + } + } + + CertFreeCertificateContext(pContext); + CertCloseStore(hStore, 0); + + return result; +} +#elif defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) && defined(__APPLE__) +#if TARGET_OS_OSX +template +using CFObjectPtr = + std::unique_ptr::type, void (*)(CFTypeRef)>; + +void cf_object_ptr_deleter(CFTypeRef obj) { + if (obj) { CFRelease(obj); } +} + +bool retrieve_certs_from_keychain(CFObjectPtr &certs) { + CFStringRef keys[] = {kSecClass, kSecMatchLimit, kSecReturnRef}; + CFTypeRef values[] = {kSecClassCertificate, kSecMatchLimitAll, + kCFBooleanTrue}; + + CFObjectPtr query( + CFDictionaryCreate(nullptr, reinterpret_cast(keys), values, + sizeof(keys) / sizeof(keys[0]), + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks), + cf_object_ptr_deleter); + + if (!query) { return false; } + + CFTypeRef security_items = nullptr; + if (SecItemCopyMatching(query.get(), &security_items) != errSecSuccess || + CFArrayGetTypeID() != CFGetTypeID(security_items)) { + return false; + } + + certs.reset(reinterpret_cast(security_items)); + return true; +} + +bool retrieve_root_certs_from_keychain(CFObjectPtr &certs) { + CFArrayRef root_security_items = nullptr; + if (SecTrustCopyAnchorCertificates(&root_security_items) != errSecSuccess) { + return false; + } + + certs.reset(root_security_items); + return true; +} + +bool add_certs_to_x509_store(CFArrayRef certs, X509_STORE *store) { + auto result = false; + for (auto i = 0; i < CFArrayGetCount(certs); ++i) { + const auto cert = reinterpret_cast( + CFArrayGetValueAtIndex(certs, i)); + + if (SecCertificateGetTypeID() != CFGetTypeID(cert)) { continue; } + + CFDataRef cert_data = nullptr; + if (SecItemExport(cert, kSecFormatX509Cert, 0, nullptr, &cert_data) != + errSecSuccess) { + continue; + } + + CFObjectPtr cert_data_ptr(cert_data, cf_object_ptr_deleter); + + auto encoded_cert = static_cast( + CFDataGetBytePtr(cert_data_ptr.get())); + + auto x509 = + d2i_X509(NULL, &encoded_cert, CFDataGetLength(cert_data_ptr.get())); + + if (x509) { + X509_STORE_add_cert(store, x509); + X509_free(x509); + result = true; + } + } + + return result; +} + +bool load_system_certs_on_macos(X509_STORE *store) { + auto result = false; + CFObjectPtr certs(nullptr, cf_object_ptr_deleter); + if (retrieve_certs_from_keychain(certs) && certs) { + result = add_certs_to_x509_store(certs.get(), store); + } + + if (retrieve_root_certs_from_keychain(certs) && certs) { + result = add_certs_to_x509_store(certs.get(), store) || result; + } + + return result; +} +#endif // TARGET_OS_OSX +#endif // _WIN32 +#endif // CPPHTTPLIB_OPENSSL_SUPPORT + +#ifdef _WIN32 +class WSInit { +public: + WSInit() { + WSADATA wsaData; + if (WSAStartup(0x0002, &wsaData) == 0) is_valid_ = true; + } + + ~WSInit() { + if (is_valid_) WSACleanup(); + } + + bool is_valid_ = false; +}; + +static WSInit wsinit_; +#endif + +bool parse_www_authenticate(const Response &res, + std::map &auth, + bool is_proxy) { + auto auth_key = is_proxy ? "Proxy-Authenticate" : "WWW-Authenticate"; + if (res.has_header(auth_key)) { + thread_local auto re = + std::regex(R"~((?:(?:,\s*)?(.+?)=(?:"(.*?)"|([^,]*))))~"); + auto s = res.get_header_value(auth_key); + auto pos = s.find(' '); + if (pos != std::string::npos) { + auto type = s.substr(0, pos); + if (type == "Basic") { + return false; + } else if (type == "Digest") { + s = s.substr(pos + 1); + auto beg = std::sregex_iterator(s.begin(), s.end(), re); + for (auto i = beg; i != std::sregex_iterator(); ++i) { + const auto &m = *i; + auto key = s.substr(static_cast(m.position(1)), + static_cast(m.length(1))); + auto val = m.length(2) > 0 + ? s.substr(static_cast(m.position(2)), + static_cast(m.length(2))) + : s.substr(static_cast(m.position(3)), + static_cast(m.length(3))); + auth[key] = val; + } + return true; + } + } + } + return false; +} + +class ContentProviderAdapter { +public: + explicit ContentProviderAdapter( + ContentProviderWithoutLength &&content_provider) + : content_provider_(content_provider) {} + + bool operator()(size_t offset, size_t, DataSink &sink) { + return content_provider_(offset, sink); + } + +private: + ContentProviderWithoutLength content_provider_; +}; + +} // namespace detail + +std::string hosted_at(const std::string &hostname) { + std::vector addrs; + hosted_at(hostname, addrs); + if (addrs.empty()) { return std::string(); } + return addrs[0]; +} + +void hosted_at(const std::string &hostname, + std::vector &addrs) { + struct addrinfo hints; + struct addrinfo *result; + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = 0; + + if (getaddrinfo(hostname.c_str(), nullptr, &hints, &result)) { +#if defined __linux__ && !defined __ANDROID__ + res_init(); +#endif + return; + } + auto se = detail::scope_exit([&] { freeaddrinfo(result); }); + + for (auto rp = result; rp; rp = rp->ai_next) { + const auto &addr = + *reinterpret_cast(rp->ai_addr); + std::string ip; + auto dummy = -1; + if (detail::get_ip_and_port(addr, sizeof(struct sockaddr_storage), ip, + dummy)) { + addrs.push_back(ip); + } + } +} + +std::string append_query_params(const std::string &path, + const Params ¶ms) { + std::string path_with_query = path; + thread_local const std::regex re("[^?]+\\?.*"); + auto delm = std::regex_match(path, re) ? '&' : '?'; + path_with_query += delm + detail::params_to_query_str(params); + return path_with_query; +} + +// Header utilities +std::pair +make_range_header(const Ranges &ranges) { + std::string field = "bytes="; + auto i = 0; + for (const auto &r : ranges) { + if (i != 0) { field += ", "; } + if (r.first != -1) { field += std::to_string(r.first); } + field += '-'; + if (r.second != -1) { field += std::to_string(r.second); } + i++; + } + return std::make_pair("Range", std::move(field)); +} + +std::pair +make_basic_authentication_header(const std::string &username, + const std::string &password, bool is_proxy) { + auto field = "Basic " + detail::base64_encode(username + ":" + password); + auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; + return std::make_pair(key, std::move(field)); +} + +std::pair +make_bearer_token_authentication_header(const std::string &token, + bool is_proxy = false) { + auto field = "Bearer " + token; + auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; + return std::make_pair(key, std::move(field)); +} + +// Request implementation +bool Request::has_header(const std::string &key) const { + return detail::has_header(headers, key); +} + +std::string Request::get_header_value(const std::string &key, + const char *def, size_t id) const { + return detail::get_header_value(headers, key, def, id); +} + +size_t Request::get_header_value_count(const std::string &key) const { + auto r = headers.equal_range(key); + return static_cast(std::distance(r.first, r.second)); +} + +void Request::set_header(const std::string &key, + const std::string &val) { + if (detail::fields::is_field_name(key) && + detail::fields::is_field_value(val)) { + headers.emplace(key, val); + } +} + +bool Request::has_param(const std::string &key) const { + return params.find(key) != params.end(); +} + +std::string Request::get_param_value(const std::string &key, + size_t id) const { + auto rng = params.equal_range(key); + auto it = rng.first; + std::advance(it, static_cast(id)); + if (it != rng.second) { return it->second; } + return std::string(); +} + +size_t Request::get_param_value_count(const std::string &key) const { + auto r = params.equal_range(key); + return static_cast(std::distance(r.first, r.second)); +} + +bool Request::is_multipart_form_data() const { + const auto &content_type = get_header_value("Content-Type"); + return !content_type.rfind("multipart/form-data", 0); +} + +bool Request::has_file(const std::string &key) const { + return files.find(key) != files.end(); +} + +MultipartFormData Request::get_file_value(const std::string &key) const { + auto it = files.find(key); + if (it != files.end()) { return it->second; } + return MultipartFormData(); +} + +std::vector +Request::get_file_values(const std::string &key) const { + std::vector values; + auto rng = files.equal_range(key); + for (auto it = rng.first; it != rng.second; it++) { + values.push_back(it->second); + } + return values; +} + +// Response implementation +bool Response::has_header(const std::string &key) const { + return headers.find(key) != headers.end(); +} + +std::string Response::get_header_value(const std::string &key, + const char *def, + size_t id) const { + return detail::get_header_value(headers, key, def, id); +} + +size_t Response::get_header_value_count(const std::string &key) const { + auto r = headers.equal_range(key); + return static_cast(std::distance(r.first, r.second)); +} + +void Response::set_header(const std::string &key, + const std::string &val) { + if (detail::fields::is_field_name(key) && + detail::fields::is_field_value(val)) { + headers.emplace(key, val); + } +} + +void Response::set_redirect(const std::string &url, int stat) { + if (detail::fields::is_field_value(url)) { + set_header("Location", url); + if (300 <= stat && stat < 400) { + this->status = stat; + } else { + this->status = StatusCode::Found_302; + } + } +} + +void Response::set_content(const char *s, size_t n, + const std::string &content_type) { + body.assign(s, n); + + auto rng = headers.equal_range("Content-Type"); + headers.erase(rng.first, rng.second); + set_header("Content-Type", content_type); +} + +void Response::set_content(const std::string &s, + const std::string &content_type) { + set_content(s.data(), s.size(), content_type); +} + +void Response::set_content(std::string &&s, + const std::string &content_type) { + body = std::move(s); + + auto rng = headers.equal_range("Content-Type"); + headers.erase(rng.first, rng.second); + set_header("Content-Type", content_type); +} + +void Response::set_content_provider( + size_t in_length, const std::string &content_type, ContentProvider provider, + ContentProviderResourceReleaser resource_releaser) { + set_header("Content-Type", content_type); + content_length_ = in_length; + if (in_length > 0) { content_provider_ = std::move(provider); } + content_provider_resource_releaser_ = std::move(resource_releaser); + is_chunked_content_provider_ = false; +} + +void Response::set_content_provider( + const std::string &content_type, ContentProviderWithoutLength provider, + ContentProviderResourceReleaser resource_releaser) { + set_header("Content-Type", content_type); + content_length_ = 0; + content_provider_ = detail::ContentProviderAdapter(std::move(provider)); + content_provider_resource_releaser_ = std::move(resource_releaser); + is_chunked_content_provider_ = false; +} + +void Response::set_chunked_content_provider( + const std::string &content_type, ContentProviderWithoutLength provider, + ContentProviderResourceReleaser resource_releaser) { + set_header("Content-Type", content_type); + content_length_ = 0; + content_provider_ = detail::ContentProviderAdapter(std::move(provider)); + content_provider_resource_releaser_ = std::move(resource_releaser); + is_chunked_content_provider_ = true; +} + +void Response::set_file_content(const std::string &path, + const std::string &content_type) { + file_content_path_ = path; + file_content_content_type_ = content_type; +} + +void Response::set_file_content(const std::string &path) { + file_content_path_ = path; +} + +// Result implementation +bool Result::has_request_header(const std::string &key) const { + return request_headers_.find(key) != request_headers_.end(); +} + +std::string Result::get_request_header_value(const std::string &key, + const char *def, + size_t id) const { + return detail::get_header_value(request_headers_, key, def, id); +} + +size_t +Result::get_request_header_value_count(const std::string &key) const { + auto r = request_headers_.equal_range(key); + return static_cast(std::distance(r.first, r.second)); +} + +// Stream implementation +ssize_t Stream::write(const char *ptr) { + return write(ptr, strlen(ptr)); +} + +ssize_t Stream::write(const std::string &s) { + return write(s.data(), s.size()); +} + +namespace detail { + +void calc_actual_timeout(time_t max_timeout_msec, time_t duration_msec, + time_t timeout_sec, time_t timeout_usec, + time_t &actual_timeout_sec, + time_t &actual_timeout_usec) { + auto timeout_msec = (timeout_sec * 1000) + (timeout_usec / 1000); + + auto actual_timeout_msec = + (std::min)(max_timeout_msec - duration_msec, timeout_msec); + + if (actual_timeout_msec < 0) { actual_timeout_msec = 0; } + + actual_timeout_sec = actual_timeout_msec / 1000; + actual_timeout_usec = (actual_timeout_msec % 1000) * 1000; +} + +// Socket stream implementation +SocketStream::SocketStream( + socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, + time_t write_timeout_sec, time_t write_timeout_usec, + time_t max_timeout_msec, + std::chrono::time_point start_time) + : sock_(sock), read_timeout_sec_(read_timeout_sec), + read_timeout_usec_(read_timeout_usec), + write_timeout_sec_(write_timeout_sec), + write_timeout_usec_(write_timeout_usec), + max_timeout_msec_(max_timeout_msec), start_time_(start_time), + read_buff_(read_buff_size_, 0) {} + +SocketStream::~SocketStream() = default; + +bool SocketStream::is_readable() const { + return read_buff_off_ < read_buff_content_size_; +} + +bool SocketStream::wait_readable() const { + if (max_timeout_msec_ <= 0) { + return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; + } + + time_t read_timeout_sec; + time_t read_timeout_usec; + calc_actual_timeout(max_timeout_msec_, duration(), read_timeout_sec_, + read_timeout_usec_, read_timeout_sec, read_timeout_usec); + + return select_read(sock_, read_timeout_sec, read_timeout_usec) > 0; +} + +bool SocketStream::wait_writable() const { + return select_write(sock_, write_timeout_sec_, write_timeout_usec_) > 0 && + is_socket_alive(sock_); +} + +ssize_t SocketStream::read(char *ptr, size_t size) { +#ifdef _WIN32 + size = + (std::min)(size, static_cast((std::numeric_limits::max)())); +#else + size = (std::min)(size, + static_cast((std::numeric_limits::max)())); +#endif + + if (read_buff_off_ < read_buff_content_size_) { + auto remaining_size = read_buff_content_size_ - read_buff_off_; + if (size <= remaining_size) { + memcpy(ptr, read_buff_.data() + read_buff_off_, size); + read_buff_off_ += size; + return static_cast(size); + } else { + memcpy(ptr, read_buff_.data() + read_buff_off_, remaining_size); + read_buff_off_ += remaining_size; + return static_cast(remaining_size); + } + } + + if (!wait_readable()) { return -1; } + + read_buff_off_ = 0; + read_buff_content_size_ = 0; + + if (size < read_buff_size_) { + auto n = read_socket(sock_, read_buff_.data(), read_buff_size_, + CPPHTTPLIB_RECV_FLAGS); + if (n <= 0) { + return n; + } else if (n <= static_cast(size)) { + memcpy(ptr, read_buff_.data(), static_cast(n)); + return n; + } else { + memcpy(ptr, read_buff_.data(), size); + read_buff_off_ = size; + read_buff_content_size_ = static_cast(n); + return static_cast(size); + } + } else { + return read_socket(sock_, ptr, size, CPPHTTPLIB_RECV_FLAGS); + } +} + +ssize_t SocketStream::write(const char *ptr, size_t size) { + if (!wait_writable()) { return -1; } + +#if defined(_WIN32) && !defined(_WIN64) + size = + (std::min)(size, static_cast((std::numeric_limits::max)())); +#endif + + return send_socket(sock_, ptr, size, CPPHTTPLIB_SEND_FLAGS); +} + +void SocketStream::get_remote_ip_and_port(std::string &ip, + int &port) const { + return detail::get_remote_ip_and_port(sock_, ip, port); +} + +void SocketStream::get_local_ip_and_port(std::string &ip, + int &port) const { + return detail::get_local_ip_and_port(sock_, ip, port); +} + +socket_t SocketStream::socket() const { return sock_; } + +time_t SocketStream::duration() const { + return std::chrono::duration_cast( + std::chrono::steady_clock::now() - start_time_) + .count(); +} + +// Buffer stream implementation +bool BufferStream::is_readable() const { return true; } + +bool BufferStream::wait_readable() const { return true; } + +bool BufferStream::wait_writable() const { return true; } + +ssize_t BufferStream::read(char *ptr, size_t size) { +#if defined(_MSC_VER) && _MSC_VER < 1910 + auto len_read = buffer._Copy_s(ptr, size, size, position); +#else + auto len_read = buffer.copy(ptr, size, position); +#endif + position += static_cast(len_read); + return static_cast(len_read); +} + +ssize_t BufferStream::write(const char *ptr, size_t size) { + buffer.append(ptr, size); + return static_cast(size); +} + +void BufferStream::get_remote_ip_and_port(std::string & /*ip*/, + int & /*port*/) const {} + +void BufferStream::get_local_ip_and_port(std::string & /*ip*/, + int & /*port*/) const {} + +socket_t BufferStream::socket() const { return 0; } + +time_t BufferStream::duration() const { return 0; } + +const std::string &BufferStream::get_buffer() const { return buffer; } + +PathParamsMatcher::PathParamsMatcher(const std::string &pattern) { + constexpr const char marker[] = "/:"; + + // One past the last ending position of a path param substring + std::size_t last_param_end = 0; + +#ifndef CPPHTTPLIB_NO_EXCEPTIONS + // Needed to ensure that parameter names are unique during matcher + // construction + // If exceptions are disabled, only last duplicate path + // parameter will be set + std::unordered_set param_name_set; +#endif + + while (true) { + const auto marker_pos = pattern.find( + marker, last_param_end == 0 ? last_param_end : last_param_end - 1); + if (marker_pos == std::string::npos) { break; } + + static_fragments_.push_back( + pattern.substr(last_param_end, marker_pos - last_param_end + 1)); + + const auto param_name_start = marker_pos + str_len(marker); + + auto sep_pos = pattern.find(separator, param_name_start); + if (sep_pos == std::string::npos) { sep_pos = pattern.length(); } + + auto param_name = + pattern.substr(param_name_start, sep_pos - param_name_start); + +#ifndef CPPHTTPLIB_NO_EXCEPTIONS + if (param_name_set.find(param_name) != param_name_set.cend()) { + std::string msg = "Encountered path parameter '" + param_name + + "' multiple times in route pattern '" + pattern + "'."; + throw std::invalid_argument(msg); + } +#endif + + param_names_.push_back(std::move(param_name)); + + last_param_end = sep_pos + 1; + } + + if (last_param_end < pattern.length()) { + static_fragments_.push_back(pattern.substr(last_param_end)); + } +} + +bool PathParamsMatcher::match(Request &request) const { + request.matches = std::smatch(); + request.path_params.clear(); + request.path_params.reserve(param_names_.size()); + + // One past the position at which the path matched the pattern last time + std::size_t starting_pos = 0; + for (size_t i = 0; i < static_fragments_.size(); ++i) { + const auto &fragment = static_fragments_[i]; + + if (starting_pos + fragment.length() > request.path.length()) { + return false; + } + + // Avoid unnecessary allocation by using strncmp instead of substr + + // comparison + if (std::strncmp(request.path.c_str() + starting_pos, fragment.c_str(), + fragment.length()) != 0) { + return false; + } + + starting_pos += fragment.length(); + + // Should only happen when we have a static fragment after a param + // Example: '/users/:id/subscriptions' + // The 'subscriptions' fragment here does not have a corresponding param + if (i >= param_names_.size()) { continue; } + + auto sep_pos = request.path.find(separator, starting_pos); + if (sep_pos == std::string::npos) { sep_pos = request.path.length(); } + + const auto ¶m_name = param_names_[i]; + + request.path_params.emplace( + param_name, request.path.substr(starting_pos, sep_pos - starting_pos)); + + // Mark everything up to '/' as matched + starting_pos = sep_pos + 1; + } + // Returns false if the path is longer than the pattern + return starting_pos >= request.path.length(); +} + +bool RegexMatcher::match(Request &request) const { + request.path_params.clear(); + return std::regex_match(request.path, request.matches, regex_); +} + +} // namespace detail + +// HTTP server implementation +Server::Server() + : new_task_queue( + [] { return new ThreadPool(CPPHTTPLIB_THREAD_POOL_COUNT); }) { +#ifndef _WIN32 + signal(SIGPIPE, SIG_IGN); +#endif +} + +Server::~Server() = default; + +std::unique_ptr +Server::make_matcher(const std::string &pattern) { + if (pattern.find("/:") != std::string::npos) { + return detail::make_unique(pattern); + } else { + return detail::make_unique(pattern); + } +} + +Server &Server::Get(const std::string &pattern, Handler handler) { + get_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); + return *this; +} + +Server &Server::Post(const std::string &pattern, Handler handler) { + post_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); + return *this; +} + +Server &Server::Post(const std::string &pattern, + HandlerWithContentReader handler) { + post_handlers_for_content_reader_.emplace_back(make_matcher(pattern), + std::move(handler)); + return *this; +} + +Server &Server::Put(const std::string &pattern, Handler handler) { + put_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); + return *this; +} + +Server &Server::Put(const std::string &pattern, + HandlerWithContentReader handler) { + put_handlers_for_content_reader_.emplace_back(make_matcher(pattern), + std::move(handler)); + return *this; +} + +Server &Server::Patch(const std::string &pattern, Handler handler) { + patch_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); + return *this; +} + +Server &Server::Patch(const std::string &pattern, + HandlerWithContentReader handler) { + patch_handlers_for_content_reader_.emplace_back(make_matcher(pattern), + std::move(handler)); + return *this; +} + +Server &Server::Delete(const std::string &pattern, Handler handler) { + delete_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); + return *this; +} + +Server &Server::Delete(const std::string &pattern, + HandlerWithContentReader handler) { + delete_handlers_for_content_reader_.emplace_back(make_matcher(pattern), + std::move(handler)); + return *this; +} + +Server &Server::Options(const std::string &pattern, Handler handler) { + options_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); + return *this; +} + +bool Server::set_base_dir(const std::string &dir, + const std::string &mount_point) { + return set_mount_point(mount_point, dir); +} + +bool Server::set_mount_point(const std::string &mount_point, + const std::string &dir, Headers headers) { + detail::FileStat stat(dir); + if (stat.is_dir()) { + std::string mnt = !mount_point.empty() ? mount_point : "/"; + if (!mnt.empty() && mnt[0] == '/') { + base_dirs_.push_back({mnt, dir, std::move(headers)}); + return true; + } + } + return false; +} + +bool Server::remove_mount_point(const std::string &mount_point) { + for (auto it = base_dirs_.begin(); it != base_dirs_.end(); ++it) { + if (it->mount_point == mount_point) { + base_dirs_.erase(it); + return true; + } + } + return false; +} + +Server & +Server::set_file_extension_and_mimetype_mapping(const std::string &ext, + const std::string &mime) { + file_extension_and_mimetype_map_[ext] = mime; + return *this; +} + +Server &Server::set_default_file_mimetype(const std::string &mime) { + default_file_mimetype_ = mime; + return *this; +} + +Server &Server::set_file_request_handler(Handler handler) { + file_request_handler_ = std::move(handler); + return *this; +} + +Server &Server::set_error_handler_core(HandlerWithResponse handler, + std::true_type) { + error_handler_ = std::move(handler); + return *this; +} + +Server &Server::set_error_handler_core(Handler handler, + std::false_type) { + error_handler_ = [handler](const Request &req, Response &res) { + handler(req, res); + return HandlerResponse::Handled; + }; + return *this; +} + +Server &Server::set_exception_handler(ExceptionHandler handler) { + exception_handler_ = std::move(handler); + return *this; +} + +Server &Server::set_pre_routing_handler(HandlerWithResponse handler) { + pre_routing_handler_ = std::move(handler); + return *this; +} + +Server &Server::set_post_routing_handler(Handler handler) { + post_routing_handler_ = std::move(handler); + return *this; +} + +Server &Server::set_logger(Logger logger) { + logger_ = std::move(logger); + return *this; +} + +Server & +Server::set_expect_100_continue_handler(Expect100ContinueHandler handler) { + expect_100_continue_handler_ = std::move(handler); + return *this; +} + +Server &Server::set_address_family(int family) { + address_family_ = family; + return *this; +} + +Server &Server::set_tcp_nodelay(bool on) { + tcp_nodelay_ = on; + return *this; +} + +Server &Server::set_ipv6_v6only(bool on) { + ipv6_v6only_ = on; + return *this; +} + +Server &Server::set_socket_options(SocketOptions socket_options) { + socket_options_ = std::move(socket_options); + return *this; +} + +Server &Server::set_default_headers(Headers headers) { + default_headers_ = std::move(headers); + return *this; +} + +Server &Server::set_header_writer( + std::function const &writer) { + header_writer_ = writer; + return *this; +} + +Server &Server::set_keep_alive_max_count(size_t count) { + keep_alive_max_count_ = count; + return *this; +} + +Server &Server::set_keep_alive_timeout(time_t sec) { + keep_alive_timeout_sec_ = sec; + return *this; +} + +Server &Server::set_read_timeout(time_t sec, time_t usec) { + read_timeout_sec_ = sec; + read_timeout_usec_ = usec; + return *this; +} + +Server &Server::set_write_timeout(time_t sec, time_t usec) { + write_timeout_sec_ = sec; + write_timeout_usec_ = usec; + return *this; +} + +Server &Server::set_idle_interval(time_t sec, time_t usec) { + idle_interval_sec_ = sec; + idle_interval_usec_ = usec; + return *this; +} + +Server &Server::set_payload_max_length(size_t length) { + payload_max_length_ = length; + return *this; +} + +bool Server::bind_to_port(const std::string &host, int port, + int socket_flags) { + auto ret = bind_internal(host, port, socket_flags); + if (ret == -1) { is_decommissioned = true; } + return ret >= 0; +} +int Server::bind_to_any_port(const std::string &host, int socket_flags) { + auto ret = bind_internal(host, 0, socket_flags); + if (ret == -1) { is_decommissioned = true; } + return ret; +} + +bool Server::listen_after_bind() { return listen_internal(); } + +bool Server::listen(const std::string &host, int port, + int socket_flags) { + return bind_to_port(host, port, socket_flags) && listen_internal(); +} + +bool Server::is_running() const { return is_running_; } + +void Server::wait_until_ready() const { + while (!is_running_ && !is_decommissioned) { + std::this_thread::sleep_for(std::chrono::milliseconds{1}); + } +} + +void Server::stop() { + if (is_running_) { + assert(svr_sock_ != INVALID_SOCKET); + std::atomic sock(svr_sock_.exchange(INVALID_SOCKET)); + detail::shutdown_socket(sock); + detail::close_socket(sock); + } + is_decommissioned = false; +} + +void Server::decommission() { is_decommissioned = true; } + +bool Server::parse_request_line(const char *s, Request &req) const { + auto len = strlen(s); + if (len < 2 || s[len - 2] != '\r' || s[len - 1] != '\n') { return false; } + len -= 2; + + { + size_t count = 0; + + detail::split(s, s + len, ' ', [&](const char *b, const char *e) { + switch (count) { + case 0: req.method = std::string(b, e); break; + case 1: req.target = std::string(b, e); break; + case 2: req.version = std::string(b, e); break; + default: break; + } + count++; + }); + + if (count != 3) { return false; } + } + + thread_local const std::set methods{ + "GET", "HEAD", "POST", "PUT", "DELETE", + "CONNECT", "OPTIONS", "TRACE", "PATCH", "PRI"}; + + if (methods.find(req.method) == methods.end()) { return false; } + + if (req.version != "HTTP/1.1" && req.version != "HTTP/1.0") { return false; } + + { + // Skip URL fragment + for (size_t i = 0; i < req.target.size(); i++) { + if (req.target[i] == '#') { + req.target.erase(i); + break; + } + } + + detail::divide(req.target, '?', + [&](const char *lhs_data, std::size_t lhs_size, + const char *rhs_data, std::size_t rhs_size) { + req.path = detail::decode_url( + std::string(lhs_data, lhs_size), false); + detail::parse_query_text(rhs_data, rhs_size, req.params); + }); + } + + return true; +} + +bool Server::write_response(Stream &strm, bool close_connection, + Request &req, Response &res) { + // NOTE: `req.ranges` should be empty, otherwise it will be applied + // incorrectly to the error content. + req.ranges.clear(); + return write_response_core(strm, close_connection, req, res, false); +} + +bool Server::write_response_with_content(Stream &strm, + bool close_connection, + const Request &req, + Response &res) { + return write_response_core(strm, close_connection, req, res, true); +} + +bool Server::write_response_core(Stream &strm, bool close_connection, + const Request &req, Response &res, + bool need_apply_ranges) { + assert(res.status != -1); + + if (400 <= res.status && error_handler_ && + error_handler_(req, res) == HandlerResponse::Handled) { + need_apply_ranges = true; + } + + std::string content_type; + std::string boundary; + if (need_apply_ranges) { apply_ranges(req, res, content_type, boundary); } + + // Prepare additional headers + if (close_connection || req.get_header_value("Connection") == "close") { + res.set_header("Connection", "close"); + } else { + std::string s = "timeout="; + s += std::to_string(keep_alive_timeout_sec_); + s += ", max="; + s += std::to_string(keep_alive_max_count_); + res.set_header("Keep-Alive", s); + } + + if ((!res.body.empty() || res.content_length_ > 0 || res.content_provider_) && + !res.has_header("Content-Type")) { + res.set_header("Content-Type", "text/plain"); + } + + if (res.body.empty() && !res.content_length_ && !res.content_provider_ && + !res.has_header("Content-Length")) { + res.set_header("Content-Length", "0"); + } + + if (req.method == "HEAD" && !res.has_header("Accept-Ranges")) { + res.set_header("Accept-Ranges", "bytes"); + } + + if (post_routing_handler_) { post_routing_handler_(req, res); } + + // Response line and headers + { + detail::BufferStream bstrm; + if (!detail::write_response_line(bstrm, res.status)) { return false; } + if (!header_writer_(bstrm, res.headers)) { return false; } + + // Flush buffer + auto &data = bstrm.get_buffer(); + detail::write_data(strm, data.data(), data.size()); + } + + // Body + auto ret = true; + if (req.method != "HEAD") { + if (!res.body.empty()) { + if (!detail::write_data(strm, res.body.data(), res.body.size())) { + ret = false; + } + } else if (res.content_provider_) { + if (write_content_with_provider(strm, req, res, boundary, content_type)) { + res.content_provider_success_ = true; + } else { + ret = false; + } + } + } + + // Log + if (logger_) { logger_(req, res); } + + return ret; +} + +bool +Server::write_content_with_provider(Stream &strm, const Request &req, + Response &res, const std::string &boundary, + const std::string &content_type) { + auto is_shutting_down = [this]() { + return this->svr_sock_ == INVALID_SOCKET; + }; + + if (res.content_length_ > 0) { + if (req.ranges.empty()) { + return detail::write_content(strm, res.content_provider_, 0, + res.content_length_, is_shutting_down); + } else if (req.ranges.size() == 1) { + auto offset_and_length = detail::get_range_offset_and_length( + req.ranges[0], res.content_length_); + + return detail::write_content(strm, res.content_provider_, + offset_and_length.first, + offset_and_length.second, is_shutting_down); + } else { + return detail::write_multipart_ranges_data( + strm, req, res, boundary, content_type, res.content_length_, + is_shutting_down); + } + } else { + if (res.is_chunked_content_provider_) { + auto type = detail::encoding_type(req, res); + + std::unique_ptr compressor; + if (type == detail::EncodingType::Gzip) { +#ifdef CPPHTTPLIB_ZLIB_SUPPORT + compressor = detail::make_unique(); +#endif + } else if (type == detail::EncodingType::Brotli) { +#ifdef CPPHTTPLIB_BROTLI_SUPPORT + compressor = detail::make_unique(); +#endif + } else if (type == detail::EncodingType::Zstd) { +#ifdef CPPHTTPLIB_ZSTD_SUPPORT + compressor = detail::make_unique(); +#endif + } else { + compressor = detail::make_unique(); + } + assert(compressor != nullptr); + + return detail::write_content_chunked(strm, res.content_provider_, + is_shutting_down, *compressor); + } else { + return detail::write_content_without_length(strm, res.content_provider_, + is_shutting_down); + } + } +} + +bool Server::read_content(Stream &strm, Request &req, Response &res) { + MultipartFormDataMap::iterator cur; + auto file_count = 0; + if (read_content_core( + strm, req, res, + // Regular + [&](const char *buf, size_t n) { + if (req.body.size() + n > req.body.max_size()) { return false; } + req.body.append(buf, n); + return true; + }, + // Multipart + [&](const MultipartFormData &file) { + if (file_count++ == CPPHTTPLIB_MULTIPART_FORM_DATA_FILE_MAX_COUNT) { + return false; + } + cur = req.files.emplace(file.name, file); + return true; + }, + [&](const char *buf, size_t n) { + auto &content = cur->second.content; + if (content.size() + n > content.max_size()) { return false; } + content.append(buf, n); + return true; + })) { + const auto &content_type = req.get_header_value("Content-Type"); + if (!content_type.find("application/x-www-form-urlencoded")) { + if (req.body.size() > CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH) { + res.status = StatusCode::PayloadTooLarge_413; // NOTE: should be 414? + return false; + } + detail::parse_query_text(req.body, req.params); + } + return true; + } + return false; +} + +bool Server::read_content_with_content_receiver( + Stream &strm, Request &req, Response &res, ContentReceiver receiver, + MultipartContentHeader multipart_header, + ContentReceiver multipart_receiver) { + return read_content_core(strm, req, res, std::move(receiver), + std::move(multipart_header), + std::move(multipart_receiver)); +} + +bool +Server::read_content_core(Stream &strm, Request &req, Response &res, + ContentReceiver receiver, + MultipartContentHeader multipart_header, + ContentReceiver multipart_receiver) const { + detail::MultipartFormDataParser multipart_form_data_parser; + ContentReceiverWithProgress out; + + if (req.is_multipart_form_data()) { + const auto &content_type = req.get_header_value("Content-Type"); + std::string boundary; + if (!detail::parse_multipart_boundary(content_type, boundary)) { + res.status = StatusCode::BadRequest_400; + return false; + } + + multipart_form_data_parser.set_boundary(std::move(boundary)); + out = [&](const char *buf, size_t n, uint64_t /*off*/, uint64_t /*len*/) { + /* For debug + size_t pos = 0; + while (pos < n) { + auto read_size = (std::min)(1, n - pos); + auto ret = multipart_form_data_parser.parse( + buf + pos, read_size, multipart_receiver, multipart_header); + if (!ret) { return false; } + pos += read_size; + } + return true; + */ + return multipart_form_data_parser.parse(buf, n, multipart_receiver, + multipart_header); + }; + } else { + out = [receiver](const char *buf, size_t n, uint64_t /*off*/, + uint64_t /*len*/) { return receiver(buf, n); }; + } + + if (req.method == "DELETE" && !req.has_header("Content-Length")) { + return true; + } + + if (!detail::read_content(strm, req, payload_max_length_, res.status, nullptr, + out, true)) { + return false; + } + + if (req.is_multipart_form_data()) { + if (!multipart_form_data_parser.is_valid()) { + res.status = StatusCode::BadRequest_400; + return false; + } + } + + return true; +} + +bool Server::handle_file_request(const Request &req, Response &res, + bool head) { + for (const auto &entry : base_dirs_) { + // Prefix match + if (!req.path.compare(0, entry.mount_point.size(), entry.mount_point)) { + std::string sub_path = "/" + req.path.substr(entry.mount_point.size()); + if (detail::is_valid_path(sub_path)) { + auto path = entry.base_dir + sub_path; + if (path.back() == '/') { path += "index.html"; } + + detail::FileStat stat(path); + + if (stat.is_dir()) { + res.set_redirect(sub_path + "/", StatusCode::MovedPermanently_301); + return true; + } + + if (stat.is_file()) { + for (const auto &kv : entry.headers) { + res.set_header(kv.first, kv.second); + } + + auto mm = std::make_shared(path.c_str()); + if (!mm->is_open()) { return false; } + + res.set_content_provider( + mm->size(), + detail::find_content_type(path, file_extension_and_mimetype_map_, + default_file_mimetype_), + [mm](size_t offset, size_t length, DataSink &sink) -> bool { + sink.write(mm->data() + offset, length); + return true; + }); + + if (!head && file_request_handler_) { + file_request_handler_(req, res); + } + + return true; + } + } + } + } + return false; +} + +socket_t +Server::create_server_socket(const std::string &host, int port, + int socket_flags, + SocketOptions socket_options) const { + return detail::create_socket( + host, std::string(), port, address_family_, socket_flags, tcp_nodelay_, + ipv6_v6only_, std::move(socket_options), + [](socket_t sock, struct addrinfo &ai, bool & /*quit*/) -> bool { + if (::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { + return false; + } + if (::listen(sock, CPPHTTPLIB_LISTEN_BACKLOG)) { return false; } + return true; + }); +} + +int Server::bind_internal(const std::string &host, int port, + int socket_flags) { + if (is_decommissioned) { return -1; } + + if (!is_valid()) { return -1; } + + svr_sock_ = create_server_socket(host, port, socket_flags, socket_options_); + if (svr_sock_ == INVALID_SOCKET) { return -1; } + + if (port == 0) { + struct sockaddr_storage addr; + socklen_t addr_len = sizeof(addr); + if (getsockname(svr_sock_, reinterpret_cast(&addr), + &addr_len) == -1) { + return -1; + } + if (addr.ss_family == AF_INET) { + return ntohs(reinterpret_cast(&addr)->sin_port); + } else if (addr.ss_family == AF_INET6) { + return ntohs(reinterpret_cast(&addr)->sin6_port); + } else { + return -1; + } + } else { + return port; + } +} + +bool Server::listen_internal() { + if (is_decommissioned) { return false; } + + auto ret = true; + is_running_ = true; + auto se = detail::scope_exit([&]() { is_running_ = false; }); + + { + std::unique_ptr task_queue(new_task_queue()); + + while (svr_sock_ != INVALID_SOCKET) { +#ifndef _WIN32 + if (idle_interval_sec_ > 0 || idle_interval_usec_ > 0) { +#endif + auto val = detail::select_read(svr_sock_, idle_interval_sec_, + idle_interval_usec_); + if (val == 0) { // Timeout + task_queue->on_idle(); + continue; + } +#ifndef _WIN32 + } +#endif + +#if defined _WIN32 + // sockets connected via WASAccept inherit flags NO_HANDLE_INHERIT, + // OVERLAPPED + socket_t sock = WSAAccept(svr_sock_, nullptr, nullptr, nullptr, 0); +#elif defined SOCK_CLOEXEC + socket_t sock = accept4(svr_sock_, nullptr, nullptr, SOCK_CLOEXEC); +#else + socket_t sock = accept(svr_sock_, nullptr, nullptr); +#endif + + if (sock == INVALID_SOCKET) { + if (errno == EMFILE) { + // The per-process limit of open file descriptors has been reached. + // Try to accept new connections after a short sleep. + std::this_thread::sleep_for(std::chrono::microseconds{1}); + continue; + } else if (errno == EINTR || errno == EAGAIN) { + continue; + } + if (svr_sock_ != INVALID_SOCKET) { + detail::close_socket(svr_sock_); + ret = false; + } else { + ; // The server socket was closed by user. + } + break; + } + + detail::set_socket_opt_time(sock, SOL_SOCKET, SO_RCVTIMEO, + read_timeout_sec_, read_timeout_usec_); + detail::set_socket_opt_time(sock, SOL_SOCKET, SO_SNDTIMEO, + write_timeout_sec_, write_timeout_usec_); + + if (!task_queue->enqueue( + [this, sock]() { process_and_close_socket(sock); })) { + detail::shutdown_socket(sock); + detail::close_socket(sock); + } + } + + task_queue->shutdown(); + } + + is_decommissioned = !ret; + return ret; +} + +bool Server::routing(Request &req, Response &res, Stream &strm) { + if (pre_routing_handler_ && + pre_routing_handler_(req, res) == HandlerResponse::Handled) { + return true; + } + + // File handler + auto is_head_request = req.method == "HEAD"; + if ((req.method == "GET" || is_head_request) && + handle_file_request(req, res, is_head_request)) { + return true; + } + + if (detail::expect_content(req)) { + // Content reader handler + { + ContentReader reader( + [&](ContentReceiver receiver) { + return read_content_with_content_receiver( + strm, req, res, std::move(receiver), nullptr, nullptr); + }, + [&](MultipartContentHeader header, ContentReceiver receiver) { + return read_content_with_content_receiver(strm, req, res, nullptr, + std::move(header), + std::move(receiver)); + }); + + if (req.method == "POST") { + if (dispatch_request_for_content_reader( + req, res, std::move(reader), + post_handlers_for_content_reader_)) { + return true; + } + } else if (req.method == "PUT") { + if (dispatch_request_for_content_reader( + req, res, std::move(reader), + put_handlers_for_content_reader_)) { + return true; + } + } else if (req.method == "PATCH") { + if (dispatch_request_for_content_reader( + req, res, std::move(reader), + patch_handlers_for_content_reader_)) { + return true; + } + } else if (req.method == "DELETE") { + if (dispatch_request_for_content_reader( + req, res, std::move(reader), + delete_handlers_for_content_reader_)) { + return true; + } + } + } + + // Read content into `req.body` + if (!read_content(strm, req, res)) { return false; } + } + + // Regular handler + if (req.method == "GET" || req.method == "HEAD") { + return dispatch_request(req, res, get_handlers_); + } else if (req.method == "POST") { + return dispatch_request(req, res, post_handlers_); + } else if (req.method == "PUT") { + return dispatch_request(req, res, put_handlers_); + } else if (req.method == "DELETE") { + return dispatch_request(req, res, delete_handlers_); + } else if (req.method == "OPTIONS") { + return dispatch_request(req, res, options_handlers_); + } else if (req.method == "PATCH") { + return dispatch_request(req, res, patch_handlers_); + } + + res.status = StatusCode::BadRequest_400; + return false; +} + +bool Server::dispatch_request(Request &req, Response &res, + const Handlers &handlers) const { + for (const auto &x : handlers) { + const auto &matcher = x.first; + const auto &handler = x.second; + + if (matcher->match(req)) { + handler(req, res); + return true; + } + } + return false; +} + +void Server::apply_ranges(const Request &req, Response &res, + std::string &content_type, + std::string &boundary) const { + if (req.ranges.size() > 1 && res.status == StatusCode::PartialContent_206) { + auto it = res.headers.find("Content-Type"); + if (it != res.headers.end()) { + content_type = it->second; + res.headers.erase(it); + } + + boundary = detail::make_multipart_data_boundary(); + + res.set_header("Content-Type", + "multipart/byteranges; boundary=" + boundary); + } + + auto type = detail::encoding_type(req, res); + + if (res.body.empty()) { + if (res.content_length_ > 0) { + size_t length = 0; + if (req.ranges.empty() || res.status != StatusCode::PartialContent_206) { + length = res.content_length_; + } else if (req.ranges.size() == 1) { + auto offset_and_length = detail::get_range_offset_and_length( + req.ranges[0], res.content_length_); + + length = offset_and_length.second; + + auto content_range = detail::make_content_range_header_field( + offset_and_length, res.content_length_); + res.set_header("Content-Range", content_range); + } else { + length = detail::get_multipart_ranges_data_length( + req, boundary, content_type, res.content_length_); + } + res.set_header("Content-Length", std::to_string(length)); + } else { + if (res.content_provider_) { + if (res.is_chunked_content_provider_) { + res.set_header("Transfer-Encoding", "chunked"); + if (type == detail::EncodingType::Gzip) { + res.set_header("Content-Encoding", "gzip"); + } else if (type == detail::EncodingType::Brotli) { + res.set_header("Content-Encoding", "br"); + } else if (type == detail::EncodingType::Zstd) { + res.set_header("Content-Encoding", "zstd"); + } + } + } + } + } else { + if (req.ranges.empty() || res.status != StatusCode::PartialContent_206) { + ; + } else if (req.ranges.size() == 1) { + auto offset_and_length = + detail::get_range_offset_and_length(req.ranges[0], res.body.size()); + auto offset = offset_and_length.first; + auto length = offset_and_length.second; + + auto content_range = detail::make_content_range_header_field( + offset_and_length, res.body.size()); + res.set_header("Content-Range", content_range); + + assert(offset + length <= res.body.size()); + res.body = res.body.substr(offset, length); + } else { + std::string data; + detail::make_multipart_ranges_data(req, res, boundary, content_type, + res.body.size(), data); + res.body.swap(data); + } + + if (type != detail::EncodingType::None) { + std::unique_ptr compressor; + std::string content_encoding; + + if (type == detail::EncodingType::Gzip) { +#ifdef CPPHTTPLIB_ZLIB_SUPPORT + compressor = detail::make_unique(); + content_encoding = "gzip"; +#endif + } else if (type == detail::EncodingType::Brotli) { +#ifdef CPPHTTPLIB_BROTLI_SUPPORT + compressor = detail::make_unique(); + content_encoding = "br"; +#endif + } else if (type == detail::EncodingType::Zstd) { +#ifdef CPPHTTPLIB_ZSTD_SUPPORT + compressor = detail::make_unique(); + content_encoding = "zstd"; +#endif + } + + if (compressor) { + std::string compressed; + if (compressor->compress(res.body.data(), res.body.size(), true, + [&](const char *data, size_t data_len) { + compressed.append(data, data_len); + return true; + })) { + res.body.swap(compressed); + res.set_header("Content-Encoding", content_encoding); + } + } + } + + auto length = std::to_string(res.body.size()); + res.set_header("Content-Length", length); + } +} + +bool Server::dispatch_request_for_content_reader( + Request &req, Response &res, ContentReader content_reader, + const HandlersForContentReader &handlers) const { + for (const auto &x : handlers) { + const auto &matcher = x.first; + const auto &handler = x.second; + + if (matcher->match(req)) { + handler(req, res, content_reader); + return true; + } + } + return false; +} + +bool +Server::process_request(Stream &strm, const std::string &remote_addr, + int remote_port, const std::string &local_addr, + int local_port, bool close_connection, + bool &connection_closed, + const std::function &setup_request) { + std::array buf{}; + + detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); + + // Connection has been closed on client + if (!line_reader.getline()) { return false; } + + Request req; + + Response res; + res.version = "HTTP/1.1"; + res.headers = default_headers_; + + // Request line and headers + if (!parse_request_line(line_reader.ptr(), req) || + !detail::read_headers(strm, req.headers)) { + res.status = StatusCode::BadRequest_400; + return write_response(strm, close_connection, req, res); + } + + // Check if the request URI doesn't exceed the limit + if (req.target.size() > CPPHTTPLIB_REQUEST_URI_MAX_LENGTH) { + Headers dummy; + detail::read_headers(strm, dummy); + res.status = StatusCode::UriTooLong_414; + return write_response(strm, close_connection, req, res); + } + + if (req.get_header_value("Connection") == "close") { + connection_closed = true; + } + + if (req.version == "HTTP/1.0" && + req.get_header_value("Connection") != "Keep-Alive") { + connection_closed = true; + } + + req.remote_addr = remote_addr; + req.remote_port = remote_port; + req.set_header("REMOTE_ADDR", req.remote_addr); + req.set_header("REMOTE_PORT", std::to_string(req.remote_port)); + + req.local_addr = local_addr; + req.local_port = local_port; + req.set_header("LOCAL_ADDR", req.local_addr); + req.set_header("LOCAL_PORT", std::to_string(req.local_port)); + + if (req.has_header("Range")) { + const auto &range_header_value = req.get_header_value("Range"); + if (!detail::parse_range_header(range_header_value, req.ranges)) { + res.status = StatusCode::RangeNotSatisfiable_416; + return write_response(strm, close_connection, req, res); + } + } + + if (setup_request) { setup_request(req); } + + if (req.get_header_value("Expect") == "100-continue") { + int status = StatusCode::Continue_100; + if (expect_100_continue_handler_) { + status = expect_100_continue_handler_(req, res); + } + switch (status) { + case StatusCode::Continue_100: + case StatusCode::ExpectationFailed_417: + detail::write_response_line(strm, status); + strm.write("\r\n"); + break; + default: + connection_closed = true; + return write_response(strm, true, req, res); + } + } + + // Setup `is_connection_closed` method + auto sock = strm.socket(); + req.is_connection_closed = [sock]() { + return !detail::is_socket_alive(sock); + }; + + // Routing + auto routed = false; +#ifdef CPPHTTPLIB_NO_EXCEPTIONS + routed = routing(req, res, strm); +#else + try { + routed = routing(req, res, strm); + } catch (std::exception &e) { + if (exception_handler_) { + auto ep = std::current_exception(); + exception_handler_(req, res, ep); + routed = true; + } else { + res.status = StatusCode::InternalServerError_500; + std::string val; + auto s = e.what(); + for (size_t i = 0; s[i]; i++) { + switch (s[i]) { + case '\r': val += "\\r"; break; + case '\n': val += "\\n"; break; + default: val += s[i]; break; + } + } + res.set_header("EXCEPTION_WHAT", val); + } + } catch (...) { + if (exception_handler_) { + auto ep = std::current_exception(); + exception_handler_(req, res, ep); + routed = true; + } else { + res.status = StatusCode::InternalServerError_500; + res.set_header("EXCEPTION_WHAT", "UNKNOWN"); + } + } +#endif + if (routed) { + if (res.status == -1) { + res.status = req.ranges.empty() ? StatusCode::OK_200 + : StatusCode::PartialContent_206; + } + + // Serve file content by using a content provider + if (!res.file_content_path_.empty()) { + const auto &path = res.file_content_path_; + auto mm = std::make_shared(path.c_str()); + if (!mm->is_open()) { + res.body.clear(); + res.content_length_ = 0; + res.content_provider_ = nullptr; + res.status = StatusCode::NotFound_404; + return write_response(strm, close_connection, req, res); + } + + auto content_type = res.file_content_content_type_; + if (content_type.empty()) { + content_type = detail::find_content_type( + path, file_extension_and_mimetype_map_, default_file_mimetype_); + } + + res.set_content_provider( + mm->size(), content_type, + [mm](size_t offset, size_t length, DataSink &sink) -> bool { + sink.write(mm->data() + offset, length); + return true; + }); + } + + if (detail::range_error(req, res)) { + res.body.clear(); + res.content_length_ = 0; + res.content_provider_ = nullptr; + res.status = StatusCode::RangeNotSatisfiable_416; + return write_response(strm, close_connection, req, res); + } + + return write_response_with_content(strm, close_connection, req, res); + } else { + if (res.status == -1) { res.status = StatusCode::NotFound_404; } + + return write_response(strm, close_connection, req, res); + } +} + +bool Server::is_valid() const { return true; } + +bool Server::process_and_close_socket(socket_t sock) { + std::string remote_addr; + int remote_port = 0; + detail::get_remote_ip_and_port(sock, remote_addr, remote_port); + + std::string local_addr; + int local_port = 0; + detail::get_local_ip_and_port(sock, local_addr, local_port); + + auto ret = detail::process_server_socket( + svr_sock_, sock, keep_alive_max_count_, keep_alive_timeout_sec_, + read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, + write_timeout_usec_, + [&](Stream &strm, bool close_connection, bool &connection_closed) { + return process_request(strm, remote_addr, remote_port, local_addr, + local_port, close_connection, connection_closed, + nullptr); + }); + + detail::shutdown_socket(sock); + detail::close_socket(sock); + return ret; +} + +// HTTP client implementation +ClientImpl::ClientImpl(const std::string &host) + : ClientImpl(host, 80, std::string(), std::string()) {} + +ClientImpl::ClientImpl(const std::string &host, int port) + : ClientImpl(host, port, std::string(), std::string()) {} + +ClientImpl::ClientImpl(const std::string &host, int port, + const std::string &client_cert_path, + const std::string &client_key_path) + : host_(detail::escape_abstract_namespace_unix_domain(host)), port_(port), + host_and_port_(adjust_host_string(host_) + ":" + std::to_string(port)), + client_cert_path_(client_cert_path), client_key_path_(client_key_path) {} + +ClientImpl::~ClientImpl() { + // Wait until all the requests in flight are handled. + size_t retry_count = 10; + while (retry_count-- > 0) { + { + std::lock_guard guard(socket_mutex_); + if (socket_requests_in_flight_ == 0) { break; } + } + std::this_thread::sleep_for(std::chrono::milliseconds{1}); + } + + std::lock_guard guard(socket_mutex_); + shutdown_socket(socket_); + close_socket(socket_); +} + +bool ClientImpl::is_valid() const { return true; } + +void ClientImpl::copy_settings(const ClientImpl &rhs) { + client_cert_path_ = rhs.client_cert_path_; + client_key_path_ = rhs.client_key_path_; + connection_timeout_sec_ = rhs.connection_timeout_sec_; + read_timeout_sec_ = rhs.read_timeout_sec_; + read_timeout_usec_ = rhs.read_timeout_usec_; + write_timeout_sec_ = rhs.write_timeout_sec_; + write_timeout_usec_ = rhs.write_timeout_usec_; + max_timeout_msec_ = rhs.max_timeout_msec_; + basic_auth_username_ = rhs.basic_auth_username_; + basic_auth_password_ = rhs.basic_auth_password_; + bearer_token_auth_token_ = rhs.bearer_token_auth_token_; +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + digest_auth_username_ = rhs.digest_auth_username_; + digest_auth_password_ = rhs.digest_auth_password_; +#endif + keep_alive_ = rhs.keep_alive_; + follow_location_ = rhs.follow_location_; + url_encode_ = rhs.url_encode_; + address_family_ = rhs.address_family_; + tcp_nodelay_ = rhs.tcp_nodelay_; + ipv6_v6only_ = rhs.ipv6_v6only_; + socket_options_ = rhs.socket_options_; + compress_ = rhs.compress_; + decompress_ = rhs.decompress_; + interface_ = rhs.interface_; + proxy_host_ = rhs.proxy_host_; + proxy_port_ = rhs.proxy_port_; + proxy_basic_auth_username_ = rhs.proxy_basic_auth_username_; + proxy_basic_auth_password_ = rhs.proxy_basic_auth_password_; + proxy_bearer_token_auth_token_ = rhs.proxy_bearer_token_auth_token_; +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + proxy_digest_auth_username_ = rhs.proxy_digest_auth_username_; + proxy_digest_auth_password_ = rhs.proxy_digest_auth_password_; +#endif +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + ca_cert_file_path_ = rhs.ca_cert_file_path_; + ca_cert_dir_path_ = rhs.ca_cert_dir_path_; + ca_cert_store_ = rhs.ca_cert_store_; +#endif +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + server_certificate_verification_ = rhs.server_certificate_verification_; + server_hostname_verification_ = rhs.server_hostname_verification_; + server_certificate_verifier_ = rhs.server_certificate_verifier_; +#endif + logger_ = rhs.logger_; +} + +socket_t ClientImpl::create_client_socket(Error &error) const { + if (!proxy_host_.empty() && proxy_port_ != -1) { + return detail::create_client_socket( + proxy_host_, std::string(), proxy_port_, address_family_, tcp_nodelay_, + ipv6_v6only_, socket_options_, connection_timeout_sec_, + connection_timeout_usec_, read_timeout_sec_, read_timeout_usec_, + write_timeout_sec_, write_timeout_usec_, interface_, error); + } + + // Check is custom IP specified for host_ + std::string ip; + auto it = addr_map_.find(host_); + if (it != addr_map_.end()) { ip = it->second; } + + return detail::create_client_socket( + host_, ip, port_, address_family_, tcp_nodelay_, ipv6_v6only_, + socket_options_, connection_timeout_sec_, connection_timeout_usec_, + read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, + write_timeout_usec_, interface_, error); +} + +bool ClientImpl::create_and_connect_socket(Socket &socket, + Error &error) { + auto sock = create_client_socket(error); + if (sock == INVALID_SOCKET) { return false; } + socket.sock = sock; + return true; +} + +void ClientImpl::shutdown_ssl(Socket & /*socket*/, + bool /*shutdown_gracefully*/) { + // If there are any requests in flight from threads other than us, then it's + // a thread-unsafe race because individual ssl* objects are not thread-safe. + assert(socket_requests_in_flight_ == 0 || + socket_requests_are_from_thread_ == std::this_thread::get_id()); +} + +void ClientImpl::shutdown_socket(Socket &socket) const { + if (socket.sock == INVALID_SOCKET) { return; } + detail::shutdown_socket(socket.sock); +} + +void ClientImpl::close_socket(Socket &socket) { + // If there are requests in flight in another thread, usually closing + // the socket will be fine and they will simply receive an error when + // using the closed socket, but it is still a bug since rarely the OS + // may reassign the socket id to be used for a new socket, and then + // suddenly they will be operating on a live socket that is different + // than the one they intended! + assert(socket_requests_in_flight_ == 0 || + socket_requests_are_from_thread_ == std::this_thread::get_id()); + + // It is also a bug if this happens while SSL is still active +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + assert(socket.ssl == nullptr); +#endif + if (socket.sock == INVALID_SOCKET) { return; } + detail::close_socket(socket.sock); + socket.sock = INVALID_SOCKET; +} + +bool ClientImpl::read_response_line(Stream &strm, const Request &req, + Response &res) const { + std::array buf{}; + + detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); + + if (!line_reader.getline()) { return false; } + +#ifdef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR + thread_local const std::regex re("(HTTP/1\\.[01]) (\\d{3})(?: (.*?))?\r?\n"); +#else + thread_local const std::regex re("(HTTP/1\\.[01]) (\\d{3})(?: (.*?))?\r\n"); +#endif + + std::cmatch m; + if (!std::regex_match(line_reader.ptr(), m, re)) { + return req.method == "CONNECT"; + } + res.version = std::string(m[1]); + res.status = std::stoi(std::string(m[2])); + res.reason = std::string(m[3]); + + // Ignore '100 Continue' + while (res.status == StatusCode::Continue_100) { + if (!line_reader.getline()) { return false; } // CRLF + if (!line_reader.getline()) { return false; } // next response line + + if (!std::regex_match(line_reader.ptr(), m, re)) { return false; } + res.version = std::string(m[1]); + res.status = std::stoi(std::string(m[2])); + res.reason = std::string(m[3]); + } + + return true; +} + +bool ClientImpl::send(Request &req, Response &res, Error &error) { + std::lock_guard request_mutex_guard(request_mutex_); + auto ret = send_(req, res, error); + if (error == Error::SSLPeerCouldBeClosed_) { + assert(!ret); + ret = send_(req, res, error); + } + return ret; +} + +bool ClientImpl::send_(Request &req, Response &res, Error &error) { + { + std::lock_guard guard(socket_mutex_); + + // Set this to false immediately - if it ever gets set to true by the end of + // the request, we know another thread instructed us to close the socket. + socket_should_be_closed_when_request_is_done_ = false; + + auto is_alive = false; + if (socket_.is_open()) { + is_alive = detail::is_socket_alive(socket_.sock); + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + if (is_alive && is_ssl()) { + if (detail::is_ssl_peer_could_be_closed(socket_.ssl, socket_.sock)) { + is_alive = false; + } + } +#endif + + if (!is_alive) { + // Attempt to avoid sigpipe by shutting down non-gracefully if it seems + // like the other side has already closed the connection Also, there + // cannot be any requests in flight from other threads since we locked + // request_mutex_, so safe to close everything immediately + const bool shutdown_gracefully = false; + shutdown_ssl(socket_, shutdown_gracefully); + shutdown_socket(socket_); + close_socket(socket_); + } + } + + if (!is_alive) { + if (!create_and_connect_socket(socket_, error)) { return false; } + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + // TODO: refactoring + if (is_ssl()) { + auto &scli = static_cast(*this); + if (!proxy_host_.empty() && proxy_port_ != -1) { + auto success = false; + if (!scli.connect_with_proxy(socket_, req.start_time_, res, success, + error)) { + return success; + } + } + + if (!scli.initialize_ssl(socket_, error)) { return false; } + } +#endif + } + + // Mark the current socket as being in use so that it cannot be closed by + // anyone else while this request is ongoing, even though we will be + // releasing the mutex. + if (socket_requests_in_flight_ > 1) { + assert(socket_requests_are_from_thread_ == std::this_thread::get_id()); + } + socket_requests_in_flight_ += 1; + socket_requests_are_from_thread_ = std::this_thread::get_id(); + } + + for (const auto &header : default_headers_) { + if (req.headers.find(header.first) == req.headers.end()) { + req.headers.insert(header); + } + } + + auto ret = false; + auto close_connection = !keep_alive_; + + auto se = detail::scope_exit([&]() { + // Briefly lock mutex in order to mark that a request is no longer ongoing + std::lock_guard guard(socket_mutex_); + socket_requests_in_flight_ -= 1; + if (socket_requests_in_flight_ <= 0) { + assert(socket_requests_in_flight_ == 0); + socket_requests_are_from_thread_ = std::thread::id(); + } + + if (socket_should_be_closed_when_request_is_done_ || close_connection || + !ret) { + shutdown_ssl(socket_, true); + shutdown_socket(socket_); + close_socket(socket_); + } + }); + + ret = process_socket(socket_, req.start_time_, [&](Stream &strm) { + return handle_request(strm, req, res, close_connection, error); + }); + + if (!ret) { + if (error == Error::Success) { error = Error::Unknown; } + } + + return ret; +} + +Result ClientImpl::send(const Request &req) { + auto req2 = req; + return send_(std::move(req2)); +} + +Result ClientImpl::send_(Request &&req) { + auto res = detail::make_unique(); + auto error = Error::Success; + auto ret = send(req, *res, error); + return Result{ret ? std::move(res) : nullptr, error, std::move(req.headers)}; +} + +bool ClientImpl::handle_request(Stream &strm, Request &req, + Response &res, bool close_connection, + Error &error) { + if (req.path.empty()) { + error = Error::Connection; + return false; + } + + auto req_save = req; + + bool ret; + + if (!is_ssl() && !proxy_host_.empty() && proxy_port_ != -1) { + auto req2 = req; + req2.path = "http://" + host_and_port_ + req.path; + ret = process_request(strm, req2, res, close_connection, error); + req = req2; + req.path = req_save.path; + } else { + ret = process_request(strm, req, res, close_connection, error); + } + + if (!ret) { return false; } + + if (res.get_header_value("Connection") == "close" || + (res.version == "HTTP/1.0" && res.reason != "Connection established")) { + // TODO this requires a not-entirely-obvious chain of calls to be correct + // for this to be safe. + + // This is safe to call because handle_request is only called by send_ + // which locks the request mutex during the process. It would be a bug + // to call it from a different thread since it's a thread-safety issue + // to do these things to the socket if another thread is using the socket. + std::lock_guard guard(socket_mutex_); + shutdown_ssl(socket_, true); + shutdown_socket(socket_); + close_socket(socket_); + } + + if (300 < res.status && res.status < 400 && follow_location_) { + req = req_save; + ret = redirect(req, res, error); + } + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + if ((res.status == StatusCode::Unauthorized_401 || + res.status == StatusCode::ProxyAuthenticationRequired_407) && + req.authorization_count_ < 5) { + auto is_proxy = res.status == StatusCode::ProxyAuthenticationRequired_407; + const auto &username = + is_proxy ? proxy_digest_auth_username_ : digest_auth_username_; + const auto &password = + is_proxy ? proxy_digest_auth_password_ : digest_auth_password_; + + if (!username.empty() && !password.empty()) { + std::map auth; + if (detail::parse_www_authenticate(res, auth, is_proxy)) { + Request new_req = req; + new_req.authorization_count_ += 1; + new_req.headers.erase(is_proxy ? "Proxy-Authorization" + : "Authorization"); + new_req.headers.insert(detail::make_digest_authentication_header( + req, auth, new_req.authorization_count_, detail::random_string(10), + username, password, is_proxy)); + + Response new_res; + + ret = send(new_req, new_res, error); + if (ret) { res = new_res; } + } + } + } +#endif + + return ret; +} + +bool ClientImpl::redirect(Request &req, Response &res, Error &error) { + if (req.redirect_count_ == 0) { + error = Error::ExceedRedirectCount; + return false; + } + + auto location = res.get_header_value("location"); + if (location.empty()) { return false; } + + thread_local const std::regex re( + R"((?:(https?):)?(?://(?:\[([a-fA-F\d:]+)\]|([^:/?#]+))(?::(\d+))?)?([^?#]*)(\?[^#]*)?(?:#.*)?)"); + + std::smatch m; + if (!std::regex_match(location, m, re)) { return false; } + + auto scheme = is_ssl() ? "https" : "http"; + + auto next_scheme = m[1].str(); + auto next_host = m[2].str(); + if (next_host.empty()) { next_host = m[3].str(); } + auto port_str = m[4].str(); + auto next_path = m[5].str(); + auto next_query = m[6].str(); + + auto next_port = port_; + if (!port_str.empty()) { + next_port = std::stoi(port_str); + } else if (!next_scheme.empty()) { + next_port = next_scheme == "https" ? 443 : 80; + } + + if (next_scheme.empty()) { next_scheme = scheme; } + if (next_host.empty()) { next_host = host_; } + if (next_path.empty()) { next_path = "/"; } + + auto path = detail::decode_url(next_path, true) + next_query; + + if (next_scheme == scheme && next_host == host_ && next_port == port_) { + return detail::redirect(*this, req, res, path, location, error); + } else { + if (next_scheme == "https") { +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + SSLClient cli(next_host, next_port); + cli.copy_settings(*this); + if (ca_cert_store_) { cli.set_ca_cert_store(ca_cert_store_); } + return detail::redirect(cli, req, res, path, location, error); +#else + return false; +#endif + } else { + ClientImpl cli(next_host, next_port); + cli.copy_settings(*this); + return detail::redirect(cli, req, res, path, location, error); + } + } +} + +bool ClientImpl::write_content_with_provider(Stream &strm, + const Request &req, + Error &error) const { + auto is_shutting_down = []() { return false; }; + + if (req.is_chunked_content_provider_) { + // TODO: Brotli support + std::unique_ptr compressor; +#ifdef CPPHTTPLIB_ZLIB_SUPPORT + if (compress_) { + compressor = detail::make_unique(); + } else +#endif + { + compressor = detail::make_unique(); + } + + return detail::write_content_chunked(strm, req.content_provider_, + is_shutting_down, *compressor, error); + } else { + return detail::write_content(strm, req.content_provider_, 0, + req.content_length_, is_shutting_down, error); + } +} + +bool ClientImpl::write_request(Stream &strm, Request &req, + bool close_connection, Error &error) { + // Prepare additional headers + if (close_connection) { + if (!req.has_header("Connection")) { + req.set_header("Connection", "close"); + } + } + + if (!req.has_header("Host")) { + if (is_ssl()) { + if (port_ == 443) { + req.set_header("Host", host_); + } else { + req.set_header("Host", host_and_port_); + } + } else { + if (port_ == 80) { + req.set_header("Host", host_); + } else { + req.set_header("Host", host_and_port_); + } + } + } + + if (!req.has_header("Accept")) { req.set_header("Accept", "*/*"); } + + if (!req.content_receiver) { + if (!req.has_header("Accept-Encoding")) { + std::string accept_encoding; +#ifdef CPPHTTPLIB_BROTLI_SUPPORT + accept_encoding = "br"; +#endif +#ifdef CPPHTTPLIB_ZLIB_SUPPORT + if (!accept_encoding.empty()) { accept_encoding += ", "; } + accept_encoding += "gzip, deflate"; +#endif +#ifdef CPPHTTPLIB_ZSTD_SUPPORT + if (!accept_encoding.empty()) { accept_encoding += ", "; } + accept_encoding += "zstd"; +#endif + req.set_header("Accept-Encoding", accept_encoding); + } + +#ifndef CPPHTTPLIB_NO_DEFAULT_USER_AGENT + if (!req.has_header("User-Agent")) { + auto agent = std::string("cpp-httplib/") + CPPHTTPLIB_VERSION; + req.set_header("User-Agent", agent); + } +#endif + }; + + if (req.body.empty()) { + if (req.content_provider_) { + if (!req.is_chunked_content_provider_) { + if (!req.has_header("Content-Length")) { + auto length = std::to_string(req.content_length_); + req.set_header("Content-Length", length); + } + } + } else { + if (req.method == "POST" || req.method == "PUT" || + req.method == "PATCH") { + req.set_header("Content-Length", "0"); + } + } + } else { + if (!req.has_header("Content-Type")) { + req.set_header("Content-Type", "text/plain"); + } + + if (!req.has_header("Content-Length")) { + auto length = std::to_string(req.body.size()); + req.set_header("Content-Length", length); + } + } + + if (!basic_auth_password_.empty() || !basic_auth_username_.empty()) { + if (!req.has_header("Authorization")) { + req.headers.insert(make_basic_authentication_header( + basic_auth_username_, basic_auth_password_, false)); + } + } + + if (!proxy_basic_auth_username_.empty() && + !proxy_basic_auth_password_.empty()) { + if (!req.has_header("Proxy-Authorization")) { + req.headers.insert(make_basic_authentication_header( + proxy_basic_auth_username_, proxy_basic_auth_password_, true)); + } + } + + if (!bearer_token_auth_token_.empty()) { + if (!req.has_header("Authorization")) { + req.headers.insert(make_bearer_token_authentication_header( + bearer_token_auth_token_, false)); + } + } + + if (!proxy_bearer_token_auth_token_.empty()) { + if (!req.has_header("Proxy-Authorization")) { + req.headers.insert(make_bearer_token_authentication_header( + proxy_bearer_token_auth_token_, true)); + } + } + + // Request line and headers + { + detail::BufferStream bstrm; + + const auto &path_with_query = + req.params.empty() ? req.path + : append_query_params(req.path, req.params); + + const auto &path = + url_encode_ ? detail::encode_url(path_with_query) : path_with_query; + + detail::write_request_line(bstrm, req.method, path); + + header_writer_(bstrm, req.headers); + + // Flush buffer + auto &data = bstrm.get_buffer(); + if (!detail::write_data(strm, data.data(), data.size())) { + error = Error::Write; + return false; + } + } + + // Body + if (req.body.empty()) { + return write_content_with_provider(strm, req, error); + } + + if (!detail::write_data(strm, req.body.data(), req.body.size())) { + error = Error::Write; + return false; + } + + return true; +} + +std::unique_ptr ClientImpl::send_with_content_provider( + Request &req, const char *body, size_t content_length, + ContentProvider content_provider, + ContentProviderWithoutLength content_provider_without_length, + const std::string &content_type, Error &error) { + if (!content_type.empty()) { req.set_header("Content-Type", content_type); } + +#ifdef CPPHTTPLIB_ZLIB_SUPPORT + if (compress_) { req.set_header("Content-Encoding", "gzip"); } +#endif + +#ifdef CPPHTTPLIB_ZLIB_SUPPORT + if (compress_ && !content_provider_without_length) { + // TODO: Brotli support + detail::gzip_compressor compressor; + + if (content_provider) { + auto ok = true; + size_t offset = 0; + DataSink data_sink; + + data_sink.write = [&](const char *data, size_t data_len) -> bool { + if (ok) { + auto last = offset + data_len == content_length; + + auto ret = compressor.compress( + data, data_len, last, + [&](const char *compressed_data, size_t compressed_data_len) { + req.body.append(compressed_data, compressed_data_len); + return true; + }); + + if (ret) { + offset += data_len; + } else { + ok = false; + } + } + return ok; + }; + + while (ok && offset < content_length) { + if (!content_provider(offset, content_length - offset, data_sink)) { + error = Error::Canceled; + return nullptr; + } + } + } else { + if (!compressor.compress(body, content_length, true, + [&](const char *data, size_t data_len) { + req.body.append(data, data_len); + return true; + })) { + error = Error::Compression; + return nullptr; + } + } + } else +#endif + { + if (content_provider) { + req.content_length_ = content_length; + req.content_provider_ = std::move(content_provider); + req.is_chunked_content_provider_ = false; + } else if (content_provider_without_length) { + req.content_length_ = 0; + req.content_provider_ = detail::ContentProviderAdapter( + std::move(content_provider_without_length)); + req.is_chunked_content_provider_ = true; + req.set_header("Transfer-Encoding", "chunked"); + } else { + req.body.assign(body, content_length); + } + } + + auto res = detail::make_unique(); + return send(req, *res, error) ? std::move(res) : nullptr; +} + +Result ClientImpl::send_with_content_provider( + const std::string &method, const std::string &path, const Headers &headers, + const char *body, size_t content_length, ContentProvider content_provider, + ContentProviderWithoutLength content_provider_without_length, + const std::string &content_type, Progress progress) { + Request req; + req.method = method; + req.headers = headers; + req.path = path; + req.progress = progress; + if (max_timeout_msec_ > 0) { + req.start_time_ = std::chrono::steady_clock::now(); + } + + auto error = Error::Success; + + auto res = send_with_content_provider( + req, body, content_length, std::move(content_provider), + std::move(content_provider_without_length), content_type, error); + + return Result{std::move(res), error, std::move(req.headers)}; +} + +std::string +ClientImpl::adjust_host_string(const std::string &host) const { + if (host.find(':') != std::string::npos) { return "[" + host + "]"; } + return host; +} + +bool ClientImpl::process_request(Stream &strm, Request &req, + Response &res, bool close_connection, + Error &error) { + // Send request + if (!write_request(strm, req, close_connection, error)) { return false; } + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + if (is_ssl()) { + auto is_proxy_enabled = !proxy_host_.empty() && proxy_port_ != -1; + if (!is_proxy_enabled) { + if (detail::is_ssl_peer_could_be_closed(socket_.ssl, socket_.sock)) { + error = Error::SSLPeerCouldBeClosed_; + return false; + } + } + } +#endif + + // Receive response and headers + if (!read_response_line(strm, req, res) || + !detail::read_headers(strm, res.headers)) { + error = Error::Read; + return false; + } + + // Body + if ((res.status != StatusCode::NoContent_204) && req.method != "HEAD" && + req.method != "CONNECT") { + auto redirect = 300 < res.status && res.status < 400 && + res.status != StatusCode::NotModified_304 && + follow_location_; + + if (req.response_handler && !redirect) { + if (!req.response_handler(res)) { + error = Error::Canceled; + return false; + } + } + + auto out = + req.content_receiver + ? static_cast( + [&](const char *buf, size_t n, uint64_t off, uint64_t len) { + if (redirect) { return true; } + auto ret = req.content_receiver(buf, n, off, len); + if (!ret) { error = Error::Canceled; } + return ret; + }) + : static_cast( + [&](const char *buf, size_t n, uint64_t /*off*/, + uint64_t /*len*/) { + assert(res.body.size() + n <= res.body.max_size()); + res.body.append(buf, n); + return true; + }); + + auto progress = [&](uint64_t current, uint64_t total) { + if (!req.progress || redirect) { return true; } + auto ret = req.progress(current, total); + if (!ret) { error = Error::Canceled; } + return ret; + }; + + if (res.has_header("Content-Length")) { + if (!req.content_receiver) { + auto len = res.get_header_value_u64("Content-Length"); + if (len > res.body.max_size()) { + error = Error::Read; + return false; + } + res.body.reserve(static_cast(len)); + } + } + + if (res.status != StatusCode::NotModified_304) { + int dummy_status; + if (!detail::read_content(strm, res, (std::numeric_limits::max)(), + dummy_status, std::move(progress), + std::move(out), decompress_)) { + if (error != Error::Canceled) { error = Error::Read; } + return false; + } + } + } + + // Log + if (logger_) { logger_(req, res); } + + return true; +} + +ContentProviderWithoutLength ClientImpl::get_multipart_content_provider( + const std::string &boundary, const MultipartFormDataItems &items, + const MultipartFormDataProviderItems &provider_items) const { + size_t cur_item = 0; + size_t cur_start = 0; + // cur_item and cur_start are copied to within the std::function and maintain + // state between successive calls + return [&, cur_item, cur_start](size_t offset, + DataSink &sink) mutable -> bool { + if (!offset && !items.empty()) { + sink.os << detail::serialize_multipart_formdata(items, boundary, false); + return true; + } else if (cur_item < provider_items.size()) { + if (!cur_start) { + const auto &begin = detail::serialize_multipart_formdata_item_begin( + provider_items[cur_item], boundary); + offset += begin.size(); + cur_start = offset; + sink.os << begin; + } + + DataSink cur_sink; + auto has_data = true; + cur_sink.write = sink.write; + cur_sink.done = [&]() { has_data = false; }; + + if (!provider_items[cur_item].provider(offset - cur_start, cur_sink)) { + return false; + } + + if (!has_data) { + sink.os << detail::serialize_multipart_formdata_item_end(); + cur_item++; + cur_start = 0; + } + return true; + } else { + sink.os << detail::serialize_multipart_formdata_finish(boundary); + sink.done(); + return true; + } + }; +} + +bool ClientImpl::process_socket( + const Socket &socket, + std::chrono::time_point start_time, + std::function callback) { + return detail::process_client_socket( + socket.sock, read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, + write_timeout_usec_, max_timeout_msec_, start_time, std::move(callback)); +} + +bool ClientImpl::is_ssl() const { return false; } + +Result ClientImpl::Get(const std::string &path) { + return Get(path, Headers(), Progress()); +} + +Result ClientImpl::Get(const std::string &path, Progress progress) { + return Get(path, Headers(), std::move(progress)); +} + +Result ClientImpl::Get(const std::string &path, const Headers &headers) { + return Get(path, headers, Progress()); +} + +Result ClientImpl::Get(const std::string &path, const Headers &headers, + Progress progress) { + Request req; + req.method = "GET"; + req.path = path; + req.headers = headers; + req.progress = std::move(progress); + if (max_timeout_msec_ > 0) { + req.start_time_ = std::chrono::steady_clock::now(); + } + + return send_(std::move(req)); +} + +Result ClientImpl::Get(const std::string &path, + ContentReceiver content_receiver) { + return Get(path, Headers(), nullptr, std::move(content_receiver), nullptr); +} + +Result ClientImpl::Get(const std::string &path, + ContentReceiver content_receiver, + Progress progress) { + return Get(path, Headers(), nullptr, std::move(content_receiver), + std::move(progress)); +} + +Result ClientImpl::Get(const std::string &path, const Headers &headers, + ContentReceiver content_receiver) { + return Get(path, headers, nullptr, std::move(content_receiver), nullptr); +} + +Result ClientImpl::Get(const std::string &path, const Headers &headers, + ContentReceiver content_receiver, + Progress progress) { + return Get(path, headers, nullptr, std::move(content_receiver), + std::move(progress)); +} + +Result ClientImpl::Get(const std::string &path, + ResponseHandler response_handler, + ContentReceiver content_receiver) { + return Get(path, Headers(), std::move(response_handler), + std::move(content_receiver), nullptr); +} + +Result ClientImpl::Get(const std::string &path, const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver) { + return Get(path, headers, std::move(response_handler), + std::move(content_receiver), nullptr); +} + +Result ClientImpl::Get(const std::string &path, + ResponseHandler response_handler, + ContentReceiver content_receiver, + Progress progress) { + return Get(path, Headers(), std::move(response_handler), + std::move(content_receiver), std::move(progress)); +} + +Result ClientImpl::Get(const std::string &path, const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver, + Progress progress) { + Request req; + req.method = "GET"; + req.path = path; + req.headers = headers; + req.response_handler = std::move(response_handler); + req.content_receiver = + [content_receiver](const char *data, size_t data_length, + uint64_t /*offset*/, uint64_t /*total_length*/) { + return content_receiver(data, data_length); + }; + req.progress = std::move(progress); + if (max_timeout_msec_ > 0) { + req.start_time_ = std::chrono::steady_clock::now(); + } + + return send_(std::move(req)); +} + +Result ClientImpl::Get(const std::string &path, const Params ¶ms, + const Headers &headers, Progress progress) { + if (params.empty()) { return Get(path, headers); } + + std::string path_with_query = append_query_params(path, params); + return Get(path_with_query, headers, std::move(progress)); +} + +Result ClientImpl::Get(const std::string &path, const Params ¶ms, + const Headers &headers, + ContentReceiver content_receiver, + Progress progress) { + return Get(path, params, headers, nullptr, std::move(content_receiver), + std::move(progress)); +} + +Result ClientImpl::Get(const std::string &path, const Params ¶ms, + const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver, + Progress progress) { + if (params.empty()) { + return Get(path, headers, std::move(response_handler), + std::move(content_receiver), std::move(progress)); + } + + std::string path_with_query = append_query_params(path, params); + return Get(path_with_query, headers, std::move(response_handler), + std::move(content_receiver), std::move(progress)); +} + +Result ClientImpl::Head(const std::string &path) { + return Head(path, Headers()); +} + +Result ClientImpl::Head(const std::string &path, + const Headers &headers) { + Request req; + req.method = "HEAD"; + req.headers = headers; + req.path = path; + if (max_timeout_msec_ > 0) { + req.start_time_ = std::chrono::steady_clock::now(); + } + + return send_(std::move(req)); +} + +Result ClientImpl::Post(const std::string &path) { + return Post(path, std::string(), std::string()); +} + +Result ClientImpl::Post(const std::string &path, + const Headers &headers) { + return Post(path, headers, nullptr, 0, std::string()); +} + +Result ClientImpl::Post(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type) { + return Post(path, Headers(), body, content_length, content_type, nullptr); +} + +Result ClientImpl::Post(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type) { + return send_with_content_provider("POST", path, headers, body, content_length, + nullptr, nullptr, content_type, nullptr); +} + +Result ClientImpl::Post(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type, + Progress progress) { + return send_with_content_provider("POST", path, headers, body, content_length, + nullptr, nullptr, content_type, progress); +} + +Result ClientImpl::Post(const std::string &path, const std::string &body, + const std::string &content_type) { + return Post(path, Headers(), body, content_type); +} + +Result ClientImpl::Post(const std::string &path, const std::string &body, + const std::string &content_type, + Progress progress) { + return Post(path, Headers(), body, content_type, progress); +} + +Result ClientImpl::Post(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type) { + return send_with_content_provider("POST", path, headers, body.data(), + body.size(), nullptr, nullptr, content_type, + nullptr); +} + +Result ClientImpl::Post(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type, + Progress progress) { + return send_with_content_provider("POST", path, headers, body.data(), + body.size(), nullptr, nullptr, content_type, + progress); +} + +Result ClientImpl::Post(const std::string &path, const Params ¶ms) { + return Post(path, Headers(), params); +} + +Result ClientImpl::Post(const std::string &path, size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return Post(path, Headers(), content_length, std::move(content_provider), + content_type); +} + +Result ClientImpl::Post(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return Post(path, Headers(), std::move(content_provider), content_type); +} + +Result ClientImpl::Post(const std::string &path, const Headers &headers, + size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return send_with_content_provider("POST", path, headers, nullptr, + content_length, std::move(content_provider), + nullptr, content_type, nullptr); +} + +Result ClientImpl::Post(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return send_with_content_provider("POST", path, headers, nullptr, 0, nullptr, + std::move(content_provider), content_type, + nullptr); +} + +Result ClientImpl::Post(const std::string &path, const Headers &headers, + const Params ¶ms) { + auto query = detail::params_to_query_str(params); + return Post(path, headers, query, "application/x-www-form-urlencoded"); +} + +Result ClientImpl::Post(const std::string &path, const Headers &headers, + const Params ¶ms, Progress progress) { + auto query = detail::params_to_query_str(params); + return Post(path, headers, query, "application/x-www-form-urlencoded", + progress); +} + +Result ClientImpl::Post(const std::string &path, + const MultipartFormDataItems &items) { + return Post(path, Headers(), items); +} + +Result ClientImpl::Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items) { + const auto &boundary = detail::make_multipart_data_boundary(); + const auto &content_type = + detail::serialize_multipart_formdata_get_content_type(boundary); + const auto &body = detail::serialize_multipart_formdata(items, boundary); + return Post(path, headers, body, content_type); +} + +Result ClientImpl::Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const std::string &boundary) { + if (!detail::is_multipart_boundary_chars_valid(boundary)) { + return Result{nullptr, Error::UnsupportedMultipartBoundaryChars}; + } + + const auto &content_type = + detail::serialize_multipart_formdata_get_content_type(boundary); + const auto &body = detail::serialize_multipart_formdata(items, boundary); + return Post(path, headers, body, content_type); +} + +Result +ClientImpl::Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const MultipartFormDataProviderItems &provider_items) { + const auto &boundary = detail::make_multipart_data_boundary(); + const auto &content_type = + detail::serialize_multipart_formdata_get_content_type(boundary); + return send_with_content_provider( + "POST", path, headers, nullptr, 0, nullptr, + get_multipart_content_provider(boundary, items, provider_items), + content_type, nullptr); +} + +Result ClientImpl::Put(const std::string &path) { + return Put(path, std::string(), std::string()); +} + +Result ClientImpl::Put(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type) { + return Put(path, Headers(), body, content_length, content_type); +} + +Result ClientImpl::Put(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type) { + return send_with_content_provider("PUT", path, headers, body, content_length, + nullptr, nullptr, content_type, nullptr); +} + +Result ClientImpl::Put(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type, + Progress progress) { + return send_with_content_provider("PUT", path, headers, body, content_length, + nullptr, nullptr, content_type, progress); +} + +Result ClientImpl::Put(const std::string &path, const std::string &body, + const std::string &content_type) { + return Put(path, Headers(), body, content_type); +} + +Result ClientImpl::Put(const std::string &path, const std::string &body, + const std::string &content_type, + Progress progress) { + return Put(path, Headers(), body, content_type, progress); +} + +Result ClientImpl::Put(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type) { + return send_with_content_provider("PUT", path, headers, body.data(), + body.size(), nullptr, nullptr, content_type, + nullptr); +} + +Result ClientImpl::Put(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type, + Progress progress) { + return send_with_content_provider("PUT", path, headers, body.data(), + body.size(), nullptr, nullptr, content_type, + progress); +} + +Result ClientImpl::Put(const std::string &path, size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return Put(path, Headers(), content_length, std::move(content_provider), + content_type); +} + +Result ClientImpl::Put(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return Put(path, Headers(), std::move(content_provider), content_type); +} + +Result ClientImpl::Put(const std::string &path, const Headers &headers, + size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return send_with_content_provider("PUT", path, headers, nullptr, + content_length, std::move(content_provider), + nullptr, content_type, nullptr); +} + +Result ClientImpl::Put(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return send_with_content_provider("PUT", path, headers, nullptr, 0, nullptr, + std::move(content_provider), content_type, + nullptr); +} + +Result ClientImpl::Put(const std::string &path, const Params ¶ms) { + return Put(path, Headers(), params); +} + +Result ClientImpl::Put(const std::string &path, const Headers &headers, + const Params ¶ms) { + auto query = detail::params_to_query_str(params); + return Put(path, headers, query, "application/x-www-form-urlencoded"); +} + +Result ClientImpl::Put(const std::string &path, const Headers &headers, + const Params ¶ms, Progress progress) { + auto query = detail::params_to_query_str(params); + return Put(path, headers, query, "application/x-www-form-urlencoded", + progress); +} + +Result ClientImpl::Put(const std::string &path, + const MultipartFormDataItems &items) { + return Put(path, Headers(), items); +} + +Result ClientImpl::Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items) { + const auto &boundary = detail::make_multipart_data_boundary(); + const auto &content_type = + detail::serialize_multipart_formdata_get_content_type(boundary); + const auto &body = detail::serialize_multipart_formdata(items, boundary); + return Put(path, headers, body, content_type); +} + +Result ClientImpl::Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const std::string &boundary) { + if (!detail::is_multipart_boundary_chars_valid(boundary)) { + return Result{nullptr, Error::UnsupportedMultipartBoundaryChars}; + } + + const auto &content_type = + detail::serialize_multipart_formdata_get_content_type(boundary); + const auto &body = detail::serialize_multipart_formdata(items, boundary); + return Put(path, headers, body, content_type); +} + +Result +ClientImpl::Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const MultipartFormDataProviderItems &provider_items) { + const auto &boundary = detail::make_multipart_data_boundary(); + const auto &content_type = + detail::serialize_multipart_formdata_get_content_type(boundary); + return send_with_content_provider( + "PUT", path, headers, nullptr, 0, nullptr, + get_multipart_content_provider(boundary, items, provider_items), + content_type, nullptr); +} +Result ClientImpl::Patch(const std::string &path) { + return Patch(path, std::string(), std::string()); +} + +Result ClientImpl::Patch(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type) { + return Patch(path, Headers(), body, content_length, content_type); +} + +Result ClientImpl::Patch(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type, + Progress progress) { + return Patch(path, Headers(), body, content_length, content_type, progress); +} + +Result ClientImpl::Patch(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type) { + return Patch(path, headers, body, content_length, content_type, nullptr); +} + +Result ClientImpl::Patch(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type, + Progress progress) { + return send_with_content_provider("PATCH", path, headers, body, + content_length, nullptr, nullptr, + content_type, progress); +} + +Result ClientImpl::Patch(const std::string &path, + const std::string &body, + const std::string &content_type) { + return Patch(path, Headers(), body, content_type); +} + +Result ClientImpl::Patch(const std::string &path, + const std::string &body, + const std::string &content_type, + Progress progress) { + return Patch(path, Headers(), body, content_type, progress); +} + +Result ClientImpl::Patch(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type) { + return Patch(path, headers, body, content_type, nullptr); +} + +Result ClientImpl::Patch(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type, + Progress progress) { + return send_with_content_provider("PATCH", path, headers, body.data(), + body.size(), nullptr, nullptr, content_type, + progress); +} + +Result ClientImpl::Patch(const std::string &path, size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return Patch(path, Headers(), content_length, std::move(content_provider), + content_type); +} + +Result ClientImpl::Patch(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return Patch(path, Headers(), std::move(content_provider), content_type); +} + +Result ClientImpl::Patch(const std::string &path, const Headers &headers, + size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return send_with_content_provider("PATCH", path, headers, nullptr, + content_length, std::move(content_provider), + nullptr, content_type, nullptr); +} + +Result ClientImpl::Patch(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return send_with_content_provider("PATCH", path, headers, nullptr, 0, nullptr, + std::move(content_provider), content_type, + nullptr); +} + +Result ClientImpl::Delete(const std::string &path) { + return Delete(path, Headers(), std::string(), std::string()); +} + +Result ClientImpl::Delete(const std::string &path, + const Headers &headers) { + return Delete(path, headers, std::string(), std::string()); +} + +Result ClientImpl::Delete(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type) { + return Delete(path, Headers(), body, content_length, content_type); +} + +Result ClientImpl::Delete(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type, + Progress progress) { + return Delete(path, Headers(), body, content_length, content_type, progress); +} + +Result ClientImpl::Delete(const std::string &path, + const Headers &headers, const char *body, + size_t content_length, + const std::string &content_type) { + return Delete(path, headers, body, content_length, content_type, nullptr); +} + +Result ClientImpl::Delete(const std::string &path, + const Headers &headers, const char *body, + size_t content_length, + const std::string &content_type, + Progress progress) { + Request req; + req.method = "DELETE"; + req.headers = headers; + req.path = path; + req.progress = progress; + if (max_timeout_msec_ > 0) { + req.start_time_ = std::chrono::steady_clock::now(); + } + + if (!content_type.empty()) { req.set_header("Content-Type", content_type); } + req.body.assign(body, content_length); + + return send_(std::move(req)); +} + +Result ClientImpl::Delete(const std::string &path, + const std::string &body, + const std::string &content_type) { + return Delete(path, Headers(), body.data(), body.size(), content_type); +} + +Result ClientImpl::Delete(const std::string &path, + const std::string &body, + const std::string &content_type, + Progress progress) { + return Delete(path, Headers(), body.data(), body.size(), content_type, + progress); +} + +Result ClientImpl::Delete(const std::string &path, + const Headers &headers, + const std::string &body, + const std::string &content_type) { + return Delete(path, headers, body.data(), body.size(), content_type); +} + +Result ClientImpl::Delete(const std::string &path, + const Headers &headers, + const std::string &body, + const std::string &content_type, + Progress progress) { + return Delete(path, headers, body.data(), body.size(), content_type, + progress); +} + +Result ClientImpl::Options(const std::string &path) { + return Options(path, Headers()); +} + +Result ClientImpl::Options(const std::string &path, + const Headers &headers) { + Request req; + req.method = "OPTIONS"; + req.headers = headers; + req.path = path; + if (max_timeout_msec_ > 0) { + req.start_time_ = std::chrono::steady_clock::now(); + } + + return send_(std::move(req)); +} + +void ClientImpl::stop() { + std::lock_guard guard(socket_mutex_); + + // If there is anything ongoing right now, the ONLY thread-safe thing we can + // do is to shutdown_socket, so that threads using this socket suddenly + // discover they can't read/write any more and error out. Everything else + // (closing the socket, shutting ssl down) is unsafe because these actions are + // not thread-safe. + if (socket_requests_in_flight_ > 0) { + shutdown_socket(socket_); + + // Aside from that, we set a flag for the socket to be closed when we're + // done. + socket_should_be_closed_when_request_is_done_ = true; + return; + } + + // Otherwise, still holding the mutex, we can shut everything down ourselves + shutdown_ssl(socket_, true); + shutdown_socket(socket_); + close_socket(socket_); +} + +std::string ClientImpl::host() const { return host_; } + +int ClientImpl::port() const { return port_; } + +size_t ClientImpl::is_socket_open() const { + std::lock_guard guard(socket_mutex_); + return socket_.is_open(); +} + +socket_t ClientImpl::socket() const { return socket_.sock; } + +void ClientImpl::set_connection_timeout(time_t sec, time_t usec) { + connection_timeout_sec_ = sec; + connection_timeout_usec_ = usec; +} + +void ClientImpl::set_read_timeout(time_t sec, time_t usec) { + read_timeout_sec_ = sec; + read_timeout_usec_ = usec; +} + +void ClientImpl::set_write_timeout(time_t sec, time_t usec) { + write_timeout_sec_ = sec; + write_timeout_usec_ = usec; +} + +void ClientImpl::set_max_timeout(time_t msec) { + max_timeout_msec_ = msec; +} + +void ClientImpl::set_basic_auth(const std::string &username, + const std::string &password) { + basic_auth_username_ = username; + basic_auth_password_ = password; +} + +void ClientImpl::set_bearer_token_auth(const std::string &token) { + bearer_token_auth_token_ = token; +} + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +void ClientImpl::set_digest_auth(const std::string &username, + const std::string &password) { + digest_auth_username_ = username; + digest_auth_password_ = password; +} +#endif + +void ClientImpl::set_keep_alive(bool on) { keep_alive_ = on; } + +void ClientImpl::set_follow_location(bool on) { follow_location_ = on; } + +void ClientImpl::set_url_encode(bool on) { url_encode_ = on; } + +void +ClientImpl::set_hostname_addr_map(std::map addr_map) { + addr_map_ = std::move(addr_map); +} + +void ClientImpl::set_default_headers(Headers headers) { + default_headers_ = std::move(headers); +} + +void ClientImpl::set_header_writer( + std::function const &writer) { + header_writer_ = writer; +} + +void ClientImpl::set_address_family(int family) { + address_family_ = family; +} + +void ClientImpl::set_tcp_nodelay(bool on) { tcp_nodelay_ = on; } + +void ClientImpl::set_ipv6_v6only(bool on) { ipv6_v6only_ = on; } + +void ClientImpl::set_socket_options(SocketOptions socket_options) { + socket_options_ = std::move(socket_options); +} + +void ClientImpl::set_compress(bool on) { compress_ = on; } + +void ClientImpl::set_decompress(bool on) { decompress_ = on; } + +void ClientImpl::set_interface(const std::string &intf) { + interface_ = intf; +} + +void ClientImpl::set_proxy(const std::string &host, int port) { + proxy_host_ = host; + proxy_port_ = port; +} + +void ClientImpl::set_proxy_basic_auth(const std::string &username, + const std::string &password) { + proxy_basic_auth_username_ = username; + proxy_basic_auth_password_ = password; +} + +void ClientImpl::set_proxy_bearer_token_auth(const std::string &token) { + proxy_bearer_token_auth_token_ = token; +} + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +void ClientImpl::set_proxy_digest_auth(const std::string &username, + const std::string &password) { + proxy_digest_auth_username_ = username; + proxy_digest_auth_password_ = password; +} + +void ClientImpl::set_ca_cert_path(const std::string &ca_cert_file_path, + const std::string &ca_cert_dir_path) { + ca_cert_file_path_ = ca_cert_file_path; + ca_cert_dir_path_ = ca_cert_dir_path; +} + +void ClientImpl::set_ca_cert_store(X509_STORE *ca_cert_store) { + if (ca_cert_store && ca_cert_store != ca_cert_store_) { + ca_cert_store_ = ca_cert_store; + } +} + +X509_STORE *ClientImpl::create_ca_cert_store(const char *ca_cert, + std::size_t size) const { + auto mem = BIO_new_mem_buf(ca_cert, static_cast(size)); + auto se = detail::scope_exit([&] { BIO_free_all(mem); }); + if (!mem) { return nullptr; } + + auto inf = PEM_X509_INFO_read_bio(mem, nullptr, nullptr, nullptr); + if (!inf) { return nullptr; } + + auto cts = X509_STORE_new(); + if (cts) { + for (auto i = 0; i < static_cast(sk_X509_INFO_num(inf)); i++) { + auto itmp = sk_X509_INFO_value(inf, i); + if (!itmp) { continue; } + + if (itmp->x509) { X509_STORE_add_cert(cts, itmp->x509); } + if (itmp->crl) { X509_STORE_add_crl(cts, itmp->crl); } + } + } + + sk_X509_INFO_pop_free(inf, X509_INFO_free); + return cts; +} + +void ClientImpl::enable_server_certificate_verification(bool enabled) { + server_certificate_verification_ = enabled; +} + +void ClientImpl::enable_server_hostname_verification(bool enabled) { + server_hostname_verification_ = enabled; +} + +void ClientImpl::set_server_certificate_verifier( + std::function verifier) { + server_certificate_verifier_ = verifier; +} +#endif + +void ClientImpl::set_logger(Logger logger) { + logger_ = std::move(logger); +} + +/* + * SSL Implementation + */ +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +namespace detail { + +template +SSL *ssl_new(socket_t sock, SSL_CTX *ctx, std::mutex &ctx_mutex, + U SSL_connect_or_accept, V setup) { + SSL *ssl = nullptr; + { + std::lock_guard guard(ctx_mutex); + ssl = SSL_new(ctx); + } + + if (ssl) { + set_nonblocking(sock, true); + auto bio = BIO_new_socket(static_cast(sock), BIO_NOCLOSE); + BIO_set_nbio(bio, 1); + SSL_set_bio(ssl, bio, bio); + + if (!setup(ssl) || SSL_connect_or_accept(ssl) != 1) { + SSL_shutdown(ssl); + { + std::lock_guard guard(ctx_mutex); + SSL_free(ssl); + } + set_nonblocking(sock, false); + return nullptr; + } + BIO_set_nbio(bio, 0); + set_nonblocking(sock, false); + } + + return ssl; +} + +void ssl_delete(std::mutex &ctx_mutex, SSL *ssl, socket_t sock, + bool shutdown_gracefully) { + // sometimes we may want to skip this to try to avoid SIGPIPE if we know + // the remote has closed the network connection + // Note that it is not always possible to avoid SIGPIPE, this is merely a + // best-efforts. + if (shutdown_gracefully) { + (void)(sock); + // SSL_shutdown() returns 0 on first call (indicating close_notify alert + // sent) and 1 on subsequent call (indicating close_notify alert received) + if (SSL_shutdown(ssl) == 0) { + // Expected to return 1, but even if it doesn't, we free ssl + SSL_shutdown(ssl); + } + } + + std::lock_guard guard(ctx_mutex); + SSL_free(ssl); +} + +template +bool ssl_connect_or_accept_nonblocking(socket_t sock, SSL *ssl, + U ssl_connect_or_accept, + time_t timeout_sec, + time_t timeout_usec) { + auto res = 0; + while ((res = ssl_connect_or_accept(ssl)) != 1) { + auto err = SSL_get_error(ssl, res); + switch (err) { + case SSL_ERROR_WANT_READ: + if (select_read(sock, timeout_sec, timeout_usec) > 0) { continue; } + break; + case SSL_ERROR_WANT_WRITE: + if (select_write(sock, timeout_sec, timeout_usec) > 0) { continue; } + break; + default: break; + } + return false; + } + return true; +} + +template +bool process_server_socket_ssl( + const std::atomic &svr_sock, SSL *ssl, socket_t sock, + size_t keep_alive_max_count, time_t keep_alive_timeout_sec, + time_t read_timeout_sec, time_t read_timeout_usec, time_t write_timeout_sec, + time_t write_timeout_usec, T callback) { + return process_server_socket_core( + svr_sock, sock, keep_alive_max_count, keep_alive_timeout_sec, + [&](bool close_connection, bool &connection_closed) { + SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, + write_timeout_sec, write_timeout_usec); + return callback(strm, close_connection, connection_closed); + }); +} + +template +bool process_client_socket_ssl( + SSL *ssl, socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, + time_t write_timeout_sec, time_t write_timeout_usec, + time_t max_timeout_msec, + std::chrono::time_point start_time, T callback) { + SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, + write_timeout_sec, write_timeout_usec, max_timeout_msec, + start_time); + return callback(strm); +} + +// SSL socket stream implementation +SSLSocketStream::SSLSocketStream( + socket_t sock, SSL *ssl, time_t read_timeout_sec, time_t read_timeout_usec, + time_t write_timeout_sec, time_t write_timeout_usec, + time_t max_timeout_msec, + std::chrono::time_point start_time) + : sock_(sock), ssl_(ssl), read_timeout_sec_(read_timeout_sec), + read_timeout_usec_(read_timeout_usec), + write_timeout_sec_(write_timeout_sec), + write_timeout_usec_(write_timeout_usec), + max_timeout_msec_(max_timeout_msec), start_time_(start_time) { + SSL_clear_mode(ssl, SSL_MODE_AUTO_RETRY); +} + +SSLSocketStream::~SSLSocketStream() = default; + +bool SSLSocketStream::is_readable() const { + return SSL_pending(ssl_) > 0; +} + +bool SSLSocketStream::wait_readable() const { + if (max_timeout_msec_ <= 0) { + return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; + } + + time_t read_timeout_sec; + time_t read_timeout_usec; + calc_actual_timeout(max_timeout_msec_, duration(), read_timeout_sec_, + read_timeout_usec_, read_timeout_sec, read_timeout_usec); + + return select_read(sock_, read_timeout_sec, read_timeout_usec) > 0; +} + +bool SSLSocketStream::wait_writable() const { + return select_write(sock_, write_timeout_sec_, write_timeout_usec_) > 0 && + is_socket_alive(sock_) && !is_ssl_peer_could_be_closed(ssl_, sock_); +} + +ssize_t SSLSocketStream::read(char *ptr, size_t size) { + if (SSL_pending(ssl_) > 0) { + return SSL_read(ssl_, ptr, static_cast(size)); + } else if (wait_readable()) { + auto ret = SSL_read(ssl_, ptr, static_cast(size)); + if (ret < 0) { + auto err = SSL_get_error(ssl_, ret); + auto n = 1000; +#ifdef _WIN32 + while (--n >= 0 && (err == SSL_ERROR_WANT_READ || + (err == SSL_ERROR_SYSCALL && + WSAGetLastError() == WSAETIMEDOUT))) { +#else + while (--n >= 0 && err == SSL_ERROR_WANT_READ) { +#endif + if (SSL_pending(ssl_) > 0) { + return SSL_read(ssl_, ptr, static_cast(size)); + } else if (wait_readable()) { + std::this_thread::sleep_for(std::chrono::microseconds{10}); + ret = SSL_read(ssl_, ptr, static_cast(size)); + if (ret >= 0) { return ret; } + err = SSL_get_error(ssl_, ret); + } else { + return -1; + } + } + } + return ret; + } else { + return -1; + } +} + +ssize_t SSLSocketStream::write(const char *ptr, size_t size) { + if (wait_writable()) { + auto handle_size = static_cast( + std::min(size, (std::numeric_limits::max)())); + + auto ret = SSL_write(ssl_, ptr, static_cast(handle_size)); + if (ret < 0) { + auto err = SSL_get_error(ssl_, ret); + auto n = 1000; +#ifdef _WIN32 + while (--n >= 0 && (err == SSL_ERROR_WANT_WRITE || + (err == SSL_ERROR_SYSCALL && + WSAGetLastError() == WSAETIMEDOUT))) { +#else + while (--n >= 0 && err == SSL_ERROR_WANT_WRITE) { +#endif + if (wait_writable()) { + std::this_thread::sleep_for(std::chrono::microseconds{10}); + ret = SSL_write(ssl_, ptr, static_cast(handle_size)); + if (ret >= 0) { return ret; } + err = SSL_get_error(ssl_, ret); + } else { + return -1; + } + } + } + return ret; + } + return -1; +} + +void SSLSocketStream::get_remote_ip_and_port(std::string &ip, + int &port) const { + detail::get_remote_ip_and_port(sock_, ip, port); +} + +void SSLSocketStream::get_local_ip_and_port(std::string &ip, + int &port) const { + detail::get_local_ip_and_port(sock_, ip, port); +} + +socket_t SSLSocketStream::socket() const { return sock_; } + +time_t SSLSocketStream::duration() const { + return std::chrono::duration_cast( + std::chrono::steady_clock::now() - start_time_) + .count(); +} + +} // namespace detail + +// SSL HTTP server implementation +SSLServer::SSLServer(const char *cert_path, const char *private_key_path, + const char *client_ca_cert_file_path, + const char *client_ca_cert_dir_path, + const char *private_key_password) { + ctx_ = SSL_CTX_new(TLS_server_method()); + + if (ctx_) { + SSL_CTX_set_options(ctx_, + SSL_OP_NO_COMPRESSION | + SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); + + SSL_CTX_set_min_proto_version(ctx_, TLS1_2_VERSION); + + if (private_key_password != nullptr && (private_key_password[0] != '\0')) { + SSL_CTX_set_default_passwd_cb_userdata( + ctx_, + reinterpret_cast(const_cast(private_key_password))); + } + + if (SSL_CTX_use_certificate_chain_file(ctx_, cert_path) != 1 || + SSL_CTX_use_PrivateKey_file(ctx_, private_key_path, SSL_FILETYPE_PEM) != + 1 || + SSL_CTX_check_private_key(ctx_) != 1) { + SSL_CTX_free(ctx_); + ctx_ = nullptr; + } else if (client_ca_cert_file_path || client_ca_cert_dir_path) { + SSL_CTX_load_verify_locations(ctx_, client_ca_cert_file_path, + client_ca_cert_dir_path); + + SSL_CTX_set_verify( + ctx_, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, nullptr); + } + } +} + +SSLServer::SSLServer(X509 *cert, EVP_PKEY *private_key, + X509_STORE *client_ca_cert_store) { + ctx_ = SSL_CTX_new(TLS_server_method()); + + if (ctx_) { + SSL_CTX_set_options(ctx_, + SSL_OP_NO_COMPRESSION | + SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); + + SSL_CTX_set_min_proto_version(ctx_, TLS1_2_VERSION); + + if (SSL_CTX_use_certificate(ctx_, cert) != 1 || + SSL_CTX_use_PrivateKey(ctx_, private_key) != 1) { + SSL_CTX_free(ctx_); + ctx_ = nullptr; + } else if (client_ca_cert_store) { + SSL_CTX_set_cert_store(ctx_, client_ca_cert_store); + + SSL_CTX_set_verify( + ctx_, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, nullptr); + } + } +} + +SSLServer::SSLServer( + const std::function &setup_ssl_ctx_callback) { + ctx_ = SSL_CTX_new(TLS_method()); + if (ctx_) { + if (!setup_ssl_ctx_callback(*ctx_)) { + SSL_CTX_free(ctx_); + ctx_ = nullptr; + } + } +} + +SSLServer::~SSLServer() { + if (ctx_) { SSL_CTX_free(ctx_); } +} + +bool SSLServer::is_valid() const { return ctx_; } + +SSL_CTX *SSLServer::ssl_context() const { return ctx_; } + +void SSLServer::update_certs(X509 *cert, EVP_PKEY *private_key, + X509_STORE *client_ca_cert_store) { + + std::lock_guard guard(ctx_mutex_); + + SSL_CTX_use_certificate(ctx_, cert); + SSL_CTX_use_PrivateKey(ctx_, private_key); + + if (client_ca_cert_store != nullptr) { + SSL_CTX_set_cert_store(ctx_, client_ca_cert_store); + } +} + +bool SSLServer::process_and_close_socket(socket_t sock) { + auto ssl = detail::ssl_new( + sock, ctx_, ctx_mutex_, + [&](SSL *ssl2) { + return detail::ssl_connect_or_accept_nonblocking( + sock, ssl2, SSL_accept, read_timeout_sec_, read_timeout_usec_); + }, + [](SSL * /*ssl2*/) { return true; }); + + auto ret = false; + if (ssl) { + std::string remote_addr; + int remote_port = 0; + detail::get_remote_ip_and_port(sock, remote_addr, remote_port); + + std::string local_addr; + int local_port = 0; + detail::get_local_ip_and_port(sock, local_addr, local_port); + + ret = detail::process_server_socket_ssl( + svr_sock_, ssl, sock, keep_alive_max_count_, keep_alive_timeout_sec_, + read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, + write_timeout_usec_, + [&](Stream &strm, bool close_connection, bool &connection_closed) { + return process_request(strm, remote_addr, remote_port, local_addr, + local_port, close_connection, + connection_closed, + [&](Request &req) { req.ssl = ssl; }); + }); + + // Shutdown gracefully if the result seemed successful, non-gracefully if + // the connection appeared to be closed. + const bool shutdown_gracefully = ret; + detail::ssl_delete(ctx_mutex_, ssl, sock, shutdown_gracefully); + } + + detail::shutdown_socket(sock); + detail::close_socket(sock); + return ret; +} + +// SSL HTTP client implementation +SSLClient::SSLClient(const std::string &host) + : SSLClient(host, 443, std::string(), std::string()) {} + +SSLClient::SSLClient(const std::string &host, int port) + : SSLClient(host, port, std::string(), std::string()) {} + +SSLClient::SSLClient(const std::string &host, int port, + const std::string &client_cert_path, + const std::string &client_key_path, + const std::string &private_key_password) + : ClientImpl(host, port, client_cert_path, client_key_path) { + ctx_ = SSL_CTX_new(TLS_client_method()); + + SSL_CTX_set_min_proto_version(ctx_, TLS1_2_VERSION); + + detail::split(&host_[0], &host_[host_.size()], '.', + [&](const char *b, const char *e) { + host_components_.emplace_back(b, e); + }); + + if (!client_cert_path.empty() && !client_key_path.empty()) { + if (!private_key_password.empty()) { + SSL_CTX_set_default_passwd_cb_userdata( + ctx_, reinterpret_cast( + const_cast(private_key_password.c_str()))); + } + + if (SSL_CTX_use_certificate_file(ctx_, client_cert_path.c_str(), + SSL_FILETYPE_PEM) != 1 || + SSL_CTX_use_PrivateKey_file(ctx_, client_key_path.c_str(), + SSL_FILETYPE_PEM) != 1) { + SSL_CTX_free(ctx_); + ctx_ = nullptr; + } + } +} + +SSLClient::SSLClient(const std::string &host, int port, + X509 *client_cert, EVP_PKEY *client_key, + const std::string &private_key_password) + : ClientImpl(host, port) { + ctx_ = SSL_CTX_new(TLS_client_method()); + + detail::split(&host_[0], &host_[host_.size()], '.', + [&](const char *b, const char *e) { + host_components_.emplace_back(b, e); + }); + + if (client_cert != nullptr && client_key != nullptr) { + if (!private_key_password.empty()) { + SSL_CTX_set_default_passwd_cb_userdata( + ctx_, reinterpret_cast( + const_cast(private_key_password.c_str()))); + } + + if (SSL_CTX_use_certificate(ctx_, client_cert) != 1 || + SSL_CTX_use_PrivateKey(ctx_, client_key) != 1) { + SSL_CTX_free(ctx_); + ctx_ = nullptr; + } + } +} + +SSLClient::~SSLClient() { + if (ctx_) { SSL_CTX_free(ctx_); } + // Make sure to shut down SSL since shutdown_ssl will resolve to the + // base function rather than the derived function once we get to the + // base class destructor, and won't free the SSL (causing a leak). + shutdown_ssl_impl(socket_, true); +} + +bool SSLClient::is_valid() const { return ctx_; } + +void SSLClient::set_ca_cert_store(X509_STORE *ca_cert_store) { + if (ca_cert_store) { + if (ctx_) { + if (SSL_CTX_get_cert_store(ctx_) != ca_cert_store) { + // Free memory allocated for old cert and use new store `ca_cert_store` + SSL_CTX_set_cert_store(ctx_, ca_cert_store); + } + } else { + X509_STORE_free(ca_cert_store); + } + } +} + +void SSLClient::load_ca_cert_store(const char *ca_cert, + std::size_t size) { + set_ca_cert_store(ClientImpl::create_ca_cert_store(ca_cert, size)); +} + +long SSLClient::get_openssl_verify_result() const { + return verify_result_; +} + +SSL_CTX *SSLClient::ssl_context() const { return ctx_; } + +bool SSLClient::create_and_connect_socket(Socket &socket, Error &error) { + return is_valid() && ClientImpl::create_and_connect_socket(socket, error); +} + +// Assumes that socket_mutex_ is locked and that there are no requests in flight +bool SSLClient::connect_with_proxy( + Socket &socket, + std::chrono::time_point start_time, + Response &res, bool &success, Error &error) { + success = true; + Response proxy_res; + if (!detail::process_client_socket( + socket.sock, read_timeout_sec_, read_timeout_usec_, + write_timeout_sec_, write_timeout_usec_, max_timeout_msec_, + start_time, [&](Stream &strm) { + Request req2; + req2.method = "CONNECT"; + req2.path = host_and_port_; + if (max_timeout_msec_ > 0) { + req2.start_time_ = std::chrono::steady_clock::now(); + } + return process_request(strm, req2, proxy_res, false, error); + })) { + // Thread-safe to close everything because we are assuming there are no + // requests in flight + shutdown_ssl(socket, true); + shutdown_socket(socket); + close_socket(socket); + success = false; + return false; + } + + if (proxy_res.status == StatusCode::ProxyAuthenticationRequired_407) { + if (!proxy_digest_auth_username_.empty() && + !proxy_digest_auth_password_.empty()) { + std::map auth; + if (detail::parse_www_authenticate(proxy_res, auth, true)) { + proxy_res = Response(); + if (!detail::process_client_socket( + socket.sock, read_timeout_sec_, read_timeout_usec_, + write_timeout_sec_, write_timeout_usec_, max_timeout_msec_, + start_time, [&](Stream &strm) { + Request req3; + req3.method = "CONNECT"; + req3.path = host_and_port_; + req3.headers.insert(detail::make_digest_authentication_header( + req3, auth, 1, detail::random_string(10), + proxy_digest_auth_username_, proxy_digest_auth_password_, + true)); + if (max_timeout_msec_ > 0) { + req3.start_time_ = std::chrono::steady_clock::now(); + } + return process_request(strm, req3, proxy_res, false, error); + })) { + // Thread-safe to close everything because we are assuming there are + // no requests in flight + shutdown_ssl(socket, true); + shutdown_socket(socket); + close_socket(socket); + success = false; + return false; + } + } + } + } + + // If status code is not 200, proxy request is failed. + // Set error to ProxyConnection and return proxy response + // as the response of the request + if (proxy_res.status != StatusCode::OK_200) { + error = Error::ProxyConnection; + res = std::move(proxy_res); + // Thread-safe to close everything because we are assuming there are + // no requests in flight + shutdown_ssl(socket, true); + shutdown_socket(socket); + close_socket(socket); + return false; + } + + return true; +} + +bool SSLClient::load_certs() { + auto ret = true; + + std::call_once(initialize_cert_, [&]() { + std::lock_guard guard(ctx_mutex_); + if (!ca_cert_file_path_.empty()) { + if (!SSL_CTX_load_verify_locations(ctx_, ca_cert_file_path_.c_str(), + nullptr)) { + ret = false; + } + } else if (!ca_cert_dir_path_.empty()) { + if (!SSL_CTX_load_verify_locations(ctx_, nullptr, + ca_cert_dir_path_.c_str())) { + ret = false; + } + } else { + auto loaded = false; +#ifdef _WIN32 + loaded = + detail::load_system_certs_on_windows(SSL_CTX_get_cert_store(ctx_)); +#elif defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) && defined(__APPLE__) +#if TARGET_OS_OSX + loaded = detail::load_system_certs_on_macos(SSL_CTX_get_cert_store(ctx_)); +#endif // TARGET_OS_OSX +#endif // _WIN32 + if (!loaded) { SSL_CTX_set_default_verify_paths(ctx_); } + } + }); + + return ret; +} + +bool SSLClient::initialize_ssl(Socket &socket, Error &error) { + auto ssl = detail::ssl_new( + socket.sock, ctx_, ctx_mutex_, + [&](SSL *ssl2) { + if (server_certificate_verification_) { + if (!load_certs()) { + error = Error::SSLLoadingCerts; + return false; + } + SSL_set_verify(ssl2, SSL_VERIFY_NONE, nullptr); + } + + if (!detail::ssl_connect_or_accept_nonblocking( + socket.sock, ssl2, SSL_connect, connection_timeout_sec_, + connection_timeout_usec_)) { + error = Error::SSLConnection; + return false; + } + + if (server_certificate_verification_) { + auto verification_status = SSLVerifierResponse::NoDecisionMade; + + if (server_certificate_verifier_) { + verification_status = server_certificate_verifier_(ssl2); + } + + if (verification_status == SSLVerifierResponse::CertificateRejected) { + error = Error::SSLServerVerification; + return false; + } + + if (verification_status == SSLVerifierResponse::NoDecisionMade) { + verify_result_ = SSL_get_verify_result(ssl2); + + if (verify_result_ != X509_V_OK) { + error = Error::SSLServerVerification; + return false; + } + + auto server_cert = SSL_get1_peer_certificate(ssl2); + auto se = detail::scope_exit([&] { X509_free(server_cert); }); + + if (server_cert == nullptr) { + error = Error::SSLServerVerification; + return false; + } + + if (server_hostname_verification_) { + if (!verify_host(server_cert)) { + error = Error::SSLServerHostnameVerification; + return false; + } + } + } + } + + return true; + }, + [&](SSL *ssl2) { +#if defined(OPENSSL_IS_BORINGSSL) + SSL_set_tlsext_host_name(ssl2, host_.c_str()); +#else + // NOTE: Direct call instead of using the OpenSSL macro to suppress + // -Wold-style-cast warning + SSL_ctrl(ssl2, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, + static_cast(const_cast(host_.c_str()))); +#endif + return true; + }); + + if (ssl) { + socket.ssl = ssl; + return true; + } + + shutdown_socket(socket); + close_socket(socket); + return false; +} + +void SSLClient::shutdown_ssl(Socket &socket, bool shutdown_gracefully) { + shutdown_ssl_impl(socket, shutdown_gracefully); +} + +void SSLClient::shutdown_ssl_impl(Socket &socket, + bool shutdown_gracefully) { + if (socket.sock == INVALID_SOCKET) { + assert(socket.ssl == nullptr); + return; + } + if (socket.ssl) { + detail::ssl_delete(ctx_mutex_, socket.ssl, socket.sock, + shutdown_gracefully); + socket.ssl = nullptr; + } + assert(socket.ssl == nullptr); +} + +bool SSLClient::process_socket( + const Socket &socket, + std::chrono::time_point start_time, + std::function callback) { + assert(socket.ssl); + return detail::process_client_socket_ssl( + socket.ssl, socket.sock, read_timeout_sec_, read_timeout_usec_, + write_timeout_sec_, write_timeout_usec_, max_timeout_msec_, start_time, + std::move(callback)); +} + +bool SSLClient::is_ssl() const { return true; } + +bool SSLClient::verify_host(X509 *server_cert) const { + /* Quote from RFC2818 section 3.1 "Server Identity" + + If a subjectAltName extension of type dNSName is present, that MUST + be used as the identity. Otherwise, the (most specific) Common Name + field in the Subject field of the certificate MUST be used. Although + the use of the Common Name is existing practice, it is deprecated and + Certification Authorities are encouraged to use the dNSName instead. + + Matching is performed using the matching rules specified by + [RFC2459]. If more than one identity of a given type is present in + the certificate (e.g., more than one dNSName name, a match in any one + of the set is considered acceptable.) Names may contain the wildcard + character * which is considered to match any single domain name + component or component fragment. E.g., *.a.com matches foo.a.com but + not bar.foo.a.com. f*.com matches foo.com but not bar.com. + + In some cases, the URI is specified as an IP address rather than a + hostname. In this case, the iPAddress subjectAltName must be present + in the certificate and must exactly match the IP in the URI. + + */ + return verify_host_with_subject_alt_name(server_cert) || + verify_host_with_common_name(server_cert); +} + +bool +SSLClient::verify_host_with_subject_alt_name(X509 *server_cert) const { + auto ret = false; + + auto type = GEN_DNS; + + struct in6_addr addr6 = {}; + struct in_addr addr = {}; + size_t addr_len = 0; + +#ifndef __MINGW32__ + if (inet_pton(AF_INET6, host_.c_str(), &addr6)) { + type = GEN_IPADD; + addr_len = sizeof(struct in6_addr); + } else if (inet_pton(AF_INET, host_.c_str(), &addr)) { + type = GEN_IPADD; + addr_len = sizeof(struct in_addr); + } +#endif + + auto alt_names = static_cast( + X509_get_ext_d2i(server_cert, NID_subject_alt_name, nullptr, nullptr)); + + if (alt_names) { + auto dsn_matched = false; + auto ip_matched = false; + + auto count = sk_GENERAL_NAME_num(alt_names); + + for (decltype(count) i = 0; i < count && !dsn_matched; i++) { + auto val = sk_GENERAL_NAME_value(alt_names, i); + if (val->type == type) { + auto name = + reinterpret_cast(ASN1_STRING_get0_data(val->d.ia5)); + auto name_len = static_cast(ASN1_STRING_length(val->d.ia5)); + + switch (type) { + case GEN_DNS: dsn_matched = check_host_name(name, name_len); break; + + case GEN_IPADD: + if (!memcmp(&addr6, name, addr_len) || + !memcmp(&addr, name, addr_len)) { + ip_matched = true; + } + break; + } + } + } + + if (dsn_matched || ip_matched) { ret = true; } + } + + GENERAL_NAMES_free(const_cast( + reinterpret_cast(alt_names))); + return ret; +} + +bool SSLClient::verify_host_with_common_name(X509 *server_cert) const { + const auto subject_name = X509_get_subject_name(server_cert); + + if (subject_name != nullptr) { + char name[BUFSIZ]; + auto name_len = X509_NAME_get_text_by_NID(subject_name, NID_commonName, + name, sizeof(name)); + + if (name_len != -1) { + return check_host_name(name, static_cast(name_len)); + } + } + + return false; +} + +bool SSLClient::check_host_name(const char *pattern, + size_t pattern_len) const { + if (host_.size() == pattern_len && host_ == pattern) { return true; } + + // Wildcard match + // https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+bug/376484 + std::vector pattern_components; + detail::split(&pattern[0], &pattern[pattern_len], '.', + [&](const char *b, const char *e) { + pattern_components.emplace_back(b, e); + }); + + if (host_components_.size() != pattern_components.size()) { return false; } + + auto itr = pattern_components.begin(); + for (const auto &h : host_components_) { + auto &p = *itr; + if (p != h && p != "*") { + auto partial_match = (p.size() > 0 && p[p.size() - 1] == '*' && + !p.compare(0, p.size() - 1, h)); + if (!partial_match) { return false; } + } + ++itr; + } + + return true; +} +#endif + +// Universal client implementation +Client::Client(const std::string &scheme_host_port) + : Client(scheme_host_port, std::string(), std::string()) {} + +Client::Client(const std::string &scheme_host_port, + const std::string &client_cert_path, + const std::string &client_key_path) { + const static std::regex re( + R"((?:([a-z]+):\/\/)?(?:\[([a-fA-F\d:]+)\]|([^:/?#]+))(?::(\d+))?)"); + + std::smatch m; + if (std::regex_match(scheme_host_port, m, re)) { + auto scheme = m[1].str(); + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + if (!scheme.empty() && (scheme != "http" && scheme != "https")) { +#else + if (!scheme.empty() && scheme != "http") { +#endif +#ifndef CPPHTTPLIB_NO_EXCEPTIONS + std::string msg = "'" + scheme + "' scheme is not supported."; + throw std::invalid_argument(msg); +#endif + return; + } + + auto is_ssl = scheme == "https"; + + auto host = m[2].str(); + if (host.empty()) { host = m[3].str(); } + + auto port_str = m[4].str(); + auto port = !port_str.empty() ? std::stoi(port_str) : (is_ssl ? 443 : 80); + + if (is_ssl) { +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + cli_ = detail::make_unique(host, port, client_cert_path, + client_key_path); + is_ssl_ = is_ssl; +#endif + } else { + cli_ = detail::make_unique(host, port, client_cert_path, + client_key_path); + } + } else { + // NOTE: Update TEST(UniversalClientImplTest, Ipv6LiteralAddress) + // if port param below changes. + cli_ = detail::make_unique(scheme_host_port, 80, + client_cert_path, client_key_path); + } +} // namespace detail + +Client::Client(const std::string &host, int port) + : cli_(detail::make_unique(host, port)) {} + +Client::Client(const std::string &host, int port, + const std::string &client_cert_path, + const std::string &client_key_path) + : cli_(detail::make_unique(host, port, client_cert_path, + client_key_path)) {} + +Client::~Client() = default; + +bool Client::is_valid() const { + return cli_ != nullptr && cli_->is_valid(); +} + +Result Client::Get(const std::string &path) { return cli_->Get(path); } +Result Client::Get(const std::string &path, const Headers &headers) { + return cli_->Get(path, headers); +} +Result Client::Get(const std::string &path, Progress progress) { + return cli_->Get(path, std::move(progress)); +} +Result Client::Get(const std::string &path, const Headers &headers, + Progress progress) { + return cli_->Get(path, headers, std::move(progress)); +} +Result Client::Get(const std::string &path, + ContentReceiver content_receiver) { + return cli_->Get(path, std::move(content_receiver)); +} +Result Client::Get(const std::string &path, const Headers &headers, + ContentReceiver content_receiver) { + return cli_->Get(path, headers, std::move(content_receiver)); +} +Result Client::Get(const std::string &path, + ContentReceiver content_receiver, Progress progress) { + return cli_->Get(path, std::move(content_receiver), std::move(progress)); +} +Result Client::Get(const std::string &path, const Headers &headers, + ContentReceiver content_receiver, Progress progress) { + return cli_->Get(path, headers, std::move(content_receiver), + std::move(progress)); +} +Result Client::Get(const std::string &path, + ResponseHandler response_handler, + ContentReceiver content_receiver) { + return cli_->Get(path, std::move(response_handler), + std::move(content_receiver)); +} +Result Client::Get(const std::string &path, const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver) { + return cli_->Get(path, headers, std::move(response_handler), + std::move(content_receiver)); +} +Result Client::Get(const std::string &path, + ResponseHandler response_handler, + ContentReceiver content_receiver, Progress progress) { + return cli_->Get(path, std::move(response_handler), + std::move(content_receiver), std::move(progress)); +} +Result Client::Get(const std::string &path, const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver, Progress progress) { + return cli_->Get(path, headers, std::move(response_handler), + std::move(content_receiver), std::move(progress)); +} +Result Client::Get(const std::string &path, const Params ¶ms, + const Headers &headers, Progress progress) { + return cli_->Get(path, params, headers, std::move(progress)); +} +Result Client::Get(const std::string &path, const Params ¶ms, + const Headers &headers, + ContentReceiver content_receiver, Progress progress) { + return cli_->Get(path, params, headers, std::move(content_receiver), + std::move(progress)); +} +Result Client::Get(const std::string &path, const Params ¶ms, + const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver, Progress progress) { + return cli_->Get(path, params, headers, std::move(response_handler), + std::move(content_receiver), std::move(progress)); +} + +Result Client::Head(const std::string &path) { return cli_->Head(path); } +Result Client::Head(const std::string &path, const Headers &headers) { + return cli_->Head(path, headers); +} + +Result Client::Post(const std::string &path) { return cli_->Post(path); } +Result Client::Post(const std::string &path, const Headers &headers) { + return cli_->Post(path, headers); +} +Result Client::Post(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type) { + return cli_->Post(path, body, content_length, content_type); +} +Result Client::Post(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type) { + return cli_->Post(path, headers, body, content_length, content_type); +} +Result Client::Post(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type, Progress progress) { + return cli_->Post(path, headers, body, content_length, content_type, + progress); +} +Result Client::Post(const std::string &path, const std::string &body, + const std::string &content_type) { + return cli_->Post(path, body, content_type); +} +Result Client::Post(const std::string &path, const std::string &body, + const std::string &content_type, Progress progress) { + return cli_->Post(path, body, content_type, progress); +} +Result Client::Post(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type) { + return cli_->Post(path, headers, body, content_type); +} +Result Client::Post(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type, Progress progress) { + return cli_->Post(path, headers, body, content_type, progress); +} +Result Client::Post(const std::string &path, size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return cli_->Post(path, content_length, std::move(content_provider), + content_type); +} +Result Client::Post(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return cli_->Post(path, std::move(content_provider), content_type); +} +Result Client::Post(const std::string &path, const Headers &headers, + size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return cli_->Post(path, headers, content_length, std::move(content_provider), + content_type); +} +Result Client::Post(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return cli_->Post(path, headers, std::move(content_provider), content_type); +} +Result Client::Post(const std::string &path, const Params ¶ms) { + return cli_->Post(path, params); +} +Result Client::Post(const std::string &path, const Headers &headers, + const Params ¶ms) { + return cli_->Post(path, headers, params); +} +Result Client::Post(const std::string &path, const Headers &headers, + const Params ¶ms, Progress progress) { + return cli_->Post(path, headers, params, progress); +} +Result Client::Post(const std::string &path, + const MultipartFormDataItems &items) { + return cli_->Post(path, items); +} +Result Client::Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items) { + return cli_->Post(path, headers, items); +} +Result Client::Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const std::string &boundary) { + return cli_->Post(path, headers, items, boundary); +} +Result +Client::Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const MultipartFormDataProviderItems &provider_items) { + return cli_->Post(path, headers, items, provider_items); +} +Result Client::Put(const std::string &path) { return cli_->Put(path); } +Result Client::Put(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type) { + return cli_->Put(path, body, content_length, content_type); +} +Result Client::Put(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type) { + return cli_->Put(path, headers, body, content_length, content_type); +} +Result Client::Put(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type, Progress progress) { + return cli_->Put(path, headers, body, content_length, content_type, progress); +} +Result Client::Put(const std::string &path, const std::string &body, + const std::string &content_type) { + return cli_->Put(path, body, content_type); +} +Result Client::Put(const std::string &path, const std::string &body, + const std::string &content_type, Progress progress) { + return cli_->Put(path, body, content_type, progress); +} +Result Client::Put(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type) { + return cli_->Put(path, headers, body, content_type); +} +Result Client::Put(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type, Progress progress) { + return cli_->Put(path, headers, body, content_type, progress); +} +Result Client::Put(const std::string &path, size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return cli_->Put(path, content_length, std::move(content_provider), + content_type); +} +Result Client::Put(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return cli_->Put(path, std::move(content_provider), content_type); +} +Result Client::Put(const std::string &path, const Headers &headers, + size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return cli_->Put(path, headers, content_length, std::move(content_provider), + content_type); +} +Result Client::Put(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return cli_->Put(path, headers, std::move(content_provider), content_type); +} +Result Client::Put(const std::string &path, const Params ¶ms) { + return cli_->Put(path, params); +} +Result Client::Put(const std::string &path, const Headers &headers, + const Params ¶ms) { + return cli_->Put(path, headers, params); +} +Result Client::Put(const std::string &path, const Headers &headers, + const Params ¶ms, Progress progress) { + return cli_->Put(path, headers, params, progress); +} +Result Client::Put(const std::string &path, + const MultipartFormDataItems &items) { + return cli_->Put(path, items); +} +Result Client::Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items) { + return cli_->Put(path, headers, items); +} +Result Client::Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const std::string &boundary) { + return cli_->Put(path, headers, items, boundary); +} +Result +Client::Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const MultipartFormDataProviderItems &provider_items) { + return cli_->Put(path, headers, items, provider_items); +} +Result Client::Patch(const std::string &path) { + return cli_->Patch(path); +} +Result Client::Patch(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type) { + return cli_->Patch(path, body, content_length, content_type); +} +Result Client::Patch(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type, + Progress progress) { + return cli_->Patch(path, body, content_length, content_type, progress); +} +Result Client::Patch(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type) { + return cli_->Patch(path, headers, body, content_length, content_type); +} +Result Client::Patch(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type, + Progress progress) { + return cli_->Patch(path, headers, body, content_length, content_type, + progress); +} +Result Client::Patch(const std::string &path, const std::string &body, + const std::string &content_type) { + return cli_->Patch(path, body, content_type); +} +Result Client::Patch(const std::string &path, const std::string &body, + const std::string &content_type, + Progress progress) { + return cli_->Patch(path, body, content_type, progress); +} +Result Client::Patch(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type) { + return cli_->Patch(path, headers, body, content_type); +} +Result Client::Patch(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type, + Progress progress) { + return cli_->Patch(path, headers, body, content_type, progress); +} +Result Client::Patch(const std::string &path, size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return cli_->Patch(path, content_length, std::move(content_provider), + content_type); +} +Result Client::Patch(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return cli_->Patch(path, std::move(content_provider), content_type); +} +Result Client::Patch(const std::string &path, const Headers &headers, + size_t content_length, + ContentProvider content_provider, + const std::string &content_type) { + return cli_->Patch(path, headers, content_length, std::move(content_provider), + content_type); +} +Result Client::Patch(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type) { + return cli_->Patch(path, headers, std::move(content_provider), content_type); +} +Result Client::Delete(const std::string &path) { + return cli_->Delete(path); +} +Result Client::Delete(const std::string &path, const Headers &headers) { + return cli_->Delete(path, headers); +} +Result Client::Delete(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type) { + return cli_->Delete(path, body, content_length, content_type); +} +Result Client::Delete(const std::string &path, const char *body, + size_t content_length, + const std::string &content_type, + Progress progress) { + return cli_->Delete(path, body, content_length, content_type, progress); +} +Result Client::Delete(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type) { + return cli_->Delete(path, headers, body, content_length, content_type); +} +Result Client::Delete(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type, + Progress progress) { + return cli_->Delete(path, headers, body, content_length, content_type, + progress); +} +Result Client::Delete(const std::string &path, const std::string &body, + const std::string &content_type) { + return cli_->Delete(path, body, content_type); +} +Result Client::Delete(const std::string &path, const std::string &body, + const std::string &content_type, + Progress progress) { + return cli_->Delete(path, body, content_type, progress); +} +Result Client::Delete(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type) { + return cli_->Delete(path, headers, body, content_type); +} +Result Client::Delete(const std::string &path, const Headers &headers, + const std::string &body, + const std::string &content_type, + Progress progress) { + return cli_->Delete(path, headers, body, content_type, progress); +} +Result Client::Options(const std::string &path) { + return cli_->Options(path); +} +Result Client::Options(const std::string &path, const Headers &headers) { + return cli_->Options(path, headers); +} + +bool Client::send(Request &req, Response &res, Error &error) { + return cli_->send(req, res, error); +} + +Result Client::send(const Request &req) { return cli_->send(req); } + +void Client::stop() { cli_->stop(); } + +std::string Client::host() const { return cli_->host(); } + +int Client::port() const { return cli_->port(); } + +size_t Client::is_socket_open() const { return cli_->is_socket_open(); } + +socket_t Client::socket() const { return cli_->socket(); } + +void +Client::set_hostname_addr_map(std::map addr_map) { + cli_->set_hostname_addr_map(std::move(addr_map)); +} + +void Client::set_default_headers(Headers headers) { + cli_->set_default_headers(std::move(headers)); +} + +void Client::set_header_writer( + std::function const &writer) { + cli_->set_header_writer(writer); +} + +void Client::set_address_family(int family) { + cli_->set_address_family(family); +} + +void Client::set_tcp_nodelay(bool on) { cli_->set_tcp_nodelay(on); } + +void Client::set_socket_options(SocketOptions socket_options) { + cli_->set_socket_options(std::move(socket_options)); +} + +void Client::set_connection_timeout(time_t sec, time_t usec) { + cli_->set_connection_timeout(sec, usec); +} + +void Client::set_read_timeout(time_t sec, time_t usec) { + cli_->set_read_timeout(sec, usec); +} + +void Client::set_write_timeout(time_t sec, time_t usec) { + cli_->set_write_timeout(sec, usec); +} + +void Client::set_basic_auth(const std::string &username, + const std::string &password) { + cli_->set_basic_auth(username, password); +} +void Client::set_bearer_token_auth(const std::string &token) { + cli_->set_bearer_token_auth(token); +} +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +void Client::set_digest_auth(const std::string &username, + const std::string &password) { + cli_->set_digest_auth(username, password); +} +#endif + +void Client::set_keep_alive(bool on) { cli_->set_keep_alive(on); } +void Client::set_follow_location(bool on) { + cli_->set_follow_location(on); +} + +void Client::set_url_encode(bool on) { cli_->set_url_encode(on); } + +void Client::set_compress(bool on) { cli_->set_compress(on); } + +void Client::set_decompress(bool on) { cli_->set_decompress(on); } + +void Client::set_interface(const std::string &intf) { + cli_->set_interface(intf); +} + +void Client::set_proxy(const std::string &host, int port) { + cli_->set_proxy(host, port); +} +void Client::set_proxy_basic_auth(const std::string &username, + const std::string &password) { + cli_->set_proxy_basic_auth(username, password); +} +void Client::set_proxy_bearer_token_auth(const std::string &token) { + cli_->set_proxy_bearer_token_auth(token); +} +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +void Client::set_proxy_digest_auth(const std::string &username, + const std::string &password) { + cli_->set_proxy_digest_auth(username, password); +} +#endif + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +void Client::enable_server_certificate_verification(bool enabled) { + cli_->enable_server_certificate_verification(enabled); +} + +void Client::enable_server_hostname_verification(bool enabled) { + cli_->enable_server_hostname_verification(enabled); +} + +void Client::set_server_certificate_verifier( + std::function verifier) { + cli_->set_server_certificate_verifier(verifier); +} +#endif + +void Client::set_logger(Logger logger) { + cli_->set_logger(std::move(logger)); +} + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +void Client::set_ca_cert_path(const std::string &ca_cert_file_path, + const std::string &ca_cert_dir_path) { + cli_->set_ca_cert_path(ca_cert_file_path, ca_cert_dir_path); +} + +void Client::set_ca_cert_store(X509_STORE *ca_cert_store) { + if (is_ssl_) { + static_cast(*cli_).set_ca_cert_store(ca_cert_store); + } else { + cli_->set_ca_cert_store(ca_cert_store); + } +} + +void Client::load_ca_cert_store(const char *ca_cert, std::size_t size) { + set_ca_cert_store(cli_->create_ca_cert_store(ca_cert, size)); +} + +long Client::get_openssl_verify_result() const { + if (is_ssl_) { + return static_cast(*cli_).get_openssl_verify_result(); + } + return -1; // NOTE: -1 doesn't match any of X509_V_ERR_??? +} + +SSL_CTX *Client::ssl_context() const { + if (is_ssl_) { return static_cast(*cli_).ssl_context(); } + return nullptr; +} +#endif + +} // namespace httplib diff --git a/vendor/cpp-httplib/httplib.h b/vendor/cpp-httplib/httplib.h index b76a17d07a..7ee219380f 100644 --- a/vendor/cpp-httplib/httplib.h +++ b/vendor/cpp-httplib/httplib.h @@ -8,35 +8,7 @@ #ifndef CPPHTTPLIB_HTTPLIB_H #define CPPHTTPLIB_HTTPLIB_H -#define CPPHTTPLIB_VERSION "0.27.0" -#define CPPHTTPLIB_VERSION_NUM "0x001B00" - -/* - * Platform compatibility check - */ - -#if defined(_WIN32) && !defined(_WIN64) -#if defined(_MSC_VER) -#pragma message( \ - "cpp-httplib doesn't support 32-bit Windows. Please use a 64-bit compiler.") -#else -#warning \ - "cpp-httplib doesn't support 32-bit Windows. Please use a 64-bit compiler." -#endif -#elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ < 8 -#warning \ - "cpp-httplib doesn't support 32-bit platforms. Please use a 64-bit compiler." -#elif defined(__SIZEOF_SIZE_T__) && __SIZEOF_SIZE_T__ < 8 -#warning \ - "cpp-httplib doesn't support platforms where size_t is less than 64 bits." -#endif - -#ifdef _WIN32 -#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0A00 -#error \ - "cpp-httplib doesn't support Windows 8 or lower. Please use Windows 10 or later." -#endif -#endif +#define CPPHTTPLIB_VERSION "0.20.1" /* * Configuration @@ -104,7 +76,7 @@ #ifndef CPPHTTPLIB_IDLE_INTERVAL_USECOND #ifdef _WIN32 -#define CPPHTTPLIB_IDLE_INTERVAL_USECOND 1000 +#define CPPHTTPLIB_IDLE_INTERVAL_USECOND 10000 #else #define CPPHTTPLIB_IDLE_INTERVAL_USECOND 0 #endif @@ -118,10 +90,6 @@ #define CPPHTTPLIB_HEADER_MAX_LENGTH 8192 #endif -#ifndef CPPHTTPLIB_HEADER_MAX_COUNT -#define CPPHTTPLIB_HEADER_MAX_COUNT 100 -#endif - #ifndef CPPHTTPLIB_REDIRECT_MAX_COUNT #define CPPHTTPLIB_REDIRECT_MAX_COUNT 20 #endif @@ -154,10 +122,6 @@ #define CPPHTTPLIB_RECV_BUFSIZ size_t(16384u) #endif -#ifndef CPPHTTPLIB_SEND_BUFSIZ -#define CPPHTTPLIB_SEND_BUFSIZ size_t(16384u) -#endif - #ifndef CPPHTTPLIB_COMPRESSION_BUFSIZ #define CPPHTTPLIB_COMPRESSION_BUFSIZ size_t(16384u) #endif @@ -205,7 +169,11 @@ #pragma comment(lib, "ws2_32.lib") +#ifdef _WIN64 using ssize_t = __int64; +#else +using ssize_t = long; +#endif #endif // _MSC_VER #ifndef S_ISREG @@ -224,13 +192,8 @@ using ssize_t = __int64; #include #include -#if defined(__has_include) -#if __has_include() // afunix.h uses types declared in winsock2.h, so has to be included after it. #include -#define CPPHTTPLIB_HAVE_AFUNIX_H 1 -#endif -#endif #ifndef WSA_FLAG_NO_HANDLE_INHERIT #define WSA_FLAG_NO_HANDLE_INHERIT 0x80 @@ -273,10 +236,6 @@ using socket_t = int; #endif #endif //_WIN32 -#if defined(__APPLE__) -#include -#endif - #include #include #include @@ -306,15 +265,6 @@ using socket_t = int; #include #include -#if defined(CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO) || \ - defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) -#if TARGET_OS_MAC -#include -#include -#endif -#endif // CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO or - // CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN - #ifdef CPPHTTPLIB_OPENSSL_SUPPORT #ifdef _WIN32 #include @@ -329,13 +279,13 @@ using socket_t = int; #ifdef _MSC_VER #pragma comment(lib, "crypt32.lib") #endif -#endif // _WIN32 - -#if defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) -#if TARGET_OS_MAC +#elif defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) && defined(__APPLE__) +#include +#if TARGET_OS_OSX +#include #include -#endif -#endif // CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO +#endif // TARGET_OS_OSX +#endif // _WIN32 #include #include @@ -358,7 +308,7 @@ using socket_t = int; #error Sorry, OpenSSL versions prior to 3.0.0 are not supported #endif -#endif // CPPHTTPLIB_OPENSSL_SUPPORT +#endif #ifdef CPPHTTPLIB_ZLIB_SUPPORT #include @@ -456,10 +406,6 @@ struct hash { } }; -template -using unordered_set = std::unordered_set; - } // namespace case_ignore // This is based on @@ -583,53 +529,19 @@ using Headers = using Params = std::multimap; using Match = std::smatch; -using DownloadProgress = std::function; -using UploadProgress = std::function; +using Progress = std::function; struct Response; using ResponseHandler = std::function; -struct FormData { - std::string name; - std::string content; - std::string filename; - std::string content_type; - Headers headers; -}; - -struct FormField { - std::string name; - std::string content; - Headers headers; -}; -using FormFields = std::multimap; - -using FormFiles = std::multimap; - struct MultipartFormData { - FormFields fields; // Text fields from multipart - FormFiles files; // Files from multipart - - // Text field access - std::string get_field(const std::string &key, size_t id = 0) const; - std::vector get_fields(const std::string &key) const; - bool has_field(const std::string &key) const; - size_t get_field_count(const std::string &key) const; - - // File access - FormData get_file(const std::string &key, size_t id = 0) const; - std::vector get_files(const std::string &key) const; - bool has_file(const std::string &key) const; - size_t get_file_count(const std::string &key) const; -}; - -struct UploadFormData { std::string name; std::string content; std::string filename; std::string content_type; }; -using UploadFormDataItems = std::vector; +using MultipartFormDataItems = std::vector; +using MultipartFormDataMap = std::multimap; class DataSink { public: @@ -672,34 +584,37 @@ using ContentProviderWithoutLength = using ContentProviderResourceReleaser = std::function; -struct FormDataProvider { +struct MultipartFormDataProvider { std::string name; ContentProviderWithoutLength provider; std::string filename; std::string content_type; }; -using FormDataProviderItems = std::vector; +using MultipartFormDataProviderItems = std::vector; -using ContentReceiverWithProgress = std::function; +using ContentReceiverWithProgress = + std::function; using ContentReceiver = std::function; -using FormDataHeader = std::function; +using MultipartContentHeader = + std::function; class ContentReader { public: using Reader = std::function; - using FormDataReader = - std::function; + using MultipartReader = std::function; - ContentReader(Reader reader, FormDataReader multipart_reader) + ContentReader(Reader reader, MultipartReader multipart_reader) : reader_(std::move(reader)), - formdata_reader_(std::move(multipart_reader)) {} + multipart_reader_(std::move(multipart_reader)) {} - bool operator()(FormDataHeader header, ContentReceiver receiver) const { - return formdata_reader_(std::move(header), std::move(receiver)); + bool operator()(MultipartContentHeader header, + ContentReceiver receiver) const { + return multipart_reader_(std::move(header), std::move(receiver)); } bool operator()(ContentReceiver receiver) const { @@ -707,7 +622,7 @@ public: } Reader reader_; - FormDataReader formdata_reader_; + MultipartReader multipart_reader_; }; using Range = std::pair; @@ -716,10 +631,8 @@ using Ranges = std::vector; struct Request { std::string method; std::string path; - std::string matched_route; Params params; Headers headers; - Headers trailers; std::string body; std::string remote_addr; @@ -730,18 +643,16 @@ struct Request { // for server std::string version; std::string target; - MultipartFormData form; + MultipartFormDataMap files; Ranges ranges; Match matches; std::unordered_map path_params; std::function is_connection_closed = []() { return true; }; // for client - std::vector accept_content_types; ResponseHandler response_handler; ContentReceiverWithProgress content_receiver; - DownloadProgress download_progress; - UploadProgress upload_progress; + Progress progress; #ifdef CPPHTTPLIB_OPENSSL_SUPPORT const SSL *ssl = nullptr; #endif @@ -749,21 +660,21 @@ struct Request { bool has_header(const std::string &key) const; std::string get_header_value(const std::string &key, const char *def = "", size_t id = 0) const; - size_t get_header_value_u64(const std::string &key, size_t def = 0, - size_t id = 0) const; + uint64_t get_header_value_u64(const std::string &key, uint64_t def = 0, + size_t id = 0) const; size_t get_header_value_count(const std::string &key) const; void set_header(const std::string &key, const std::string &val); - bool has_trailer(const std::string &key) const; - std::string get_trailer_value(const std::string &key, size_t id = 0) const; - size_t get_trailer_value_count(const std::string &key) const; - bool has_param(const std::string &key) const; std::string get_param_value(const std::string &key, size_t id = 0) const; size_t get_param_value_count(const std::string &key) const; bool is_multipart_form_data() const; + bool has_file(const std::string &key) const; + MultipartFormData get_file_value(const std::string &key) const; + std::vector get_file_values(const std::string &key) const; + // private members... size_t redirect_count_ = CPPHTTPLIB_REDIRECT_MAX_COUNT; size_t content_length_ = 0; @@ -779,22 +690,17 @@ struct Response { int status = -1; std::string reason; Headers headers; - Headers trailers; std::string body; std::string location; // Redirect location bool has_header(const std::string &key) const; std::string get_header_value(const std::string &key, const char *def = "", size_t id = 0) const; - size_t get_header_value_u64(const std::string &key, size_t def = 0, - size_t id = 0) const; + uint64_t get_header_value_u64(const std::string &key, uint64_t def = 0, + size_t id = 0) const; size_t get_header_value_count(const std::string &key) const; void set_header(const std::string &key, const std::string &val); - bool has_trailer(const std::string &key) const; - std::string get_trailer_value(const std::string &key, size_t id = 0) const; - size_t get_trailer_value_count(const std::string &key) const; - void set_redirect(const std::string &url, int status = StatusCode::Found_302); void set_content(const char *s, size_t n, const std::string &content_type); void set_content(const std::string &s, const std::string &content_type); @@ -954,10 +860,6 @@ private: using Logger = std::function; -// Forward declaration for Error type -enum class Error; -using ErrorLogger = std::function; - using SocketOptions = std::function; namespace detail { @@ -980,16 +882,10 @@ namespace detail { class MatcherBase { public: - MatcherBase(std::string pattern) : pattern_(pattern) {} virtual ~MatcherBase() = default; - const std::string &pattern() const { return pattern_; } - // Match request path and populate its matches and virtual bool match(Request &request) const = 0; - -private: - std::string pattern_; }; /** @@ -1041,8 +937,7 @@ private: */ class RegexMatcher final : public MatcherBase { public: - RegexMatcher(const std::string &pattern) - : MatcherBase(pattern), regex_(pattern) {} + RegexMatcher(const std::string &pattern) : regex_(pattern) {} bool match(Request &request) const override; @@ -1052,9 +947,6 @@ private: ssize_t write_headers(Stream &strm, const Headers &headers); -std::string make_host_and_port_string(const std::string &host, int port, - bool is_ssl); - } // namespace detail class Server { @@ -1112,16 +1004,11 @@ public: } Server &set_exception_handler(ExceptionHandler handler); - Server &set_pre_routing_handler(HandlerWithResponse handler); Server &set_post_routing_handler(Handler handler); - Server &set_pre_request_handler(HandlerWithResponse handler); - Server &set_expect_100_continue_handler(Expect100ContinueHandler handler); Server &set_logger(Logger logger); - Server &set_pre_compression_logger(Logger logger); - Server &set_error_logger(ErrorLogger error_logger); Server &set_address_family(int family); Server &set_tcp_nodelay(bool on); @@ -1132,8 +1019,6 @@ public: Server & set_header_writer(std::function const &writer); - Server &set_trusted_proxies(const std::vector &proxies); - Server &set_keep_alive_max_count(size_t count); Server &set_keep_alive_timeout(time_t sec); @@ -1172,9 +1057,6 @@ protected: const std::function &setup_request); std::atomic svr_sock_{INVALID_SOCKET}; - - std::vector trusted_proxies_; - size_t keep_alive_max_count_ = CPPHTTPLIB_KEEPALIVE_MAX_COUNT; time_t keep_alive_timeout_sec_ = CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND; time_t read_timeout_sec_ = CPPHTTPLIB_SERVER_READ_TIMEOUT_SECOND; @@ -1205,7 +1087,8 @@ private: bool listen_internal(); bool routing(Request &req, Response &res, Stream &strm); - bool handle_file_request(const Request &req, Response &res); + bool handle_file_request(const Request &req, Response &res, + bool head = false); bool dispatch_request(Request &req, Response &res, const Handlers &handlers) const; bool dispatch_request_for_content_reader( @@ -1226,23 +1109,18 @@ private: Response &res, const std::string &boundary, const std::string &content_type); bool read_content(Stream &strm, Request &req, Response &res); - bool read_content_with_content_receiver(Stream &strm, Request &req, - Response &res, - ContentReceiver receiver, - FormDataHeader multipart_header, - ContentReceiver multipart_receiver); + bool + read_content_with_content_receiver(Stream &strm, Request &req, Response &res, + ContentReceiver receiver, + MultipartContentHeader multipart_header, + ContentReceiver multipart_receiver); bool read_content_core(Stream &strm, Request &req, Response &res, ContentReceiver receiver, - FormDataHeader multipart_header, + MultipartContentHeader multipart_header, ContentReceiver multipart_receiver) const; virtual bool process_and_close_socket(socket_t sock); - void output_log(const Request &req, const Response &res) const; - void output_pre_compression_log(const Request &req, - const Response &res) const; - void output_error_log(const Error &err, const Request *req) const; - std::atomic is_running_{false}; std::atomic is_decommissioned{false}; @@ -1271,13 +1149,9 @@ private: ExceptionHandler exception_handler_; HandlerWithResponse pre_routing_handler_; Handler post_routing_handler_; - HandlerWithResponse pre_request_handler_; Expect100ContinueHandler expect_100_continue_handler_; - mutable std::mutex logger_mutex_; Logger logger_; - Logger pre_compression_logger_; - ErrorLogger error_logger_; int address_family_ = AF_UNSPEC; bool tcp_nodelay_ = CPPHTTPLIB_TCP_NODELAY; @@ -1306,22 +1180,6 @@ enum class Error { Compression, ConnectionTimeout, ProxyConnection, - ResourceExhaustion, - TooManyFormDataFiles, - ExceedMaxPayloadSize, - ExceedUriMaxLength, - ExceedMaxSocketDescriptorCount, - InvalidRequestLine, - InvalidHTTPMethod, - InvalidHTTPVersion, - InvalidHeaders, - MultipartParsing, - OpenFile, - Listen, - GetSockName, - UnsupportedAddressFamily, - HTTPParsing, - InvalidRangeHeader, // For internal use only SSLPeerCouldBeClosed_, @@ -1338,17 +1196,6 @@ public: Headers &&request_headers = Headers{}) : res_(std::move(res)), err_(err), request_headers_(std::move(request_headers)) {} -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - Result(std::unique_ptr &&res, Error err, Headers &&request_headers, - int ssl_error) - : res_(std::move(res)), err_(err), - request_headers_(std::move(request_headers)), ssl_error_(ssl_error) {} - Result(std::unique_ptr &&res, Error err, Headers &&request_headers, - int ssl_error, unsigned long ssl_openssl_error) - : res_(std::move(res)), err_(err), - request_headers_(std::move(request_headers)), ssl_error_(ssl_error), - ssl_openssl_error_(ssl_openssl_error) {} -#endif // Response operator bool() const { return res_ != nullptr; } bool operator==(std::nullptr_t) const { return res_ == nullptr; } @@ -1363,30 +1210,19 @@ public: // Error Error error() const { return err_; } -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - // SSL Error - int ssl_error() const { return ssl_error_; } - // OpenSSL Error - unsigned long ssl_openssl_error() const { return ssl_openssl_error_; } -#endif - // Request Headers bool has_request_header(const std::string &key) const; std::string get_request_header_value(const std::string &key, const char *def = "", size_t id = 0) const; - size_t get_request_header_value_u64(const std::string &key, size_t def = 0, - size_t id = 0) const; + uint64_t get_request_header_value_u64(const std::string &key, + uint64_t def = 0, size_t id = 0) const; size_t get_request_header_value_count(const std::string &key) const; private: std::unique_ptr res_; Error err_ = Error::Unknown; Headers request_headers_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - int ssl_error_ = 0; - unsigned long ssl_openssl_error_ = 0; -#endif }; class ClientImpl { @@ -1403,86 +1239,185 @@ public: virtual bool is_valid() const; - // clang-format off - Result Get(const std::string &path, DownloadProgress progress = nullptr); - Result Get(const std::string &path, ContentReceiver content_receiver, DownloadProgress progress = nullptr); - Result Get(const std::string &path, ResponseHandler response_handler, ContentReceiver content_receiver, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Headers &headers, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Headers &headers, ContentReceiver content_receiver, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, ContentReceiver content_receiver, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, DownloadProgress progress = nullptr); + Result Get(const std::string &path); + Result Get(const std::string &path, const Headers &headers); + Result Get(const std::string &path, Progress progress); + Result Get(const std::string &path, const Headers &headers, + Progress progress); + Result Get(const std::string &path, ContentReceiver content_receiver); + Result Get(const std::string &path, const Headers &headers, + ContentReceiver content_receiver); + Result Get(const std::string &path, ContentReceiver content_receiver, + Progress progress); + Result Get(const std::string &path, const Headers &headers, + ContentReceiver content_receiver, Progress progress); + Result Get(const std::string &path, ResponseHandler response_handler, + ContentReceiver content_receiver); + Result Get(const std::string &path, const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver); + Result Get(const std::string &path, ResponseHandler response_handler, + ContentReceiver content_receiver, Progress progress); + Result Get(const std::string &path, const Headers &headers, + ResponseHandler response_handler, ContentReceiver content_receiver, + Progress progress); + + Result Get(const std::string &path, const Params ¶ms, + const Headers &headers, Progress progress = nullptr); + Result Get(const std::string &path, const Params ¶ms, + const Headers &headers, ContentReceiver content_receiver, + Progress progress = nullptr); + Result Get(const std::string &path, const Params ¶ms, + const Headers &headers, ResponseHandler response_handler, + ContentReceiver content_receiver, Progress progress = nullptr); Result Head(const std::string &path); Result Head(const std::string &path, const Headers &headers); Result Post(const std::string &path); - Result Post(const std::string &path, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Params ¶ms); - Result Post(const std::string &path, const UploadFormDataItems &items, UploadProgress progress = nullptr); Result Post(const std::string &path, const Headers &headers); - Result Post(const std::string &path, const Headers &headers, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, const Params ¶ms); - Result Post(const std::string &path, const Headers &headers, const UploadFormDataItems &items, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const std::string &boundary, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const FormDataProviderItems &provider_items, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, ContentReceiver content_receiver, DownloadProgress progress = nullptr); + Result Post(const std::string &path, const char *body, size_t content_length, + const std::string &content_type); + Result Post(const std::string &path, const Headers &headers, const char *body, + size_t content_length, const std::string &content_type); + Result Post(const std::string &path, const Headers &headers, const char *body, + size_t content_length, const std::string &content_type, + Progress progress); + Result Post(const std::string &path, const std::string &body, + const std::string &content_type); + Result Post(const std::string &path, const std::string &body, + const std::string &content_type, Progress progress); + Result Post(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type); + Result Post(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type, + Progress progress); + Result Post(const std::string &path, size_t content_length, + ContentProvider content_provider, + const std::string &content_type); + Result Post(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type); + Result Post(const std::string &path, const Headers &headers, + size_t content_length, ContentProvider content_provider, + const std::string &content_type); + Result Post(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type); + Result Post(const std::string &path, const Params ¶ms); + Result Post(const std::string &path, const Headers &headers, + const Params ¶ms); + Result Post(const std::string &path, const Headers &headers, + const Params ¶ms, Progress progress); + Result Post(const std::string &path, const MultipartFormDataItems &items); + Result Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items); + Result Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, const std::string &boundary); + Result Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const MultipartFormDataProviderItems &provider_items); Result Put(const std::string &path); - Result Put(const std::string &path, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); + Result Put(const std::string &path, const char *body, size_t content_length, + const std::string &content_type); + Result Put(const std::string &path, const Headers &headers, const char *body, + size_t content_length, const std::string &content_type); + Result Put(const std::string &path, const Headers &headers, const char *body, + size_t content_length, const std::string &content_type, + Progress progress); + Result Put(const std::string &path, const std::string &body, + const std::string &content_type); + Result Put(const std::string &path, const std::string &body, + const std::string &content_type, Progress progress); + Result Put(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type); + Result Put(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type, + Progress progress); + Result Put(const std::string &path, size_t content_length, + ContentProvider content_provider, const std::string &content_type); + Result Put(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type); + Result Put(const std::string &path, const Headers &headers, + size_t content_length, ContentProvider content_provider, + const std::string &content_type); + Result Put(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type); Result Put(const std::string &path, const Params ¶ms); - Result Put(const std::string &path, const UploadFormDataItems &items, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers); - Result Put(const std::string &path, const Headers &headers, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, const Params ¶ms); - Result Put(const std::string &path, const Headers &headers, const UploadFormDataItems &items, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const std::string &boundary, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const FormDataProviderItems &provider_items, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, ContentReceiver content_receiver, DownloadProgress progress = nullptr); + Result Put(const std::string &path, const Headers &headers, + const Params ¶ms); + Result Put(const std::string &path, const Headers &headers, + const Params ¶ms, Progress progress); + Result Put(const std::string &path, const MultipartFormDataItems &items); + Result Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items); + Result Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, const std::string &boundary); + Result Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const MultipartFormDataProviderItems &provider_items); Result Patch(const std::string &path); - Result Patch(const std::string &path, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Params ¶ms); - Result Patch(const std::string &path, const UploadFormDataItems &items, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, const Params ¶ms); - Result Patch(const std::string &path, const Headers &headers, const UploadFormDataItems &items, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const std::string &boundary, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const FormDataProviderItems &provider_items, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, ContentReceiver content_receiver, DownloadProgress progress = nullptr); + Result Patch(const std::string &path, const char *body, size_t content_length, + const std::string &content_type); + Result Patch(const std::string &path, const char *body, size_t content_length, + const std::string &content_type, Progress progress); + Result Patch(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type); + Result Patch(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type, Progress progress); + Result Patch(const std::string &path, const std::string &body, + const std::string &content_type); + Result Patch(const std::string &path, const std::string &body, + const std::string &content_type, Progress progress); + Result Patch(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type); + Result Patch(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type, + Progress progress); + Result Patch(const std::string &path, size_t content_length, + ContentProvider content_provider, + const std::string &content_type); + Result Patch(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type); + Result Patch(const std::string &path, const Headers &headers, + size_t content_length, ContentProvider content_provider, + const std::string &content_type); + Result Patch(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type); - Result Delete(const std::string &path, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const char *body, size_t content_length, const std::string &content_type, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const std::string &body, const std::string &content_type, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const Params ¶ms, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const Headers &headers, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const Headers &headers, const char *body, size_t content_length, const std::string &content_type, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const Headers &headers, const Params ¶ms, DownloadProgress progress = nullptr); + Result Delete(const std::string &path); + Result Delete(const std::string &path, const Headers &headers); + Result Delete(const std::string &path, const char *body, + size_t content_length, const std::string &content_type); + Result Delete(const std::string &path, const char *body, + size_t content_length, const std::string &content_type, + Progress progress); + Result Delete(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type); + Result Delete(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type, Progress progress); + Result Delete(const std::string &path, const std::string &body, + const std::string &content_type); + Result Delete(const std::string &path, const std::string &body, + const std::string &content_type, Progress progress); + Result Delete(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type); + Result Delete(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type, + Progress progress); Result Options(const std::string &path); Result Options(const std::string &path, const Headers &headers); - // clang-format on bool send(Request &req, Response &res, Error &error); Result send(const Request &req); @@ -1534,7 +1469,7 @@ public: void set_keep_alive(bool on); void set_follow_location(bool on); - void set_path_encode(bool on); + void set_url_encode(bool on); void set_compress(bool on); @@ -1566,7 +1501,6 @@ public: #endif void set_logger(Logger logger); - void set_error_logger(ErrorLogger error_logger); protected: struct Socket { @@ -1599,9 +1533,6 @@ protected: void copy_settings(const ClientImpl &rhs); - void output_log(const Request &req, const Response &res) const; - void output_error_log(const Error &err, const Request *req) const; - // Socket endpoint information const std::string host_; const int port_; @@ -1650,7 +1581,7 @@ protected: bool keep_alive_ = false; bool follow_location_ = false; - bool path_encode_ = true; + bool url_encode_ = true; int address_family_ = AF_UNSPEC; bool tcp_nodelay_ = CPPHTTPLIB_TCP_NODELAY; @@ -1686,14 +1617,7 @@ protected: std::function server_certificate_verifier_; #endif - mutable std::mutex logger_mutex_; Logger logger_; - ErrorLogger error_logger_; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - int last_ssl_error_ = 0; - unsigned long last_openssl_error_ = 0; -#endif private: bool send_(Request &req, Response &res, Error &error); @@ -1705,11 +1629,6 @@ private: bool write_request(Stream &strm, Request &req, bool close_connection, Error &error); bool redirect(Request &req, Response &res, Error &error); - bool create_redirect_client(const std::string &scheme, - const std::string &host, int port, Request &req, - Response &res, const std::string &path, - const std::string &location, Error &error); - template void setup_redirect_client(ClientType &client); bool handle_request(Stream &strm, Request &req, Response &res, bool close_connection, Error &error); std::unique_ptr send_with_content_provider( @@ -1722,10 +1641,12 @@ private: const Headers &headers, const char *body, size_t content_length, ContentProvider content_provider, ContentProviderWithoutLength content_provider_without_length, - const std::string &content_type, UploadProgress progress); + const std::string &content_type, Progress progress); ContentProviderWithoutLength get_multipart_content_provider( - const std::string &boundary, const UploadFormDataItems &items, - const FormDataProviderItems &provider_items) const; + const std::string &boundary, const MultipartFormDataItems &items, + const MultipartFormDataProviderItems &provider_items) const; + + std::string adjust_host_string(const std::string &host) const; virtual bool process_socket(const Socket &socket, @@ -1757,86 +1678,185 @@ public: bool is_valid() const; - // clang-format off - Result Get(const std::string &path, DownloadProgress progress = nullptr); - Result Get(const std::string &path, ContentReceiver content_receiver, DownloadProgress progress = nullptr); - Result Get(const std::string &path, ResponseHandler response_handler, ContentReceiver content_receiver, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Headers &headers, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Headers &headers, ContentReceiver content_receiver, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, ContentReceiver content_receiver, DownloadProgress progress = nullptr); - Result Get(const std::string &path, const Params ¶ms, const Headers &headers, ResponseHandler response_handler, ContentReceiver content_receiver, DownloadProgress progress = nullptr); + Result Get(const std::string &path); + Result Get(const std::string &path, const Headers &headers); + Result Get(const std::string &path, Progress progress); + Result Get(const std::string &path, const Headers &headers, + Progress progress); + Result Get(const std::string &path, ContentReceiver content_receiver); + Result Get(const std::string &path, const Headers &headers, + ContentReceiver content_receiver); + Result Get(const std::string &path, ContentReceiver content_receiver, + Progress progress); + Result Get(const std::string &path, const Headers &headers, + ContentReceiver content_receiver, Progress progress); + Result Get(const std::string &path, ResponseHandler response_handler, + ContentReceiver content_receiver); + Result Get(const std::string &path, const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver); + Result Get(const std::string &path, const Headers &headers, + ResponseHandler response_handler, ContentReceiver content_receiver, + Progress progress); + Result Get(const std::string &path, ResponseHandler response_handler, + ContentReceiver content_receiver, Progress progress); + + Result Get(const std::string &path, const Params ¶ms, + const Headers &headers, Progress progress = nullptr); + Result Get(const std::string &path, const Params ¶ms, + const Headers &headers, ContentReceiver content_receiver, + Progress progress = nullptr); + Result Get(const std::string &path, const Params ¶ms, + const Headers &headers, ResponseHandler response_handler, + ContentReceiver content_receiver, Progress progress = nullptr); Result Head(const std::string &path); Result Head(const std::string &path, const Headers &headers); Result Post(const std::string &path); - Result Post(const std::string &path, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Params ¶ms); - Result Post(const std::string &path, const UploadFormDataItems &items, UploadProgress progress = nullptr); Result Post(const std::string &path, const Headers &headers); - Result Post(const std::string &path, const Headers &headers, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, const Params ¶ms); - Result Post(const std::string &path, const Headers &headers, const UploadFormDataItems &items, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const std::string &boundary, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const FormDataProviderItems &provider_items, UploadProgress progress = nullptr); - Result Post(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, ContentReceiver content_receiver, DownloadProgress progress = nullptr); + Result Post(const std::string &path, const char *body, size_t content_length, + const std::string &content_type); + Result Post(const std::string &path, const Headers &headers, const char *body, + size_t content_length, const std::string &content_type); + Result Post(const std::string &path, const Headers &headers, const char *body, + size_t content_length, const std::string &content_type, + Progress progress); + Result Post(const std::string &path, const std::string &body, + const std::string &content_type); + Result Post(const std::string &path, const std::string &body, + const std::string &content_type, Progress progress); + Result Post(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type); + Result Post(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type, + Progress progress); + Result Post(const std::string &path, size_t content_length, + ContentProvider content_provider, + const std::string &content_type); + Result Post(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type); + Result Post(const std::string &path, const Headers &headers, + size_t content_length, ContentProvider content_provider, + const std::string &content_type); + Result Post(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type); + Result Post(const std::string &path, const Params ¶ms); + Result Post(const std::string &path, const Headers &headers, + const Params ¶ms); + Result Post(const std::string &path, const Headers &headers, + const Params ¶ms, Progress progress); + Result Post(const std::string &path, const MultipartFormDataItems &items); + Result Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items); + Result Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, const std::string &boundary); + Result Post(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const MultipartFormDataProviderItems &provider_items); Result Put(const std::string &path); - Result Put(const std::string &path, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); + Result Put(const std::string &path, const char *body, size_t content_length, + const std::string &content_type); + Result Put(const std::string &path, const Headers &headers, const char *body, + size_t content_length, const std::string &content_type); + Result Put(const std::string &path, const Headers &headers, const char *body, + size_t content_length, const std::string &content_type, + Progress progress); + Result Put(const std::string &path, const std::string &body, + const std::string &content_type); + Result Put(const std::string &path, const std::string &body, + const std::string &content_type, Progress progress); + Result Put(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type); + Result Put(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type, + Progress progress); + Result Put(const std::string &path, size_t content_length, + ContentProvider content_provider, const std::string &content_type); + Result Put(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type); + Result Put(const std::string &path, const Headers &headers, + size_t content_length, ContentProvider content_provider, + const std::string &content_type); + Result Put(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type); Result Put(const std::string &path, const Params ¶ms); - Result Put(const std::string &path, const UploadFormDataItems &items, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers); - Result Put(const std::string &path, const Headers &headers, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, const Params ¶ms); - Result Put(const std::string &path, const Headers &headers, const UploadFormDataItems &items, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const std::string &boundary, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const FormDataProviderItems &provider_items, UploadProgress progress = nullptr); - Result Put(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, ContentReceiver content_receiver, DownloadProgress progress = nullptr); + Result Put(const std::string &path, const Headers &headers, + const Params ¶ms); + Result Put(const std::string &path, const Headers &headers, + const Params ¶ms, Progress progress); + Result Put(const std::string &path, const MultipartFormDataItems &items); + Result Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items); + Result Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, const std::string &boundary); + Result Put(const std::string &path, const Headers &headers, + const MultipartFormDataItems &items, + const MultipartFormDataProviderItems &provider_items); Result Patch(const std::string &path); - Result Patch(const std::string &path, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Params ¶ms); - Result Patch(const std::string &path, const UploadFormDataItems &items, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers); - Result Patch(const std::string &path, const Headers &headers, const char *body, size_t content_length, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, size_t content_length, ContentProvider content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, ContentProviderWithoutLength content_provider, const std::string &content_type, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, const Params ¶ms); - Result Patch(const std::string &path, const Headers &headers, const UploadFormDataItems &items, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const std::string &boundary, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, const UploadFormDataItems &items, const FormDataProviderItems &provider_items, UploadProgress progress = nullptr); - Result Patch(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, ContentReceiver content_receiver, DownloadProgress progress = nullptr); + Result Patch(const std::string &path, const char *body, size_t content_length, + const std::string &content_type); + Result Patch(const std::string &path, const char *body, size_t content_length, + const std::string &content_type, Progress progress); + Result Patch(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type); + Result Patch(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type, Progress progress); + Result Patch(const std::string &path, const std::string &body, + const std::string &content_type); + Result Patch(const std::string &path, const std::string &body, + const std::string &content_type, Progress progress); + Result Patch(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type); + Result Patch(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type, + Progress progress); + Result Patch(const std::string &path, size_t content_length, + ContentProvider content_provider, + const std::string &content_type); + Result Patch(const std::string &path, + ContentProviderWithoutLength content_provider, + const std::string &content_type); + Result Patch(const std::string &path, const Headers &headers, + size_t content_length, ContentProvider content_provider, + const std::string &content_type); + Result Patch(const std::string &path, const Headers &headers, + ContentProviderWithoutLength content_provider, + const std::string &content_type); - Result Delete(const std::string &path, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const char *body, size_t content_length, const std::string &content_type, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const std::string &body, const std::string &content_type, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const Params ¶ms, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const Headers &headers, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const Headers &headers, const char *body, size_t content_length, const std::string &content_type, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const Headers &headers, const std::string &body, const std::string &content_type, DownloadProgress progress = nullptr); - Result Delete(const std::string &path, const Headers &headers, const Params ¶ms, DownloadProgress progress = nullptr); + Result Delete(const std::string &path); + Result Delete(const std::string &path, const Headers &headers); + Result Delete(const std::string &path, const char *body, + size_t content_length, const std::string &content_type); + Result Delete(const std::string &path, const char *body, + size_t content_length, const std::string &content_type, + Progress progress); + Result Delete(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type); + Result Delete(const std::string &path, const Headers &headers, + const char *body, size_t content_length, + const std::string &content_type, Progress progress); + Result Delete(const std::string &path, const std::string &body, + const std::string &content_type); + Result Delete(const std::string &path, const std::string &body, + const std::string &content_type, Progress progress); + Result Delete(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type); + Result Delete(const std::string &path, const Headers &headers, + const std::string &body, const std::string &content_type, + Progress progress); Result Options(const std::string &path); Result Options(const std::string &path, const Headers &headers); - // clang-format on bool send(Request &req, Response &res, Error &error); Result send(const Request &req); @@ -1887,7 +1907,6 @@ public: void set_keep_alive(bool on); void set_follow_location(bool on); - void set_path_encode(bool on); void set_url_encode(bool on); void set_compress(bool on); @@ -1913,7 +1932,6 @@ public: #endif void set_logger(Logger logger); - void set_error_logger(ErrorLogger error_logger); // SSL #ifdef CPPHTTPLIB_OPENSSL_SUPPORT @@ -1959,17 +1977,11 @@ public: void update_certs(X509 *cert, EVP_PKEY *private_key, X509_STORE *client_ca_cert_store = nullptr); - int ssl_last_error() const { return last_ssl_error_; } - private: bool process_and_close_socket(socket_t sock) override; - STACK_OF(X509_NAME) * extract_ca_names_from_x509_store(X509_STORE *store); - SSL_CTX *ctx_; std::mutex ctx_mutex_; - - int last_ssl_error_ = 0; }; class SSLClient final : public ClientImpl { @@ -2054,14 +2066,12 @@ template inline constexpr size_t str_len(const char (&)[N]) { } inline bool is_numeric(const std::string &str) { - return !str.empty() && - std::all_of(str.cbegin(), str.cend(), - [](unsigned char c) { return std::isdigit(c); }); + return !str.empty() && std::all_of(str.begin(), str.end(), ::isdigit); } -inline size_t get_header_value_u64(const Headers &headers, - const std::string &key, size_t def, - size_t id, bool &is_invalid_value) { +inline uint64_t get_header_value_u64(const Headers &headers, + const std::string &key, uint64_t def, + size_t id, bool &is_invalid_value) { is_invalid_value = false; auto rng = headers.equal_range(key); auto it = rng.first; @@ -2076,22 +2086,22 @@ inline size_t get_header_value_u64(const Headers &headers, return def; } -inline size_t get_header_value_u64(const Headers &headers, - const std::string &key, size_t def, - size_t id) { - auto dummy = false; +inline uint64_t get_header_value_u64(const Headers &headers, + const std::string &key, uint64_t def, + size_t id) { + bool dummy = false; return get_header_value_u64(headers, key, def, id, dummy); } } // namespace detail -inline size_t Request::get_header_value_u64(const std::string &key, size_t def, - size_t id) const { +inline uint64_t Request::get_header_value_u64(const std::string &key, + uint64_t def, size_t id) const { return detail::get_header_value_u64(headers, key, def, id); } -inline size_t Response::get_header_value_u64(const std::string &key, size_t def, - size_t id) const { +inline uint64_t Response::get_header_value_u64(const std::string &key, + uint64_t def, size_t id) const { return detail::get_header_value_u64(headers, key, def, id); } @@ -2248,7 +2258,6 @@ Server::set_idle_interval(const std::chrono::duration &duration) { inline std::string to_string(const Error error) { switch (error) { case Error::Success: return "Success (no error)"; - case Error::Unknown: return "Unknown"; case Error::Connection: return "Could not establish connection"; case Error::BindIPAddress: return "Failed to bind IP address"; case Error::Read: return "Failed to read connection"; @@ -2265,23 +2274,7 @@ inline std::string to_string(const Error error) { case Error::Compression: return "Compression failed"; case Error::ConnectionTimeout: return "Connection timed out"; case Error::ProxyConnection: return "Proxy connection failed"; - case Error::ResourceExhaustion: return "Resource exhaustion"; - case Error::TooManyFormDataFiles: return "Too many form data files"; - case Error::ExceedMaxPayloadSize: return "Exceeded maximum payload size"; - case Error::ExceedUriMaxLength: return "Exceeded maximum URI length"; - case Error::ExceedMaxSocketDescriptorCount: - return "Exceeded maximum socket descriptor count"; - case Error::InvalidRequestLine: return "Invalid request line"; - case Error::InvalidHTTPMethod: return "Invalid HTTP method"; - case Error::InvalidHTTPVersion: return "Invalid HTTP version"; - case Error::InvalidHeaders: return "Invalid headers"; - case Error::MultipartParsing: return "Multipart parsing failed"; - case Error::OpenFile: return "Failed to open file"; - case Error::Listen: return "Failed to listen on socket"; - case Error::GetSockName: return "Failed to get socket name"; - case Error::UnsupportedAddressFamily: return "Unsupported address family"; - case Error::HTTPParsing: return "HTTP parsing failed"; - case Error::InvalidRangeHeader: return "Invalid Range header"; + case Error::Unknown: return "Unknown"; default: break; } @@ -2294,9 +2287,9 @@ inline std::ostream &operator<<(std::ostream &os, const Error &obj) { return os; } -inline size_t Result::get_request_header_value_u64(const std::string &key, - size_t def, - size_t id) const { +inline uint64_t Result::get_request_header_value_u64(const std::string &key, + uint64_t def, + size_t id) const { return detail::get_header_value_u64(request_headers_, key, def, id); } @@ -2348,10 +2341,6 @@ Client::set_write_timeout(const std::chrono::duration &duration) { cli_->set_write_timeout(duration); } -inline void Client::set_max_timeout(time_t msec) { - cli_->set_max_timeout(msec); -} - template inline void Client::set_max_timeout(const std::chrono::duration &duration) { @@ -2367,20 +2356,6 @@ std::string hosted_at(const std::string &hostname); void hosted_at(const std::string &hostname, std::vector &addrs); -// JavaScript-style URL encoding/decoding functions -std::string encode_uri_component(const std::string &value); -std::string encode_uri(const std::string &value); -std::string decode_uri_component(const std::string &value); -std::string decode_uri(const std::string &value); - -// RFC 3986 compliant URL component encoding/decoding functions -std::string encode_path_component(const std::string &component); -std::string decode_path_component(const std::string &component); -std::string encode_query_component(const std::string &component, - bool space_as_plus = true); -std::string decode_query_component(const std::string &component, - bool plus_as_space = true); - std::string append_query_params(const std::string &path, const Params ¶ms); std::pair make_range_header(const Ranges &ranges); @@ -2422,6 +2397,10 @@ private: int ret_ = -1; }; +std::string encode_query_param(const std::string &value); + +std::string decode_url(const std::string &s, bool convert_plus_to_space); + std::string trim_copy(const std::string &s); void divide( @@ -2471,9 +2450,6 @@ bool parse_multipart_boundary(const std::string &content_type, bool parse_range_header(const std::string &s, Ranges &ranges); -bool parse_accept_header(const std::string &s, - std::vector &content_types); - int close_socket(socket_t sock); ssize_t send_socket(socket_t sock, const void *ptr, size_t size, int flags); @@ -2722,9343 +2698,7 @@ inline bool is_field_value(const std::string &s) { return is_field_content(s); } } // namespace detail -// ---------------------------------------------------------------------------- -/* - * Implementation that will be part of the .cc file if split into .h + .cc. - */ - -namespace detail { - -inline bool is_hex(char c, int &v) { - if (0x20 <= c && isdigit(c)) { - v = c - '0'; - return true; - } else if ('A' <= c && c <= 'F') { - v = c - 'A' + 10; - return true; - } else if ('a' <= c && c <= 'f') { - v = c - 'a' + 10; - return true; - } - return false; -} - -inline bool from_hex_to_i(const std::string &s, size_t i, size_t cnt, - int &val) { - if (i >= s.size()) { return false; } - - val = 0; - for (; cnt; i++, cnt--) { - if (!s[i]) { return false; } - auto v = 0; - if (is_hex(s[i], v)) { - val = val * 16 + v; - } else { - return false; - } - } - return true; -} - -inline std::string from_i_to_hex(size_t n) { - static const auto charset = "0123456789abcdef"; - std::string ret; - do { - ret = charset[n & 15] + ret; - n >>= 4; - } while (n > 0); - return ret; -} - -inline size_t to_utf8(int code, char *buff) { - if (code < 0x0080) { - buff[0] = static_cast(code & 0x7F); - return 1; - } else if (code < 0x0800) { - buff[0] = static_cast(0xC0 | ((code >> 6) & 0x1F)); - buff[1] = static_cast(0x80 | (code & 0x3F)); - return 2; - } else if (code < 0xD800) { - buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); - buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[2] = static_cast(0x80 | (code & 0x3F)); - return 3; - } else if (code < 0xE000) { // D800 - DFFF is invalid... - return 0; - } else if (code < 0x10000) { - buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); - buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[2] = static_cast(0x80 | (code & 0x3F)); - return 3; - } else if (code < 0x110000) { - buff[0] = static_cast(0xF0 | ((code >> 18) & 0x7)); - buff[1] = static_cast(0x80 | ((code >> 12) & 0x3F)); - buff[2] = static_cast(0x80 | ((code >> 6) & 0x3F)); - buff[3] = static_cast(0x80 | (code & 0x3F)); - return 4; - } - - // NOTREACHED - return 0; -} - -// NOTE: This code came up with the following stackoverflow post: -// https://stackoverflow.com/questions/180947/base64-decode-snippet-in-c -inline std::string base64_encode(const std::string &in) { - static const auto lookup = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - - std::string out; - out.reserve(in.size()); - - auto val = 0; - auto valb = -6; - - for (auto c : in) { - val = (val << 8) + static_cast(c); - valb += 8; - while (valb >= 0) { - out.push_back(lookup[(val >> valb) & 0x3F]); - valb -= 6; - } - } - - if (valb > -6) { out.push_back(lookup[((val << 8) >> (valb + 8)) & 0x3F]); } - - while (out.size() % 4) { - out.push_back('='); - } - - return out; -} - -inline bool is_valid_path(const std::string &path) { - size_t level = 0; - size_t i = 0; - - // Skip slash - while (i < path.size() && path[i] == '/') { - i++; - } - - while (i < path.size()) { - // Read component - auto beg = i; - while (i < path.size() && path[i] != '/') { - if (path[i] == '\0') { - return false; - } else if (path[i] == '\\') { - return false; - } - i++; - } - - auto len = i - beg; - assert(len > 0); - - if (!path.compare(beg, len, ".")) { - ; - } else if (!path.compare(beg, len, "..")) { - if (level == 0) { return false; } - level--; - } else { - level++; - } - - // Skip slash - while (i < path.size() && path[i] == '/') { - i++; - } - } - - return true; -} - -inline FileStat::FileStat(const std::string &path) { -#if defined(_WIN32) - auto wpath = u8string_to_wstring(path.c_str()); - ret_ = _wstat(wpath.c_str(), &st_); -#else - ret_ = stat(path.c_str(), &st_); -#endif -} -inline bool FileStat::is_file() const { - return ret_ >= 0 && S_ISREG(st_.st_mode); -} -inline bool FileStat::is_dir() const { - return ret_ >= 0 && S_ISDIR(st_.st_mode); -} - -inline std::string encode_path(const std::string &s) { - std::string result; - result.reserve(s.size()); - - for (size_t i = 0; s[i]; i++) { - switch (s[i]) { - case ' ': result += "%20"; break; - case '+': result += "%2B"; break; - case '\r': result += "%0D"; break; - case '\n': result += "%0A"; break; - case '\'': result += "%27"; break; - case ',': result += "%2C"; break; - // case ':': result += "%3A"; break; // ok? probably... - case ';': result += "%3B"; break; - default: - auto c = static_cast(s[i]); - if (c >= 0x80) { - result += '%'; - char hex[4]; - auto len = snprintf(hex, sizeof(hex) - 1, "%02X", c); - assert(len == 2); - result.append(hex, static_cast(len)); - } else { - result += s[i]; - } - break; - } - } - - return result; -} - -inline std::string file_extension(const std::string &path) { - std::smatch m; - thread_local auto re = std::regex("\\.([a-zA-Z0-9]+)$"); - if (std::regex_search(path, m, re)) { return m[1].str(); } - return std::string(); -} - -inline bool is_space_or_tab(char c) { return c == ' ' || c == '\t'; } - -inline std::pair trim(const char *b, const char *e, size_t left, - size_t right) { - while (b + left < e && is_space_or_tab(b[left])) { - left++; - } - while (right > 0 && is_space_or_tab(b[right - 1])) { - right--; - } - return std::make_pair(left, right); -} - -inline std::string trim_copy(const std::string &s) { - auto r = trim(s.data(), s.data() + s.size(), 0, s.size()); - return s.substr(r.first, r.second - r.first); -} - -inline std::string trim_double_quotes_copy(const std::string &s) { - if (s.length() >= 2 && s.front() == '"' && s.back() == '"') { - return s.substr(1, s.size() - 2); - } - return s; -} - -inline void -divide(const char *data, std::size_t size, char d, - std::function - fn) { - const auto it = std::find(data, data + size, d); - const auto found = static_cast(it != data + size); - const auto lhs_data = data; - const auto lhs_size = static_cast(it - data); - const auto rhs_data = it + found; - const auto rhs_size = size - lhs_size - found; - - fn(lhs_data, lhs_size, rhs_data, rhs_size); -} - -inline void -divide(const std::string &str, char d, - std::function - fn) { - divide(str.data(), str.size(), d, std::move(fn)); -} - -inline void split(const char *b, const char *e, char d, - std::function fn) { - return split(b, e, d, (std::numeric_limits::max)(), std::move(fn)); -} - -inline void split(const char *b, const char *e, char d, size_t m, - std::function fn) { - size_t i = 0; - size_t beg = 0; - size_t count = 1; - - while (e ? (b + i < e) : (b[i] != '\0')) { - if (b[i] == d && count < m) { - auto r = trim(b, e, beg, i); - if (r.first < r.second) { fn(&b[r.first], &b[r.second]); } - beg = i + 1; - count++; - } - i++; - } - - if (i) { - auto r = trim(b, e, beg, i); - if (r.first < r.second) { fn(&b[r.first], &b[r.second]); } - } -} - -inline stream_line_reader::stream_line_reader(Stream &strm, char *fixed_buffer, - size_t fixed_buffer_size) - : strm_(strm), fixed_buffer_(fixed_buffer), - fixed_buffer_size_(fixed_buffer_size) {} - -inline const char *stream_line_reader::ptr() const { - if (growable_buffer_.empty()) { - return fixed_buffer_; - } else { - return growable_buffer_.data(); - } -} - -inline size_t stream_line_reader::size() const { - if (growable_buffer_.empty()) { - return fixed_buffer_used_size_; - } else { - return growable_buffer_.size(); - } -} - -inline bool stream_line_reader::end_with_crlf() const { - auto end = ptr() + size(); - return size() >= 2 && end[-2] == '\r' && end[-1] == '\n'; -} - -inline bool stream_line_reader::getline() { - fixed_buffer_used_size_ = 0; - growable_buffer_.clear(); - -#ifndef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR - char prev_byte = 0; -#endif - - for (size_t i = 0;; i++) { - if (size() >= CPPHTTPLIB_MAX_LINE_LENGTH) { - // Treat exceptionally long lines as an error to - // prevent infinite loops/memory exhaustion - return false; - } - char byte; - auto n = strm_.read(&byte, 1); - - if (n < 0) { - return false; - } else if (n == 0) { - if (i == 0) { - return false; - } else { - break; - } - } - - append(byte); - -#ifdef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR - if (byte == '\n') { break; } -#else - if (prev_byte == '\r' && byte == '\n') { break; } - prev_byte = byte; -#endif - } - - return true; -} - -inline void stream_line_reader::append(char c) { - if (fixed_buffer_used_size_ < fixed_buffer_size_ - 1) { - fixed_buffer_[fixed_buffer_used_size_++] = c; - fixed_buffer_[fixed_buffer_used_size_] = '\0'; - } else { - if (growable_buffer_.empty()) { - assert(fixed_buffer_[fixed_buffer_used_size_] == '\0'); - growable_buffer_.assign(fixed_buffer_, fixed_buffer_used_size_); - } - growable_buffer_ += c; - } -} - -inline mmap::mmap(const char *path) { open(path); } - -inline mmap::~mmap() { close(); } - -inline bool mmap::open(const char *path) { - close(); - -#if defined(_WIN32) - auto wpath = u8string_to_wstring(path); - if (wpath.empty()) { return false; } - - hFile_ = ::CreateFile2(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ, - OPEN_EXISTING, NULL); - - if (hFile_ == INVALID_HANDLE_VALUE) { return false; } - - LARGE_INTEGER size{}; - if (!::GetFileSizeEx(hFile_, &size)) { return false; } - // If the following line doesn't compile due to QuadPart, update Windows SDK. - // See: - // https://github.com/yhirose/cpp-httplib/issues/1903#issuecomment-2316520721 - if (static_cast(size.QuadPart) > - (std::numeric_limits::max)()) { - // `size_t` might be 32-bits, on 32-bits Windows. - return false; - } - size_ = static_cast(size.QuadPart); - - hMapping_ = - ::CreateFileMappingFromApp(hFile_, NULL, PAGE_READONLY, size_, NULL); - - // Special treatment for an empty file... - if (hMapping_ == NULL && size_ == 0) { - close(); - is_open_empty_file = true; - return true; - } - - if (hMapping_ == NULL) { - close(); - return false; - } - - addr_ = ::MapViewOfFileFromApp(hMapping_, FILE_MAP_READ, 0, 0); - - if (addr_ == nullptr) { - close(); - return false; - } -#else - fd_ = ::open(path, O_RDONLY); - if (fd_ == -1) { return false; } - - struct stat sb; - if (fstat(fd_, &sb) == -1) { - close(); - return false; - } - size_ = static_cast(sb.st_size); - - addr_ = ::mmap(NULL, size_, PROT_READ, MAP_PRIVATE, fd_, 0); - - // Special treatment for an empty file... - if (addr_ == MAP_FAILED && size_ == 0) { - close(); - is_open_empty_file = true; - return false; - } -#endif - - return true; -} - -inline bool mmap::is_open() const { - return is_open_empty_file ? true : addr_ != nullptr; -} - -inline size_t mmap::size() const { return size_; } - -inline const char *mmap::data() const { - return is_open_empty_file ? "" : static_cast(addr_); -} - -inline void mmap::close() { -#if defined(_WIN32) - if (addr_) { - ::UnmapViewOfFile(addr_); - addr_ = nullptr; - } - - if (hMapping_) { - ::CloseHandle(hMapping_); - hMapping_ = NULL; - } - - if (hFile_ != INVALID_HANDLE_VALUE) { - ::CloseHandle(hFile_); - hFile_ = INVALID_HANDLE_VALUE; - } - - is_open_empty_file = false; -#else - if (addr_ != nullptr) { - munmap(addr_, size_); - addr_ = nullptr; - } - - if (fd_ != -1) { - ::close(fd_); - fd_ = -1; - } -#endif - size_ = 0; -} -inline int close_socket(socket_t sock) { -#ifdef _WIN32 - return closesocket(sock); -#else - return close(sock); -#endif -} - -template inline ssize_t handle_EINTR(T fn) { - ssize_t res = 0; - while (true) { - res = fn(); - if (res < 0 && errno == EINTR) { - std::this_thread::sleep_for(std::chrono::microseconds{1}); - continue; - } - break; - } - return res; -} - -inline ssize_t read_socket(socket_t sock, void *ptr, size_t size, int flags) { - return handle_EINTR([&]() { - return recv(sock, -#ifdef _WIN32 - static_cast(ptr), static_cast(size), -#else - ptr, size, -#endif - flags); - }); -} - -inline ssize_t send_socket(socket_t sock, const void *ptr, size_t size, - int flags) { - return handle_EINTR([&]() { - return send(sock, -#ifdef _WIN32 - static_cast(ptr), static_cast(size), -#else - ptr, size, -#endif - flags); - }); -} - -inline int poll_wrapper(struct pollfd *fds, nfds_t nfds, int timeout) { -#ifdef _WIN32 - return ::WSAPoll(fds, nfds, timeout); -#else - return ::poll(fds, nfds, timeout); -#endif -} - -template -inline ssize_t select_impl(socket_t sock, time_t sec, time_t usec) { -#ifdef __APPLE__ - if (sock >= FD_SETSIZE) { return -1; } - - fd_set fds, *rfds, *wfds; - FD_ZERO(&fds); - FD_SET(sock, &fds); - rfds = (Read ? &fds : nullptr); - wfds = (Read ? nullptr : &fds); - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - return handle_EINTR([&]() { - return select(static_cast(sock + 1), rfds, wfds, nullptr, &tv); - }); -#else - struct pollfd pfd; - pfd.fd = sock; - pfd.events = (Read ? POLLIN : POLLOUT); - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - return handle_EINTR([&]() { return poll_wrapper(&pfd, 1, timeout); }); -#endif -} - -inline ssize_t select_read(socket_t sock, time_t sec, time_t usec) { - return select_impl(sock, sec, usec); -} - -inline ssize_t select_write(socket_t sock, time_t sec, time_t usec) { - return select_impl(sock, sec, usec); -} - -inline Error wait_until_socket_is_ready(socket_t sock, time_t sec, - time_t usec) { -#ifdef __APPLE__ - if (sock >= FD_SETSIZE) { return Error::Connection; } - - fd_set fdsr, fdsw; - FD_ZERO(&fdsr); - FD_ZERO(&fdsw); - FD_SET(sock, &fdsr); - FD_SET(sock, &fdsw); - - timeval tv; - tv.tv_sec = static_cast(sec); - tv.tv_usec = static_cast(usec); - - auto ret = handle_EINTR([&]() { - return select(static_cast(sock + 1), &fdsr, &fdsw, nullptr, &tv); - }); - - if (ret == 0) { return Error::ConnectionTimeout; } - - if (ret > 0 && (FD_ISSET(sock, &fdsr) || FD_ISSET(sock, &fdsw))) { - auto error = 0; - socklen_t len = sizeof(error); - auto res = getsockopt(sock, SOL_SOCKET, SO_ERROR, - reinterpret_cast(&error), &len); - auto successful = res >= 0 && !error; - return successful ? Error::Success : Error::Connection; - } - - return Error::Connection; -#else - struct pollfd pfd_read; - pfd_read.fd = sock; - pfd_read.events = POLLIN | POLLOUT; - - auto timeout = static_cast(sec * 1000 + usec / 1000); - - auto poll_res = - handle_EINTR([&]() { return poll_wrapper(&pfd_read, 1, timeout); }); - - if (poll_res == 0) { return Error::ConnectionTimeout; } - - if (poll_res > 0 && pfd_read.revents & (POLLIN | POLLOUT)) { - auto error = 0; - socklen_t len = sizeof(error); - auto res = getsockopt(sock, SOL_SOCKET, SO_ERROR, - reinterpret_cast(&error), &len); - auto successful = res >= 0 && !error; - return successful ? Error::Success : Error::Connection; - } - - return Error::Connection; -#endif -} - -inline bool is_socket_alive(socket_t sock) { - const auto val = detail::select_read(sock, 0, 0); - if (val == 0) { - return true; - } else if (val < 0 && errno == EBADF) { - return false; - } - char buf[1]; - return detail::read_socket(sock, &buf[0], sizeof(buf), MSG_PEEK) > 0; -} - -class SocketStream final : public Stream { -public: - SocketStream(socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec, - time_t max_timeout_msec = 0, - std::chrono::time_point start_time = - (std::chrono::steady_clock::time_point::min)()); - ~SocketStream() override; - - bool is_readable() const override; - bool wait_readable() const override; - bool wait_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - void get_local_ip_and_port(std::string &ip, int &port) const override; - socket_t socket() const override; - time_t duration() const override; - -private: - socket_t sock_; - time_t read_timeout_sec_; - time_t read_timeout_usec_; - time_t write_timeout_sec_; - time_t write_timeout_usec_; - time_t max_timeout_msec_; - const std::chrono::time_point start_time_; - - std::vector read_buff_; - size_t read_buff_off_ = 0; - size_t read_buff_content_size_ = 0; - - static const size_t read_buff_size_ = 1024l * 4; -}; - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -class SSLSocketStream final : public Stream { -public: - SSLSocketStream( - socket_t sock, SSL *ssl, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, time_t max_timeout_msec = 0, - std::chrono::time_point start_time = - (std::chrono::steady_clock::time_point::min)()); - ~SSLSocketStream() override; - - bool is_readable() const override; - bool wait_readable() const override; - bool wait_writable() const override; - ssize_t read(char *ptr, size_t size) override; - ssize_t write(const char *ptr, size_t size) override; - void get_remote_ip_and_port(std::string &ip, int &port) const override; - void get_local_ip_and_port(std::string &ip, int &port) const override; - socket_t socket() const override; - time_t duration() const override; - -private: - socket_t sock_; - SSL *ssl_; - time_t read_timeout_sec_; - time_t read_timeout_usec_; - time_t write_timeout_sec_; - time_t write_timeout_usec_; - time_t max_timeout_msec_; - const std::chrono::time_point start_time_; -}; -#endif - -inline bool keep_alive(const std::atomic &svr_sock, socket_t sock, - time_t keep_alive_timeout_sec) { - using namespace std::chrono; - - const auto interval_usec = - CPPHTTPLIB_KEEPALIVE_TIMEOUT_CHECK_INTERVAL_USECOND; - - // Avoid expensive `steady_clock::now()` call for the first time - if (select_read(sock, 0, interval_usec) > 0) { return true; } - - const auto start = steady_clock::now() - microseconds{interval_usec}; - const auto timeout = seconds{keep_alive_timeout_sec}; - - while (true) { - if (svr_sock == INVALID_SOCKET) { - break; // Server socket is closed - } - - auto val = select_read(sock, 0, interval_usec); - if (val < 0) { - break; // Ssocket error - } else if (val == 0) { - if (steady_clock::now() - start > timeout) { - break; // Timeout - } - } else { - return true; // Ready for read - } - } - - return false; -} - -template -inline bool -process_server_socket_core(const std::atomic &svr_sock, socket_t sock, - size_t keep_alive_max_count, - time_t keep_alive_timeout_sec, T callback) { - assert(keep_alive_max_count > 0); - auto ret = false; - auto count = keep_alive_max_count; - while (count > 0 && keep_alive(svr_sock, sock, keep_alive_timeout_sec)) { - auto close_connection = count == 1; - auto connection_closed = false; - ret = callback(close_connection, connection_closed); - if (!ret || connection_closed) { break; } - count--; - } - return ret; -} - -template -inline bool -process_server_socket(const std::atomic &svr_sock, socket_t sock, - size_t keep_alive_max_count, - time_t keep_alive_timeout_sec, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, T callback) { - return process_server_socket_core( - svr_sock, sock, keep_alive_max_count, keep_alive_timeout_sec, - [&](bool close_connection, bool &connection_closed) { - SocketStream strm(sock, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - return callback(strm, close_connection, connection_closed); - }); -} - -inline bool process_client_socket( - socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec, - time_t max_timeout_msec, - std::chrono::time_point start_time, - std::function callback) { - SocketStream strm(sock, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec, max_timeout_msec, - start_time); - return callback(strm); -} - -inline int shutdown_socket(socket_t sock) { -#ifdef _WIN32 - return shutdown(sock, SD_BOTH); -#else - return shutdown(sock, SHUT_RDWR); -#endif -} - -inline std::string escape_abstract_namespace_unix_domain(const std::string &s) { - if (s.size() > 1 && s[0] == '\0') { - auto ret = s; - ret[0] = '@'; - return ret; - } - return s; -} - -inline std::string -unescape_abstract_namespace_unix_domain(const std::string &s) { - if (s.size() > 1 && s[0] == '@') { - auto ret = s; - ret[0] = '\0'; - return ret; - } - return s; -} - -inline int getaddrinfo_with_timeout(const char *node, const char *service, - const struct addrinfo *hints, - struct addrinfo **res, time_t timeout_sec) { -#ifdef CPPHTTPLIB_USE_NON_BLOCKING_GETADDRINFO - if (timeout_sec <= 0) { - // No timeout specified, use standard getaddrinfo - return getaddrinfo(node, service, hints, res); - } - -#ifdef _WIN32 - // Windows-specific implementation using GetAddrInfoEx with overlapped I/O - OVERLAPPED overlapped = {0}; - HANDLE event = CreateEventW(nullptr, TRUE, FALSE, nullptr); - if (!event) { return EAI_FAIL; } - - overlapped.hEvent = event; - - PADDRINFOEXW result_addrinfo = nullptr; - HANDLE cancel_handle = nullptr; - - ADDRINFOEXW hints_ex = {0}; - if (hints) { - hints_ex.ai_flags = hints->ai_flags; - hints_ex.ai_family = hints->ai_family; - hints_ex.ai_socktype = hints->ai_socktype; - hints_ex.ai_protocol = hints->ai_protocol; - } - - auto wnode = u8string_to_wstring(node); - auto wservice = u8string_to_wstring(service); - - auto ret = ::GetAddrInfoExW(wnode.data(), wservice.data(), NS_DNS, nullptr, - hints ? &hints_ex : nullptr, &result_addrinfo, - nullptr, &overlapped, nullptr, &cancel_handle); - - if (ret == WSA_IO_PENDING) { - auto wait_result = - ::WaitForSingleObject(event, static_cast(timeout_sec * 1000)); - if (wait_result == WAIT_TIMEOUT) { - if (cancel_handle) { ::GetAddrInfoExCancel(&cancel_handle); } - ::CloseHandle(event); - return EAI_AGAIN; - } - - DWORD bytes_returned; - if (!::GetOverlappedResult((HANDLE)INVALID_SOCKET, &overlapped, - &bytes_returned, FALSE)) { - ::CloseHandle(event); - return ::WSAGetLastError(); - } - } - - ::CloseHandle(event); - - if (ret == NO_ERROR || ret == WSA_IO_PENDING) { - *res = reinterpret_cast(result_addrinfo); - return 0; - } - - return ret; -#elif TARGET_OS_MAC - // macOS implementation using CFHost API for asynchronous DNS resolution - CFStringRef hostname_ref = CFStringCreateWithCString( - kCFAllocatorDefault, node, kCFStringEncodingUTF8); - if (!hostname_ref) { return EAI_MEMORY; } - - CFHostRef host_ref = CFHostCreateWithName(kCFAllocatorDefault, hostname_ref); - CFRelease(hostname_ref); - if (!host_ref) { return EAI_MEMORY; } - - // Set up context for callback - struct CFHostContext { - bool completed = false; - bool success = false; - CFArrayRef addresses = nullptr; - std::mutex mutex; - std::condition_variable cv; - } context; - - CFHostClientContext client_context; - memset(&client_context, 0, sizeof(client_context)); - client_context.info = &context; - - // Set callback - auto callback = [](CFHostRef theHost, CFHostInfoType /*typeInfo*/, - const CFStreamError *error, void *info) { - auto ctx = static_cast(info); - std::lock_guard lock(ctx->mutex); - - if (error && error->error != 0) { - ctx->success = false; - } else { - Boolean hasBeenResolved; - ctx->addresses = CFHostGetAddressing(theHost, &hasBeenResolved); - if (ctx->addresses && hasBeenResolved) { - CFRetain(ctx->addresses); - ctx->success = true; - } else { - ctx->success = false; - } - } - ctx->completed = true; - ctx->cv.notify_one(); - }; - - if (!CFHostSetClient(host_ref, callback, &client_context)) { - CFRelease(host_ref); - return EAI_SYSTEM; - } - - // Schedule on run loop - CFRunLoopRef run_loop = CFRunLoopGetCurrent(); - CFHostScheduleWithRunLoop(host_ref, run_loop, kCFRunLoopDefaultMode); - - // Start resolution - CFStreamError stream_error; - if (!CFHostStartInfoResolution(host_ref, kCFHostAddresses, &stream_error)) { - CFHostUnscheduleFromRunLoop(host_ref, run_loop, kCFRunLoopDefaultMode); - CFRelease(host_ref); - return EAI_FAIL; - } - - // Wait for completion with timeout - auto timeout_time = - std::chrono::steady_clock::now() + std::chrono::seconds(timeout_sec); - bool timed_out = false; - - { - std::unique_lock lock(context.mutex); - - while (!context.completed) { - auto now = std::chrono::steady_clock::now(); - if (now >= timeout_time) { - timed_out = true; - break; - } - - // Run the runloop for a short time - lock.unlock(); - CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.1, true); - lock.lock(); - } - } - - // Clean up - CFHostUnscheduleFromRunLoop(host_ref, run_loop, kCFRunLoopDefaultMode); - CFHostSetClient(host_ref, nullptr, nullptr); - - if (timed_out || !context.completed) { - CFHostCancelInfoResolution(host_ref, kCFHostAddresses); - CFRelease(host_ref); - return EAI_AGAIN; - } - - if (!context.success || !context.addresses) { - CFRelease(host_ref); - return EAI_NODATA; - } - - // Convert CFArray to addrinfo - CFIndex count = CFArrayGetCount(context.addresses); - if (count == 0) { - CFRelease(context.addresses); - CFRelease(host_ref); - return EAI_NODATA; - } - - struct addrinfo *result_addrinfo = nullptr; - struct addrinfo **current = &result_addrinfo; - - for (CFIndex i = 0; i < count; i++) { - CFDataRef addr_data = - static_cast(CFArrayGetValueAtIndex(context.addresses, i)); - if (!addr_data) continue; - - const struct sockaddr *sockaddr_ptr = - reinterpret_cast(CFDataGetBytePtr(addr_data)); - socklen_t sockaddr_len = static_cast(CFDataGetLength(addr_data)); - - // Allocate addrinfo structure - *current = static_cast(malloc(sizeof(struct addrinfo))); - if (!*current) { - freeaddrinfo(result_addrinfo); - CFRelease(context.addresses); - CFRelease(host_ref); - return EAI_MEMORY; - } - - memset(*current, 0, sizeof(struct addrinfo)); - - // Set up addrinfo fields - (*current)->ai_family = sockaddr_ptr->sa_family; - (*current)->ai_socktype = hints ? hints->ai_socktype : SOCK_STREAM; - (*current)->ai_protocol = hints ? hints->ai_protocol : IPPROTO_TCP; - (*current)->ai_addrlen = sockaddr_len; - - // Copy sockaddr - (*current)->ai_addr = static_cast(malloc(sockaddr_len)); - if (!(*current)->ai_addr) { - freeaddrinfo(result_addrinfo); - CFRelease(context.addresses); - CFRelease(host_ref); - return EAI_MEMORY; - } - memcpy((*current)->ai_addr, sockaddr_ptr, sockaddr_len); - - // Set port if service is specified - if (service && strlen(service) > 0) { - int port = atoi(service); - if (port > 0) { - if (sockaddr_ptr->sa_family == AF_INET) { - reinterpret_cast((*current)->ai_addr) - ->sin_port = htons(static_cast(port)); - } else if (sockaddr_ptr->sa_family == AF_INET6) { - reinterpret_cast((*current)->ai_addr) - ->sin6_port = htons(static_cast(port)); - } - } - } - - current = &((*current)->ai_next); - } - - CFRelease(context.addresses); - CFRelease(host_ref); - - *res = result_addrinfo; - return 0; -#elif defined(_GNU_SOURCE) && defined(__GLIBC__) && \ - (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) - // Linux implementation using getaddrinfo_a for asynchronous DNS resolution - struct gaicb request; - struct gaicb *requests[1] = {&request}; - struct sigevent sevp; - struct timespec timeout; - - // Initialize the request structure - memset(&request, 0, sizeof(request)); - request.ar_name = node; - request.ar_service = service; - request.ar_request = hints; - - // Set up timeout - timeout.tv_sec = timeout_sec; - timeout.tv_nsec = 0; - - // Initialize sigevent structure (not used, but required) - memset(&sevp, 0, sizeof(sevp)); - sevp.sigev_notify = SIGEV_NONE; - - // Start asynchronous resolution - int start_result = getaddrinfo_a(GAI_NOWAIT, requests, 1, &sevp); - if (start_result != 0) { return start_result; } - - // Wait for completion with timeout - int wait_result = - gai_suspend((const struct gaicb *const *)requests, 1, &timeout); - - if (wait_result == 0 || wait_result == EAI_ALLDONE) { - // Completed successfully, get the result - int gai_result = gai_error(&request); - if (gai_result == 0) { - *res = request.ar_result; - return 0; - } else { - // Clean up on error - if (request.ar_result) { freeaddrinfo(request.ar_result); } - return gai_result; - } - } else if (wait_result == EAI_AGAIN) { - // Timeout occurred, cancel the request - gai_cancel(&request); - return EAI_AGAIN; - } else { - // Other error occurred - gai_cancel(&request); - return wait_result; - } -#else - // Fallback implementation using thread-based timeout for other Unix systems - - struct GetAddrInfoState { - std::mutex mutex; - std::condition_variable result_cv; - bool completed = false; - int result = EAI_SYSTEM; - std::string node = node; - std::string service = service; - struct addrinfo hints = hints; - struct addrinfo *info = nullptr; - }; - - // Allocate on the heap, so the resolver thread can keep using the data. - auto state = std::make_shared(); - - std::thread resolve_thread([=]() { - auto thread_result = getaddrinfo( - state->node.c_str(), state->service.c_str(), hints, &state->info); - - std::lock_guard lock(state->mutex); - state->result = thread_result; - state->completed = true; - state->result_cv.notify_one(); - }); - - // Wait for completion or timeout - std::unique_lock lock(state->mutex); - auto finished = - state->result_cv.wait_for(lock, std::chrono::seconds(timeout_sec), - [&] { return state->completed; }); - - if (finished) { - // Operation completed within timeout - resolve_thread.join(); - *res = state->info; - return state->result; - } else { - // Timeout occurred - resolve_thread.detach(); // Let the thread finish in background - return EAI_AGAIN; // Return timeout error - } -#endif -#else - (void)(timeout_sec); // Unused parameter for non-blocking getaddrinfo - return getaddrinfo(node, service, hints, res); -#endif -} - -template -socket_t create_socket(const std::string &host, const std::string &ip, int port, - int address_family, int socket_flags, bool tcp_nodelay, - bool ipv6_v6only, SocketOptions socket_options, - BindOrConnect bind_or_connect, time_t timeout_sec = 0) { - // Get address info - const char *node = nullptr; - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_IP; - - if (!ip.empty()) { - node = ip.c_str(); - // Ask getaddrinfo to convert IP in c-string to address - hints.ai_family = AF_UNSPEC; - hints.ai_flags = AI_NUMERICHOST; - } else { - if (!host.empty()) { node = host.c_str(); } - hints.ai_family = address_family; - hints.ai_flags = socket_flags; - } - -#if !defined(_WIN32) || defined(CPPHTTPLIB_HAVE_AFUNIX_H) - if (hints.ai_family == AF_UNIX) { - const auto addrlen = host.length(); - if (addrlen > sizeof(sockaddr_un::sun_path)) { return INVALID_SOCKET; } - -#ifdef SOCK_CLOEXEC - auto sock = socket(hints.ai_family, hints.ai_socktype | SOCK_CLOEXEC, - hints.ai_protocol); -#else - auto sock = socket(hints.ai_family, hints.ai_socktype, hints.ai_protocol); -#endif - - if (sock != INVALID_SOCKET) { - sockaddr_un addr{}; - addr.sun_family = AF_UNIX; - - auto unescaped_host = unescape_abstract_namespace_unix_domain(host); - std::copy(unescaped_host.begin(), unescaped_host.end(), addr.sun_path); - - hints.ai_addr = reinterpret_cast(&addr); - hints.ai_addrlen = static_cast( - sizeof(addr) - sizeof(addr.sun_path) + addrlen); - -#ifndef SOCK_CLOEXEC -#ifndef _WIN32 - fcntl(sock, F_SETFD, FD_CLOEXEC); -#endif -#endif - - if (socket_options) { socket_options(sock); } - -#ifdef _WIN32 - // Setting SO_REUSEADDR seems not to work well with AF_UNIX on windows, so - // remove the option. - detail::set_socket_opt(sock, SOL_SOCKET, SO_REUSEADDR, 0); -#endif - - bool dummy; - if (!bind_or_connect(sock, hints, dummy)) { - close_socket(sock); - sock = INVALID_SOCKET; - } - } - return sock; - } -#endif - - auto service = std::to_string(port); - - if (getaddrinfo_with_timeout(node, service.c_str(), &hints, &result, - timeout_sec)) { -#if defined __linux__ && !defined __ANDROID__ - res_init(); -#endif - return INVALID_SOCKET; - } - auto se = detail::scope_exit([&] { freeaddrinfo(result); }); - - for (auto rp = result; rp; rp = rp->ai_next) { - // Create a socket -#ifdef _WIN32 - auto sock = - WSASocketW(rp->ai_family, rp->ai_socktype, rp->ai_protocol, nullptr, 0, - WSA_FLAG_NO_HANDLE_INHERIT | WSA_FLAG_OVERLAPPED); - /** - * Since the WSA_FLAG_NO_HANDLE_INHERIT is only supported on Windows 7 SP1 - * and above the socket creation fails on older Windows Systems. - * - * Let's try to create a socket the old way in this case. - * - * Reference: - * https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasocketa - * - * WSA_FLAG_NO_HANDLE_INHERIT: - * This flag is supported on Windows 7 with SP1, Windows Server 2008 R2 with - * SP1, and later - * - */ - if (sock == INVALID_SOCKET) { - sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - } -#else - -#ifdef SOCK_CLOEXEC - auto sock = - socket(rp->ai_family, rp->ai_socktype | SOCK_CLOEXEC, rp->ai_protocol); -#else - auto sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); -#endif - -#endif - if (sock == INVALID_SOCKET) { continue; } - -#if !defined _WIN32 && !defined SOCK_CLOEXEC - if (fcntl(sock, F_SETFD, FD_CLOEXEC) == -1) { - close_socket(sock); - continue; - } -#endif - - if (tcp_nodelay) { set_socket_opt(sock, IPPROTO_TCP, TCP_NODELAY, 1); } - - if (rp->ai_family == AF_INET6) { - set_socket_opt(sock, IPPROTO_IPV6, IPV6_V6ONLY, ipv6_v6only ? 1 : 0); - } - - if (socket_options) { socket_options(sock); } - - // bind or connect - auto quit = false; - if (bind_or_connect(sock, *rp, quit)) { return sock; } - - close_socket(sock); - - if (quit) { break; } - } - - return INVALID_SOCKET; -} - -inline void set_nonblocking(socket_t sock, bool nonblocking) { -#ifdef _WIN32 - auto flags = nonblocking ? 1UL : 0UL; - ioctlsocket(sock, FIONBIO, &flags); -#else - auto flags = fcntl(sock, F_GETFL, 0); - fcntl(sock, F_SETFL, - nonblocking ? (flags | O_NONBLOCK) : (flags & (~O_NONBLOCK))); -#endif -} - -inline bool is_connection_error() { -#ifdef _WIN32 - return WSAGetLastError() != WSAEWOULDBLOCK; -#else - return errno != EINPROGRESS; -#endif -} - -inline bool bind_ip_address(socket_t sock, const std::string &host) { - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = 0; - - if (getaddrinfo_with_timeout(host.c_str(), "0", &hints, &result, 0)) { - return false; - } - - auto se = detail::scope_exit([&] { freeaddrinfo(result); }); - - auto ret = false; - for (auto rp = result; rp; rp = rp->ai_next) { - const auto &ai = *rp; - if (!::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { - ret = true; - break; - } - } - - return ret; -} - -#if !defined _WIN32 && !defined ANDROID && !defined _AIX && !defined __MVS__ -#define USE_IF2IP -#endif - -#ifdef USE_IF2IP -inline std::string if2ip(int address_family, const std::string &ifn) { - struct ifaddrs *ifap; - getifaddrs(&ifap); - auto se = detail::scope_exit([&] { freeifaddrs(ifap); }); - - std::string addr_candidate; - for (auto ifa = ifap; ifa; ifa = ifa->ifa_next) { - if (ifa->ifa_addr && ifn == ifa->ifa_name && - (AF_UNSPEC == address_family || - ifa->ifa_addr->sa_family == address_family)) { - if (ifa->ifa_addr->sa_family == AF_INET) { - auto sa = reinterpret_cast(ifa->ifa_addr); - char buf[INET_ADDRSTRLEN]; - if (inet_ntop(AF_INET, &sa->sin_addr, buf, INET_ADDRSTRLEN)) { - return std::string(buf, INET_ADDRSTRLEN); - } - } else if (ifa->ifa_addr->sa_family == AF_INET6) { - auto sa = reinterpret_cast(ifa->ifa_addr); - if (!IN6_IS_ADDR_LINKLOCAL(&sa->sin6_addr)) { - char buf[INET6_ADDRSTRLEN] = {}; - if (inet_ntop(AF_INET6, &sa->sin6_addr, buf, INET6_ADDRSTRLEN)) { - // equivalent to mac's IN6_IS_ADDR_UNIQUE_LOCAL - auto s6_addr_head = sa->sin6_addr.s6_addr[0]; - if (s6_addr_head == 0xfc || s6_addr_head == 0xfd) { - addr_candidate = std::string(buf, INET6_ADDRSTRLEN); - } else { - return std::string(buf, INET6_ADDRSTRLEN); - } - } - } - } - } - } - return addr_candidate; -} -#endif - -inline socket_t create_client_socket( - const std::string &host, const std::string &ip, int port, - int address_family, bool tcp_nodelay, bool ipv6_v6only, - SocketOptions socket_options, time_t connection_timeout_sec, - time_t connection_timeout_usec, time_t read_timeout_sec, - time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, const std::string &intf, Error &error) { - auto sock = create_socket( - host, ip, port, address_family, 0, tcp_nodelay, ipv6_v6only, - std::move(socket_options), - [&](socket_t sock2, struct addrinfo &ai, bool &quit) -> bool { - if (!intf.empty()) { -#ifdef USE_IF2IP - auto ip_from_if = if2ip(address_family, intf); - if (ip_from_if.empty()) { ip_from_if = intf; } - if (!bind_ip_address(sock2, ip_from_if)) { - error = Error::BindIPAddress; - return false; - } -#endif - } - - set_nonblocking(sock2, true); - - auto ret = - ::connect(sock2, ai.ai_addr, static_cast(ai.ai_addrlen)); - - if (ret < 0) { - if (is_connection_error()) { - error = Error::Connection; - return false; - } - error = wait_until_socket_is_ready(sock2, connection_timeout_sec, - connection_timeout_usec); - if (error != Error::Success) { - if (error == Error::ConnectionTimeout) { quit = true; } - return false; - } - } - - set_nonblocking(sock2, false); - set_socket_opt_time(sock2, SOL_SOCKET, SO_RCVTIMEO, read_timeout_sec, - read_timeout_usec); - set_socket_opt_time(sock2, SOL_SOCKET, SO_SNDTIMEO, write_timeout_sec, - write_timeout_usec); - - error = Error::Success; - return true; - }, - connection_timeout_sec); // Pass DNS timeout - - if (sock != INVALID_SOCKET) { - error = Error::Success; - } else { - if (error == Error::Success) { error = Error::Connection; } - } - - return sock; -} - -inline bool get_ip_and_port(const struct sockaddr_storage &addr, - socklen_t addr_len, std::string &ip, int &port) { - if (addr.ss_family == AF_INET) { - port = ntohs(reinterpret_cast(&addr)->sin_port); - } else if (addr.ss_family == AF_INET6) { - port = - ntohs(reinterpret_cast(&addr)->sin6_port); - } else { - return false; - } - - std::array ipstr{}; - if (getnameinfo(reinterpret_cast(&addr), addr_len, - ipstr.data(), static_cast(ipstr.size()), nullptr, - 0, NI_NUMERICHOST)) { - return false; - } - - ip = ipstr.data(); - return true; -} - -inline void get_local_ip_and_port(socket_t sock, std::string &ip, int &port) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - if (!getsockname(sock, reinterpret_cast(&addr), - &addr_len)) { - get_ip_and_port(addr, addr_len, ip, port); - } -} - -inline void get_remote_ip_and_port(socket_t sock, std::string &ip, int &port) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - - if (!getpeername(sock, reinterpret_cast(&addr), - &addr_len)) { -#ifndef _WIN32 - if (addr.ss_family == AF_UNIX) { -#if defined(__linux__) - struct ucred ucred; - socklen_t len = sizeof(ucred); - if (getsockopt(sock, SOL_SOCKET, SO_PEERCRED, &ucred, &len) == 0) { - port = ucred.pid; - } -#elif defined(SOL_LOCAL) && defined(SO_PEERPID) - pid_t pid; - socklen_t len = sizeof(pid); - if (getsockopt(sock, SOL_LOCAL, SO_PEERPID, &pid, &len) == 0) { - port = pid; - } -#endif - return; - } -#endif - get_ip_and_port(addr, addr_len, ip, port); - } -} - -inline constexpr unsigned int str2tag_core(const char *s, size_t l, - unsigned int h) { - return (l == 0) - ? h - : str2tag_core( - s + 1, l - 1, - // Unsets the 6 high bits of h, therefore no overflow happens - (((std::numeric_limits::max)() >> 6) & - h * 33) ^ - static_cast(*s)); -} - -inline unsigned int str2tag(const std::string &s) { - return str2tag_core(s.data(), s.size(), 0); -} - -namespace udl { - -inline constexpr unsigned int operator""_t(const char *s, size_t l) { - return str2tag_core(s, l, 0); -} - -} // namespace udl - -inline std::string -find_content_type(const std::string &path, - const std::map &user_data, - const std::string &default_content_type) { - auto ext = file_extension(path); - - auto it = user_data.find(ext); - if (it != user_data.end()) { return it->second; } - - using udl::operator""_t; - - switch (str2tag(ext)) { - default: return default_content_type; - - case "css"_t: return "text/css"; - case "csv"_t: return "text/csv"; - case "htm"_t: - case "html"_t: return "text/html"; - case "js"_t: - case "mjs"_t: return "text/javascript"; - case "txt"_t: return "text/plain"; - case "vtt"_t: return "text/vtt"; - - case "apng"_t: return "image/apng"; - case "avif"_t: return "image/avif"; - case "bmp"_t: return "image/bmp"; - case "gif"_t: return "image/gif"; - case "png"_t: return "image/png"; - case "svg"_t: return "image/svg+xml"; - case "webp"_t: return "image/webp"; - case "ico"_t: return "image/x-icon"; - case "tif"_t: return "image/tiff"; - case "tiff"_t: return "image/tiff"; - case "jpg"_t: - case "jpeg"_t: return "image/jpeg"; - - case "mp4"_t: return "video/mp4"; - case "mpeg"_t: return "video/mpeg"; - case "webm"_t: return "video/webm"; - - case "mp3"_t: return "audio/mp3"; - case "mpga"_t: return "audio/mpeg"; - case "weba"_t: return "audio/webm"; - case "wav"_t: return "audio/wave"; - - case "otf"_t: return "font/otf"; - case "ttf"_t: return "font/ttf"; - case "woff"_t: return "font/woff"; - case "woff2"_t: return "font/woff2"; - - case "7z"_t: return "application/x-7z-compressed"; - case "atom"_t: return "application/atom+xml"; - case "pdf"_t: return "application/pdf"; - case "json"_t: return "application/json"; - case "rss"_t: return "application/rss+xml"; - case "tar"_t: return "application/x-tar"; - case "xht"_t: - case "xhtml"_t: return "application/xhtml+xml"; - case "xslt"_t: return "application/xslt+xml"; - case "xml"_t: return "application/xml"; - case "gz"_t: return "application/gzip"; - case "zip"_t: return "application/zip"; - case "wasm"_t: return "application/wasm"; - } -} - -inline bool can_compress_content_type(const std::string &content_type) { - using udl::operator""_t; - - auto tag = str2tag(content_type); - - switch (tag) { - case "image/svg+xml"_t: - case "application/javascript"_t: - case "application/json"_t: - case "application/xml"_t: - case "application/protobuf"_t: - case "application/xhtml+xml"_t: return true; - - case "text/event-stream"_t: return false; - - default: return !content_type.rfind("text/", 0); - } -} - -inline EncodingType encoding_type(const Request &req, const Response &res) { - auto ret = - detail::can_compress_content_type(res.get_header_value("Content-Type")); - if (!ret) { return EncodingType::None; } - - const auto &s = req.get_header_value("Accept-Encoding"); - (void)(s); - -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - // TODO: 'Accept-Encoding' has br, not br;q=0 - ret = s.find("br") != std::string::npos; - if (ret) { return EncodingType::Brotli; } -#endif - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - // TODO: 'Accept-Encoding' has gzip, not gzip;q=0 - ret = s.find("gzip") != std::string::npos; - if (ret) { return EncodingType::Gzip; } -#endif - -#ifdef CPPHTTPLIB_ZSTD_SUPPORT - // TODO: 'Accept-Encoding' has zstd, not zstd;q=0 - ret = s.find("zstd") != std::string::npos; - if (ret) { return EncodingType::Zstd; } -#endif - - return EncodingType::None; -} - -inline bool nocompressor::compress(const char *data, size_t data_length, - bool /*last*/, Callback callback) { - if (!data_length) { return true; } - return callback(data, data_length); -} - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT -inline gzip_compressor::gzip_compressor() { - std::memset(&strm_, 0, sizeof(strm_)); - strm_.zalloc = Z_NULL; - strm_.zfree = Z_NULL; - strm_.opaque = Z_NULL; - - is_valid_ = deflateInit2(&strm_, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 31, 8, - Z_DEFAULT_STRATEGY) == Z_OK; -} - -inline gzip_compressor::~gzip_compressor() { deflateEnd(&strm_); } - -inline bool gzip_compressor::compress(const char *data, size_t data_length, - bool last, Callback callback) { - assert(is_valid_); - - do { - constexpr size_t max_avail_in = - (std::numeric_limits::max)(); - - strm_.avail_in = static_cast( - (std::min)(data_length, max_avail_in)); - strm_.next_in = const_cast(reinterpret_cast(data)); - - data_length -= strm_.avail_in; - data += strm_.avail_in; - - auto flush = (last && data_length == 0) ? Z_FINISH : Z_NO_FLUSH; - auto ret = Z_OK; - - std::array buff{}; - do { - strm_.avail_out = static_cast(buff.size()); - strm_.next_out = reinterpret_cast(buff.data()); - - ret = deflate(&strm_, flush); - if (ret == Z_STREAM_ERROR) { return false; } - - if (!callback(buff.data(), buff.size() - strm_.avail_out)) { - return false; - } - } while (strm_.avail_out == 0); - - assert((flush == Z_FINISH && ret == Z_STREAM_END) || - (flush == Z_NO_FLUSH && ret == Z_OK)); - assert(strm_.avail_in == 0); - } while (data_length > 0); - - return true; -} - -inline gzip_decompressor::gzip_decompressor() { - std::memset(&strm_, 0, sizeof(strm_)); - strm_.zalloc = Z_NULL; - strm_.zfree = Z_NULL; - strm_.opaque = Z_NULL; - - // 15 is the value of wbits, which should be at the maximum possible value - // to ensure that any gzip stream can be decoded. The offset of 32 specifies - // that the stream type should be automatically detected either gzip or - // deflate. - is_valid_ = inflateInit2(&strm_, 32 + 15) == Z_OK; -} - -inline gzip_decompressor::~gzip_decompressor() { inflateEnd(&strm_); } - -inline bool gzip_decompressor::is_valid() const { return is_valid_; } - -inline bool gzip_decompressor::decompress(const char *data, size_t data_length, - Callback callback) { - assert(is_valid_); - - auto ret = Z_OK; - - do { - constexpr size_t max_avail_in = - (std::numeric_limits::max)(); - - strm_.avail_in = static_cast( - (std::min)(data_length, max_avail_in)); - strm_.next_in = const_cast(reinterpret_cast(data)); - - data_length -= strm_.avail_in; - data += strm_.avail_in; - - std::array buff{}; - while (strm_.avail_in > 0 && ret == Z_OK) { - strm_.avail_out = static_cast(buff.size()); - strm_.next_out = reinterpret_cast(buff.data()); - - ret = inflate(&strm_, Z_NO_FLUSH); - - assert(ret != Z_STREAM_ERROR); - switch (ret) { - case Z_NEED_DICT: - case Z_DATA_ERROR: - case Z_MEM_ERROR: inflateEnd(&strm_); return false; - } - - if (!callback(buff.data(), buff.size() - strm_.avail_out)) { - return false; - } - } - - if (ret != Z_OK && ret != Z_STREAM_END) { return false; } - - } while (data_length > 0); - - return true; -} -#endif - -#ifdef CPPHTTPLIB_BROTLI_SUPPORT -inline brotli_compressor::brotli_compressor() { - state_ = BrotliEncoderCreateInstance(nullptr, nullptr, nullptr); -} - -inline brotli_compressor::~brotli_compressor() { - BrotliEncoderDestroyInstance(state_); -} - -inline bool brotli_compressor::compress(const char *data, size_t data_length, - bool last, Callback callback) { - std::array buff{}; - - auto operation = last ? BROTLI_OPERATION_FINISH : BROTLI_OPERATION_PROCESS; - auto available_in = data_length; - auto next_in = reinterpret_cast(data); - - for (;;) { - if (last) { - if (BrotliEncoderIsFinished(state_)) { break; } - } else { - if (!available_in) { break; } - } - - auto available_out = buff.size(); - auto next_out = buff.data(); - - if (!BrotliEncoderCompressStream(state_, operation, &available_in, &next_in, - &available_out, &next_out, nullptr)) { - return false; - } - - auto output_bytes = buff.size() - available_out; - if (output_bytes) { - callback(reinterpret_cast(buff.data()), output_bytes); - } - } - - return true; -} - -inline brotli_decompressor::brotli_decompressor() { - decoder_s = BrotliDecoderCreateInstance(0, 0, 0); - decoder_r = decoder_s ? BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT - : BROTLI_DECODER_RESULT_ERROR; -} - -inline brotli_decompressor::~brotli_decompressor() { - if (decoder_s) { BrotliDecoderDestroyInstance(decoder_s); } -} - -inline bool brotli_decompressor::is_valid() const { return decoder_s; } - -inline bool brotli_decompressor::decompress(const char *data, - size_t data_length, - Callback callback) { - if (decoder_r == BROTLI_DECODER_RESULT_SUCCESS || - decoder_r == BROTLI_DECODER_RESULT_ERROR) { - return 0; - } - - auto next_in = reinterpret_cast(data); - size_t avail_in = data_length; - size_t total_out; - - decoder_r = BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT; - - std::array buff{}; - while (decoder_r == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) { - char *next_out = buff.data(); - size_t avail_out = buff.size(); - - decoder_r = BrotliDecoderDecompressStream( - decoder_s, &avail_in, &next_in, &avail_out, - reinterpret_cast(&next_out), &total_out); - - if (decoder_r == BROTLI_DECODER_RESULT_ERROR) { return false; } - - if (!callback(buff.data(), buff.size() - avail_out)) { return false; } - } - - return decoder_r == BROTLI_DECODER_RESULT_SUCCESS || - decoder_r == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT; -} -#endif - -#ifdef CPPHTTPLIB_ZSTD_SUPPORT -inline zstd_compressor::zstd_compressor() { - ctx_ = ZSTD_createCCtx(); - ZSTD_CCtx_setParameter(ctx_, ZSTD_c_compressionLevel, ZSTD_fast); -} - -inline zstd_compressor::~zstd_compressor() { ZSTD_freeCCtx(ctx_); } - -inline bool zstd_compressor::compress(const char *data, size_t data_length, - bool last, Callback callback) { - std::array buff{}; - - ZSTD_EndDirective mode = last ? ZSTD_e_end : ZSTD_e_continue; - ZSTD_inBuffer input = {data, data_length, 0}; - - bool finished; - do { - ZSTD_outBuffer output = {buff.data(), CPPHTTPLIB_COMPRESSION_BUFSIZ, 0}; - size_t const remaining = ZSTD_compressStream2(ctx_, &output, &input, mode); - - if (ZSTD_isError(remaining)) { return false; } - - if (!callback(buff.data(), output.pos)) { return false; } - - finished = last ? (remaining == 0) : (input.pos == input.size); - - } while (!finished); - - return true; -} - -inline zstd_decompressor::zstd_decompressor() { ctx_ = ZSTD_createDCtx(); } - -inline zstd_decompressor::~zstd_decompressor() { ZSTD_freeDCtx(ctx_); } - -inline bool zstd_decompressor::is_valid() const { return ctx_ != nullptr; } - -inline bool zstd_decompressor::decompress(const char *data, size_t data_length, - Callback callback) { - std::array buff{}; - ZSTD_inBuffer input = {data, data_length, 0}; - - while (input.pos < input.size) { - ZSTD_outBuffer output = {buff.data(), CPPHTTPLIB_COMPRESSION_BUFSIZ, 0}; - size_t const remaining = ZSTD_decompressStream(ctx_, &output, &input); - - if (ZSTD_isError(remaining)) { return false; } - - if (!callback(buff.data(), output.pos)) { return false; } - } - - return true; -} -#endif - -inline bool is_prohibited_header_name(const std::string &name) { - using udl::operator""_t; - - switch (str2tag(name)) { - case "REMOTE_ADDR"_t: - case "REMOTE_PORT"_t: - case "LOCAL_ADDR"_t: - case "LOCAL_PORT"_t: return true; - default: return false; - } -} - -inline bool has_header(const Headers &headers, const std::string &key) { - if (is_prohibited_header_name(key)) { return false; } - return headers.find(key) != headers.end(); -} - -inline const char *get_header_value(const Headers &headers, - const std::string &key, const char *def, - size_t id) { - if (is_prohibited_header_name(key)) { -#ifndef CPPHTTPLIB_NO_EXCEPTIONS - std::string msg = "Prohibited header name '" + key + "' is specified."; - throw std::invalid_argument(msg); -#else - return ""; -#endif - } - - auto rng = headers.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { return it->second.c_str(); } - return def; -} - -template -inline bool parse_header(const char *beg, const char *end, T fn) { - // Skip trailing spaces and tabs. - while (beg < end && is_space_or_tab(end[-1])) { - end--; - } - - auto p = beg; - while (p < end && *p != ':') { - p++; - } - - auto name = std::string(beg, p); - if (!detail::fields::is_field_name(name)) { return false; } - - if (p == end) { return false; } - - auto key_end = p; - - if (*p++ != ':') { return false; } - - while (p < end && is_space_or_tab(*p)) { - p++; - } - - if (p <= end) { - auto key_len = key_end - beg; - if (!key_len) { return false; } - - auto key = std::string(beg, key_end); - auto val = std::string(p, end); - - if (!detail::fields::is_field_value(val)) { return false; } - - if (case_ignore::equal(key, "Location") || - case_ignore::equal(key, "Referer")) { - fn(key, val); - } else { - fn(key, decode_path_component(val)); - } - - return true; - } - - return false; -} - -inline bool read_headers(Stream &strm, Headers &headers) { - const auto bufsiz = 2048; - char buf[bufsiz]; - stream_line_reader line_reader(strm, buf, bufsiz); - - size_t header_count = 0; - - for (;;) { - if (!line_reader.getline()) { return false; } - - // Check if the line ends with CRLF. - auto line_terminator_len = 2; - if (line_reader.end_with_crlf()) { - // Blank line indicates end of headers. - if (line_reader.size() == 2) { break; } - } else { -#ifdef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR - // Blank line indicates end of headers. - if (line_reader.size() == 1) { break; } - line_terminator_len = 1; -#else - continue; // Skip invalid line. -#endif - } - - if (line_reader.size() > CPPHTTPLIB_HEADER_MAX_LENGTH) { return false; } - - // Check header count limit - if (header_count >= CPPHTTPLIB_HEADER_MAX_COUNT) { return false; } - - // Exclude line terminator - auto end = line_reader.ptr() + line_reader.size() - line_terminator_len; - - if (!parse_header(line_reader.ptr(), end, - [&](const std::string &key, const std::string &val) { - headers.emplace(key, val); - })) { - return false; - } - - header_count++; - } - - return true; -} - -inline bool read_content_with_length(Stream &strm, size_t len, - DownloadProgress progress, - ContentReceiverWithProgress out) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - - size_t r = 0; - while (r < len) { - auto read_len = static_cast(len - r); - auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); - if (n <= 0) { return false; } - - if (!out(buf, static_cast(n), r, len)) { return false; } - r += static_cast(n); - - if (progress) { - if (!progress(r, len)) { return false; } - } - } - - return true; -} - -inline void skip_content_with_length(Stream &strm, size_t len) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - size_t r = 0; - while (r < len) { - auto read_len = static_cast(len - r); - auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); - if (n <= 0) { return; } - r += static_cast(n); - } -} - -enum class ReadContentResult { - Success, // Successfully read the content - PayloadTooLarge, // The content exceeds the specified payload limit - Error // An error occurred while reading the content -}; - -inline ReadContentResult -read_content_without_length(Stream &strm, size_t payload_max_length, - ContentReceiverWithProgress out) { - char buf[CPPHTTPLIB_RECV_BUFSIZ]; - size_t r = 0; - for (;;) { - auto n = strm.read(buf, CPPHTTPLIB_RECV_BUFSIZ); - if (n == 0) { return ReadContentResult::Success; } - if (n < 0) { return ReadContentResult::Error; } - - // Check if adding this data would exceed the payload limit - if (r > payload_max_length || - payload_max_length - r < static_cast(n)) { - return ReadContentResult::PayloadTooLarge; - } - - if (!out(buf, static_cast(n), r, 0)) { - return ReadContentResult::Error; - } - r += static_cast(n); - } - - return ReadContentResult::Success; -} - -template -inline ReadContentResult read_content_chunked(Stream &strm, T &x, - size_t payload_max_length, - ContentReceiverWithProgress out) { - const auto bufsiz = 16; - char buf[bufsiz]; - - stream_line_reader line_reader(strm, buf, bufsiz); - - if (!line_reader.getline()) { return ReadContentResult::Error; } - - unsigned long chunk_len; - size_t total_len = 0; - while (true) { - char *end_ptr; - - chunk_len = std::strtoul(line_reader.ptr(), &end_ptr, 16); - - if (end_ptr == line_reader.ptr()) { return ReadContentResult::Error; } - if (chunk_len == ULONG_MAX) { return ReadContentResult::Error; } - - if (chunk_len == 0) { break; } - - // Check if adding this chunk would exceed the payload limit - if (total_len > payload_max_length || - payload_max_length - total_len < chunk_len) { - return ReadContentResult::PayloadTooLarge; - } - - total_len += chunk_len; - - if (!read_content_with_length(strm, chunk_len, nullptr, out)) { - return ReadContentResult::Error; - } - - if (!line_reader.getline()) { return ReadContentResult::Error; } - - if (strcmp(line_reader.ptr(), "\r\n") != 0) { - return ReadContentResult::Error; - } - - if (!line_reader.getline()) { return ReadContentResult::Error; } - } - - assert(chunk_len == 0); - - // NOTE: In RFC 9112, '7.1 Chunked Transfer Coding' mentions "The chunked - // transfer coding is complete when a chunk with a chunk-size of zero is - // received, possibly followed by a trailer section, and finally terminated by - // an empty line". https://www.rfc-editor.org/rfc/rfc9112.html#section-7.1 - // - // In '7.1.3. Decoding Chunked', however, the pseudo-code in the section - // does't care for the existence of the final CRLF. In other words, it seems - // to be ok whether the final CRLF exists or not in the chunked data. - // https://www.rfc-editor.org/rfc/rfc9112.html#section-7.1.3 - // - // According to the reference code in RFC 9112, cpp-httplib now allows - // chunked transfer coding data without the final CRLF. - if (!line_reader.getline()) { return ReadContentResult::Success; } - - // RFC 7230 Section 4.1.2 - Headers prohibited in trailers - thread_local case_ignore::unordered_set prohibited_trailers = { - // Message framing - "transfer-encoding", "content-length", - - // Routing - "host", - - // Authentication - "authorization", "www-authenticate", "proxy-authenticate", - "proxy-authorization", "cookie", "set-cookie", - - // Request modifiers - "cache-control", "expect", "max-forwards", "pragma", "range", "te", - - // Response control - "age", "expires", "date", "location", "retry-after", "vary", "warning", - - // Payload processing - "content-encoding", "content-type", "content-range", "trailer"}; - - // Parse declared trailer headers once for performance - case_ignore::unordered_set declared_trailers; - if (has_header(x.headers, "Trailer")) { - auto trailer_header = get_header_value(x.headers, "Trailer", "", 0); - auto len = std::strlen(trailer_header); - - split(trailer_header, trailer_header + len, ',', - [&](const char *b, const char *e) { - std::string key(b, e); - if (prohibited_trailers.find(key) == prohibited_trailers.end()) { - declared_trailers.insert(key); - } - }); - } - - size_t trailer_header_count = 0; - while (strcmp(line_reader.ptr(), "\r\n") != 0) { - if (line_reader.size() > CPPHTTPLIB_HEADER_MAX_LENGTH) { - return ReadContentResult::Error; - } - - // Check trailer header count limit - if (trailer_header_count >= CPPHTTPLIB_HEADER_MAX_COUNT) { - return ReadContentResult::Error; - } - - // Exclude line terminator - constexpr auto line_terminator_len = 2; - auto end = line_reader.ptr() + line_reader.size() - line_terminator_len; - - parse_header(line_reader.ptr(), end, - [&](const std::string &key, const std::string &val) { - if (declared_trailers.find(key) != declared_trailers.end()) { - x.trailers.emplace(key, val); - trailer_header_count++; - } - }); - - if (!line_reader.getline()) { return ReadContentResult::Error; } - } - - return ReadContentResult::Success; -} - -inline bool is_chunked_transfer_encoding(const Headers &headers) { - return case_ignore::equal( - get_header_value(headers, "Transfer-Encoding", "", 0), "chunked"); -} - -template -bool prepare_content_receiver(T &x, int &status, - ContentReceiverWithProgress receiver, - bool decompress, U callback) { - if (decompress) { - std::string encoding = x.get_header_value("Content-Encoding"); - std::unique_ptr decompressor; - - if (encoding == "gzip" || encoding == "deflate") { -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - decompressor = detail::make_unique(); -#else - status = StatusCode::UnsupportedMediaType_415; - return false; -#endif - } else if (encoding.find("br") != std::string::npos) { -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - decompressor = detail::make_unique(); -#else - status = StatusCode::UnsupportedMediaType_415; - return false; -#endif - } else if (encoding == "zstd") { -#ifdef CPPHTTPLIB_ZSTD_SUPPORT - decompressor = detail::make_unique(); -#else - status = StatusCode::UnsupportedMediaType_415; - return false; -#endif - } - - if (decompressor) { - if (decompressor->is_valid()) { - ContentReceiverWithProgress out = [&](const char *buf, size_t n, - size_t off, size_t len) { - return decompressor->decompress(buf, n, - [&](const char *buf2, size_t n2) { - return receiver(buf2, n2, off, len); - }); - }; - return callback(std::move(out)); - } else { - status = StatusCode::InternalServerError_500; - return false; - } - } - } - - ContentReceiverWithProgress out = [&](const char *buf, size_t n, size_t off, - size_t len) { - return receiver(buf, n, off, len); - }; - return callback(std::move(out)); -} - -template -bool read_content(Stream &strm, T &x, size_t payload_max_length, int &status, - DownloadProgress progress, - ContentReceiverWithProgress receiver, bool decompress) { - return prepare_content_receiver( - x, status, std::move(receiver), decompress, - [&](const ContentReceiverWithProgress &out) { - auto ret = true; - auto exceed_payload_max_length = false; - - if (is_chunked_transfer_encoding(x.headers)) { - auto result = read_content_chunked(strm, x, payload_max_length, out); - if (result == ReadContentResult::Success) { - ret = true; - } else if (result == ReadContentResult::PayloadTooLarge) { - exceed_payload_max_length = true; - ret = false; - } else { - ret = false; - } - } else if (!has_header(x.headers, "Content-Length")) { - auto result = - read_content_without_length(strm, payload_max_length, out); - if (result == ReadContentResult::Success) { - ret = true; - } else if (result == ReadContentResult::PayloadTooLarge) { - exceed_payload_max_length = true; - ret = false; - } else { - ret = false; - } - } else { - auto is_invalid_value = false; - auto len = get_header_value_u64(x.headers, "Content-Length", - (std::numeric_limits::max)(), - 0, is_invalid_value); - - if (is_invalid_value) { - ret = false; - } else if (len > payload_max_length) { - exceed_payload_max_length = true; - skip_content_with_length(strm, len); - ret = false; - } else if (len > 0) { - ret = read_content_with_length(strm, len, std::move(progress), out); - } - } - - if (!ret) { - status = exceed_payload_max_length ? StatusCode::PayloadTooLarge_413 - : StatusCode::BadRequest_400; - } - return ret; - }); -} - -inline ssize_t write_request_line(Stream &strm, const std::string &method, - const std::string &path) { - std::string s = method; - s += " "; - s += path; - s += " HTTP/1.1\r\n"; - return strm.write(s.data(), s.size()); -} - -inline ssize_t write_response_line(Stream &strm, int status) { - std::string s = "HTTP/1.1 "; - s += std::to_string(status); - s += " "; - s += httplib::status_message(status); - s += "\r\n"; - return strm.write(s.data(), s.size()); -} - -inline ssize_t write_headers(Stream &strm, const Headers &headers) { - ssize_t write_len = 0; - for (const auto &x : headers) { - std::string s; - s = x.first; - s += ": "; - s += x.second; - s += "\r\n"; - - auto len = strm.write(s.data(), s.size()); - if (len < 0) { return len; } - write_len += len; - } - auto len = strm.write("\r\n"); - if (len < 0) { return len; } - write_len += len; - return write_len; -} - -inline bool write_data(Stream &strm, const char *d, size_t l) { - size_t offset = 0; - while (offset < l) { - auto length = strm.write(d + offset, l - offset); - if (length < 0) { return false; } - offset += static_cast(length); - } - return true; -} - -template -inline bool write_content_with_progress(Stream &strm, - const ContentProvider &content_provider, - size_t offset, size_t length, - T is_shutting_down, - const UploadProgress &upload_progress, - Error &error) { - size_t end_offset = offset + length; - size_t start_offset = offset; - auto ok = true; - DataSink data_sink; - - data_sink.write = [&](const char *d, size_t l) -> bool { - if (ok) { - if (write_data(strm, d, l)) { - offset += l; - - if (upload_progress && length > 0) { - size_t current_written = offset - start_offset; - if (!upload_progress(current_written, length)) { - ok = false; - return false; - } - } - } else { - ok = false; - } - } - return ok; - }; - - data_sink.is_writable = [&]() -> bool { return strm.wait_writable(); }; - - while (offset < end_offset && !is_shutting_down()) { - if (!strm.wait_writable()) { - error = Error::Write; - return false; - } else if (!content_provider(offset, end_offset - offset, data_sink)) { - error = Error::Canceled; - return false; - } else if (!ok) { - error = Error::Write; - return false; - } - } - - error = Error::Success; - return true; -} - -template -inline bool write_content(Stream &strm, const ContentProvider &content_provider, - size_t offset, size_t length, T is_shutting_down, - Error &error) { - return write_content_with_progress(strm, content_provider, offset, length, - is_shutting_down, nullptr, error); -} - -template -inline bool write_content(Stream &strm, const ContentProvider &content_provider, - size_t offset, size_t length, - const T &is_shutting_down) { - auto error = Error::Success; - return write_content(strm, content_provider, offset, length, is_shutting_down, - error); -} - -template -inline bool -write_content_without_length(Stream &strm, - const ContentProvider &content_provider, - const T &is_shutting_down) { - size_t offset = 0; - auto data_available = true; - auto ok = true; - DataSink data_sink; - - data_sink.write = [&](const char *d, size_t l) -> bool { - if (ok) { - offset += l; - if (!write_data(strm, d, l)) { ok = false; } - } - return ok; - }; - - data_sink.is_writable = [&]() -> bool { return strm.wait_writable(); }; - - data_sink.done = [&](void) { data_available = false; }; - - while (data_available && !is_shutting_down()) { - if (!strm.wait_writable()) { - return false; - } else if (!content_provider(offset, 0, data_sink)) { - return false; - } else if (!ok) { - return false; - } - } - return true; -} - -template -inline bool -write_content_chunked(Stream &strm, const ContentProvider &content_provider, - const T &is_shutting_down, U &compressor, Error &error) { - size_t offset = 0; - auto data_available = true; - auto ok = true; - DataSink data_sink; - - data_sink.write = [&](const char *d, size_t l) -> bool { - if (ok) { - data_available = l > 0; - offset += l; - - std::string payload; - if (compressor.compress(d, l, false, - [&](const char *data, size_t data_len) { - payload.append(data, data_len); - return true; - })) { - if (!payload.empty()) { - // Emit chunked response header and footer for each chunk - auto chunk = - from_i_to_hex(payload.size()) + "\r\n" + payload + "\r\n"; - if (!write_data(strm, chunk.data(), chunk.size())) { ok = false; } - } - } else { - ok = false; - } - } - return ok; - }; - - data_sink.is_writable = [&]() -> bool { return strm.wait_writable(); }; - - auto done_with_trailer = [&](const Headers *trailer) { - if (!ok) { return; } - - data_available = false; - - std::string payload; - if (!compressor.compress(nullptr, 0, true, - [&](const char *data, size_t data_len) { - payload.append(data, data_len); - return true; - })) { - ok = false; - return; - } - - if (!payload.empty()) { - // Emit chunked response header and footer for each chunk - auto chunk = from_i_to_hex(payload.size()) + "\r\n" + payload + "\r\n"; - if (!write_data(strm, chunk.data(), chunk.size())) { - ok = false; - return; - } - } - - constexpr const char done_marker[] = "0\r\n"; - if (!write_data(strm, done_marker, str_len(done_marker))) { ok = false; } - - // Trailer - if (trailer) { - for (const auto &kv : *trailer) { - std::string field_line = kv.first + ": " + kv.second + "\r\n"; - if (!write_data(strm, field_line.data(), field_line.size())) { - ok = false; - } - } - } - - constexpr const char crlf[] = "\r\n"; - if (!write_data(strm, crlf, str_len(crlf))) { ok = false; } - }; - - data_sink.done = [&](void) { done_with_trailer(nullptr); }; - - data_sink.done_with_trailer = [&](const Headers &trailer) { - done_with_trailer(&trailer); - }; - - while (data_available && !is_shutting_down()) { - if (!strm.wait_writable()) { - error = Error::Write; - return false; - } else if (!content_provider(offset, 0, data_sink)) { - error = Error::Canceled; - return false; - } else if (!ok) { - error = Error::Write; - return false; - } - } - - error = Error::Success; - return true; -} - -template -inline bool write_content_chunked(Stream &strm, - const ContentProvider &content_provider, - const T &is_shutting_down, U &compressor) { - auto error = Error::Success; - return write_content_chunked(strm, content_provider, is_shutting_down, - compressor, error); -} - -template -inline bool redirect(T &cli, Request &req, Response &res, - const std::string &path, const std::string &location, - Error &error) { - Request new_req = req; - new_req.path = path; - new_req.redirect_count_ -= 1; - - if (res.status == StatusCode::SeeOther_303 && - (req.method != "GET" && req.method != "HEAD")) { - new_req.method = "GET"; - new_req.body.clear(); - new_req.headers.clear(); - } - - Response new_res; - - auto ret = cli.send(new_req, new_res, error); - if (ret) { - req = new_req; - res = new_res; - - if (res.location.empty()) { res.location = location; } - } - return ret; -} - -inline std::string params_to_query_str(const Params ¶ms) { - std::string query; - - for (auto it = params.begin(); it != params.end(); ++it) { - if (it != params.begin()) { query += "&"; } - query += encode_query_component(it->first); - query += "="; - query += encode_query_component(it->second); - } - return query; -} - -inline void parse_query_text(const char *data, std::size_t size, - Params ¶ms) { - std::set cache; - split(data, data + size, '&', [&](const char *b, const char *e) { - std::string kv(b, e); - if (cache.find(kv) != cache.end()) { return; } - cache.insert(std::move(kv)); - - std::string key; - std::string val; - divide(b, static_cast(e - b), '=', - [&](const char *lhs_data, std::size_t lhs_size, const char *rhs_data, - std::size_t rhs_size) { - key.assign(lhs_data, lhs_size); - val.assign(rhs_data, rhs_size); - }); - - if (!key.empty()) { - params.emplace(decode_query_component(key), decode_query_component(val)); - } - }); -} - -inline void parse_query_text(const std::string &s, Params ¶ms) { - parse_query_text(s.data(), s.size(), params); -} - -inline bool parse_multipart_boundary(const std::string &content_type, - std::string &boundary) { - auto boundary_keyword = "boundary="; - auto pos = content_type.find(boundary_keyword); - if (pos == std::string::npos) { return false; } - auto end = content_type.find(';', pos); - auto beg = pos + strlen(boundary_keyword); - boundary = trim_double_quotes_copy(content_type.substr(beg, end - beg)); - return !boundary.empty(); -} - -inline void parse_disposition_params(const std::string &s, Params ¶ms) { - std::set cache; - split(s.data(), s.data() + s.size(), ';', [&](const char *b, const char *e) { - std::string kv(b, e); - if (cache.find(kv) != cache.end()) { return; } - cache.insert(kv); - - std::string key; - std::string val; - split(b, e, '=', [&](const char *b2, const char *e2) { - if (key.empty()) { - key.assign(b2, e2); - } else { - val.assign(b2, e2); - } - }); - - if (!key.empty()) { - params.emplace(trim_double_quotes_copy((key)), - trim_double_quotes_copy((val))); - } - }); -} - -#ifdef CPPHTTPLIB_NO_EXCEPTIONS -inline bool parse_range_header(const std::string &s, Ranges &ranges) { -#else -inline bool parse_range_header(const std::string &s, Ranges &ranges) try { -#endif - auto is_valid = [](const std::string &str) { - return std::all_of(str.cbegin(), str.cend(), - [](unsigned char c) { return std::isdigit(c); }); - }; - - if (s.size() > 7 && s.compare(0, 6, "bytes=") == 0) { - const auto pos = static_cast(6); - const auto len = static_cast(s.size() - 6); - auto all_valid_ranges = true; - split(&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) { - if (!all_valid_ranges) { return; } - - const auto it = std::find(b, e, '-'); - if (it == e) { - all_valid_ranges = false; - return; - } - - const auto lhs = std::string(b, it); - const auto rhs = std::string(it + 1, e); - if (!is_valid(lhs) || !is_valid(rhs)) { - all_valid_ranges = false; - return; - } - - const auto first = - static_cast(lhs.empty() ? -1 : std::stoll(lhs)); - const auto last = - static_cast(rhs.empty() ? -1 : std::stoll(rhs)); - if ((first == -1 && last == -1) || - (first != -1 && last != -1 && first > last)) { - all_valid_ranges = false; - return; - } - - ranges.emplace_back(first, last); - }); - return all_valid_ranges && !ranges.empty(); - } - return false; -#ifdef CPPHTTPLIB_NO_EXCEPTIONS -} -#else -} catch (...) { return false; } -#endif - -inline bool parse_accept_header(const std::string &s, - std::vector &content_types) { - content_types.clear(); - - // Empty string is considered valid (no preference) - if (s.empty()) { return true; } - - // Check for invalid patterns: leading/trailing commas or consecutive commas - if (s.front() == ',' || s.back() == ',' || - s.find(",,") != std::string::npos) { - return false; - } - - struct AcceptEntry { - std::string media_type; - double quality; - int order; // Original order in header - }; - - std::vector entries; - int order = 0; - bool has_invalid_entry = false; - - // Split by comma and parse each entry - split(s.data(), s.data() + s.size(), ',', [&](const char *b, const char *e) { - std::string entry(b, e); - entry = trim_copy(entry); - - if (entry.empty()) { - has_invalid_entry = true; - return; - } - - AcceptEntry accept_entry; - accept_entry.quality = 1.0; // Default quality - accept_entry.order = order++; - - // Find q= parameter - auto q_pos = entry.find(";q="); - if (q_pos == std::string::npos) { q_pos = entry.find("; q="); } - - if (q_pos != std::string::npos) { - // Extract media type (before q parameter) - accept_entry.media_type = trim_copy(entry.substr(0, q_pos)); - - // Extract quality value - auto q_start = entry.find('=', q_pos) + 1; - auto q_end = entry.find(';', q_start); - if (q_end == std::string::npos) { q_end = entry.length(); } - - std::string quality_str = - trim_copy(entry.substr(q_start, q_end - q_start)); - if (quality_str.empty()) { - has_invalid_entry = true; - return; - } - -#ifdef CPPHTTPLIB_NO_EXCEPTIONS - { - std::istringstream iss(quality_str); - iss >> accept_entry.quality; - - // Check if conversion was successful and entire string was consumed - if (iss.fail() || !iss.eof()) { - has_invalid_entry = true; - return; - } - } -#else - try { - accept_entry.quality = std::stod(quality_str); - } catch (...) { - has_invalid_entry = true; - return; - } -#endif - // Check if quality is in valid range [0.0, 1.0] - if (accept_entry.quality < 0.0 || accept_entry.quality > 1.0) { - has_invalid_entry = true; - return; - } - } else { - // No quality parameter, use entire entry as media type - accept_entry.media_type = entry; - } - - // Remove additional parameters from media type - auto param_pos = accept_entry.media_type.find(';'); - if (param_pos != std::string::npos) { - accept_entry.media_type = - trim_copy(accept_entry.media_type.substr(0, param_pos)); - } - - // Basic validation of media type format - if (accept_entry.media_type.empty()) { - has_invalid_entry = true; - return; - } - - // Check for basic media type format (should contain '/' or be '*') - if (accept_entry.media_type != "*" && - accept_entry.media_type.find('/') == std::string::npos) { - has_invalid_entry = true; - return; - } - - entries.push_back(accept_entry); - }); - - // Return false if any invalid entry was found - if (has_invalid_entry) { return false; } - - // Sort by quality (descending), then by original order (ascending) - std::sort(entries.begin(), entries.end(), - [](const AcceptEntry &a, const AcceptEntry &b) { - if (a.quality != b.quality) { - return a.quality > b.quality; // Higher quality first - } - return a.order < b.order; // Earlier order first for same quality - }); - - // Extract sorted media types - content_types.reserve(entries.size()); - for (const auto &entry : entries) { - content_types.push_back(entry.media_type); - } - - return true; -} - -class FormDataParser { -public: - FormDataParser() = default; - - void set_boundary(std::string &&boundary) { - boundary_ = boundary; - dash_boundary_crlf_ = dash_ + boundary_ + crlf_; - crlf_dash_boundary_ = crlf_ + dash_ + boundary_; - } - - bool is_valid() const { return is_valid_; } - - bool parse(const char *buf, size_t n, const FormDataHeader &header_callback, - const ContentReceiver &content_callback) { - - buf_append(buf, n); - - while (buf_size() > 0) { - switch (state_) { - case 0: { // Initial boundary - auto pos = buf_find(dash_boundary_crlf_); - if (pos == buf_size()) { return true; } - buf_erase(pos + dash_boundary_crlf_.size()); - state_ = 1; - break; - } - case 1: { // New entry - clear_file_info(); - state_ = 2; - break; - } - case 2: { // Headers - auto pos = buf_find(crlf_); - if (pos > CPPHTTPLIB_HEADER_MAX_LENGTH) { return false; } - while (pos < buf_size()) { - // Empty line - if (pos == 0) { - if (!header_callback(file_)) { - is_valid_ = false; - return false; - } - buf_erase(crlf_.size()); - state_ = 3; - break; - } - - const auto header = buf_head(pos); - - if (!parse_header(header.data(), header.data() + header.size(), - [&](const std::string &, const std::string &) {})) { - is_valid_ = false; - return false; - } - - // Parse and emplace space trimmed headers into a map - if (!parse_header( - header.data(), header.data() + header.size(), - [&](const std::string &key, const std::string &val) { - file_.headers.emplace(key, val); - })) { - is_valid_ = false; - return false; - } - - constexpr const char header_content_type[] = "Content-Type:"; - - if (start_with_case_ignore(header, header_content_type)) { - file_.content_type = - trim_copy(header.substr(str_len(header_content_type))); - } else { - thread_local const std::regex re_content_disposition( - R"~(^Content-Disposition:\s*form-data;\s*(.*)$)~", - std::regex_constants::icase); - - std::smatch m; - if (std::regex_match(header, m, re_content_disposition)) { - Params params; - parse_disposition_params(m[1], params); - - auto it = params.find("name"); - if (it != params.end()) { - file_.name = it->second; - } else { - is_valid_ = false; - return false; - } - - it = params.find("filename"); - if (it != params.end()) { file_.filename = it->second; } - - it = params.find("filename*"); - if (it != params.end()) { - // Only allow UTF-8 encoding... - thread_local const std::regex re_rfc5987_encoding( - R"~(^UTF-8''(.+?)$)~", std::regex_constants::icase); - - std::smatch m2; - if (std::regex_match(it->second, m2, re_rfc5987_encoding)) { - file_.filename = decode_path_component(m2[1]); // override... - } else { - is_valid_ = false; - return false; - } - } - } - } - buf_erase(pos + crlf_.size()); - pos = buf_find(crlf_); - } - if (state_ != 3) { return true; } - break; - } - case 3: { // Body - if (crlf_dash_boundary_.size() > buf_size()) { return true; } - auto pos = buf_find(crlf_dash_boundary_); - if (pos < buf_size()) { - if (!content_callback(buf_data(), pos)) { - is_valid_ = false; - return false; - } - buf_erase(pos + crlf_dash_boundary_.size()); - state_ = 4; - } else { - auto len = buf_size() - crlf_dash_boundary_.size(); - if (len > 0) { - if (!content_callback(buf_data(), len)) { - is_valid_ = false; - return false; - } - buf_erase(len); - } - return true; - } - break; - } - case 4: { // Boundary - if (crlf_.size() > buf_size()) { return true; } - if (buf_start_with(crlf_)) { - buf_erase(crlf_.size()); - state_ = 1; - } else { - if (dash_.size() > buf_size()) { return true; } - if (buf_start_with(dash_)) { - buf_erase(dash_.size()); - is_valid_ = true; - buf_erase(buf_size()); // Remove epilogue - } else { - return true; - } - } - break; - } - } - } - - return true; - } - -private: - void clear_file_info() { - file_.name.clear(); - file_.filename.clear(); - file_.content_type.clear(); - file_.headers.clear(); - } - - bool start_with_case_ignore(const std::string &a, const char *b) const { - const auto b_len = strlen(b); - if (a.size() < b_len) { return false; } - for (size_t i = 0; i < b_len; i++) { - if (case_ignore::to_lower(a[i]) != case_ignore::to_lower(b[i])) { - return false; - } - } - return true; - } - - const std::string dash_ = "--"; - const std::string crlf_ = "\r\n"; - std::string boundary_; - std::string dash_boundary_crlf_; - std::string crlf_dash_boundary_; - - size_t state_ = 0; - bool is_valid_ = false; - FormData file_; - - // Buffer - bool start_with(const std::string &a, size_t spos, size_t epos, - const std::string &b) const { - if (epos - spos < b.size()) { return false; } - for (size_t i = 0; i < b.size(); i++) { - if (a[i + spos] != b[i]) { return false; } - } - return true; - } - - size_t buf_size() const { return buf_epos_ - buf_spos_; } - - const char *buf_data() const { return &buf_[buf_spos_]; } - - std::string buf_head(size_t l) const { return buf_.substr(buf_spos_, l); } - - bool buf_start_with(const std::string &s) const { - return start_with(buf_, buf_spos_, buf_epos_, s); - } - - size_t buf_find(const std::string &s) const { - auto c = s.front(); - - size_t off = buf_spos_; - while (off < buf_epos_) { - auto pos = off; - while (true) { - if (pos == buf_epos_) { return buf_size(); } - if (buf_[pos] == c) { break; } - pos++; - } - - auto remaining_size = buf_epos_ - pos; - if (s.size() > remaining_size) { return buf_size(); } - - if (start_with(buf_, pos, buf_epos_, s)) { return pos - buf_spos_; } - - off = pos + 1; - } - - return buf_size(); - } - - void buf_append(const char *data, size_t n) { - auto remaining_size = buf_size(); - if (remaining_size > 0 && buf_spos_ > 0) { - for (size_t i = 0; i < remaining_size; i++) { - buf_[i] = buf_[buf_spos_ + i]; - } - } - buf_spos_ = 0; - buf_epos_ = remaining_size; - - if (remaining_size + n > buf_.size()) { buf_.resize(remaining_size + n); } - - for (size_t i = 0; i < n; i++) { - buf_[buf_epos_ + i] = data[i]; - } - buf_epos_ += n; - } - - void buf_erase(size_t size) { buf_spos_ += size; } - - std::string buf_; - size_t buf_spos_ = 0; - size_t buf_epos_ = 0; -}; - -inline std::string random_string(size_t length) { - constexpr const char data[] = - "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - - thread_local auto engine([]() { - // std::random_device might actually be deterministic on some - // platforms, but due to lack of support in the c++ standard library, - // doing better requires either some ugly hacks or breaking portability. - std::random_device seed_gen; - // Request 128 bits of entropy for initialization - std::seed_seq seed_sequence{seed_gen(), seed_gen(), seed_gen(), seed_gen()}; - return std::mt19937(seed_sequence); - }()); - - std::string result; - for (size_t i = 0; i < length; i++) { - result += data[engine() % (sizeof(data) - 1)]; - } - return result; -} - -inline std::string make_multipart_data_boundary() { - return "--cpp-httplib-multipart-data-" + detail::random_string(16); -} - -inline bool is_multipart_boundary_chars_valid(const std::string &boundary) { - auto valid = true; - for (size_t i = 0; i < boundary.size(); i++) { - auto c = boundary[i]; - if (!std::isalnum(c) && c != '-' && c != '_') { - valid = false; - break; - } - } - return valid; -} - -template -inline std::string -serialize_multipart_formdata_item_begin(const T &item, - const std::string &boundary) { - std::string body = "--" + boundary + "\r\n"; - body += "Content-Disposition: form-data; name=\"" + item.name + "\""; - if (!item.filename.empty()) { - body += "; filename=\"" + item.filename + "\""; - } - body += "\r\n"; - if (!item.content_type.empty()) { - body += "Content-Type: " + item.content_type + "\r\n"; - } - body += "\r\n"; - - return body; -} - -inline std::string serialize_multipart_formdata_item_end() { return "\r\n"; } - -inline std::string -serialize_multipart_formdata_finish(const std::string &boundary) { - return "--" + boundary + "--\r\n"; -} - -inline std::string -serialize_multipart_formdata_get_content_type(const std::string &boundary) { - return "multipart/form-data; boundary=" + boundary; -} - -inline std::string -serialize_multipart_formdata(const UploadFormDataItems &items, - const std::string &boundary, bool finish = true) { - std::string body; - - for (const auto &item : items) { - body += serialize_multipart_formdata_item_begin(item, boundary); - body += item.content + serialize_multipart_formdata_item_end(); - } - - if (finish) { body += serialize_multipart_formdata_finish(boundary); } - - return body; -} - -inline void coalesce_ranges(Ranges &ranges, size_t content_length) { - if (ranges.size() <= 1) return; - - // Sort ranges by start position - std::sort(ranges.begin(), ranges.end(), - [](const Range &a, const Range &b) { return a.first < b.first; }); - - Ranges coalesced; - coalesced.reserve(ranges.size()); - - for (auto &r : ranges) { - auto first_pos = r.first; - auto last_pos = r.second; - - // Handle special cases like in range_error - if (first_pos == -1 && last_pos == -1) { - first_pos = 0; - last_pos = static_cast(content_length); - } - - if (first_pos == -1) { - first_pos = static_cast(content_length) - last_pos; - last_pos = static_cast(content_length) - 1; - } - - if (last_pos == -1 || last_pos >= static_cast(content_length)) { - last_pos = static_cast(content_length) - 1; - } - - // Skip invalid ranges - if (!(0 <= first_pos && first_pos <= last_pos && - last_pos < static_cast(content_length))) { - continue; - } - - // Coalesce with previous range if overlapping or adjacent (but not - // identical) - if (!coalesced.empty()) { - auto &prev = coalesced.back(); - // Check if current range overlaps or is adjacent to previous range - // but don't coalesce identical ranges (allow duplicates) - if (first_pos <= prev.second + 1 && - !(first_pos == prev.first && last_pos == prev.second)) { - // Extend the previous range - prev.second = (std::max)(prev.second, last_pos); - continue; - } - } - - // Add new range - coalesced.emplace_back(first_pos, last_pos); - } - - ranges = std::move(coalesced); -} - -inline bool range_error(Request &req, Response &res) { - if (!req.ranges.empty() && 200 <= res.status && res.status < 300) { - ssize_t content_len = static_cast( - res.content_length_ ? res.content_length_ : res.body.size()); - - std::vector> processed_ranges; - size_t overwrapping_count = 0; - - // NOTE: The following Range check is based on '14.2. Range' in RFC 9110 - // 'HTTP Semantics' to avoid potential denial-of-service attacks. - // https://www.rfc-editor.org/rfc/rfc9110#section-14.2 - - // Too many ranges - if (req.ranges.size() > CPPHTTPLIB_RANGE_MAX_COUNT) { return true; } - - for (auto &r : req.ranges) { - auto &first_pos = r.first; - auto &last_pos = r.second; - - if (first_pos == -1 && last_pos == -1) { - first_pos = 0; - last_pos = content_len; - } - - if (first_pos == -1) { - first_pos = content_len - last_pos; - last_pos = content_len - 1; - } - - // NOTE: RFC-9110 '14.1.2. Byte Ranges': - // A client can limit the number of bytes requested without knowing the - // size of the selected representation. If the last-pos value is absent, - // or if the value is greater than or equal to the current length of the - // representation data, the byte range is interpreted as the remainder of - // the representation (i.e., the server replaces the value of last-pos - // with a value that is one less than the current length of the selected - // representation). - // https://www.rfc-editor.org/rfc/rfc9110.html#section-14.1.2-6 - if (last_pos == -1 || last_pos >= content_len) { - last_pos = content_len - 1; - } - - // Range must be within content length - if (!(0 <= first_pos && first_pos <= last_pos && - last_pos <= content_len - 1)) { - return true; - } - - // Request must not have more than two overlapping ranges - for (const auto &processed_range : processed_ranges) { - if (!(last_pos < processed_range.first || - first_pos > processed_range.second)) { - overwrapping_count++; - if (overwrapping_count > 2) { return true; } - break; // Only count once per range - } - } - - processed_ranges.emplace_back(first_pos, last_pos); - } - - // After validation, coalesce overlapping ranges as per RFC 9110 - coalesce_ranges(req.ranges, static_cast(content_len)); - } - - return false; -} - -inline std::pair -get_range_offset_and_length(Range r, size_t content_length) { - assert(r.first != -1 && r.second != -1); - assert(0 <= r.first && r.first < static_cast(content_length)); - assert(r.first <= r.second && - r.second < static_cast(content_length)); - (void)(content_length); - return std::make_pair(r.first, static_cast(r.second - r.first) + 1); -} - -inline std::string make_content_range_header_field( - const std::pair &offset_and_length, size_t content_length) { - auto st = offset_and_length.first; - auto ed = st + offset_and_length.second - 1; - - std::string field = "bytes "; - field += std::to_string(st); - field += "-"; - field += std::to_string(ed); - field += "/"; - field += std::to_string(content_length); - return field; -} - -template -bool process_multipart_ranges_data(const Request &req, - const std::string &boundary, - const std::string &content_type, - size_t content_length, SToken stoken, - CToken ctoken, Content content) { - for (size_t i = 0; i < req.ranges.size(); i++) { - ctoken("--"); - stoken(boundary); - ctoken("\r\n"); - if (!content_type.empty()) { - ctoken("Content-Type: "); - stoken(content_type); - ctoken("\r\n"); - } - - auto offset_and_length = - get_range_offset_and_length(req.ranges[i], content_length); - - ctoken("Content-Range: "); - stoken(make_content_range_header_field(offset_and_length, content_length)); - ctoken("\r\n"); - ctoken("\r\n"); - - if (!content(offset_and_length.first, offset_and_length.second)) { - return false; - } - ctoken("\r\n"); - } - - ctoken("--"); - stoken(boundary); - ctoken("--"); - - return true; -} - -inline void make_multipart_ranges_data(const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type, - size_t content_length, - std::string &data) { - process_multipart_ranges_data( - req, boundary, content_type, content_length, - [&](const std::string &token) { data += token; }, - [&](const std::string &token) { data += token; }, - [&](size_t offset, size_t length) { - assert(offset + length <= content_length); - data += res.body.substr(offset, length); - return true; - }); -} - -inline size_t get_multipart_ranges_data_length(const Request &req, - const std::string &boundary, - const std::string &content_type, - size_t content_length) { - size_t data_length = 0; - - process_multipart_ranges_data( - req, boundary, content_type, content_length, - [&](const std::string &token) { data_length += token.size(); }, - [&](const std::string &token) { data_length += token.size(); }, - [&](size_t /*offset*/, size_t length) { - data_length += length; - return true; - }); - - return data_length; -} - -template -inline bool -write_multipart_ranges_data(Stream &strm, const Request &req, Response &res, - const std::string &boundary, - const std::string &content_type, - size_t content_length, const T &is_shutting_down) { - return process_multipart_ranges_data( - req, boundary, content_type, content_length, - [&](const std::string &token) { strm.write(token); }, - [&](const std::string &token) { strm.write(token); }, - [&](size_t offset, size_t length) { - return write_content(strm, res.content_provider_, offset, length, - is_shutting_down); - }); -} - -inline bool expect_content(const Request &req) { - if (req.method == "POST" || req.method == "PUT" || req.method == "PATCH" || - req.method == "DELETE") { - return true; - } - if (req.has_header("Content-Length") && - req.get_header_value_u64("Content-Length") > 0) { - return true; - } - if (is_chunked_transfer_encoding(req.headers)) { return true; } - return false; -} - -inline bool has_crlf(const std::string &s) { - auto p = s.c_str(); - while (*p) { - if (*p == '\r' || *p == '\n') { return true; } - p++; - } - return false; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline std::string message_digest(const std::string &s, const EVP_MD *algo) { - auto context = std::unique_ptr( - EVP_MD_CTX_new(), EVP_MD_CTX_free); - - unsigned int hash_length = 0; - unsigned char hash[EVP_MAX_MD_SIZE]; - - EVP_DigestInit_ex(context.get(), algo, nullptr); - EVP_DigestUpdate(context.get(), s.c_str(), s.size()); - EVP_DigestFinal_ex(context.get(), hash, &hash_length); - - std::stringstream ss; - for (auto i = 0u; i < hash_length; ++i) { - ss << std::hex << std::setw(2) << std::setfill('0') - << static_cast(hash[i]); - } - - return ss.str(); -} - -inline std::string MD5(const std::string &s) { - return message_digest(s, EVP_md5()); -} - -inline std::string SHA_256(const std::string &s) { - return message_digest(s, EVP_sha256()); -} - -inline std::string SHA_512(const std::string &s) { - return message_digest(s, EVP_sha512()); -} - -inline std::pair make_digest_authentication_header( - const Request &req, const std::map &auth, - size_t cnonce_count, const std::string &cnonce, const std::string &username, - const std::string &password, bool is_proxy = false) { - std::string nc; - { - std::stringstream ss; - ss << std::setfill('0') << std::setw(8) << std::hex << cnonce_count; - nc = ss.str(); - } - - std::string qop; - if (auth.find("qop") != auth.end()) { - qop = auth.at("qop"); - if (qop.find("auth-int") != std::string::npos) { - qop = "auth-int"; - } else if (qop.find("auth") != std::string::npos) { - qop = "auth"; - } else { - qop.clear(); - } - } - - std::string algo = "MD5"; - if (auth.find("algorithm") != auth.end()) { algo = auth.at("algorithm"); } - - std::string response; - { - auto H = algo == "SHA-256" ? detail::SHA_256 - : algo == "SHA-512" ? detail::SHA_512 - : detail::MD5; - - auto A1 = username + ":" + auth.at("realm") + ":" + password; - - auto A2 = req.method + ":" + req.path; - if (qop == "auth-int") { A2 += ":" + H(req.body); } - - if (qop.empty()) { - response = H(H(A1) + ":" + auth.at("nonce") + ":" + H(A2)); - } else { - response = H(H(A1) + ":" + auth.at("nonce") + ":" + nc + ":" + cnonce + - ":" + qop + ":" + H(A2)); - } - } - - auto opaque = (auth.find("opaque") != auth.end()) ? auth.at("opaque") : ""; - - auto field = "Digest username=\"" + username + "\", realm=\"" + - auth.at("realm") + "\", nonce=\"" + auth.at("nonce") + - "\", uri=\"" + req.path + "\", algorithm=" + algo + - (qop.empty() ? ", response=\"" - : ", qop=" + qop + ", nc=" + nc + ", cnonce=\"" + - cnonce + "\", response=\"") + - response + "\"" + - (opaque.empty() ? "" : ", opaque=\"" + opaque + "\""); - - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, field); -} - -inline bool is_ssl_peer_could_be_closed(SSL *ssl, socket_t sock) { - detail::set_nonblocking(sock, true); - auto se = detail::scope_exit([&]() { detail::set_nonblocking(sock, false); }); - - char buf[1]; - return !SSL_peek(ssl, buf, 1) && - SSL_get_error(ssl, 0) == SSL_ERROR_ZERO_RETURN; -} - -#ifdef _WIN32 -// NOTE: This code came up with the following stackoverflow post: -// https://stackoverflow.com/questions/9507184/can-openssl-on-windows-use-the-system-certificate-store -inline bool load_system_certs_on_windows(X509_STORE *store) { - auto hStore = CertOpenSystemStoreW((HCRYPTPROV_LEGACY)NULL, L"ROOT"); - if (!hStore) { return false; } - - auto result = false; - PCCERT_CONTEXT pContext = NULL; - while ((pContext = CertEnumCertificatesInStore(hStore, pContext)) != - nullptr) { - auto encoded_cert = - static_cast(pContext->pbCertEncoded); - - auto x509 = d2i_X509(NULL, &encoded_cert, pContext->cbCertEncoded); - if (x509) { - X509_STORE_add_cert(store, x509); - X509_free(x509); - result = true; - } - } - - CertFreeCertificateContext(pContext); - CertCloseStore(hStore, 0); - - return result; -} -#elif defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) && TARGET_OS_MAC -template -using CFObjectPtr = - std::unique_ptr::type, void (*)(CFTypeRef)>; - -inline void cf_object_ptr_deleter(CFTypeRef obj) { - if (obj) { CFRelease(obj); } -} - -inline bool retrieve_certs_from_keychain(CFObjectPtr &certs) { - CFStringRef keys[] = {kSecClass, kSecMatchLimit, kSecReturnRef}; - CFTypeRef values[] = {kSecClassCertificate, kSecMatchLimitAll, - kCFBooleanTrue}; - - CFObjectPtr query( - CFDictionaryCreate(nullptr, reinterpret_cast(keys), values, - sizeof(keys) / sizeof(keys[0]), - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks), - cf_object_ptr_deleter); - - if (!query) { return false; } - - CFTypeRef security_items = nullptr; - if (SecItemCopyMatching(query.get(), &security_items) != errSecSuccess || - CFArrayGetTypeID() != CFGetTypeID(security_items)) { - return false; - } - - certs.reset(reinterpret_cast(security_items)); - return true; -} - -inline bool retrieve_root_certs_from_keychain(CFObjectPtr &certs) { - CFArrayRef root_security_items = nullptr; - if (SecTrustCopyAnchorCertificates(&root_security_items) != errSecSuccess) { - return false; - } - - certs.reset(root_security_items); - return true; -} - -inline bool add_certs_to_x509_store(CFArrayRef certs, X509_STORE *store) { - auto result = false; - for (auto i = 0; i < CFArrayGetCount(certs); ++i) { - const auto cert = reinterpret_cast( - CFArrayGetValueAtIndex(certs, i)); - - if (SecCertificateGetTypeID() != CFGetTypeID(cert)) { continue; } - - CFDataRef cert_data = nullptr; - if (SecItemExport(cert, kSecFormatX509Cert, 0, nullptr, &cert_data) != - errSecSuccess) { - continue; - } - - CFObjectPtr cert_data_ptr(cert_data, cf_object_ptr_deleter); - - auto encoded_cert = static_cast( - CFDataGetBytePtr(cert_data_ptr.get())); - - auto x509 = - d2i_X509(NULL, &encoded_cert, CFDataGetLength(cert_data_ptr.get())); - - if (x509) { - X509_STORE_add_cert(store, x509); - X509_free(x509); - result = true; - } - } - - return result; -} - -inline bool load_system_certs_on_macos(X509_STORE *store) { - auto result = false; - CFObjectPtr certs(nullptr, cf_object_ptr_deleter); - if (retrieve_certs_from_keychain(certs) && certs) { - result = add_certs_to_x509_store(certs.get(), store); - } - - if (retrieve_root_certs_from_keychain(certs) && certs) { - result = add_certs_to_x509_store(certs.get(), store) || result; - } - - return result; -} -#endif // _WIN32 -#endif // CPPHTTPLIB_OPENSSL_SUPPORT - -#ifdef _WIN32 -class WSInit { -public: - WSInit() { - WSADATA wsaData; - if (WSAStartup(0x0002, &wsaData) == 0) is_valid_ = true; - } - - ~WSInit() { - if (is_valid_) WSACleanup(); - } - - bool is_valid_ = false; -}; - -static WSInit wsinit_; -#endif - -inline bool parse_www_authenticate(const Response &res, - std::map &auth, - bool is_proxy) { - auto auth_key = is_proxy ? "Proxy-Authenticate" : "WWW-Authenticate"; - if (res.has_header(auth_key)) { - thread_local auto re = - std::regex(R"~((?:(?:,\s*)?(.+?)=(?:"(.*?)"|([^,]*))))~"); - auto s = res.get_header_value(auth_key); - auto pos = s.find(' '); - if (pos != std::string::npos) { - auto type = s.substr(0, pos); - if (type == "Basic") { - return false; - } else if (type == "Digest") { - s = s.substr(pos + 1); - auto beg = std::sregex_iterator(s.begin(), s.end(), re); - for (auto i = beg; i != std::sregex_iterator(); ++i) { - const auto &m = *i; - auto key = s.substr(static_cast(m.position(1)), - static_cast(m.length(1))); - auto val = m.length(2) > 0 - ? s.substr(static_cast(m.position(2)), - static_cast(m.length(2))) - : s.substr(static_cast(m.position(3)), - static_cast(m.length(3))); - auth[key] = val; - } - return true; - } - } - } - return false; -} - -class ContentProviderAdapter { -public: - explicit ContentProviderAdapter( - ContentProviderWithoutLength &&content_provider) - : content_provider_(content_provider) {} - - bool operator()(size_t offset, size_t, DataSink &sink) { - return content_provider_(offset, sink); - } - -private: - ContentProviderWithoutLength content_provider_; -}; - -} // namespace detail - -inline std::string hosted_at(const std::string &hostname) { - std::vector addrs; - hosted_at(hostname, addrs); - if (addrs.empty()) { return std::string(); } - return addrs[0]; -} - -inline void hosted_at(const std::string &hostname, - std::vector &addrs) { - struct addrinfo hints; - struct addrinfo *result; - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = 0; - - if (detail::getaddrinfo_with_timeout(hostname.c_str(), nullptr, &hints, - &result, 0)) { -#if defined __linux__ && !defined __ANDROID__ - res_init(); -#endif - return; - } - auto se = detail::scope_exit([&] { freeaddrinfo(result); }); - - for (auto rp = result; rp; rp = rp->ai_next) { - const auto &addr = - *reinterpret_cast(rp->ai_addr); - std::string ip; - auto dummy = -1; - if (detail::get_ip_and_port(addr, sizeof(struct sockaddr_storage), ip, - dummy)) { - addrs.push_back(ip); - } - } -} - -inline std::string encode_uri_component(const std::string &value) { - std::ostringstream escaped; - escaped.fill('0'); - escaped << std::hex; - - for (auto c : value) { - if (std::isalnum(static_cast(c)) || c == '-' || c == '_' || - c == '.' || c == '!' || c == '~' || c == '*' || c == '\'' || c == '(' || - c == ')') { - escaped << c; - } else { - escaped << std::uppercase; - escaped << '%' << std::setw(2) - << static_cast(static_cast(c)); - escaped << std::nouppercase; - } - } - - return escaped.str(); -} - -inline std::string encode_uri(const std::string &value) { - std::ostringstream escaped; - escaped.fill('0'); - escaped << std::hex; - - for (auto c : value) { - if (std::isalnum(static_cast(c)) || c == '-' || c == '_' || - c == '.' || c == '!' || c == '~' || c == '*' || c == '\'' || c == '(' || - c == ')' || c == ';' || c == '/' || c == '?' || c == ':' || c == '@' || - c == '&' || c == '=' || c == '+' || c == '$' || c == ',' || c == '#') { - escaped << c; - } else { - escaped << std::uppercase; - escaped << '%' << std::setw(2) - << static_cast(static_cast(c)); - escaped << std::nouppercase; - } - } - - return escaped.str(); -} - -inline std::string decode_uri_component(const std::string &value) { - std::string result; - - for (size_t i = 0; i < value.size(); i++) { - if (value[i] == '%' && i + 2 < value.size()) { - auto val = 0; - if (detail::from_hex_to_i(value, i + 1, 2, val)) { - result += static_cast(val); - i += 2; - } else { - result += value[i]; - } - } else { - result += value[i]; - } - } - - return result; -} - -inline std::string decode_uri(const std::string &value) { - std::string result; - - for (size_t i = 0; i < value.size(); i++) { - if (value[i] == '%' && i + 2 < value.size()) { - auto val = 0; - if (detail::from_hex_to_i(value, i + 1, 2, val)) { - result += static_cast(val); - i += 2; - } else { - result += value[i]; - } - } else { - result += value[i]; - } - } - - return result; -} - -inline std::string encode_path_component(const std::string &component) { - std::string result; - result.reserve(component.size() * 3); - - for (size_t i = 0; i < component.size(); i++) { - auto c = static_cast(component[i]); - - // Unreserved characters per RFC 3986: ALPHA / DIGIT / "-" / "." / "_" / "~" - if (std::isalnum(c) || c == '-' || c == '.' || c == '_' || c == '~') { - result += static_cast(c); - } - // Path-safe sub-delimiters: "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / - // "," / ";" / "=" - else if (c == '!' || c == '$' || c == '&' || c == '\'' || c == '(' || - c == ')' || c == '*' || c == '+' || c == ',' || c == ';' || - c == '=') { - result += static_cast(c); - } - // Colon is allowed in path segments except first segment - else if (c == ':') { - result += static_cast(c); - } - // @ is allowed in path - else if (c == '@') { - result += static_cast(c); - } else { - result += '%'; - char hex[3]; - snprintf(hex, sizeof(hex), "%02X", c); - result.append(hex, 2); - } - } - return result; -} - -inline std::string decode_path_component(const std::string &component) { - std::string result; - result.reserve(component.size()); - - for (size_t i = 0; i < component.size(); i++) { - if (component[i] == '%' && i + 1 < component.size()) { - if (component[i + 1] == 'u') { - // Unicode %uXXXX encoding - auto val = 0; - if (detail::from_hex_to_i(component, i + 2, 4, val)) { - // 4 digits Unicode codes - char buff[4]; - size_t len = detail::to_utf8(val, buff); - if (len > 0) { result.append(buff, len); } - i += 5; // 'u0000' - } else { - result += component[i]; - } - } else { - // Standard %XX encoding - auto val = 0; - if (detail::from_hex_to_i(component, i + 1, 2, val)) { - // 2 digits hex codes - result += static_cast(val); - i += 2; // 'XX' - } else { - result += component[i]; - } - } - } else { - result += component[i]; - } - } - return result; -} - -inline std::string encode_query_component(const std::string &component, - bool space_as_plus) { - std::string result; - result.reserve(component.size() * 3); - - for (size_t i = 0; i < component.size(); i++) { - auto c = static_cast(component[i]); - - // Unreserved characters per RFC 3986 - if (std::isalnum(c) || c == '-' || c == '.' || c == '_' || c == '~') { - result += static_cast(c); - } - // Space handling - else if (c == ' ') { - if (space_as_plus) { - result += '+'; - } else { - result += "%20"; - } - } - // Plus sign handling - else if (c == '+') { - if (space_as_plus) { - result += "%2B"; - } else { - result += static_cast(c); - } - } - // Query-safe sub-delimiters (excluding & and = which are query delimiters) - else if (c == '!' || c == '$' || c == '\'' || c == '(' || c == ')' || - c == '*' || c == ',' || c == ';') { - result += static_cast(c); - } - // Colon and @ are allowed in query - else if (c == ':' || c == '@') { - result += static_cast(c); - } - // Forward slash is allowed in query values - else if (c == '/') { - result += static_cast(c); - } - // Question mark is allowed in query values (after first ?) - else if (c == '?') { - result += static_cast(c); - } else { - result += '%'; - char hex[3]; - snprintf(hex, sizeof(hex), "%02X", c); - result.append(hex, 2); - } - } - return result; -} - -inline std::string decode_query_component(const std::string &component, - bool plus_as_space) { - std::string result; - result.reserve(component.size()); - - for (size_t i = 0; i < component.size(); i++) { - if (component[i] == '%' && i + 2 < component.size()) { - std::string hex = component.substr(i + 1, 2); - char *end; - unsigned long value = std::strtoul(hex.c_str(), &end, 16); - if (end == hex.c_str() + 2) { - result += static_cast(value); - i += 2; - } else { - result += component[i]; - } - } else if (component[i] == '+' && plus_as_space) { - result += ' '; // + becomes space in form-urlencoded - } else { - result += component[i]; - } - } - return result; -} - -inline std::string append_query_params(const std::string &path, - const Params ¶ms) { - std::string path_with_query = path; - thread_local const std::regex re("[^?]+\\?.*"); - auto delm = std::regex_match(path, re) ? '&' : '?'; - path_with_query += delm + detail::params_to_query_str(params); - return path_with_query; -} - -// Header utilities -inline std::pair -make_range_header(const Ranges &ranges) { - std::string field = "bytes="; - auto i = 0; - for (const auto &r : ranges) { - if (i != 0) { field += ", "; } - if (r.first != -1) { field += std::to_string(r.first); } - field += '-'; - if (r.second != -1) { field += std::to_string(r.second); } - i++; - } - return std::make_pair("Range", std::move(field)); -} - -inline std::pair -make_basic_authentication_header(const std::string &username, - const std::string &password, bool is_proxy) { - auto field = "Basic " + detail::base64_encode(username + ":" + password); - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, std::move(field)); -} - -inline std::pair -make_bearer_token_authentication_header(const std::string &token, - bool is_proxy = false) { - auto field = "Bearer " + token; - auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; - return std::make_pair(key, std::move(field)); -} - -// Request implementation -inline bool Request::has_header(const std::string &key) const { - return detail::has_header(headers, key); -} - -inline std::string Request::get_header_value(const std::string &key, - const char *def, size_t id) const { - return detail::get_header_value(headers, key, def, id); -} - -inline size_t Request::get_header_value_count(const std::string &key) const { - auto r = headers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline void Request::set_header(const std::string &key, - const std::string &val) { - if (detail::fields::is_field_name(key) && - detail::fields::is_field_value(val)) { - headers.emplace(key, val); - } -} - -inline bool Request::has_trailer(const std::string &key) const { - return trailers.find(key) != trailers.end(); -} - -inline std::string Request::get_trailer_value(const std::string &key, - size_t id) const { - auto rng = trailers.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { return it->second; } - return std::string(); -} - -inline size_t Request::get_trailer_value_count(const std::string &key) const { - auto r = trailers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline bool Request::has_param(const std::string &key) const { - return params.find(key) != params.end(); -} - -inline std::string Request::get_param_value(const std::string &key, - size_t id) const { - auto rng = params.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { return it->second; } - return std::string(); -} - -inline size_t Request::get_param_value_count(const std::string &key) const { - auto r = params.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline bool Request::is_multipart_form_data() const { - const auto &content_type = get_header_value("Content-Type"); - return !content_type.rfind("multipart/form-data", 0); -} - -// Multipart FormData implementation -inline std::string MultipartFormData::get_field(const std::string &key, - size_t id) const { - auto rng = fields.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { return it->second.content; } - return std::string(); -} - -inline std::vector -MultipartFormData::get_fields(const std::string &key) const { - std::vector values; - auto rng = fields.equal_range(key); - for (auto it = rng.first; it != rng.second; it++) { - values.push_back(it->second.content); - } - return values; -} - -inline bool MultipartFormData::has_field(const std::string &key) const { - return fields.find(key) != fields.end(); -} - -inline size_t MultipartFormData::get_field_count(const std::string &key) const { - auto r = fields.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline FormData MultipartFormData::get_file(const std::string &key, - size_t id) const { - auto rng = files.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { return it->second; } - return FormData(); -} - -inline std::vector -MultipartFormData::get_files(const std::string &key) const { - std::vector values; - auto rng = files.equal_range(key); - for (auto it = rng.first; it != rng.second; it++) { - values.push_back(it->second); - } - return values; -} - -inline bool MultipartFormData::has_file(const std::string &key) const { - return files.find(key) != files.end(); -} - -inline size_t MultipartFormData::get_file_count(const std::string &key) const { - auto r = files.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -// Response implementation -inline bool Response::has_header(const std::string &key) const { - return headers.find(key) != headers.end(); -} - -inline std::string Response::get_header_value(const std::string &key, - const char *def, - size_t id) const { - return detail::get_header_value(headers, key, def, id); -} - -inline size_t Response::get_header_value_count(const std::string &key) const { - auto r = headers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline void Response::set_header(const std::string &key, - const std::string &val) { - if (detail::fields::is_field_name(key) && - detail::fields::is_field_value(val)) { - headers.emplace(key, val); - } -} -inline bool Response::has_trailer(const std::string &key) const { - return trailers.find(key) != trailers.end(); -} - -inline std::string Response::get_trailer_value(const std::string &key, - size_t id) const { - auto rng = trailers.equal_range(key); - auto it = rng.first; - std::advance(it, static_cast(id)); - if (it != rng.second) { return it->second; } - return std::string(); -} - -inline size_t Response::get_trailer_value_count(const std::string &key) const { - auto r = trailers.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -inline void Response::set_redirect(const std::string &url, int stat) { - if (detail::fields::is_field_value(url)) { - set_header("Location", url); - if (300 <= stat && stat < 400) { - this->status = stat; - } else { - this->status = StatusCode::Found_302; - } - } -} - -inline void Response::set_content(const char *s, size_t n, - const std::string &content_type) { - body.assign(s, n); - - auto rng = headers.equal_range("Content-Type"); - headers.erase(rng.first, rng.second); - set_header("Content-Type", content_type); -} - -inline void Response::set_content(const std::string &s, - const std::string &content_type) { - set_content(s.data(), s.size(), content_type); -} - -inline void Response::set_content(std::string &&s, - const std::string &content_type) { - body = std::move(s); - - auto rng = headers.equal_range("Content-Type"); - headers.erase(rng.first, rng.second); - set_header("Content-Type", content_type); -} - -inline void Response::set_content_provider( - size_t in_length, const std::string &content_type, ContentProvider provider, - ContentProviderResourceReleaser resource_releaser) { - set_header("Content-Type", content_type); - content_length_ = in_length; - if (in_length > 0) { content_provider_ = std::move(provider); } - content_provider_resource_releaser_ = std::move(resource_releaser); - is_chunked_content_provider_ = false; -} - -inline void Response::set_content_provider( - const std::string &content_type, ContentProviderWithoutLength provider, - ContentProviderResourceReleaser resource_releaser) { - set_header("Content-Type", content_type); - content_length_ = 0; - content_provider_ = detail::ContentProviderAdapter(std::move(provider)); - content_provider_resource_releaser_ = std::move(resource_releaser); - is_chunked_content_provider_ = false; -} - -inline void Response::set_chunked_content_provider( - const std::string &content_type, ContentProviderWithoutLength provider, - ContentProviderResourceReleaser resource_releaser) { - set_header("Content-Type", content_type); - content_length_ = 0; - content_provider_ = detail::ContentProviderAdapter(std::move(provider)); - content_provider_resource_releaser_ = std::move(resource_releaser); - is_chunked_content_provider_ = true; -} - -inline void Response::set_file_content(const std::string &path, - const std::string &content_type) { - file_content_path_ = path; - file_content_content_type_ = content_type; -} - -inline void Response::set_file_content(const std::string &path) { - file_content_path_ = path; -} - -// Result implementation -inline bool Result::has_request_header(const std::string &key) const { - return request_headers_.find(key) != request_headers_.end(); -} - -inline std::string Result::get_request_header_value(const std::string &key, - const char *def, - size_t id) const { - return detail::get_header_value(request_headers_, key, def, id); -} - -inline size_t -Result::get_request_header_value_count(const std::string &key) const { - auto r = request_headers_.equal_range(key); - return static_cast(std::distance(r.first, r.second)); -} - -// Stream implementation -inline ssize_t Stream::write(const char *ptr) { - return write(ptr, strlen(ptr)); -} - -inline ssize_t Stream::write(const std::string &s) { - return write(s.data(), s.size()); -} - -namespace detail { - -inline void calc_actual_timeout(time_t max_timeout_msec, time_t duration_msec, - time_t timeout_sec, time_t timeout_usec, - time_t &actual_timeout_sec, - time_t &actual_timeout_usec) { - auto timeout_msec = (timeout_sec * 1000) + (timeout_usec / 1000); - - auto actual_timeout_msec = - (std::min)(max_timeout_msec - duration_msec, timeout_msec); - - if (actual_timeout_msec < 0) { actual_timeout_msec = 0; } - - actual_timeout_sec = actual_timeout_msec / 1000; - actual_timeout_usec = (actual_timeout_msec % 1000) * 1000; -} - -// Socket stream implementation -inline SocketStream::SocketStream( - socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec, - time_t max_timeout_msec, - std::chrono::time_point start_time) - : sock_(sock), read_timeout_sec_(read_timeout_sec), - read_timeout_usec_(read_timeout_usec), - write_timeout_sec_(write_timeout_sec), - write_timeout_usec_(write_timeout_usec), - max_timeout_msec_(max_timeout_msec), start_time_(start_time), - read_buff_(read_buff_size_, 0) {} - -inline SocketStream::~SocketStream() = default; - -inline bool SocketStream::is_readable() const { - return read_buff_off_ < read_buff_content_size_; -} - -inline bool SocketStream::wait_readable() const { - if (max_timeout_msec_ <= 0) { - return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; - } - - time_t read_timeout_sec; - time_t read_timeout_usec; - calc_actual_timeout(max_timeout_msec_, duration(), read_timeout_sec_, - read_timeout_usec_, read_timeout_sec, read_timeout_usec); - - return select_read(sock_, read_timeout_sec, read_timeout_usec) > 0; -} - -inline bool SocketStream::wait_writable() const { - return select_write(sock_, write_timeout_sec_, write_timeout_usec_) > 0 && - is_socket_alive(sock_); -} - -inline ssize_t SocketStream::read(char *ptr, size_t size) { -#ifdef _WIN32 - size = - (std::min)(size, static_cast((std::numeric_limits::max)())); -#else - size = (std::min)(size, - static_cast((std::numeric_limits::max)())); -#endif - - if (read_buff_off_ < read_buff_content_size_) { - auto remaining_size = read_buff_content_size_ - read_buff_off_; - if (size <= remaining_size) { - memcpy(ptr, read_buff_.data() + read_buff_off_, size); - read_buff_off_ += size; - return static_cast(size); - } else { - memcpy(ptr, read_buff_.data() + read_buff_off_, remaining_size); - read_buff_off_ += remaining_size; - return static_cast(remaining_size); - } - } - - if (!wait_readable()) { return -1; } - - read_buff_off_ = 0; - read_buff_content_size_ = 0; - - if (size < read_buff_size_) { - auto n = read_socket(sock_, read_buff_.data(), read_buff_size_, - CPPHTTPLIB_RECV_FLAGS); - if (n <= 0) { - return n; - } else if (n <= static_cast(size)) { - memcpy(ptr, read_buff_.data(), static_cast(n)); - return n; - } else { - memcpy(ptr, read_buff_.data(), size); - read_buff_off_ = size; - read_buff_content_size_ = static_cast(n); - return static_cast(size); - } - } else { - return read_socket(sock_, ptr, size, CPPHTTPLIB_RECV_FLAGS); - } -} - -inline ssize_t SocketStream::write(const char *ptr, size_t size) { - if (!wait_writable()) { return -1; } - -#if defined(_WIN32) && !defined(_WIN64) - size = - (std::min)(size, static_cast((std::numeric_limits::max)())); -#endif - - return send_socket(sock_, ptr, size, CPPHTTPLIB_SEND_FLAGS); -} - -inline void SocketStream::get_remote_ip_and_port(std::string &ip, - int &port) const { - return detail::get_remote_ip_and_port(sock_, ip, port); -} - -inline void SocketStream::get_local_ip_and_port(std::string &ip, - int &port) const { - return detail::get_local_ip_and_port(sock_, ip, port); -} - -inline socket_t SocketStream::socket() const { return sock_; } - -inline time_t SocketStream::duration() const { - return std::chrono::duration_cast( - std::chrono::steady_clock::now() - start_time_) - .count(); -} - -// Buffer stream implementation -inline bool BufferStream::is_readable() const { return true; } - -inline bool BufferStream::wait_readable() const { return true; } - -inline bool BufferStream::wait_writable() const { return true; } - -inline ssize_t BufferStream::read(char *ptr, size_t size) { -#if defined(_MSC_VER) && _MSC_VER < 1910 - auto len_read = buffer._Copy_s(ptr, size, size, position); -#else - auto len_read = buffer.copy(ptr, size, position); -#endif - position += static_cast(len_read); - return static_cast(len_read); -} - -inline ssize_t BufferStream::write(const char *ptr, size_t size) { - buffer.append(ptr, size); - return static_cast(size); -} - -inline void BufferStream::get_remote_ip_and_port(std::string & /*ip*/, - int & /*port*/) const {} - -inline void BufferStream::get_local_ip_and_port(std::string & /*ip*/, - int & /*port*/) const {} - -inline socket_t BufferStream::socket() const { return 0; } - -inline time_t BufferStream::duration() const { return 0; } - -inline const std::string &BufferStream::get_buffer() const { return buffer; } - -inline PathParamsMatcher::PathParamsMatcher(const std::string &pattern) - : MatcherBase(pattern) { - constexpr const char marker[] = "/:"; - - // One past the last ending position of a path param substring - std::size_t last_param_end = 0; - -#ifndef CPPHTTPLIB_NO_EXCEPTIONS - // Needed to ensure that parameter names are unique during matcher - // construction - // If exceptions are disabled, only last duplicate path - // parameter will be set - std::unordered_set param_name_set; -#endif - - while (true) { - const auto marker_pos = pattern.find( - marker, last_param_end == 0 ? last_param_end : last_param_end - 1); - if (marker_pos == std::string::npos) { break; } - - static_fragments_.push_back( - pattern.substr(last_param_end, marker_pos - last_param_end + 1)); - - const auto param_name_start = marker_pos + str_len(marker); - - auto sep_pos = pattern.find(separator, param_name_start); - if (sep_pos == std::string::npos) { sep_pos = pattern.length(); } - - auto param_name = - pattern.substr(param_name_start, sep_pos - param_name_start); - -#ifndef CPPHTTPLIB_NO_EXCEPTIONS - if (param_name_set.find(param_name) != param_name_set.cend()) { - std::string msg = "Encountered path parameter '" + param_name + - "' multiple times in route pattern '" + pattern + "'."; - throw std::invalid_argument(msg); - } -#endif - - param_names_.push_back(std::move(param_name)); - - last_param_end = sep_pos + 1; - } - - if (last_param_end < pattern.length()) { - static_fragments_.push_back(pattern.substr(last_param_end)); - } -} - -inline bool PathParamsMatcher::match(Request &request) const { - request.matches = std::smatch(); - request.path_params.clear(); - request.path_params.reserve(param_names_.size()); - - // One past the position at which the path matched the pattern last time - std::size_t starting_pos = 0; - for (size_t i = 0; i < static_fragments_.size(); ++i) { - const auto &fragment = static_fragments_[i]; - - if (starting_pos + fragment.length() > request.path.length()) { - return false; - } - - // Avoid unnecessary allocation by using strncmp instead of substr + - // comparison - if (std::strncmp(request.path.c_str() + starting_pos, fragment.c_str(), - fragment.length()) != 0) { - return false; - } - - starting_pos += fragment.length(); - - // Should only happen when we have a static fragment after a param - // Example: '/users/:id/subscriptions' - // The 'subscriptions' fragment here does not have a corresponding param - if (i >= param_names_.size()) { continue; } - - auto sep_pos = request.path.find(separator, starting_pos); - if (sep_pos == std::string::npos) { sep_pos = request.path.length(); } - - const auto ¶m_name = param_names_[i]; - - request.path_params.emplace( - param_name, request.path.substr(starting_pos, sep_pos - starting_pos)); - - // Mark everything up to '/' as matched - starting_pos = sep_pos + 1; - } - // Returns false if the path is longer than the pattern - return starting_pos >= request.path.length(); -} - -inline bool RegexMatcher::match(Request &request) const { - request.path_params.clear(); - return std::regex_match(request.path, request.matches, regex_); -} - -inline std::string make_host_and_port_string(const std::string &host, int port, - bool is_ssl) { - std::string result; - - // Enclose IPv6 address in brackets (but not if already enclosed) - if (host.find(':') == std::string::npos || - (!host.empty() && host[0] == '[')) { - // IPv4, hostname, or already bracketed IPv6 - result = host; - } else { - // IPv6 address without brackets - result = "[" + host + "]"; - } - - // Append port if not default - if ((!is_ssl && port == 80) || (is_ssl && port == 443)) { - ; // do nothing - } else { - result += ":" + std::to_string(port); - } - - return result; -} - -} // namespace detail - -// HTTP server implementation -inline Server::Server() - : new_task_queue( - [] { return new ThreadPool(CPPHTTPLIB_THREAD_POOL_COUNT); }) { -#ifndef _WIN32 - signal(SIGPIPE, SIG_IGN); -#endif -} - -inline Server::~Server() = default; - -inline std::unique_ptr -Server::make_matcher(const std::string &pattern) { - if (pattern.find("/:") != std::string::npos) { - return detail::make_unique(pattern); - } else { - return detail::make_unique(pattern); - } -} - -inline Server &Server::Get(const std::string &pattern, Handler handler) { - get_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; -} - -inline Server &Server::Post(const std::string &pattern, Handler handler) { - post_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; -} - -inline Server &Server::Post(const std::string &pattern, - HandlerWithContentReader handler) { - post_handlers_for_content_reader_.emplace_back(make_matcher(pattern), - std::move(handler)); - return *this; -} - -inline Server &Server::Put(const std::string &pattern, Handler handler) { - put_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; -} - -inline Server &Server::Put(const std::string &pattern, - HandlerWithContentReader handler) { - put_handlers_for_content_reader_.emplace_back(make_matcher(pattern), - std::move(handler)); - return *this; -} - -inline Server &Server::Patch(const std::string &pattern, Handler handler) { - patch_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; -} - -inline Server &Server::Patch(const std::string &pattern, - HandlerWithContentReader handler) { - patch_handlers_for_content_reader_.emplace_back(make_matcher(pattern), - std::move(handler)); - return *this; -} - -inline Server &Server::Delete(const std::string &pattern, Handler handler) { - delete_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; -} - -inline Server &Server::Delete(const std::string &pattern, - HandlerWithContentReader handler) { - delete_handlers_for_content_reader_.emplace_back(make_matcher(pattern), - std::move(handler)); - return *this; -} - -inline Server &Server::Options(const std::string &pattern, Handler handler) { - options_handlers_.emplace_back(make_matcher(pattern), std::move(handler)); - return *this; -} - -inline bool Server::set_base_dir(const std::string &dir, - const std::string &mount_point) { - return set_mount_point(mount_point, dir); -} - -inline bool Server::set_mount_point(const std::string &mount_point, - const std::string &dir, Headers headers) { - detail::FileStat stat(dir); - if (stat.is_dir()) { - std::string mnt = !mount_point.empty() ? mount_point : "/"; - if (!mnt.empty() && mnt[0] == '/') { - base_dirs_.push_back({mnt, dir, std::move(headers)}); - return true; - } - } - return false; -} - -inline bool Server::remove_mount_point(const std::string &mount_point) { - for (auto it = base_dirs_.begin(); it != base_dirs_.end(); ++it) { - if (it->mount_point == mount_point) { - base_dirs_.erase(it); - return true; - } - } - return false; -} - -inline Server & -Server::set_file_extension_and_mimetype_mapping(const std::string &ext, - const std::string &mime) { - file_extension_and_mimetype_map_[ext] = mime; - return *this; -} - -inline Server &Server::set_default_file_mimetype(const std::string &mime) { - default_file_mimetype_ = mime; - return *this; -} - -inline Server &Server::set_file_request_handler(Handler handler) { - file_request_handler_ = std::move(handler); - return *this; -} - -inline Server &Server::set_error_handler_core(HandlerWithResponse handler, - std::true_type) { - error_handler_ = std::move(handler); - return *this; -} - -inline Server &Server::set_error_handler_core(Handler handler, - std::false_type) { - error_handler_ = [handler](const Request &req, Response &res) { - handler(req, res); - return HandlerResponse::Handled; - }; - return *this; -} - -inline Server &Server::set_exception_handler(ExceptionHandler handler) { - exception_handler_ = std::move(handler); - return *this; -} - -inline Server &Server::set_pre_routing_handler(HandlerWithResponse handler) { - pre_routing_handler_ = std::move(handler); - return *this; -} - -inline Server &Server::set_post_routing_handler(Handler handler) { - post_routing_handler_ = std::move(handler); - return *this; -} - -inline Server &Server::set_pre_request_handler(HandlerWithResponse handler) { - pre_request_handler_ = std::move(handler); - return *this; -} - -inline Server &Server::set_logger(Logger logger) { - logger_ = std::move(logger); - return *this; -} - -inline Server &Server::set_error_logger(ErrorLogger error_logger) { - error_logger_ = std::move(error_logger); - return *this; -} - -inline Server &Server::set_pre_compression_logger(Logger logger) { - pre_compression_logger_ = std::move(logger); - return *this; -} - -inline Server & -Server::set_expect_100_continue_handler(Expect100ContinueHandler handler) { - expect_100_continue_handler_ = std::move(handler); - return *this; -} - -inline Server &Server::set_address_family(int family) { - address_family_ = family; - return *this; -} - -inline Server &Server::set_tcp_nodelay(bool on) { - tcp_nodelay_ = on; - return *this; -} - -inline Server &Server::set_ipv6_v6only(bool on) { - ipv6_v6only_ = on; - return *this; -} - -inline Server &Server::set_socket_options(SocketOptions socket_options) { - socket_options_ = std::move(socket_options); - return *this; -} - -inline Server &Server::set_default_headers(Headers headers) { - default_headers_ = std::move(headers); - return *this; -} - -inline Server &Server::set_header_writer( - std::function const &writer) { - header_writer_ = writer; - return *this; -} - -inline Server & -Server::set_trusted_proxies(const std::vector &proxies) { - trusted_proxies_ = proxies; - return *this; -} - -inline Server &Server::set_keep_alive_max_count(size_t count) { - keep_alive_max_count_ = count; - return *this; -} - -inline Server &Server::set_keep_alive_timeout(time_t sec) { - keep_alive_timeout_sec_ = sec; - return *this; -} - -inline Server &Server::set_read_timeout(time_t sec, time_t usec) { - read_timeout_sec_ = sec; - read_timeout_usec_ = usec; - return *this; -} - -inline Server &Server::set_write_timeout(time_t sec, time_t usec) { - write_timeout_sec_ = sec; - write_timeout_usec_ = usec; - return *this; -} - -inline Server &Server::set_idle_interval(time_t sec, time_t usec) { - idle_interval_sec_ = sec; - idle_interval_usec_ = usec; - return *this; -} - -inline Server &Server::set_payload_max_length(size_t length) { - payload_max_length_ = length; - return *this; -} - -inline bool Server::bind_to_port(const std::string &host, int port, - int socket_flags) { - auto ret = bind_internal(host, port, socket_flags); - if (ret == -1) { is_decommissioned = true; } - return ret >= 0; -} -inline int Server::bind_to_any_port(const std::string &host, int socket_flags) { - auto ret = bind_internal(host, 0, socket_flags); - if (ret == -1) { is_decommissioned = true; } - return ret; -} - -inline bool Server::listen_after_bind() { return listen_internal(); } - -inline bool Server::listen(const std::string &host, int port, - int socket_flags) { - return bind_to_port(host, port, socket_flags) && listen_internal(); -} - -inline bool Server::is_running() const { return is_running_; } - -inline void Server::wait_until_ready() const { - while (!is_running_ && !is_decommissioned) { - std::this_thread::sleep_for(std::chrono::milliseconds{1}); - } -} - -inline void Server::stop() { - if (is_running_) { - assert(svr_sock_ != INVALID_SOCKET); - std::atomic sock(svr_sock_.exchange(INVALID_SOCKET)); - detail::shutdown_socket(sock); - detail::close_socket(sock); - } - is_decommissioned = false; -} - -inline void Server::decommission() { is_decommissioned = true; } - -inline bool Server::parse_request_line(const char *s, Request &req) const { - auto len = strlen(s); - if (len < 2 || s[len - 2] != '\r' || s[len - 1] != '\n') { return false; } - len -= 2; - - { - size_t count = 0; - - detail::split(s, s + len, ' ', [&](const char *b, const char *e) { - switch (count) { - case 0: req.method = std::string(b, e); break; - case 1: req.target = std::string(b, e); break; - case 2: req.version = std::string(b, e); break; - default: break; - } - count++; - }); - - if (count != 3) { return false; } - } - - thread_local const std::set methods{ - "GET", "HEAD", "POST", "PUT", "DELETE", - "CONNECT", "OPTIONS", "TRACE", "PATCH", "PRI"}; - - if (methods.find(req.method) == methods.end()) { - output_error_log(Error::InvalidHTTPMethod, &req); - return false; - } - - if (req.version != "HTTP/1.1" && req.version != "HTTP/1.0") { - output_error_log(Error::InvalidHTTPVersion, &req); - return false; - } - - { - // Skip URL fragment - for (size_t i = 0; i < req.target.size(); i++) { - if (req.target[i] == '#') { - req.target.erase(i); - break; - } - } - - detail::divide(req.target, '?', - [&](const char *lhs_data, std::size_t lhs_size, - const char *rhs_data, std::size_t rhs_size) { - req.path = - decode_path_component(std::string(lhs_data, lhs_size)); - detail::parse_query_text(rhs_data, rhs_size, req.params); - }); - } - - return true; -} - -inline bool Server::write_response(Stream &strm, bool close_connection, - Request &req, Response &res) { - // NOTE: `req.ranges` should be empty, otherwise it will be applied - // incorrectly to the error content. - req.ranges.clear(); - return write_response_core(strm, close_connection, req, res, false); -} - -inline bool Server::write_response_with_content(Stream &strm, - bool close_connection, - const Request &req, - Response &res) { - return write_response_core(strm, close_connection, req, res, true); -} - -inline bool Server::write_response_core(Stream &strm, bool close_connection, - const Request &req, Response &res, - bool need_apply_ranges) { - assert(res.status != -1); - - if (400 <= res.status && error_handler_ && - error_handler_(req, res) == HandlerResponse::Handled) { - need_apply_ranges = true; - } - - std::string content_type; - std::string boundary; - if (need_apply_ranges) { apply_ranges(req, res, content_type, boundary); } - - // Prepare additional headers - if (close_connection || req.get_header_value("Connection") == "close") { - res.set_header("Connection", "close"); - } else { - std::string s = "timeout="; - s += std::to_string(keep_alive_timeout_sec_); - s += ", max="; - s += std::to_string(keep_alive_max_count_); - res.set_header("Keep-Alive", s); - } - - if ((!res.body.empty() || res.content_length_ > 0 || res.content_provider_) && - !res.has_header("Content-Type")) { - res.set_header("Content-Type", "text/plain"); - } - - if (res.body.empty() && !res.content_length_ && !res.content_provider_ && - !res.has_header("Content-Length")) { - res.set_header("Content-Length", "0"); - } - - if (req.method == "HEAD" && !res.has_header("Accept-Ranges")) { - res.set_header("Accept-Ranges", "bytes"); - } - - if (post_routing_handler_) { post_routing_handler_(req, res); } - - // Response line and headers - { - detail::BufferStream bstrm; - if (!detail::write_response_line(bstrm, res.status)) { return false; } - if (!header_writer_(bstrm, res.headers)) { return false; } - - // Flush buffer - auto &data = bstrm.get_buffer(); - detail::write_data(strm, data.data(), data.size()); - } - - // Body - auto ret = true; - if (req.method != "HEAD") { - if (!res.body.empty()) { - if (!detail::write_data(strm, res.body.data(), res.body.size())) { - ret = false; - } - } else if (res.content_provider_) { - if (write_content_with_provider(strm, req, res, boundary, content_type)) { - res.content_provider_success_ = true; - } else { - ret = false; - } - } - } - - // Log - output_log(req, res); - - return ret; -} - -inline bool -Server::write_content_with_provider(Stream &strm, const Request &req, - Response &res, const std::string &boundary, - const std::string &content_type) { - auto is_shutting_down = [this]() { - return this->svr_sock_ == INVALID_SOCKET; - }; - - if (res.content_length_ > 0) { - if (req.ranges.empty()) { - return detail::write_content(strm, res.content_provider_, 0, - res.content_length_, is_shutting_down); - } else if (req.ranges.size() == 1) { - auto offset_and_length = detail::get_range_offset_and_length( - req.ranges[0], res.content_length_); - - return detail::write_content(strm, res.content_provider_, - offset_and_length.first, - offset_and_length.second, is_shutting_down); - } else { - return detail::write_multipart_ranges_data( - strm, req, res, boundary, content_type, res.content_length_, - is_shutting_down); - } - } else { - if (res.is_chunked_content_provider_) { - auto type = detail::encoding_type(req, res); - - std::unique_ptr compressor; - if (type == detail::EncodingType::Gzip) { -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - compressor = detail::make_unique(); -#endif - } else if (type == detail::EncodingType::Brotli) { -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - compressor = detail::make_unique(); -#endif - } else if (type == detail::EncodingType::Zstd) { -#ifdef CPPHTTPLIB_ZSTD_SUPPORT - compressor = detail::make_unique(); -#endif - } else { - compressor = detail::make_unique(); - } - assert(compressor != nullptr); - - return detail::write_content_chunked(strm, res.content_provider_, - is_shutting_down, *compressor); - } else { - return detail::write_content_without_length(strm, res.content_provider_, - is_shutting_down); - } - } -} - -inline bool Server::read_content(Stream &strm, Request &req, Response &res) { - FormFields::iterator cur_field; - FormFiles::iterator cur_file; - auto is_text_field = false; - size_t count = 0; - if (read_content_core( - strm, req, res, - // Regular - [&](const char *buf, size_t n) { - if (req.body.size() + n > req.body.max_size()) { return false; } - req.body.append(buf, n); - return true; - }, - // Multipart FormData - [&](const FormData &file) { - if (count++ == CPPHTTPLIB_MULTIPART_FORM_DATA_FILE_MAX_COUNT) { - output_error_log(Error::TooManyFormDataFiles, &req); - return false; - } - - if (file.filename.empty()) { - cur_field = req.form.fields.emplace( - file.name, FormField{file.name, file.content, file.headers}); - is_text_field = true; - } else { - cur_file = req.form.files.emplace(file.name, file); - is_text_field = false; - } - return true; - }, - [&](const char *buf, size_t n) { - if (is_text_field) { - auto &content = cur_field->second.content; - if (content.size() + n > content.max_size()) { return false; } - content.append(buf, n); - } else { - auto &content = cur_file->second.content; - if (content.size() + n > content.max_size()) { return false; } - content.append(buf, n); - } - return true; - })) { - const auto &content_type = req.get_header_value("Content-Type"); - if (!content_type.find("application/x-www-form-urlencoded")) { - if (req.body.size() > CPPHTTPLIB_FORM_URL_ENCODED_PAYLOAD_MAX_LENGTH) { - res.status = StatusCode::PayloadTooLarge_413; // NOTE: should be 414? - output_error_log(Error::ExceedMaxPayloadSize, &req); - return false; - } - detail::parse_query_text(req.body, req.params); - } - return true; - } - return false; -} - -inline bool Server::read_content_with_content_receiver( - Stream &strm, Request &req, Response &res, ContentReceiver receiver, - FormDataHeader multipart_header, ContentReceiver multipart_receiver) { - return read_content_core(strm, req, res, std::move(receiver), - std::move(multipart_header), - std::move(multipart_receiver)); -} - -inline bool Server::read_content_core( - Stream &strm, Request &req, Response &res, ContentReceiver receiver, - FormDataHeader multipart_header, ContentReceiver multipart_receiver) const { - detail::FormDataParser multipart_form_data_parser; - ContentReceiverWithProgress out; - - if (req.is_multipart_form_data()) { - const auto &content_type = req.get_header_value("Content-Type"); - std::string boundary; - if (!detail::parse_multipart_boundary(content_type, boundary)) { - res.status = StatusCode::BadRequest_400; - output_error_log(Error::MultipartParsing, &req); - return false; - } - - multipart_form_data_parser.set_boundary(std::move(boundary)); - out = [&](const char *buf, size_t n, size_t /*off*/, size_t /*len*/) { - return multipart_form_data_parser.parse(buf, n, multipart_header, - multipart_receiver); - }; - } else { - out = [receiver](const char *buf, size_t n, size_t /*off*/, - size_t /*len*/) { return receiver(buf, n); }; - } - - if (req.method == "DELETE" && !req.has_header("Content-Length")) { - return true; - } - - if (!detail::read_content(strm, req, payload_max_length_, res.status, nullptr, - out, true)) { - return false; - } - - if (req.is_multipart_form_data()) { - if (!multipart_form_data_parser.is_valid()) { - res.status = StatusCode::BadRequest_400; - output_error_log(Error::MultipartParsing, &req); - return false; - } - } - - return true; -} - -inline bool Server::handle_file_request(const Request &req, Response &res) { - for (const auto &entry : base_dirs_) { - // Prefix match - if (!req.path.compare(0, entry.mount_point.size(), entry.mount_point)) { - std::string sub_path = "/" + req.path.substr(entry.mount_point.size()); - if (detail::is_valid_path(sub_path)) { - auto path = entry.base_dir + sub_path; - if (path.back() == '/') { path += "index.html"; } - - detail::FileStat stat(path); - - if (stat.is_dir()) { - res.set_redirect(sub_path + "/", StatusCode::MovedPermanently_301); - return true; - } - - if (stat.is_file()) { - for (const auto &kv : entry.headers) { - res.set_header(kv.first, kv.second); - } - - auto mm = std::make_shared(path.c_str()); - if (!mm->is_open()) { - output_error_log(Error::OpenFile, &req); - return false; - } - - res.set_content_provider( - mm->size(), - detail::find_content_type(path, file_extension_and_mimetype_map_, - default_file_mimetype_), - [mm](size_t offset, size_t length, DataSink &sink) -> bool { - sink.write(mm->data() + offset, length); - return true; - }); - - if (req.method != "HEAD" && file_request_handler_) { - file_request_handler_(req, res); - } - - return true; - } else { - output_error_log(Error::OpenFile, &req); - } - } - } - } - return false; -} - -inline socket_t -Server::create_server_socket(const std::string &host, int port, - int socket_flags, - SocketOptions socket_options) const { - return detail::create_socket( - host, std::string(), port, address_family_, socket_flags, tcp_nodelay_, - ipv6_v6only_, std::move(socket_options), - [&](socket_t sock, struct addrinfo &ai, bool & /*quit*/) -> bool { - if (::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { - output_error_log(Error::BindIPAddress, nullptr); - return false; - } - if (::listen(sock, CPPHTTPLIB_LISTEN_BACKLOG)) { - output_error_log(Error::Listen, nullptr); - return false; - } - return true; - }); -} - -inline int Server::bind_internal(const std::string &host, int port, - int socket_flags) { - if (is_decommissioned) { return -1; } - - if (!is_valid()) { return -1; } - - svr_sock_ = create_server_socket(host, port, socket_flags, socket_options_); - if (svr_sock_ == INVALID_SOCKET) { return -1; } - - if (port == 0) { - struct sockaddr_storage addr; - socklen_t addr_len = sizeof(addr); - if (getsockname(svr_sock_, reinterpret_cast(&addr), - &addr_len) == -1) { - output_error_log(Error::GetSockName, nullptr); - return -1; - } - if (addr.ss_family == AF_INET) { - return ntohs(reinterpret_cast(&addr)->sin_port); - } else if (addr.ss_family == AF_INET6) { - return ntohs(reinterpret_cast(&addr)->sin6_port); - } else { - output_error_log(Error::UnsupportedAddressFamily, nullptr); - return -1; - } - } else { - return port; - } -} - -inline bool Server::listen_internal() { - if (is_decommissioned) { return false; } - - auto ret = true; - is_running_ = true; - auto se = detail::scope_exit([&]() { is_running_ = false; }); - - { - std::unique_ptr task_queue(new_task_queue()); - - while (svr_sock_ != INVALID_SOCKET) { -#ifndef _WIN32 - if (idle_interval_sec_ > 0 || idle_interval_usec_ > 0) { -#endif - auto val = detail::select_read(svr_sock_, idle_interval_sec_, - idle_interval_usec_); - if (val == 0) { // Timeout - task_queue->on_idle(); - continue; - } -#ifndef _WIN32 - } -#endif - -#if defined _WIN32 - // sockets connected via WASAccept inherit flags NO_HANDLE_INHERIT, - // OVERLAPPED - socket_t sock = WSAAccept(svr_sock_, nullptr, nullptr, nullptr, 0); -#elif defined SOCK_CLOEXEC - socket_t sock = accept4(svr_sock_, nullptr, nullptr, SOCK_CLOEXEC); -#else - socket_t sock = accept(svr_sock_, nullptr, nullptr); -#endif - - if (sock == INVALID_SOCKET) { - if (errno == EMFILE) { - // The per-process limit of open file descriptors has been reached. - // Try to accept new connections after a short sleep. - std::this_thread::sleep_for(std::chrono::microseconds{1}); - continue; - } else if (errno == EINTR || errno == EAGAIN) { - continue; - } - if (svr_sock_ != INVALID_SOCKET) { - detail::close_socket(svr_sock_); - ret = false; - output_error_log(Error::Connection, nullptr); - } else { - ; // The server socket was closed by user. - } - break; - } - - detail::set_socket_opt_time(sock, SOL_SOCKET, SO_RCVTIMEO, - read_timeout_sec_, read_timeout_usec_); - detail::set_socket_opt_time(sock, SOL_SOCKET, SO_SNDTIMEO, - write_timeout_sec_, write_timeout_usec_); - - if (!task_queue->enqueue( - [this, sock]() { process_and_close_socket(sock); })) { - output_error_log(Error::ResourceExhaustion, nullptr); - detail::shutdown_socket(sock); - detail::close_socket(sock); - } - } - - task_queue->shutdown(); - } - - is_decommissioned = !ret; - return ret; -} - -inline bool Server::routing(Request &req, Response &res, Stream &strm) { - if (pre_routing_handler_ && - pre_routing_handler_(req, res) == HandlerResponse::Handled) { - return true; - } - - // File handler - if ((req.method == "GET" || req.method == "HEAD") && - handle_file_request(req, res)) { - return true; - } - - if (detail::expect_content(req)) { - // Content reader handler - { - ContentReader reader( - [&](ContentReceiver receiver) { - auto result = read_content_with_content_receiver( - strm, req, res, std::move(receiver), nullptr, nullptr); - if (!result) { output_error_log(Error::Read, &req); } - return result; - }, - [&](FormDataHeader header, ContentReceiver receiver) { - auto result = read_content_with_content_receiver( - strm, req, res, nullptr, std::move(header), - std::move(receiver)); - if (!result) { output_error_log(Error::Read, &req); } - return result; - }); - - if (req.method == "POST") { - if (dispatch_request_for_content_reader( - req, res, std::move(reader), - post_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "PUT") { - if (dispatch_request_for_content_reader( - req, res, std::move(reader), - put_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "PATCH") { - if (dispatch_request_for_content_reader( - req, res, std::move(reader), - patch_handlers_for_content_reader_)) { - return true; - } - } else if (req.method == "DELETE") { - if (dispatch_request_for_content_reader( - req, res, std::move(reader), - delete_handlers_for_content_reader_)) { - return true; - } - } - } - - // Read content into `req.body` - if (!read_content(strm, req, res)) { - output_error_log(Error::Read, &req); - return false; - } - } - - // Regular handler - if (req.method == "GET" || req.method == "HEAD") { - return dispatch_request(req, res, get_handlers_); - } else if (req.method == "POST") { - return dispatch_request(req, res, post_handlers_); - } else if (req.method == "PUT") { - return dispatch_request(req, res, put_handlers_); - } else if (req.method == "DELETE") { - return dispatch_request(req, res, delete_handlers_); - } else if (req.method == "OPTIONS") { - return dispatch_request(req, res, options_handlers_); - } else if (req.method == "PATCH") { - return dispatch_request(req, res, patch_handlers_); - } - - res.status = StatusCode::BadRequest_400; - return false; -} - -inline bool Server::dispatch_request(Request &req, Response &res, - const Handlers &handlers) const { - for (const auto &x : handlers) { - const auto &matcher = x.first; - const auto &handler = x.second; - - if (matcher->match(req)) { - req.matched_route = matcher->pattern(); - if (!pre_request_handler_ || - pre_request_handler_(req, res) != HandlerResponse::Handled) { - handler(req, res); - } - return true; - } - } - return false; -} - -inline void Server::apply_ranges(const Request &req, Response &res, - std::string &content_type, - std::string &boundary) const { - if (req.ranges.size() > 1 && res.status == StatusCode::PartialContent_206) { - auto it = res.headers.find("Content-Type"); - if (it != res.headers.end()) { - content_type = it->second; - res.headers.erase(it); - } - - boundary = detail::make_multipart_data_boundary(); - - res.set_header("Content-Type", - "multipart/byteranges; boundary=" + boundary); - } - - auto type = detail::encoding_type(req, res); - - if (res.body.empty()) { - if (res.content_length_ > 0) { - size_t length = 0; - if (req.ranges.empty() || res.status != StatusCode::PartialContent_206) { - length = res.content_length_; - } else if (req.ranges.size() == 1) { - auto offset_and_length = detail::get_range_offset_and_length( - req.ranges[0], res.content_length_); - - length = offset_and_length.second; - - auto content_range = detail::make_content_range_header_field( - offset_and_length, res.content_length_); - res.set_header("Content-Range", content_range); - } else { - length = detail::get_multipart_ranges_data_length( - req, boundary, content_type, res.content_length_); - } - res.set_header("Content-Length", std::to_string(length)); - } else { - if (res.content_provider_) { - if (res.is_chunked_content_provider_) { - res.set_header("Transfer-Encoding", "chunked"); - if (type == detail::EncodingType::Gzip) { - res.set_header("Content-Encoding", "gzip"); - } else if (type == detail::EncodingType::Brotli) { - res.set_header("Content-Encoding", "br"); - } else if (type == detail::EncodingType::Zstd) { - res.set_header("Content-Encoding", "zstd"); - } - } - } - } - } else { - if (req.ranges.empty() || res.status != StatusCode::PartialContent_206) { - ; - } else if (req.ranges.size() == 1) { - auto offset_and_length = - detail::get_range_offset_and_length(req.ranges[0], res.body.size()); - auto offset = offset_and_length.first; - auto length = offset_and_length.second; - - auto content_range = detail::make_content_range_header_field( - offset_and_length, res.body.size()); - res.set_header("Content-Range", content_range); - - assert(offset + length <= res.body.size()); - res.body = res.body.substr(offset, length); - } else { - std::string data; - detail::make_multipart_ranges_data(req, res, boundary, content_type, - res.body.size(), data); - res.body.swap(data); - } - - if (type != detail::EncodingType::None) { - output_pre_compression_log(req, res); - - std::unique_ptr compressor; - std::string content_encoding; - - if (type == detail::EncodingType::Gzip) { -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - compressor = detail::make_unique(); - content_encoding = "gzip"; -#endif - } else if (type == detail::EncodingType::Brotli) { -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - compressor = detail::make_unique(); - content_encoding = "br"; -#endif - } else if (type == detail::EncodingType::Zstd) { -#ifdef CPPHTTPLIB_ZSTD_SUPPORT - compressor = detail::make_unique(); - content_encoding = "zstd"; -#endif - } - - if (compressor) { - std::string compressed; - if (compressor->compress(res.body.data(), res.body.size(), true, - [&](const char *data, size_t data_len) { - compressed.append(data, data_len); - return true; - })) { - res.body.swap(compressed); - res.set_header("Content-Encoding", content_encoding); - } - } - } - - auto length = std::to_string(res.body.size()); - res.set_header("Content-Length", length); - } -} - -inline bool Server::dispatch_request_for_content_reader( - Request &req, Response &res, ContentReader content_reader, - const HandlersForContentReader &handlers) const { - for (const auto &x : handlers) { - const auto &matcher = x.first; - const auto &handler = x.second; - - if (matcher->match(req)) { - req.matched_route = matcher->pattern(); - if (!pre_request_handler_ || - pre_request_handler_(req, res) != HandlerResponse::Handled) { - handler(req, res, content_reader); - } - return true; - } - } - return false; -} - -inline std::string -get_client_ip(const std::string &x_forwarded_for, - const std::vector &trusted_proxies) { - // X-Forwarded-For is a comma-separated list per RFC 7239 - std::vector ip_list; - detail::split(x_forwarded_for.data(), - x_forwarded_for.data() + x_forwarded_for.size(), ',', - [&](const char *b, const char *e) { - auto r = detail::trim(b, e, 0, static_cast(e - b)); - ip_list.emplace_back(std::string(b + r.first, b + r.second)); - }); - - for (size_t i = 0; i < ip_list.size(); ++i) { - auto ip = ip_list[i]; - - auto is_trusted_proxy = - std::any_of(trusted_proxies.begin(), trusted_proxies.end(), - [&](const std::string &proxy) { return ip == proxy; }); - - if (is_trusted_proxy) { - if (i == 0) { - // If the trusted proxy is the first IP, there's no preceding client IP - return ip; - } else { - // Return the IP immediately before the trusted proxy - return ip_list[i - 1]; - } - } - } - - // If no trusted proxy is found, return the first IP in the list - return ip_list.front(); -} - -inline bool -Server::process_request(Stream &strm, const std::string &remote_addr, - int remote_port, const std::string &local_addr, - int local_port, bool close_connection, - bool &connection_closed, - const std::function &setup_request) { - std::array buf{}; - - detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); - - // Connection has been closed on client - if (!line_reader.getline()) { return false; } - - Request req; - req.start_time_ = std::chrono::steady_clock::now(); - - Response res; - res.version = "HTTP/1.1"; - res.headers = default_headers_; - -#ifdef __APPLE__ - // Socket file descriptor exceeded FD_SETSIZE... - if (strm.socket() >= FD_SETSIZE) { - Headers dummy; - detail::read_headers(strm, dummy); - res.status = StatusCode::InternalServerError_500; - output_error_log(Error::ExceedMaxSocketDescriptorCount, &req); - return write_response(strm, close_connection, req, res); - } -#endif - - // Request line and headers - if (!parse_request_line(line_reader.ptr(), req)) { - res.status = StatusCode::BadRequest_400; - output_error_log(Error::InvalidRequestLine, &req); - return write_response(strm, close_connection, req, res); - } - - // Request headers - if (!detail::read_headers(strm, req.headers)) { - res.status = StatusCode::BadRequest_400; - output_error_log(Error::InvalidHeaders, &req); - return write_response(strm, close_connection, req, res); - } - - // Check if the request URI doesn't exceed the limit - if (req.target.size() > CPPHTTPLIB_REQUEST_URI_MAX_LENGTH) { - Headers dummy; - detail::read_headers(strm, dummy); - res.status = StatusCode::UriTooLong_414; - output_error_log(Error::ExceedUriMaxLength, &req); - return write_response(strm, close_connection, req, res); - } - - if (req.get_header_value("Connection") == "close") { - connection_closed = true; - } - - if (req.version == "HTTP/1.0" && - req.get_header_value("Connection") != "Keep-Alive") { - connection_closed = true; - } - - if (!trusted_proxies_.empty() && req.has_header("X-Forwarded-For")) { - auto x_forwarded_for = req.get_header_value("X-Forwarded-For"); - req.remote_addr = get_client_ip(x_forwarded_for, trusted_proxies_); - } else { - req.remote_addr = remote_addr; - } - req.remote_port = remote_port; - - req.local_addr = local_addr; - req.local_port = local_port; - - if (req.has_header("Accept")) { - const auto &accept_header = req.get_header_value("Accept"); - if (!detail::parse_accept_header(accept_header, req.accept_content_types)) { - res.status = StatusCode::BadRequest_400; - output_error_log(Error::HTTPParsing, &req); - return write_response(strm, close_connection, req, res); - } - } - - if (req.has_header("Range")) { - const auto &range_header_value = req.get_header_value("Range"); - if (!detail::parse_range_header(range_header_value, req.ranges)) { - res.status = StatusCode::RangeNotSatisfiable_416; - output_error_log(Error::InvalidRangeHeader, &req); - return write_response(strm, close_connection, req, res); - } - } - - if (setup_request) { setup_request(req); } - - if (req.get_header_value("Expect") == "100-continue") { - int status = StatusCode::Continue_100; - if (expect_100_continue_handler_) { - status = expect_100_continue_handler_(req, res); - } - switch (status) { - case StatusCode::Continue_100: - case StatusCode::ExpectationFailed_417: - detail::write_response_line(strm, status); - strm.write("\r\n"); - break; - default: - connection_closed = true; - return write_response(strm, true, req, res); - } - } - - // Setup `is_connection_closed` method - auto sock = strm.socket(); - req.is_connection_closed = [sock]() { - return !detail::is_socket_alive(sock); - }; - - // Routing - auto routed = false; -#ifdef CPPHTTPLIB_NO_EXCEPTIONS - routed = routing(req, res, strm); -#else - try { - routed = routing(req, res, strm); - } catch (std::exception &e) { - if (exception_handler_) { - auto ep = std::current_exception(); - exception_handler_(req, res, ep); - routed = true; - } else { - res.status = StatusCode::InternalServerError_500; - std::string val; - auto s = e.what(); - for (size_t i = 0; s[i]; i++) { - switch (s[i]) { - case '\r': val += "\\r"; break; - case '\n': val += "\\n"; break; - default: val += s[i]; break; - } - } - res.set_header("EXCEPTION_WHAT", val); - } - } catch (...) { - if (exception_handler_) { - auto ep = std::current_exception(); - exception_handler_(req, res, ep); - routed = true; - } else { - res.status = StatusCode::InternalServerError_500; - res.set_header("EXCEPTION_WHAT", "UNKNOWN"); - } - } -#endif - if (routed) { - if (res.status == -1) { - res.status = req.ranges.empty() ? StatusCode::OK_200 - : StatusCode::PartialContent_206; - } - - // Serve file content by using a content provider - if (!res.file_content_path_.empty()) { - const auto &path = res.file_content_path_; - auto mm = std::make_shared(path.c_str()); - if (!mm->is_open()) { - res.body.clear(); - res.content_length_ = 0; - res.content_provider_ = nullptr; - res.status = StatusCode::NotFound_404; - output_error_log(Error::OpenFile, &req); - return write_response(strm, close_connection, req, res); - } - - auto content_type = res.file_content_content_type_; - if (content_type.empty()) { - content_type = detail::find_content_type( - path, file_extension_and_mimetype_map_, default_file_mimetype_); - } - - res.set_content_provider( - mm->size(), content_type, - [mm](size_t offset, size_t length, DataSink &sink) -> bool { - sink.write(mm->data() + offset, length); - return true; - }); - } - - if (detail::range_error(req, res)) { - res.body.clear(); - res.content_length_ = 0; - res.content_provider_ = nullptr; - res.status = StatusCode::RangeNotSatisfiable_416; - return write_response(strm, close_connection, req, res); - } - - return write_response_with_content(strm, close_connection, req, res); - } else { - if (res.status == -1) { res.status = StatusCode::NotFound_404; } - - return write_response(strm, close_connection, req, res); - } -} - -inline bool Server::is_valid() const { return true; } - -inline bool Server::process_and_close_socket(socket_t sock) { - std::string remote_addr; - int remote_port = 0; - detail::get_remote_ip_and_port(sock, remote_addr, remote_port); - - std::string local_addr; - int local_port = 0; - detail::get_local_ip_and_port(sock, local_addr, local_port); - - auto ret = detail::process_server_socket( - svr_sock_, sock, keep_alive_max_count_, keep_alive_timeout_sec_, - read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, - write_timeout_usec_, - [&](Stream &strm, bool close_connection, bool &connection_closed) { - return process_request(strm, remote_addr, remote_port, local_addr, - local_port, close_connection, connection_closed, - nullptr); - }); - - detail::shutdown_socket(sock); - detail::close_socket(sock); - return ret; -} - -inline void Server::output_log(const Request &req, const Response &res) const { - if (logger_) { - std::lock_guard guard(logger_mutex_); - logger_(req, res); - } -} - -inline void Server::output_pre_compression_log(const Request &req, - const Response &res) const { - if (pre_compression_logger_) { - std::lock_guard guard(logger_mutex_); - pre_compression_logger_(req, res); - } -} - -inline void Server::output_error_log(const Error &err, - const Request *req) const { - if (error_logger_) { - std::lock_guard guard(logger_mutex_); - error_logger_(err, req); - } -} - -// HTTP client implementation -inline ClientImpl::ClientImpl(const std::string &host) - : ClientImpl(host, 80, std::string(), std::string()) {} - -inline ClientImpl::ClientImpl(const std::string &host, int port) - : ClientImpl(host, port, std::string(), std::string()) {} - -inline ClientImpl::ClientImpl(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) - : host_(detail::escape_abstract_namespace_unix_domain(host)), port_(port), - host_and_port_(detail::make_host_and_port_string(host_, port, is_ssl())), - client_cert_path_(client_cert_path), client_key_path_(client_key_path) {} - -inline ClientImpl::~ClientImpl() { - // Wait until all the requests in flight are handled. - size_t retry_count = 10; - while (retry_count-- > 0) { - { - std::lock_guard guard(socket_mutex_); - if (socket_requests_in_flight_ == 0) { break; } - } - std::this_thread::sleep_for(std::chrono::milliseconds{1}); - } - - std::lock_guard guard(socket_mutex_); - shutdown_socket(socket_); - close_socket(socket_); -} - -inline bool ClientImpl::is_valid() const { return true; } - -inline void ClientImpl::copy_settings(const ClientImpl &rhs) { - client_cert_path_ = rhs.client_cert_path_; - client_key_path_ = rhs.client_key_path_; - connection_timeout_sec_ = rhs.connection_timeout_sec_; - read_timeout_sec_ = rhs.read_timeout_sec_; - read_timeout_usec_ = rhs.read_timeout_usec_; - write_timeout_sec_ = rhs.write_timeout_sec_; - write_timeout_usec_ = rhs.write_timeout_usec_; - max_timeout_msec_ = rhs.max_timeout_msec_; - basic_auth_username_ = rhs.basic_auth_username_; - basic_auth_password_ = rhs.basic_auth_password_; - bearer_token_auth_token_ = rhs.bearer_token_auth_token_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - digest_auth_username_ = rhs.digest_auth_username_; - digest_auth_password_ = rhs.digest_auth_password_; -#endif - keep_alive_ = rhs.keep_alive_; - follow_location_ = rhs.follow_location_; - path_encode_ = rhs.path_encode_; - address_family_ = rhs.address_family_; - tcp_nodelay_ = rhs.tcp_nodelay_; - ipv6_v6only_ = rhs.ipv6_v6only_; - socket_options_ = rhs.socket_options_; - compress_ = rhs.compress_; - decompress_ = rhs.decompress_; - interface_ = rhs.interface_; - proxy_host_ = rhs.proxy_host_; - proxy_port_ = rhs.proxy_port_; - proxy_basic_auth_username_ = rhs.proxy_basic_auth_username_; - proxy_basic_auth_password_ = rhs.proxy_basic_auth_password_; - proxy_bearer_token_auth_token_ = rhs.proxy_bearer_token_auth_token_; -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - proxy_digest_auth_username_ = rhs.proxy_digest_auth_username_; - proxy_digest_auth_password_ = rhs.proxy_digest_auth_password_; -#endif -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - ca_cert_file_path_ = rhs.ca_cert_file_path_; - ca_cert_dir_path_ = rhs.ca_cert_dir_path_; - ca_cert_store_ = rhs.ca_cert_store_; -#endif -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - server_certificate_verification_ = rhs.server_certificate_verification_; - server_hostname_verification_ = rhs.server_hostname_verification_; - server_certificate_verifier_ = rhs.server_certificate_verifier_; -#endif - logger_ = rhs.logger_; - error_logger_ = rhs.error_logger_; -} - -inline socket_t ClientImpl::create_client_socket(Error &error) const { - if (!proxy_host_.empty() && proxy_port_ != -1) { - return detail::create_client_socket( - proxy_host_, std::string(), proxy_port_, address_family_, tcp_nodelay_, - ipv6_v6only_, socket_options_, connection_timeout_sec_, - connection_timeout_usec_, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, interface_, error); - } - - // Check is custom IP specified for host_ - std::string ip; - auto it = addr_map_.find(host_); - if (it != addr_map_.end()) { ip = it->second; } - - return detail::create_client_socket( - host_, ip, port_, address_family_, tcp_nodelay_, ipv6_v6only_, - socket_options_, connection_timeout_sec_, connection_timeout_usec_, - read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, - write_timeout_usec_, interface_, error); -} - -inline bool ClientImpl::create_and_connect_socket(Socket &socket, - Error &error) { - auto sock = create_client_socket(error); - if (sock == INVALID_SOCKET) { return false; } - socket.sock = sock; - return true; -} - -inline void ClientImpl::shutdown_ssl(Socket & /*socket*/, - bool /*shutdown_gracefully*/) { - // If there are any requests in flight from threads other than us, then it's - // a thread-unsafe race because individual ssl* objects are not thread-safe. - assert(socket_requests_in_flight_ == 0 || - socket_requests_are_from_thread_ == std::this_thread::get_id()); -} - -inline void ClientImpl::shutdown_socket(Socket &socket) const { - if (socket.sock == INVALID_SOCKET) { return; } - detail::shutdown_socket(socket.sock); -} - -inline void ClientImpl::close_socket(Socket &socket) { - // If there are requests in flight in another thread, usually closing - // the socket will be fine and they will simply receive an error when - // using the closed socket, but it is still a bug since rarely the OS - // may reassign the socket id to be used for a new socket, and then - // suddenly they will be operating on a live socket that is different - // than the one they intended! - assert(socket_requests_in_flight_ == 0 || - socket_requests_are_from_thread_ == std::this_thread::get_id()); - - // It is also a bug if this happens while SSL is still active -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - assert(socket.ssl == nullptr); -#endif - if (socket.sock == INVALID_SOCKET) { return; } - detail::close_socket(socket.sock); - socket.sock = INVALID_SOCKET; -} - -inline bool ClientImpl::read_response_line(Stream &strm, const Request &req, - Response &res) const { - std::array buf{}; - - detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); - - if (!line_reader.getline()) { return false; } - -#ifdef CPPHTTPLIB_ALLOW_LF_AS_LINE_TERMINATOR - thread_local const std::regex re("(HTTP/1\\.[01]) (\\d{3})(?: (.*?))?\r?\n"); -#else - thread_local const std::regex re("(HTTP/1\\.[01]) (\\d{3})(?: (.*?))?\r\n"); -#endif - - std::cmatch m; - if (!std::regex_match(line_reader.ptr(), m, re)) { - return req.method == "CONNECT"; - } - res.version = std::string(m[1]); - res.status = std::stoi(std::string(m[2])); - res.reason = std::string(m[3]); - - // Ignore '100 Continue' - while (res.status == StatusCode::Continue_100) { - if (!line_reader.getline()) { return false; } // CRLF - if (!line_reader.getline()) { return false; } // next response line - - if (!std::regex_match(line_reader.ptr(), m, re)) { return false; } - res.version = std::string(m[1]); - res.status = std::stoi(std::string(m[2])); - res.reason = std::string(m[3]); - } - - return true; -} - -inline bool ClientImpl::send(Request &req, Response &res, Error &error) { - std::lock_guard request_mutex_guard(request_mutex_); - auto ret = send_(req, res, error); - if (error == Error::SSLPeerCouldBeClosed_) { - assert(!ret); - ret = send_(req, res, error); - } - return ret; -} - -inline bool ClientImpl::send_(Request &req, Response &res, Error &error) { - { - std::lock_guard guard(socket_mutex_); - - // Set this to false immediately - if it ever gets set to true by the end - // of the request, we know another thread instructed us to close the - // socket. - socket_should_be_closed_when_request_is_done_ = false; - - auto is_alive = false; - if (socket_.is_open()) { - is_alive = detail::is_socket_alive(socket_.sock); - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (is_alive && is_ssl()) { - if (detail::is_ssl_peer_could_be_closed(socket_.ssl, socket_.sock)) { - is_alive = false; - } - } -#endif - - if (!is_alive) { - // Attempt to avoid sigpipe by shutting down non-gracefully if it - // seems like the other side has already closed the connection Also, - // there cannot be any requests in flight from other threads since we - // locked request_mutex_, so safe to close everything immediately - const bool shutdown_gracefully = false; - shutdown_ssl(socket_, shutdown_gracefully); - shutdown_socket(socket_); - close_socket(socket_); - } - } - - if (!is_alive) { - if (!create_and_connect_socket(socket_, error)) { - output_error_log(error, &req); - return false; - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - // TODO: refactoring - if (is_ssl()) { - auto &scli = static_cast(*this); - if (!proxy_host_.empty() && proxy_port_ != -1) { - auto success = false; - if (!scli.connect_with_proxy(socket_, req.start_time_, res, success, - error)) { - if (!success) { output_error_log(error, &req); } - return success; - } - } - - if (!scli.initialize_ssl(socket_, error)) { - output_error_log(error, &req); - return false; - } - } -#endif - } - - // Mark the current socket as being in use so that it cannot be closed by - // anyone else while this request is ongoing, even though we will be - // releasing the mutex. - if (socket_requests_in_flight_ > 1) { - assert(socket_requests_are_from_thread_ == std::this_thread::get_id()); - } - socket_requests_in_flight_ += 1; - socket_requests_are_from_thread_ = std::this_thread::get_id(); - } - - for (const auto &header : default_headers_) { - if (req.headers.find(header.first) == req.headers.end()) { - req.headers.insert(header); - } - } - - auto ret = false; - auto close_connection = !keep_alive_; - - auto se = detail::scope_exit([&]() { - // Briefly lock mutex in order to mark that a request is no longer ongoing - std::lock_guard guard(socket_mutex_); - socket_requests_in_flight_ -= 1; - if (socket_requests_in_flight_ <= 0) { - assert(socket_requests_in_flight_ == 0); - socket_requests_are_from_thread_ = std::thread::id(); - } - - if (socket_should_be_closed_when_request_is_done_ || close_connection || - !ret) { - shutdown_ssl(socket_, true); - shutdown_socket(socket_); - close_socket(socket_); - } - }); - - ret = process_socket(socket_, req.start_time_, [&](Stream &strm) { - return handle_request(strm, req, res, close_connection, error); - }); - - if (!ret) { - if (error == Error::Success) { - error = Error::Unknown; - output_error_log(error, &req); - } - } - - return ret; -} - -inline Result ClientImpl::send(const Request &req) { - auto req2 = req; - return send_(std::move(req2)); -} - -inline Result ClientImpl::send_(Request &&req) { - auto res = detail::make_unique(); - auto error = Error::Success; - auto ret = send(req, *res, error); -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - return Result{ret ? std::move(res) : nullptr, error, std::move(req.headers), - last_ssl_error_, last_openssl_error_}; -#else - return Result{ret ? std::move(res) : nullptr, error, std::move(req.headers)}; -#endif -} - -inline bool ClientImpl::handle_request(Stream &strm, Request &req, - Response &res, bool close_connection, - Error &error) { - if (req.path.empty()) { - error = Error::Connection; - output_error_log(error, &req); - return false; - } - - auto req_save = req; - - bool ret; - - if (!is_ssl() && !proxy_host_.empty() && proxy_port_ != -1) { - auto req2 = req; - req2.path = "http://" + host_and_port_ + req.path; - ret = process_request(strm, req2, res, close_connection, error); - req = req2; - req.path = req_save.path; - } else { - ret = process_request(strm, req, res, close_connection, error); - } - - if (!ret) { return false; } - - if (res.get_header_value("Connection") == "close" || - (res.version == "HTTP/1.0" && res.reason != "Connection established")) { - // TODO this requires a not-entirely-obvious chain of calls to be correct - // for this to be safe. - - // This is safe to call because handle_request is only called by send_ - // which locks the request mutex during the process. It would be a bug - // to call it from a different thread since it's a thread-safety issue - // to do these things to the socket if another thread is using the socket. - std::lock_guard guard(socket_mutex_); - shutdown_ssl(socket_, true); - shutdown_socket(socket_); - close_socket(socket_); - } - - if (300 < res.status && res.status < 400 && follow_location_) { - req = req_save; - ret = redirect(req, res, error); - } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if ((res.status == StatusCode::Unauthorized_401 || - res.status == StatusCode::ProxyAuthenticationRequired_407) && - req.authorization_count_ < 5) { - auto is_proxy = res.status == StatusCode::ProxyAuthenticationRequired_407; - const auto &username = - is_proxy ? proxy_digest_auth_username_ : digest_auth_username_; - const auto &password = - is_proxy ? proxy_digest_auth_password_ : digest_auth_password_; - - if (!username.empty() && !password.empty()) { - std::map auth; - if (detail::parse_www_authenticate(res, auth, is_proxy)) { - Request new_req = req; - new_req.authorization_count_ += 1; - new_req.headers.erase(is_proxy ? "Proxy-Authorization" - : "Authorization"); - new_req.headers.insert(detail::make_digest_authentication_header( - req, auth, new_req.authorization_count_, detail::random_string(10), - username, password, is_proxy)); - - Response new_res; - - ret = send(new_req, new_res, error); - if (ret) { res = new_res; } - } - } - } -#endif - - return ret; -} - -inline bool ClientImpl::redirect(Request &req, Response &res, Error &error) { - if (req.redirect_count_ == 0) { - error = Error::ExceedRedirectCount; - output_error_log(error, &req); - return false; - } - - auto location = res.get_header_value("location"); - if (location.empty()) { return false; } - - thread_local const std::regex re( - R"((?:(https?):)?(?://(?:\[([a-fA-F\d:]+)\]|([^:/?#]+))(?::(\d+))?)?([^?#]*)(\?[^#]*)?(?:#.*)?)"); - - std::smatch m; - if (!std::regex_match(location, m, re)) { return false; } - - auto scheme = is_ssl() ? "https" : "http"; - - auto next_scheme = m[1].str(); - auto next_host = m[2].str(); - if (next_host.empty()) { next_host = m[3].str(); } - auto port_str = m[4].str(); - auto next_path = m[5].str(); - auto next_query = m[6].str(); - - auto next_port = port_; - if (!port_str.empty()) { - next_port = std::stoi(port_str); - } else if (!next_scheme.empty()) { - next_port = next_scheme == "https" ? 443 : 80; - } - - if (next_scheme.empty()) { next_scheme = scheme; } - if (next_host.empty()) { next_host = host_; } - if (next_path.empty()) { next_path = "/"; } - - auto path = decode_query_component(next_path, true) + next_query; - - // Same host redirect - use current client - if (next_scheme == scheme && next_host == host_ && next_port == port_) { - return detail::redirect(*this, req, res, path, location, error); - } - - // Cross-host/scheme redirect - create new client with robust setup - return create_redirect_client(next_scheme, next_host, next_port, req, res, - path, location, error); -} - -// New method for robust redirect client creation -inline bool ClientImpl::create_redirect_client( - const std::string &scheme, const std::string &host, int port, Request &req, - Response &res, const std::string &path, const std::string &location, - Error &error) { - // Determine if we need SSL - auto need_ssl = (scheme == "https"); - - // Clean up request headers that are host/client specific - // Remove headers that should not be carried over to new host - auto headers_to_remove = - std::vector{"Host", "Proxy-Authorization", "Authorization"}; - - for (const auto &header_name : headers_to_remove) { - auto it = req.headers.find(header_name); - while (it != req.headers.end()) { - it = req.headers.erase(it); - it = req.headers.find(header_name); - } - } - - // Create appropriate client type and handle redirect - if (need_ssl) { -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - // Create SSL client for HTTPS redirect - SSLClient redirect_client(host, port); - - // Setup basic client configuration first - setup_redirect_client(redirect_client); - - // SSL-specific configuration for proxy environments - if (!proxy_host_.empty() && proxy_port_ != -1) { - // Critical: Disable SSL verification for proxy environments - redirect_client.enable_server_certificate_verification(false); - redirect_client.enable_server_hostname_verification(false); - } else { - // For direct SSL connections, copy SSL verification settings - redirect_client.enable_server_certificate_verification( - server_certificate_verification_); - redirect_client.enable_server_hostname_verification( - server_hostname_verification_); - } - - // Handle CA certificate store and paths if available - if (ca_cert_store_ && X509_STORE_up_ref(ca_cert_store_)) { - redirect_client.set_ca_cert_store(ca_cert_store_); - } - if (!ca_cert_file_path_.empty()) { - redirect_client.set_ca_cert_path(ca_cert_file_path_, ca_cert_dir_path_); - } - - // Client certificates are set through constructor for SSLClient - // NOTE: SSLClient constructor already takes client_cert_path and - // client_key_path so we need to create it properly if client certs are - // needed - - // Execute the redirect - return detail::redirect(redirect_client, req, res, path, location, error); -#else - // SSL not supported - set appropriate error - error = Error::SSLConnection; - output_error_log(error, &req); - return false; -#endif - } else { - // HTTP redirect - ClientImpl redirect_client(host, port); - - // Setup client with robust configuration - setup_redirect_client(redirect_client); - - // Execute the redirect - return detail::redirect(redirect_client, req, res, path, location, error); - } -} - -// New method for robust client setup (based on basic_manual_redirect.cpp -// logic) -template -inline void ClientImpl::setup_redirect_client(ClientType &client) { - // Copy basic settings first - client.set_connection_timeout(connection_timeout_sec_); - client.set_read_timeout(read_timeout_sec_, read_timeout_usec_); - client.set_write_timeout(write_timeout_sec_, write_timeout_usec_); - client.set_keep_alive(keep_alive_); - client.set_follow_location( - true); // Enable redirects to handle multi-step redirects - client.set_path_encode(path_encode_); - client.set_compress(compress_); - client.set_decompress(decompress_); - - // Copy authentication settings BEFORE proxy setup - if (!basic_auth_username_.empty()) { - client.set_basic_auth(basic_auth_username_, basic_auth_password_); - } - if (!bearer_token_auth_token_.empty()) { - client.set_bearer_token_auth(bearer_token_auth_token_); - } -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (!digest_auth_username_.empty()) { - client.set_digest_auth(digest_auth_username_, digest_auth_password_); - } -#endif - - // Setup proxy configuration (CRITICAL ORDER - proxy must be set - // before proxy auth) - if (!proxy_host_.empty() && proxy_port_ != -1) { - // First set proxy host and port - client.set_proxy(proxy_host_, proxy_port_); - - // Then set proxy authentication (order matters!) - if (!proxy_basic_auth_username_.empty()) { - client.set_proxy_basic_auth(proxy_basic_auth_username_, - proxy_basic_auth_password_); - } - if (!proxy_bearer_token_auth_token_.empty()) { - client.set_proxy_bearer_token_auth(proxy_bearer_token_auth_token_); - } -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (!proxy_digest_auth_username_.empty()) { - client.set_proxy_digest_auth(proxy_digest_auth_username_, - proxy_digest_auth_password_); - } -#endif - } - - // Copy network and socket settings - client.set_address_family(address_family_); - client.set_tcp_nodelay(tcp_nodelay_); - client.set_ipv6_v6only(ipv6_v6only_); - if (socket_options_) { client.set_socket_options(socket_options_); } - if (!interface_.empty()) { client.set_interface(interface_); } - - // Copy logging and headers - if (logger_) { client.set_logger(logger_); } - if (error_logger_) { client.set_error_logger(error_logger_); } - - // NOTE: DO NOT copy default_headers_ as they may contain stale Host headers - // Each new client should generate its own headers based on its target host -} - -inline bool ClientImpl::write_content_with_provider(Stream &strm, - const Request &req, - Error &error) const { - auto is_shutting_down = []() { return false; }; - - if (req.is_chunked_content_provider_) { - // TODO: Brotli support - std::unique_ptr compressor; -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - if (compress_) { - compressor = detail::make_unique(); - } else -#endif - { - compressor = detail::make_unique(); - } - - return detail::write_content_chunked(strm, req.content_provider_, - is_shutting_down, *compressor, error); - } else { - return detail::write_content_with_progress( - strm, req.content_provider_, 0, req.content_length_, is_shutting_down, - req.upload_progress, error); - } -} - -inline bool ClientImpl::write_request(Stream &strm, Request &req, - bool close_connection, Error &error) { - // Prepare additional headers - if (close_connection) { - if (!req.has_header("Connection")) { - req.set_header("Connection", "close"); - } - } - - if (!req.has_header("Host")) { - // For Unix socket connections, use "localhost" as Host header (similar to - // curl behavior) - if (address_family_ == AF_UNIX) { - req.set_header("Host", "localhost"); - } else { - req.set_header("Host", host_and_port_); - } - } - - if (!req.has_header("Accept")) { req.set_header("Accept", "*/*"); } - - if (!req.content_receiver) { - if (!req.has_header("Accept-Encoding")) { - std::string accept_encoding; -#ifdef CPPHTTPLIB_BROTLI_SUPPORT - accept_encoding = "br"; -#endif -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - if (!accept_encoding.empty()) { accept_encoding += ", "; } - accept_encoding += "gzip, deflate"; -#endif -#ifdef CPPHTTPLIB_ZSTD_SUPPORT - if (!accept_encoding.empty()) { accept_encoding += ", "; } - accept_encoding += "zstd"; -#endif - req.set_header("Accept-Encoding", accept_encoding); - } - -#ifndef CPPHTTPLIB_NO_DEFAULT_USER_AGENT - if (!req.has_header("User-Agent")) { - auto agent = std::string("cpp-httplib/") + CPPHTTPLIB_VERSION; - req.set_header("User-Agent", agent); - } -#endif - }; - - if (req.body.empty()) { - if (req.content_provider_) { - if (!req.is_chunked_content_provider_) { - if (!req.has_header("Content-Length")) { - auto length = std::to_string(req.content_length_); - req.set_header("Content-Length", length); - } - } - } else { - if (req.method == "POST" || req.method == "PUT" || - req.method == "PATCH") { - req.set_header("Content-Length", "0"); - } - } - } else { - if (!req.has_header("Content-Type")) { - req.set_header("Content-Type", "text/plain"); - } - - if (!req.has_header("Content-Length")) { - auto length = std::to_string(req.body.size()); - req.set_header("Content-Length", length); - } - } - - if (!basic_auth_password_.empty() || !basic_auth_username_.empty()) { - if (!req.has_header("Authorization")) { - req.headers.insert(make_basic_authentication_header( - basic_auth_username_, basic_auth_password_, false)); - } - } - - if (!proxy_basic_auth_username_.empty() && - !proxy_basic_auth_password_.empty()) { - if (!req.has_header("Proxy-Authorization")) { - req.headers.insert(make_basic_authentication_header( - proxy_basic_auth_username_, proxy_basic_auth_password_, true)); - } - } - - if (!bearer_token_auth_token_.empty()) { - if (!req.has_header("Authorization")) { - req.headers.insert(make_bearer_token_authentication_header( - bearer_token_auth_token_, false)); - } - } - - if (!proxy_bearer_token_auth_token_.empty()) { - if (!req.has_header("Proxy-Authorization")) { - req.headers.insert(make_bearer_token_authentication_header( - proxy_bearer_token_auth_token_, true)); - } - } - - // Request line and headers - { - detail::BufferStream bstrm; - - // Extract path and query from req.path - std::string path_part, query_part; - auto query_pos = req.path.find('?'); - if (query_pos != std::string::npos) { - path_part = req.path.substr(0, query_pos); - query_part = req.path.substr(query_pos + 1); - } else { - path_part = req.path; - query_part = ""; - } - - // Encode path and query - auto path_with_query = - path_encode_ ? detail::encode_path(path_part) : path_part; - - detail::parse_query_text(query_part, req.params); - if (!req.params.empty()) { - path_with_query = append_query_params(path_with_query, req.params); - } - - // Write request line and headers - detail::write_request_line(bstrm, req.method, path_with_query); - header_writer_(bstrm, req.headers); - - // Flush buffer - auto &data = bstrm.get_buffer(); - if (!detail::write_data(strm, data.data(), data.size())) { - error = Error::Write; - output_error_log(error, &req); - return false; - } - } - - // Body - if (req.body.empty()) { - return write_content_with_provider(strm, req, error); - } - - if (req.upload_progress) { - auto body_size = req.body.size(); - size_t written = 0; - auto data = req.body.data(); - - while (written < body_size) { - size_t to_write = (std::min)(CPPHTTPLIB_SEND_BUFSIZ, body_size - written); - if (!detail::write_data(strm, data + written, to_write)) { - error = Error::Write; - output_error_log(error, &req); - return false; - } - written += to_write; - - if (!req.upload_progress(written, body_size)) { - error = Error::Canceled; - output_error_log(error, &req); - return false; - } - } - } else { - if (!detail::write_data(strm, req.body.data(), req.body.size())) { - error = Error::Write; - output_error_log(error, &req); - return false; - } - } - - return true; -} - -inline std::unique_ptr ClientImpl::send_with_content_provider( - Request &req, const char *body, size_t content_length, - ContentProvider content_provider, - ContentProviderWithoutLength content_provider_without_length, - const std::string &content_type, Error &error) { - if (!content_type.empty()) { req.set_header("Content-Type", content_type); } - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - if (compress_) { req.set_header("Content-Encoding", "gzip"); } -#endif - -#ifdef CPPHTTPLIB_ZLIB_SUPPORT - if (compress_ && !content_provider_without_length) { - // TODO: Brotli support - detail::gzip_compressor compressor; - - if (content_provider) { - auto ok = true; - size_t offset = 0; - DataSink data_sink; - - data_sink.write = [&](const char *data, size_t data_len) -> bool { - if (ok) { - auto last = offset + data_len == content_length; - - auto ret = compressor.compress( - data, data_len, last, - [&](const char *compressed_data, size_t compressed_data_len) { - req.body.append(compressed_data, compressed_data_len); - return true; - }); - - if (ret) { - offset += data_len; - } else { - ok = false; - } - } - return ok; - }; - - while (ok && offset < content_length) { - if (!content_provider(offset, content_length - offset, data_sink)) { - error = Error::Canceled; - output_error_log(error, &req); - return nullptr; - } - } - } else { - if (!compressor.compress(body, content_length, true, - [&](const char *data, size_t data_len) { - req.body.append(data, data_len); - return true; - })) { - error = Error::Compression; - output_error_log(error, &req); - return nullptr; - } - } - } else -#endif - { - if (content_provider) { - req.content_length_ = content_length; - req.content_provider_ = std::move(content_provider); - req.is_chunked_content_provider_ = false; - } else if (content_provider_without_length) { - req.content_length_ = 0; - req.content_provider_ = detail::ContentProviderAdapter( - std::move(content_provider_without_length)); - req.is_chunked_content_provider_ = true; - req.set_header("Transfer-Encoding", "chunked"); - } else { - req.body.assign(body, content_length); - } - } - - auto res = detail::make_unique(); - return send(req, *res, error) ? std::move(res) : nullptr; -} - -inline Result ClientImpl::send_with_content_provider( - const std::string &method, const std::string &path, const Headers &headers, - const char *body, size_t content_length, ContentProvider content_provider, - ContentProviderWithoutLength content_provider_without_length, - const std::string &content_type, UploadProgress progress) { - Request req; - req.method = method; - req.headers = headers; - req.path = path; - req.upload_progress = std::move(progress); - if (max_timeout_msec_ > 0) { - req.start_time_ = std::chrono::steady_clock::now(); - } - - auto error = Error::Success; - - auto res = send_with_content_provider( - req, body, content_length, std::move(content_provider), - std::move(content_provider_without_length), content_type, error); - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - return Result{std::move(res), error, std::move(req.headers), last_ssl_error_, - last_openssl_error_}; -#else - return Result{std::move(res), error, std::move(req.headers)}; -#endif -} - -inline void ClientImpl::output_log(const Request &req, - const Response &res) const { - if (logger_) { - std::lock_guard guard(logger_mutex_); - logger_(req, res); - } -} - -inline void ClientImpl::output_error_log(const Error &err, - const Request *req) const { - if (error_logger_) { - std::lock_guard guard(logger_mutex_); - error_logger_(err, req); - } -} - -inline bool ClientImpl::process_request(Stream &strm, Request &req, - Response &res, bool close_connection, - Error &error) { - // Send request - if (!write_request(strm, req, close_connection, error)) { return false; } - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (is_ssl()) { - auto is_proxy_enabled = !proxy_host_.empty() && proxy_port_ != -1; - if (!is_proxy_enabled) { - if (detail::is_ssl_peer_could_be_closed(socket_.ssl, socket_.sock)) { - error = Error::SSLPeerCouldBeClosed_; - output_error_log(error, &req); - return false; - } - } - } -#endif - - // Receive response and headers - if (!read_response_line(strm, req, res) || - !detail::read_headers(strm, res.headers)) { - error = Error::Read; - output_error_log(error, &req); - return false; - } - - // Body - if ((res.status != StatusCode::NoContent_204) && req.method != "HEAD" && - req.method != "CONNECT") { - auto redirect = 300 < res.status && res.status < 400 && - res.status != StatusCode::NotModified_304 && - follow_location_; - - if (req.response_handler && !redirect) { - if (!req.response_handler(res)) { - error = Error::Canceled; - output_error_log(error, &req); - return false; - } - } - - auto out = - req.content_receiver - ? static_cast( - [&](const char *buf, size_t n, size_t off, size_t len) { - if (redirect) { return true; } - auto ret = req.content_receiver(buf, n, off, len); - if (!ret) { - error = Error::Canceled; - output_error_log(error, &req); - } - return ret; - }) - : static_cast( - [&](const char *buf, size_t n, size_t /*off*/, - size_t /*len*/) { - assert(res.body.size() + n <= res.body.max_size()); - res.body.append(buf, n); - return true; - }); - - auto progress = [&](size_t current, size_t total) { - if (!req.download_progress || redirect) { return true; } - auto ret = req.download_progress(current, total); - if (!ret) { - error = Error::Canceled; - output_error_log(error, &req); - } - return ret; - }; - - if (res.has_header("Content-Length")) { - if (!req.content_receiver) { - auto len = res.get_header_value_u64("Content-Length"); - if (len > res.body.max_size()) { - error = Error::Read; - output_error_log(error, &req); - return false; - } - res.body.reserve(static_cast(len)); - } - } - - if (res.status != StatusCode::NotModified_304) { - int dummy_status; - if (!detail::read_content(strm, res, (std::numeric_limits::max)(), - dummy_status, std::move(progress), - std::move(out), decompress_)) { - if (error != Error::Canceled) { error = Error::Read; } - output_error_log(error, &req); - return false; - } - } - } - - // Log - output_log(req, res); - - return true; -} - -inline ContentProviderWithoutLength ClientImpl::get_multipart_content_provider( - const std::string &boundary, const UploadFormDataItems &items, - const FormDataProviderItems &provider_items) const { - size_t cur_item = 0; - size_t cur_start = 0; - // cur_item and cur_start are copied to within the std::function and - // maintain state between successive calls - return [&, cur_item, cur_start](size_t offset, - DataSink &sink) mutable -> bool { - if (!offset && !items.empty()) { - sink.os << detail::serialize_multipart_formdata(items, boundary, false); - return true; - } else if (cur_item < provider_items.size()) { - if (!cur_start) { - const auto &begin = detail::serialize_multipart_formdata_item_begin( - provider_items[cur_item], boundary); - offset += begin.size(); - cur_start = offset; - sink.os << begin; - } - - DataSink cur_sink; - auto has_data = true; - cur_sink.write = sink.write; - cur_sink.done = [&]() { has_data = false; }; - - if (!provider_items[cur_item].provider(offset - cur_start, cur_sink)) { - return false; - } - - if (!has_data) { - sink.os << detail::serialize_multipart_formdata_item_end(); - cur_item++; - cur_start = 0; - } - return true; - } else { - sink.os << detail::serialize_multipart_formdata_finish(boundary); - sink.done(); - return true; - } - }; -} - -inline bool ClientImpl::process_socket( - const Socket &socket, - std::chrono::time_point start_time, - std::function callback) { - return detail::process_client_socket( - socket.sock, read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, - write_timeout_usec_, max_timeout_msec_, start_time, std::move(callback)); -} - -inline bool ClientImpl::is_ssl() const { return false; } - -inline Result ClientImpl::Get(const std::string &path, - DownloadProgress progress) { - return Get(path, Headers(), std::move(progress)); -} - -inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, - const Headers &headers, - DownloadProgress progress) { - if (params.empty()) { return Get(path, headers); } - - std::string path_with_query = append_query_params(path, params); - return Get(path_with_query, headers, std::move(progress)); -} - -inline Result ClientImpl::Get(const std::string &path, const Headers &headers, - DownloadProgress progress) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = headers; - req.download_progress = std::move(progress); - if (max_timeout_msec_ > 0) { - req.start_time_ = std::chrono::steady_clock::now(); - } - - return send_(std::move(req)); -} - -inline Result ClientImpl::Get(const std::string &path, - ContentReceiver content_receiver, - DownloadProgress progress) { - return Get(path, Headers(), nullptr, std::move(content_receiver), - std::move(progress)); -} - -inline Result ClientImpl::Get(const std::string &path, const Headers &headers, - ContentReceiver content_receiver, - DownloadProgress progress) { - return Get(path, headers, nullptr, std::move(content_receiver), - std::move(progress)); -} - -inline Result ClientImpl::Get(const std::string &path, - ResponseHandler response_handler, - ContentReceiver content_receiver, - DownloadProgress progress) { - return Get(path, Headers(), std::move(response_handler), - std::move(content_receiver), std::move(progress)); -} - -inline Result ClientImpl::Get(const std::string &path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, - DownloadProgress progress) { - Request req; - req.method = "GET"; - req.path = path; - req.headers = headers; - req.response_handler = std::move(response_handler); - req.content_receiver = - [content_receiver](const char *data, size_t data_length, - size_t /*offset*/, size_t /*total_length*/) { - return content_receiver(data, data_length); - }; - req.download_progress = std::move(progress); - if (max_timeout_msec_ > 0) { - req.start_time_ = std::chrono::steady_clock::now(); - } - - return send_(std::move(req)); -} - -inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, - const Headers &headers, - ContentReceiver content_receiver, - DownloadProgress progress) { - return Get(path, params, headers, nullptr, std::move(content_receiver), - std::move(progress)); -} - -inline Result ClientImpl::Get(const std::string &path, const Params ¶ms, - const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, - DownloadProgress progress) { - if (params.empty()) { - return Get(path, headers, std::move(response_handler), - std::move(content_receiver), std::move(progress)); - } - - std::string path_with_query = append_query_params(path, params); - return Get(path_with_query, headers, std::move(response_handler), - std::move(content_receiver), std::move(progress)); -} - -inline Result ClientImpl::Head(const std::string &path) { - return Head(path, Headers()); -} - -inline Result ClientImpl::Head(const std::string &path, - const Headers &headers) { - Request req; - req.method = "HEAD"; - req.headers = headers; - req.path = path; - if (max_timeout_msec_ > 0) { - req.start_time_ = std::chrono::steady_clock::now(); - } - - return send_(std::move(req)); -} - -inline Result ClientImpl::Post(const std::string &path) { - return Post(path, std::string(), std::string()); -} - -inline Result ClientImpl::Post(const std::string &path, - const Headers &headers) { - return Post(path, headers, nullptr, 0, std::string()); -} - -inline Result ClientImpl::Post(const std::string &path, const char *body, - size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return Post(path, Headers(), body, content_length, content_type, progress); -} - -inline Result ClientImpl::Post(const std::string &path, const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return Post(path, Headers(), body, content_type, progress); -} - -inline Result ClientImpl::Post(const std::string &path, const Params ¶ms) { - return Post(path, Headers(), params); -} - -inline Result ClientImpl::Post(const std::string &path, size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return Post(path, Headers(), content_length, std::move(content_provider), - content_type, progress); -} - -inline Result ClientImpl::Post(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return Post(path, Headers(), std::move(content_provider), content_type, - progress); -} - -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const Params ¶ms) { - auto query = detail::params_to_query_str(params); - return Post(path, headers, query, "application/x-www-form-urlencoded"); -} - -inline Result ClientImpl::Post(const std::string &path, - const UploadFormDataItems &items, - UploadProgress progress) { - return Post(path, Headers(), items, progress); -} - -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - UploadProgress progress) { - const auto &boundary = detail::make_multipart_data_boundary(); - const auto &content_type = - detail::serialize_multipart_formdata_get_content_type(boundary); - const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Post(path, headers, body, content_type, progress); -} - -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const std::string &boundary, - UploadProgress progress) { - if (!detail::is_multipart_boundary_chars_valid(boundary)) { - return Result{nullptr, Error::UnsupportedMultipartBoundaryChars}; - } - - const auto &content_type = - detail::serialize_multipart_formdata_get_content_type(boundary); - const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Post(path, headers, body, content_type, progress); -} - -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("POST", path, headers, body, content_length, - nullptr, nullptr, content_type, progress); -} - -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("POST", path, headers, body.data(), - body.size(), nullptr, nullptr, content_type, - progress); -} - -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("POST", path, headers, nullptr, - content_length, std::move(content_provider), - nullptr, content_type, progress); -} - -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("POST", path, headers, nullptr, 0, nullptr, - std::move(content_provider), content_type, - progress); -} - -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const FormDataProviderItems &provider_items, - UploadProgress progress) { - const auto &boundary = detail::make_multipart_data_boundary(); - const auto &content_type = - detail::serialize_multipart_formdata_get_content_type(boundary); - return send_with_content_provider( - "POST", path, headers, nullptr, 0, nullptr, - get_multipart_content_provider(boundary, items, provider_items), - content_type, progress); -} - -inline Result ClientImpl::Post(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - ContentReceiver content_receiver, - DownloadProgress progress) { - Request req; - req.method = "POST"; - req.path = path; - req.headers = headers; - req.body = body; - req.content_receiver = - [content_receiver](const char *data, size_t data_length, - size_t /*offset*/, size_t /*total_length*/) { - return content_receiver(data, data_length); - }; - req.download_progress = std::move(progress); - - if (max_timeout_msec_ > 0) { - req.start_time_ = std::chrono::steady_clock::now(); - } - - if (!content_type.empty()) { req.set_header("Content-Type", content_type); } - - return send_(std::move(req)); -} - -inline Result ClientImpl::Put(const std::string &path) { - return Put(path, std::string(), std::string()); -} - -inline Result ClientImpl::Put(const std::string &path, const Headers &headers) { - return Put(path, headers, nullptr, 0, std::string()); -} - -inline Result ClientImpl::Put(const std::string &path, const char *body, - size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return Put(path, Headers(), body, content_length, content_type, progress); -} - -inline Result ClientImpl::Put(const std::string &path, const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return Put(path, Headers(), body, content_type, progress); -} - -inline Result ClientImpl::Put(const std::string &path, const Params ¶ms) { - return Put(path, Headers(), params); -} - -inline Result ClientImpl::Put(const std::string &path, size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return Put(path, Headers(), content_length, std::move(content_provider), - content_type, progress); -} - -inline Result ClientImpl::Put(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return Put(path, Headers(), std::move(content_provider), content_type, - progress); -} - -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const Params ¶ms) { - auto query = detail::params_to_query_str(params); - return Put(path, headers, query, "application/x-www-form-urlencoded"); -} - -inline Result ClientImpl::Put(const std::string &path, - const UploadFormDataItems &items, - UploadProgress progress) { - return Put(path, Headers(), items, progress); -} - -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - UploadProgress progress) { - const auto &boundary = detail::make_multipart_data_boundary(); - const auto &content_type = - detail::serialize_multipart_formdata_get_content_type(boundary); - const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Put(path, headers, body, content_type, progress); -} - -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const std::string &boundary, - UploadProgress progress) { - if (!detail::is_multipart_boundary_chars_valid(boundary)) { - return Result{nullptr, Error::UnsupportedMultipartBoundaryChars}; - } - - const auto &content_type = - detail::serialize_multipart_formdata_get_content_type(boundary); - const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Put(path, headers, body, content_type, progress); -} - -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("PUT", path, headers, body, content_length, - nullptr, nullptr, content_type, progress); -} - -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("PUT", path, headers, body.data(), - body.size(), nullptr, nullptr, content_type, - progress); -} - -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("PUT", path, headers, nullptr, - content_length, std::move(content_provider), - nullptr, content_type, progress); -} - -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("PUT", path, headers, nullptr, 0, nullptr, - std::move(content_provider), content_type, - progress); -} - -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const FormDataProviderItems &provider_items, - UploadProgress progress) { - const auto &boundary = detail::make_multipart_data_boundary(); - const auto &content_type = - detail::serialize_multipart_formdata_get_content_type(boundary); - return send_with_content_provider( - "PUT", path, headers, nullptr, 0, nullptr, - get_multipart_content_provider(boundary, items, provider_items), - content_type, progress); -} - -inline Result ClientImpl::Put(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - ContentReceiver content_receiver, - DownloadProgress progress) { - Request req; - req.method = "PUT"; - req.path = path; - req.headers = headers; - req.body = body; - req.content_receiver = - [content_receiver](const char *data, size_t data_length, - size_t /*offset*/, size_t /*total_length*/) { - return content_receiver(data, data_length); - }; - req.download_progress = std::move(progress); - - if (max_timeout_msec_ > 0) { - req.start_time_ = std::chrono::steady_clock::now(); - } - - if (!content_type.empty()) { req.set_header("Content-Type", content_type); } - - return send_(std::move(req)); -} - -inline Result ClientImpl::Patch(const std::string &path) { - return Patch(path, std::string(), std::string()); -} - -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - UploadProgress progress) { - return Patch(path, headers, nullptr, 0, std::string(), progress); -} - -inline Result ClientImpl::Patch(const std::string &path, const char *body, - size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return Patch(path, Headers(), body, content_length, content_type, progress); -} - -inline Result ClientImpl::Patch(const std::string &path, - const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return Patch(path, Headers(), body, content_type, progress); -} - -inline Result ClientImpl::Patch(const std::string &path, const Params ¶ms) { - return Patch(path, Headers(), params); -} - -inline Result ClientImpl::Patch(const std::string &path, size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return Patch(path, Headers(), content_length, std::move(content_provider), - content_type, progress); -} - -inline Result ClientImpl::Patch(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return Patch(path, Headers(), std::move(content_provider), content_type, - progress); -} - -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const Params ¶ms) { - auto query = detail::params_to_query_str(params); - return Patch(path, headers, query, "application/x-www-form-urlencoded"); -} - -inline Result ClientImpl::Patch(const std::string &path, - const UploadFormDataItems &items, - UploadProgress progress) { - return Patch(path, Headers(), items, progress); -} - -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - UploadProgress progress) { - const auto &boundary = detail::make_multipart_data_boundary(); - const auto &content_type = - detail::serialize_multipart_formdata_get_content_type(boundary); - const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Patch(path, headers, body, content_type, progress); -} - -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const std::string &boundary, - UploadProgress progress) { - if (!detail::is_multipart_boundary_chars_valid(boundary)) { - return Result{nullptr, Error::UnsupportedMultipartBoundaryChars}; - } - - const auto &content_type = - detail::serialize_multipart_formdata_get_content_type(boundary); - const auto &body = detail::serialize_multipart_formdata(items, boundary); - return Patch(path, headers, body, content_type, progress); -} - -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("PATCH", path, headers, body, - content_length, nullptr, nullptr, - content_type, progress); -} - -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("PATCH", path, headers, body.data(), - body.size(), nullptr, nullptr, content_type, - progress); -} - -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("PATCH", path, headers, nullptr, - content_length, std::move(content_provider), - nullptr, content_type, progress); -} - -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return send_with_content_provider("PATCH", path, headers, nullptr, 0, nullptr, - std::move(content_provider), content_type, - progress); -} - -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const FormDataProviderItems &provider_items, - UploadProgress progress) { - const auto &boundary = detail::make_multipart_data_boundary(); - const auto &content_type = - detail::serialize_multipart_formdata_get_content_type(boundary); - return send_with_content_provider( - "PATCH", path, headers, nullptr, 0, nullptr, - get_multipart_content_provider(boundary, items, provider_items), - content_type, progress); -} - -inline Result ClientImpl::Patch(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - ContentReceiver content_receiver, - DownloadProgress progress) { - Request req; - req.method = "PATCH"; - req.path = path; - req.headers = headers; - req.body = body; - req.content_receiver = - [content_receiver](const char *data, size_t data_length, - size_t /*offset*/, size_t /*total_length*/) { - return content_receiver(data, data_length); - }; - req.download_progress = std::move(progress); - - if (max_timeout_msec_ > 0) { - req.start_time_ = std::chrono::steady_clock::now(); - } - - if (!content_type.empty()) { req.set_header("Content-Type", content_type); } - - return send_(std::move(req)); -} - -inline Result ClientImpl::Delete(const std::string &path, - DownloadProgress progress) { - return Delete(path, Headers(), std::string(), std::string(), progress); -} - -inline Result ClientImpl::Delete(const std::string &path, - const Headers &headers, - DownloadProgress progress) { - return Delete(path, headers, std::string(), std::string(), progress); -} - -inline Result ClientImpl::Delete(const std::string &path, const char *body, - size_t content_length, - const std::string &content_type, - DownloadProgress progress) { - return Delete(path, Headers(), body, content_length, content_type, progress); -} - -inline Result ClientImpl::Delete(const std::string &path, - const std::string &body, - const std::string &content_type, - DownloadProgress progress) { - return Delete(path, Headers(), body.data(), body.size(), content_type, - progress); -} - -inline Result ClientImpl::Delete(const std::string &path, - const Headers &headers, - const std::string &body, - const std::string &content_type, - DownloadProgress progress) { - return Delete(path, headers, body.data(), body.size(), content_type, - progress); -} - -inline Result ClientImpl::Delete(const std::string &path, const Params ¶ms, - DownloadProgress progress) { - return Delete(path, Headers(), params, progress); -} - -inline Result ClientImpl::Delete(const std::string &path, - const Headers &headers, const Params ¶ms, - DownloadProgress progress) { - auto query = detail::params_to_query_str(params); - return Delete(path, headers, query, "application/x-www-form-urlencoded", - progress); -} - -inline Result ClientImpl::Delete(const std::string &path, - const Headers &headers, const char *body, - size_t content_length, - const std::string &content_type, - DownloadProgress progress) { - Request req; - req.method = "DELETE"; - req.headers = headers; - req.path = path; - req.download_progress = std::move(progress); - if (max_timeout_msec_ > 0) { - req.start_time_ = std::chrono::steady_clock::now(); - } - - if (!content_type.empty()) { req.set_header("Content-Type", content_type); } - req.body.assign(body, content_length); - - return send_(std::move(req)); -} - -inline Result ClientImpl::Options(const std::string &path) { - return Options(path, Headers()); -} - -inline Result ClientImpl::Options(const std::string &path, - const Headers &headers) { - Request req; - req.method = "OPTIONS"; - req.headers = headers; - req.path = path; - if (max_timeout_msec_ > 0) { - req.start_time_ = std::chrono::steady_clock::now(); - } - - return send_(std::move(req)); -} - -inline void ClientImpl::stop() { - std::lock_guard guard(socket_mutex_); - - // If there is anything ongoing right now, the ONLY thread-safe thing we can - // do is to shutdown_socket, so that threads using this socket suddenly - // discover they can't read/write any more and error out. Everything else - // (closing the socket, shutting ssl down) is unsafe because these actions - // are not thread-safe. - if (socket_requests_in_flight_ > 0) { - shutdown_socket(socket_); - - // Aside from that, we set a flag for the socket to be closed when we're - // done. - socket_should_be_closed_when_request_is_done_ = true; - return; - } - - // Otherwise, still holding the mutex, we can shut everything down ourselves - shutdown_ssl(socket_, true); - shutdown_socket(socket_); - close_socket(socket_); -} - -inline std::string ClientImpl::host() const { return host_; } - -inline int ClientImpl::port() const { return port_; } - -inline size_t ClientImpl::is_socket_open() const { - std::lock_guard guard(socket_mutex_); - return socket_.is_open(); -} - -inline socket_t ClientImpl::socket() const { return socket_.sock; } - -inline void ClientImpl::set_connection_timeout(time_t sec, time_t usec) { - connection_timeout_sec_ = sec; - connection_timeout_usec_ = usec; -} - -inline void ClientImpl::set_read_timeout(time_t sec, time_t usec) { - read_timeout_sec_ = sec; - read_timeout_usec_ = usec; -} - -inline void ClientImpl::set_write_timeout(time_t sec, time_t usec) { - write_timeout_sec_ = sec; - write_timeout_usec_ = usec; -} - -inline void ClientImpl::set_max_timeout(time_t msec) { - max_timeout_msec_ = msec; -} - -inline void ClientImpl::set_basic_auth(const std::string &username, - const std::string &password) { - basic_auth_username_ = username; - basic_auth_password_ = password; -} - -inline void ClientImpl::set_bearer_token_auth(const std::string &token) { - bearer_token_auth_token_ = token; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void ClientImpl::set_digest_auth(const std::string &username, - const std::string &password) { - digest_auth_username_ = username; - digest_auth_password_ = password; -} -#endif - -inline void ClientImpl::set_keep_alive(bool on) { keep_alive_ = on; } - -inline void ClientImpl::set_follow_location(bool on) { follow_location_ = on; } - -inline void ClientImpl::set_path_encode(bool on) { path_encode_ = on; } - -inline void -ClientImpl::set_hostname_addr_map(std::map addr_map) { - addr_map_ = std::move(addr_map); -} - -inline void ClientImpl::set_default_headers(Headers headers) { - default_headers_ = std::move(headers); -} - -inline void ClientImpl::set_header_writer( - std::function const &writer) { - header_writer_ = writer; -} - -inline void ClientImpl::set_address_family(int family) { - address_family_ = family; -} - -inline void ClientImpl::set_tcp_nodelay(bool on) { tcp_nodelay_ = on; } - -inline void ClientImpl::set_ipv6_v6only(bool on) { ipv6_v6only_ = on; } - -inline void ClientImpl::set_socket_options(SocketOptions socket_options) { - socket_options_ = std::move(socket_options); -} - -inline void ClientImpl::set_compress(bool on) { compress_ = on; } - -inline void ClientImpl::set_decompress(bool on) { decompress_ = on; } - -inline void ClientImpl::set_interface(const std::string &intf) { - interface_ = intf; -} - -inline void ClientImpl::set_proxy(const std::string &host, int port) { - proxy_host_ = host; - proxy_port_ = port; -} - -inline void ClientImpl::set_proxy_basic_auth(const std::string &username, - const std::string &password) { - proxy_basic_auth_username_ = username; - proxy_basic_auth_password_ = password; -} - -inline void ClientImpl::set_proxy_bearer_token_auth(const std::string &token) { - proxy_bearer_token_auth_token_ = token; -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void ClientImpl::set_proxy_digest_auth(const std::string &username, - const std::string &password) { - proxy_digest_auth_username_ = username; - proxy_digest_auth_password_ = password; -} - -inline void ClientImpl::set_ca_cert_path(const std::string &ca_cert_file_path, - const std::string &ca_cert_dir_path) { - ca_cert_file_path_ = ca_cert_file_path; - ca_cert_dir_path_ = ca_cert_dir_path; -} - -inline void ClientImpl::set_ca_cert_store(X509_STORE *ca_cert_store) { - if (ca_cert_store && ca_cert_store != ca_cert_store_) { - ca_cert_store_ = ca_cert_store; - } -} - -inline X509_STORE *ClientImpl::create_ca_cert_store(const char *ca_cert, - std::size_t size) const { - auto mem = BIO_new_mem_buf(ca_cert, static_cast(size)); - auto se = detail::scope_exit([&] { BIO_free_all(mem); }); - if (!mem) { return nullptr; } - - auto inf = PEM_X509_INFO_read_bio(mem, nullptr, nullptr, nullptr); - if (!inf) { return nullptr; } - - auto cts = X509_STORE_new(); - if (cts) { - for (auto i = 0; i < static_cast(sk_X509_INFO_num(inf)); i++) { - auto itmp = sk_X509_INFO_value(inf, i); - if (!itmp) { continue; } - - if (itmp->x509) { X509_STORE_add_cert(cts, itmp->x509); } - if (itmp->crl) { X509_STORE_add_crl(cts, itmp->crl); } - } - } - - sk_X509_INFO_pop_free(inf, X509_INFO_free); - return cts; -} - -inline void ClientImpl::enable_server_certificate_verification(bool enabled) { - server_certificate_verification_ = enabled; -} - -inline void ClientImpl::enable_server_hostname_verification(bool enabled) { - server_hostname_verification_ = enabled; -} - -inline void ClientImpl::set_server_certificate_verifier( - std::function verifier) { - server_certificate_verifier_ = verifier; -} -#endif - -inline void ClientImpl::set_logger(Logger logger) { - logger_ = std::move(logger); -} - -inline void ClientImpl::set_error_logger(ErrorLogger error_logger) { - error_logger_ = std::move(error_logger); -} - -/* - * SSL Implementation - */ -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -namespace detail { - -inline bool is_ip_address(const std::string &host) { - struct in_addr addr4; - struct in6_addr addr6; - return inet_pton(AF_INET, host.c_str(), &addr4) == 1 || - inet_pton(AF_INET6, host.c_str(), &addr6) == 1; -} - -template -inline SSL *ssl_new(socket_t sock, SSL_CTX *ctx, std::mutex &ctx_mutex, - U SSL_connect_or_accept, V setup) { - SSL *ssl = nullptr; - { - std::lock_guard guard(ctx_mutex); - ssl = SSL_new(ctx); - } - - if (ssl) { - set_nonblocking(sock, true); - auto bio = BIO_new_socket(static_cast(sock), BIO_NOCLOSE); - BIO_set_nbio(bio, 1); - SSL_set_bio(ssl, bio, bio); - - if (!setup(ssl) || SSL_connect_or_accept(ssl) != 1) { - SSL_shutdown(ssl); - { - std::lock_guard guard(ctx_mutex); - SSL_free(ssl); - } - set_nonblocking(sock, false); - return nullptr; - } - BIO_set_nbio(bio, 0); - set_nonblocking(sock, false); - } - - return ssl; -} - -inline void ssl_delete(std::mutex &ctx_mutex, SSL *ssl, socket_t sock, - bool shutdown_gracefully) { - // sometimes we may want to skip this to try to avoid SIGPIPE if we know - // the remote has closed the network connection - // Note that it is not always possible to avoid SIGPIPE, this is merely a - // best-efforts. - if (shutdown_gracefully) { - (void)(sock); - // SSL_shutdown() returns 0 on first call (indicating close_notify alert - // sent) and 1 on subsequent call (indicating close_notify alert received) - if (SSL_shutdown(ssl) == 0) { - // Expected to return 1, but even if it doesn't, we free ssl - SSL_shutdown(ssl); - } - } - - std::lock_guard guard(ctx_mutex); - SSL_free(ssl); -} - -template -bool ssl_connect_or_accept_nonblocking(socket_t sock, SSL *ssl, - U ssl_connect_or_accept, - time_t timeout_sec, time_t timeout_usec, - int *ssl_error) { - auto res = 0; - while ((res = ssl_connect_or_accept(ssl)) != 1) { - auto err = SSL_get_error(ssl, res); - switch (err) { - case SSL_ERROR_WANT_READ: - if (select_read(sock, timeout_sec, timeout_usec) > 0) { continue; } - break; - case SSL_ERROR_WANT_WRITE: - if (select_write(sock, timeout_sec, timeout_usec) > 0) { continue; } - break; - default: break; - } - if (ssl_error) { *ssl_error = err; } - return false; - } - return true; -} - -template -inline bool process_server_socket_ssl( - const std::atomic &svr_sock, SSL *ssl, socket_t sock, - size_t keep_alive_max_count, time_t keep_alive_timeout_sec, - time_t read_timeout_sec, time_t read_timeout_usec, time_t write_timeout_sec, - time_t write_timeout_usec, T callback) { - return process_server_socket_core( - svr_sock, sock, keep_alive_max_count, keep_alive_timeout_sec, - [&](bool close_connection, bool &connection_closed) { - SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec); - return callback(strm, close_connection, connection_closed); - }); -} - -template -inline bool process_client_socket_ssl( - SSL *ssl, socket_t sock, time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec, - time_t max_timeout_msec, - std::chrono::time_point start_time, T callback) { - SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec, - write_timeout_sec, write_timeout_usec, max_timeout_msec, - start_time); - return callback(strm); -} - -// SSL socket stream implementation -inline SSLSocketStream::SSLSocketStream( - socket_t sock, SSL *ssl, time_t read_timeout_sec, time_t read_timeout_usec, - time_t write_timeout_sec, time_t write_timeout_usec, - time_t max_timeout_msec, - std::chrono::time_point start_time) - : sock_(sock), ssl_(ssl), read_timeout_sec_(read_timeout_sec), - read_timeout_usec_(read_timeout_usec), - write_timeout_sec_(write_timeout_sec), - write_timeout_usec_(write_timeout_usec), - max_timeout_msec_(max_timeout_msec), start_time_(start_time) { - SSL_clear_mode(ssl, SSL_MODE_AUTO_RETRY); -} - -inline SSLSocketStream::~SSLSocketStream() = default; - -inline bool SSLSocketStream::is_readable() const { - return SSL_pending(ssl_) > 0; -} - -inline bool SSLSocketStream::wait_readable() const { - if (max_timeout_msec_ <= 0) { - return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; - } - - time_t read_timeout_sec; - time_t read_timeout_usec; - calc_actual_timeout(max_timeout_msec_, duration(), read_timeout_sec_, - read_timeout_usec_, read_timeout_sec, read_timeout_usec); - - return select_read(sock_, read_timeout_sec, read_timeout_usec) > 0; -} - -inline bool SSLSocketStream::wait_writable() const { - return select_write(sock_, write_timeout_sec_, write_timeout_usec_) > 0 && - is_socket_alive(sock_) && !is_ssl_peer_could_be_closed(ssl_, sock_); -} - -inline ssize_t SSLSocketStream::read(char *ptr, size_t size) { - if (SSL_pending(ssl_) > 0) { - return SSL_read(ssl_, ptr, static_cast(size)); - } else if (wait_readable()) { - auto ret = SSL_read(ssl_, ptr, static_cast(size)); - if (ret < 0) { - auto err = SSL_get_error(ssl_, ret); - auto n = 1000; -#ifdef _WIN32 - while (--n >= 0 && (err == SSL_ERROR_WANT_READ || - (err == SSL_ERROR_SYSCALL && - WSAGetLastError() == WSAETIMEDOUT))) { -#else - while (--n >= 0 && err == SSL_ERROR_WANT_READ) { -#endif - if (SSL_pending(ssl_) > 0) { - return SSL_read(ssl_, ptr, static_cast(size)); - } else if (wait_readable()) { - std::this_thread::sleep_for(std::chrono::microseconds{10}); - ret = SSL_read(ssl_, ptr, static_cast(size)); - if (ret >= 0) { return ret; } - err = SSL_get_error(ssl_, ret); - } else { - break; - } - } - assert(ret < 0); - } - return ret; - } else { - return -1; - } -} - -inline ssize_t SSLSocketStream::write(const char *ptr, size_t size) { - if (wait_writable()) { - auto handle_size = static_cast( - std::min(size, (std::numeric_limits::max)())); - - auto ret = SSL_write(ssl_, ptr, static_cast(handle_size)); - if (ret < 0) { - auto err = SSL_get_error(ssl_, ret); - auto n = 1000; -#ifdef _WIN32 - while (--n >= 0 && (err == SSL_ERROR_WANT_WRITE || - (err == SSL_ERROR_SYSCALL && - WSAGetLastError() == WSAETIMEDOUT))) { -#else - while (--n >= 0 && err == SSL_ERROR_WANT_WRITE) { -#endif - if (wait_writable()) { - std::this_thread::sleep_for(std::chrono::microseconds{10}); - ret = SSL_write(ssl_, ptr, static_cast(handle_size)); - if (ret >= 0) { return ret; } - err = SSL_get_error(ssl_, ret); - } else { - break; - } - } - assert(ret < 0); - } - return ret; - } - return -1; -} - -inline void SSLSocketStream::get_remote_ip_and_port(std::string &ip, - int &port) const { - detail::get_remote_ip_and_port(sock_, ip, port); -} - -inline void SSLSocketStream::get_local_ip_and_port(std::string &ip, - int &port) const { - detail::get_local_ip_and_port(sock_, ip, port); -} - -inline socket_t SSLSocketStream::socket() const { return sock_; } - -inline time_t SSLSocketStream::duration() const { - return std::chrono::duration_cast( - std::chrono::steady_clock::now() - start_time_) - .count(); -} - -} // namespace detail - -// SSL HTTP server implementation -inline SSLServer::SSLServer(const char *cert_path, const char *private_key_path, - const char *client_ca_cert_file_path, - const char *client_ca_cert_dir_path, - const char *private_key_password) { - ctx_ = SSL_CTX_new(TLS_server_method()); - - if (ctx_) { - SSL_CTX_set_options(ctx_, - SSL_OP_NO_COMPRESSION | - SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); - - SSL_CTX_set_min_proto_version(ctx_, TLS1_2_VERSION); - - if (private_key_password != nullptr && (private_key_password[0] != '\0')) { - SSL_CTX_set_default_passwd_cb_userdata( - ctx_, - reinterpret_cast(const_cast(private_key_password))); - } - - if (SSL_CTX_use_certificate_chain_file(ctx_, cert_path) != 1 || - SSL_CTX_use_PrivateKey_file(ctx_, private_key_path, SSL_FILETYPE_PEM) != - 1 || - SSL_CTX_check_private_key(ctx_) != 1) { - last_ssl_error_ = static_cast(ERR_get_error()); - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } else if (client_ca_cert_file_path || client_ca_cert_dir_path) { - SSL_CTX_load_verify_locations(ctx_, client_ca_cert_file_path, - client_ca_cert_dir_path); - - // Set client CA list to be sent to clients during TLS handshake - if (client_ca_cert_file_path) { - auto ca_list = SSL_load_client_CA_file(client_ca_cert_file_path); - if (ca_list != nullptr) { - SSL_CTX_set_client_CA_list(ctx_, ca_list); - } else { - // Failed to load client CA list, but we continue since - // SSL_CTX_load_verify_locations already succeeded and - // certificate verification will still work - last_ssl_error_ = static_cast(ERR_get_error()); - } - } - - SSL_CTX_set_verify( - ctx_, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, nullptr); - } - } -} - -inline SSLServer::SSLServer(X509 *cert, EVP_PKEY *private_key, - X509_STORE *client_ca_cert_store) { - ctx_ = SSL_CTX_new(TLS_server_method()); - - if (ctx_) { - SSL_CTX_set_options(ctx_, - SSL_OP_NO_COMPRESSION | - SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); - - SSL_CTX_set_min_proto_version(ctx_, TLS1_2_VERSION); - - if (SSL_CTX_use_certificate(ctx_, cert) != 1 || - SSL_CTX_use_PrivateKey(ctx_, private_key) != 1) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } else if (client_ca_cert_store) { - SSL_CTX_set_cert_store(ctx_, client_ca_cert_store); - - // Extract CA names from the store and set them as the client CA list - auto ca_list = extract_ca_names_from_x509_store(client_ca_cert_store); - if (ca_list) { - SSL_CTX_set_client_CA_list(ctx_, ca_list); - } else { - // Failed to extract CA names, record the error - last_ssl_error_ = static_cast(ERR_get_error()); - } - - SSL_CTX_set_verify( - ctx_, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, nullptr); - } - } -} - -inline SSLServer::SSLServer( - const std::function &setup_ssl_ctx_callback) { - ctx_ = SSL_CTX_new(TLS_method()); - if (ctx_) { - if (!setup_ssl_ctx_callback(*ctx_)) { - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } -} - -inline SSLServer::~SSLServer() { - if (ctx_) { SSL_CTX_free(ctx_); } -} - -inline bool SSLServer::is_valid() const { return ctx_; } - -inline SSL_CTX *SSLServer::ssl_context() const { return ctx_; } - -inline void SSLServer::update_certs(X509 *cert, EVP_PKEY *private_key, - X509_STORE *client_ca_cert_store) { - - std::lock_guard guard(ctx_mutex_); - - SSL_CTX_use_certificate(ctx_, cert); - SSL_CTX_use_PrivateKey(ctx_, private_key); - - if (client_ca_cert_store != nullptr) { - SSL_CTX_set_cert_store(ctx_, client_ca_cert_store); - } -} - -inline bool SSLServer::process_and_close_socket(socket_t sock) { - auto ssl = detail::ssl_new( - sock, ctx_, ctx_mutex_, - [&](SSL *ssl2) { - return detail::ssl_connect_or_accept_nonblocking( - sock, ssl2, SSL_accept, read_timeout_sec_, read_timeout_usec_, - &last_ssl_error_); - }, - [](SSL * /*ssl2*/) { return true; }); - - auto ret = false; - if (ssl) { - std::string remote_addr; - int remote_port = 0; - detail::get_remote_ip_and_port(sock, remote_addr, remote_port); - - std::string local_addr; - int local_port = 0; - detail::get_local_ip_and_port(sock, local_addr, local_port); - - ret = detail::process_server_socket_ssl( - svr_sock_, ssl, sock, keep_alive_max_count_, keep_alive_timeout_sec_, - read_timeout_sec_, read_timeout_usec_, write_timeout_sec_, - write_timeout_usec_, - [&](Stream &strm, bool close_connection, bool &connection_closed) { - return process_request(strm, remote_addr, remote_port, local_addr, - local_port, close_connection, - connection_closed, - [&](Request &req) { req.ssl = ssl; }); - }); - - // Shutdown gracefully if the result seemed successful, non-gracefully if - // the connection appeared to be closed. - const bool shutdown_gracefully = ret; - detail::ssl_delete(ctx_mutex_, ssl, sock, shutdown_gracefully); - } - - detail::shutdown_socket(sock); - detail::close_socket(sock); - return ret; -} - -inline STACK_OF(X509_NAME) * SSLServer::extract_ca_names_from_x509_store( - X509_STORE *store) { - if (!store) { return nullptr; } - - auto ca_list = sk_X509_NAME_new_null(); - if (!ca_list) { return nullptr; } - - // Get all objects from the store - auto objs = X509_STORE_get0_objects(store); - if (!objs) { - sk_X509_NAME_free(ca_list); - return nullptr; - } - - // Iterate through objects and extract certificate subject names - for (int i = 0; i < sk_X509_OBJECT_num(objs); i++) { - auto obj = sk_X509_OBJECT_value(objs, i); - if (X509_OBJECT_get_type(obj) == X509_LU_X509) { - auto cert = X509_OBJECT_get0_X509(obj); - if (cert) { - auto subject = X509_get_subject_name(cert); - if (subject) { - auto name_dup = X509_NAME_dup(subject); - if (name_dup) { sk_X509_NAME_push(ca_list, name_dup); } - } - } - } - } - - // If no names were extracted, free the list and return nullptr - if (sk_X509_NAME_num(ca_list) == 0) { - sk_X509_NAME_free(ca_list); - return nullptr; - } - - return ca_list; -} - -// SSL HTTP client implementation -inline SSLClient::SSLClient(const std::string &host) - : SSLClient(host, 443, std::string(), std::string()) {} - -inline SSLClient::SSLClient(const std::string &host, int port) - : SSLClient(host, port, std::string(), std::string()) {} - -inline SSLClient::SSLClient(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path, - const std::string &private_key_password) - : ClientImpl(host, port, client_cert_path, client_key_path) { - ctx_ = SSL_CTX_new(TLS_client_method()); - - SSL_CTX_set_min_proto_version(ctx_, TLS1_2_VERSION); - - detail::split(&host_[0], &host_[host_.size()], '.', - [&](const char *b, const char *e) { - host_components_.emplace_back(b, e); - }); - - if (!client_cert_path.empty() && !client_key_path.empty()) { - if (!private_key_password.empty()) { - SSL_CTX_set_default_passwd_cb_userdata( - ctx_, reinterpret_cast( - const_cast(private_key_password.c_str()))); - } - - if (SSL_CTX_use_certificate_file(ctx_, client_cert_path.c_str(), - SSL_FILETYPE_PEM) != 1 || - SSL_CTX_use_PrivateKey_file(ctx_, client_key_path.c_str(), - SSL_FILETYPE_PEM) != 1) { - last_openssl_error_ = ERR_get_error(); - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } -} - -inline SSLClient::SSLClient(const std::string &host, int port, - X509 *client_cert, EVP_PKEY *client_key, - const std::string &private_key_password) - : ClientImpl(host, port) { - ctx_ = SSL_CTX_new(TLS_client_method()); - - detail::split(&host_[0], &host_[host_.size()], '.', - [&](const char *b, const char *e) { - host_components_.emplace_back(b, e); - }); - - if (client_cert != nullptr && client_key != nullptr) { - if (!private_key_password.empty()) { - SSL_CTX_set_default_passwd_cb_userdata( - ctx_, reinterpret_cast( - const_cast(private_key_password.c_str()))); - } - - if (SSL_CTX_use_certificate(ctx_, client_cert) != 1 || - SSL_CTX_use_PrivateKey(ctx_, client_key) != 1) { - last_openssl_error_ = ERR_get_error(); - SSL_CTX_free(ctx_); - ctx_ = nullptr; - } - } -} - -inline SSLClient::~SSLClient() { - if (ctx_) { SSL_CTX_free(ctx_); } - // Make sure to shut down SSL since shutdown_ssl will resolve to the - // base function rather than the derived function once we get to the - // base class destructor, and won't free the SSL (causing a leak). - shutdown_ssl_impl(socket_, true); -} - -inline bool SSLClient::is_valid() const { return ctx_; } - -inline void SSLClient::set_ca_cert_store(X509_STORE *ca_cert_store) { - if (ca_cert_store) { - if (ctx_) { - if (SSL_CTX_get_cert_store(ctx_) != ca_cert_store) { - // Free memory allocated for old cert and use new store - // `ca_cert_store` - SSL_CTX_set_cert_store(ctx_, ca_cert_store); - ca_cert_store_ = ca_cert_store; - } - } else { - X509_STORE_free(ca_cert_store); - } - } -} - -inline void SSLClient::load_ca_cert_store(const char *ca_cert, - std::size_t size) { - set_ca_cert_store(ClientImpl::create_ca_cert_store(ca_cert, size)); -} - -inline long SSLClient::get_openssl_verify_result() const { - return verify_result_; -} - -inline SSL_CTX *SSLClient::ssl_context() const { return ctx_; } - -inline bool SSLClient::create_and_connect_socket(Socket &socket, Error &error) { - if (!is_valid()) { - error = Error::SSLConnection; - return false; - } - return ClientImpl::create_and_connect_socket(socket, error); -} - -// Assumes that socket_mutex_ is locked and that there are no requests in -// flight -inline bool SSLClient::connect_with_proxy( - Socket &socket, - std::chrono::time_point start_time, - Response &res, bool &success, Error &error) { - success = true; - Response proxy_res; - if (!detail::process_client_socket( - socket.sock, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, max_timeout_msec_, - start_time, [&](Stream &strm) { - Request req2; - req2.method = "CONNECT"; - req2.path = host_and_port_; - if (max_timeout_msec_ > 0) { - req2.start_time_ = std::chrono::steady_clock::now(); - } - return process_request(strm, req2, proxy_res, false, error); - })) { - // Thread-safe to close everything because we are assuming there are no - // requests in flight - shutdown_ssl(socket, true); - shutdown_socket(socket); - close_socket(socket); - success = false; - return false; - } - - if (proxy_res.status == StatusCode::ProxyAuthenticationRequired_407) { - if (!proxy_digest_auth_username_.empty() && - !proxy_digest_auth_password_.empty()) { - std::map auth; - if (detail::parse_www_authenticate(proxy_res, auth, true)) { - // Close the current socket and create a new one for the authenticated - // request - shutdown_ssl(socket, true); - shutdown_socket(socket); - close_socket(socket); - - // Create a new socket for the authenticated CONNECT request - if (!create_and_connect_socket(socket, error)) { - success = false; - output_error_log(error, nullptr); - return false; - } - - proxy_res = Response(); - if (!detail::process_client_socket( - socket.sock, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, max_timeout_msec_, - start_time, [&](Stream &strm) { - Request req3; - req3.method = "CONNECT"; - req3.path = host_and_port_; - req3.headers.insert(detail::make_digest_authentication_header( - req3, auth, 1, detail::random_string(10), - proxy_digest_auth_username_, proxy_digest_auth_password_, - true)); - if (max_timeout_msec_ > 0) { - req3.start_time_ = std::chrono::steady_clock::now(); - } - return process_request(strm, req3, proxy_res, false, error); - })) { - // Thread-safe to close everything because we are assuming there are - // no requests in flight - shutdown_ssl(socket, true); - shutdown_socket(socket); - close_socket(socket); - success = false; - return false; - } - } - } - } - - // If status code is not 200, proxy request is failed. - // Set error to ProxyConnection and return proxy response - // as the response of the request - if (proxy_res.status != StatusCode::OK_200) { - error = Error::ProxyConnection; - output_error_log(error, nullptr); - res = std::move(proxy_res); - // Thread-safe to close everything because we are assuming there are - // no requests in flight - shutdown_ssl(socket, true); - shutdown_socket(socket); - close_socket(socket); - return false; - } - - return true; -} - -inline bool SSLClient::load_certs() { - auto ret = true; - - std::call_once(initialize_cert_, [&]() { - std::lock_guard guard(ctx_mutex_); - if (!ca_cert_file_path_.empty()) { - if (!SSL_CTX_load_verify_locations(ctx_, ca_cert_file_path_.c_str(), - nullptr)) { - last_openssl_error_ = ERR_get_error(); - ret = false; - } - } else if (!ca_cert_dir_path_.empty()) { - if (!SSL_CTX_load_verify_locations(ctx_, nullptr, - ca_cert_dir_path_.c_str())) { - last_openssl_error_ = ERR_get_error(); - ret = false; - } - } else { - auto loaded = false; -#ifdef _WIN32 - loaded = - detail::load_system_certs_on_windows(SSL_CTX_get_cert_store(ctx_)); -#elif defined(CPPHTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN) && TARGET_OS_MAC - loaded = detail::load_system_certs_on_macos(SSL_CTX_get_cert_store(ctx_)); -#endif // _WIN32 - if (!loaded) { SSL_CTX_set_default_verify_paths(ctx_); } - } - }); - - return ret; -} - -inline bool SSLClient::initialize_ssl(Socket &socket, Error &error) { - auto ssl = detail::ssl_new( - socket.sock, ctx_, ctx_mutex_, - [&](SSL *ssl2) { - if (server_certificate_verification_) { - if (!load_certs()) { - error = Error::SSLLoadingCerts; - output_error_log(error, nullptr); - return false; - } - SSL_set_verify(ssl2, SSL_VERIFY_NONE, nullptr); - } - - if (!detail::ssl_connect_or_accept_nonblocking( - socket.sock, ssl2, SSL_connect, connection_timeout_sec_, - connection_timeout_usec_, &last_ssl_error_)) { - error = Error::SSLConnection; - output_error_log(error, nullptr); - return false; - } - - if (server_certificate_verification_) { - auto verification_status = SSLVerifierResponse::NoDecisionMade; - - if (server_certificate_verifier_) { - verification_status = server_certificate_verifier_(ssl2); - } - - if (verification_status == SSLVerifierResponse::CertificateRejected) { - last_openssl_error_ = ERR_get_error(); - error = Error::SSLServerVerification; - output_error_log(error, nullptr); - return false; - } - - if (verification_status == SSLVerifierResponse::NoDecisionMade) { - verify_result_ = SSL_get_verify_result(ssl2); - - if (verify_result_ != X509_V_OK) { - last_openssl_error_ = static_cast(verify_result_); - error = Error::SSLServerVerification; - output_error_log(error, nullptr); - return false; - } - - auto server_cert = SSL_get1_peer_certificate(ssl2); - auto se = detail::scope_exit([&] { X509_free(server_cert); }); - - if (server_cert == nullptr) { - last_openssl_error_ = ERR_get_error(); - error = Error::SSLServerVerification; - output_error_log(error, nullptr); - return false; - } - - if (server_hostname_verification_) { - if (!verify_host(server_cert)) { - last_openssl_error_ = X509_V_ERR_HOSTNAME_MISMATCH; - error = Error::SSLServerHostnameVerification; - output_error_log(error, nullptr); - return false; - } - } - } - } - - return true; - }, - [&](SSL *ssl2) { - // Set SNI only if host is not IP address - if (!detail::is_ip_address(host_)) { -#if defined(OPENSSL_IS_BORINGSSL) - SSL_set_tlsext_host_name(ssl2, host_.c_str()); -#else - // NOTE: Direct call instead of using the OpenSSL macro to suppress - // -Wold-style-cast warning - SSL_ctrl(ssl2, SSL_CTRL_SET_TLSEXT_HOSTNAME, - TLSEXT_NAMETYPE_host_name, - static_cast(const_cast(host_.c_str()))); -#endif - } - return true; - }); - - if (ssl) { - socket.ssl = ssl; - return true; - } - - if (ctx_ == nullptr) { - error = Error::SSLConnection; - last_openssl_error_ = ERR_get_error(); - } - - shutdown_socket(socket); - close_socket(socket); - return false; -} - -inline void SSLClient::shutdown_ssl(Socket &socket, bool shutdown_gracefully) { - shutdown_ssl_impl(socket, shutdown_gracefully); -} - -inline void SSLClient::shutdown_ssl_impl(Socket &socket, - bool shutdown_gracefully) { - if (socket.sock == INVALID_SOCKET) { - assert(socket.ssl == nullptr); - return; - } - if (socket.ssl) { - detail::ssl_delete(ctx_mutex_, socket.ssl, socket.sock, - shutdown_gracefully); - socket.ssl = nullptr; - } - assert(socket.ssl == nullptr); -} - -inline bool SSLClient::process_socket( - const Socket &socket, - std::chrono::time_point start_time, - std::function callback) { - assert(socket.ssl); - return detail::process_client_socket_ssl( - socket.ssl, socket.sock, read_timeout_sec_, read_timeout_usec_, - write_timeout_sec_, write_timeout_usec_, max_timeout_msec_, start_time, - std::move(callback)); -} - -inline bool SSLClient::is_ssl() const { return true; } - -inline bool SSLClient::verify_host(X509 *server_cert) const { - /* Quote from RFC2818 section 3.1 "Server Identity" - - If a subjectAltName extension of type dNSName is present, that MUST - be used as the identity. Otherwise, the (most specific) Common Name - field in the Subject field of the certificate MUST be used. Although - the use of the Common Name is existing practice, it is deprecated and - Certification Authorities are encouraged to use the dNSName instead. - - Matching is performed using the matching rules specified by - [RFC2459]. If more than one identity of a given type is present in - the certificate (e.g., more than one dNSName name, a match in any one - of the set is considered acceptable.) Names may contain the wildcard - character * which is considered to match any single domain name - component or component fragment. E.g., *.a.com matches foo.a.com but - not bar.foo.a.com. f*.com matches foo.com but not bar.com. - - In some cases, the URI is specified as an IP address rather than a - hostname. In this case, the iPAddress subjectAltName must be present - in the certificate and must exactly match the IP in the URI. - - */ - return verify_host_with_subject_alt_name(server_cert) || - verify_host_with_common_name(server_cert); -} - -inline bool -SSLClient::verify_host_with_subject_alt_name(X509 *server_cert) const { - auto ret = false; - - auto type = GEN_DNS; - - struct in6_addr addr6 = {}; - struct in_addr addr = {}; - size_t addr_len = 0; - -#ifndef __MINGW32__ - if (inet_pton(AF_INET6, host_.c_str(), &addr6)) { - type = GEN_IPADD; - addr_len = sizeof(struct in6_addr); - } else if (inet_pton(AF_INET, host_.c_str(), &addr)) { - type = GEN_IPADD; - addr_len = sizeof(struct in_addr); - } -#endif - - auto alt_names = static_cast( - X509_get_ext_d2i(server_cert, NID_subject_alt_name, nullptr, nullptr)); - - if (alt_names) { - auto dsn_matched = false; - auto ip_matched = false; - - auto count = sk_GENERAL_NAME_num(alt_names); - - for (decltype(count) i = 0; i < count && !dsn_matched; i++) { - auto val = sk_GENERAL_NAME_value(alt_names, i); - if (!val || val->type != type) { continue; } - - auto name = - reinterpret_cast(ASN1_STRING_get0_data(val->d.ia5)); - if (name == nullptr) { continue; } - - auto name_len = static_cast(ASN1_STRING_length(val->d.ia5)); - - switch (type) { - case GEN_DNS: dsn_matched = check_host_name(name, name_len); break; - - case GEN_IPADD: - if (!memcmp(&addr6, name, addr_len) || !memcmp(&addr, name, addr_len)) { - ip_matched = true; - } - break; - } - } - - if (dsn_matched || ip_matched) { ret = true; } - } - - GENERAL_NAMES_free(const_cast( - reinterpret_cast(alt_names))); - return ret; -} - -inline bool SSLClient::verify_host_with_common_name(X509 *server_cert) const { - const auto subject_name = X509_get_subject_name(server_cert); - - if (subject_name != nullptr) { - char name[BUFSIZ]; - auto name_len = X509_NAME_get_text_by_NID(subject_name, NID_commonName, - name, sizeof(name)); - - if (name_len != -1) { - return check_host_name(name, static_cast(name_len)); - } - } - - return false; -} - -inline bool SSLClient::check_host_name(const char *pattern, - size_t pattern_len) const { - if (host_.size() == pattern_len && host_ == pattern) { return true; } - - // Wildcard match - // https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+bug/376484 - std::vector pattern_components; - detail::split(&pattern[0], &pattern[pattern_len], '.', - [&](const char *b, const char *e) { - pattern_components.emplace_back(b, e); - }); - - if (host_components_.size() != pattern_components.size()) { return false; } - - auto itr = pattern_components.begin(); - for (const auto &h : host_components_) { - auto &p = *itr; - if (p != h && p != "*") { - auto partial_match = (p.size() > 0 && p[p.size() - 1] == '*' && - !p.compare(0, p.size() - 1, h)); - if (!partial_match) { return false; } - } - ++itr; - } - - return true; -} -#endif - -// Universal client implementation -inline Client::Client(const std::string &scheme_host_port) - : Client(scheme_host_port, std::string(), std::string()) {} - -inline Client::Client(const std::string &scheme_host_port, - const std::string &client_cert_path, - const std::string &client_key_path) { - const static std::regex re( - R"((?:([a-z]+):\/\/)?(?:\[([a-fA-F\d:]+)\]|([^:/?#]+))(?::(\d+))?)"); - - std::smatch m; - if (std::regex_match(scheme_host_port, m, re)) { - auto scheme = m[1].str(); - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - if (!scheme.empty() && (scheme != "http" && scheme != "https")) { -#else - if (!scheme.empty() && scheme != "http") { -#endif -#ifndef CPPHTTPLIB_NO_EXCEPTIONS - std::string msg = "'" + scheme + "' scheme is not supported."; - throw std::invalid_argument(msg); -#endif - return; - } - - auto is_ssl = scheme == "https"; - - auto host = m[2].str(); - if (host.empty()) { host = m[3].str(); } - - auto port_str = m[4].str(); - auto port = !port_str.empty() ? std::stoi(port_str) : (is_ssl ? 443 : 80); - - if (is_ssl) { -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT - cli_ = detail::make_unique(host, port, client_cert_path, - client_key_path); - is_ssl_ = is_ssl; -#endif - } else { - cli_ = detail::make_unique(host, port, client_cert_path, - client_key_path); - } - } else { - // NOTE: Update TEST(UniversalClientImplTest, Ipv6LiteralAddress) - // if port param below changes. - cli_ = detail::make_unique(scheme_host_port, 80, - client_cert_path, client_key_path); - } -} // namespace detail - -inline Client::Client(const std::string &host, int port) - : cli_(detail::make_unique(host, port)) {} - -inline Client::Client(const std::string &host, int port, - const std::string &client_cert_path, - const std::string &client_key_path) - : cli_(detail::make_unique(host, port, client_cert_path, - client_key_path)) {} - -inline Client::~Client() = default; - -inline bool Client::is_valid() const { - return cli_ != nullptr && cli_->is_valid(); -} - -inline Result Client::Get(const std::string &path, DownloadProgress progress) { - return cli_->Get(path, std::move(progress)); -} -inline Result Client::Get(const std::string &path, const Headers &headers, - DownloadProgress progress) { - return cli_->Get(path, headers, std::move(progress)); -} -inline Result Client::Get(const std::string &path, - ContentReceiver content_receiver, - DownloadProgress progress) { - return cli_->Get(path, std::move(content_receiver), std::move(progress)); -} -inline Result Client::Get(const std::string &path, const Headers &headers, - ContentReceiver content_receiver, - DownloadProgress progress) { - return cli_->Get(path, headers, std::move(content_receiver), - std::move(progress)); -} -inline Result Client::Get(const std::string &path, - ResponseHandler response_handler, - ContentReceiver content_receiver, - DownloadProgress progress) { - return cli_->Get(path, std::move(response_handler), - std::move(content_receiver), std::move(progress)); -} -inline Result Client::Get(const std::string &path, const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, - DownloadProgress progress) { - return cli_->Get(path, headers, std::move(response_handler), - std::move(content_receiver), std::move(progress)); -} -inline Result Client::Get(const std::string &path, const Params ¶ms, - const Headers &headers, DownloadProgress progress) { - return cli_->Get(path, params, headers, std::move(progress)); -} -inline Result Client::Get(const std::string &path, const Params ¶ms, - const Headers &headers, - ContentReceiver content_receiver, - DownloadProgress progress) { - return cli_->Get(path, params, headers, std::move(content_receiver), - std::move(progress)); -} -inline Result Client::Get(const std::string &path, const Params ¶ms, - const Headers &headers, - ResponseHandler response_handler, - ContentReceiver content_receiver, - DownloadProgress progress) { - return cli_->Get(path, params, headers, std::move(response_handler), - std::move(content_receiver), std::move(progress)); -} - -inline Result Client::Head(const std::string &path) { return cli_->Head(path); } -inline Result Client::Head(const std::string &path, const Headers &headers) { - return cli_->Head(path, headers); -} - -inline Result Client::Post(const std::string &path) { return cli_->Post(path); } -inline Result Client::Post(const std::string &path, const Headers &headers) { - return cli_->Post(path, headers); -} -inline Result Client::Post(const std::string &path, const char *body, - size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return cli_->Post(path, body, content_length, content_type, progress); -} -inline Result Client::Post(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return cli_->Post(path, headers, body, content_length, content_type, - progress); -} -inline Result Client::Post(const std::string &path, const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return cli_->Post(path, body, content_type, progress); -} -inline Result Client::Post(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return cli_->Post(path, headers, body, content_type, progress); -} -inline Result Client::Post(const std::string &path, size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Post(path, content_length, std::move(content_provider), - content_type, progress); -} -inline Result Client::Post(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Post(path, std::move(content_provider), content_type, progress); -} -inline Result Client::Post(const std::string &path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Post(path, headers, content_length, std::move(content_provider), - content_type, progress); -} -inline Result Client::Post(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Post(path, headers, std::move(content_provider), content_type, - progress); -} -inline Result Client::Post(const std::string &path, const Params ¶ms) { - return cli_->Post(path, params); -} -inline Result Client::Post(const std::string &path, const Headers &headers, - const Params ¶ms) { - return cli_->Post(path, headers, params); -} -inline Result Client::Post(const std::string &path, - const UploadFormDataItems &items, - UploadProgress progress) { - return cli_->Post(path, items, progress); -} -inline Result Client::Post(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - UploadProgress progress) { - return cli_->Post(path, headers, items, progress); -} -inline Result Client::Post(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const std::string &boundary, - UploadProgress progress) { - return cli_->Post(path, headers, items, boundary, progress); -} -inline Result Client::Post(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const FormDataProviderItems &provider_items, - UploadProgress progress) { - return cli_->Post(path, headers, items, provider_items, progress); -} -inline Result Client::Post(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - ContentReceiver content_receiver, - DownloadProgress progress) { - return cli_->Post(path, headers, body, content_type, content_receiver, - progress); -} - -inline Result Client::Put(const std::string &path) { return cli_->Put(path); } -inline Result Client::Put(const std::string &path, const Headers &headers) { - return cli_->Put(path, headers); -} -inline Result Client::Put(const std::string &path, const char *body, - size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return cli_->Put(path, body, content_length, content_type, progress); -} -inline Result Client::Put(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return cli_->Put(path, headers, body, content_length, content_type, progress); -} -inline Result Client::Put(const std::string &path, const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return cli_->Put(path, body, content_type, progress); -} -inline Result Client::Put(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return cli_->Put(path, headers, body, content_type, progress); -} -inline Result Client::Put(const std::string &path, size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Put(path, content_length, std::move(content_provider), - content_type, progress); -} -inline Result Client::Put(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Put(path, std::move(content_provider), content_type, progress); -} -inline Result Client::Put(const std::string &path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Put(path, headers, content_length, std::move(content_provider), - content_type, progress); -} -inline Result Client::Put(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Put(path, headers, std::move(content_provider), content_type, - progress); -} -inline Result Client::Put(const std::string &path, const Params ¶ms) { - return cli_->Put(path, params); -} -inline Result Client::Put(const std::string &path, const Headers &headers, - const Params ¶ms) { - return cli_->Put(path, headers, params); -} -inline Result Client::Put(const std::string &path, - const UploadFormDataItems &items, - UploadProgress progress) { - return cli_->Put(path, items, progress); -} -inline Result Client::Put(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - UploadProgress progress) { - return cli_->Put(path, headers, items, progress); -} -inline Result Client::Put(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const std::string &boundary, - UploadProgress progress) { - return cli_->Put(path, headers, items, boundary, progress); -} -inline Result Client::Put(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const FormDataProviderItems &provider_items, - UploadProgress progress) { - return cli_->Put(path, headers, items, provider_items, progress); -} -inline Result Client::Put(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - ContentReceiver content_receiver, - DownloadProgress progress) { - return cli_->Put(path, headers, body, content_type, content_receiver, - progress); -} - -inline Result Client::Patch(const std::string &path) { - return cli_->Patch(path); -} -inline Result Client::Patch(const std::string &path, const Headers &headers) { - return cli_->Patch(path, headers); -} -inline Result Client::Patch(const std::string &path, const char *body, - size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return cli_->Patch(path, body, content_length, content_type, progress); -} -inline Result Client::Patch(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type, - UploadProgress progress) { - return cli_->Patch(path, headers, body, content_length, content_type, - progress); -} -inline Result Client::Patch(const std::string &path, const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return cli_->Patch(path, body, content_type, progress); -} -inline Result Client::Patch(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - UploadProgress progress) { - return cli_->Patch(path, headers, body, content_type, progress); -} -inline Result Client::Patch(const std::string &path, size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Patch(path, content_length, std::move(content_provider), - content_type, progress); -} -inline Result Client::Patch(const std::string &path, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Patch(path, std::move(content_provider), content_type, progress); -} -inline Result Client::Patch(const std::string &path, const Headers &headers, - size_t content_length, - ContentProvider content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Patch(path, headers, content_length, std::move(content_provider), - content_type, progress); -} -inline Result Client::Patch(const std::string &path, const Headers &headers, - ContentProviderWithoutLength content_provider, - const std::string &content_type, - UploadProgress progress) { - return cli_->Patch(path, headers, std::move(content_provider), content_type, - progress); -} -inline Result Client::Patch(const std::string &path, const Params ¶ms) { - return cli_->Patch(path, params); -} -inline Result Client::Patch(const std::string &path, const Headers &headers, - const Params ¶ms) { - return cli_->Patch(path, headers, params); -} -inline Result Client::Patch(const std::string &path, - const UploadFormDataItems &items, - UploadProgress progress) { - return cli_->Patch(path, items, progress); -} -inline Result Client::Patch(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - UploadProgress progress) { - return cli_->Patch(path, headers, items, progress); -} -inline Result Client::Patch(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const std::string &boundary, - UploadProgress progress) { - return cli_->Patch(path, headers, items, boundary, progress); -} -inline Result Client::Patch(const std::string &path, const Headers &headers, - const UploadFormDataItems &items, - const FormDataProviderItems &provider_items, - UploadProgress progress) { - return cli_->Patch(path, headers, items, provider_items, progress); -} -inline Result Client::Patch(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - ContentReceiver content_receiver, - DownloadProgress progress) { - return cli_->Patch(path, headers, body, content_type, content_receiver, - progress); -} - -inline Result Client::Delete(const std::string &path, - DownloadProgress progress) { - return cli_->Delete(path, progress); -} -inline Result Client::Delete(const std::string &path, const Headers &headers, - DownloadProgress progress) { - return cli_->Delete(path, headers, progress); -} -inline Result Client::Delete(const std::string &path, const char *body, - size_t content_length, - const std::string &content_type, - DownloadProgress progress) { - return cli_->Delete(path, body, content_length, content_type, progress); -} -inline Result Client::Delete(const std::string &path, const Headers &headers, - const char *body, size_t content_length, - const std::string &content_type, - DownloadProgress progress) { - return cli_->Delete(path, headers, body, content_length, content_type, - progress); -} -inline Result Client::Delete(const std::string &path, const std::string &body, - const std::string &content_type, - DownloadProgress progress) { - return cli_->Delete(path, body, content_type, progress); -} -inline Result Client::Delete(const std::string &path, const Headers &headers, - const std::string &body, - const std::string &content_type, - DownloadProgress progress) { - return cli_->Delete(path, headers, body, content_type, progress); -} -inline Result Client::Delete(const std::string &path, const Params ¶ms, - DownloadProgress progress) { - return cli_->Delete(path, params, progress); -} -inline Result Client::Delete(const std::string &path, const Headers &headers, - const Params ¶ms, DownloadProgress progress) { - return cli_->Delete(path, headers, params, progress); -} - -inline Result Client::Options(const std::string &path) { - return cli_->Options(path); -} -inline Result Client::Options(const std::string &path, const Headers &headers) { - return cli_->Options(path, headers); -} - -inline bool Client::send(Request &req, Response &res, Error &error) { - return cli_->send(req, res, error); -} - -inline Result Client::send(const Request &req) { return cli_->send(req); } - -inline void Client::stop() { cli_->stop(); } - -inline std::string Client::host() const { return cli_->host(); } - -inline int Client::port() const { return cli_->port(); } - -inline size_t Client::is_socket_open() const { return cli_->is_socket_open(); } - -inline socket_t Client::socket() const { return cli_->socket(); } - -inline void -Client::set_hostname_addr_map(std::map addr_map) { - cli_->set_hostname_addr_map(std::move(addr_map)); -} - -inline void Client::set_default_headers(Headers headers) { - cli_->set_default_headers(std::move(headers)); -} - -inline void Client::set_header_writer( - std::function const &writer) { - cli_->set_header_writer(writer); -} - -inline void Client::set_address_family(int family) { - cli_->set_address_family(family); -} - -inline void Client::set_tcp_nodelay(bool on) { cli_->set_tcp_nodelay(on); } - -inline void Client::set_socket_options(SocketOptions socket_options) { - cli_->set_socket_options(std::move(socket_options)); -} - -inline void Client::set_connection_timeout(time_t sec, time_t usec) { - cli_->set_connection_timeout(sec, usec); -} - -inline void Client::set_read_timeout(time_t sec, time_t usec) { - cli_->set_read_timeout(sec, usec); -} - -inline void Client::set_write_timeout(time_t sec, time_t usec) { - cli_->set_write_timeout(sec, usec); -} - -inline void Client::set_basic_auth(const std::string &username, - const std::string &password) { - cli_->set_basic_auth(username, password); -} -inline void Client::set_bearer_token_auth(const std::string &token) { - cli_->set_bearer_token_auth(token); -} -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_digest_auth(const std::string &username, - const std::string &password) { - cli_->set_digest_auth(username, password); -} -#endif - -inline void Client::set_keep_alive(bool on) { cli_->set_keep_alive(on); } -inline void Client::set_follow_location(bool on) { - cli_->set_follow_location(on); -} - -inline void Client::set_path_encode(bool on) { cli_->set_path_encode(on); } - -[[deprecated("Use set_path_encode instead")]] -inline void Client::set_url_encode(bool on) { - cli_->set_path_encode(on); -} - -inline void Client::set_compress(bool on) { cli_->set_compress(on); } - -inline void Client::set_decompress(bool on) { cli_->set_decompress(on); } - -inline void Client::set_interface(const std::string &intf) { - cli_->set_interface(intf); -} - -inline void Client::set_proxy(const std::string &host, int port) { - cli_->set_proxy(host, port); -} -inline void Client::set_proxy_basic_auth(const std::string &username, - const std::string &password) { - cli_->set_proxy_basic_auth(username, password); -} -inline void Client::set_proxy_bearer_token_auth(const std::string &token) { - cli_->set_proxy_bearer_token_auth(token); -} -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_proxy_digest_auth(const std::string &username, - const std::string &password) { - cli_->set_proxy_digest_auth(username, password); -} -#endif - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::enable_server_certificate_verification(bool enabled) { - cli_->enable_server_certificate_verification(enabled); -} - -inline void Client::enable_server_hostname_verification(bool enabled) { - cli_->enable_server_hostname_verification(enabled); -} - -inline void Client::set_server_certificate_verifier( - std::function verifier) { - cli_->set_server_certificate_verifier(verifier); -} -#endif - -inline void Client::set_logger(Logger logger) { - cli_->set_logger(std::move(logger)); -} - -inline void Client::set_error_logger(ErrorLogger error_logger) { - cli_->set_error_logger(std::move(error_logger)); -} - -#ifdef CPPHTTPLIB_OPENSSL_SUPPORT -inline void Client::set_ca_cert_path(const std::string &ca_cert_file_path, - const std::string &ca_cert_dir_path) { - cli_->set_ca_cert_path(ca_cert_file_path, ca_cert_dir_path); -} - -inline void Client::set_ca_cert_store(X509_STORE *ca_cert_store) { - if (is_ssl_) { - static_cast(*cli_).set_ca_cert_store(ca_cert_store); - } else { - cli_->set_ca_cert_store(ca_cert_store); - } -} - -inline void Client::load_ca_cert_store(const char *ca_cert, std::size_t size) { - set_ca_cert_store(cli_->create_ca_cert_store(ca_cert, size)); -} - -inline long Client::get_openssl_verify_result() const { - if (is_ssl_) { - return static_cast(*cli_).get_openssl_verify_result(); - } - return -1; // NOTE: -1 doesn't match any of X509_V_ERR_??? -} - -inline SSL_CTX *Client::ssl_context() const { - if (is_ssl_) { return static_cast(*cli_).ssl_context(); } - return nullptr; -} -#endif - -// ---------------------------------------------------------------------------- } // namespace httplib From 3fe36c32389ade876ec505f32df08f5121cf597f Mon Sep 17 00:00:00 2001 From: sudhiarm Date: Tue, 11 Nov 2025 15:58:05 +0000 Subject: [PATCH 67/69] ci: add Arm-hosted Graviton4 runner (#17021) * ci: add Arm-hosted Graviton4 runner * ci: add missing dependencies for graviton4 build * ci: enable LFS checkout on graviton4 * ci: move git-lfs install to dependencies in Graviton4 workflow --- .github/workflows/build.yml | 47 +++++++++++++++++++++++++++++++++++++ ci/run.sh | 7 +++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 36084c5507..0112fc323f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1651,3 +1651,50 @@ jobs: run: | GG_BUILD_KLEIDIAI=1 GG_BUILD_EXTRA_TESTS_0=1 bash ./ci/run.sh ./tmp/results ./tmp/mnt + ggml-ci-arm64-graviton4-kleidiai: + runs-on: ah-ubuntu_22_04-c8g_8x + + steps: + - name: Clone + id: checkout + uses: actions/checkout@v4 + + - name: Dependencies + id: depends + run: | + set -euxo pipefail + sudo apt-get update + sudo DEBIAN_FRONTEND=noninteractive NEEDRESTART_MODE=a \ + apt-get install -y \ + build-essential \ + libcurl4-openssl-dev \ + python3-venv \ + gpg \ + wget \ + time \ + git-lfs + + git lfs install + + # install the latest cmake + sudo install -d /usr/share/keyrings + wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc \ + | gpg --dearmor \ + | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null + echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ jammy main' \ + | sudo tee /etc/apt/sources.list.d/kitware.list + sudo apt-get update + sudo apt-get install -y cmake + + - name: ccache + uses: ggml-org/ccache-action@v1.2.16 + with: + key: ggml-ci-arm64-graviton4-kleidiai + evict-old-files: 1d + + - name: Test + id: ggml-ci + run: | + GG_BUILD_KLEIDIAI=1 \ + GG_BUILD_EXTRA_TESTS_0=1 \ + bash ./ci/run.sh ./tmp/results ./tmp/mnt diff --git a/ci/run.sh b/ci/run.sh index 1a4806976a..3fec8e9110 100755 --- a/ci/run.sh +++ b/ci/run.sh @@ -121,7 +121,12 @@ fi if [ -n "${GG_BUILD_KLEIDIAI}" ]; then echo ">>===== Enabling KleidiAI support" - CANDIDATES=("armv9-a+dotprod+i8mm" "armv8.6-a+dotprod+i8mm" "armv8.2-a+dotprod") + CANDIDATES=( + "armv9-a+dotprod+i8mm+sve2" + "armv9-a+dotprod+i8mm" + "armv8.6-a+dotprod+i8mm" + "armv8.2-a+dotprod" + ) CPU="" for cpu in "${CANDIDATES[@]}"; do From 7d019cff744b73084b15ca81ba9916f3efab1223 Mon Sep 17 00:00:00 2001 From: Eve <139727413+netrunnereve@users.noreply.github.com> Date: Tue, 11 Nov 2025 18:53:30 +0000 Subject: [PATCH 68/69] disable rms norm mul rope for chips with no fp16 rte (#17134) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index e4b7e1ea9e..c6503f0326 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -12670,6 +12670,12 @@ static bool ggml_vk_can_fuse_rms_norm_mul_rope(ggml_backend_vk_context * ctx, co return false; } + // conditions for pipeline creation + if (!(ctx->device->float_controls_rte_fp16 && + sizeof(vk_op_rms_norm_mul_rope_push_constants) <= ctx->device->properties.limits.maxPushConstantsSize)) { + return false; + } + return true; } From c273d7537503e47f7be8c293b767ebad1adbc5d0 Mon Sep 17 00:00:00 2001 From: Max Krasnyansky Date: Tue, 11 Nov 2025 15:25:04 -0800 Subject: [PATCH 69/69] hexagon: various Op fixes (#17135) * hexagon: explicitly check for ops with zero nrows llm_graph_context::build_inp_out_ids() can generate tensors with zero nrows. Somehow other backends seems to handle this without obvious explicit checks. In the hexagon case we need to check explicitly and skip them. * hexagon: introduce fastdiv, fix test-backend-ops for ADD/SUB/MUL Co-authored-by: chraac * hexagon: use fastdiv in ADD_ID * hexagon: use ggml_op_is_empty and ggml_is_empty to check for NOPs --------- Co-authored-by: chraac --- ggml/src/ggml-hexagon/ggml-hexagon.cpp | 37 +++++-------- ggml/src/ggml-hexagon/htp/binary-ops.c | 74 ++++++++++++++++---------- ggml/src/ggml-hexagon/htp/htp-msg.h | 8 +-- ggml/src/ggml-hexagon/htp/htp-ops.h | 11 ++++ ggml/src/ggml-hexagon/htp/ops-utils.h | 33 ++++++++++++ 5 files changed, 105 insertions(+), 58 deletions(-) diff --git a/ggml/src/ggml-hexagon/ggml-hexagon.cpp b/ggml/src/ggml-hexagon/ggml-hexagon.cpp index 7064b7486f..cabd301ad3 100644 --- a/ggml/src/ggml-hexagon/ggml-hexagon.cpp +++ b/ggml/src/ggml-hexagon/ggml-hexagon.cpp @@ -3156,26 +3156,17 @@ static inline bool op_reuse_src1(const ggml_tensor * op1, const ggml_tensor * op return (op0 && op0->src[1] == op1->src[1]); } +static inline bool is_compute_op(ggml_tensor *node) +{ + return !(ggml_op_is_empty(node->op) || ggml_is_empty(node)); +} + // scan the graph and figure out last compute op index static inline int last_compute_op(ggml_cgraph * graph) { - int last; + int last = 0; for (int i = 0; i < graph->n_nodes; ++i) { - ggml_tensor * node = graph->nodes[i]; - - switch (node->op) { - case GGML_OP_MUL_MAT: - case GGML_OP_MUL_MAT_ID: - case GGML_OP_MUL: - case GGML_OP_ADD: - case GGML_OP_SUB: - case GGML_OP_RMS_NORM: - case GGML_OP_GLU: - case GGML_OP_ADD_ID: - last = i; - break; - - default: - break; + if (is_compute_op(graph->nodes[i])) { + last = i; } } @@ -3194,6 +3185,10 @@ static ggml_status ggml_backend_hexagon_graph_compute(ggml_backend_t backend, gg for (int i = 0; i < graph->n_nodes; ++i) { ggml_tensor * node = graph->nodes[i]; + if (!is_compute_op(node)) { + continue; + } + uint32_t flags = 0; // skip quantizer if src1 is reused @@ -3245,14 +3240,6 @@ static ggml_status ggml_backend_hexagon_graph_compute(ggml_backend_t backend, gg ggml_hexagon_rope(node, flags); break; - // non-compute ops - case GGML_OP_NONE: - case GGML_OP_RESHAPE: - case GGML_OP_VIEW: - case GGML_OP_PERMUTE: - case GGML_OP_TRANSPOSE: - break; - default: GGML_ABORT("\nggml-hex: graph-compute %s is not supported\n", ggml_op_desc(node)); } diff --git a/ggml/src/ggml-hexagon/htp/binary-ops.c b/ggml/src/ggml-hexagon/htp/binary-ops.c index 92c0109d28..8ed7f67d9c 100644 --- a/ggml/src/ggml-hexagon/htp/binary-ops.c +++ b/ggml/src/ggml-hexagon/htp/binary-ops.c @@ -34,6 +34,11 @@ static hvx_elemwise_f32_func func_table_HVX[] = { hvx_mul_f32, hvx_add_f32, static hvx_elemwise_f32_func func_table_HVX_opt[] = { hvx_mul_f32_opt, hvx_add_f32_opt, hvx_sub_f32_opt }; #define htp_binary_preamble \ + const struct htp_tensor * src0 = &octx->src0; \ + const struct htp_tensor * src1 = &octx->src1; \ + const struct htp_tensor * src2 = &octx->src2; \ + struct htp_tensor * dst = &octx->dst; \ + \ const uint32_t ne00 = src0->ne[0]; \ const uint32_t ne01 = src0->ne[1]; \ const uint32_t ne02 = src0->ne[2]; \ @@ -62,16 +67,15 @@ static hvx_elemwise_f32_func func_table_HVX_opt[] = { hvx_mul_f32_opt, hvx_add_f const uint32_t nb0 = dst->nb[0]; \ const uint32_t nb1 = dst->nb[1]; \ const uint32_t nb2 = dst->nb[2]; \ - const uint32_t nb3 = dst->nb[3]; + const uint32_t nb3 = dst->nb[3]; \ + \ + const uint32_t src0_nrows_per_thread = octx->src0_nrows_per_thread; -static void binary_job_f32_per_thread(const struct htp_tensor * src0, - const struct htp_tensor * src1, - struct htp_tensor * dst, - uint8_t * spad_data, - uint32_t nth, - uint32_t ith, - uint32_t src0_nrows_per_thread, - enum htp_op op) { +static void binary_job_f32_per_thread(struct htp_ops_context * octx, + uint8_t * spad_data, + uint32_t nth, + uint32_t ith, + enum htp_op op) { htp_binary_preamble; const size_t src0_row_size = nb01; @@ -107,16 +111,23 @@ static void binary_job_f32_per_thread(const struct htp_tensor * src0, uint8_t * restrict spad_data_th = spad_data + (ith * src0_row_size); - const uint32_t nr0 = ne00 / ne10; - const uint8_t * restrict src0_ptr = (const uint8_t *) src0->data + (src0_start_row * src0_row_size); uint8_t * restrict dst_ptr = (uint8_t *) dst->data + (src0_start_row * dst_row_size); const uint8_t * restrict data_src1 = (const uint8_t *) src1->data; - const uint8_t * restrict src1_ptr = NULL; + + const uint32_t ne02_ne01 = ne02 * ne01; for (uint32_t ir = src0_start_row; ir < src0_end_row; ir++) { - src1_ptr = data_src1 + (ir % src1_nrows) * src1_row_size; + const uint32_t i03 = fastdiv(ir, &octx->src0_div21); + const uint32_t i02 = fastdiv(ir - i03 * ne02_ne01, &octx->src0_div1); + const uint32_t i01 = (ir - i03 * ne02_ne01 - i02 * ne01); + + const uint32_t i13 = fastmodulo(i03, ne13, &octx->src1_div3); + const uint32_t i12 = fastmodulo(i02, ne12, &octx->src1_div2); + const uint32_t i11 = fastmodulo(i01, ne11, &octx->src1_div1); + + const uint8_t * restrict src1_ptr = data_src1 + i13 * nb13 + i12 * nb12 + i11 * src1_row_size; if (ir + 1 < src0_end_row) { htp_l2fetch(src0_ptr + ne00, 1, src0_row_size, src0_row_size); @@ -125,6 +136,7 @@ static void binary_job_f32_per_thread(const struct htp_tensor * src0, } } + const uint32_t nr0 = ne00 / ne10; if (nr0 > 1) { if ((1 == is_aligned) && (nr0 == ne00)) { hvx_bcast_fp32_a(spad_data_th, *(float *) src1_ptr, nr0); @@ -149,22 +161,17 @@ static void binary_job_f32_per_thread(const struct htp_tensor * src0, (unsigned) HAP_perf_qtimer_count_to_us(t2 - t1)); } -static void binary_add_id_job_f32_per_thread(const struct htp_tensor * src0, - const struct htp_tensor * src1, - const struct htp_tensor * src2, - struct htp_tensor * dst, - uint8_t * spad_data, - uint32_t nth, - uint32_t ith, - uint32_t src0_nrows_per_thread, - hvx_elemwise_f32_func func_HVX) { +static void binary_add_id_job_f32_per_thread(struct htp_ops_context * octx, + uint8_t * spad_data, + uint32_t nth, + uint32_t ith, + hvx_elemwise_f32_func func_HVX) { htp_binary_preamble; const size_t src0_row_size = nb01; const size_t src1_row_size = nb11; const size_t dst_row_size = nb1; - const uint32_t ne02_ne01 = ne02 * ne01; const uint32_t src0_nrows = ne01 * ne02 * ne03; // src0 rows const uint32_t src0_start_row = src0_nrows_per_thread * ith; @@ -187,10 +194,11 @@ static void binary_add_id_job_f32_per_thread(const struct htp_tensor * src0, const uint8_t * restrict data_src1 = (const uint8_t *) src1->data; uint8_t * restrict data_dst = (uint8_t *) dst->data; + const uint32_t ne02_ne01 = ne02 * ne01; for (uint32_t ir = src0_start_row; ir < src0_end_row; ir++) { // src0 indices - const uint32_t i03 = ir / ne02_ne01; - const uint32_t i02 = (ir - i03 * ne02_ne01) / ne01; + const uint32_t i03 = fastdiv(ir, &octx->src0_div21); + const uint32_t i02 = fastdiv(ir - i03 * ne02_ne01, &octx->src0_div1); const uint32_t i01 = (ir - i03 * ne02_ne01 - i02 * ne01); // src1 indices @@ -234,13 +242,11 @@ static void binary_job_dispatcher_f32(unsigned int n, unsigned int i, void * dat case HTP_OP_MUL: case HTP_OP_ADD: case HTP_OP_SUB: - binary_job_f32_per_thread(&octx->src0, &octx->src1, &octx->dst, octx->src1_spad.data, n, i, - octx->src0_nrows_per_thread, octx->op); + binary_job_f32_per_thread(octx, octx->src1_spad.data, n, i, octx->op); break; case HTP_OP_ADD_ID: - binary_add_id_job_f32_per_thread(&octx->src0, &octx->src1, &octx->src2, &octx->dst, octx->src0_spad.data, n, - i, octx->src0_nrows_per_thread, hvx_add_f32); + binary_add_id_job_f32_per_thread(octx, octx->src0_spad.data, n, i, hvx_add_f32); break; default: @@ -321,6 +327,16 @@ static int execute_op_binary_f32(struct htp_ops_context * octx) { octx->src0_nrows_per_thread = (src0_nrows + n_jobs - 1) / n_jobs; + octx->src0_div21 = init_fastdiv_values(src0->ne[2] * src0->ne[1]); + octx->src0_div3 = init_fastdiv_values(src0->ne[3]); + octx->src0_div2 = init_fastdiv_values(src0->ne[2]); + octx->src0_div1 = init_fastdiv_values(src0->ne[1]); + + octx->src1_div21 = init_fastdiv_values(src1->ne[2] * src1->ne[1]); + octx->src1_div3 = init_fastdiv_values(src1->ne[3]); + octx->src1_div2 = init_fastdiv_values(src1->ne[2]); + octx->src1_div1 = init_fastdiv_values(src1->ne[1]); + worker_pool_run_func(octx->ctx->worker_pool, binary_op_func, octx, n_jobs); } diff --git a/ggml/src/ggml-hexagon/htp/htp-msg.h b/ggml/src/ggml-hexagon/htp/htp-msg.h index f23d578806..9278f41f4e 100644 --- a/ggml/src/ggml-hexagon/htp/htp-msg.h +++ b/ggml/src/ggml-hexagon/htp/htp-msg.h @@ -119,10 +119,10 @@ static const char * htp_type_name(uint32_t t) { #define HTP_MAX_DIMS 4 struct htp_tensor { - uint32_t data; // Buffer offset in the messages, and data pointer on the NSP - uint32_t type; // Data type - uint32_t ne[HTP_MAX_DIMS]; // Number of elements - uint32_t nb[HTP_MAX_DIMS]; // Stride in bytes (see ggml.h ggml_tensor) + uint32_t data; // Buffer offset in the messages, and data pointer on the NSP + uint32_t type; // Data type + uint32_t ne[HTP_MAX_DIMS]; // Number of elements + uint32_t nb[HTP_MAX_DIMS]; // Stride in bytes (see ggml.h ggml_tensor) }; #define HTP_MAX_OP_PARAMS 64 diff --git a/ggml/src/ggml-hexagon/htp/htp-ops.h b/ggml/src/ggml-hexagon/htp/htp-ops.h index 4572319679..e87657436f 100644 --- a/ggml/src/ggml-hexagon/htp/htp-ops.h +++ b/ggml/src/ggml-hexagon/htp/htp-ops.h @@ -4,6 +4,7 @@ #include "htp-ctx.h" #include "htp-msg.h" #include "worker-pool.h" +#include "ops-utils.h" #include #include @@ -38,6 +39,16 @@ struct htp_ops_context { uint32_t src0_nrows_per_thread; uint32_t src1_nrows_per_thread; + struct fastdiv_values src0_div1; // fastdiv values for ne1 + struct fastdiv_values src0_div2; // fastdiv values for ne2 + struct fastdiv_values src0_div3; // fastdiv values for ne3 + struct fastdiv_values src0_div21; // fastdiv values for ne2 * ne1 + + struct fastdiv_values src1_div1; // fastdiv values for ne1 + struct fastdiv_values src1_div2; // fastdiv values for ne2 + struct fastdiv_values src1_div3; // fastdiv values for ne3 + struct fastdiv_values src1_div21; // fastdiv values for ne2 * ne1 + uint32_t flags; }; diff --git a/ggml/src/ggml-hexagon/htp/ops-utils.h b/ggml/src/ggml-hexagon/htp/ops-utils.h index 302f162521..af9c3305f6 100644 --- a/ggml/src/ggml-hexagon/htp/ops-utils.h +++ b/ggml/src/ggml-hexagon/htp/ops-utils.h @@ -31,6 +31,39 @@ static inline uint32_t htp_round_up(uint32_t n, uint32_t m) { return m * ((n + m - 1) / m); } +// See https://gmplib.org/~tege/divcnst-pldi94.pdf figure 4.1. +// Precompute mp (m' in the paper) and L such that division +// can be computed using a multiply (high 32b of 64b result) +// and a shift: +// +// n/d = (mulhi(n, mp) + n) >> L; +struct fastdiv_values { + uint32_t mp; + uint32_t l; +}; + +static inline struct fastdiv_values init_fastdiv_values(uint32_t d) { + struct fastdiv_values result = { 0, 0 }; + // compute L = ceil(log2(d)); + while (result.l < 32 && ((uint32_t) 1 << result.l) < d) { + ++(result.l); + } + + result.mp = (uint32_t) (((uint64_t) 1 << 32) * (((uint64_t) 1 << result.l) - d) / d + 1); + return result; +} + +static inline uint32_t fastdiv(uint32_t n, const struct fastdiv_values * vals) { + // Compute high 32 bits of n * mp + const uint32_t hi = (uint32_t) (((uint64_t) n * vals->mp) >> 32); // mulhi(n, mp) + // add n, apply bit shift + return (hi + n) >> vals->l; +} + +static inline uint32_t fastmodulo(uint32_t n, uint32_t d, const struct fastdiv_values * vals) { + return n - fastdiv(n, vals) * d; +} + static inline void htp_l2fetch(const void * p, uint32_t height, uint32_t width, uint32_t stride) { const uint64_t control = Q6_P_combine_RR(stride, Q6_R_combine_RlRl(width, height)); asm volatile(" l2fetch(%0,%1) " : : "r"(p), "r"(control));

    -_`DLx43*HGI)6c+)iZsZ~O2(tHv&^(9m!|bh2A#?@q6i~-YY1v!`#;1B z>x&mIRm`WXfBb%V)SY|TPRQ97p%VE{p~zQ-@Zv&su~vgP?KO4gs!V`3Q@;yq_D71f z(Ul0C=xoX&I_$MJA_Xt4bKN zLA!9WGK7)!T3Ib=pO=4wT(Cz&yLi?yI$Vu5Gq_Pje^z(D7>y@C4g`Hy1{TpDg47zy z0ex^lErPh_)&W>PVx_U;UlvuGZAz7!F#k%Ia)=1n+q-|CngRo(5M)4Sb$1|*C2l{C z0q2Y@=|GMFco6~aHxc|q>mu4?)>;@@z0o>i-0jY?Bnpk!6)}4lZ>Urzw+u>qTi>cF zSnjX3e^8~zQmMqYC+QFqQ)|c*nn7fXFmq}QfzM@NZ5!L-sL*OddA169T!P1TJLbU) zd-sk^L91OfS0PhP%58of3bIEphc&&LP1%*LTcO~%xf)wsEx^q?yg$V3E0dL=@c^Yl zEY`KNl}?&g0QHQ&AXdP=Cq5TI+vj!25$P78e^ev58pe$>7(SJ%--6Og2oBR|sp>-H zH%o(6*F4^BZTVLIW^4PZ>%VZnONx(C+|HnHwx|fWuua{FvePoIfFa+sCG-~hUEaP5 zwsYnyK#hLMaj7Cp2*K=;UF|6Fl0<^{!Ql9vP4X@no%aeYWKS`kc0PU}O3W+ohYB{t zf51z7xf6XDKrJi#*UQH7qM2P+32cDstz?sePjDz(d zL{yVi4So&@X!D=LR=eH)>Z|6hTM)Fx_JKm(-nx0SxwZLK6MsXVjF*|WZZz?~FG+f{ zt|jjlnu8tjmrz<%@-|uT)<*N@SIwKZnzv)OoG_Nyym71f^+xm7*G-f~&{#w(f7$v9 z|AvB`i(Od!Cr7Nx@p1l(g3!QyAUrcce$eFu)1HBOqM3oIVNT?J7_QSOY5QwTl|*>n z;5PIy z_x2vRzis9YuAsq&c$-oTWsr`l9!*V@UIeui?hzz0n9d z5jSTM6Z;(;B>n!Y-Z-g?w})1i@^0bJ#3HAsrZ|`f=n)`%8FygG(`yd^LqNR0=zmqJ zRycfi0h!QH{B}u_;*I6_mg<|5v}Z3&x=NfQH7r%6T8s*|rMUR(t;-@W0^@{W!Y^#qQX`bj298RQHa>$|;C5 z=m;yGbmrwVDJFfm4#il&9S~>SDt{HW`#%-7I}zMM?*qjZ$z2Bn*`%Kj%hQFr-RK}h z(<-FhJ&2*;s=`^R8Y18hD>W=9D6{1_sVm3y98=jXv%HFPQSwGw>D6P+&?!K0D5UO~ z1evcu4i!>d*q)|0TfV^4&YK=2e!jT0fm%6PnBX9kA0J^c1Tz`=C2pk2Gk@(?hr|A> z;s~ksB*fAR)PB7G$(XRITtdhI97bTm8-nEtyXEFiVfC2aU;)j-k-Tvpd^(q>|T2nSd(Gz?!5hS2k? zcb0)JkACIuDAH~ia;DQb)Fo-~;sAK^NiD7E=Qt1dVWe9Xjmu)BaJ+7N0HJC^aSXN= z{%tKWfC?aV>i29=7Jp6TfTEd`KmuxH>ZS&zCIU}g^}@Qq2`dh9_h9b>O%v9_x8k)O z9OF`F#d4Hr^@{s$C_H&q-F($?_23sq++_!FriP8$tvqtQBqLDFP<}J8A9U5q`+%#D z$a4sCHIDwe0fSDG`NS-D@w+$bUgV^jy}_u0_If`4?y?-5da%ga39O zo#6CSG4Bgyw0~7#!|IsSSC z_VV0skh-&pr3LFJufL-Cfrc&+rf)acHa;)^L;O=NqS5=_J#fR_$qU}1q-A_*Hys)H zONbmN@}+<~OkSvvg%Pjg5#QOE9p~2jyAP<;M2yy%D>kzRgta;h=PzY> zRs&z_gQFvu)B9d$F@g_XETQ;n)?Q2SH7lotn|~P{>><`zn#+T%pqi8@?I%$mKA`Fllex)uziYls|lRE8q_kYJnF#1 zbw(!mEJ>PEpxYOaqM0T3DJhwmivV5XL3%+x1TZy40xq}8W@-gJ7SkXD#RvLN7L)}XH-+9Yi+#Zj zivo6@y0-l%O-FhG)LS#TL(5eM7Qd-=pv)X@5@mDq)D}4nc+fyf&Pscv z7v2y*1hO(R@&ievQl5=w{*JhI=eV#bEPr_vdMkBka4F-DtT_A)Ym=dxbsfbgMskD* z+A++`P!iu(F~`d(z=OP zycuL3LDRzAPT`)ZQO!@4V>(lq$+%`qt>2j8u{sl-|6wzZUEPA^=sO?7jIYhX;_R+0m?|eq}VTT zb!xnQ^G^O<1?zSLybB+3`k0yL$7hjZHiX^MWmNQ0z}ue=TUwf7~6fvJ|`6 z{Hl>5>!_5UlGXKMJY4zlV%p``k-HC+elj?V&YC1B)HbH(y3T(hj>&BNi|CP$|a zKg%BuY|Ar5s^k|iPNbTHASS&Y(q-b>ZkW_gy{z(&NJVet?yS4P{TsHIUkj2SW(XM0oO)lJL5I z>&ji&Kb(T^w!WUpjp2JA_uc%p!Vaam&Bo2cLqD1{LvMgHYN^pvV`FVAsV4^R57eyZ zZBaYBr6QM>FF>fT3s5cy!hcBeK}A%0=YNBn z1I7ia*a3mnr{30Z|0YCyuwjROgVLy&2sQyQy6@#>JQWmb1PG3pK!2&~UWc)xCF#a+ z|90}IG(WT;~u#%{_2Ck z^v?K%Fw~vnaTl}7j(?J$9E1G?kwV1vPQflMDVa>B9KRbKeyMLNKgWAVZ{m;QkaMHY z<%;8*zlnR+zw8`sjP|9U(RjT1rT;~6U(}M1BftB_A)@nzpJ=oDuJUtuIN%gWk}q7A znSlE_67e3G9Q~O30I3oxg`f82j*q(h$oykp!yfrD_-Nk(kAECK|HN{9v~u`vA#tE- z)jk!j4{u-$MC>*%CISX0{}qvTF$YZ1=tB(N5)U zfA~g-M@IAXm4CC>Ju1538C4#d4)zHwc*cv4SStCU6T``itnd0MApYt zG*KCU7v^ZCv44YB+9;w%M z7`9f4V91NK^^2}fr7J{O+9J&BPD}^oqt^?i~o>~E+!OMC`Kh^eoDcy7O z4MdggZ=RS&s9U2cch1jSjlaOi68{&3*psPD&VQ@`iNQLqRz;N}pB-$;H{*Wu+>UdPNF6%im?fId)* zB68%Ygm70}*~QSVLlrAMyT5rR0<^LGI;6230YZLc3If~J>sVWN4U`8zzWIP(AftgSVNd4omVOfPs>1Q4EJR>Ec_j` z+Mgfd(>{dX1tKpqouei4&vp#{2p0DXd@-q!e5?boU%-q|5owvR_dHAuj#9YuM}H9? zt_H^wwFhYM+@8(qe>{z-Xe&!b4b)PqQp;Z}HD8#ax70Zc*1rfzFb}~9Cd|CoL|1vm zob7_`ey5IE!Yu%wNBlSRi~Es-o~U5N(Pd1ulti2SS}1M0cZ^ z{>MqIDt9=9avXy&Bq=py^+87lx!7z-m3eakYn-kKGU_hRo`>16o4BF7@PEE+`&IAe z3S;Hd@q1m!#k@(a8oIrrzf@7FSP{aoe}>OOon`&i+FlbztjSMx1X5ySVPm3Wkp^0X zX$9|t=Kc^b<+#PTL%5qF02HR@eysVI$`H3xd^o#u$cI6c^mNkhwl*yAk*Ab=hOM@v z_h>+(w6+HE@RWE>PQaYy9e=Cu5w?50E*mZONibil8F9zea^s(3Po7e5^S9Er#EjYK zpPqYvOWoQk(Wuh6OJPds{1Y*(e^wG=sqrOhMpbg-7*0;#Y@@5uoTB@Pd zb^zFsQ1m=H7s7H`b};3DT}x)R!!<7o8?N;nGj7orPRA`c<%We(Yky^uY~4#whBZ3J zb|tntb<8e}DNej04`-tbC7Wz8h=) zPU7V15EoJ|Bm;#0FWR8MMjuNCYSNdS=g|*C@IGQ+ShmHeEqH;^f0bJt5sMuEW=Ynm zWa#rp^OvegqQ)d11AoPMd<_4_B;{T2?8nmi4&=qO1SM`X%Slp>WriPqpI>oB;lDVi zE~YKUtj=Kuu@_!#KJsvDSPDBl8oYTAO!&sLlG^a+5i`Zo|gJ!57|Rv&#=(> zxs)~ZDnJKvX~LDs>&S+Y-+SmjsU~BwvowI&76U-q*Lr#uewmpx#lG{&-u7{m(gi&1 zHF^5dtB;-a_O|;?^!$9V&54jlOe~)F_i0E@Cthk#!GB~0f7tP|5JDx>v&I^w^9quguS9yc%h->fjju$A_5L%_D z3tDIb-p6WXR`-W6uXtW(XyjR>A%b2g_P50xr6HA(br(P+i!B4?<$#qGJB3dFq;n>A zESQ}F=zp@>!Eo>hB?zV)jiDr^)navi$p(bDSb1js{u@p9>{0yYz$e0lkoDV!U@#|naKEsaY9-dYhu z7oa1Mpt7jWs8o;e0Wp#2uw&R^A@;)N>cn!fDdwDDVD<{qe?-sl#$Pe6!eUfqwzy z%=@DNjy>Oh02fff7%rb^S%G<{T58|D@C8)u&=z|usgf}c7g)Ac{XeSKY{znit1*CN zI!%^NkA`$+-FtG#2Vp??Ag)S;Zwfy?PHJ3d_?O@?EI30^Cl$3f)hiZ#gZ{nViK5QS z2X$f%{hp4C6$T093ZW}%?{=p!?|(s%i`u-iWpgpB%{>XIp|#luxM;yJO0F^b#l+Dp z57-ghw#?yo(qX6-QdM!Grbw>I7N7qbF^Obw%n(~q%CgrPA3PkA*4R`0A%BXiJxEPe zg9QU?Sk}uUM7Z(*gN`2AB)oYCc(?J@gJE7xU<}Wq$I8u*mAnX-GHc@{rgStN%PuCF zG}>paimhOu)cHGpXdL&+2M8MjwtTvX5x1{bHtC%c8a-XjTywvdQLhG8PwnWE!0s_n zes6~+nS2LE;minFjXiL%1%Hn11!?r7xt(EspVm)Svq!@2PbcRYA<3C#p*e{LZ2}058X-4S)CC!%lzU?XJ~) zx9=mGkhmn)UK(OCVk@{i-qWtSDMF;eX?ohLvY%QjcS}CY<=Q@%=2b81_|9t=Vg*`&n}?re-1_o zg96V6DB*gUnJcKjvww4S`OnNJ-J6|R|5D+T6>wt!`!_ilMjtIbMK1h$NmcsIf_}ez ze2<>1__KBMD}A^r?*1>H{P5`6!_BWYK3xb^H}ZwF*6FxYwe`ONn9i0~GN5^%3cw=^ zy{7<`L>v7OO`*Ejvz0mgz(X>)8RjZ;eT%0>Jokh!*m{L=5s44)^gsdC;-i^Dt)y7n>43h~6Q zB#2dG0rQI(FdyNL%LbAbtOWtLmy755c4;=H1g%26@zD;@>d0ll*CF5zNTE=63`V&TTOFND*tUdPlS$; z7^gf*6@Obyw$Zg~!zhSl1Vx69tx9W?Le`0>IE$uG8f=yM$e#OBM> ze#wX7SUz*K@f*cJ$QqFK1$cc(j?< zu)7*7B6?!KtzXiNxAkj^qny;y->D_Ge`mGEPQGI9U^qITNSiiO0BKPzL4E*8N#%`z@#3(5hUsZ`P=JG*s}{rQ}wg0@wQUnXfyKsBN6Zjhxh0d$Zc}d;;-ilQ^!ZSzS#3i2m<_3uW<5s z{064kdT&db8TGuCQ7<$CY&dHJPk+_~p1cJd-SWmJvB8ABl>6Uoff_C~wPxO$fjPz! zFas?-!FY>`3gRsStu{0}!`P|DLhO^=O%pPoai%h5^}fN;d#F?k?n9WeoZgBWVo~Lu zDlZa%1)okxeqA)Akp^Q+R$!K-ab(L$TOm z9M4mh!c?2&NbDf8kWbncLRQo@RbMNbuV$*si$+yZTUzz)iZgClp}HCuqO4XYC9Wd~ z2H?aATB=XUdCh*Fa8=k-dVeF_>)po(mUXRt zaR#Te#g<&a^-m6T%8hD|b7lymBBvcl3CSI-AWZmj1R16{SJ?TMSqN)wAhioNh&{(u z@~7hNkD|B}8Gjw0AsOf|kzZ>VaZNUjDIR7Q0j0qL&xJ`)iiVtB%Oyx zj8^F>X*~aLHqOrztA9r6W2!Omb2C>_4XU%0X2)=qNDQvqp_8AB@yi(MwH(hU%hj-> zPNkfo)0flH`J0A_8$z&LM_Fl*K9YfRR7hE=zf&_+1iz}xN_@9j9e9X+E`{Ut!|eB= z5h9!E@s~n;C203TdXp)oU`N=>_p%T`-ooeBJ)fV4xO+f44S&xk3+bd?5lz31Rvkzg z^m`cbJ=JQ-J6k-Z82$;cvvu&Yxo*P?H)HT5gepw~|JVwLJq48@qW=TTO8lDD*h+>J zq(Q1I%-q@u+=kaTnvP@Y{xNwWOqdq3utd{p94Ackdkx5e9~Ny_z)}%%K8A&o*OHBN z2f%wDsUn}L1b+_@J26s}*%C)A-C298y6wp=AvlM;#F+JkMgnd`0it`@M-GEar|B5o zE2+ky&LQ1H5HlMlFTt5NS9oQb^-HMa%gXnl&|hXeC~CaPbVFkU{&^RU);a-j;j{(1 zd}l~p3sLDZK6+JoJ|h+wV`Wl{Gr*H9aYWp`Fg{qtsDGo|GXAVg0gX$`lYxWL-PzjS z6o>CPwYC@T>Is@AiSzfhYXOlxI~!uSt#so6gv!Qdt09d+22+z#1TiSHEP$A5x+Ez^ z5vwsM>5)2PQ1u5^mYR<1+BF3*lNiNyVS|%3XsxyS7SLbe!)z4i=W~rkY^P-Hz~dbh z`~3X!p?}cmjeh`d{A0xo$N*N+($3wypMNMebYCIA|n% za97@+8MANYSj+LSSZ=;8hgREb?gI`iS`>*tdp+FN9>KsfE1|(G46S_>)$t!)BIMho z#+U?wrY|4Wt;X!)2=5xrE>sq}*kxTM&X@HBwtw<7?$k*xVNBi8mwZ1IX0z{yi1Ko; z?s_QcD(M#m0dL?4E(?eNf?j=eH0wul6O$pg*|>iPJNB|{tZdpIVrtDK z=YO9jO3-6`& zhgX2bBYn`_mJZTsPl}v|L|k5@@!pk9tCApMX0;N?%e>-NsOS)LrFx!B@t?h{$_05( z^0~nl{NE7zqzM|Bt;d z;cnx&()}wGC*u(f@)9kvClrqjk|2qg1o!|VA|vs?zwd5Ux0Y_8 zsU?~7#^;zqSKX?vs;=eMUA{|el>=@;tZ)l19Ix+9=%3>lx=I#7g!LZbYk!ZUzs^h$ zzQbZsq;K*OxxRN!e}oSP94GNMLOmm6 zAX3pPac%_n4*9AWq%$iQn6q1(_soyzJ`=jB0}R2OWaCd^&ro>ls5N`-UXssWw?QdH zXPENT?wpl?Icsm|svBDsK&o%e>C*%bHdN^HiJ?tPP>LK} zju$DzT<8olCImxEaRU7`kO45hHL%WdcDa{r)6Pqw+;ObAnU&3?Xr-AI52Z!rz}j_t zCv*fuFg`r!ZxT!tEZt#*KUpQm8;2>*=7bDzmrNsS5-stT`G1abYR%doVy-uknM&Vt z@o|29@=3P7bjWa=L6P+KZ7Z*#fW$eM@yRDFzKUUUcB7uJfeRqm;v~yLlbqw&Bn?rG zJt3IJB%aCf`uX~Jo%o){(cs0^B=$!TCZ4v-l?DX=#(%C}o%tb@HFjnZsoo?Do6icO z&eP(#!@|1YzJKYC>1*tvm7OY_OW{rxQtt6lLfnj0C762P{E+<*EYg39;i|7xBSg8u7VNRrF>^1720j5o8+EuUGVD3b*k+VR2O{@pScMyQ<5xyv$JU)Vi?9X&Fho%1h zZ)9RHK3JCm6b&LKVi0`6mw-)xc|gpUNV%)8k0G2C!L{(GAy9j1~8WXjhjjT z!kk^pOF=rr-zCn8HI6wk*uhppF*DUp>pxc4wqa}l5NsDBIEI5Jm*w2FE_Y!@%x#Us znb$cqf7=js7%Q%05LYpW@M^7tgJ;8kK&L?~>wn4ka8lDVUPg}vKf@>XQhD5Q;pBBHRAGV;KiSoliB-5C z2Y-|FUkn6DMlz&-`GxNIot6;`E5afohbKA+o*$16Sp$};iIQwXe?$%6PNt)O;$H;s zV&x(V%2)&t$dV}2q;51L$W!6J((FaCmiiNtnG}m_!1Xs2YmmB@W&IY4s zyMc2HD~~K5)!i%|!z3GOH=Ca{t}l*p8h;&CUF2N$LKy6~Z#hDW_0Sdl5f?Q$y4Kty zGa5oLV72mV9I~Nr6fKoVYb~_AuFbP@jcrQ_>J1~mQ^Lxxa9EPV9}5aa_LRjO9PM`w zHfDl)a+lYim^F_k^XUjDk!}_wwQm}sklA&JLczu{$|&lC)KSwcm%Z{`lHmt*Z+{{- zt_^x!;)#SMJQoi~-hcE#wntKXpalmc4yA$R^ITz5Oh3|&)507W^OnMd@ZFpwLjg&J zu6S#D`!k{_{mEGsh%y|52;Gl=d~`B8>kG&*(uKEPWj|6J1Z3DH_mO13B;gI6>byyb z(MJ^~Cf#HS^_+IMKg+(O=q@IEcYnLlw&ZNtS3$XSC#t?IA>qrrxfA#;fyRP53%uZo zB2G}8=;8Xg6(|~4yVQVgAoqQoNhAAXovUNGOxYN^4yCoX^FSU2uiBoEp%up zpj9zCxBvLZPhB8C(gKiHZg4tMu{kR-_)n&@Q^jHES6G_0j)hFuvyirQ*MEMJrRtV# z0e27C0<0;zu?AG)gMb7#$2a*_*vO92QI+{@Wc5BgqC{x_<=OFY%%7^uSRcn?)(LVt zh2RjjU62k{p|4YlrGsN=u_po$fub#SN1~;xx2{xAz>v9gb)_%`q92k(Loz}U`{rV) zmA|N@O5gZdBR>cRU@#glet$!aZrOKqJcx0IFK$msmA2*&mDbp-eL_OCs~B zjBK1LH*U_rB0FR}4>WGh3r!@+cFP8zLWb+k4)Z;sPE_xB*Mo!zSP+5dzb+&MD|Uhc zB|%WQ@uvxH(xxnkIk@&cC493-Xaug5jn+e=vkHe2f1}wpiJa7r3V)4Icfx=b%Iy-* z4qPys>!yzBAlT8C57XPX&`(9fnCaw{P!)dvIR!g&7u}aoF@Gt}Op#{0no8&q67u}T z2jbdC>nPz!yO}w*$wvT}aLTdqV7DaH%>E`b_wGg4wvd zdGjVH*ZN97YMyEjBYlwisTU&_bG3d>v`&%!cJylV&Y;t(URezy3I62>%ZpZi@Q+dBd z+)H=MuF+tE-qA5sv~yQBA4(>(@6njBpa78A8u9!i#Eez+7io!csnp8tYla!aU^ZgH z=(*Na)~7BPA5q#zktZ`*9|fTN7~;Ms5^=uM{F5U8b1?MSs=8ATsX%9krVr&rP+)~o zG~ycHM(H0cLVxuCMnPHLze@QsTjNl(S5PK)p7W6)7mSPNOGiDj`!D3L5GYvo*aEJNX}pvOQP1`R^(oFtURe%1CqpB>6nG$5A`j;2GFgjZD{ zF*{U(#7EfI8-~>7`VtF9HKU00bTWQ6Je$K9p#l6hB?#p{o*0PS<-1H;mH@gKfskj_ zJOYtSaDTq=7$Q_DaSL4F?l(Juok0!PozhX+EBuFA?pzl`6;R!dS*)3R1f!2o;O$%5 zehE^a9C64UMI`%hfT$RP!1N=Wzig#t=koS>gjC<67RWCEqGwVQ(9M87? zI_X_(!g1nq6HzKI?!p-S@-6~P$h8Vy8!3Yy%E)c+#IB0RTHp;y@4*4Q-U^@gN+Ksh z`hW2qUqR@Ozg#fmGJx@$gAwfF2A32dQaaRpZ@u!t5$6bwcyC@BKAQc0e|4}2qbI@_ zXtMzfXFlx%gHCoWVup2nHvN1OJ)PA!j((~y^!bFW?B2TtnP}!n!GRd8!w|vX8~)Em z>R0L7`VpCtk&g9uB0QmngH>iT#hZ6-?teUc`1Hl@+MV9&%I`K;*HX#XRd3~YZ-)GL zso)7$Yrlq1;mlFGUM{^U%fC{|px4lF!_41i88K`u;zz7fKmi+t?-ZE5%ak-Q_YBUu zdh$vJL1l>DGs%2e5v>Y^4{A_V2s4PT`GzU`Ot+B`*PLiC6FnI#)-o~E*?Cmrn}4cD zWzAMZvt0S;YFP;?9`alPbHS`cR?!?se0`Q(mGkQSCnMDm2Ss1Ic58KI^;VT6cBF;K zjc*H87(=W9`|t;yE@H4)Yy5biIfZD2T(YWasF>Xr{Z?&0KJ!<7@_J$3z5z2M$!7)2 z38_G_-sZ5)yFQf6cSFQWKkYO=Tz{f*i0CShhCh5bxrn*}@~%LF_ljL-NW&n;e{%uH z+)Ml~M>m{w<=Y}JRct4?B+Ov@?_xV)I#gCaCx`G)IN@kK>EA?CcKM|CcFBmx z3|ZA2iCZHHAHJEASz!n=0^%R4V7Z!8sptB$ch*&40Q+l}7rZw^hX(1BHSzoCF4d)( z&dcg!M3evDxbXiU$A$l4AAeYpT_)#*3bd^t4MzfZN z?*^WURxN(kszh=dZc|ztW~J3O8dqx@wW2^JwY>v7Mb?oG-ZR!v2kM6>Q|MC<5-*h> zRUDi-uTU~DN(tz}!vkWlLQOofl(F5V!u8Fq&EV3%c5i*t%muh=`+s%6XgA&#OT`B1 zgfKFjNy)2UsQvr4dvTb|K&$9x+5&uw52QzoP3olDLWBM-GMtJpDpVy-!G_|+?^O4=x;wvzn`2xq+gYJnNbj1GA1}XPG=>JWHfUpx(R@l0y=H& z;*}6A+OAtxw&365%&ok`@|LT9a&Yj&l;Vihn0d+8J;YG7#RY zo!_GDP(a}G)_;`y8$)t2|2;flo)DZOFltClK@)^;pNf*i{dNG*uI^iXiwnT53BgvS zMHw7_r~sZ6j!&3Oaxa#5HfO*B9-6t%{t^H7-OTv2BbO=K1Dg@40|0|J95Bu;?fjyCBCS}7f} z*2ZQ#Jo(0E(c5dS;^smM$J(*igX#F@Dwfa6`pWl{6(Lz6J4VHAnGj@dBcjl*mBybaKjol zUB>9##ec2RgDcq$Q?Za_6sb~YhN$dz*V7tByb0nQLwoTAxYmsaOHM+jiTJ>zzNImx zZ_2;BN%n2~s9|Jl7O}3y-h+?I?LqHhfhAbPGvIP3NgwiTD-N^#?6O(gczozrs2(4( zcW1x>NwqP;4NQ;)Car-Q?*iZyb;zD-wr?S^=5=pm6rI@X+x}3-j)SNZ`m0V zwO4DV41W&Gd+K~a?dop|dp+9aB{E4DR2ySTP2zwI# zj(@`3ZV5Z9a3KwofnhXBH{f_}nqd?{CE=?9YAG6msr3awG7D>EZkxHHQ2U3hIVSoy zL^DJz=7x#A;VygAju*YDzvO*%)bao(N}_-WSXwGjLY_ieJ2@c!;$C584-RuS{+ zRj`3YsDq!HD&fq$mdW%CmRwbRp=PzBhkrXiGPZ;QSQyO&{pn6v8rdHX4@vclGcP`s zjdhuMW0}c&um?E}tK00MtRv=Ct9Uqsl*g*zhlVORFRua+hL2@PSm0w1c@-ILQvNyA z&a*yA#q>9g6wFIlH>irlJFi~NZrxE$B8Lxyvkz@Sn?+;SwqTzW^*ywG5*nR*D1ZAG z^YZ?61deH1e3BtC6e0+ng+K_a3mp68b#?wp&a%_bd9BtVpAtn*fHP(BdbT9l)mZ`A zc!}1pM}eLr+N9O+TJ!bDI&GdF*QuYpj-vxP+V$v9360 z%za#^THUlFQWJVEDXrv@?9j7~^nWXY7xWuu142N=fA)Qht4zGqv8ZZp^!bXkC8KLl z*`stisaPS!|HNV}Xk@y%uvX!0o6X1_wyTQu%$55XI#zohx$W{{9v?yU=|}MJ%He~4 z6wJ47gT_U!ub#l*&1T;Y;LAwt0zEt)4USY{0TXWisrHNZXf}?xd@8089)Ap54zPFAqkP{H(S4VIIV!VH(B{VG11>DVVVeE!A3@W@xN?ozaP@~N6iXSDJi z6XHtE?khL;OG(2V$O(OSReu5*^>IH65=BQfq2gCGs;;_f1px_&hIUzcRKQzh7U*vc z5(tFJZ^>&BU07t8hU`65Ot4vv`3s|^z-0}n{LP~GMJ{c&{WWEiM{;}agTuCwW0HqM zh+JBFDKSVI)fX{XP9uee&S}bTb)c-l{WTG}kSWbHAv{X6LWXzF#(!Kg1-fQ*oMm)9 zz{VN3e6n}+a#RA2M{`|QNad$rN?e^f1!>HhG95YMXh&pHWL)|e@7tc?T=GT4?$V9rh12{da1 zk-2@e5XeQMDVu;^oAT5EpfQ_GavSrVEo>u=s%4sTtCmb5ulb{y!BVSs=bGvtAEmA_ zGhR_!h!nZIDc^wC8uAV2yD6J7dlzIkkKok6v|A`@ZaXSW+DHm*dGZz{_)H_?BB>8Pq3?!8D`1{2a&EF9ur!AAP9fQFl{B;CrC?KMn zC~!@90f^4V{22PNouauB8YHon72`%W6HpY%##|VJ!zH#h^mbQ##!IxzWlDpm9&ei%=KSi{E&M(gk<72o zqx2bXbRC5TvO9iQ^I~aOCktcUwErE9j2n-a*gZW!x^++seHfU9u4|y-#(MK}!||wJ z#X`QrR4#EBxO8rUAZsPbfjXE?odOaA1?CVWhI&Yj1b>IYnz0=L8B&q`Kt%RLqmp_A ziIe~t9x548GunU~{5vBi(>5kv#C|}m3Bz_kiy7O&aO4b1kp{dzBw3yf$|FvuVOi5L z8MPxP&+!g(#^@ z+TzW}4{Gk2oK6~=6VXkOLYb5_Y-n(O4`Xnq#-n%H!5wRFgQLr6F&WIXV9GW6z;ru~Ovd9>gm(3J zO2Pm()pdBd(DgZsA0L0SdHXYr2mko}HMxq#deQb#Xw;q3u%Ojl2L(m`=U_2Dr|WE| z9#Vl10v#Xj2&VKeFAAa6bj|L%`BE9%UT~JtJ*;LZqgn3&V~#K#(-EW;H5@(3qMa9} za(`^WqbebCj>6W>w=llp#@&J6fWPl>T8ZGH(|494ZC@I@TXh5}JqvDCS{iY5D=-V! z!@peSs+n9WsZDqAI^!@1w;F5yHyFTNaEQ2@9Nn5jfRMQrhew@$dUJCf2qZ3I>hx2< z30FvuO46eS(!G*&52S&=c`j0(P9IC%AAdZI4{=RZ7$3^uorW(#0Mw)JN8s`Tc}l8h zyo}B7aYH!Zh|x9|f%r3d{oMfe1ho$zbC+H{F;sS~tszqk-_%q@jNepLVUJ0k8Ig!} zT%eRkrId#VsdW~}@LQ52X#EM|s8qtaaex@gYI78%SZ->AAG(cV^V2b3i`a6}KYuT> zUL@OL;GM9gG#s)E^F_17IwlbP(p2#{+9rN2_I8H{!kqN$%u*U$H;&Xe^i zyomXSB=8eQYo~wrVt6iu|HGb6P%HE!zLz4?mnbP5uU@P*1KCeivY%42Avm&z7-Auh zc6h8-XfuR`1h@r^cg&eRG?^mfSASlK)by1I&tD}=TlP_5keBhlA^UyUQ$V6CCq>~7 z6tmF=aAgugg3as##?5{M%q68$s46)%lbDVjqi`UxVzc}@E|iOM@Gp{)=fgfFxJ(Gl zye6Djbm#MrW*y^FGPYJNTp|!lv^I$`9~Zdiiej?H^wvF|qE0Mvf?^GXOMfA?Rt)nP zCGa6F%FSI;kcBVj9Q>Yacox~EwA)cEuoie{bAWbzKAVNTn}+ONR7_Vpj~bv$f}yT= z9a2VyfJ25-lA!XRc`vn%tDRqRA7MQWV8d~sG23Y0U;E?}at;d4O{54tJyV}u=N$E9 zOvs#H0rks?zW5zipYA;1cYj^d7=MZdOBj)e^fQEAt_Z6nTJP1)+_&lQ1c2Zqk+R&s zjlo~SgWwIUze9SDQZkQcyyC$>0M0%q?1n+R(LL^=@ zA4Ap^PQN{%?T1c|O7aVq)Wpxq5nsZdbyGn9dy<&@SeJaG(sG92QXvq$mH_8ct3tAt=#!NQ9b$^VVassyH|H3**UH)1 z24LJDzHwmn^1Q~tOYUVlzL^H*E8KbVDOZqSQG2j}=M;h?4$wH3aOZgpyN5A@ ziRyL~0vtd&)PLgv1QcFi_lhD{J`m*yA3$&hrL2f90e9`1sxMXL8FBAT(AZ!mV_)Ui zNL~*#pa(j0aetrp8!#RR$tky`z!5C_z$HaK$m_RnH}7op*b@zI)21*=iH?m(a)An+ zgM{=b7KL~%;X$0r&-vmE01+EE4KgL*O{4x)4vooEK3Tp&TPd&t0_GDDAGY_PS)f3m z7XuoiA1JANQ=R`E&FhO*vAuK~SJO$Oudy@GAMwtye_1JKc zU@6}1ZF^yXjepl`V>~0fOISQSj`qVr{BTn7b6#*_B^f!8k{f&s4#LE-lQ{FK*LU4;TTT>&(_r1e} z+<)-F6KV(ct$WH*UrvRAFy}m)d=A_?5W^FkB^ztKvkI9U6Sof4r{rYwgd_NAN{(eyDX@o;%J`=` z+g4|vQrbHA?Ks5kf%5c~V9 zy}K~1+t|ghZCLosICM}?6~ooZo;BL9|2tS&wAtIceqz8n_7Npq|2RM^tYoSI-8FA% zovXTMm7^mW7@rHo#UNPr=_$Q~81@4~JeYq^aRQJVFl}cShy3?6I^~xip%KWJoCI8q zZbSnl*O$;GpHKFn?lFxTMDXElaN;|w^Yg>?FX^5!I$A#zZ5H{iDH`EE9*_12nf7RJ zee=tW&nT)6e%}3T^Dch# zjLl!uT6USihCAWWgYm_npCEBf4LLaGQpgkZf%T5TGT|GN`Gl!foK7!-hzcMs5H|WA zZyd*KNW4b_|Hf5*HaQak1;Sz7x&;YJvPn)(;i^yewnvlUY~?iq4IO_q?2Eebz;y!3 za61CLkkZDlZ{8y37!&rUxqXbF>?9owZQ^Lp+^T(#w3&&4phR@gpIm64YZR#wqkKu_ zSmZ(Fa?-8FlcpNgAxQcHdA0}7h#Ln4+8$?;#C3{{>3lEvNO$sM2t;*fW#KegkKv;_ zWoof2XG31}Yg5OZ_2z&5b6gKXR4-AibC@njB{7*}>$ig}`X0bhBdE8G%m9}Lo?kQx z&-(`eQyK+?vHR0|EapsP|B1*tB8`ktcW-9U*3;XsO|dY&eSCF~X0c3!N*m;R&#GU! zLM|UOkSCvTj-ilTdfhw-P-*GRr2r3){9ba5v>S__CF}rR>W$zkI%+YwxHU}2j19in+&k}ojsiuM4-`;26EFI4f-UC;4 zUoeO$tt9jT+b6zc3|f)5>&-+>2PEy@c^`VFcrv)Gf)uwJe&nt37FI?qN?vs#E7TU| zpJ#Eh10c_i>nVQ`8}m|&%ZDYrnEL~3+rVibh!%Qn3V=t?l4o+?kg0mv15x_w>~(QajRL$fh(tkmATSRm=XRPBM09 z=hdtE-Hp3{lz+ZNWxKG~c8Bl{guh(7{r3qp-SR5Y=%b3A88IfoG>Nvcrq{;h#eM@X zCg0*igbpfmV>=MFE}rw+KGGG-gz5AB0ymTpKEr=vYQ%2EQbE>daz5*E=qfI=Br+r# z^P2?^gOTN?!t$@Dse9Aat6lIJC^MOUJ%EVhCNT-_!obIwQbQ2s)EtnV$N@*2P}&4Y ziB$E$W6`CXMPHU^m+u=81YF;^jm>vsOj>WPM-xE4yx(!U;+q=khW7v=XN+efGCBub zN0WcIh7l|+Jp5pgsi%1Rh}F-vjnOh&rG1PZ4+|3C-j4Xo3woF2xAg8`5H*wUXM@xL z#yNibIDj^oAwFLi`s7@H3^Nsk-6J3Teuy9uXt#CB)6^5Y7Vk5zkvFG4^5&H7mn=f3 zJY6piCvK;;IGkI{#R&bEv@MGfI>iPB2CaWRMyMzFz%fDxE=DMUB6f7HB;1}4gnXhW ze8N4`)~$-A$boE=>=&YJQWwjOz!s7YSMAJ<2YECs#kP`+1p^Xw+KsJH}&Z&()q3`ajiYtrwk8~PxEA&BJlNSO=%Yj+KGA(K1AnS7`BPZXTiCS357gY6F|44Cc#G zmtmZbKH#ShxO&m@!2pqCilXhtGv8zIy3~le8%;41ELvxw5zu8rn!~mXX$fkg^ULyx zg7MQt47@nC18N)Zn;}N3_?a+w1yk1ikSqcr8T%p^UB_F0S4UAmL=);ocO`!UBA}6eJ93VjpMC)OR>DAFH;}F z?u!xNytD9mTwM*A+1lh=?iz4xDaE{@LJlLyCafhDQe#nruS;(OPx2 zGpelJ5UwoQB)%ag9ZrD&aom57TcuNGbDG-jMiAjA^otO|qQ8x!miQ|CTUbr{tJ{W3 z^hr7kc^0*Ynru7f;5r*-*Nt!}Tb?wX9f8cwoZCdgIp;;Bl51&Q?9P>lp)3}kesb0E zR|Qf^61ZshtjxJMI>lspg>mlJI!O2IdV-rPK=#wg4};QF;$c5r_r7l_zYs6dzh zga{kX+6!*dpsh(O0}}!@7z4)*O}(bOZE9NR{c%W(qBXoDH2(tB{ROb>?a<{5pu-mc zgD=F+UI1g<4xU>dl#D?R_NHc-#Z!;;#enJqN4>vuXr@7!cLfnpFlTPwvR$^#*Mb=9 ziIhZxohb#h_o{b!)k=RJnZ(_`-#LpA&OR%pVR40!|7PV(y;NSfWuWr=F2L z45@*RA~R-0lH@5k$Vr9F(gUrSU+0t|)zQ&HD(NUyaSju5lKvIcni#0m;65SJw1h@n zlPiRlkx;91Z-qSM1bV*qw zx_ez-AjygJcH=9^T}Gg0G^&hH(<063UO~c1k%Cb!3L;B&bf#`CX+Q@^ll(C&q+ARQItne!7G0-N0$?6TA;y(m63$#hu=tE zBqbS3UY{izmBy*b$i5A!fiA|Y$!U`uqh|&*qm&D1MpN1Am@eDslx58+Lu#Otm^L|G zNDXuq7AI$K2-zhg`LiTN3JG&lP=#cpB+)=dMGD4@Vvu)`XgD!Yx!5;3ZJK2zjG51< zzl+I{lHq@}b2?27R0sK>e8(vvpM&G%B$gPdSk_gLS*p=Fsc%LLJ1Cc9^z6@lP z%9tK$VHlQC89KWolRI%nDG=(OD&m*rq)ASoSJ$PSI3{~aR(VuNE#1?WT#;fydpZI_ z&Z#sl&=BTuPNQjoMu2v6s*oD!#Ni;P3#l1hxm==ybV@D$izRVLFKF{Q6dgHJYWOgg zl#+jFRJM*XI+H^rloxqzWR;OoRMxfGQ+dkr%8^|+f(pMvX6b=ebmBQ>NDXwRqs}Q^ zdPZBcGA0}4JioUj7Zy`JWHhG8N-5_RGER#$Do8BoV!8pt{0$Jn6B6~of8(6wjrR`c zV+QeG5%2;1dO_SBz9@^~6RT3F_eA1Fl9qqrG?#RWMqx66VQ~;J@>|J!T7Sk2m$=Qp z-o9m#+v$li*J-n%)gm9*;D~#6e)%1ty!L}bA?5EpXUrWR^qd;R+B^-YLchqDRc7|i zh%pHPRfmhV;lxH6U-mMAIlTQ#z?Y?hK);BPvRTo*-Yb@F=}`Sb54KB(#tAwGbtZqR zL@keW_(=mLi-@ndHk~Q(BZLk3kSwd9n`Nuv7i_CfGWnhF`DYZ4?_9DD2V()@qMH;0 zXXKgqMX7dYm5tDzLraFZENtmd+MXz8*(TcpV3oud$=3-stWHOf8s)aMr8=y+(wNNGZTOYDD{p~Il)Xys=VT}twaNR+$P;YC-!9HKO}@FA-u zUQD#n@_~AAtYDx?Q$Dcvh|C8^y>alenZg%ldjGR~Q*x~t^#?l_WO3btLnY}D%-4&Y z-N@(!qstozLuHL45)eV zd~|D2TL?GSO+f5aS~dL`zj#1)db7PPz!p8l~xtDh${_yniFf{Uw#QQEY z)JL;`OoG)$Ci(+5&$sGjU*CTr0}HNUw)3@t4)Ugvy7O6u;@*4;wD6TZa^WM=;6D&<03^;A!l!()^SD ze$-0SwLF4}#Bcfb?MXvUdxQ1|{(N5(4-qzBr*vmcHdMe& z7dDuo8W6x?LUSl&QSe+BovXB!!pe!BG(6*DkdXlx2rI7Mo05e$+vE?#8 z;?`K4E9mFUZ;un%9%CPq&2f@$j&85CIn=N@j@%YAjQg|>lNx`Jq&prRTDFap+vv*8 z-@O@Kt>t?k6@o?xO)fX7=GKkvRFiYN`c57>+W*G2{SPP-G9;7cPGqxID{O3kxvuw{ z+CTH{hkI?U{o+f5_RnhVKiLJABb7c`y8T*VhxQ-$9p^WZEsFQ3n0lhAP>IuwJ|@sf zx_HWj#^aRJ=lFl&(&v72XghL8)OXzyST@HwyfF}G&5W5q`~?hM!U&Mt1l~=ncPhwT z)Pe}%B{obcuMXE)f{Bxyf}ugKW)I+@c4ZpgpWGWpFK*;uO9tA&RJ%6X8NoQ%0M8;e)5q^oaufZ+h9i;M8oVL}3Uk--VV8>PcSHexa?^u_ely8%{s zTJ>~f(~q!mGkXrMRs1NnsZiopdWLp`&gb<3PX8txbHY(1Udb zzXUT7U`v1WW1Pz=Ve?FXh!q;Y$50gp{GrA;)%#?=U1skej1R>AgU;lJHBwz5KG9#{WL5i=a6^AppTyhMS?CUJuvj>a%ARN2w8&8ZC_KRHrMl-MG zJmme7irzhXE&SVrLL2cD@Nl@3Viy&JG`JL)M-iPdB%d+fqa6JyHU!$@12+sHS%&b7 zBPV}T6Ffiytb^5H_&QT&Ibc@zdPJ~Z@+cTzXg|&sfd~_uM?Zgn`yLOPdrWzBGTDQx z3haU54%~$$U zbrx_4ByBCC?5V`z-E8T@Goi~i){t)%sky`w#6be2vkIvg<1SW z4HB4}z{tY%2$qd$&jm|edfr$;-(p0HtM-s8BqS7=EzA7g-zFNt&jRZB+7>M^%jFtm zg3nA)SG83Pa^+L;5}!0Oqupjx|A4lD@|Psr2@7Zl3xZmBe;=Znu-AWb z*(M2*w4pZ@xgFtx$#)o;Oh+4zx^;v0^!zF#fQNl7AtrLqYU-+f$NI+0% zcyZ6ycVK=MjB;hCxJSrG%{xUQ!A++Q?;eVtzi19M)G_NrIs(f`C&EiNLx5+mZA~yr z)h~>*NV|K5XxeVJDBHk?F2#2<`%i!Rerk@8ip0Z-#qw?-dpK^{iN7KErf&rwL>%^` zf3oyH1RmH~*UuHj+q*ig0`s{MrWM`-XH}qlto3%Lz0q!ezK&Q7oV(!a3k2EPwSN2Ius+4cag?|Xx# zVF~^M!*dD+i6Ti{N>2HM5Bdck`sWa3r{40XiPKy)ewZY|!gxBtL(t`Bu#nIl{~kg z_c&sQvemE08U^vOI9|cqDtqbUAu!Wm26Vl*TImk2Jvev{d?7%v!K)(96?yB%X3K~s z1)~EtD*Wqc2*B4L!#z3rJ}gyjQQTKfVJwrt;8Nx0Mq8Cu$X7Jk8^S_PqFp?NAz<`g zRzs|XQ>v_DwYSmZ{a=3o3h(#7jC=osBOd^NnJG&J+^6A_ayZVOhjf$sVSWzikS?pySZ4A@sZm8%_pvcHD%Z_;Yr@mX5qxh>Pzm0NeXYwEZm1&p=1d`d1Ho_* zL#{7o0_+98cv(3aJ6&TOIY?HRT1|aP`Q@TD{)_Xe=H?QC%p@y_PtI;lr4l7$?;Z3x z$XDXg4J?0m-)v?{TIV99OV~2Ov~@f-sCinFPL2ndXb+Pa##`s3$=PM6Nfk=@Pkjbi za93sz3jw88dz*p3b2}x;#Gp*?c9^jw4Im7$nh1s5xplFqV?j4k!9$nXB2gsbTnQYs zpA3PkNN@zuFWMdkCr>8>AIt_!5RTlRpFj1W0XvC~36oCyNU8_2c9~E!|Xl;%aGG9taw})6_U0DQWYpu9# zY+sDI9(H=huVT`PXyOn+(R!CRmh6`#;m+ zkRX4Gz8ymTLctLKGytF?HVpjyGdM>kGUDeWoPBV_U zZhYs&X5%5QdHCs}wR~K5+)TjcSV?AhITp&aPQH{h;LV`|2(63DB+!Y zxWOkGQCd#AY&Lc-TG6<$Oj_Tlst-eeTmGno>xIjIO_xsQL5 zy^lV}=No%`E8e{OCH-(8g3foh(=B&M4y9Ba#;^bHyaSvQSHUIRRSz6ZMP9%esk~sb z#3~IDnWhu64X1w`6d-WO@yA2sNpqhi*PW%?%*8^(7rar`AoKBvL=;?<%&grbw~L_N ze4+ztMC9W0{+*YvUfsI6v$6ii!TNvUgY|EAZ>`;dLbt3unjMqC8*yCa7THUXhl9m- zj;l;IFjFhDPB+gOn=IH~XgnqdVzCW>u^ED4kZNFax3~Fw==GqGyGKfkX;AKIsPrk@ zy=WY9sA#m3*)arn8buS4{bG++Ih3Y;H(?vPp3BN@RBr6c-_$?(WCvGig;ReZnZwD1 z&q%zU1x&*WUSMkR0VNP`e1ikJn+52yB(zmz1GQVtz2A)yyKI-S;sx&(8|$n z0rN_h9uKFuXcKE9puB?58}|;~JIN=Qj<_x>$&ST5G+Tn?dzLC7pl*3MOv5HR>1PWD zPQsKm(v2y&R8v)9c)^ge^8|l+UsH^g<&PfXWqr~3&Dgyh{*_)3z1##iiX~%pPY&5u zwc`XBNhy{OV(aCtmRJV-w%FP#i==sd3hz`m6Q0Pd{`v8bx*|LFLsvyC?|PHoT)Oru zEls^snIS$0j6n`qdXjX+=vgh@;rqH*aZ%re5PhvveW6sW>Q9q=$}N8yfxl0%dh1JC zM?#%~-6-%zpyXXvH5mwIS!xvDx{*dc#obrb0{l{lOON^N#LIq|0kSg%qfVK0YlUM<#ut?vl>3H9$6 zaRh$Ar+XkC&mE>1xvoknuU?8GsALj%*H?<%)a%v!&J#2P^^Hhg2ZObaA5~t8a`8Jz zRgm9yZ#)XM$U=Wf&v{lcK3Q0|m2=G2-sJq44tYRpF^)P1fCydq5h&|q_0?@GfT~EP z;-wC9Q`m8}1}s{1%fl5<^)bx&l7W{~{7bNA5?Vr-4Sp%T%(?DBDR+2?!d*TIabZ%* zL<<)+dB{Z;xCMOO&yODkp3X}~$S787;s`8xO_$wj^1Xjc1t-gXE-e>7SVJg^?DLoa zBFGqqy-jdRFsU{3Tn^ZR*qIauLj5rYh-Emq)xW!@7KawIchDQ$f;v4$y8zyK=-2h6 z+R79*NMNI&)lz~y)-M37qA*VA+J<1Aklb`&2*dAApPXdarTP|gGHVS`*0*;W=k}62 zK0Y6I1UY};V89;h+Fv?81y@7rf|~r@LF(3T4CUl% z%cZV+UGAxGiqpHNTHI7jlFZ6!3fcc-)Gc&sRxFlSB~VnP5p2cEH;WZe+IZ9Ndo=t^ z5tmG?R5a#SrQ@-EZ%+m^^)3j~bCB5#G4qi>e~Vx(f0^S<%Wf}#6Z;Li&&!9GKR*8E zIi`PX2mT+PJ!#oOt)yUOU5`o)>k;?JytiE%nU{6dvSCSQn-H-_5rYtKw1`sQYZWLE|iCrTR&fI_Iyo1B$Jd9}*xOaycg;HNv=n!c6Wbx zn?yL5qUjyYz8?@CArl4tE(g>J%39UWlGAa}^FqxYJ|jRZVG`E4+gxg~9ya($ht3%R zb?#p10on>mrtHfz@0vVn1b3uCV8`; zM(1!*gZmr-*a(d1(bpGeH&+pv_tk%^vo}w#e%TE_>EDCfzsTcvSL?fEcs8eCE@=ed z6r4@^w*`-Bf!&}~ZF?Mnz_NGT<~+C0*J%#x$m(`B42%2Qv-wyI=DK=aOhZ9>fl8*d z`k)ij_ZGTtDcNNQGq;jxh8>OM^&%@d@orwi`*~i%-XnyDJm*9BsG$#%_N;R|$XD zsl|@KX`WDw_0-o% zWviS_@((vI#x8ap7c1w+B^rN{bRL;l6q2lsXwc0H3nch)^6n=cn8(y_#l_EMVMT|E zM7mMjNDUve%S4az?|9w9p_2${H2z*@BA#t>sfoB*goiGgI=AD*3Tj}QRkpp;)U?TF9|=`obX9Lp=6wb1l+okA$$RC|D(t>H8@-KP!6<4GN=1OUX?^g#nO?S!bb}Z&o z88%iDJ(Ze-R7hh^7Lk^$FzOL$H7C*&16Gh~VxSUJp`0wF2D&Ka&S{ez7nU|(X4&S! z=UNdnR?@N%wC3wo4@B#7T{v1(_?J;>T~46SY+3R`Wp)fWOZxaCpcnqDTlY~g2JEmS)aGGFMV9A731dP@y-?30m`Sz<~h z-nTVU%kcqYamBBMil^nn>@^FniWfsnNdNjiGixJi1MWqEi|jaU^T-9goPhh846Ys zQ>rpvV(=bIX!EhbiJXLqEdsy>->o7JY-JTh2djngU{i;wg1lTPLGIi|^ccF9@90IGTTAufb;UBg5@9!Fc3o!&hD?yGaMs$ZS@pTn?8T4a6hCf z7CTdxt=JdGHM8&FOGCYU38!Ly3P>zfk8ejURi|2N6>dc>1YS{U;P05^%?uFC^EbO< zUo%??QL^R2MoKr4pwIGb%u*O?i7h*;=Ziy4BEMNZEi|<}q$#g!Z}}D;`IFYSH&*6^ zj^IjJWySy%vq-x;A(gZMd$NB#(!MyPdtRn~D(jvEJ(Fc?)e2NcO`n>(St1$|^qlAAuYF(W+E#Kx}hhQ!bb9Hh{| z>2*r!q*I-bhhU`jO?k-joF#aU^EGGWkueEz9f1Sn^?bRn3t>O4CPjZf@AEWE{LCdc zWPVO8A76}nn5HY8PGKZ@?BG6)Pk_WmrLCfIGveOOMC`!Kzj#NLCR zW{1#>jF6B*k_b$7C|-ZpUNh)%aMjSzSZ?0W`lHb4a!c3QTD4~Vm9>0etK(y;^AFeo z!GI@-;5A-mP-yS$`@=pAQNw=l1Sq-(0C-99)@E@L$kMSC)2}EpoO`0k4FAHAZ3q9} zF+;kV#-7VJBYkM7WFiw}+_K>fY1*lb{@yTZb$N2oijRMt7f6?tUl0%vNqwF~q*!l+ zGvDw(Fu*>Sv|kXSe`Q@Hb&RT1mU*rz_2ph45WYmJ5Qy%0anf&>RFt$gqS~@!O4a?H zQa$t^D)He||>M|W)f@aYOoqMM!WQ^$f^2-#!9wmniKAP_BRuYb^ z(sG)SRgKAoo0tO7K#Nzv5u#6QmPE}X3#;GxSmom&-@JRfQ zQDes@t&SBsle%#0nITgFd``)KtcNr>HWX((s@u(b+%)srbazVA@~K_bgC7A08<5ZR zt>%QZLE3V?2{{%&q!A)Hu>%N2IE2Ctp_WWs|Iq2Jeb@{}v8vA{ zOP154KBBv~dZxC?81KflymQ+5?cT^Wvah3ME2y?VA680Bd9CH*QeHPvuf*qT2K-O& zf5zZ%cls9b-{xkyRra*(u94N;O2`E}bEiCH zs#EOL-iQ&8<#iODa?9G3QIdt#WGQ&De@(VCqO)K{6Z;fHA5;88bf-{1eT1dl3ABPp zRsmk2#c9o~V^i+bDN|ObST&NWQ+&}|uYOvW=uXM56|#DR=!Td>TDp>^=Czj7)Vyv? zQ~fxSxhTAznU$f;%KUN!Jk7vrnO^#`b!THpv*BCC)8UI(&qrQu#f0RQlNs?9mrZ04 z2Y<{n0c=K?0$jYkg%9qSj3$u}?!^UL=je|~;zlHWUZ0&)E;si(+!p*#9Q8KX8)C_l z^@cYju@1AaJSD14UA;K?CRW;>Ob%FY`^JUqvsznBmho0z`El+2!fBnuG2dkcA4>vvoAv80JJMMnc*)m#E5EgQn`m4de;eA5vw(0>LJ zqh8MB=>#p_f*6T7BYFYJWTHS0EdkU?q!OUI@J;HGZ}5Hy5EPB=9jG}*za`OHmu{pKN2D6b$E2M22b?}BoesWw$QN%U!BRFm zeECSOk~)62`0|-tQJwhZAZtsk9e)zIyYjQG;S#v|ikC;*L;m?+%}=hL*Yi_~s?^-A zLUe=H4n_V#G{&dH4?tc*TyGslou;$qyZrTIx-`@6#~$Wf3(eNxecgF*HmGMfQeI6& zfNO65;Scu^e__sE_#8=tM^Ycnnvn9IOKr6);y>y%UG{j7wAZ{TH?-Sh?SEEoqu#QC z-_W;hCma8^t&~9Awi$2bwHrlydhJ#bwWL5_RG1Qk^?JirKJ9fR{?SQwfu9H>I(_|m z{D!U(v;nv1vb%G#e|#|(3;Jns($|lcWQKCY@y*6a@K4^~{)R_}5{v zDrNlO`v>Ut4U(MtsJQ!4l7CYzY*SDY%53VQmW+Dactc8Giib9sCbY;`8v2{TKBW>F zcj|ql`)rOoV3TM@P=`2JdQ=yhJ0uYqQVJ0Sv*~NVRoU6C?$o3$H@~}wpIl901zl`> zay4EYw#RK;A;K6=b3_grjhZ`K&4YUDpAWbG@}`9e#T)RZor47YjDN&c8siloqBCAh zdCNZK?|SzxI16(1l*{H7jgx$v+qPCEho6@H!WUp2LF;l_O?f(N%JS-#*h5-jckecK&p%LNp6rG`51odOv;Fy(pCYl# z_NSkIiuAV0N;D1j!+-Bix_;|>d_Q_xR*9({@!aWhPa3vb_v(9KZurgIBe6Kl^A9O4 zEJ%4MT5Q|{ZhP9?!anzB3AQ5fp{>>-*6{GdE9_|m>*7cH2+LFDkB%)9bTr}UVjM3M zac`81qf6NyH^B{vuM^I9*28bH!%uo|I(POA>j^HG|1!GlV1F*WB{$OxTi5S#xB>Lu z=`Qy?pZ0_RG5ptV&p6?5NJL!TwuO|%CaiUn2>`aqRYd9>B!Lzv5OaO!?$05snzf(n zUXQq2VqBx=|7`-7LOh6kM7LQmlmR%6Ux8roIE`cNgr*d{H*Wu#CJRd#Ic|uX zo=aFGp6*?VX@5jhZT9{J#1W@umHG0)knwP5Sd8AkW?p zDUCF3eo(jQ6SiyChjO}JBEjcBT}&u^3KlPOdi$XTGnY$g5Dp{GJnxak2Gmfx7*|P{ zAXJl*mr}5L2+Gp5eE=;NSa9R@>$#VFX%HI$j+dBe5Gw)5m&9ohBY%6C*Ih_pGX@sb z)fDUn9i~12J4}g);3VgkFJxLmF&$(RZp~72T4b0E zy-8O@FR|RuiIZr8ZuCeU5Ht%&v&J2dpi8*woeoF9?2X&=g_I7^?G?C%NxR) zHgFNX+%}J{!xHd|A=ExW@#RNuvRAJ&Zi=^kFv9@d`OfRjOk&tMvJ(9}-n8W#Fw@CcX{w_w!lQ1Rnbuu$wOHuV4_gtdl^;py2LH$qGLjAgjsO|@ z@5+~q*&cq5*ESZ$3jXG|eGxN%A#?k!z7oYvE^Rm`U^Rvi28O+L_S|>D8D^a)k4(ts zA8xm_2>#%6^W3WCxp`glJ{34$yi&SVqzHi|Y9uj}dZ#E$>Dx4-qZNXPcGbs#?Jf$Fmvs+|Nk zt%5O%ZWa7!Drc5zXPEiQo2S}2Km__AwNAEkOQ%p%He$64X1~fAu-Yz;K)3}PQQO*- zDmD(a*Y3)%GSr1S`W5g2O$80yo(j z-yY9GBL8{wCt+q?(|ByYqk{qF&9z%rhlcO!_+ZQ&?CpkWv$Iy7F+V9f3wxfoyTEZh zn19A!fu~d_@U8!xu-x|EIc5pvvxi7ggs_f1$(g(B%3Xa5R{+C{I6uI4mEO;8;3dDG zVVQYj&i3}Uz6`TRu&GQ`x^G?$`)!~;p%5XdUOLcVnSMQYpoQbzo~-lc=4SlF*5Zh! zffi`NGmJW5lb31_Dv^XNTU2uyKYyV;tq^R4-@ZLuIKEBXE=h+=3vOJVV2RCL zexao=D#bH|oa+f9hhKBrS`6>rm3v?s{0(`BrijONdW8LRX0-e#J#To20<1pxCmfnc z+|&^EL3ssbJ}IyCb763lF9k=QXzzFkkk|bXUQK?6D!wL$geJUm1y&L>CDQ(4F@Npy zqdLdur_V4!PRRT}dgrWx3bByc{C zwBqWcwI1wm<-Mv#x$LV(1JjS&Rl)DUuJ2PB`F&0$c&J~1;}=RY1f48c$bSZlZJ0-lm2}SrW9Bpb>kVDfgQYP`5zE@90 zZ?1U@F2J6BCnLnE9}&yfxqpg`BW<-eiSA(g?XaJoayo-Lar)5haQ^sq?$MkB%5uQ8ZE3j{F z!6gsu;E|3h=(v?(DlKux&@2{{F+Gjt_h4kv-g$(Q@@;ztF@Dh8gMZvfmX~C(*Vplb z*48|b zxRd%Q&@<*7#!Ag*Le0pA4(DsYoiOR+R^65TEvZ7!ppzL=R>iQ*;SVz$57~A&9B+K} z$<=)E;IP%MJ2O#e6Muh^<}w}6$QSA^#*JQS@ocdpPHT8DexsxC3brAg-srz%G{b2%MXnNzh8M#woVY7@G1%N|!GRhl z8Z=_1)~y4yoq=EA8gfJ-VrBvW zzY+y89O^_k)S2Z_$4fcX{T>;5-B>(zV+Ij#qq{!d7bH>iz$Sr#P~k@DR*y~H(eQNj z7-CxBbCU;jdVfSoz8?2Y(1!T%)QU{H4ju`2mw`>hI1?7GphD$*fCkOd^6d4)k`cP; z3_YAMN90bPhPt(Il(9tR^@Zt3E6m}Xc+zwZ0n5qf5VJwFIgqG8s=X@>-VIoAoOPF( zIFBM9lBCm&CISa8zhG#MG4e)pLHLPX^t=n7k&IZ8A%9Yj`f3c?nQtHAu6tV|tADJ= z{gIxoG_`sinpbl=`q_5pjsoh6@dqBU>x&mXO36WQWeFweD``eHCOw|uJ~9B%VxU;O zGy02%ZqUf^TUew+uyVs0hyDv_geIHZcvRQd@|&KCBS5Bvf?&@6I2bYa5c8otg_(TmfbmIHKxYU*$(F9 zO+W$5qfRPd(EZFvbcOv@b#d&~v&(UB!@e11@N-LrP@=O={k|UJv&+iOr$E2*@JuB$ zZnW(T0Ukht&R!(+WY znq2T|cr;<5!?HE>K2Y201QC6{IP>%4U-SBU$>bzV67{Cs`~qL(*%{Yy8`-aPxJJ^1 z52y|)_6t=4T8uXn!`5Ugf{8OGEn+x`K^ZuUcIYBvS&2!r=n%*A79I%95Oy^)QeG1B zf`5qKo-)^3x9musq>O1up@TvDf>xP`&ElIYN z5-JFNTG8l{bCT$>S_h3C(!G*H#G7ucw1PAv2q>7`QO{TNX(0x4vZ4|1`f#TDc#$Mw z2GrB+j)zV{HPZMASSnQjmv+(tmg1^Y3^x9IJ5oGq*J2w;iCiWm)8B~Q{xL$ZXT!f+?Ug(${`czdyBLhRIE9sL_2-v}6I zINW2{|2Z=rHruq*pwv(eU7q?xDAuQK9NsiYoR=SUgy0*Hq=ERp9|9?{QnrIGP=6i* zCbaH2wyA#x-!PM5J-PId*ha3=Cb&`xFW9wdbRY~$FUUsmQ7p__=`2;Wp+ z0NOY+Ua-2w;gKNIV(C-Adh|8g8x8uPjZ|@hlg3%@m_n%t!o0qFLAPZlonhCKDy3$G zQDvsS0wT`OLW@bIdzQVUlg<25)lkBNjFtA86Pnh9Hibb!#ZigIxe_7>-KgmGWuSi) z8|0WAeV!e^7?Appw{4RWv_v1nSu}O;`mZ*s%-1}n&3w^`z9f3>67*W_*RA#;LT^vz zZwcZng9V*L8jjZDkaczajzG#AFz#_~=hl9|)3-em9qRVkz$6o=Fkh&T34JuE7=u*x zG3s`&f}}>>wEGoo1s4@RoHwNV+BJXdd!rF3HRtOgeXjT%=_RD4!Jv<*(oikZ0A}qw zP^aG^5XeXd`h9#Kn}m)W{?rh>5a)h`j7P`-$8P?!_UU$7#Pu;x?FslaK_>PU$cYRx z?|_SoQp&swM5TF*bC2rLu@Tkdb0n|#%dn3zH`>e+NSqC1F$R?4Xawb(>i&PPbn4y> zF58W#uLxoR(IWc<;=C`PAieH1oZ)zB^~a}C?Z>AR=m?h9 zhFLYL?#--)77M3M9YW4vSrc?0d@AZ~9MfW8*IOkH)y6SMG#v#;km?YJol^^%dX{={ z!0aU>{Bd#))Pfx&mlSF~1+^~AzOySV)Tiu2>Dqy6A)g~;I}5k= zyry?bN5PBweY5eS=s}0c8Q7vHx)YusSZAD+87I#8Ax?GAoDM1Z)?xH28(Ui&cz^4S zTCy5&1|&?B<_0iK%!2HE>{-$H7Fs0_1oXp)k5)7yW+@RSfh8-vj+Y@}-5-24-XCmk z1_w0PREI{^*J09Ma|%?h|3a=u6&Hw=9+Kv}PG;=x-Qf&>W|S~+1SGegcF1oj*B(ub zeRcPyLCQkf5AYmL@|M*gpjqh)pMSwtX>U-fDKIL7@#A{@k9tN+lct^0j36e@pkE=f z3%%UN45?-}ATw~*9z=pYv+H|?lLTS5M6$Q5mpDtdQ5xI8(QpoR$+JFq6Zr|L$QcMA z7fqoCcjhD#QK1N_l5MW66~9AsNOR|;lWDv=Xwcse-iMYtDGZ$Vh=sv6v42*~pUrg9 zOrTw;u7_m zeUIk28iCKh@=PNbT!=yMz~K@JrPmjBM-B|+>lZ@b3J=jaotXi#cL4rL%{yt>C}SP#(bnvtRh zGg668p%Yo&w5_?sBVyIcWDJ0&iD}X3LYI-0O(i4~o;&LJ* z;EP;8q_hJP7|V4txPLc5cvYRIO0TSlVPXP^QcO&G%ZSMu+mG{WnYqB~sd{z~!cakb zu+GK1akdeAx7~<0J>5R)hD~;xu5Pn=Kek`Dt)aDsEpyq~p*wykJHA)i@t_8`-SJa# z&B}H!!H~?ZrPQ+LgAW+zKi1s;yt`r zcz?J$AI#x3dwqR^>plEE$MvVMeb{#vCi|dYoma>Bf4@4x z-;+0#X~1*U_Otlhc^Jf0P#iX9M>cf_dpo-o{eR2-19$!I?MBn0I4=WT;sK|8~|Lh^Il~eyV$!U0tZnSoqv#lZG3{lyq zRJKQDlPz%B+E0)B8F4>b!+SmMYioRO1XONf??`b6LZDf*IF|#xE|)8P5Fi52$(K!i z5F!Gj`j>Hi5JL_za&urbGm!r97Vh|%xR=6x5GN14&Ye4Q4=m-$?Ct=1g;AIIeGn{v zP)&6pa>refBM~n+SUeP-=t?T6XTtYw-x0h?m=-c#Q254*GoPFFDgC6S*hRF@Mbw`dVuoNyBcnyqH{h+hkt??wH%F$B@K@jNA zv;M1zD5MwxfTc=e8hgt|_MSkNb#$U5qt}Qz8U&m13W!Ju;a~yNR%-R)FaW&5jrFUw zzl-z7aXAi9%`g9M*nb9`FwT@v2AeUlYaJc2q#K%%GOW6^iysDYybEb5945|x5np~u zR$sWC%=Nv6ia~AqTZPzDHxti5J@=uritRqppojC$DVu>Dq-{Ad?X;DNLQw8o@S zYFFA(#yLw~GQ7~YSo~SxPk65(z@A|5;^u014mE!*HUCqo@Y~kn>|%zz%A9XjKskZ4 zltb98fPSmHJ)Tfq_i8d}Sm$;34s<3|l~UW%0JFy#BK;@#TuE-u>5qMX5~U@N<*M0p z=iNI>{aE!t4~|~x7a$XehH-M=jQvLA@EAku;E3VE6ZtU^dW`e-^6UqvG37IT)t~{u z_Tly9-`nBQ%_0alA*In1{A;ZJ2zN^;xE{QAr9{to%eWvRQi|s@lV6D3CMBS-Po64i z10E64Tvb!V2pd@7@h`AmxYPNF0PRNzJ`E~FxSTGRwHu>3A~_Js?TH9XhQ&!)#)9FV z*g{PfvCN1)7bEtQhcIH3P~&h5Lf}yB=$1-sVF3ACPrFlk#W3Sp8-@?_ROauqX&jgC8Zv80i!G=`xE5KsflkLnh3O#kua+UC%J&o^wUR&VW0z`5?%usm z2ac1Uo%lQ_XWFms@6UsmrhyP45)5mEdGG5Lk|&Na!pVDAbuf3=H+T5r+?RQbRA1E@Qd#KQpVNh4h@eF?jfjZ$C7$QJPu zG$Q09$dIDTk-e4(EX&({>$Eq^0iv92TRbyJ%I*JQ8D{5hMd zAH582N|XqjKMxhM-6o%>5C%>Je}RrEfEFq*Vu2CnLw`m`GKH!8Mcp4>5agGXPNfEa))1aabts35)pZV`Rmx`XvnZt54YLFlltj}{S7q`f zREd=%ZhsjD>DhYa`L*;=ks1(nSA!jc;QGC^h-fdFoShLOeQd4#5XlF3;%0@%O#R4o zl_$^>5x&?{9}+fG`J@L@wo(szcRvE5gn>HhWJWsVNlbM~ZYB{@zBGeBfa2^&lgGF~ zfl=h$wJ9D8Np}=zZ)1n*Zjn3srGr!$7!eQ>Ie#G7jT^)9ZURuF_7SgYa)H!Qi4t7# zw_@<2?Zc=ZDC4v?22Z}pTuZR}-=Q;*d+HN1Hn7PIdkA{{;F=(rg(uVRhU8N!woKzu z9keP#(%g(iA2Sg#lbJ_8mehMMdIO~QdKqd zwz3qV`qP?>3k7}t1SWuEGBTv^&R_LRbAPWxS=NL(U(sdEk3X-c?*^0%nf3#TDk@G+ zdU67{_Pq>?U3yL$tsl;tf14xLI5t~#29oOvKS3dxHpmn)Lb-cRx;RM|BLgU+6$@$v zDWYZ4fQFXD*;2C&<3^%wQ6*(s49J2T#WxrQ9$p&tTe+oY0BP&pMsh3X{HCP>H-CzN zQVQG5LZ?VNo*>9Hyt-y&&3B~B#JHg<*bz(a$^&q33T2zEW3XYVjyfUROIPJ9DC&}? zFo*#+H6{%rqp2)mopi3?d_y=#ihJE=3)VA)qJoR}B|cl-zii)uXY}~*7lR9)4ig_k zw2)8{!yq{$HYzAXNKJ|`2LO#h6MyMevYOhqkkEMS)Ra_@xhoL}(Nn+-$`W&y%=7cnrSAwX~s;JlO>fScX2OpO3)MbuLBAm6usx`OJ^*lLaIs(&5meEVWNI~^Wl z7p!V7;eH_PM=%8#V-So5{Y}Wzh;k1Q0#7dmt^f>PG}wK}_sUF%vL#$R=@os?)QeuW zS_0iMcNt6Qo~w_%@%?ld{C>gFR_GZfozFLB3QOCA_B|Q+lak#xax60MxU?NW07=On zLeiy{ek0T;@#q4-+JDjP2-EsKOKt92Gaw+ikUU4FzYZR)L7a=ystYscvP;DGNR$!T zkd*sDsh4S3SZ`(qDLDm55Z8>cM)xVL0ftcplY0@j)ank)yjv_s@7#xCnnhS#6N=(K z%Z(497@E>Q=m-RN@PKTJqU$P7rx$YJk_rfjD8s~aUVTpCn12QC+`Iy?@m?iS&?#9> zq4;m9rtqaI=KKdS5!atY_fDdFkD`0$(Y6an{hOo@8Lmu?$zTJf zlm;SYfrQF6H|H=EqcSS)X+XI-Pdys#u_2hPd;#zTY6vzdS%)0;%E2OJR%r^=e87n! zymms@kd%1swSShfe7!{Vf*}`G=hDHF9U$80qHbn&f5kn+aZn|fH@GkBe&)kzEr<4K z3|%GOYIvcDVUCxCDftDFuUJXP?lOGC@HE5m3j~U~d^L$Rwt_SKAv!H)?6s+JqC-K0mDa{rjPu6>lbqedB1V%BnFXq7mr6&Gwc?Q|22xzI*u|31Z#P@f6lE&$fX31f;ML&#GnO@lM__&$%KMPLukJm(4HDgyhHIfFh)YCb&2hY0Xy4&Al6|Kgzd+9s8pKDKGXaG1 zxE5}=(kzRiEn1__-e%u-xhaxTCg;Xh=LybYJ)}&_+1G}P2aJo-Zex8SEtl4MI0Bai ziV!CzQdyf-k9vW8W;HQnWYQuAi~ruo-xuGI53#LBvKHMZK}-Hpz3G=yiV!tGqzS|@ zq1b9=76>n_;w1HHk+O&$Jcn*@p_AD7iS&%z&qeSfgI=a@ulD<8w=jvl;R6n2O3ab6 z<6MA%cldL7)ZA?+(VdaWdQ3!3=FYnYfcR z(YBhb1Sl_cp8AW7=;a~ycpl?PM2r58b0G=rIHn%2ZSaADG2(}BFL1&@kJ%@=ZyUfJD;dI z1d;<%eLD3UN3mK9rt8cp++LNI+7?PnO1mcAo8zsW- zvt@=$$$!_{MP6SEa#whUqTl#sS3OFso_-cMy{U=+lt%q#wwkOL%;7sc99UHD?J2k& z@S~(Eh~AQjiRqLGiaecUVf$=FS{8;MzNvIss6ww@Q?N3Gof-av9ZosUUaaDCpp~DA zRSyX)%eYAN7`b>kVb$2n zuYYz)E{h%oY#K~qAf@l2UR2-!P?N3#f`U>7GBW-!9$gkH)LKCTu@ovyWn~WgNW-fO z(%~{KiR9q`>+N9A%j*!fJ*5l*`I)K(p&l|(0ds-Tn^`7`>T4G3U7{Ggd$~ zWC059^pD)@_4VGD@`{JM8@mwB!z+=fZr%zK`{1x`Yq|2c5o&4r3I{vS1_y06)PDlT zr&wM;wMi0=juEpP#~aWUI8CR0sjKNGb(P`l6mGP)*m#c~@+TSVDCyPZDK9q;gJJUD@c{+TO{gtAEXB!`cpG6w!gUPng3`dhObXaCFRy^DTdsqNWPibV{;ev7 zypk>iX=0=cdH<@qs6j$EUpzYw;B}G~;>ZXYjmlbmv$R!A04alvGn`X$a}%E$c+>t% zz{~nFemYdyuqNzAjO=8-Y{)L^@JWwCI*8(A^7A>?g|>?w{sn{p2@|;`fb(Kmnp1|T z_w+(=2pJ@v%#xa0AD{$*5SL$&5Goy5v~U9~C6e3cKHTxbWvQTy&jbsS;LQ}(hetRz zm!^;qMgcjO?T`=`e;zw;K5-P1?1EtmBk^T#tBnTfAJp>I^u+Y)q7lN#o=^5NPc zH4%Cs=B{WiN8UuJLr%n1uyHpWln~f_6b}l&TNnr1b5F_SPq1lx&GZ?#2bUl**2$)3 z@$G`NKmE={6bo6`v;u#k7{mqmzL*1;ia=eS;I#U*62Bc>eYp+c5Ah%!Nn#OUSkm{icd2XSlgebXiR!nq`;ovU-8N{i?>m*NMoW~Y4+ zB6wV-YpII^2eMRI7mB&!a^&$o`UKsqye~uf3W05TEfux3`gr+lzbE4AW&Z`d_kDfo? z_&cPz(c-6#ub)3YT;vA|CChT@On*q9-x=lRSfTRugT7{+?8Z zGuRp~^>fbX+cn5PedX(~alj#lRR>{7q9JqAHgXZBlLs5*e1y1mNX$1yihuR)HU8NN zYANWJ*cq9!jWoW0%J7K&3vUM(M(DJ2K;%wx=|vqO>2E9RfxQeg*-qaj+d0;77k{85 z2CsAf_xuAO5rnupMjE!`s_#5EN+P3qzu&?IzSG$8!CIjbd3B6`5K&bo^#t*@&Z;Bj z3{ph^6I^yn;XE#&0XGay(|@V0mYy8Z0}NHXG~N?Kk(}uM@P%O-agIq%>D7KXA)HqM z77JQK`+DiTESw_(v)k`ULhd=)J0pv`tb0JEn}VwZueW%+bQ|#Ko^aL{gj<+F#NMKm zHpdN0RY+mT>URUg?-nI1`3$hf8~7{;DlR{RgqU?_*=cwI9BM<)cYkO+U7tU4^%RTf zB5hK0&J8Uk=$1S!!G3bYRpqioVwfX~ppKAYAP3;qO-~V~i$e)}!`B2;LJ5l)0m=^R z>#s`y_oX4+R_G^t`0Os|@Qz_Gmoe;RvvrB|Q{H66yp*o9Q``tgzh)Z(@rBl`S<10^ z!`851vtk8)cN(`tUw_|FmF=99{R7^@E~_9GC3pf}Q`A-Scy8Lzaua3g z*$jfqw}S?!Z^TT(I`1-T@lJ7!<#u2;Gn;;QTZ$7%DQ|dM^#WKkUPzgA9^(ax{ zhYtCpf8YGj>JIOniJuooG`x3K@kMg#186q6=kAGvh7s1YPymby_d8^giCz5r$(11W zUpa{4ebzxIg@2Dx`08w<3DEqkSD!mdO+!NZyNy?W+xYs`h930mJ(vDPkE$?#D{F-F z-ST_Nw7sjY*r|gy`u&Oq;UAOdD2T{Kq{qlq)=(hP1`}Rd6)M(+W3e#wW)|oT9FS|T zazuPZq&S04iV6P|c}VZx_1JdEY7@9AQvZk^kNA?J#D8;~DDQ99`)O(y@wM=S;8i+9 z1_A6CN_hxMbPAr})#RJe<@qTmLknCFb0^?+cJ>CJlH*dmmuNOP(UAu1a_>Unpl>+q zC!Hp=D0}x?_uw5YTZkFt=3oc%WE4}L%PE7{tM`*9!;>Mx=wNJSv+eEf-WybM1^D0~HWdgZyE?1;(;L2qT4SlOyA?QL$VS|se15$_ej1|yl(4GU~(=qRrl z)=YspKG`p0AQs)j=jP$?Xw|)RxZ{Wx49kiTA__MEMLSL`ay1+J4i~0>+5Lr=bFO4! z+JDGj0*4o76={?WX^T>wRS?BEhyl$n?FY&i(P>V_Wh|!+_i7wgKGF$AJmLl`>Tk`Y zdJmbT-Nr}=dv6O_qKU+kg@b=|dX9n<-Npn_zO$$eVq9;$>Su=mv}AM=95PueC~de;XN(tth~^=o`0W`wd{}E>+6sqFQE&RcJB?x(^(cP$H(z7 ztb4Bg7py(tGqR94RIx-`24QfVJEexO#!XidUp#Q> z;3af~88!zB)_~0!SFku1kU8G7($48p|6`luv6S7+;}g>xAK^Ro<8yK}GlABwJ3@al zjIttbpw+fU5h!dG-jj1X(l6a-Mg!mi{_P2lvvEH7zEwG?@X7_c0{ z+{F889T?P4OHfcXmqD2j8-M=r-C(@r!BaeVDnKioc##_uH=}d|Ip1BtO%0qIyA_=501BgA~ zU6^HoI*S(b?DLnh0b)Z=vjKNJFn*H-8Ua|6ioeZ65rU z{%*G9^7ZT1{wF(Xk%KBmj+h_tlux>#Ew;}Q^dQsM4hO$7n}7FS02JO9AAf-h#047OKb_8aDo@47QtBrK*^ zy3&z>8n6~S$W$u?7k|_PpuxUtWE`bv5VG6IGum59eERNbwMVc-mW79yGQ)23Ph>^g z+a>D1xkt+ueRywO>^UU;`ElI-Zrnnqv~Jhgm1G%X1amAleILdJgV*;~atZ6Q^T$74 zKYxBbn_Zvo$n29lcHRpkTpR9ci;sUB29!!)&Ijk6o!QKH)PLP;f1$3xt9ooW*W@L2 z=+}DB(vDU}yGaAtEHh3p3zUfP3GXLa8{E3M=nQvKvI2AJnnnuF>wu^@C*s2xizDFQ z{c5DVw{Nf>Pg=+75|=V@lyCY-P9#UZ3Wi9H2#GYP5u=2C zxC6BzCFxD2F@7jauqON{`nhoZ%+ZgDM2b5I+=+p(7d;LZMm}!!wwk9~qgH$C6fShZ zLCXpe@*v9Iae}u47R4E-)$V-rdVx9h3>I&ZZ6O$YM}MK{gPrFejPRDp*BQHSa~6G@ zFfSpKGQ4DvBp(5TP>kRW{(yrF%>pvz!%x*5Y)8~7{Hn9(@^K6tHKdg0UaF=Jvh@$w z#7UD%kM$^Oj4$;Joe+A)_&XPyd(t=FQuQP^3`HJA16cIG3gPyP&3xcp zFG2Kfj0z@7Gy!BTt>uHz6hk)gq2$2CCXuLJ)_0JJjQf*x~$46O8Xwn?@(fvlat zVB0+WD;M9x-dX6cLxj1^4 zcz@=QqfNzpw5Yjq-Ws8rgrAPWHAzuLJN>)i*-(Sz*@KUGcvDK3)gXkC&t$DiL^#t# z3YJHz3h6xp40UQZi;p18dQOLd15fohhC<%G=7H*z6O=pj_l%~NE=;9#aW)wI^ zZ zOdM}s_NFPD^n02Xdj)2=w;VH!pvDdgZwC#HPXa9~0ngSPvDaKq#Ut9T+Z^ecq+B_l)i>L#pb@KeD`)HZ^Ic6x^tC=BoxTv}ZB z015+CQUnV37>&9FmzAFoHUZX`%%2b`AK3M}{rg>9EdZu&eA@8(fd(MDy}aQc_KFQh z+VElwmlU87CIjp*^_M-M5G{Xl7S8DzCo}=nOUjnI2Sj(JjSu7G`x9_K@F{xjc#_n` zQtm>eg?0qa06xL5^9e}D3w2cX3L5;%Po(l(X-s(nofvB_R<=IfI6C0T%jC4wx5CAp z%BqUHMUt!3XezS?lpHM+l#Dqf1fcl%gd*$Y1}R5MiJs57XY#aV%M5?8#z8qtCTGpJ zOaqtPEy@k;#;^3b+}W3ona@c@={n4xQ&zS#7(G9eR;VKh47hTY_%0Q|OxD#FLj+s! zL6ntjyT-^hFQMfHbPxj9yV&>caTbJyRizFE6i-6ufSd@HHOEph4=Sq0BJ8}ig&Y1U zV>^+)IjDGz3o3nWxyXK zmcQ8#KI)0vx+N7-KUsU*ia6SinOeiS4%{E*b z-Ia?eDSB0!6;-0nphcaZPA;&G11`1XB^8@avkE5O>%Qn&Tp_GXC7k$g|8+^#7aj zhh?g{pi$C&j8)-(IV_bHBpQSdev36LVnE|B_4)A=u(L-shX;+SsdV#HyVs15Q57Q| zt*G@if#!*4j-Tg?LpaLQx<7#@8Ogzo^tIH_p3PE^PbWxy^V@<#HFPDBA)afnrg#Pv zBSz)@%u!}g5`1O8UkLl4O)2k)xpY2@)+nQ%wFEqH=khv#$VmkI{9Qv`h8xyec-%4N_NDeCV?2nuD1AN5s$ocY2xvrys|H)$$F^@`7seIrZLtj(?(xg|# z_=jRahzTcw=7E$yfP;u9>p&I40OgpfS_ESgqTiaT<~l~ z(L5r5d&@GwY!sp+RPU+^EY*+2Ut>&P0~sO564g%C-LNo-rh8F`T2lZp(>){LfBR4)Yt?yenS)uO=`YoI}7w+2%e))egR)hn` z{%7Mv&{V?c;=S!oZuS|(+5&vpD;<(5tg`ff=RtF{wb$A?<;OrKWdx+-3&3whhgWn= z>nAfo`Aa@_vJIvW2+v6FDwI47u|H0hxwQ|f9-P{7N+7R^)9(O03h&ypPV;>0gwmcJ ziI1kB_(wZ%VW+`gV!7c_4opm0)Z9CI^AY?M0PLLyA5SjWzYGPSKU+teFo9e?AW0v8 z*}2>(-iK~3H&F$qg6adZu6R5!Y;k*x*zS>W27ZB%U4PjaAHty`46AkZLG`)2+h6SB zzb`g+VXpe(%P;81m!E(3huzPRY$b|2!5XKF*5y|Of*yQ@P#xL_o`(l*H3wUl81g+p zzxCnxg@+#_kdb@ZqgTiaLIVsaWsLBD)tNU(y)44KFR_E)+Z`M;ujMU_RYbJ;vU}Fv z-PZwR5N-OzCjg%B!cYHxwROHp`aCyUhmsCr(FcoJbt2Hx;H@7C&PzGXpz~Vg&NiMf zvd8BaG&r+z+gl<~8SAx_R}jP^1?1qF2(U%YhV=i~I}`3UjwH{26`G#bhz4kv?4}Sn ze{&ro<=ku6fJm5NZcF$6&}gnXASS$0p5Nd>F2l)U(K{PK*RsNYY=1ldnud|Z5nLm;haU=YH zs)T=Z*)+Z|ap83QVa8%v3Nq&a>+S>=b3r)=XF+=>swlP5>Y zGN;c^kBUuB#y}HdOgZ$0?1}?TsEiTBELy%GmJA_0=d1g#klQFqvx%XL+_BcA0J2^+ z3ayLUK4(@{ZJUQe?}vBkCbJkc-T=oZ`6}`;EH`CJE9a5&;HU_F@PJrae;^H9MA_c=tf zwc8v9&OXXu`HtvvQ(`uGe>cDDegiAfZ1_bk;N}AA7~Eidu5mHX$&fNirM%&qD_d6c zU9ml5Ow%B&V42~Cq#k^VT$jP(422b*5U&)KQ8eJebg^6ouh6e&$MazG>G?0ujs-zt z7R^rs51$5t9kMMLkLF}&7Lf9~fhKWVN$fgEOc_EPmm^9p>S@@?e~NUFK1ku3>?Z|o ziPT=ywoQ+zaT zHVXR_OQ|GBFS^%vdP{c3YRw-8@RAm8;lH8sdVDe`%3#K7Lt$g=XPZ{bkfFJR}rE>Z?u2(L+Tgux9oVO@HAJ;H?*#qCxV} zhlN`I*;=e*lgET`$=RYy5EB9z?!Ab5BzLn7y&;%bkGfE{2;3RhIImoggXequg-Cgy zlhS-%9*mlM`*#rE-h426`Nh8LWg~;Qa_9i3#W(&^+&F)Z|nE#f8SeTP(}0{1x^9!wi>toPR4L&bbqjSA6<@uhn^~B zwpL*8+gO5R?3)8;k+^4{4((eR>k|Q@;XmfP-BYF4F1~g}jq>L#wZ7N4{Qs`&-F?fy zr1cIhf5ft8xd{|eZU{6IhTy)nF((aJQA^)@dHrve5xq``zP}e4vlV`&v2}R%tIF@E zcJVO*^Ov2lyh!hK*wQU&@gL zze|HRH_=_Z*l5o3Lh7^7dt+<&U*7yu*)4`7f3D9MXp)nEndB?A&-yzH=8k?l{EHS8f?{9yfhnp2jJ7P5 ze|-$*Z|wvzDzFw*xJv*+1hHxJ_j3`8TJ`nZ1d@V6WR&p7@vN-Qs%7VRw`U87A{N^F3Vcl{8n-r{X1eAf5C0Sy`)N15OT*_2$@?@r8#L9f6Z)6xco9w~^X2LJ$ryG^Z`?BmD<*8;_eP1ge0Y~P-tdd27XV25#|4nM+;UWQ!L(gjo4=<} zSbT^=x^n4RcIWlgMp(a2Y2ZoM}4KaFHnE_fBR4$ zOPaeZs+ZqJOSm=s$Lb_TReT?0s&4H{3?nR8f?>{<$vw|DVOaDYdE7auRd6ciK&0M0Fq4=W|PnwUg^F~#$W$j zLV81aLwG~?4B7Xmi^J28itIo9e>0btz&KRBiTtBG@%#DdYYUzD5%=Q#KX~vIWhk8yGr;LZ_1#+fV@>ec9Em|pdtB%aKLiKp z?_!=d_y+#nkIU_wKteX*k~<(6RJC|pt@q?VtSd4boV_~p1ERkN|aS65-}C1GTz%>N6Vy$P)k%y_$`ZU zFQsOZw&|qMHeE>4bNHN>OVVPRLX@PK6CxsGe2~ghpIu)Ox?Z(H5ek`!b@3#89~~&c z#euNzCDV99e>n2uK+Ni7z;>AN_U&PKtQx6PSBCPEE)pYr|K=LHNaA_#k()X+Wm4s@ zCBbG)f5TppL>woc${wX|0Bb9hB=n6f1O0S&Vpc^f}PDj&g=g^~73)WrTwe^`#1H6n7d2Z9ncgqKd0s6-KG zGb0driLb%`;=kYQ-j?cA7P2S1L|vlr+-Ti>*zD~ue!$yCSA!C*B_fW^FofmSl`_|q zOpxnT#l@N+6rxh19{4|PhYhGl*7d$p*bE#t?Sf9R>AuaJvTR?5Uqm@?BqodgZk#WlBj z#eU69bmD%Er_me#gz0G9u$W0~-mv6-S>KZ@dW`4+gb# z5luFp@)qpuT+!8J!^YE_s*M*CT`cinq+_@7a4y!y^W9{1uC?*}hubGxGB=Bv@v{w+ ze}vjo?9Go8W$zks^w=0l2)$x2C&;}iGG2v+Oo+Xwje?psm>M~o7s69+Tl$gn)7S1i z*4|ZSAomd_Fyd{qkJk61-&4*MryPOrI0W1CIDH&$sBy=9Oxay}S^V&K%FHDyaegU# z%{T#C?(tt-oRpkC*i;tFTPZnv`}Py6f190rvL0SSn5Ot~){a#m-`&D9ZLT#V-p}-O zwL6_{6<;bRKMN^Ok89oLoDoP_Mt6;CP9ZJA6qc=VB#$VvuLa~xL`WMiI_WLNsW~N| z4^nX5JY1Pqb6Q!?m-UmfjxXzab*MT`c_E?w8~F#2PrpZT>Yf4v87 zwEQg4GnjvJKln4vKNH437$Yu!hyCXUYtKK^`qKARY+)n7`OB(Xh*DOT8u!f2e`&MM zcQP;F+XrGiV$p@?fothY2jX6j`3% z$T;$X3pxHQ;o5U1KnY95gebe%^_UQE7wegj z?4ylL2#{OAgLVlFh{>N4z{`S6%!iUzGU0dw9{rCWDOahsF-t9NHUK*8p zU-4slDi-9??r%Me@tOf(y-j& z68J^W=L97Wo!JbNi7R51F%UO-T9~Q45L(eDQU3}Cl&X50X5X[@5b9DKUfL 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 diff --git a/tools/server/webui/src/routes/+layout.svelte b/tools/server/webui/src/routes/+layout.svelte index 075bdd356b..b08bd59c15 100644 --- a/tools/server/webui/src/routes/+layout.svelte +++ b/tools/server/webui/src/routes/+layout.svelte @@ -44,12 +44,12 @@ } } - if (isCtrlOrCmd && event.shiftKey && event.key === 'o') { + if (isCtrlOrCmd && event.shiftKey && event.key === 'O') { event.preventDefault(); goto('?new_chat=true#/'); } - if (event.shiftKey && isCtrlOrCmd && event.key === 'e') { + if (event.shiftKey && isCtrlOrCmd && event.key === 'E') { event.preventDefault(); if (chatSidebar?.editActiveConversation) { From aa3b7a90b407c556778a7e13a4b0d28cf964fd1c Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Sat, 8 Nov 2025 21:54:14 +0100 Subject: [PATCH 33/69] arg: add --cache-list argument to list cached models (#17073) * arg: add --cache-list argument to list cached models * new manifest naming format * improve naming * Update common/arg.cpp Co-authored-by: Georgi Gerganov --------- Co-authored-by: Georgi Gerganov --- common/arg.cpp | 14 +++++++++++++ common/common.cpp | 33 ++++++++++++++++++++++++++++++ common/common.h | 7 +++++++ common/download.cpp | 50 ++++++++++++++++++++++++++++++++++++++++----- common/download.h | 22 ++++++++++++++++---- 5 files changed, 117 insertions(+), 9 deletions(-) diff --git a/common/arg.cpp b/common/arg.cpp index 5597de121c..a570810281 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -740,6 +740,20 @@ common_params_context common_params_parser_init(common_params & params, llama_ex exit(0); } )); + add_opt(common_arg( + {"-cl", "--cache-list"}, + "show list of models in cache", + [](common_params &) { + printf("model cache directory: %s\n", fs_get_cache_directory().c_str()); + auto models = common_list_cached_models(); + printf("number of models in cache: %zu\n", models.size()); + for (size_t i = 0; i < models.size(); i++) { + auto & model = models[i]; + printf("%4d. %s\n", (int) i + 1, model.to_string().c_str()); + } + exit(0); + } + )); add_opt(common_arg( {"--completion-bash"}, "print source-able bash completion script for llama.cpp", diff --git a/common/common.cpp b/common/common.cpp index b0591e84b0..a8d709ab1d 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -908,6 +908,39 @@ std::string fs_get_cache_file(const std::string & filename) { return cache_directory + filename; } +std::vector fs_list_files(const std::string & path) { + std::vector files; + if (path.empty()) return files; + + std::filesystem::path dir(path); + if (!std::filesystem::exists(dir) || !std::filesystem::is_directory(dir)) { + return files; + } + + for (const auto & entry : std::filesystem::directory_iterator(dir)) { + try { + // Only include regular files (skip directories) + const auto & p = entry.path(); + if (std::filesystem::is_regular_file(p)) { + common_file_info info; + info.path = p.string(); + info.name = p.filename().string(); + try { + info.size = static_cast(std::filesystem::file_size(p)); + } catch (const std::filesystem::filesystem_error &) { + info.size = 0; + } + files.push_back(std::move(info)); + } + } catch (const std::filesystem::filesystem_error &) { + // skip entries we cannot inspect + continue; + } + } + + return files; +} + // // Model utils diff --git a/common/common.h b/common/common.h index 54b7849b17..8540725aaa 100644 --- a/common/common.h +++ b/common/common.h @@ -611,6 +611,13 @@ bool fs_create_directory_with_parents(const std::string & path); std::string fs_get_cache_directory(); std::string fs_get_cache_file(const std::string & filename); +struct common_file_info { + std::string path; + std::string name; + size_t size = 0; // in bytes +}; +std::vector fs_list_files(const std::string & path); + // // Model utils // diff --git a/common/download.cpp b/common/download.cpp index 02d75fc0d0..57308a5c6d 100644 --- a/common/download.cpp +++ b/common/download.cpp @@ -50,6 +50,22 @@ using json = nlohmann::ordered_json; // downloader // +// validate repo name format: owner/repo +static bool validate_repo_name(const std::string & repo) { + static const std::regex repo_regex(R"(^[A-Za-z0-9_.\-]+\/[A-Za-z0-9_.\-]+$)"); + return std::regex_match(repo, repo_regex); +} + +static std::string get_manifest_path(const std::string & repo, const std::string & tag) { + // we use "=" to avoid clashing with other component, while still being allowed on windows + std::string fname = "manifest=" + repo + "=" + tag + ".json"; + if (!validate_repo_name(repo)) { + throw std::runtime_error("error: repo name must be in the format 'owner/repo'"); + } + string_replace_all(fname, "/", "="); + return fs_get_cache_file(fname); +} + static std::string read_file(const std::string & fname) { std::ifstream file(fname); if (!file) { @@ -829,17 +845,13 @@ common_hf_file_res common_get_hf_file(const std::string & hf_repo_with_tag, cons // Important: the User-Agent must be "llama-cpp" to get the "ggufFile" field in the response // User-Agent header is already set in common_remote_get_content, no need to set it here - // we use "=" to avoid clashing with other component, while still being allowed on windows - std::string cached_response_fname = "manifest=" + hf_repo + "=" + tag + ".json"; - string_replace_all(cached_response_fname, "/", "_"); - std::string cached_response_path = fs_get_cache_file(cached_response_fname); - // make the request common_remote_params params; params.headers = headers; long res_code = 0; std::string res_str; bool use_cache = false; + std::string cached_response_path = get_manifest_path(hf_repo, tag); if (!offline) { try { auto res = common_remote_get_content(url, params); @@ -895,6 +907,33 @@ common_hf_file_res common_get_hf_file(const std::string & hf_repo_with_tag, cons return { hf_repo, ggufFile, mmprojFile }; } +std::vector common_list_cached_models() { + std::vector models; + const std::string cache_dir = fs_get_cache_directory(); + const std::vector files = fs_list_files(cache_dir); + for (const auto & file : files) { + if (string_starts_with(file.name, "manifest=") && string_ends_with(file.name, ".json")) { + common_cached_model_info model_info; + model_info.manifest_path = file.path; + std::string fname = file.name; + string_replace_all(fname, ".json", ""); // remove extension + auto parts = string_split(fname, '='); + if (parts.size() == 4) { + // expect format: manifest==== + model_info.user = parts[1]; + model_info.model = parts[2]; + model_info.tag = parts[3]; + } else { + // invalid format + continue; + } + model_info.size = 0; // TODO: get GGUF size, not manifest size + models.push_back(model_info); + } + } + return models; +} + // // Docker registry functions // @@ -959,6 +998,7 @@ std::string common_docker_resolve_model(const std::string & docker) { std::string token = common_docker_get_token(repo); // Get authentication token // Get manifest + // TODO: cache the manifest response so that it appears in the model list const std::string url_prefix = "https://registry-1.docker.io/v2/" + repo; std::string manifest_url = url_prefix + "/manifests/" + tag; common_remote_params manifest_params; diff --git a/common/download.h b/common/download.h index ddf36155ef..45a6bd6bba 100644 --- a/common/download.h +++ b/common/download.h @@ -8,16 +8,23 @@ struct common_params_model; // download functionalities // +struct common_cached_model_info { + std::string manifest_path; + std::string user; + std::string model; + std::string tag; + size_t size = 0; // GGUF size in bytes + std::string to_string() const { + return user + "/" + model + ":" + tag; + } +}; + struct common_hf_file_res { std::string repo; // repo name with ":tag" removed std::string ggufFile; std::string mmprojFile; }; -// resolve and download model from Docker registry -// return local path to downloaded model file -std::string common_docker_resolve_model(const std::string & docker); - /** * Allow getting the HF file from the HF repo with tag (like ollama), for example: * - bartowski/Llama-3.2-3B-Instruct-GGUF:q4 @@ -39,3 +46,10 @@ bool common_download_model( const common_params_model & model, const std::string & bearer_token, bool offline); + +// returns list of cached models +std::vector common_list_cached_models(); + +// resolve and download model from Docker registry +// return local path to downloaded model file +std::string common_docker_resolve_model(const std::string & docker); From 0750a59903688746883b0ecb24ac5ceed68edbf1 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 9 Nov 2025 08:28:51 +0200 Subject: [PATCH 34/69] metal : retain src and dst buffers during async ops (#17101) --- ggml/src/ggml-metal/ggml-metal-context.m | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ggml/src/ggml-metal/ggml-metal-context.m b/ggml/src/ggml-metal/ggml-metal-context.m index b8d35b78ad..e66646284d 100644 --- a/ggml/src/ggml-metal/ggml-metal-context.m +++ b/ggml/src/ggml-metal/ggml-metal-context.m @@ -289,7 +289,7 @@ void ggml_metal_set_tensor_async(ggml_metal_t ctx, struct ggml_tensor * tensor, // queue the copy operation into the queue of the Metal context // this will be queued at the end, after any currently ongoing GPU operations - id cmd_buf = [ctx->queue commandBufferWithUnretainedReferences]; + id cmd_buf = [ctx->queue commandBuffer]; id encoder = [cmd_buf blitCommandEncoder]; [encoder copyFromBuffer:buf_src @@ -300,6 +300,7 @@ void ggml_metal_set_tensor_async(ggml_metal_t ctx, struct ggml_tensor * tensor, [encoder endEncoding]; [cmd_buf commit]; + [buf_src release]; // do not wait here for completion //[cmd_buf waitUntilCompleted]; @@ -330,7 +331,7 @@ void ggml_metal_get_tensor_async(ggml_metal_t ctx, const struct ggml_tensor * te // queue the copy operation into the queue of the Metal context // this will be queued at the end, after any currently ongoing GPU operations - id cmd_buf = [ctx->queue commandBufferWithUnretainedReferences]; + id cmd_buf = [ctx->queue commandBuffer]; id encoder = [cmd_buf blitCommandEncoder]; [encoder copyFromBuffer:bid_src.metal @@ -341,6 +342,7 @@ void ggml_metal_get_tensor_async(ggml_metal_t ctx, const struct ggml_tensor * te [encoder endEncoding]; [cmd_buf commit]; + [buf_dst release]; // do not wait here for completion //[cmd_buf waitUntilCompleted]; From 80a6cf63473b95742444a1b27d45164591282a7d Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sun, 9 Nov 2025 02:48:42 -0600 Subject: [PATCH 35/69] vulkan: fuse mul_mat_id + mul (#17095) * vulkan: fuse mul_mat_id + mul This comes up in qwen3 moe. * split mul_mat_id fusion tests into a separate class --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 58 ++++++- .../vulkan-shaders/mul_mat_vec_base.glsl | 19 +++ tests/test-backend-ops.cpp | 154 ++++++++++++------ 3 files changed, 180 insertions(+), 51 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 6da7bbd2f6..054e8cbdb8 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -830,6 +830,7 @@ struct vk_mat_vec_push_constants { uint32_t batch_stride_b; uint32_t batch_stride_d; uint32_t enable_bias; + uint32_t enable_scale; uint32_t ne02; uint32_t ne12; uint32_t broadcast2; @@ -852,6 +853,7 @@ struct vk_mat_vec_id_push_constants { uint32_t batch_stride_b; uint32_t batch_stride_d; uint32_t enable_bias; + uint32_t enable_scale; uint32_t nei0; uint32_t ne11; }; @@ -6863,7 +6865,7 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& // compute const vk_mat_vec_push_constants pc = { (uint32_t)ne00, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne01, - stride_batch_x, stride_batch_y, stride_batch_d, enable_bias, + stride_batch_x, stride_batch_y, stride_batch_d, enable_bias, 0, (uint32_t)ne02, (uint32_t)ne12, (uint32_t)r2, (uint32_t)r3, }; ggml_vk_dispatch_pipeline(ctx, subctx, dmmv, @@ -7684,13 +7686,22 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte groups_x = CEIL_DIV(groups_x, groups_z); } - uint32_t enable_bias = ctx->num_additional_fused_ops > 0; + uint32_t enable_bias = 0; + uint32_t enable_scale = 0; + if (ctx->num_additional_fused_ops > 0) { + if (cgraph->nodes[node_idx + 1]->op == GGML_OP_MUL) { + enable_scale = 1; + } else { + GGML_ASSERT(cgraph->nodes[node_idx + 1]->op == GGML_OP_ADD_ID); + enable_bias = 1; + } + } vk_buffer d_B = d_D; size_t b_buf_offset = 0; uint64_t b_sz = 0; - if (enable_bias) { + if (enable_bias || enable_scale) { const ggml_tensor * bias = cgraph->nodes[node_idx + 1]->src[1]; bool b_uma = false; @@ -7712,7 +7723,7 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte (uint32_t)ne00, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne01, (uint32_t)x_ne, stride_batch_y, (uint32_t)(ne20*ne21), - enable_bias, + enable_bias, enable_scale, (uint32_t)nei0, (uint32_t)ne11, }; @@ -12490,6 +12501,40 @@ static bool ggml_vk_can_fuse(const ggml_backend_vk_context * ctx, const struct g } } + if (ops.size() == 2 && ops.begin()[0] == GGML_OP_MUL_MAT_ID && ops.begin()[1] == GGML_OP_MUL) { + // additional constraints specific to this fusion + const ggml_tensor *mmid = cgraph->nodes[node_idx]; + const ggml_tensor *mul = cgraph->nodes[node_idx + 1]; + const ggml_tensor *scale = mul->src[1]; + + if (mmid != mul->src[0]) { + return false; + } + // mat-vec only + if (!ggml_vk_use_mul_mat_vec_id(cgraph, node_idx)) { + return false; + } + // shaders assume the types match + if (mmid->type != scale->type) { + return false; + } + // shaders assume the bias is contiguous + if (!ggml_is_contiguous(scale)) { + return false; + } + // unaligned bias isn't handled + if (get_misalign_bytes(ctx, scale) != 0) { + return false; + } + // shader only indexes by expert index + if (scale->ne[0] != 1 || + scale->ne[1] != mul->ne[1] || + scale->ne[2] != 1 || + scale->ne[3] != 1) { + return false; + } + } + return true; } @@ -12798,6 +12843,8 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg ctx->num_additional_fused_ops = 1; } else if (ggml_vk_can_fuse(ctx, cgraph, i, { GGML_OP_MUL_MAT_ID, GGML_OP_ADD_ID })) { ctx->num_additional_fused_ops = 1; + } else if (ggml_vk_can_fuse(ctx, cgraph, i, { GGML_OP_MUL_MAT_ID, GGML_OP_MUL })) { + ctx->num_additional_fused_ops = 1; } else if (ggml_can_fuse_subgraph(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL, GGML_OP_ROPE, GGML_OP_VIEW, GGML_OP_SET_ROWS }, { i + 4 }) && ggml_check_edges(cgraph, i, rms_norm_mul_rope_view_set_rows_edges) && ggml_vk_can_fuse_rms_norm_mul_rope(ctx, cgraph, i) && @@ -13033,7 +13080,8 @@ static void ggml_vk_graph_optimize(ggml_backend_t backend, struct ggml_cgraph * is_src_of(graph->nodes[j], graph->nodes[c]) && !(j == c+1 && c == current_set.back() && graph->nodes[c]->op == GGML_OP_RMS_NORM && graph->nodes[j]->op == GGML_OP_MUL) && !(j == c+1 && c == current_set.back() && graph->nodes[c]->op == GGML_OP_MUL_MAT && graph->nodes[j]->op == GGML_OP_ADD) && - !(j == c+1 && c == current_set.back() && graph->nodes[c]->op == GGML_OP_MUL_MAT_ID && graph->nodes[j]->op == GGML_OP_ADD_ID)) { + !(j == c+1 && c == current_set.back() && graph->nodes[c]->op == GGML_OP_MUL_MAT_ID && graph->nodes[j]->op == GGML_OP_ADD_ID) && + !(j == c+1 && c == current_set.back() && graph->nodes[c]->op == GGML_OP_MUL_MAT_ID && graph->nodes[j]->op == GGML_OP_MUL)) { ok = false; break; } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_base.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_base.glsl index bbb4d1206b..eb8fa6dc09 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_base.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vec_base.glsl @@ -49,6 +49,7 @@ layout (push_constant) uniform parameter uint batch_stride_d; uint enable_bias; + uint enable_scale; #ifdef MUL_MAT_ID uint nei0; @@ -129,6 +130,12 @@ void reduce_result(inout FLOAT_TYPE temp[NUM_COLS][NUM_ROWS], const in uint32_t temp[j][n] += FLOAT_TYPE(data_bias[j*p.batch_stride_d + d_offset + first_row + n]); #endif } +#ifdef MUL_MAT_ID + if (p.enable_scale != 0) { + const uint expert_idx = gl_GlobalInvocationID.y; + temp[j][n] *= FLOAT_TYPE(data_bias[expert_idx]); + } +#endif data_d[j*p.batch_stride_d + d_offset + first_row + n] = D_TYPE(temp[j][n]); } } @@ -171,6 +178,12 @@ void reduce_result(FLOAT_TYPE temp[NUM_COLS][NUM_ROWS], const in uint32_t d_offs temp[j][n] += FLOAT_TYPE(data_bias[j*p.batch_stride_d + d_offset + first_row + n]); #endif } +#ifdef MUL_MAT_ID + if (p.enable_scale != 0) { + const uint expert_idx = gl_GlobalInvocationID.y; + temp[j][n] *= FLOAT_TYPE(data_bias[expert_idx]); + } +#endif data_d[j*p.batch_stride_d + d_offset + first_row + n] = D_TYPE(temp[j][n]); } } @@ -203,6 +216,12 @@ void reduce_result(FLOAT_TYPE temp[NUM_COLS][NUM_ROWS], const in uint32_t d_offs tmpsh[j][n][0] += FLOAT_TYPE(data_bias[j*p.batch_stride_d + d_offset + first_row + n]); #endif } +#ifdef MUL_MAT_ID + if (p.enable_scale != 0) { + const uint expert_idx = gl_GlobalInvocationID.y; + tmpsh[j][n][0] *= FLOAT_TYPE(data_bias[expert_idx]); + } +#endif data_d[j*p.batch_stride_d + d_offset + first_row + n] = D_TYPE(tmpsh[j][n][0]); } } diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 2470c148d6..21c7e3a8cf 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -3557,6 +3557,27 @@ struct test_mul_mat : public test_case { } }; +static void init_mul_mat_id_tensors(ggml_context * ctx, int n_mats) { + std::random_device rd; + std::default_random_engine rng(rd()); + for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) { + if (t->type == GGML_TYPE_I32) { + if (ggml_is_view_op(t->op)) { continue; } + // ids + for (int64_t r = 0; r < ggml_nrows(t); r++) { + std::vector data(t->ne[0]); + for (int i = 0; i < t->ne[0]; i++) { + data[i] = i % n_mats; + } + std::shuffle(data.begin(), data.end(), rng); + ggml_backend_tensor_set(t, data.data(), r * t->nb[1], t->ne[0] * sizeof(int32_t)); + } + } else { + init_tensor_uniform(t); + } + } +} + // GGML_OP_MUL_MAT_ID struct test_mul_mat_id : public test_case { const ggml_type type_a; @@ -3567,10 +3588,9 @@ struct test_mul_mat_id : public test_case { const int64_t m; const int64_t n; const int64_t k; - const uint32_t o; // number of outputs std::string vars() override { - return VARS_TO_STR9(type_a, type_b, n_mats, n_used, b, m, n, k, o); + return VARS_TO_STR8(type_a, type_b, n_mats, n_used, b, m, n, k); } double max_nmse_err() override { @@ -3584,9 +3604,69 @@ struct test_mul_mat_id : public test_case { test_mul_mat_id(ggml_type type_a = GGML_TYPE_F32, ggml_type type_b = GGML_TYPE_F32, int n_mats = 8, int n_used = 2, bool b = false, - int64_t m = 32, int64_t n = 32, int64_t k = 32, uint32_t o = 1) + int64_t m = 32, int64_t n = 32, int64_t k = 32) : type_a(type_a), type_b(type_b), n_mats(n_mats), n_used(n_used), b(b), - m(m), n(n), k(k), o(o) { + m(m), n(n), k(k) { + GGML_ASSERT(n_used <= n_mats); + } + + ggml_tensor * build_graph(ggml_context * ctx) override { + // C^T = A * B^T: (k, m) * (k, n) => (m, n) + ggml_tensor * as = ggml_new_tensor_3d(ctx, type_a, k, m, n_mats); + ggml_set_name(as, "as"); + + ggml_tensor * ids = ggml_new_tensor_2d(ctx, GGML_TYPE_I32, n_mats, n); + ggml_set_name(ids, "ids"); + if (n_used != n_mats) { + ids = ggml_view_2d(ctx, ids, n_used, n, ids->nb[1], 0); + ggml_set_name(ids, "view_of_ids"); + } + + ggml_tensor * b = ggml_new_tensor_3d(ctx, type_b, k, this->b ? 1 : n_used, n); + ggml_set_name(b, "b"); + + ggml_tensor * out = ggml_mul_mat_id(ctx, as, b, ids); + ggml_set_name(out, "out"); + + return out; + } + + void initialize_tensors(ggml_context * ctx) override { + init_mul_mat_id_tensors(ctx, n_mats); + } +}; + +// GGML_OP_MUL_MAT_ID + GGML_OP_ADD or GGML_OP_MUL +struct test_mul_mat_id_fusion : public test_case { + const ggml_type type_a; + const ggml_type type_b; + const int n_mats; + const int n_used; + const bool b; // broadcast b matrix + const int64_t m; + const int64_t n; + const int64_t k; + const uint32_t o; // number of outputs + const bool mul; + + std::string vars() override { + return VARS_TO_STR10(type_a, type_b, n_mats, n_used, b, m, n, k, o, mul); + } + + double max_nmse_err() override { + return 5e-4; + } + + uint64_t op_flops(ggml_tensor * t) override { + GGML_UNUSED(t); + return 2 * m * k * n * n_used; + } + + test_mul_mat_id_fusion(ggml_type type_a = GGML_TYPE_F32, ggml_type type_b = GGML_TYPE_F32, + int n_mats = 8, int n_used = 2, bool b = false, + int64_t m = 32, int64_t n = 32, int64_t k = 32, uint32_t o = 1, bool mul = false) + : type_a(type_a), type_b(type_b), n_mats(n_mats), n_used(n_used), b(b), + m(m), n(n), k(k), o(o), mul(mul) { GGML_ASSERT(n_used <= n_mats); } @@ -3615,35 +3695,25 @@ struct test_mul_mat_id : public test_case { out = ggml_add(ctx, out, out2); } + if (mul) { + std::array ne { 1, out->ne[1], out->ne[2], out->ne[3] }; + ne[0] = 1; + ggml_tensor * m = ggml_new_tensor(ctx, out->type, 4, ne.data()); + out = ggml_mul(ctx, out, m); + } + return out; } void initialize_tensors(ggml_context * ctx) override { - for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) { - if (t->type == GGML_TYPE_I32) { - if (ggml_is_view_op(t->op)) { continue; } - std::random_device rd; - std::default_random_engine rng(rd()); - // ids - for (int64_t r = 0; r < ggml_nrows(t); r++) { - std::vector data(t->ne[0]); - for (int i = 0; i < t->ne[0]; i++) { - data[i] = i % n_mats; - } - std::shuffle(data.begin(), data.end(), rng); - ggml_backend_tensor_set(t, data.data(), r * t->nb[1], t->ne[0] * sizeof(int32_t)); - } - } else { - init_tensor_uniform(t); - } - } + init_mul_mat_id_tensors(ctx, n_mats); } - bool run_whole_graph() override { return o > 1; } + bool run_whole_graph() override { return true; } std::string op_desc(ggml_tensor * t) override { GGML_UNUSED(t); - return ggml_op_name(GGML_OP_MUL_MAT_ID); + return "MUL_MAT_ID_FUSION"; } }; @@ -4992,24 +5062,7 @@ struct test_mul_mat_vec_fusion : public test_case { init_tensor_uniform(t); } } else { - std::random_device rd; - std::default_random_engine rng(rd()); - for (ggml_tensor * t = ggml_get_first_tensor(ctx); t != NULL; t = ggml_get_next_tensor(ctx, t)) { - if (t->type == GGML_TYPE_I32) { - if (ggml_is_view_op(t->op)) { continue; } - // ids - for (int64_t r = 0; r < ggml_nrows(t); r++) { - std::vector data(t->ne[0]); - for (int i = 0; i < t->ne[0]; i++) { - data[i] = i % n_mats; - } - std::shuffle(data.begin(), data.end(), rng); - ggml_backend_tensor_set(t, data.data(), r * t->nb[1], t->ne[0] * sizeof(int32_t)); - } - } else { - init_tensor_uniform(t); - } - } + init_mul_mat_id_tensors(ctx, n_mats); } } @@ -6979,7 +7032,7 @@ static std::vector> make_test_cases_eval() { } test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 1, 1, false, 8, 16, 1)); - test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_F16, GGML_TYPE_F32, 16, 16, false, 32, 32, 32, 3)); + test_cases.emplace_back(new test_mul_mat_id_fusion(GGML_TYPE_F16, GGML_TYPE_F32, 16, 16, false, 32, 32, 32, 3)); // gpt-oss issue with Vulkan mmq_id test_cases.emplace_back(new test_mul_mat_id(GGML_TYPE_MXFP4, GGML_TYPE_F32, 32, 2, false, 2880, 32, 2880)); @@ -7016,6 +7069,15 @@ static std::vector> make_test_cases_eval() { } } + for (int bs : {1, 4, 512}) { + for (ggml_type type_a : {GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_Q4_0, GGML_TYPE_Q4_K}) { + for (ggml_type type_b : {GGML_TYPE_F32}) { + // test with mul after (ffn_moe_weighted) + test_cases.emplace_back(new test_mul_mat_id_fusion(type_a, type_b, 128, 8, false, 768, bs, 2048, 1, true)); + } + } + } + for (ggml_type type_a : base_types) { for (ggml_type type_b : {GGML_TYPE_F32, GGML_TYPE_F16}) { for (int n : {1, 16}) { @@ -7472,7 +7534,7 @@ static std::vector> make_test_cases_perf() { for (int bs : {1, 4, 8, 32, 64, 128, 256, 512}) { for (ggml_type type_a : {GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0, GGML_TYPE_Q4_K, GGML_TYPE_Q6_K, GGML_TYPE_IQ2_XS}) { for (ggml_type type_b : {GGML_TYPE_F32}) { - test_cases.emplace_back(new test_mul_mat_id(type_a, type_b, 128, 8, false, 768, bs, 2048, 1)); + test_cases.emplace_back(new test_mul_mat_id_fusion(type_a, type_b, 128, 8, false, 768, bs, 2048, 1)); } } } @@ -7480,7 +7542,7 @@ static std::vector> make_test_cases_perf() { for (int bs : {1, 4, 8, 32, 64, 128, 256, 512}) { for (ggml_type type_a : {GGML_TYPE_F32, GGML_TYPE_F16, GGML_TYPE_Q4_0, GGML_TYPE_Q8_0, GGML_TYPE_Q4_K, GGML_TYPE_Q6_K, GGML_TYPE_IQ2_XS}) { for (ggml_type type_b : {GGML_TYPE_F32}) { - test_cases.emplace_back(new test_mul_mat_id(type_a, type_b, 32, 4, false, 1792, bs, 2048, 1)); + test_cases.emplace_back(new test_mul_mat_id_fusion(type_a, type_b, 32, 4, false, 1792, bs, 2048, 1)); } } } @@ -7490,7 +7552,7 @@ static std::vector> make_test_cases_perf() { for (int bs : {1, 4, 8, 512}) { for (ggml_type type_a : {GGML_TYPE_MXFP4}) { for (ggml_type type_b : {GGML_TYPE_F32}) { - test_cases.emplace_back(new test_mul_mat_id(type_a, type_b, 32, 4, false, 2880, bs, 2880, 1)); + test_cases.emplace_back(new test_mul_mat_id_fusion(type_a, type_b, 32, 4, false, 2880, bs, 2880, 1)); } } } From 8a3519b70898b07ec05c391418a05aaa6b377c83 Mon Sep 17 00:00:00 2001 From: Ruben Ortlam Date: Sun, 9 Nov 2025 09:52:57 +0100 Subject: [PATCH 36/69] vulkan: fix mmq out of bounds reads (#17108) * vulkan: fix mmq out of bounds reads, streamline outdated matmul host code * fix mul_mat_id quantization call * Fix compiler warnings --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 202 ++++++++---------- .../ggml-vulkan/vulkan-shaders/mul_mmq.comp | 6 +- .../vulkan-shaders/mul_mmq_funcs.glsl | 33 ++- .../vulkan-shaders/quantize_q8_1.comp | 2 +- tests/test-backend-ops.cpp | 2 + 5 files changed, 113 insertions(+), 132 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 054e8cbdb8..31815a0129 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -586,7 +586,6 @@ struct vk_device_struct { vk_matmul_pipeline2 pipeline_dequant_mul_mat_mat_id_q8_1[GGML_TYPE_COUNT]; vk_pipeline pipeline_matmul_split_k_reduce; - vk_pipeline pipeline_quantize_q8_1; vk_pipeline pipeline_quantize_q8_1_x4; vk_pipeline pipeline_dequant[GGML_TYPE_COUNT]; @@ -3558,10 +3557,8 @@ static void ggml_vk_load_shaders(vk_device& device) { ggml_vk_create_pipeline(device, device->pipeline_flash_attn_split_k_reduce, "fa_split_k_reduce", fa_split_k_reduce_len, fa_split_k_reduce_data, "main", 3, 5 * sizeof(uint32_t), {1, device->subgroup_size, 1}, {device->subgroup_size}, 1, true); if (device->subgroup_clustered && device->subgroup_require_full_support) { - ggml_vk_create_pipeline(device, device->pipeline_quantize_q8_1, "quantize_q8_1", quantize_q8_1_subgroup_len, quantize_q8_1_subgroup_data, "main", 2, 1 * sizeof(uint32_t), {32 * device->subgroup_size / 8, 1, 1}, { device->subgroup_size }, 1, true, true); ggml_vk_create_pipeline(device, device->pipeline_quantize_q8_1_x4, "quantize_q8_1_x4", quantize_q8_1_x4_subgroup_len, quantize_q8_1_x4_subgroup_data, "main", 2, 1 * sizeof(uint32_t), {32 * device->subgroup_size / 8, 1, 1}, { device->subgroup_size }, 1, true, true); } else { - ggml_vk_create_pipeline(device, device->pipeline_quantize_q8_1, "quantize_q8_1", quantize_q8_1_len, quantize_q8_1_data, "main", 2, 1 * sizeof(uint32_t), {32 * device->subgroup_size / 8, 1, 1}, { device->subgroup_size }, 1); ggml_vk_create_pipeline(device, device->pipeline_quantize_q8_1_x4, "quantize_q8_1_x4", quantize_q8_1_x4_len, quantize_q8_1_x4_data, "main", 2, 1 * sizeof(uint32_t), {32 * device->subgroup_size / 8, 1, 1}, { device->subgroup_size }, 1); } @@ -6261,20 +6258,20 @@ static void ggml_vk_cpy_to_contiguous(ggml_backend_vk_context * ctx, vk_context& ggml_vk_sync_buffers(ctx, subctx); } -static vk_pipeline ggml_vk_get_quantize_pipeline(ggml_backend_vk_context * ctx, ggml_type type, bool use_x4_blocks) { +static vk_pipeline ggml_vk_get_quantize_pipeline(ggml_backend_vk_context * ctx, ggml_type type) { switch(type) { case GGML_TYPE_Q8_1: - return use_x4_blocks ? ctx->device->pipeline_quantize_q8_1_x4 : ctx->device->pipeline_quantize_q8_1; + return ctx->device->pipeline_quantize_q8_1_x4; default: std::cerr << "Missing quantize pipeline for type: " << ggml_type_name(type) << std::endl; GGML_ABORT("fatal error"); } } -static void ggml_vk_quantize_q8_1(ggml_backend_vk_context * ctx, vk_context& subctx, vk_subbuffer&& in, vk_subbuffer&& out, uint32_t ne, bool use_x4_blocks = false) { +static void ggml_vk_quantize_q8_1(ggml_backend_vk_context * ctx, vk_context& subctx, vk_subbuffer&& in, vk_subbuffer&& out, uint32_t ne) { VK_LOG_DEBUG("ggml_vk_quantize_q8_1(" << "buffer in size=" << in.buffer->size << ", buffer out size=" << out.buffer->size << ", " << ne << ")"); - vk_pipeline pipeline = use_x4_blocks ? ggml_vk_get_quantize_pipeline(ctx, GGML_TYPE_Q8_1, true) : ggml_vk_get_quantize_pipeline(ctx, GGML_TYPE_Q8_1, false); + vk_pipeline pipeline = ggml_vk_get_quantize_pipeline(ctx, GGML_TYPE_Q8_1); ggml_vk_dispatch_pipeline(ctx, subctx, pipeline, { in, out }, std::array{ne}, { ne, 1, 1 }); ggml_vk_sync_buffers(ctx, subctx); @@ -6365,16 +6362,17 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub // Reserve extra storage in the N dimension for the Y matrix, so we can avoid bounds-checking uint32_t padded_n = qy_needs_dequant ? ROUNDUP_POW2(ne11, pipeline->wg_denoms[1]) : ne11; - const int x_ne = ne01 * ne00; - const int y_ne = padded_n * ne10; - const int d_ne = ne11 * ne01; + const uint64_t x_ne = ggml_nelements(src0); + // 128 elements per Q8_1 x4 block + const uint64_t y_ne = padded_n * ne10 * ne12 * ne13; + const uint64_t d_ne = ggml_nelements(dst); const uint32_t split_k = ggml_vk_guess_split_k(ctx, ne01, ne11, ne10, disable_split_k, pipeline); const uint64_t qx_sz = ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type); const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type); const uint64_t x_sz = !qx_needs_dequant ? qx_sz : sizeof(ggml_fp16_t) * x_ne; - const uint64_t y_sz = quantize_y ? (y_ne * ggml_type_size(GGML_TYPE_Q8_1) / ggml_blck_size(GGML_TYPE_Q8_1)) : (y_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne); + const uint64_t y_sz = quantize_y ? (ggml_vk_align_size(y_ne, 128) * ggml_type_size(GGML_TYPE_Q8_1) / ggml_blck_size(GGML_TYPE_Q8_1)) : (y_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne); const uint64_t d_sz = sizeof(float) * d_ne; vk_pipeline to_fp16_vk_0 = nullptr; @@ -6395,28 +6393,23 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr); // NOLINT if (quantize_y) { - to_q8_1 = ggml_vk_get_quantize_pipeline(ctx, GGML_TYPE_Q8_1, true); + to_q8_1 = ggml_vk_get_quantize_pipeline(ctx, GGML_TYPE_Q8_1); } { - const uint64_t x_sz_upd = x_sz * ne02 * ne03; - uint64_t y_sz_upd = y_sz * ne12 * ne13; - if (quantize_y) { - y_sz_upd = CEIL_DIV(y_sz_upd, 144) * 144; - } - const uint64_t split_k_size = split_k > 1 ? d_sz * ne12 * ne13 * split_k : 0; + const uint64_t split_k_size = split_k > 1 ? d_sz * split_k : 0; if ( - (qx_needs_dequant && x_sz_upd > ctx->device->properties.limits.maxStorageBufferRange) || - (qy_needs_dequant && y_sz_upd > ctx->device->properties.limits.maxStorageBufferRange) || + (qx_needs_dequant && x_sz > ctx->device->properties.limits.maxStorageBufferRange) || + (qy_needs_dequant && y_sz > ctx->device->properties.limits.maxStorageBufferRange) || (split_k > 1 && split_k_size > ctx->device->properties.limits.maxStorageBufferRange)) { GGML_ABORT("Requested preallocation size is too large"); } - if (qx_needs_dequant && ctx->prealloc_size_x < x_sz_upd) { - ctx->prealloc_size_x = x_sz_upd; + if (qx_needs_dequant && ctx->prealloc_size_x < x_sz) { + ctx->prealloc_size_x = x_sz; ggml_vk_preallocate_buffers(ctx, subctx); } - if ((qy_needs_dequant || quantize_y) && ctx->prealloc_size_y < y_sz_upd) { - ctx->prealloc_size_y = y_sz_upd; + if ((qy_needs_dequant || quantize_y) && ctx->prealloc_size_y < y_sz) { + ctx->prealloc_size_y = y_sz; ggml_vk_preallocate_buffers(ctx, subctx); } if (split_k > 1 && ctx->prealloc_size_split_k < split_k_size) { @@ -6443,7 +6436,7 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub vk_buffer d_D = dst_buf_ctx->dev_buffer; const uint64_t d_buf_offset = vk_tensor_offset(dst) + dst->view_offs; GGML_ASSERT(d_D != nullptr); - GGML_ASSERT(d_D->size >= d_buf_offset + d_sz * ne02 * ne03); + GGML_ASSERT(d_D->size >= d_buf_offset + d_sz); vk_buffer d_X; uint64_t x_buf_offset = 0; vk_buffer d_Y; @@ -6460,7 +6453,7 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub } if (qx_needs_dequant) { d_X = ctx->prealloc_x; - GGML_ASSERT(d_X->size >= x_sz * ne02 * ne03); + GGML_ASSERT(d_X->size >= x_sz); } else { d_X = d_Qx; x_buf_offset = qx_buf_offset; @@ -6468,10 +6461,10 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub } if (qy_needs_dequant) { d_Y = ctx->prealloc_y; - GGML_ASSERT(d_Y->size >= y_sz * ne12 * ne13); + GGML_ASSERT(d_Y->size >= y_sz); } else if (quantize_y) { d_Y = ctx->prealloc_y; - GGML_ASSERT(d_Y->size >= CEIL_DIV(y_sz * ne12 * ne13, 144) * 144); + GGML_ASSERT(d_Y->size >= CEIL_DIV(y_sz, 144) * 144); } else { d_Y = d_Qy; y_buf_offset = qy_buf_offset; @@ -6488,7 +6481,7 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub ggml_vk_cpy_to_contiguous(ctx, subctx, to_fp16_vk_0, src0, ggml_vk_subbuffer(ctx, d_Qx, qx_buf_offset), ggml_vk_subbuffer(ctx, d_X, 0)); } else if (qx_needs_dequant) { const std::vector pc = { (uint32_t)ne01, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)(ggml_nelements(src0)) }; - ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_0, { vk_subbuffer{ d_Qx, qx_buf_offset, qx_sz * ne02 * ne03 }, vk_subbuffer{ d_X, 0, x_sz * ne02 * ne03 } }, pc, { (uint32_t)(x_ne * ne02 * ne03), 1, 1}); + ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_0, { vk_subbuffer{ d_Qx, qx_buf_offset, qx_sz }, vk_subbuffer{ d_X, 0, x_sz } }, pc, { (uint32_t)(x_ne), 1, 1}); ggml_vk_sync_buffers(ctx, subctx); } if (y_non_contig) { @@ -6508,7 +6501,7 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub if (ctx->prealloc_y_need_sync) { ggml_vk_sync_buffers(ctx, subctx); } - ggml_vk_quantize_q8_1(ctx, subctx, ggml_vk_subbuffer(ctx, d_Qy, qy_buf_offset), ggml_vk_subbuffer(ctx, d_Y, 0), y_ne * ne12 * ne13, true); + ggml_vk_quantize_q8_1(ctx, subctx, ggml_vk_subbuffer(ctx, d_Qy, qy_buf_offset), ggml_vk_subbuffer(ctx, d_Y, 0), y_ne); ctx->prealloc_y_last_pipeline_used = to_q8_1.get(); ctx->prealloc_y_last_tensor_used = src1; } @@ -6525,16 +6518,11 @@ static void ggml_vk_mul_mat_q_f16(ggml_backend_vk_context * ctx, vk_context& sub stride_batch_y = src1->nb[0] / ggml_type_size(src1->type); } - uint32_t y_sz_total = y_sz * ne12 * ne13; - if (quantize_y) { - y_sz_total = CEIL_DIV(y_sz_total, 144) * 144; - } - // compute ggml_vk_matmul( ctx, subctx, pipeline, - { d_X, x_buf_offset, x_sz * ne02 * ne03 }, { d_Y, y_buf_offset, y_sz_total }, - ggml_vk_subbuffer(ctx, d_D, d_buf_offset), { ctx->prealloc_split_k, 0, d_sz * ne12 * ne13 * split_k }, + { d_X, x_buf_offset, x_sz }, { d_Y, y_buf_offset, y_sz }, + ggml_vk_subbuffer(ctx, d_D, d_buf_offset), { ctx->prealloc_split_k, 0, d_sz * split_k }, ne01, ne11, ne10, ne10, ne10, stride_d, stride_batch_x, stride_batch_y, stride_batch_d, split_k, ne12*ne13, ne02, ne12, r2, r3, padded_n @@ -6617,8 +6605,8 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& const uint64_t ne20 = dst->ne[0]; const uint64_t ne21 = dst->ne[1]; - const uint64_t ne22 = dst->ne[2]; - const uint64_t ne23 = dst->ne[3]; + // const uint64_t ne22 = dst->ne[2]; + // const uint64_t ne23 = dst->ne[3]; const uint64_t r2 = ne12 / ne02; const uint64_t r3 = ne13 / ne03; @@ -6674,7 +6662,7 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& } if (quantize_y) { - to_q8_1 = ggml_vk_get_quantize_pipeline(ctx, GGML_TYPE_Q8_1, true); + to_q8_1 = ggml_vk_get_quantize_pipeline(ctx, GGML_TYPE_Q8_1); } const bool qx_needs_dequant = x_non_contig; @@ -6687,33 +6675,29 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr); // NOLINT GGML_ASSERT(dmmv != nullptr); - const uint64_t x_ne = ne01 * ne00; - const uint64_t y_ne = ne11 * ne10; - const uint64_t d_ne = ne11 * ne01; + const uint64_t x_ne = ggml_nelements(src0); + const uint64_t y_ne = ggml_nelements(src1); + const uint64_t d_ne = ggml_nelements(dst); const uint64_t qx_sz = ggml_vk_align_size(ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type), ctx->device->properties.limits.minStorageBufferOffsetAlignment); const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type); const uint64_t x_sz = x_non_contig ? ggml_vk_align_size(ggml_type_size(src0->type) * x_ne, ctx->device->properties.limits.minStorageBufferOffsetAlignment) : qx_sz; - const uint64_t y_sz = quantize_y ? (y_ne * ggml_type_size(GGML_TYPE_Q8_1) / ggml_blck_size(GGML_TYPE_Q8_1)) : (f16_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne); + const uint64_t y_sz = quantize_y ? (ggml_vk_align_size(y_ne, 128) * ggml_type_size(GGML_TYPE_Q8_1) / ggml_blck_size(GGML_TYPE_Q8_1)) : + (f16_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne); const uint64_t d_sz = sizeof(float) * d_ne; { - const uint64_t x_sz_upd = x_sz * ne02 * ne03; - uint64_t y_sz_upd = y_sz * ne12 * ne13; - if (quantize_y) { - y_sz_upd = CEIL_DIV(y_sz_upd, 144) * 144; - } if ( - (qx_needs_dequant && x_sz_upd > ctx->device->properties.limits.maxStorageBufferRange) || - (qy_needs_dequant && y_sz_upd > ctx->device->properties.limits.maxStorageBufferRange)) { + (qx_needs_dequant && x_sz > ctx->device->properties.limits.maxStorageBufferRange) || + (qy_needs_dequant && y_sz > ctx->device->properties.limits.maxStorageBufferRange)) { GGML_ABORT("Requested preallocation size is too large"); } - if (qx_needs_dequant && ctx->prealloc_size_x < x_sz_upd) { - ctx->prealloc_size_x = x_sz_upd; + if (qx_needs_dequant && ctx->prealloc_size_x < x_sz) { + ctx->prealloc_size_x = x_sz; ggml_vk_preallocate_buffers(ctx, subctx); } - if ((qy_needs_dequant || quantize_y) && ctx->prealloc_size_y < y_sz_upd) { - ctx->prealloc_size_y = y_sz_upd; + if ((qy_needs_dequant || quantize_y) && ctx->prealloc_size_y < y_sz) { + ctx->prealloc_size_y = y_sz; ggml_vk_preallocate_buffers(ctx, subctx); } @@ -6770,7 +6754,7 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& d_Y = ctx->prealloc_y; } else if (quantize_y) { d_Y = ctx->prealloc_y; - GGML_ASSERT(d_Y->size >= CEIL_DIV(y_sz * ne12 * ne13, 144) * 144); + GGML_ASSERT(d_Y->size >= CEIL_DIV(y_sz, 144) * 144); } else { d_Y = d_Qy; y_buf_offset = qy_buf_offset; @@ -6803,7 +6787,7 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& if (ctx->prealloc_y_need_sync) { ggml_vk_sync_buffers(ctx, subctx); } - ggml_vk_quantize_q8_1(ctx, subctx, ggml_vk_subbuffer(ctx, d_Qy, qy_buf_offset), ggml_vk_subbuffer(ctx, d_Y, 0), y_ne * ne12 * ne13, true); + ggml_vk_quantize_q8_1(ctx, subctx, ggml_vk_subbuffer(ctx, d_Qy, qy_buf_offset), ggml_vk_subbuffer(ctx, d_Y, 0), y_ne); ctx->prealloc_y_last_pipeline_used = to_q8_1.get(); ctx->prealloc_y_last_tensor_used = src1; } @@ -6832,12 +6816,6 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& groups_x = CEIL_DIV(groups_x, groups_z); } - // TODO: Clean up this whole sz * ne_2 * ne_3 thing, it hasn't been necessary for a long time - uint32_t y_sz_total = y_sz * ne12 * ne13; - if (quantize_y) { - y_sz_total = CEIL_DIV(y_sz_total, 144) * 144; - } - uint32_t enable_bias = ctx->num_additional_fused_ops > 0; vk_buffer d_B = d_D; @@ -6870,9 +6848,9 @@ static void ggml_vk_mul_mat_vec_q_f16(ggml_backend_vk_context * ctx, vk_context& }; ggml_vk_dispatch_pipeline(ctx, subctx, dmmv, { - vk_subbuffer{ d_X, x_buf_offset, x_sz * ne02 * ne03 }, - vk_subbuffer{ d_Y, y_buf_offset, y_sz_total }, - vk_subbuffer{ d_D, d_buf_offset, d_sz * ne22 * ne23}, + vk_subbuffer{ d_X, x_buf_offset, x_sz }, + vk_subbuffer{ d_Y, y_buf_offset, y_sz }, + vk_subbuffer{ d_D, d_buf_offset, d_sz }, vk_subbuffer{ d_B, b_buf_offset, b_sz }, }, pc, { groups_x, (uint32_t)(ne12 * ne13), groups_z }); @@ -7210,7 +7188,7 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& const uint64_t ne00 = src0->ne[0]; const uint64_t ne01 = src0->ne[1]; const uint64_t ne02 = src0->ne[2]; - const uint64_t ne03 = src0->ne[3]; + // const uint64_t ne03 = src0->ne[3]; const uint64_t ne10 = src1->ne[0]; const uint64_t ne11 = src1->ne[1]; @@ -7225,8 +7203,8 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& const uint64_t ne20 = dst->ne[0]; const uint64_t ne21 = dst->ne[1]; - const uint64_t ne22 = dst->ne[2]; - const uint64_t ne23 = dst->ne[3]; + // const uint64_t ne22 = dst->ne[2]; + // const uint64_t ne23 = dst->ne[3]; const uint64_t n_as = ne02; @@ -7296,14 +7274,14 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& // Reserve extra storage in the N dimension for the Y matrix, so we can avoid bounds-checking uint32_t padded_n = qy_needs_dequant ? ROUNDUP_POW2(ne11, pipeline->wg_denoms[1]) :ne11; - const uint64_t x_ne = ne01 * ne00; - const uint64_t y_ne = padded_n * ne10; - const uint64_t d_ne = ne21 * ne20; + const uint64_t x_ne = ggml_nelements(src0); + const uint64_t y_ne = padded_n * ne10 * ne12 * ne13; + const uint64_t d_ne = ggml_nelements(dst); const uint64_t qx_sz = ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type); const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type); const uint64_t x_sz = !qx_needs_dequant ? qx_sz : sizeof(ggml_fp16_t) * x_ne; - const uint64_t y_sz = quantize_y ? (y_ne * ggml_type_size(GGML_TYPE_Q8_1) / ggml_blck_size(GGML_TYPE_Q8_1)) : (y_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne); + const uint64_t y_sz = quantize_y ? (ggml_vk_align_size(y_ne, 128) * ggml_type_size(GGML_TYPE_Q8_1) / ggml_blck_size(GGML_TYPE_Q8_1)) : (y_f32_kernel ? sizeof(float) * y_ne : sizeof(ggml_fp16_t) * y_ne); const uint64_t ids_sz = nbi2; const uint64_t d_sz = sizeof(float) * d_ne; @@ -7325,26 +7303,21 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& GGML_ASSERT(!qy_needs_dequant || to_fp16_vk_1 != nullptr); // NOLINT if (quantize_y) { - to_q8_1 = ggml_vk_get_quantize_pipeline(ctx, GGML_TYPE_Q8_1, true); + to_q8_1 = ggml_vk_get_quantize_pipeline(ctx, GGML_TYPE_Q8_1); } { - const uint64_t x_sz_upd = x_sz * ne02 * ne03; - uint64_t y_sz_upd = y_sz * ne12 * ne13; - if (quantize_y) { - y_sz_upd = CEIL_DIV(y_sz_upd, 144) * 144; - } if ( - (qx_needs_dequant && x_sz_upd > ctx->device->properties.limits.maxStorageBufferRange) || - (qy_needs_dequant && y_sz_upd > ctx->device->properties.limits.maxStorageBufferRange)) { + (qx_needs_dequant && x_sz > ctx->device->properties.limits.maxStorageBufferRange) || + (qy_needs_dequant && y_sz > ctx->device->properties.limits.maxStorageBufferRange)) { GGML_ABORT("Requested preallocation size is too large"); } - if (qx_needs_dequant && ctx->prealloc_size_x < x_sz_upd) { - ctx->prealloc_size_x = x_sz_upd; + if (qx_needs_dequant && ctx->prealloc_size_x < x_sz) { + ctx->prealloc_size_x = x_sz; ggml_vk_preallocate_buffers(ctx, subctx); } - if ((qy_needs_dequant || quantize_y) && ctx->prealloc_size_y < y_sz_upd) { - ctx->prealloc_size_y = y_sz_upd; + if ((qy_needs_dequant || quantize_y) && ctx->prealloc_size_y < y_sz) { + ctx->prealloc_size_y = y_sz; ggml_vk_preallocate_buffers(ctx, subctx); } @@ -7385,7 +7358,7 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& } if (qx_needs_dequant) { d_X = ctx->prealloc_x; - GGML_ASSERT(d_X->size >= x_sz * ne02 * ne03); + GGML_ASSERT(d_X->size >= x_sz); } else { d_X = d_Qx; x_buf_offset = qx_buf_offset; @@ -7393,10 +7366,10 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& } if (qy_needs_dequant) { d_Y = ctx->prealloc_y; - GGML_ASSERT(d_Y->size >= y_sz * ne12 * ne13); + GGML_ASSERT(d_Y->size >= y_sz); } else if (quantize_y) { d_Y = ctx->prealloc_y; - GGML_ASSERT(d_Y->size >= CEIL_DIV(y_sz * ne12 * ne13, 144) * 144); + GGML_ASSERT(d_Y->size >= CEIL_DIV(y_sz, 144) * 144); } else { d_Y = d_Qy; y_buf_offset = qy_buf_offset; @@ -7414,7 +7387,7 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& } else if (qx_needs_dequant) { const std::vector pc = { (uint32_t)ne01, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)(ggml_nelements(src0)) }; ggml_vk_dispatch_pipeline(ctx, subctx, to_fp16_vk_0, - { vk_subbuffer{ d_Qx, qx_buf_offset, qx_sz * ne02 * ne03 }, vk_subbuffer{ d_X, 0, x_sz * ne02 * ne03 } }, pc, { (uint32_t)(x_ne * ne02 * ne03), 1, 1}); + { vk_subbuffer{ d_Qx, qx_buf_offset, qx_sz }, vk_subbuffer{ d_X, 0, x_sz } }, pc, { (uint32_t)x_ne, 1, 1}); ggml_vk_sync_buffers(ctx, subctx); } if (y_non_contig) { @@ -7434,7 +7407,7 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& if (ctx->prealloc_y_need_sync) { ggml_vk_sync_buffers(ctx, subctx); } - ggml_vk_quantize_q8_1(ctx, subctx, ggml_vk_subbuffer(ctx, d_Qy, qy_buf_offset), ggml_vk_subbuffer(ctx, d_Y, 0), y_ne * ne12 * ne13, true); + ggml_vk_quantize_q8_1(ctx, subctx, ggml_vk_subbuffer(ctx, d_Qy, qy_buf_offset), ggml_vk_subbuffer(ctx, d_Y, 0), y_ne); ctx->prealloc_y_last_pipeline_used = to_q8_1.get(); ctx->prealloc_y_last_tensor_used = src1; } @@ -7451,16 +7424,11 @@ static void ggml_vk_mul_mat_id_q_f16(ggml_backend_vk_context * ctx, vk_context& stride_batch_y = src1->nb[0] / ggml_type_size(src1->type); } - uint32_t y_sz_total = y_sz * ne12 * ne13; - if (quantize_y) { - y_sz_total = CEIL_DIV(y_sz_total, 144) * 144; - } - // compute ggml_vk_matmul_id( ctx, subctx, pipeline, - { d_X, x_buf_offset, x_sz * ne02 * ne03 }, { d_Y, y_buf_offset, y_sz_total }, - { d_D, d_buf_offset, d_sz * ne22 * ne23 }, { d_ids, ids_buf_offset, ids_sz }, + { d_X, x_buf_offset, x_sz }, { d_Y, y_buf_offset, y_sz }, + { d_D, d_buf_offset, d_sz }, { d_ids, ids_buf_offset, ids_sz }, ne01, ne21, ne10, ne10, ne10, ne01, stride_batch_x, stride_batch_y, ne20*ne21, n_as, nei0, nei1, nbi1 / ggml_type_size(ids->type), ne11, padded_n @@ -7490,13 +7458,13 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte const uint64_t ne00 = src0->ne[0]; const uint64_t ne01 = src0->ne[1]; - const uint64_t ne02 = src0->ne[2]; - const uint64_t ne03 = src0->ne[3]; + // const uint64_t ne02 = src0->ne[2]; + // const uint64_t ne03 = src0->ne[3]; const uint64_t ne10 = src1->ne[0]; const uint64_t ne11 = src1->ne[1]; - const uint64_t ne12 = src1->ne[2]; - const uint64_t ne13 = src1->ne[3]; + // const uint64_t ne12 = src1->ne[2]; + // const uint64_t ne13 = src1->ne[3]; const uint64_t nei0 = ids->ne[0]; const uint64_t nei1 = ids->ne[1]; @@ -7507,8 +7475,8 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte const uint64_t ne20 = dst->ne[0]; const uint64_t ne21 = dst->ne[1]; - const uint64_t ne22 = dst->ne[2]; - const uint64_t ne23 = dst->ne[3]; + // const uint64_t ne22 = dst->ne[2]; + // const uint64_t ne23 = dst->ne[3]; ggml_backend_vk_buffer_context * src0_buf_ctx = (ggml_backend_vk_buffer_context *)src0->buffer->context; ggml_backend_vk_buffer_context * src1_buf_ctx = (ggml_backend_vk_buffer_context *)src1->buffer->context; @@ -7545,9 +7513,9 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte // Not implemented GGML_ASSERT(y_non_contig || !qy_needs_dequant); // NOLINT - const uint64_t x_ne = ne01 * ne00; - const uint64_t y_ne = ne11 * ne10; - const uint64_t d_ne = ne21 * ne20; + const uint64_t x_ne = ggml_nelements(src0); + const uint64_t y_ne = ggml_nelements(src1); + const uint64_t d_ne = ggml_nelements(dst); const uint64_t qx_sz = ggml_vk_align_size(ggml_type_size(src0->type) * x_ne / ggml_blck_size(src0->type), ctx->device->properties.limits.minStorageBufferOffsetAlignment); const uint64_t qy_sz = ggml_type_size(src1->type) * y_ne / ggml_blck_size(src1->type); @@ -7572,19 +7540,17 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte GGML_ASSERT(dmmv != nullptr); { - const uint64_t x_sz_upd = x_sz * ne02 * ne03; - const uint64_t y_sz_upd = y_sz * ne12 * ne13; if ( - (qx_needs_dequant && x_sz_upd > ctx->device->properties.limits.maxStorageBufferRange) || - (qy_needs_dequant && y_sz_upd > ctx->device->properties.limits.maxStorageBufferRange)) { + (qx_needs_dequant && x_sz > ctx->device->properties.limits.maxStorageBufferRange) || + (qy_needs_dequant && y_sz > ctx->device->properties.limits.maxStorageBufferRange)) { GGML_ABORT("Requested preallocation size is too large"); } - if (qx_needs_dequant && ctx->prealloc_size_x < x_sz_upd) { - ctx->prealloc_size_x = x_sz_upd; + if (qx_needs_dequant && ctx->prealloc_size_x < x_sz) { + ctx->prealloc_size_x = x_sz; ggml_vk_preallocate_buffers(ctx, subctx); } - if (qy_needs_dequant && ctx->prealloc_size_y < y_sz_upd) { - ctx->prealloc_size_y = y_sz_upd; + if (qy_needs_dequant && ctx->prealloc_size_y < y_sz) { + ctx->prealloc_size_y = y_sz; ggml_vk_preallocate_buffers(ctx, subctx); } @@ -7721,7 +7687,7 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte // compute const vk_mat_vec_id_push_constants pc = { (uint32_t)ne00, (uint32_t)ne10, (uint32_t)ne10, (uint32_t)ne01, - (uint32_t)x_ne, stride_batch_y, (uint32_t)(ne20*ne21), + (uint32_t)(ne00 * ne01), stride_batch_y, (uint32_t)(ne20 * ne21), enable_bias, enable_scale, @@ -7729,9 +7695,9 @@ static void ggml_vk_mul_mat_vec_id_q_f16(ggml_backend_vk_context * ctx, vk_conte }; ggml_vk_dispatch_pipeline(ctx, subctx, dmmv, { - vk_subbuffer{ d_X, x_buf_offset, x_sz * ne02 * ne03 }, - vk_subbuffer{ d_Y, y_buf_offset, y_sz * ne12 * ne13 }, - vk_subbuffer{ d_D, d_buf_offset, d_sz * ne22 * ne23}, + vk_subbuffer{ d_X, x_buf_offset, x_sz }, + vk_subbuffer{ d_Y, y_buf_offset, y_sz }, + vk_subbuffer{ d_D, d_buf_offset, d_sz }, vk_subbuffer{ d_B, b_buf_offset, b_sz }, vk_subbuffer{ d_ids, ids_buf_offset, ids_sz }, }, diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq.comp b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq.comp index d955b4fc7a..5266e523b9 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq.comp @@ -211,7 +211,9 @@ void main() { const uint iqs = loadr_a; [[unroll]] for (uint k_step = 0; k_step < BK_STEP; k_step++) { - block_a_to_shmem(k_step * BM + buf_ib, ib + k_step, iqs); + if (block + k_step * BK < end_k) { + block_a_to_shmem(k_step * BM + buf_ib, ib + k_step, iqs); + } } } [[unroll]] for (uint l = 0; loadc_b + l < BN; l += loadstride_b) { @@ -226,7 +228,7 @@ void main() { const uint iqs = loadr_b; [[unroll]] for (uint k_step = 0; k_step < BK_STEP; k_step++) { - block_b_to_shmem(k_step * BN + buf_ib, ib + k_step, iqs); + block_b_to_shmem(k_step * BN + buf_ib, ib + k_step, iqs, block + k_step * BK < end_k); } } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_funcs.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_funcs.glsl index c0c03fedcc..51b5bb11e7 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_funcs.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mmq_funcs.glsl @@ -469,19 +469,30 @@ ACC_TYPE mmq_dot_product(const uint ib_a) { #endif #ifdef MMQ_SHMEM -void block_b_to_shmem(const uint buf_ib, const uint ib, const uint iqs) { - const uint ib_outer = ib / 4; - const uint ib_inner = ib % 4; +void block_b_to_shmem(const uint buf_ib, const uint ib, const uint iqs, const bool is_in_bounds) { + if (is_in_bounds) { + const uint ib_outer = ib / 4; + const uint ib_inner = ib % 4; - if (iqs == 0) { - buf_b[buf_ib].ds = FLOAT_TYPE_VEC2(data_b[ib_outer].ds[ib_inner]); + if (iqs == 0) { + buf_b[buf_ib].ds = FLOAT_TYPE_VEC2(data_b[ib_outer].ds[ib_inner]); + } + + const ivec4 values = data_b[ib_outer].qs[ib_inner * 2 + iqs]; + buf_b[buf_ib].qs[iqs * 4 ] = values.x; + buf_b[buf_ib].qs[iqs * 4 + 1] = values.y; + buf_b[buf_ib].qs[iqs * 4 + 2] = values.z; + buf_b[buf_ib].qs[iqs * 4 + 3] = values.w; + } else { + if (iqs == 0) { + buf_b[buf_ib].ds = FLOAT_TYPE_VEC2(0.0f); + } + + buf_b[buf_ib].qs[iqs * 4 ] = 0; + buf_b[buf_ib].qs[iqs * 4 + 1] = 0; + buf_b[buf_ib].qs[iqs * 4 + 2] = 0; + buf_b[buf_ib].qs[iqs * 4 + 3] = 0; } - - const ivec4 values = data_b[ib_outer].qs[ib_inner * 2 + iqs]; - buf_b[buf_ib].qs[iqs * 4 ] = values.x; - buf_b[buf_ib].qs[iqs * 4 + 1] = values.y; - buf_b[buf_ib].qs[iqs * 4 + 2] = values.z; - buf_b[buf_ib].qs[iqs * 4 + 3] = values.w; } void block_b_to_registers(const uint ib) { diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/quantize_q8_1.comp b/ggml/src/ggml-vulkan/vulkan-shaders/quantize_q8_1.comp index 0f3c6ca871..20e45d0253 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/quantize_q8_1.comp +++ b/ggml/src/ggml-vulkan/vulkan-shaders/quantize_q8_1.comp @@ -61,7 +61,7 @@ void quantize() { const uint a_idx = ib * 8 + iqs; - vec4 vals = a_idx < p.ne ? data_a[a_idx] : vec4(0.0f); + vec4 vals = a_idx < p.ne / 4 ? data_a[a_idx] : vec4(0.0f); const vec4 abs_vals = abs(vals); // Find absolute max for each block diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 21c7e3a8cf..22635f1635 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -6987,6 +6987,8 @@ static std::vector> make_test_cases_eval() { test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F32, GGML_TYPE_F32, 16, 32, 32, { 1, 1}, {1, 1}, {0, 1, 2, 3}, 64, 3)); test_cases.emplace_back(new test_mul_mat(GGML_TYPE_F32, GGML_TYPE_F32, 64, 77, 77, {12,1}, {1,1})); + test_cases.emplace_back(new test_mul_mat(GGML_TYPE_Q4_0, GGML_TYPE_F32, 576, 512, 576, {1,1}, {1,1})); + #if 0 // test the mat-mat path for Metal for (int k = 1; k < 512; ++k) { From 7f3e9d339c99d96d6df9833c63ec27dbbc96f003 Mon Sep 17 00:00:00 2001 From: Ruben Ortlam Date: Sun, 9 Nov 2025 09:54:47 +0100 Subject: [PATCH 37/69] vulkan: iGPU memory reporting fix (#17110) * vulkan: use all device-local heaps for memory availability reporting Co-authored-by: Giuseppe Scrivano * use all available heaps for iGPU memory reporting * Allow multiple memory types per buffer request for devices with split heaps --------- Co-authored-by: Giuseppe Scrivano --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 46 ++++++++++++++++------------ 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 31815a0129..46e098a7ff 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -2159,17 +2159,18 @@ static void ggml_vk_queue_command_pools_cleanup(vk_device& device) { } } +static std::vector ggml_vk_find_memory_properties(const vk::PhysicalDeviceMemoryProperties* mem_props, vk::MemoryRequirements* mem_req, vk::MemoryPropertyFlags flags) { + std::vector indices; -static uint32_t find_properties(const vk::PhysicalDeviceMemoryProperties* mem_props, vk::MemoryRequirements* mem_req, vk::MemoryPropertyFlags flags) { for (uint32_t i = 0; i < mem_props->memoryTypeCount; ++i) { vk::MemoryType memory_type = mem_props->memoryTypes[i]; if ((mem_req->memoryTypeBits & ((uint64_t)1 << i)) && (flags & memory_type.propertyFlags) == flags && mem_props->memoryHeaps[memory_type.heapIndex].size >= mem_req->size) { - return static_cast(i); + indices.push_back(i); } } - return UINT32_MAX; + return indices; } static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, const std::initializer_list & req_flags_list) { @@ -2212,22 +2213,24 @@ static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, const std for (auto it = req_flags_list.begin(); it != req_flags_list.end(); it++) { const auto & req_flags = *it; - uint32_t memory_type_index = find_properties(&mem_props, &mem_req, req_flags); + const std::vector memory_type_indices = ggml_vk_find_memory_properties(&mem_props, &mem_req, req_flags); - if (memory_type_index == UINT32_MAX) { + if (memory_type_indices.empty()) { continue; } buf->memory_property_flags = req_flags; - try { - buf->device_memory = device->device.allocateMemory({ mem_req.size, memory_type_index, &mem_flags_info }); - break; - } catch (const vk::SystemError& e) { - // loop and retry - // during last attempt throw the exception - if (it + 1 == req_flags_list.end()) { - device->device.destroyBuffer(buf->buffer); - throw e; + for (auto mtype_it = memory_type_indices.begin(); mtype_it != memory_type_indices.end(); mtype_it++) { + try { + buf->device_memory = device->device.allocateMemory({ mem_req.size, *mtype_it, &mem_flags_info }); + break; + } catch (const vk::SystemError& e) { + // loop and retry + // during last attempt throw the exception + if (it + 1 == req_flags_list.end() && mtype_it + 1 == memory_type_indices.end()) { + device->device.destroyBuffer(buf->buffer); + throw e; + } } } } @@ -13204,25 +13207,28 @@ void ggml_backend_vk_get_device_memory(int device, size_t * free, size_t * total vk::PhysicalDevice vkdev = vk_instance.instance.enumeratePhysicalDevices()[vk_instance.device_indices[device]]; vk::PhysicalDeviceMemoryBudgetPropertiesEXT budgetprops; vk::PhysicalDeviceMemoryProperties2 memprops = {}; - bool membudget_supported = vk_instance.device_supports_membudget[device]; + const bool membudget_supported = vk_instance.device_supports_membudget[device]; + const bool is_integrated_gpu = vkdev.getProperties().deviceType == vk::PhysicalDeviceType::eIntegratedGpu; if (membudget_supported) { memprops.pNext = &budgetprops; } vkdev.getMemoryProperties2(&memprops); + *total = 0; + *free = 0; + for (uint32_t i = 0; i < memprops.memoryProperties.memoryHeapCount; ++i) { const vk::MemoryHeap & heap = memprops.memoryProperties.memoryHeaps[i]; - if (heap.flags & vk::MemoryHeapFlagBits::eDeviceLocal) { - *total = heap.size; + if (is_integrated_gpu || (heap.flags & vk::MemoryHeapFlagBits::eDeviceLocal)) { + *total += heap.size; if (membudget_supported && i < budgetprops.heapUsage.size()) { - *free = budgetprops.heapBudget[i] - budgetprops.heapUsage[i]; + *free += budgetprops.heapBudget[i] - budgetprops.heapUsage[i]; } else { - *free = heap.size; + *free += heap.size; } - break; } } } From 86fde91e62c3f72ab7ed8a540dc1be049b735477 Mon Sep 17 00:00:00 2001 From: Eric Curtin Date: Sun, 9 Nov 2025 09:25:38 +0000 Subject: [PATCH 38/69] Switch to using Ubuntu 25.10 vulkan/mesa (#16497) Because "Ubuntu packages to be discontinued in Vulkan SDK" Signed-off-by: Eric Curtin --- .devops/vulkan.Dockerfile | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/.devops/vulkan.Dockerfile b/.devops/vulkan.Dockerfile index 6cf87c67e8..7592468403 100644 --- a/.devops/vulkan.Dockerfile +++ b/.devops/vulkan.Dockerfile @@ -1,4 +1,4 @@ -ARG UBUNTU_VERSION=24.04 +ARG UBUNTU_VERSION=25.10 FROM ubuntu:$UBUNTU_VERSION AS build @@ -7,32 +7,16 @@ FROM ubuntu:$UBUNTU_VERSION AS build # Install build tools RUN apt update && apt install -y git build-essential cmake wget xz-utils -# Install Vulkan SDK -ARG VULKAN_VERSION=1.4.321.1 -RUN ARCH=$(uname -m) && \ - wget -qO /tmp/vulkan-sdk.tar.xz https://sdk.lunarg.com/sdk/download/${VULKAN_VERSION}/linux/vulkan-sdk-linux-${ARCH}-${VULKAN_VERSION}.tar.xz && \ - mkdir -p /opt/vulkan && \ - tar -xf /tmp/vulkan-sdk.tar.xz -C /tmp --strip-components=1 && \ - mv /tmp/${ARCH}/* /opt/vulkan/ && \ - rm -rf /tmp/* - # Install cURL and Vulkan SDK dependencies RUN apt install -y libcurl4-openssl-dev curl \ - libxcb-xinput0 libxcb-xinerama0 libxcb-cursor-dev - -# Set environment variables -ENV VULKAN_SDK=/opt/vulkan -ENV PATH=$VULKAN_SDK/bin:$PATH -ENV LD_LIBRARY_PATH=$VULKAN_SDK/lib:$LD_LIBRARY_PATH -ENV CMAKE_PREFIX_PATH=$VULKAN_SDK:$CMAKE_PREFIX_PATH -ENV PKG_CONFIG_PATH=$VULKAN_SDK/lib/pkgconfig:$PKG_CONFIG_PATH + libxcb-xinput0 libxcb-xinerama0 libxcb-cursor-dev libvulkan-dev glslc # Build it WORKDIR /app COPY . . -RUN cmake -B build -DGGML_NATIVE=OFF -DGGML_VULKAN=1 -DLLAMA_BUILD_TESTS=OFF -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON && \ +RUN cmake -B build -DGGML_NATIVE=OFF -DGGML_VULKAN=ON -DLLAMA_BUILD_TESTS=OFF -DGGML_BACKEND_DL=ON -DGGML_CPU_ALL_VARIANTS=ON && \ cmake --build build --config Release -j$(nproc) RUN mkdir -p /app/lib && \ @@ -50,7 +34,7 @@ RUN mkdir -p /app/full \ FROM ubuntu:$UBUNTU_VERSION AS base RUN apt-get update \ - && apt-get install -y libgomp1 curl libvulkan-dev \ + && apt-get install -y libgomp1 curl libvulkan1 mesa-vulkan-drivers \ && apt autoremove -y \ && apt clean -y \ && rm -rf /tmp/* /var/tmp/* \ From ef1d8269972bd086bee2554fd31a865c6da84f33 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 9 Nov 2025 12:53:29 +0200 Subject: [PATCH 39/69] benches : add folder with benchmarks (#16931) * benches : add folder with benchmarks * benches : update dgx-spark bench --- benches/dgx-spark.md | 264 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100644 benches/dgx-spark.md diff --git a/benches/dgx-spark.md b/benches/dgx-spark.md new file mode 100644 index 0000000000..ec6c20d8a0 --- /dev/null +++ b/benches/dgx-spark.md @@ -0,0 +1,264 @@ +## System info + +```bash +uname --all +Linux spark-17ed 6.11.0-1016-nvidia #16-Ubuntu SMP PREEMPT_DYNAMIC Sun Sep 21 16:52:46 UTC 2025 aarch64 aarch64 aarch64 GNU/Linux + +g++ --version +g++ (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 + +nvidia-smi +Sun Nov 2 10:43:25 2025 ++-----------------------------------------------------------------------------------------+ +| NVIDIA-SMI 580.95.05 Driver Version: 580.95.05 CUDA Version: 13.0 | ++-----------------------------------------+------------------------+----------------------+ +| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | +| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | +| | | MIG M. | +|=========================================+========================+======================| +| 0 NVIDIA GB10 On | 0000000F:01:00.0 Off | N/A | +| N/A 35C P8 4W / N/A | Not Supported | 0% Default | +| | | N/A | ++-----------------------------------------+------------------------+----------------------+ +``` + +## ggml-org/gpt-oss-20b-GGUF + +Model: https://huggingface.co/ggml-org/gpt-oss-20b-GGUF + +- `llama-batched-bench` + + +main: n_kv_max = 270336, n_batch = 2048, n_ubatch = 2048, flash_attn = 1, is_pp_shared = 0, n_gpu_layers = -1, n_threads = 20, n_threads_batch = 20 + +| PP | TG | B | N_KV | T_PP s | S_PP t/s | T_TG s | S_TG t/s | T s | S t/s | +|-------|--------|------|--------|----------|----------|----------|----------|----------|----------| +| 512 | 32 | 1 | 544 | 0.374 | 1369.01 | 0.383 | 83.64 | 0.757 | 719.01 | +| 512 | 32 | 2 | 1088 | 0.274 | 3741.35 | 0.659 | 97.14 | 0.933 | 1166.66 | +| 512 | 32 | 4 | 2176 | 0.526 | 3896.47 | 0.817 | 156.73 | 1.342 | 1621.08 | +| 512 | 32 | 8 | 4352 | 1.044 | 3925.10 | 0.987 | 259.44 | 2.030 | 2143.56 | +| 512 | 32 | 16 | 8704 | 2.076 | 3945.84 | 1.248 | 410.32 | 3.324 | 2618.60 | +| 512 | 32 | 32 | 17408 | 4.170 | 3929.28 | 1.630 | 628.40 | 5.799 | 3001.76 | +| 4096 | 32 | 1 | 4128 | 1.083 | 3782.66 | 0.394 | 81.21 | 1.477 | 2795.13 | +| 4096 | 32 | 2 | 8256 | 2.166 | 3782.72 | 0.725 | 88.28 | 2.891 | 2856.14 | +| 4096 | 32 | 4 | 16512 | 4.333 | 3780.88 | 0.896 | 142.82 | 5.230 | 3157.38 | +| 4096 | 32 | 8 | 33024 | 8.618 | 3802.14 | 1.155 | 221.69 | 9.773 | 3379.08 | +| 4096 | 32 | 16 | 66048 | 17.330 | 3781.73 | 1.598 | 320.34 | 18.928 | 3489.45 | +| 4096 | 32 | 32 | 132096 | 34.671 | 3780.48 | 2.336 | 438.35 | 37.007 | 3569.51 | +| 8192 | 32 | 1 | 8224 | 2.233 | 3668.56 | 0.438 | 72.98 | 2.671 | 3078.44 | +| 8192 | 32 | 2 | 16448 | 4.425 | 3702.95 | 0.756 | 84.66 | 5.181 | 3174.95 | +| 8192 | 32 | 4 | 32896 | 8.859 | 3698.64 | 0.967 | 132.38 | 9.826 | 3347.72 | +| 8192 | 32 | 8 | 65792 | 17.714 | 3699.57 | 1.277 | 200.52 | 18.991 | 3464.35 | +| 8192 | 32 | 16 | 131584 | 35.494 | 3692.84 | 1.841 | 278.12 | 37.335 | 3524.46 | +| 8192 | 32 | 32 | 263168 | 70.949 | 3694.82 | 2.798 | 365.99 | 73.747 | 3568.53 | + + +- `llama-bench` + +| model | size | params | backend | ngl | n_ubatch | fa | mmap | test | t/s | +| ------------------------------ | ---------: | ---------: | ---------- | --: | -------: | -: | ---: | --------------: | -------------------: | +| gpt-oss 20B MXFP4 MoE | 11.27 GiB | 20.91 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 | 3714.25 ± 20.36 | +| gpt-oss 20B MXFP4 MoE | 11.27 GiB | 20.91 B | CUDA | 99 | 2048 | 1 | 0 | tg32 | 86.58 ± 0.43 | +| gpt-oss 20B MXFP4 MoE | 11.27 GiB | 20.91 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d4096 | 3445.17 ± 17.85 | +| gpt-oss 20B MXFP4 MoE | 11.27 GiB | 20.91 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d4096 | 81.72 ± 0.53 | +| gpt-oss 20B MXFP4 MoE | 11.27 GiB | 20.91 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d8192 | 3218.78 ± 11.34 | +| gpt-oss 20B MXFP4 MoE | 11.27 GiB | 20.91 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d8192 | 74.86 ± 0.64 | +| gpt-oss 20B MXFP4 MoE | 11.27 GiB | 20.91 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d16384 | 2732.83 ± 7.17 | +| gpt-oss 20B MXFP4 MoE | 11.27 GiB | 20.91 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d16384 | 71.57 ± 0.51 | +| gpt-oss 20B MXFP4 MoE | 11.27 GiB | 20.91 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d32768 | 2119.75 ± 12.81 | +| gpt-oss 20B MXFP4 MoE | 11.27 GiB | 20.91 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d32768 | 62.33 ± 0.24 | + +build: eeee367de (6989) + +## ggml-org/gpt-oss-120b-GGUF + +Model: https://huggingface.co/ggml-org/gpt-oss-120b-GGUF + +- `llama-batched-bench` + + +main: n_kv_max = 270336, n_batch = 2048, n_ubatch = 2048, flash_attn = 1, is_pp_shared = 0, n_gpu_layers = -1, n_threads = 20, n_threads_batch = 20 + +| PP | TG | B | N_KV | T_PP s | S_PP t/s | T_TG s | S_TG t/s | T s | S t/s | +|-------|--------|------|--------|----------|----------|----------|----------|----------|----------| +| 512 | 32 | 1 | 544 | 0.571 | 897.18 | 0.543 | 58.96 | 1.113 | 488.60 | +| 512 | 32 | 2 | 1088 | 0.593 | 1725.37 | 1.041 | 61.45 | 1.635 | 665.48 | +| 512 | 32 | 4 | 2176 | 1.043 | 1963.15 | 1.334 | 95.95 | 2.377 | 915.36 | +| 512 | 32 | 8 | 4352 | 2.099 | 1951.63 | 1.717 | 149.07 | 3.816 | 1140.45 | +| 512 | 32 | 16 | 8704 | 4.207 | 1947.12 | 2.311 | 221.56 | 6.518 | 1335.35 | +| 512 | 32 | 32 | 17408 | 8.422 | 1945.36 | 3.298 | 310.46 | 11.720 | 1485.27 | +| 4096 | 32 | 1 | 4128 | 2.138 | 1915.88 | 0.571 | 56.09 | 2.708 | 1524.12 | +| 4096 | 32 | 2 | 8256 | 4.266 | 1920.25 | 1.137 | 56.27 | 5.404 | 1527.90 | +| 4096 | 32 | 4 | 16512 | 8.564 | 1913.02 | 1.471 | 86.99 | 10.036 | 1645.29 | +| 4096 | 32 | 8 | 33024 | 17.092 | 1917.19 | 1.979 | 129.33 | 19.071 | 1731.63 | +| 4096 | 32 | 16 | 66048 | 34.211 | 1915.65 | 2.850 | 179.66 | 37.061 | 1782.15 | +| 4096 | 32 | 32 | 132096 | 68.394 | 1916.44 | 4.381 | 233.72 | 72.775 | 1815.13 | +| 8192 | 32 | 1 | 8224 | 4.349 | 1883.45 | 0.620 | 51.65 | 4.969 | 1655.04 | +| 8192 | 32 | 2 | 16448 | 8.674 | 1888.83 | 1.178 | 54.33 | 9.852 | 1669.48 | +| 8192 | 32 | 4 | 32896 | 17.351 | 1888.55 | 1.580 | 81.01 | 18.931 | 1737.68 | +| 8192 | 32 | 8 | 65792 | 34.743 | 1886.31 | 2.173 | 117.80 | 36.916 | 1782.20 | +| 8192 | 32 | 16 | 131584 | 69.413 | 1888.29 | 3.297 | 155.28 | 72.710 | 1809.70 | +| 8192 | 32 | 32 | 263168 | 138.903 | 1887.24 | 5.004 | 204.63 | 143.907 | 1828.73 | + + +- `llama-bench` + +| model | size | params | backend | ngl | n_ubatch | fa | mmap | test | t/s | +| ------------------------------ | ---------: | ---------: | ---------- | --: | -------: | -: | ---: | --------------: | -------------------: | +| gpt-oss 120B MXFP4 MoE | 59.02 GiB | 116.83 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 | 1919.36 ± 5.01 | +| gpt-oss 120B MXFP4 MoE | 59.02 GiB | 116.83 B | CUDA | 99 | 2048 | 1 | 0 | tg32 | 60.40 ± 0.30 | +| gpt-oss 120B MXFP4 MoE | 59.02 GiB | 116.83 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d4096 | 1825.30 ± 6.37 | +| gpt-oss 120B MXFP4 MoE | 59.02 GiB | 116.83 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d4096 | 56.94 ± 0.29 | +| gpt-oss 120B MXFP4 MoE | 59.02 GiB | 116.83 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d8192 | 1739.19 ± 6.00 | +| gpt-oss 120B MXFP4 MoE | 59.02 GiB | 116.83 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d8192 | 52.51 ± 0.42 | +| gpt-oss 120B MXFP4 MoE | 59.02 GiB | 116.83 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d16384 | 1536.75 ± 4.27 | +| gpt-oss 120B MXFP4 MoE | 59.02 GiB | 116.83 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d16384 | 49.33 ± 0.27 | +| gpt-oss 120B MXFP4 MoE | 59.02 GiB | 116.83 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d32768 | 1255.85 ± 3.26 | +| gpt-oss 120B MXFP4 MoE | 59.02 GiB | 116.83 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d32768 | 42.99 ± 0.18 | + +build: eeee367de (6989) + +## ggml-org/Qwen3-Coder-30B-A3B-Instruct-Q8_0-GGUF + +Model: https://huggingface.co/ggml-org/Qwen3-Coder-30B-A3B-Instruct-Q8_0-GGUF + +- `llama-batched-bench` + + +main: n_kv_max = 270336, n_batch = 2048, n_ubatch = 2048, flash_attn = 1, is_pp_shared = 0, n_gpu_layers = -1, n_threads = 20, n_threads_batch = 20 + +| PP | TG | B | N_KV | T_PP s | S_PP t/s | T_TG s | S_TG t/s | T s | S t/s | +|-------|--------|------|--------|----------|----------|----------|----------|----------|----------| +| 512 | 32 | 1 | 544 | 0.398 | 1285.90 | 0.530 | 60.41 | 0.928 | 586.27 | +| 512 | 32 | 2 | 1088 | 0.386 | 2651.65 | 0.948 | 67.50 | 1.334 | 815.38 | +| 512 | 32 | 4 | 2176 | 0.666 | 3076.37 | 1.209 | 105.87 | 1.875 | 1160.71 | +| 512 | 32 | 8 | 4352 | 1.325 | 3091.39 | 1.610 | 158.98 | 2.935 | 1482.65 | +| 512 | 32 | 16 | 8704 | 2.664 | 3075.58 | 2.150 | 238.19 | 4.813 | 1808.39 | +| 512 | 32 | 32 | 17408 | 5.336 | 3070.31 | 2.904 | 352.59 | 8.240 | 2112.50 | +| 4096 | 32 | 1 | 4128 | 1.444 | 2836.81 | 0.581 | 55.09 | 2.025 | 2038.81 | +| 4096 | 32 | 2 | 8256 | 2.872 | 2852.14 | 1.084 | 59.06 | 3.956 | 2086.99 | +| 4096 | 32 | 4 | 16512 | 5.744 | 2852.32 | 1.440 | 88.90 | 7.184 | 2298.47 | +| 4096 | 32 | 8 | 33024 | 11.463 | 2858.68 | 2.068 | 123.78 | 13.531 | 2440.65 | +| 4096 | 32 | 16 | 66048 | 22.915 | 2859.95 | 3.018 | 169.67 | 25.933 | 2546.90 | +| 4096 | 32 | 32 | 132096 | 45.956 | 2852.10 | 4.609 | 222.18 | 50.565 | 2612.39 | +| 8192 | 32 | 1 | 8224 | 3.063 | 2674.72 | 0.693 | 46.20 | 3.755 | 2189.92 | +| 8192 | 32 | 2 | 16448 | 6.109 | 2681.87 | 1.214 | 52.71 | 7.323 | 2245.98 | +| 8192 | 32 | 4 | 32896 | 12.197 | 2686.63 | 1.682 | 76.11 | 13.878 | 2370.30 | +| 8192 | 32 | 8 | 65792 | 24.409 | 2684.94 | 2.556 | 100.17 | 26.965 | 2439.95 | +| 8192 | 32 | 16 | 131584 | 48.753 | 2688.50 | 3.994 | 128.20 | 52.747 | 2494.64 | +| 8192 | 32 | 32 | 263168 | 97.508 | 2688.42 | 6.528 | 156.86 | 104.037 | 2529.57 | + + +- `llama-bench` + +| model | size | params | backend | ngl | n_ubatch | fa | mmap | test | t/s | +| ------------------------------ | ---------: | ---------: | ---------- | --: | -------: | -: | ---: | --------------: | -------------------: | +| qwen3moe 30B.A3B Q8_0 | 30.25 GiB | 30.53 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 | 2925.55 ± 4.25 | +| qwen3moe 30B.A3B Q8_0 | 30.25 GiB | 30.53 B | CUDA | 99 | 2048 | 1 | 0 | tg32 | 62.80 ± 0.27 | +| qwen3moe 30B.A3B Q8_0 | 30.25 GiB | 30.53 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d4096 | 2531.01 ± 6.79 | +| qwen3moe 30B.A3B Q8_0 | 30.25 GiB | 30.53 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d4096 | 55.86 ± 0.33 | +| qwen3moe 30B.A3B Q8_0 | 30.25 GiB | 30.53 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d8192 | 2244.39 ± 5.33 | +| qwen3moe 30B.A3B Q8_0 | 30.25 GiB | 30.53 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d8192 | 45.95 ± 0.33 | +| qwen3moe 30B.A3B Q8_0 | 30.25 GiB | 30.53 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d16384 | 1783.17 ± 3.68 | +| qwen3moe 30B.A3B Q8_0 | 30.25 GiB | 30.53 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d16384 | 39.07 ± 0.10 | +| qwen3moe 30B.A3B Q8_0 | 30.25 GiB | 30.53 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d32768 | 1241.90 ± 3.13 | +| qwen3moe 30B.A3B Q8_0 | 30.25 GiB | 30.53 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d32768 | 29.92 ± 0.06 | + +build: eeee367de (6989) + +## ggml-org/Qwen2.5-Coder-7B-Q8_0-GGUF + +Model: https://huggingface.co/ggml-org/Qwen2.5-Coder-7B-Q8_0-GGUF + +- `llama-batched-bench` + + +main: n_kv_max = 270336, n_batch = 2048, n_ubatch = 2048, flash_attn = 1, is_pp_shared = 0, n_gpu_layers = -1, n_threads = 20, n_threads_batch = 20 + +| PP | TG | B | N_KV | T_PP s | S_PP t/s | T_TG s | S_TG t/s | T s | S t/s | +|-------|--------|------|--------|----------|----------|----------|----------|----------|----------| +| 512 | 32 | 1 | 544 | 0.211 | 2421.57 | 1.055 | 30.33 | 1.266 | 429.57 | +| 512 | 32 | 2 | 1088 | 0.419 | 2441.34 | 1.130 | 56.65 | 1.549 | 702.32 | +| 512 | 32 | 4 | 2176 | 0.873 | 2345.54 | 1.174 | 108.99 | 2.048 | 1062.74 | +| 512 | 32 | 8 | 4352 | 1.727 | 2371.85 | 1.254 | 204.22 | 2.980 | 1460.19 | +| 512 | 32 | 16 | 8704 | 3.452 | 2373.22 | 1.492 | 343.16 | 4.944 | 1760.56 | +| 512 | 32 | 32 | 17408 | 6.916 | 2368.93 | 1.675 | 611.51 | 8.591 | 2026.36 | +| 4096 | 32 | 1 | 4128 | 1.799 | 2277.26 | 1.084 | 29.51 | 2.883 | 1431.91 | +| 4096 | 32 | 2 | 8256 | 3.577 | 2290.01 | 1.196 | 53.50 | 4.774 | 1729.51 | +| 4096 | 32 | 4 | 16512 | 7.172 | 2284.36 | 1.313 | 97.50 | 8.485 | 1946.00 | +| 4096 | 32 | 8 | 33024 | 14.341 | 2284.96 | 1.520 | 168.46 | 15.860 | 2082.18 | +| 4096 | 32 | 16 | 66048 | 28.675 | 2285.44 | 1.983 | 258.21 | 30.658 | 2154.33 | +| 4096 | 32 | 32 | 132096 | 57.354 | 2285.32 | 2.640 | 387.87 | 59.994 | 2201.82 | +| 8192 | 32 | 1 | 8224 | 3.701 | 2213.75 | 1.119 | 28.59 | 4.820 | 1706.34 | +| 8192 | 32 | 2 | 16448 | 7.410 | 2211.19 | 1.272 | 50.31 | 8.682 | 1894.56 | +| 8192 | 32 | 4 | 32896 | 14.802 | 2213.83 | 1.460 | 87.68 | 16.261 | 2022.96 | +| 8192 | 32 | 8 | 65792 | 29.609 | 2213.35 | 1.781 | 143.74 | 31.390 | 2095.93 | +| 8192 | 32 | 16 | 131584 | 59.229 | 2212.96 | 2.495 | 205.17 | 61.725 | 2131.79 | +| 8192 | 32 | 32 | 263168 | 118.449 | 2213.15 | 3.714 | 275.75 | 122.162 | 2154.25 | + + +- `llama-bench` + +| model | size | params | backend | ngl | n_ubatch | fa | mmap | test | t/s | +| ------------------------------ | ---------: | ---------: | ---------- | --: | -------: | -: | ---: | --------------: | -------------------: | +| qwen2 7B Q8_0 | 7.54 GiB | 7.62 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 | 2272.74 ± 4.68 | +| qwen2 7B Q8_0 | 7.54 GiB | 7.62 B | CUDA | 99 | 2048 | 1 | 0 | tg32 | 30.66 ± 0.02 | +| qwen2 7B Q8_0 | 7.54 GiB | 7.62 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d4096 | 2107.80 ± 9.55 | +| qwen2 7B Q8_0 | 7.54 GiB | 7.62 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d4096 | 29.71 ± 0.05 | +| qwen2 7B Q8_0 | 7.54 GiB | 7.62 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d8192 | 1937.80 ± 6.75 | +| qwen2 7B Q8_0 | 7.54 GiB | 7.62 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d8192 | 28.86 ± 0.04 | +| qwen2 7B Q8_0 | 7.54 GiB | 7.62 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d16384 | 1641.12 ± 1.78 | +| qwen2 7B Q8_0 | 7.54 GiB | 7.62 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d16384 | 27.24 ± 0.04 | +| qwen2 7B Q8_0 | 7.54 GiB | 7.62 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d32768 | 1296.02 ± 2.67 | +| qwen2 7B Q8_0 | 7.54 GiB | 7.62 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d32768 | 23.78 ± 0.03 | + +build: eeee367de (6989) + +## ggml-org/gemma-3-4b-it-qat-GGUF + +Model: https://huggingface.co/ggml-org/gemma-3-4b-it-qat-GGUF + +- `llama-batched-bench` + + +main: n_kv_max = 270336, n_batch = 2048, n_ubatch = 2048, flash_attn = 1, is_pp_shared = 0, n_gpu_layers = -1, n_threads = 20, n_threads_batch = 20 + +| PP | TG | B | N_KV | T_PP s | S_PP t/s | T_TG s | S_TG t/s | T s | S t/s | +|-------|--------|------|--------|----------|----------|----------|----------|----------|----------| +| 512 | 32 | 1 | 544 | 0.094 | 5434.73 | 0.394 | 81.21 | 0.488 | 1114.15 | +| 512 | 32 | 2 | 1088 | 0.168 | 6091.68 | 0.498 | 128.52 | 0.666 | 1633.41 | +| 512 | 32 | 4 | 2176 | 0.341 | 6010.68 | 0.542 | 236.37 | 0.882 | 2466.43 | +| 512 | 32 | 8 | 4352 | 0.665 | 6161.46 | 0.678 | 377.74 | 1.342 | 3241.72 | +| 512 | 32 | 16 | 8704 | 1.323 | 6193.19 | 0.902 | 567.41 | 2.225 | 3911.74 | +| 512 | 32 | 32 | 17408 | 2.642 | 6202.03 | 1.231 | 832.03 | 3.872 | 4495.36 | +| 4096 | 32 | 1 | 4128 | 0.701 | 5840.49 | 0.439 | 72.95 | 1.140 | 3621.23 | +| 4096 | 32 | 2 | 8256 | 1.387 | 5906.82 | 0.574 | 111.48 | 1.961 | 4210.12 | +| 4096 | 32 | 4 | 16512 | 2.758 | 5940.33 | 0.651 | 196.58 | 3.409 | 4843.33 | +| 4096 | 32 | 8 | 33024 | 5.491 | 5967.56 | 0.876 | 292.40 | 6.367 | 5187.12 | +| 4096 | 32 | 16 | 66048 | 10.978 | 5969.58 | 1.275 | 401.69 | 12.253 | 5390.38 | +| 4096 | 32 | 32 | 132096 | 21.944 | 5972.93 | 1.992 | 514.16 | 23.936 | 5518.73 | +| 8192 | 32 | 1 | 8224 | 1.402 | 5841.91 | 0.452 | 70.73 | 1.855 | 4434.12 | +| 8192 | 32 | 2 | 16448 | 2.793 | 5865.34 | 0.637 | 100.55 | 3.430 | 4795.51 | +| 8192 | 32 | 4 | 32896 | 5.564 | 5889.64 | 0.770 | 166.26 | 6.334 | 5193.95 | +| 8192 | 32 | 8 | 65792 | 11.114 | 5896.44 | 1.122 | 228.07 | 12.237 | 5376.51 | +| 8192 | 32 | 16 | 131584 | 22.210 | 5901.38 | 1.789 | 286.15 | 24.000 | 5482.74 | +| 8192 | 32 | 32 | 263168 | 44.382 | 5906.56 | 3.044 | 336.38 | 47.426 | 5549.02 | + + +- `llama-bench` + +| model | size | params | backend | ngl | n_ubatch | fa | mmap | test | t/s | +| ------------------------------ | ---------: | ---------: | ---------- | --: | -------: | -: | ---: | --------------: | -------------------: | +| gemma3 4B Q4_0 | 2.35 GiB | 3.88 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 | 5810.04 ± 21.71 | +| gemma3 4B Q4_0 | 2.35 GiB | 3.88 B | CUDA | 99 | 2048 | 1 | 0 | tg32 | 84.54 ± 0.18 | +| gemma3 4B Q4_0 | 2.35 GiB | 3.88 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d4096 | 5288.04 ± 3.54 | +| gemma3 4B Q4_0 | 2.35 GiB | 3.88 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d4096 | 78.82 ± 1.37 | +| gemma3 4B Q4_0 | 2.35 GiB | 3.88 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d8192 | 4960.43 ± 16.64 | +| gemma3 4B Q4_0 | 2.35 GiB | 3.88 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d8192 | 74.13 ± 0.30 | +| gemma3 4B Q4_0 | 2.35 GiB | 3.88 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d16384 | 4495.92 ± 31.11 | +| gemma3 4B Q4_0 | 2.35 GiB | 3.88 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d16384 | 72.37 ± 0.29 | +| gemma3 4B Q4_0 | 2.35 GiB | 3.88 B | CUDA | 99 | 2048 | 1 | 0 | pp2048 @ d32768 | 3746.90 ± 40.01 | +| gemma3 4B Q4_0 | 2.35 GiB | 3.88 B | CUDA | 99 | 2048 | 1 | 0 | tg32 @ d32768 | 63.02 ± 0.20 | + +build: eeee367de (6989) + From cb1adf885105da7ce23db746b4202f4e987aa3e8 Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 9 Nov 2025 14:27:05 +0200 Subject: [PATCH 40/69] server : handle failures to restore host cache (#17078) * server : handle failures to restore host cache * server : add tests for the prompt cache --- tools/server/server.cpp | 3 ++ tools/server/tests/unit/test_completion.py | 42 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/tools/server/server.cpp b/tools/server/server.cpp index 9d91e32d1f..6bd4be3cc1 100644 --- a/tools/server/server.cpp +++ b/tools/server/server.cpp @@ -1690,6 +1690,9 @@ struct server_slot { bool res = prompt_cache.load(prompt, tokens, ctx, id); if (!res) { SLT_WRN(*this, "%s", "failed to load prompt from cache\n"); + + llama_memory_seq_rm(llama_get_memory(ctx), id, -1, -1); + prompt.tokens.clear(); } } diff --git a/tools/server/tests/unit/test_completion.py b/tools/server/tests/unit/test_completion.py index 3c0ce98973..ef1757db21 100644 --- a/tools/server/tests/unit/test_completion.py +++ b/tools/server/tests/unit/test_completion.py @@ -1,6 +1,8 @@ import pytest import requests import time +import random + from openai import OpenAI from utils import * @@ -564,3 +566,43 @@ def test_cancel_request(): time.sleep(1) # wait for HTTP_POLLING_SECONDS res = server.make_request("GET", "/slots") assert res.body[0]["is_processing"] == False + + +# this test exercises the host-memory prompt cache +# ref: https://github.com/ggml-org/llama.cpp/pull/16391 +# ref: https://github.com/ggml-org/llama.cpp/pull/17078 +def test_completion_prompt_cache(): + global server + server.n_slots = 2 + server.kv_unified = True + server.start() + + for _ in range(16): + # generate alternating random prompts with variable lengths in order to get them in and out of the cache + r = random.randint(0, 4) + prompt = (" Hello " + str(r)) * (40 + r) + n_prompt = (40 + r)*5 + 2 + n_predict = random.randint(1, 8) + + res = server.make_request( + "POST", + "/completion", + data={ + "prompt": prompt, + "n_predict": n_predict, + }, + ) + + assert res.status_code == 200 + assert "content" in res.body + content = res.body["content"] + assert isinstance(content, str) + assert len(content) > 0 + + assert type(res.body["has_new_line"]) == bool + assert "timings" in res.body + timings = res.body["timings"] + + assert "prompt_n" in timings and timings["prompt_n"] + timings["cache_n"] == n_prompt + assert "predicted_n" in timings and timings["predicted_n"] == n_predict + assert "tokens" in res.body and isinstance(res.body["tokens"], list) From 1c07c0c68c692d39b83f491bad9447af852bb652 Mon Sep 17 00:00:00 2001 From: compilade Date: Sun, 9 Nov 2025 09:45:50 -0500 Subject: [PATCH 41/69] convert : handle compressed-tensors quant method (#17069) * convert : handle compressed-tensors quant method * convert : handle int-quantized models * convert : handle naive-quantized models * gguf-py : __pos__ is also unary * convert : fix flake8 lint * convert : use F32 for dequant of pack-quantized tensors --- convert_hf_to_gguf.py | 91 +++++++++++++++++++++++++++++++++++++++---- gguf-py/gguf/lazy.py | 11 ++++-- 2 files changed, 92 insertions(+), 10 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 222f6ed6dc..b155d112b1 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -278,15 +278,14 @@ class ModelBase: # The scale is inverted return data / scale.float() - def dequant_simple(weight: Tensor, scale: Tensor) -> Tensor: + def dequant_simple(weight: Tensor, scale: Tensor, block_size: Sequence[int] | None = None) -> Tensor: scale = scale.float() - if (weight_block_size := quant_config.get("weight_block_size")): - # TODO: make sure it's a list of integers - for i, size in enumerate(weight_block_size): + if block_size is not None: + for i, size in enumerate(block_size): scale = scale.repeat_interleave(size, i) - # unpad the scale (e.g. when the tensor size isn't a multiple of the block size) - scale = scale[tuple(slice(0, size) for size in weight.shape)] + # unpad the scale (e.g. when the tensor size isn't a multiple of the block size) + scale = scale[tuple(slice(0, size) for size in weight.shape)] return weight.float() * scale @@ -333,6 +332,40 @@ class ModelBase: return (scales[g_idx].float() * (weight - zeros[g_idx]).float()).T + def dequant_packed(w: Tensor, scale: Tensor, shape_tensor: Tensor, zero_point: Tensor | None, num_bits: int, group_size: int): + assert w.dtype == torch.int32 + shape = tuple(shape_tensor.tolist()) + assert len(shape) == 2 + mask = (1 << num_bits) - 1 + + shifts = torch.arange(0, 32 - (num_bits - 1), num_bits, dtype=torch.int32) + if self.lazy: + shifts = LazyTorchTensor.from_eager(shifts) + + if zero_point is None: + offset = 1 << (num_bits - 1) + else: + assert len(zero_point.shape) == 2 + offset = (zero_point.unsqueeze(1) >> shifts.reshape(1, -1, 1)) & mask + offset = offset.reshape(-1, zero_point.shape[1]) + # trim padding, and prepare for broadcast + # NOTE: the zero-point is packed along dim 0 + offset = offset[:shape[0], :].unsqueeze(-1) + + # extract values + # NOTE: the weights are packed along dim 1 + unpacked = (w.unsqueeze(-1) >> shifts.reshape(1, 1, -1)) & mask + unpacked = unpacked.reshape(shape[0], -1) + + # trim padding + unpacked = unpacked[:, :shape[1]] + + # prepare for broadcast of the scale + unpacked = unpacked.reshape(shape[0], (unpacked.shape[-1] + group_size - 1) // group_size, group_size) + unpacked = unpacked - offset + + return (unpacked * scale.unsqueeze(-1).float()).reshape(shape) + if quant_method == "bitnet": for name in self.model_tensors.keys(): if name.endswith(".weight_scale"): @@ -342,12 +375,13 @@ class ModelBase: self.model_tensors[weight_name] = lambda w=w, s=s: dequant_bitnet(w(), s()) tensors_to_remove.append(name) elif quant_method == "fp8": + block_size = quant_config.get("weight_block_size") for name in self.model_tensors.keys(): if name.endswith(".weight_scale_inv"): weight_name = name.removesuffix("_scale_inv") w = self.model_tensors[weight_name] s = self.model_tensors[name] - self.model_tensors[weight_name] = lambda w=w, s=s: dequant_simple(w(), s()) + self.model_tensors[weight_name] = lambda w=w, s=s, bs=block_size: dequant_simple(w(), s(), bs) tensors_to_remove.append(name) elif quant_method == "gptq": for name in self.model_tensors.keys(): @@ -371,6 +405,49 @@ class ModelBase: ".scales", ) ] + elif quant_method == "compressed-tensors": + quant_format = quant_config["format"] + groups = quant_config["config_groups"] + if len(groups) > 1: + raise NotImplementedError("Can't handle multiple config groups for compressed-tensors yet") + weight_config = tuple(groups.values())[0]["weights"] + + if quant_format == "float-quantized" or quant_format == "int-quantized" or quant_format == "naive-quantized": + block_size = weight_config.get("block_structure", None) + strategy = weight_config.get("strategy") + assert strategy == "channel" or strategy == "block" + assert weight_config.get("group_size") is None # didn't find a model using this yet + for name in self.model_tensors.keys(): + if name.endswith(".weight_scale"): + weight_name = name.removesuffix("_scale") + w = self.model_tensors[weight_name] + s = self.model_tensors[name] + self.model_tensors[weight_name] = lambda w=w, s=s: dequant_simple(w(), s(), block_size) + tensors_to_remove.append(name) + elif quant_format == "pack-quantized": + assert weight_config.get("strategy") == "group" + assert weight_config.get("type", "int") == "int" + num_bits = weight_config.get("num_bits") + group_size = weight_config.get("group_size") + assert isinstance(num_bits, int) + assert isinstance(group_size, int) + for name in self.model_tensors.keys(): + if name.endswith(".weight_packed"): + base_name = name.removesuffix("_packed") + w = self.model_tensors[name] + scale = self.model_tensors[base_name + "_scale"] + shape = self.model_tensors[base_name + "_shape"] + zero_point = self.model_tensors.get(base_name + "_zero_point", lambda: None) + new_tensors[base_name] = ( + lambda w=w, scale=scale, shape=shape, zero_point=zero_point: dequant_packed( + w(), scale(), shape(), zero_point(), num_bits, group_size, + ) + ) + tensors_to_remove += [base_name + n for n in ("_packed", "_shape", "_scale")] + if (base_name + "_zero_point") in self.model_tensors: + tensors_to_remove.append(base_name + "_zero_point") + else: + raise NotImplementedError(f"Quant format {quant_format!r} for method {quant_method!r} is not yet supported") else: raise NotImplementedError(f"Quant method is not yet supported: {quant_method!r}") diff --git a/gguf-py/gguf/lazy.py b/gguf-py/gguf/lazy.py index f9bcadae02..c126f09c50 100644 --- a/gguf-py/gguf/lazy.py +++ b/gguf-py/gguf/lazy.py @@ -48,13 +48,18 @@ class LazyMeta(ABCMeta): # NOTE: doing this from a metaclass is very convenient # TODO: make this even more comprehensive for binary_op in ( - "lt", "le", "eq", "ne", "ge", "gt", "not" - "abs", "add", "and", "floordiv", "invert", "lshift", "mod", "mul", "matmul", - "neg", "or", "pos", "pow", "rshift", "sub", "truediv", "xor", + "lt", "le", "eq", "ne", "ge", "gt", + "add", "and", "floordiv", "lshift", "mod", "mul", "matmul", + "or", "pow", "rshift", "sub", "truediv", "xor", "iadd", "iand", "ifloordiv", "ilshift", "imod", "imul", "ior", "irshift", "isub", "ixor", "radd", "rand", "rfloordiv", "rmul", "ror", "rpow", "rsub", "rtruediv", "rxor", ): attr_name = f"__{binary_op}__" + # evaluation on the meta tensor is needed in case there's broadcasting + namespace[attr_name] = mk_wrap(attr_name, meta_noop=False) + + for unary_op in ("not", "abs", "invert", "neg", "pos"): + attr_name = f"__{unary_op}__" # the result of these operators usually has the same shape and dtype as the input, # so evaluation on the meta tensor can be skipped. namespace[attr_name] = mk_wrap(attr_name, meta_noop=True) From 802cef44bfaa80987076d621c8bf5875627c197b Mon Sep 17 00:00:00 2001 From: compilade Date: Sun, 9 Nov 2025 09:49:40 -0500 Subject: [PATCH 42/69] convert : parse safetensors directly (#15667) * convert : parse safetensors directly * gguf-py : order safetensors tensors by name Applies to both local and remote safetensors custom parsing. This matches the behavior of the official safetensors implementation. * convert : rename from_safetensors_meta to from_local_tensor For consistency with from_remote_tensor * convert : fix no-lazy dtypes from direct safetensors --- convert_hf_to_gguf.py | 27 +++++++++----- gguf-py/gguf/utility.py | 80 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 9 deletions(-) diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index b155d112b1..13448fd681 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -218,8 +218,7 @@ class ModelBase: logger.info(f"gguf: indexing model part '{part_name}'") ctx: ContextManager[Any] if is_safetensors: - from safetensors import safe_open - ctx = cast(ContextManager[Any], safe_open(self.dir_model / part_name, framework="pt", device="cpu")) + ctx = cast(ContextManager[Any], gguf.utility.SafetensorsLocal(self.dir_model / part_name)) else: ctx = contextlib.nullcontext(torch.load(str(self.dir_model / part_name), map_location="cpu", mmap=True, weights_only=True)) @@ -228,18 +227,18 @@ class ModelBase: for name in model_part.keys(): if is_safetensors: + data: gguf.utility.LocalTensor = model_part[name] if self.lazy: - data = model_part.get_slice(name) - data_gen = lambda data=data: LazyTorchTensor.from_safetensors_slice(data) # noqa: E731 + data_gen = lambda data=data: LazyTorchTensor.from_local_tensor(data) # noqa: E731 else: - data = model_part.get_tensor(name) - data_gen = lambda data=data: data # noqa: E731 + dtype = LazyTorchTensor._dtype_str_map[data.dtype] + data_gen = lambda data=data, dtype=dtype: torch.from_numpy(data.mmap_bytes()).view(dtype).reshape(data.shape) # noqa: E731 else: - data = model_part[name] + data_torch: Tensor = model_part[name] if self.lazy: - data_gen = lambda data=data: LazyTorchTensor.from_eager(data) # noqa: E731 + data_gen = lambda data=data_torch: LazyTorchTensor.from_eager(data) # noqa: E731 else: - data_gen = lambda data=data: data # noqa: E731 + data_gen = lambda data=data_torch: data # noqa: E731 tensors[name] = data_gen # verify tensor name presence and identify potentially missing files @@ -10079,6 +10078,16 @@ class LazyTorchTensor(gguf.LazyBase): lazy = cls(meta=cls.meta_with_dtype_and_shape(dtype, shape), args=(st_slice,), func=lambda s: s[...] if len(s.get_shape()) == 0 else s[:]) return cast(torch.Tensor, lazy) + @classmethod + def from_local_tensor(cls, t: gguf.utility.LocalTensor) -> Tensor: + def load_tensor(tensor: gguf.utility.LocalTensor) -> Tensor: + dtype = cls._dtype_str_map[tensor.dtype] + return torch.from_numpy(tensor.mmap_bytes()).view(dtype).reshape(tensor.shape) + dtype = cls._dtype_str_map[t.dtype] + shape = t.shape + lazy = cls(meta=cls.meta_with_dtype_and_shape(dtype, shape), args=(t,), func=lambda r: load_tensor(r)) + return cast(torch.Tensor, lazy) + @classmethod def from_remote_tensor(cls, remote_tensor: gguf.utility.RemoteTensor): dtype = cls._dtype_str_map[remote_tensor.dtype] diff --git a/gguf-py/gguf/utility.py b/gguf-py/gguf/utility.py index 769ccb02f0..c9401a1c0a 100644 --- a/gguf-py/gguf/utility.py +++ b/gguf-py/gguf/utility.py @@ -1,10 +1,12 @@ from __future__ import annotations from dataclasses import dataclass +from pathlib import Path from typing import Literal import os import json +import numpy as np def fill_templated_filename(filename: str, output_type: str | None) -> str: @@ -177,6 +179,10 @@ class SafetensorRemote: except KeyError as e: raise ValueError(f"Missing key in metadata for tensor '{name}': {e}, meta = {meta}") + # order by name (same as default safetensors behavior) + # ref: https://github.com/huggingface/safetensors/blob/0816a1ae1d6b731cefd67f061d80d1cadd0dd7bb/bindings/python/src/lib.rs#L606 + res = dict(sorted(res.items(), key=lambda t: t[0])) + return res @classmethod @@ -266,3 +272,77 @@ class SafetensorRemote: if os.environ.get("HF_TOKEN"): headers["Authorization"] = f"Bearer {os.environ['HF_TOKEN']}" return headers + + +@dataclass +class LocalTensorRange: + filename: Path + offset: int + size: int + + +@dataclass +class LocalTensor: + dtype: str + shape: tuple[int, ...] + data_range: LocalTensorRange + + def mmap_bytes(self) -> np.ndarray: + return np.memmap(self.data_range.filename, offset=self.data_range.offset, shape=self.data_range.size) + + +class SafetensorsLocal: + """ + Read a safetensors file from the local filesystem. + + Custom parsing gives a bit more control over the memory usage. + The official safetensors library doesn't expose file ranges. + """ + ALIGNMENT = 8 # bytes + + tensors: dict[str, LocalTensor] + + def __init__(self, filename: Path): + with open(filename, "rb") as f: + metadata_length = int.from_bytes(f.read(8), byteorder='little') + file_size = os.stat(filename).st_size + if file_size < 8 + metadata_length: + raise ValueError(f"Could not read complete metadata. Need {8 + metadata_length} bytes, got {file_size}") + + metadata_str = f.read(metadata_length).decode('utf-8') + try: + metadata = json.loads(metadata_str) + except json.JSONDecodeError as e: + raise ValueError(f"Failed to parse safetensors metadata as JSON: {e}") + + data_start_offset = f.tell() + alignment = self.ALIGNMENT + if data_start_offset % alignment != 0: + data_start_offset += alignment - (data_start_offset % alignment) + + tensors: dict[str, LocalTensor] = {} + for name, meta in metadata.items(): + if name == "__metadata__": + # ignore metadata, it's not a tensor + continue + + tensors[name] = LocalTensor( + dtype=meta["dtype"], + shape=tuple(meta["shape"]), + data_range=LocalTensorRange( + filename, + data_start_offset + meta["data_offsets"][0], + meta["data_offsets"][1] - meta["data_offsets"][0], + ), + ) + + # order by name (same as default safetensors behavior) + # ref: https://github.com/huggingface/safetensors/blob/0816a1ae1d6b731cefd67f061d80d1cadd0dd7bb/bindings/python/src/lib.rs#L606 + self.tensors = dict(sorted(tensors.items(), key=lambda t: t[0])) + + def __enter__(self, *args, **kwargs): + del args, kwargs # unused + return self.tensors + + def __exit__(self, *args, **kwargs): + del args, kwargs # unused From 392e09a60852d0e879d4bbedd5ace3e6852f719e Mon Sep 17 00:00:00 2001 From: Ruben Ortlam Date: Sun, 9 Nov 2025 16:14:41 +0100 Subject: [PATCH 43/69] vulkan: fix memory allocations (#17122) --- ggml/src/ggml-vulkan/ggml-vulkan.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index 46e098a7ff..7570febeaa 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -2220,9 +2220,12 @@ static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, const std } buf->memory_property_flags = req_flags; + bool done = false; + for (auto mtype_it = memory_type_indices.begin(); mtype_it != memory_type_indices.end(); mtype_it++) { try { buf->device_memory = device->device.allocateMemory({ mem_req.size, *mtype_it, &mem_flags_info }); + done = true; break; } catch (const vk::SystemError& e) { // loop and retry @@ -2233,6 +2236,10 @@ static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, const std } } } + + if (done) { + break; + } } if (!buf->device_memory) { From b8595b16e69e3029e06be3b8f6635f9812b2bc3f Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Sun, 9 Nov 2025 18:31:02 +0200 Subject: [PATCH 44/69] mtmd : fix embedding size for image input (#17123) --- tools/mtmd/mtmd-helper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/mtmd/mtmd-helper.cpp b/tools/mtmd/mtmd-helper.cpp index 686f42f396..89e3355bba 100644 --- a/tools/mtmd/mtmd-helper.cpp +++ b/tools/mtmd/mtmd-helper.cpp @@ -182,7 +182,7 @@ int32_t mtmd_helper_decode_image_chunk( } const llama_model * model = llama_get_model(lctx); - int n_mmproj_embd = llama_model_n_embd(model); + int n_mmproj_embd = llama_model_n_embd_inp(model); int n_pos_per_embd = mtmd_decode_use_mrope(ctx) ? 4 : 1; int32_t n_tokens = mtmd_input_chunk_get_n_tokens(chunk); From 15274c0c501727b782b37e81eb77e5edae55fffa Mon Sep 17 00:00:00 2001 From: Georgi Gerganov Date: Mon, 10 Nov 2025 10:44:10 +0200 Subject: [PATCH 45/69] benches : add eval results (#17139) [no ci] --- ...oss-120b-high_temp1.0_20251109_094547.html | 35144 ++++++++++++++++ ...oss-120b-high_temp1.0_20251109_094547.json | 6 + ...gh_temp1.0_20251109_094547_allresults.json | 2896 ++ benches/{ => dgx-spark}/dgx-spark.md | 0 .../dgx-spark/run-aime-120b-t8-x8-high.log | 11 + 5 files changed, 38057 insertions(+) create mode 100644 benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547.html create mode 100644 benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547.json create mode 100644 benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547_allresults.json rename benches/{ => dgx-spark}/dgx-spark.md (100%) create mode 100644 benches/dgx-spark/run-aime-120b-t8-x8-high.log diff --git a/benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547.html b/benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547.html new file mode 100644 index 0000000000..3f84fa1b4d --- /dev/null +++ b/benches/dgx-spark/aime25_openai__gpt-oss-120b-high_temp1.0_20251109_094547.html @@ -0,0 +1,35144 @@ + + + + + + + + +

+%Gxa=tD z!pH}2l`DIHm3#Kf7ye~~C401wvBZ|!_K7{A?>Wb^tPn?!2d z$BZCG?F=W2{3*5qAb<`=$!}!cp3I=YVuZvFY#J>qLMY#`2FRP|v+h#@#i`DD1+)8j z4q>17D*yz>Usv?nwpjo!o=v=T53$}p_T}e~9U5&NA*6yEkHDZhUknG6#JgI ze+`D7>r_hLA?_eUQ!dsE3!omIr8bCg3xf;}Hg{<>5jbiiK7ZhGFaI(*x zp#5xu>bw-2sbOwp=P4&mLWAb2&2tLTnD`}jHe|N;(^3_0-J*DvoL=*J^*c% zo+Ycato+hTvoHfm!PArEJ?UI%-;*aKkQ~UMozW64^{)o6jPCpH%T&Z5<=PoB zLkq~gcX>%o+`oXJ+sE~52|BO2m7vq*c{b=7`<#MX>WK$K`)oBCD#x^pYEd9mrb&n! zl>^Kd4DPC-2-LoIbZ*P(k+t|VZBfpXU)WwMh-9tXA!VMKlKMD{N!xgxe+^oWi0itL z4^K{>X3}qM^h3V8qO_Imuk7)f9oE{+zVA1CW`apmEj2RNgG34aU&6aT{M$%9ueqJn z8yJAhDj|5w6FyZ66@0jeRa~RoapDoxj``7Yo#fVE^Id{}8KO#uNDUMDHR5!%08UY7 zx9PJ;BH<~VmFk_(511?Pe>eOjfRL;A;L#*z3a2KjR0Yc3e3YZX0f3R_;;467$i@=3 z+=Ia_O}7B7m_5@$?vKx)u0R0lbV27oD%@A6=sl9_P~#@L`68p$L1l`5|~1!d@u&PI9*{2K}=UEC`Bf z*S*@HZYOpOPC>$H&HHz*ka%!H*R~!#YUx<2oN!>`fQHH2g?dp+mS6;&!E+X#p^ff$ zO!@CFsE&z;{P+npf04NBz=!u#9P4noGB4hIC8k|lv~h{Kru9r2T8f)x2hanUSgF)v zTig?J_rce{2mi|8%)}&Yx$7lmn2fuF%`6ysm@kZ*Q$j5Yd;Jrq2N9MBPD zLe4+KW-L%2FtHKFC!f6vu1nLmz1G*zDZ|}yb5hi}K#g+yAbL4I*F-i5pj9>KV7H~d zodNMD1P;(B1-W;2CgEX9Dac@$=-Y@2@Gc=-1PED{PzcwuwvvMd$=(Cp1XU>{A zTR5=TYha%%LU@*5^#X=`7`qXbVvW*rP_hB-SlIk;TbehXq0N^TWHI142dXh3Gn~>^ zAWL0-%>V=cxX#{xNIt7Ot~Rh?xH;FDu=YFDQ;U74e@Z}L>&i7I9;){ZDS~xi;oVgi zG{Z{k$)fk{D}51&3H9{?ra`@QX2#4@2Q(gNIog; zNGIYu(I{=xE&SC8w3VlqD_ zq*l-z-kHZ{)Qb#2C;)d;_#r5o6ZA;Xt0=kXW`aam9@VcwGB&XQ*N(or(r?tq3gC}T zv=tR_QnQZuf{lT~I{Mp-=Mp~%S7KtbEHU6ie|Y1n6s#cbPh$>Ym_}prF7#3p#9FrO zQ2|hTan^^+(z23uWt5n}=EDA0!>pBN2nK@>h|eLxh}a$uNAYAb5{JbFg0==H-x1_m zV(@Pv95TQK-4`VCwI4wgP$asy_!^fc-gAIDKIF?q4X_xFNe(L;=j+>-FQlrDjEWdN zf7m+*4e!5TQXXPxyfs4SV+nmdVqR;(=a309o39yAC3kgw5X05!84m|finRTAfCeCr zqk9G6A_aeyJYBx4#Ux~NZ0>(}?z@u*3dJXRB|DtR$MQ&UB9DZjDgr}=?Cyu7Asm}< zE~-&ja`#$BUPOLJl12w4l2h~2HhJtze{Nw(>IScUvS2|1;nF6JP zHWmod1c*1SmE%B>A%H>=u5!T(R~T-gnPu`w0)xg~-nCQC21v>Wa85V zoufvfACKN=N1y? zLQSB_JRg8uBEWO<;!C^$c@C6v_%&h9&<%U?T|Tl7Gf2>mClQm%YzAO9Hl_1q$?^pa zw9-rx*H0;OBsvX3ql?5B4JY+Uy_)(-ZL>Ly9EF(_71b!ceWxjr<+f2t^ks#=h*99wee zndd-1p5Nr6j&$ntUMr9Ata$V8>96c82ff60F#H%HwO_U#$Y-G~|CE_Q;9>dO|8Vj)my68hC%u>wR8Wwfd= z&e!5A8)EEzA!2$oe_-clCzniwIq}Tdw&{Za{-y^cGF>pcvnt}XSGWM!2@OAJ(LPP9 z-+%q}mtRv=F1mU)f;4u${P52G^3!`@V)*oG7Td>p0#6&Ka7aHL;-T6umHi|th(xeqI8zAjf11=p1mt#CaOOlFnEa<_ z6l0#uBoG9;gO$pFbD8^LI`52U)wJiJ@1cqfdc_*>j2~9`I(dvk8#rmT$9+70ppOmo zHPhD`@2Ze9wu0)3W^5rp;d5l6qP1A2(h^DYcfWh`@~LVy(ePPyj0TQ?6V*s}HHz~_ zy#AP?FIzJwf5-KtC@zUA!%h#NWAfUeUf^$P7w|7qGF++V7#Y(Z(6cmBYWyG_CoW%z zB4Dl{WTxxf!$?t6BS|-Y^tF96ee-5+D(iyK=@BOF-V6V$wGe23Z5xE^wdr7@UK=I|h7Bq=a0kxZm{Xh%@LK@7q6ZzUlA-7&rA2qrt zt<-u`f6hQ2rBknpgOSJ^`@W{!D4WU4TJq1dz1FGoM7S|0j2gHQvSS71n%mM*n46?@ zra4iJi}n^(nudmg@uT*&2c^mOM~v`x8lGJo;w2t790L4FX%B4TP#P8X*n$r~d1g z67%r?_vGu$zec+6Mixc=ScrG>ki~?}!2WTKkEsI`kC79sMyc`h;A^Ty-N_&=5#xws z@T3(>yM{ZO#EgD7Ln3j1tRAOD*?NqPf6j)aW8e7L2V`I<8-u;IOc70{$yzTu&>N31 z0+bKdoR0{PntdcHAnv8{eYlz~Mibno8{%&HB6Vs(q1n{KuV94H57pCjim(Prb3jwT z_q=}cZAc;uNr@-|JcAYY3kx{HmVwZRQ>{}8M34qT;c^AzA;BdO^{U9FBZqlz(Z|=)cod+qM>0=EoY=AJdhKrk9FKwMPH*4Zbbkm!R2cM zWf2s=6gcuF;mDUKtHp-6ErGMqyJVa7LPUZte2hEGJLo70Y$74XN3_twf1eWRNfPmU zJjI2v9J}{;v!gdmvCtHsLHpDGnb4ko#MV@_%DMBrH$Vu08 z%YIg4d=JaKy4j^Xc6BCzJ5UeCxc^t`FDYc!MC?#4DVtZ`3fTuxe-mQgAw)q6AOOvP zz%aB`R623gg3hCvu~^b~wW2)+-HI!dxP8!{ht4A9I%6wq_p_^o*A~tRI6)O&sIYn) zrWQkyYwIsovl?{FPK5ok3qj(Ql{mOIRp+yeDULz#G^%*eXLEtf88umsT2ETmB;y$X zxzKqCRFS*SHdj%@fAP+djQ1FLT!++X@cX?<5AW4_7zmG3)l11xrmnG01BOgBj1dUN zL(n6v8X^QspcY62IW9{8cbO8u%^}bbqY^;e26Yg(=+k<#Yu?BjZqv|SR;$Yu>uV2S zVXN4=WKiV@u4IRHFQ99au0WGt9M3kcf_3!_36U zQJvBPbVz0Gc6xnoa1uw3{o2hv>HBc!#0@e>`PCgS%IUqlM4?8dfu^ggVF*#>Ug!`{ zyGTpdi21U^LG2ueyU7_?q4_{JL%Fi3h5dR-`nhnHjfEw}qt1-iH(AbLquk7IkuZS@ zq)#h*Rz3Kwf3qZ8X>^u@OM#j-U_g`+!G`7vRkf(8of^4hWbQWp{QC9x8~UE{|uBM9Hv##jp&<4!MxK9o3 z>Ygh#uY4CHU83EeyM!e!wv;7br?45X&JEx+&0;PT#%UskYb0V^;RKJOek=qAFBinH zW|(3v#wBwQE%9?nmR{rNFl|ynaRR32#LDlADtTse;QHZ+;TLnqG|gF4)d`^RI&h)wV5bWpKmUsvg^-vST`c9B zH-$5W)r0Trw2_XonK1)sHe46bJP%P8a1rLNfX20{wE7SxlDCD#t8gTgOCq*p^J)|| zGR!1=(puXMD?|6Pj}Rs^9u|FM|DX2{A&K3ve^L^Seb7|X`D{h~#La7x59&2BXTWFF zBgOMt=m0&M!?Y&MS#CWys*bdif0x$_MANAvBHyq=s22Q#ye7D_0-KBS-%b10PrfLq zV>U>@qiHj+cL-T9aN^cEO2XpO&7L$=?8cX?C6l?_baR-r>|d4ZA_=LG zf8Ih)H~a&g+>Mv0>Dyvj$mk^o=Ehqk`693D1z^1>j5k-*e&Nm%;5DSy0bHln%fzu+ zgZ=q?^=!IP&riL0L1e96UVj%7gSMP%#rj9g=~hCkn1_cMG}lsG__Xj;OYhowdp)=} zBT)`DcMbRJXyVnh3-LRVidJyc2nh2$f6!|;-&g^*ifVhOP3rDUSMcc3)k3xPedWHJO?xi!>n!zP!5gxCLEn+j&YPw7f2r4i z;}&m5cwpBOExFb6$+Qs9|_n`x7tZ`#FW^*GIL zDY;R!VWlIv*q)1;zkA{FHK&x+)qfhZY27VSE1}Oxm%cfde1Mtpc2SP%zG=D|vI+AiU?vIVl(Qu5ebOS@1H!-y6A%f@$ ze3sJ%7#fqc07I%vjXWsee7#~1-h{$O)IC;*wk8Qj8S7atZqv#(ub=uYe;)(zscqfe z#d#surf%>2_U+H<+PSGeZ`PZ2Eek%Q=O)SdLXpxPqB(9n7L(^uTO%loMh}-eBSdY5 zO4<*;!o#Q}ll8}4NgYBDOuX{B)SzAX*uYT$8Ng9}QXPjX^+S`7yJAd9+*3*_}-OmsD1FMeXwBV z;jfX56ldA|oKaM+Ie+h(sUJaF#&0$lO+l+CJ>A%qr;XsI=t$u1f4RYl34E40>-Uu8 zHWOtwY{_XAc^Yr;5_MOLEJcWh=6NG1UYX`43de8iQ*R;&~O!iVy$*K*2R8}BrL@Kw5j#SB>a3` zI$S*3eLUKWv2(q9+Jm$*My0wXf=DTlKIuLKgQneD7)QcCe{fzwJOe<5;GycD4T36I zW%;Z+ok77o9t}y40C|qTF!Ob_U5z(mL<~a}0054B7bCxO{|XUT#aMb9%Q5_&etQvz zyfwW#T~t(c?sNJ+BdzYIpEvl1Ofbke#N3$!a*_ z-4};Py_iONa&NK z)ktbfDM&~Myip11^G4TTc5FDNcV?}mkd06%;oY4ia&&9fz0)B8$!DxR+Cy0BP1iok zgug&@U1*#%$k?mPv`)-e>e*=88p<=)Kxv8?u2{pqf99oW``FXgK;s|32?nY1EBc!y zG01AGN@nddEfvAMm8Ox7@lR@3QIL^(iqW0%-u7pCgJAB2s< zctX7h{Bg*o9e6aUJt$77I!@7v9b6r z7>J|ze-$E*gj1~c96_+LWN=7gFSGmFvY7mRq0_i~(d0yVwFAF2^rhwHe_U0s&QA|# zlVJ9E-9N6(3fh78dxfy~WVG+$e|2`Y`;QM5{t_;=`|(L-lAwBFVgbbGZS(!~Ms=em v#I?dy_?zGS=6~^jKmWXdH{f#ge!TqoBiP320f3heGZ8Tee(;{R94s;bz0EfP delta 756538 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%0AAG9)jht%_z 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