using System.Text; using System.IO; using System.Collections.Generic; using System.Linq; using System.Diagnostics; namespace ConsoleApp1 { public class A { void SolveTest(TextReader reader, TextWriter writer, int testNumber) { var line1 = reader.ReadLine().Trim().Split(' ').Select(int.Parse).ToArray(); int W = line1[0]; int R = line1[1]; int N = line1[2]; var lights = reader.ReadLine().Trim().Split(' ').Select(int.Parse).ToArray(); if (lights[0] - R > 0) { writer.WriteLine($"Case #{testNumber}: IMPOSSIBLE"); return; } int count1 = 0; for (int i = 0; i < N; ++i) { count1++; if (lights[i] + R >= W) break; if (i > 0 && lights[i - 1] + R < lights[i] - R) { writer.WriteLine($"Case #{testNumber}: IMPOSSIBLE"); return; } } if (lights[N-1] + R < W) { writer.WriteLine($"Case #{testNumber}: IMPOSSIBLE"); return; } int count2 = 0; for (int i = N-1; i >= 0; --i) { count2++; if (lights[i] - R <= 0) break; } writer.WriteLine($"Case #{testNumber}: {System.Math.Min(count1, count2)}"); } void SolveAll(TextReader reader, TextWriter writer) { int testCount = int.Parse(reader.ReadLine()); for (int i = 0; i < testCount; ++i) { SolveTest(reader, writer, i + 1); } } private static readonly string inputFileName = "input.txt"; private static readonly string outputFileName = "output.txt"; public static void Main(string[] args) { A a = new A(); if (args.Contains("file")) { using (var reader = new StreamReader(new FileStream(inputFileName, FileMode.Open))) { using (var writer = new StreamWriter(outputFileName)) { a.SolveAll(reader, writer); } } } else { a.SolveAll(System.Console.In, System.Console.Out); } } } }