#include<cstdio>
using namespace std;
const int MAXN=2100;
int n;
int it[2][MAXN][4*MAXN];
int a[MAXN][MAXN];
int lamp;
void read()
{
    int i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        scanf("%d",&a[i][j]);
}
void update(int t,int x,int y)
{
    int k,l,r;
    k=1;
    l=1;
    r=n;
    while(l!=r)
    {
        it[t][x][k]++;
        if((l+r)/2>=y)
        {
            r=(l+r)/2;
            k=k*2;
        }
        else
        {
            l=(l+r)/2+1;
            k=k*2+1;
        }
    }
    it[t][x][k]++;
}
void initialise()
{
    int i,j;
    for(i=2;i<=n;i++)
        for(j=1;j<=n;j++)
        if(a[i][j]!=a[i-1][j])update(0,i,j);
    for(j=2;j<=n;j++)
        for(i=1;i<=n;i++)
        if(a[i][j]!=a[i][j-1])update(1,j,i);
}
int find(int t,int k,int l,int r,int idx,int l1,int r1)
{
    if(k==1)lamp=0;
    if(lamp==1)return 0;
    if(l1>r||l>r1)return 0;
    if(l1<=l&&r<=r1)
    {
        if(it[t][idx][k]!=r-l+1)lamp=1;
        return it[t][idx][k];
    }
    return find(t,k*2,l,(l+r)/2,idx,l1,r1)+find(t,k*2+1,(l+r)/2+1,r,idx,l1,r1);
}
void solve()
{
    int i,j,h,answer=0,X,Y;
    for(i=2;i<n;i++)
        for(j=2;j<n;j++)
            for(h=answer+2;i+h-1<n&&j+h-1<n;h+=2)
            if(find(0,1,1,n,i,j,j+h-1)==h)
            {
                if(find(1,1,1,n,j,i,i+h-1)==h)
                {

                    if(find(0,1,1,n,i+h,j,j+h-1)==h&&find(1,1,1,n,j+h,i,i+h-1)==h)
                    {
                        answer=h;
                        X=i;
                        Y=j;
                    }
                }
                else break;
            }
            else
            {
                j+=h-1;
                break;
            }
    printf("%d %d %d\n",answer,X,Y);
    /*for(i=2;i<=n;i++){
        for(j=1;j<=15;j++)
        printf("%d ",it[0][i][j]);printf("\n");}*/
}
int main()
{
    read();
    initialise();
    solve();
}
/*
6
1 1 4 4 13 14
2 3 3 5 13 14
2 6 7 5 12 12
9 6 7 10 10 15
9 8 8 11 11 15
16 16 17 17 18 18
*/
