#include <cstdio>
#define MAX 110
#define ZID -1
using namespace std;
int r[MAX][MAX],ju[MAX][MAX],n,m;
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
char mat[MAX][MAX],s[MAX];
struct coada{
int x,y;
};coada q[MAX*MAX];
void lee(int mat[][MAX],int xs, int ys){
int u=1,p=1,x,y,i;
for(i=0;i<=n+1;i++){
mat[i][0]=ZID;
mat[i][m+1]=ZID;
}
for(i=0;i<=m+1;i++){
mat[0][i]=ZID;
mat[n+1][i]=ZID;
}
mat[xs][ys]=1;
q[p].x=xs;
q[p].y=ys;
while(p<=u){
x=q[p].x;
y=q[p].y;
for(i=0;i<=7;i++)
if(mat[x+dx[i]][y+dy[i]]==0){
u++;
q[u].x=x+dx[i];
q[u].y=y+dy[i];
mat[x+dx[i]][y+dy[i]]=mat[x][y]+1;
}
p++;
}
}
int main()
{
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
int i,j,rx,ry,jx,jy,MIN=MAX*MAX+1,xf,yf;
scanf("%d%d\n",&n,&m);
for(i=1;i<=n;i++){
gets(s);
for(j=0;j<m;j++)
switch(s[j]){
case ' ': r[i][j+1]=0; ju[i][j+1]=0; break;
case 'X': r[i][j+1]=ZID; ju[i][j+1]=ZID; break;
case 'R': r[i][j+1]=0; ju[i][j+1]=0; rx=i; ry=j+1; break;
case 'J': r[i][j+1]=0; ju[i][j+1]=0; jx=i; jy=j+1; break;
}
}
lee(r,rx,ry);
lee(ju,jx,jy);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(r[i][j]==ju[i][j] and r[i][j]!=0 and r[i][j]!=ZID and MIN>r[i][j]){
MIN=r[i][j];
xf=i;
yf=j;
}
printf("%d %d %d\n",MIN,xf,yf);
return 0;
}