import java.util.*;
import java.lang.*;
import java.io.*;

public class node {
    public int x;
    public int y;
    public node(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
class Main
{
	const int inf = 10000000;
	vector <node> cities;
	int d [200];
	void diikstra ( int n ){
    d[0] = 0;
    for (int i = 1; i < n; i++){
        d[i] = inf;
    }
	public static void main (String[] args) throws java.lang.Exception
	{
    priority_queue < pair <int, int> > q;
    q.push({d[0], 0});
    while (!q.empty()) {
        int num_v = q.top().second;
        node cur = cities[num_v];
        int distv = -q.top().first;
        q.pop();
        for (int i = 0; i < n; i++) {
             int distance = max (distv, (cur.x - cities[i].x)*(cur.x - cities[i].x)+(cur.y - cities[i].y)*(cur.y - cities[i].y));
                     if(d[i] > distance){
                        d[i] = distance;
                        q.push ({-distance, i});
                    }
        }
            }
}
int main() {
    cout.precision(3);
    int q;
    cin >> q;
    for (int w = 0; w < q; w++){
        int n;
        cin >> n;
        for (int i = 0; i < n; i++){
            int a, b;
            cin >> a >> b;
            cities.push_back({a,b});
        }
        diikstra (n);
        for (int i = 0; i < n; i++){
            cities.pop_back();
        }
        cout << fixed << sqrt(d[1]) <<  endl;
	}
}