import java.io.*;
import java.util.*;
public class Solution {
static int[] dr = { -1, 1, 0, 0 };
static int[] dc = { 0, 0, -1, 1 };
static int count = 1;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int test_case = 1; test_case <= T; test_case++) {
int N = Integer.parseInt(br.readLine());
int[][] rooms = new int[N][N];
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
rooms[i][j] = Integer.parseInt(st.nextToken());
}
}
int room = Integer.MAX_VALUE;
int max = 0;
for (int r = 0; r < N; r++) {
for (int c = 0; c < N; c++) {
count = 1;
dfs(r, c, rooms);
int temp_room = rooms[r][c];
if (max < count) {
max = count;
room = temp_room;
} else if (max == count) {
room = (room < temp_room) ? room : temp_room;
}
}
}
sb.append("#").append(test_case).append(" ").append(room).append(" ").append(max).append("\n");
}
System.out.println(sb);
br.close();
}
static int dfs(int r, int c, int rooms[][]) {
for (int i = 0; i < dr.length; i++) {
int nr = r + dr[i];
int nc = c + dc[i];
if (0 <= nr && nr < rooms.length && 0 <= nc && nc < rooms.length) {
if (rooms[nr][nc] - rooms[r][c] == 1) {
count++;
dfs(nr, nc, rooms);
}
}
}
return count;
}
}