import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
class Solution {
int t
= Integer.
parseInt(br.
readLine()); StringBuilder str = new StringBuilder("");
for (int h = 1; h <= t; h++)
{
str.append("Case #" + h + ": ");
String[] in
= br.
readLine().
trim().
split(" "); long k
= Long.
parseLong(in
[1]); long arr[] = new long[n];
in = br.readLine().trim().split(" ");
for (int i = 0; i < n; i++) {
arr
[i
] = Long.
parseLong(in
[i
]); }
List<Long> diff = new ArrayList<>();
for (int i = 1; i < arr.length; i++) {
long d = arr[i] - arr[i - 1];
if (d > 0) {
d--;
}
diff.add(d);
}
List<Long> ans = new ArrayList<>();
ans.add(k - arr[n - 1]);
ans.add(arr[0] - 1);
for (int j
= diff.
size() - 1; j
>= Math.
max(0, diff.
size() - 2); j
--) { ans.add((diff.get(j) + 1) / 2);
}
p += ans.get(ans.size() - 1);
p += ans.get(ans.size() - 2);
if (diff.size() > 0) {
Double p2
= (double)diff.
get(diff.
size() - 1); if (p2 > p) {
p = p2;
}
}
str.append(p / (double)k + "\n");
}
out.print(str);
out.flush();
br.close();
}
}
aW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLkFycmF5czsKaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwoKY2xhc3MgU29sdXRpb24gewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKCQlCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcigKCQkJbmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOwoJCWludCB0ID0gSW50ZWdlci5wYXJzZUludChici5yZWFkTGluZSgpKTsKCQlQcmludFdyaXRlciBvdXQgPSBuZXcgUHJpbnRXcml0ZXIoU3lzdGVtLm91dCk7CgkJU3RyaW5nQnVpbGRlciBzdHIgPSBuZXcgU3RyaW5nQnVpbGRlcigiIik7CgkJZm9yIChpbnQgaCA9IDE7IGggPD0gdDsgaCsrKQoJCXsKCQkJc3RyLmFwcGVuZCgiQ2FzZSAjIiArIGggKyAiOiAiKTsKCQkJU3RyaW5nW10gaW4gPSBici5yZWFkTGluZSgpLnRyaW0oKS5zcGxpdCgiICIpOwoJCQlpbnQgbiA9IEludGVnZXIucGFyc2VJbnQoaW5bMF0pOwoJCQlsb25nIGsgPSBMb25nLnBhcnNlTG9uZyhpblsxXSk7CgkJCWxvbmcgYXJyW10gPSBuZXcgbG9uZ1tuXTsKCQkJaW4gPSBici5yZWFkTGluZSgpLnRyaW0oKS5zcGxpdCgiICIpOwoJCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCQkJYXJyW2ldID0gTG9uZy5wYXJzZUxvbmcoaW5baV0pOwoJCQl9CgkJCUxpc3Q8TG9uZz4gZGlmZiA9IG5ldyBBcnJheUxpc3Q8PigpOwoJCQlBcnJheXMuc29ydChhcnIpOwoJCQlmb3IgKGludCBpID0gMTsgaSA8IGFyci5sZW5ndGg7IGkrKykgewoJCQkJbG9uZyBkID0gYXJyW2ldIC0gYXJyW2kgLSAxXTsKCQkJCWlmIChkID4gMCkgewoJCQkJCWQtLTsKCQkJCX0KCQkJCWRpZmYuYWRkKGQpOwoJCQl9CgkJCURvdWJsZSBwID0gbmV3IERvdWJsZSgwKTsKCQkJQ29sbGVjdGlvbnMuc29ydChkaWZmKTsKCgkJCUxpc3Q8TG9uZz4gYW5zID0gbmV3IEFycmF5TGlzdDw+KCk7CgkJCWFucy5hZGQoayAtIGFycltuIC0gMV0pOwoJCQlhbnMuYWRkKGFyclswXSAtIDEpOwoJCQlmb3IgKGludCBqID0gZGlmZi5zaXplKCkgLSAxOyBqID49IE1hdGgubWF4KDAsIGRpZmYuc2l6ZSgpIC0gMik7IGotLSkgewoJCQkJYW5zLmFkZCgoZGlmZi5nZXQoaikgKyAxKSAvIDIpOwoJCQl9CgkJCUNvbGxlY3Rpb25zLnNvcnQoYW5zKTsKCQkJcCArPSBhbnMuZ2V0KGFucy5zaXplKCkgLSAxKTsKCQkJcCArPSBhbnMuZ2V0KGFucy5zaXplKCkgLSAyKTsKCQkJaWYgKGRpZmYuc2l6ZSgpID4gMCkgewoJCQkJRG91YmxlIHAyID0gKGRvdWJsZSlkaWZmLmdldChkaWZmLnNpemUoKSAtIDEpOwoJCQkJaWYgKHAyID4gcCkgewoJCQkJCXAgPSBwMjsKCQkJCX0KCQkJfQoJCQlzdHIuYXBwZW5kKHAgLyAoZG91YmxlKWsgKyAiXG4iKTsKCQl9CgkJb3V0LnByaW50KHN0cik7CgkJb3V0LmZsdXNoKCk7CgkJYnIuY2xvc2UoKTsKCX0KfQ==