import java.io.DataInputStream; import java.util.StringTokenizer; public class probf { static int maxrows, maxcols; static boolean[][] tree = new boolean[100][100]; public static void main (String[] args) throws Exception { int types = 6; DataInputStream data = new DataInputStream(System.in); int sets = Integer.parseInt(data.readLine()); for (int set = 0; set < sets; set ++) { StringTokenizer stuff = new StringTokenizer(data.readLine()); maxrows = Integer.parseInt(stuff.nextToken()); maxcols = Integer.parseInt(stuff.nextToken()); for (int row = 0; row < maxrows; row ++) { String s = data.readLine(); for (int col = 0; col < maxcols; col ++) tree[row][col] = (s.charAt(col) != '-'); } float max = 0.0f; for (int row = 0; row < maxrows; row ++) for (int col = 0; col < maxcols; col ++) if (getNearest(row, col) > max) max = getNearest(row, col); int front = (int) Math.floor(max); int back = Math.round(100 * (max - front)); String maxstring = front + "." + back; if (back < 10) maxstring = maxstring + "0"; System.out.println("Data set " + (set + 1) + ": The following are all " + maxstring + " yards from the closest tree"); for (int row = 0; row < maxrows; row ++) for (int col = 0; col < maxcols; col ++) if (getNearest(row, col) == max) System.out.println((row + 1) + " " + (col + 1)); System.out.println(); } data.close(); } static float getNearest(int R, int C) { if (tree[R][C]) return 0.0f; float nearest = Float.MAX_VALUE; for (int row = 0; row < maxrows; row ++) for (int col = 0; col < maxcols; col ++) if (tree[row][col]) if (dist(R, C, row, col) < nearest) nearest = dist(R, C, row, col); return nearest; } static float dist(int R1, int C1, int R2, int C2) { return 10 * ((float) Math.sqrt((R1 - R2) * (R1 - R2) + (C1 - C2) * (C1 - C2))); } }