#include <cstdio>
#include <vector>
#define hkey 666013
using namespace std;

vector <int> H[hkey];
int mat[2005][2005];
int n;
int maxD,maxX,maxY;

void Hinsert(int x)
{
    H[x%hkey].push_back(x);
}

bool Hcheck(int x)
{
    int SV = x%hkey;
    for (vector <int> :: iterator it = H[SV].begin();it != H[SV].end();it++)
    {
        if (*it == x) return true;
    }
    return false;
}

void Hdelete(int x)
{
    int SV = x%hkey;
    for (vector <int> :: iterator it = H[SV].begin();it != H[SV].end();it++)
    {
        if (*it == x) 
        {
            H[SV].erase(it);
            return;
        }
    }
}

bool partialCheck(int I,int J,int delta)
{
    int sum = 0;
    for (int i=I;i<=I+delta;i++) for (int j=J;j<=J+delta;j++)
    {
        if (!Hcheck(mat[i][j]))
        {
            Hinsert(mat[i][j]);
            sum += mat[i][j];
        }
        else 
        {
            Hdelete((mat[i][j]));
            sum -= mat[i][j];
        }
    }
    if (sum == 0) return true;
    else {
        for (int i=0;i<hkey;i++) H[i].clear();
        return false;
    }
}

int check(int I,int J)
{
    int maxim = 0;
    for (int delta=1;I+delta < n && J+delta < n;delta++)
    {
        if (partialCheck(I,J,delta))
        {
            maxim = max(maxim,delta);
        }
    }
    return maxim;
}

int main() 
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++) for (int j=1;j<=n;j++)
    {
        scanf("%d",&mat[i][j]);
    }
    for (int i=2;i<n;i++) for (int j=2;j<n;j++)
    {
        int ct = check(i,j);
        if (ct > maxD)
        {
            maxD = ct;
            maxX = i;
            maxY = j;
        }
    }
    printf("%d %d %d\n",maxD+1,maxX,maxY);
}