#include <iostream>

using namespace std;

int orizontal[2222][2222],vertical[2222][2222],val[2222][2222];
int n,rezpx,rezpy,rezx,rezy;

bool exista(int k)
{
    int i,j;
    for(i=2;i<=n-k;++i)
    {
        for(j=2;j<=n-k;++j)
        {
            if(vertical[i-1][j+k-1]-vertical[i-1][j-1]==k)
                if(vertical[i+k-1][j+k-1]-vertical[i+k-1][j-1]==k)
                    if(orizontal[i+k-1][j-1]-orizontal[i-1][j-1]==k)
                        if(orizontal[i+k-1][j+k-1]-orizontal[i-1][j+k-1]==k)
                        {
                            rezpx=i;
                            rezpy=j;
                            return true;
                        }
        }
    }
    return false;
}


int cauta()
{
    int i,pas=1<<11;
    for(i=0;pas;pas/=2)
    {
        if(exista(i+pas))
        {
            i+=pas;            
            rezx=rezpx;
            rezy=rezpy;
        }
    }
    return i;
}

int main()
{
    int i,j;
    cin>>n;
    for(i=1;i<=n;++i)
    {
        for(j=1;j<=n;++j)
        {
            cin>>val[i][j];
            if(j>1)
            {
                orizontal[i][j-1] = val[i][j]==val[i][j-1]?0:1;
            }
            if(i>1)
            {
                vertical[i-1][j] = val[i][j]==val[i-1][j]?0:1;
            }
        }
    }
    for(i=1;i<n;++i)
        for(j=1;j<n;++j)
        {
            orizontal[i][j]+=orizontal[i-1][j];
            vertical[i][j]+=vertical[i][j-1];
        }
    cout<<cauta()<<" ";
    cout<<rezx<<" "<<rezy<<"\n";
    return 0;
}
