import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.StringTokenizer; /** * * @author cteam012 */ public class tribune { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static StringTokenizer st; /** * @param args the command line arguments */ public static void main(String[] args) throws IOException { while(true){ st = new StringTokenizer(br.readLine()); if (!st.hasMoreElements()){ break; } int N = Integer.parseInt(st.nextToken()); char[][] table = new char[N][N]; HashMap counter = new HashMap<>(); for (int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine()); String line = st.nextToken(); for (int j = 0; j < N; j++) { char c = line.charAt(j); table[i][j] = c; if (counter.containsKey(c)) { int value = counter.get(c); counter.put(c, value + 1); } else { counter.put(c, 1); } } } int max = 0; char max_char = '_'; int min = 1000000; char min_char = '_'; boolean blocked = false; for (char c : counter.keySet()) { int value = counter.get(c); //System.out.println(c + ": " + value); if (value == 1) { max_char = c; blocked = true; } if (value < min && c != max_char) { min = value; min_char = c; } if (value > max && !blocked) { max = value; max_char = c; } } int I = 0; int J = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { char c = table[i][j]; if (c == max_char) { if (counter.get(max_char) == 1) { I = i + 1; J = j + 1; break; } if (!is_valid(max_char, min_char, table, i, j)) { I = i + 1; J = j + 1; break; } } } } System.out.println(I + " " + J + " " + min_char); } } private static boolean is_valid(char max, char min, char[][] table, int i, int j) { boolean seen_min = false; for (int k = 0; k < table.length; k++) { if (k != i) { char c = table[k][j]; if (c == max) { return false; // v radku je barva MAX dvakrat } if (c == min) { seen_min = true; } } } if (!seen_min) { return false; } seen_min = false; for (int k = 0; k < table.length; k++) { if (k != j) { char c = table[i][k]; if (c == max) { return false; // v radku je barva MAX dvakrat } if (c == min) { seen_min = true; } } } if (!seen_min) { return false; } return true; } }