#include <bits/stdc++.h>
using namespace std ;
ifstream fin ("rj.in") ;
ofstream fout ("rj.out") ;
struct casuta
{
int i, j ;
} ;
int lin [ 8 ] = { -1, -1, 0, 1, 1, 1, 0, -1 }, col [ 8 ] = { 0, 1, 1, 1, 0, -1, -1, -1 }, a [ 102 ] [ 102 ], d1 [ 102 ] [ 102 ], d2 [ 102 ] [ 102 ] ;
int n, m, i, j, nrc1 = 1, ic1, nrc2 = 1, ic2, mini = 10001, minii, minij ;
casuta coada1 [ 10001 ], coada2 [ 10001 ], elc ;
char c ;
int main ( )
{
fin >> n >> m ;
fin . get ( c ) ;
for ( i = 1 ; i <= n ; i ++ )
{
for ( j = 1 ; j <= m + 1 ; j ++ )
{
fin . get ( c ) ;
if ( c == 'X' )
{
a [ i ] [ j ] = 1 ;
}
else if ( c == 'R' )
{
d1 [ i ] [ j ] = 1 ;
coada1 [ 0 ] . i = i ;
coada1 [ 0 ] . j = j ;
}
else if ( c == 'J' )
{
d2 [ i ] [ j ] = 1 ;
coada2 [ 0 ] . i = i ;
coada2 [ 0 ] . j = j ;
}
}
}
for ( i = 0 ; i <= n + 1 ; i ++ )
{
a [ i ] [ 0 ] = 1 ;
a [ i ] [ m + 1 ] = 1 ;
}
for ( i = 0 ; i <= m + 1 ; i ++ )
{
a [ 0 ] [ i ] = 1 ;
a [ n + 1 ] [ i ] = 1 ;
}
while ( ic1 < nrc1 )
{
elc = coada1 [ ic1 ] ;
for ( int dir = 0 ; dir < 8 ; dir ++ )
{
i = elc . i + lin [ dir ] ;
j = elc . j + col [ dir ] ;
if ( a [ i ] [ j ] == 0 && d1 [ i ] [ j ] == 0 )
{
d1 [ i ] [ j ] = d1 [ elc . i ] [ elc . j ] + 1 ;
coada1 [ nrc1 ] . i = i ;
coada1 [ nrc1 ] . j = j ;
nrc1 ++ ;
}
}
ic1 ++ ;
}
while ( ic2 < nrc2 )
{
elc = coada2 [ ic2 ] ;
for ( int dir = 0 ; dir < 8 ; dir ++ )
{
i = elc . i + lin [ dir ] ;
j = elc . j + col [ dir ] ;
if ( a [ i ] [ j ] == 0 && d2 [ i ] [ j ] == 0 )
{
d2 [ i ] [ j ] = d2 [ elc . i ] [ elc . j ] + 1 ;
coada2 [ nrc2 ] . i = i ;
coada2 [ nrc2 ] . j = j ;
nrc2 ++ ;
}
}
ic2 ++ ;
}
for ( int i = 1 ; i <= n ; i ++ )
{
for ( int j = 1 ; j <= m ; j ++ )
{
if ( d1 [ i ] [ j ] == d2 [ i ] [ j ] && d1 [ i ] [ j ] < mini && d1 [ i ] [ j ] )
{
mini = d1 [ i ] [ j ] ;
minii = i ;
minij = j ;
}
}
}
fout << mini << " " << minii << " " << minij ;
return 0 ;
}