#include<iostream>
#include<stdio.h>
using namespace std ;

#define MAXN 2007

int n ;
int a[ MAXN ][ MAXN ] ;
int r[ MAXN ][ MAXN ] ;
int c[ MAXN ][ MAXN ] ; 

void input ( ) {
	scanf ( "%d" , &n ) ;
	int i , j ;
	for ( i = 1 ; i <= n ; i ++ ) {
		for ( j = 1 ; j <= n ; j ++ ) {
			scanf ( "%d" , &a[ i ][ j ] ) ;
		}
	}
}

void solve ( ) {
	int i , j ;
	int lst = 0 ;
	for ( i = 1 ; i < n ; i ++ ) {
		lst = n - 1 ;
		for ( j = n - 1 ; j >= 1 ; j -- ) {
			//printf ( "row %d , column %d\n" , i , j ) ;
			//printf ( "%d %d\n" , a[ i ][ j + 1 ] , a[ i + 1 ][ j + 1 ] ) ;
			if ( a[ i ][ j + 1 ] == a[ i + 1 ][ j + 1 ] ) {
				r[ i ][ j ] = j  ;
				lst = j ;
			}
			else r[ i ][ j ] = lst ;
		} 
	}
	for ( j = 1 ; j < n ; j ++ ) {
		lst = n - 1 ;
		for ( i = n - 1 ; i >= 1 ; i -- ) {
			//printf ( "row %d , column %d\n" , i , j ) ;
			//printf ( "%d %d\n" , a[ i + 1 ][ j ] , a[ i + 1 ][ j + 1 ] ) ;			
			if ( a[ i + 1 ][ j ] == a[ i + 1 ][ j + 1 ] ) {
				c[ i ][ j ] = i ;
				lst = i ;
			}
			else c[ i ][ j ] = lst ;
		}
	}
	int ans = 0 ;
	int mn ;
	int stx = -1 , sty = -1 ;
	for ( i = 1 ; i < n ; i ++ ) {
		for ( j = 1 ; j < n ; j ++ ) {
			mn = min ( ( r[ i ][ j ] - j ) , ( c[ i ][ j ] - i ) ) ;
			int ind = j + mn ;
			/**if ( i == 2 && j == 1 ) {
				printf ( "%d\n" , mn ) ;
			}**/
			if ( c[ i ][ ind ] - i < mn ) continue ;
			ind = i + mn ;
			if ( r[ ind ][ j ] - j < mn ) continue ;
			if ( ans < mn ) {
				ans = mn ;
				stx = i + 1 ;
				sty = j + 1 ;
			}
		}
	}
	printf ( "%d %d %d\n" , ans , stx , sty ) ;
}

int main ( ) {
	input ( ) ;
	solve ( ) ;
	return 0 ;
}
