#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const double INF = 1e9;
struct Point {
int x, y;
Point() {}
Point(int x, int y): x(x), y(y) {}
};
int tc, n;
vector<Point> px, py;
double ans;
ll sqr(int x) {
return 1ll * x * x;
}
double dist(const Point &a, const Point &b) {
return sqrt(double(sqr(a.x - b.x) + sqr(a.y -b.y)));
}
double perimeter(const Point &a, const Point &b, const Point &c) {
return dist(a, b) + dist(b, c) + dist(c, a);
}
bool cmpX(const Point &a, const Point &b) {
if (a.x != b.x) return a.x < b.x;
return a.y < b.y;
}
bool cmpY(const Point &a, const Point &b) {
if (a.y != b.y) return a.y < b.y;
return a.x < b.x;
}
double calc(int l, int r, const vector<Point> & PointX, const vector<Point> &PointY) {
if(r - l + 1 < 3) return INF;
int mid = (l + r) / 2;
Point pMid = PointX[mid];
vector<Point> pointByYLeft, pointByYRight;
for(int i = 0; i < PointY.size(); ++ i) {
if(cmpX(pMid, PointY[i])) {
pointByYRight.push_back(PointY[i]);
}
else {
pointByYLeft.push_back((PointY[i]));
}
}
double p = min(calc(l, mid, PointX, pointByYLeft), calc(mid + 1, r, PointX, pointByYRight));
vector<Point> temp;
for(int i = 0; i < PointY.size(); ++ i) {
if(abs(PointY[i].x - pMid.x) <= p/2) {
temp.push_back(PointY[i]);
}
}
for(int i = 0; i < temp.size(); i ++) {
for(int j = i + 1; j < temp.size(); ++ j) {
if(dist(temp[i], temp[j]) > p/2) {
break;
}
for(int k = j + 1; k < temp.size(); ++ k) {
if(dist(temp[i], temp[k]) > p/2) {
break;
}
p = min(p, perimeter(temp[i], temp[j], temp[k]));
}
}
}
return p;
}
int main() {
cin >> tc;
for (int TC = 1; TC <= tc; TC ++) {
cin >> n;
px = vector<Point> (n);
py = vector<Point> (n);
for(int i = 0; i < n; i ++) {
int x, y;
cin >> x >> y;
px[i] = py[i] = Point(x, y);
}
sort(px.begin(), px.end(), cmpX);
sort(py.begin(), py.end(), cmpY);
ans = calc(0, n - 1, px, py);
cout << "Case #" << TC << ": " << ans << '\n';
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKY29uc3QgZG91YmxlIElORiA9IDFlOTsKCnN0cnVjdCBQb2ludCB7CiAgICBpbnQgeCwgeTsKICAgIFBvaW50KCkge30KICAgIFBvaW50KGludCB4LCBpbnQgeSk6IHgoeCksIHkoeSkge30KfTsKCmludCB0YywgbjsKdmVjdG9yPFBvaW50PiBweCwgcHk7CmRvdWJsZSBhbnM7CgpsbCBzcXIoaW50IHgpIHsKICAgIHJldHVybiAxbGwgKiB4ICogeDsKfQoKZG91YmxlIGRpc3QoY29uc3QgUG9pbnQgJmEsIGNvbnN0IFBvaW50ICZiKSB7CiAgICByZXR1cm4gc3FydChkb3VibGUoc3FyKGEueCAtIGIueCkgKyBzcXIoYS55IC1iLnkpKSk7Cn0KCmRvdWJsZSBwZXJpbWV0ZXIoY29uc3QgUG9pbnQgJmEsIGNvbnN0IFBvaW50ICZiLCBjb25zdCBQb2ludCAmYykgewogICAgcmV0dXJuIGRpc3QoYSwgYikgKyBkaXN0KGIsIGMpICsgZGlzdChjLCBhKTsKfQoKYm9vbCBjbXBYKGNvbnN0IFBvaW50ICZhLCBjb25zdCBQb2ludCAmYikgewogICAgaWYgKGEueCAhPSBiLngpIHJldHVybiBhLnggPCBiLng7CiAgICByZXR1cm4gYS55IDwgYi55Owp9CmJvb2wgY21wWShjb25zdCBQb2ludCAmYSwgY29uc3QgUG9pbnQgJmIpIHsKICAgIGlmIChhLnkgIT0gYi55KSByZXR1cm4gYS55IDwgYi55OwogICAgcmV0dXJuIGEueCA8IGIueDsKfQoKZG91YmxlIGNhbGMoaW50IGwsIGludCByLCBjb25zdCB2ZWN0b3I8UG9pbnQ+ICYgUG9pbnRYLCBjb25zdCB2ZWN0b3I8UG9pbnQ+ICZQb2ludFkpIHsKICAgIGlmKHIgLSBsICsgMSA8IDMpIHJldHVybiBJTkY7CiAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICBQb2ludCBwTWlkID0gUG9pbnRYW21pZF07CiAgICB2ZWN0b3I8UG9pbnQ+IHBvaW50QnlZTGVmdCwgcG9pbnRCeVlSaWdodDsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBQb2ludFkuc2l6ZSgpOyArKyBpKSB7CiAgICAgICAgaWYoY21wWChwTWlkLCBQb2ludFlbaV0pKSB7CiAgICAgICAgICAgIHBvaW50QnlZUmlnaHQucHVzaF9iYWNrKFBvaW50WVtpXSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwb2ludEJ5WUxlZnQucHVzaF9iYWNrKChQb2ludFlbaV0pKTsKICAgICAgICB9CiAgICB9CiAgICBkb3VibGUgcCA9IG1pbihjYWxjKGwsIG1pZCwgUG9pbnRYLCBwb2ludEJ5WUxlZnQpLCBjYWxjKG1pZCArIDEsIHIsIFBvaW50WCwgcG9pbnRCeVlSaWdodCkpOwogICAgdmVjdG9yPFBvaW50PiB0ZW1wOwogICAgZm9yKGludCBpID0gMDsgaSA8IFBvaW50WS5zaXplKCk7ICsrIGkpIHsKICAgICAgICBpZihhYnMoUG9pbnRZW2ldLnggLSBwTWlkLngpIDw9IHAvMikgewogICAgICAgICAgICB0ZW1wLnB1c2hfYmFjayhQb2ludFlbaV0pOwogICAgICAgIH0KICAgIH0KICAgIGZvcihpbnQgaSA9IDA7IGkgPCB0ZW1wLnNpemUoKTsgaSArKykgewogICAgICAgIGZvcihpbnQgaiA9IGkgKyAxOyBqIDwgdGVtcC5zaXplKCk7ICsrIGopIHsKICAgICAgICAgICAgaWYoZGlzdCh0ZW1wW2ldLCB0ZW1wW2pdKSA+IHAvMikgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yKGludCBrID0gaiArIDE7IGsgPCB0ZW1wLnNpemUoKTsgKysgaykgewogICAgICAgICAgICAgICAgaWYoZGlzdCh0ZW1wW2ldLCB0ZW1wW2tdKSA+IHAvMikgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcCA9IG1pbihwLCBwZXJpbWV0ZXIodGVtcFtpXSwgdGVtcFtqXSwgdGVtcFtrXSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHA7Cn0KCmludCBtYWluKCkgewogICAgY2luID4+IHRjOwogICAgZm9yIChpbnQgVEMgPSAxOyBUQyA8PSB0YzsgVEMgKyspIHsKICAgICAgICBjaW4gPj4gbjsKICAgICAgICBweCA9IHZlY3RvcjxQb2ludD4gKG4pOwogICAgICAgIHB5ID0gdmVjdG9yPFBvaW50PiAobik7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkgKyspIHsKICAgICAgICAgICAgaW50IHgsIHk7CiAgICAgICAgICAgIGNpbiA+PiB4ID4+IHk7CiAgICAgICAgICAgIHB4W2ldID0gcHlbaV0gPSBQb2ludCh4LCB5KTsKICAgICAgICB9CiAgICAgICAgc29ydChweC5iZWdpbigpLCBweC5lbmQoKSwgY21wWCk7CiAgICAgICAgc29ydChweS5iZWdpbigpLCBweS5lbmQoKSwgY21wWSk7CiAgICAgICAgYW5zID0gY2FsYygwLCBuIC0gMSwgcHgsIHB5KTsKICAgICAgICBjb3V0IDw8ICJDYXNlICMiIDw8IFRDIDw8ICI6ICIgPDwgYW5zIDw8ICdcbic7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=