#include<iostream>
#include<fstream>
#include<cstdlib>
#include<iomanip>
#include<set>
#include<map>
#include<algorithm>
#include<vector>
#include<cstdio>
#include<queue>
#include<stack>
#include<cmath>
#define ll long long
#define pb push_back
#define ld long double
#define mp make_pair
#define pii pair<int, int>
using namespace std;

int maxk = -1, maxi, maxj;
int a[2000][2000];
ll sum[2000][2000];
int L = 2, R = 3, B = 4, T = 5;
const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, -1, 0, 1};

int n;
bool inn(int x, int y) {
    if (x < 0) return false;
    if (y < 0) return false;
    if (x >= n) return false;
    if (y >= n) return false;
}
int getT(int x, int y) {
    
}
bool used[4000000];

ll getsum(int x, int y, int k) {
    ll a = sum[x + k][y + k];
    if (x > 0) {
        a -= sum[x - 1][y + k];
    }
    if (y > 0)
        a -= sum[x + k][y - 1];
    if ((x > 0) && (y > 0))
        a += sum[x - 1][y - 1];
    return a;
}

int main(void) {
    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) {
            if (used[a[i][j]]) {
                a[i][j] = -a[i][j];
            }
            else used[a[i][j]] = true;
            sum[i][j] = 0;
            if (i > 0)
                sum[i][j] += sum[i - 1][j];
            if (j > 0)
                sum[i][j] += sum[i][j - 1];
            if ((i > 0) && (j > 0))
                sum[i][j] -= sum[i - 1][j - 1];
            sum[i][j] += a[i][j];
        }
    }
    for (int k = n - 1; k >= 0; --k) {
        for (int i = 1; i < n; ++i) {
            if (i + k >= n - 1) continue;
            for (int j = 1; j < n; ++j) {
                if (j + k >= n - 1)
                    continue;
                if (getsum(i, j, k) == 0) {
                    cout << k + 1 << " " << i + 1 << " " << j + 1 << endl;
                    return 0;
                }
            }
        }
    }
    cerr << "FAIL" << endl;
}
