#include<stdio.h>
int a1[102][102],a2[102][102],i,j,n,m,u,p,u1,p1,ok,tmin,x,y;
typedef struct { int l,cl;} COADA;
COADA x1,x2;
void creare ()
{ int i,j; char c2,ch[114];
FILE*f=fopen("rj.in","r");
fscanf(f,"%d%d%c",&n,&m,&c2);
for (i=1;i<=n;i++)
{fgets (ch,114,f);
for(j=0;j<m;j++)
switch(ch[j])
{ case 'X': a1[i][j+1]=a2[i][j+1]=-1;break;
case 'R': a1[i][j+1]=a2[i][j+1]=1;x1.l=i;x1.cl=j+1;break;
case 'J': a1[i][j+1]=a2[i][j+1]=1;x2.l=i;x2.cl=j+1;break;
default: break; }}
for (i=1;i<=n;i++)
{a1[i][0]=a1[i][m+1]=a1[0][0]=a1[n+1][0]=-1;
a2[i][0]=a2[i][m+1]=a2[0][0]=a2[n+1][0]=-1;}
for (i=1;i<=m+1;i++)
{ a1[0][i]=a1[n+1][i]=-1;
a2[0][i]=a2[n+1][i]=-1; }
fclose(f);}
void BF (int x,int y,int a[][102])
{ int t[3]={0,1,-1},i,p,u;COADA c[5000],x2;
u=p=1;c[u].l=x;c[u].cl=y;
while (p<=u)
{ x2=c[p++];
for (i=1;i<=2;i++)
{ if(a[x2.l][x2.cl+t[i]]==0)
{ a[x2.l][x2.cl+t[i]]=a[x2.l][x2.cl]+1;
c[++u].l=x2.l;
c[u].cl=x2.cl+t[i];}
if (a[x2.l+t[i]][x2.cl]==0)
{ a[x2.l+t[i]][x2.cl]=a[x2.l][x2.cl]+1;
c[++u].l=x2.l+t[i];
c[u].cl=x2.cl;}
if (a[x2.l-t[i]][x2.cl+t[i]]==0)
{ a[x2.l-t[i]][x2.cl+t[i]]=a[x2.l][x2.cl]+1;
c[++u].l=x2.l-t[i];
c[u].cl=x2.cl+t[i];}
if (a[x2.l+t[i]][x2.cl+t[i]]==0)
{ a[x2.l+t[i]][x2.cl+t[i]]=a[x2.l][x2.cl]+1;
c[++u].l=x2.l+t[i];
c[u].cl=x2.cl+t[i];}}
}}
void afisare (int a[][102],int b[][102])
{ int min=3600,i,j;
FILE*g=fopen("rj.out","w");
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if(a[i][j]==b[i][j] && min>a1[i][j] && a[i][j]!=-1 && a[i][j]!=1 && a[i][j]!=0)
{ min=a[i][j];
x=i;
y=j;
}
fprintf(g,"%d %d %d\n",min,x,y);
fclose(g);
}
int main()
{
creare();
BF(x1.l,x1.cl,a1);
BF(x2.l,x2.cl,a2);
afisare(a1,a2);
return 0;
}