#include <fstream>
#define MAX 110
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
struct coada
{
int x,y;
};
int a[MAX][MAX],R[MAX][MAX],m,n,xr,yr,xj,yj;
int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,1,1,1,0,-1,-1,-1};
void citire()
{
char s[MAX];
int i,j;
cin >> n >> m;
cin.get();
for(i=1; i<=n; i++)
{
cin.get(s,MAX);
cin.get();
for(j=0; j<m; j++)
{
if(s[j]=='X')
a[i][j+1]=-1;
if(s[j]=='R')
xr=i,yr=j+1;
if(s[j]=='J')
xj=i,yj=j+1;
}
}
for(i=0; i<=n+1; i++)
a[i][0]=a[i][m+1]=-1;
for(j=0; j<=m+1; j++)
a[0][j]=a[n+1][j]=-1;
}
void lee(int xs, int ys, int v[MAX][MAX])
{
coada c[MAX*MAX],aux;
int p=1,u=0,j,i,x,y;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
v[i][j]=0;
u=1;
c[u].x=xs;
c[u].y=ys;
v[xs][ys]=1;
while(p<=u)
{
aux=c[p];
p++;
for(i=0; i<8; i++)
{
x=aux.x+dx[i];
y=aux.y+dy[i];
if(a[x][y]==0 && v[x][y]==0)
{
u++;
c[u].x=x;
c[u].y=y;
v[x][y]=v[aux.x][aux.y]+1;
}
}
}
}
void afis(int J[MAX][MAX])
{
int i,j,tmin,x,y;
tmin=MAX*MAX;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
if(R[i][j]!=0 && J[i][j]==R[i][j])
if(R[i][j]<tmin)
{
tmin=R[i][j];
x=i;
y=j;
}
}
}
cout << x << " " << y << " " << tmin;
}
int main()
{
int J[MAX][MAX];
citire();
lee(xr,yr,R);
lee(xj,yj,J);
afis(J);
return 0;
}