#include <fstream>
using namespace std;
ifstream f("rj.in"); ofstream g("rj.out");
int i , j , m , n , xr , yr , xj , yj , r[102][102] , u[102][102] , a[102][102];
int dl[] = {1 , 0 , -1 , 0 , -1 , -1 , 1 , 1};
int dc[] = {0 , -1 , 0 , 1 , 1 ,-1 ,1 ,-1};
struct coada{
int l;
int c;
};
coada c[102*102];
char ch[102];
void lee(int a[102][102] , int x , int y)
{
int i , j , in , jn , k , p , u;
a[x][y] = 1;
c[1].l = x;
c[1].c = y;
p = u = 1;
while(p <= u)
{
i = c[p].l;
j = c[p].c;
for(k = 0; k < 8; k++)
{
in = i + dl[k];
jn = j + dc[k];
if(in >= 1 && in <= n && jn >= 1 && jn <= m && a[in][jn] == 0)
{
a[in][jn] = a[i][j] + 1;
u++;
c[u].l = in;
c[u].c = jn;
}
}
p++;
}
}
void drumminim()
{
int i , j , tmin = 102*102 , xmin , ymin;
xmin = ymin = 1;
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
{
if(r[i][j] == u[i][j] && r[i][j] > 0 && tmin > r[i][j])
{
tmin = r[i][j];
xmin = i;
ymin = j;
}
}
g << tmin << " " << xmin << " " << ymin;
}
int main(){
int i , j;
f >> n >> m;
f.get();
for(i = 1; i <= n; i++){
f.getline(ch , 102);
for(j = 0; j < m; j++)
{
if(ch[j] == 'R')
{
xr = i;
yr = j+1;
}
else if(ch[j] == 'J')
{
xj = i;
yj = j+1;
}
else if(ch[j] == 'X')
{
r[i][j+1] = -1;
u[i][j+1] = -1;
}
}
}
lee(r , xr , yr);
lee(u , xj , yj);
drumminim();
return 0;
}