#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cassert>
#include <cmath>
#include <stack>
#include <queue>
#include <deque>



using namespace std;


typedef long long ll;
typedef double ld;

const int MAX_N = 2100;

int arr[MAX_N][MAX_N];
int dl[MAX_N][MAX_N];
int dr[MAX_N][MAX_N];
int du[MAX_N][MAX_N];
int dd[MAX_N][MAX_N];


int n;


int main()
{
    scanf("%d", &n);

    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j)
            scanf("%d", &arr[i][j]);


    for (int i = 1; i < n; ++i)
    {
        for (int j = 1; j < n; ++j)
        {
            if (j == 1 || dr[i][j - 1] == 0)
            {
                dr[i][j] = 0;
                for (int k = j; k < n; ++k)
                {
                    if (arr[i][k] != arr[i - 1][k])
                        ++dr[i][j];
                    else
                        break;
                }
            }
            else
                dr[i][j] = dr[i][j - 1] - 1;
        }
    }

    for (int j = 1; j < n; ++j)
    {
        for (int i = 1; i < n; ++i)
        {
            if (i == 1 || dd[i - 1][j] == 0)
            {
                dd[i][j] = 0;
                for (int k = i; k < n; ++k)
                {
                    if (arr[k][j] != arr[k][j - 1])
                        ++dd[i][j];
                    else
                        break;
                }
            }
            else
                dd[i][j] = dd[i - 1][j] - 1;
        }
    }


    for (int i = 1; i < n; ++i)
    {
        for (int j = n - 1; j >= 1; --j)
        {
            if (j == n - 1 || dl[i][j + 1] == 0)
            {
                dl[i][j] = 0;
                for (int k = j - 1; k >= 0; --k)
                {
                    if (arr[i][k] != arr[i - 1][k])
                        ++dl[i][j];
                    else
                        break;
                }
            }
            else
                dl[i][j] = dl[i][j + 1] - 1;
        }
    }

    for (int j = 1; j < n; ++j)
    {
        for (int i = n - 1; i >= 1; --i)
        {
            if (i == n - 1 || du[i + 1][j] == 0)
            {
                du[i][j] = 0;
                for (int k = i - 1; k >= 0; --k)
                {
                    if (arr[k][j] != arr[k][j - 1])
                        ++du[i][j];
                    else
                        break;
                }
            }
            else
                du[i][j] = du[i + 1][j] - 1;
        }
    }


    /*for (int i = 1; i < n; ++i)
    {


        for (int j = 1; j < n; ++j)
            cout << dr[i][j] << " ";
        cout << "\n";
    }*/


    for (int i = 1; i < n; ++i)
        for (int j = 1; j < n; ++j)
        {
            dr[i][j] = min(dr[i][j], dd[i][j]);
            dl[i][j] = min(dl[i][j], du[i][j]);
        }


    int bst = 0;
    int bx = 0;
    int by = 0;

    for (int i = 1; i < n; ++i)
        for (int j = 1; j < n; ++j)
            for (int l = bst + 2; i + l < n && j + l < n && dr[i][j] >= l; l += 2)
            {
                if (dl[i + l][j + l] >= l)
                {
                    bst = l;
                    bx = i;
                    by = j;
                }
            }

    cout << bst << " " << bx + 1 << " " << by + 1;








    return 0;
}
