//mai shte go napisha dp-to we maina :D
#include <bits/stdc++.h>
using namespace std;
#define MAXN 2000

int n, k, len, ans_k = 0, ans_i = -1, ans_j = -1;
int a[MAXN][MAXN];

bool valid[MAXN][MAXN], flag = false;

inline bool valid_square_2(int i, int j){
    if(i==0 || j==0 || i>=n-3 || j>=n-3) return false;
    if(a[i][j]==a[i][j+1] && a[i+1][j]==a[i+1][j+1]) return true; // horizontal config
    if(a[i][j]==a[i+1][j] && a[i][j+1]==a[i+1][j+1]) return true;
    return false;
}

inline bool valid_new(int k, int i, int j){
    if(i+(k-2)>=n-3 || j+(k-2) >= n-3) return false;
    for(int p = i; p <= (i+(k-2)); p+=2) {
        for(int q = j; q <= (j+(k-2)); q+=2) {
            if(valid[p][q]==0) return false;

        }
    }

    return true;
}
int main() {
    scanf("%d", &n);
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            scanf("%d", &a[i][j]);
        }
    }

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            valid[i][j] = valid_square_2(i, j);
        }
    }

  //cout << valid_new(6, 1, 1) << endl;
flag = false;
    for(int i = 0; i < n; i++) {
        if(flag) break;
        for(int j = 0; j < n; j++) {
            if(valid[i][j]==true){ ans_k = 2; ans_i = i+1; ans_j = j+1; flag = true; break;}
        }
    }



    for(int k = 4; k <= n-2; k+=2) {
        for(int i = 1; i <= n-3; i++) {
            for(int j = 1; j <= n-3; j++) {
                if(valid[i][j]){
                    if(valid_new(k, i, j)==true) {
                        if(k>ans_k){
                            ans_k = k;
                            ans_i = i+1;
                            ans_j = j+1;
                        }
                    }
                }
            }
        }
    }

    cout << ans_k << " " << ans_i << " " << ans_j << endl;

}
