#include<iostream.h>
#include<fstream.h>
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
typedef struct { int x,y;}PCT;
PCT c[1000];
void citire(int & n, int & m,int a[][151], int b[][151],PCT & ro, PCT & ju)
{
FILE *f=fopen("rj.in","r");
int i,j;
char c;
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
{ fscanf(f,"%c",&c);
for(j=1;j<=m;j++)
{
fscanf(f,"%c", &c);
if(c=='J'){a[i][j]=-3;ju.x=i;ju.y=j;}
else if(c=='X')a[i][j]=-1;
else if(c=='R'){a[i][j]=-2;ro.x=i;ro.y=j;}
else if(c==' ')a[i][j]=0;
b[i][j]=a[i][j];
}
}
fclose(f);
}
int interior(int x, int y, int n, int m)
{
if(x>=1&&x<=n&&y>=1&&y<=m)return 1;
return 0;
}
void drum(int x, int y, int n, int m, int a[][151])
{
int p,u,i,xv,yv;
p=u=1;
c[u].x=x;
c[u].y=y;
a[x][y]=0;
while(p<=u)
{x=c[p].x;
y=c[p++].y;
for(i=0;i<=7;i++)
{
xv=x+dx[i];
yv=y+dy[i];
if(interior(xv,yv,n,m)&&a[xv][yv]==0)
{
a[xv][yv]=a[x][y]+1;
c[++u].x=xv;
c[u].y=yv;
}
}
}
}
int main()
{
int n,m,a[151][151],b[151][151],i,j,min,s,t;
PCT ro,ju;
FILE *g=fopen("rj.out","w");
citire(n,m,a,b,ro,ju);
drum(ro.x,ro.y,n,m,a);
drum(ju.x,ju.y,n,m,b);
min=100000;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]==b[i][j]&&a[i][j]>0)
if(a[i][j]+1<min){min=a[i][j]+1; s=i; t=j;}
else if(a[i][j]==min&&s>=i){s=i; t=j;}
fprintf(g,"%d %d %d",min,s,t);
fclose(g);
return 0;
}