/**
 * 
 */

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

/**
 * @author smundhra
 * 
 */

// A Floyd Warshall Implementation of Above
public class Main
{

    /**
     * @param args
     * @throws IOException
     * @throws NumberFormatException
     */
    public static void main(String[] args) throws NumberFormatException, IOException
    {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));

        int i, j, k;
        int t = Integer.parseInt(bf.readLine());
        while (t > 0)
        {
            int size = Integer.parseInt(bf.readLine());
            int adj[][] = new int[size + 1][size + 1];

            for (i = 0; i < (size + 1); i++)
                for (j = 0; j < (size + 1); j++)
                {
                    adj[i][j] = Integer.MAX_VALUE;
                    if (i == j)
                        adj[i][j] = 0;
                }
            for (i = 1; i < size + 1; i++)
            {
                String s[] = bf.readLine().split(" ");
                for (String node : s)
                {
                    j = Integer.parseInt(node);
                    adj[i][j] = 1;
                    adj[j][i] = 1;
                }
            }
            for (k = 1; k < size + 1; k++)
                for (i = 1; i < size + 1; i++)
                    for (j = 1; j < size + 1; j++)
                    {
                        if (adj[i][k] != Integer.MAX_VALUE && adj[k][j] != Integer.MAX_VALUE
                            && adj[i][k] + adj[k][j] < adj[i][j])
                            adj[i][j] = adj[i][k] + adj[k][j];

                    }

            int dist[] = new int[size + 1];
            int temp = 0;
            for (i = 1; i < size + 1; i++)
            {
                for (j = 1; j < size + 1; j++)
                {

                    temp += adj[i][j];
                }
                dist[i] = temp;
                temp = 0;
            }
            int shortest = 1000000, shortestNode = 0;
            for (i = 1; i < size + 1; i++)
            {
                if (dist[i] < shortest)
                {
                    shortest = dist[i];
                    shortestNode = i;
                }
                else if (dist[i] == shortest)
                {
                    shortest = dist[i];
                    if (shortestNode > i)
                        shortestNode = i;

                }
            }
            pw.printf(shortestNode + " " + "%f" + "\n", ((shortest / (float)size)));
            t--;
        }
        pw.close();
    }

}
