Magnus 叔叔在他的农场上种植了一些幼苗,作为他重新造林计划的一部分。不幸的是,鹿喜欢吃鲜嫩的幼苗嫩芽和叶子,因此有必要在它们周围建造保护性栅栏。由于鹿和其他啃食幼苗的动物可以够到栅栏内的一定距离,因此每个栅栏与每棵幼苗之间必须保持至少一个最小距离(即安全边距)。
防鹿栅栏非常昂贵,因此 Magnus 叔叔希望最小化所使用的栅栏总长度。你的任务是编写一个程序,计算围住并保护这些幼苗所需的最小栅栏总长度。栅栏可以包含直段和弯曲段。你可以设计一个围住所有幼苗的单一栅栏,也可以设计多个围住不同幼苗分组的独立栅栏。
图 6 展示了两个示例配置,每个配置都包含三棵具有不同边距要求的幼苗。在上方配置中(对应于第一个样例输入),最小长度的解决方案由两个独立的栅栏组成。在下方配置中(对应于第二个样例输入),最小长度的解决方案由一个单一的栅栏组成。
图 6:防鹿栅栏
输入格式
输入包含多个测试用例。每个测试用例的第一行包含两个整数 $N$($0 < N \le 9$),表示幼苗的数量,以及 $M$($0 < M \le 200$),表示每棵幼苗周围所需的边距。
接下来是 $N$ 行,其中每行包含两个整数 $x$ 和 $y$,表示一棵幼苗的直角坐标($|x| \le 100$ 且 $|y| \le 100$)。没有两棵幼苗位于同一位置。为简单起见,所有幼苗均可视为点,且防鹿栅栏的厚度可视为零。
最后一个测试用例之后是一行,包含两个零。
输出格式
对于每个测试用例,输出测试用例编号(从 1 开始),后跟保护具有给定边距的幼苗所需的最小栅栏总长度。输出的长度应保留小数点后两位。请遵循样例输出的格式。
样例
输入样例 1
3 2 0 0 2 0 10 0 3 4 0 0 2 0 10 0 0 0
输出样例 1
Case 1: length = 29.13 Case 2: length = 45.13