#include <stdio.h>

using namespace std;

const short int N=2001;
short int sus[N][N],st[N][N],jos[N][N],dr[N][N];
int v[N][N];

int minim(short int a, short int b)
{
    if(a<b) return a;
    return b;
}

int main()
{
    FILE *in,*out;
    in=stdin;
    out=stdout;
    short Lmax=0,xmax=1,ymax=1,i,j,n,L,Q,x,y;
    
    fscanf(in,"%hd",&n);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            fscanf(in,"%d",&v[i][j]);
    
    for(i=2;i<n;i++)
        for(j=2;j<n;j++)
        {
            if(v[i+1][j]==v[i][j])
                st[i][j]=0;
            else st[i][j]=st[i][j-1]+1;
            if(v[i][j+1]==v[i][j])
                sus[i][j]=0;
            else sus[i][j]=sus[i-1][j]+1;
        }
        
    for(i=n-1;i>=2;i--)
        for(j=n-1;j>=2;j--)
        {
            if(v[i-1][j]==v[i][j])
                dr[i][j]=0;
            else dr[i][j]=dr[i][j+1]+1;
            if(v[i][j-1]==v[i][j])
                jos[i][j]=0;
            else jos[i][j]=jos[i+1][j]+1;
        }
    
    for(i=2;i<n;i++)
    {
        for(j=2;j<n;j++)
        {
            L=minim(st[i][j],sus[i][j]);
            if((L>>1)*2!=L)
                L--;
            while(L>Lmax)
            {
                x=i-L+1;
                y=j-L+1;
                Q=minim(dr[x][y],jos[x][y]);
                if(Q>=L)
                {
                    Lmax=L;
                    xmax=x;
                    ymax=y;
                }
                L-=2;
            }
        }
    }
    
    fprintf(out,"%hd %hd %hd",Lmax,xmax,ymax);
    return 0;
}
