// Arup Guha
// 3/12/2018
// Solution to 2018 UCF HS Contest Problem: New Island and Radios

import java.util.*;

public class radios {

	public static int n;
	public static int[][] centers;
	public static double[][] adj;

	public static void main(String[] args) {

		Scanner stdin = new Scanner(System.in);
		int nC = stdin.nextInt();

		// Process each case.
		for (int loop=1; loop<=nC; loop++) {

			// Read in centers.
			n = stdin.nextInt();
			centers = new int[n][2];
			for (int i=0; i<n; i++)
				for (int j=0; j<2; j++)
					centers[i][j] = stdin.nextInt();

			// Pre-compute these so we don't do this over and over again.
			adj = new double[n][n];
			for (int i=0; i<n; i++)
				for (int j=0; j<n; j++)
					adj[i][j] = dist(i, j);

			// Good enough for our binary search...max dist is 2*10^4*sqrt(2).
			int low = 1, high = 100000;

			// Here is our binary search.
			while (low < high) {

				// Try 1/2 way in between.
				int mid = (low+high)/2;

				// Our answer is no more than mid.
				if (connected(mid))
					high = mid;

				// Our answer can't be any more than mid-1.
				else
					low = mid+1;
			}

			// Output the result.
			System.out.println("Island #"+loop+": "+low);
		}
	}

	// Compute the distance between these two towers.
	public static double dist(int i, int j) {
		return Math.sqrt(Math.pow(centers[i][0]-centers[j][0], 2) + Math.pow(centers[i][1]-centers[j][1], 2));
	}

	// Return true iff the graph is connected with a radius of r.
	public static boolean connected(int r) {

		// Run a DFS from vertex 0.
		boolean[] used = new boolean[n];
		dfs(0, used, r);

		// If we find something not visited the answer is no.
		for (int i=0; i<n; i++)
			if (!used[i])
				return false;

		// If we get here, we are good.
		return true;
	}

	public static void dfs(int v, boolean[] used, int r) {

		// Mark this vertex as true.
		used[v] = true;

		// Try going to all unvisited neighbors.
		for (int i=0; i<n; i++)
			if (!used[i] && adj[v][i] < r+1e-9)
				dfs(i, used, r);
	}
}