#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char a[102][102];
int romeo[104][104],julieta[104][104];
int xr,yr,yj,xj,n,m;
void citire()
{
char s[105];
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin.get();
cin.get(s,105);
for(int j=0;j<strlen(s);j++)
{
if(s[j]=='X') a[i][j+1]='-';
if(s[j]==' ') a[i][j+1]='0';
if(s[j]=='R') { xr=i;yr=j+1; a[i][j+1]='R';}
if(s[j]=='J') { xj=i;yj=j+1; a[i][j+1]='J';}
}
}
}
void init_rj()
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{romeo[i][j]=-2;julieta[i][j]=-2;}
romeo[xr][yr]=1;julieta[xj][yj]=1;
}
void bordare()
{
int i,j;
for(i=0;i<=n+1;i++)
{
romeo[i][0]=-1;julieta[i][0]=-1;
romeo[i][m+1]=-1;julieta[i][m+1]=-1;
for(j=0;j<=m+1;j++)
{
romeo[0][j]=-1;julieta[0][j]=-1;
romeo[m+1][j]=-1;julieta[m+1][j]=-1;
}
}
}
void afis()
{
int i,j;
for(i=0;i<=n+1;i++)
{
cout<<"\n";
for(j=0;j<=m+1;j++)
cout<<romeo[i][j];
}
for(i=0;i<=n+1;i++)
{
cout<<"\n";
for(j=0;j<=m+1;j++)
cout<<julieta[i][j];
}
for(i=1;i<=n;i++)
{
cout<<"\n";
for(j=1;j<=m;j++)
cout<<a[i][j];
}
}
void lee(int xp,int yp,int x[104][104])
{
const int di[]={-1,-1,0,1,1,1,0,-1},dj[]={0,1,1,1,0,-1,-1,-1};
struct coada { unsigned char ii,jj;} v[10800];
int li,ls,xn,yn,xv,yv,i;
v[0].ii=xp;v[0].jj=yp;
li=ls=0;
x[xp][yp]=1;
while(li<=ls)
{
xv=v[li].ii;yv=v[li].jj;
for(i=0;i<8;i++)
{
xn=xv+di[i];
yn=yv+dj[i];
if(a[xn][yn]=='0' && x[xn][yn]==-2)
{
x[xn][yn]=x[xv][yv]+1;
v[++ls].ii=xn;v[ls].jj=yn;
}
}
li++;
}
}
void restu()
{
//aflam pozitiile unde coincide romeo[i][j] cu julieta[i][j]
//dar cu valoareA MINIMA!!!!
int i,j,tmin=32000,imin,jmin;
for(i=1;i<n;i++)
for(j=1;j<=m;j++)
if(romeo[i][j]==julieta[i][j] && romeo[i][j]!=-2 && julieta[i][j]!=-2)
if(romeo[i][j]<tmin) {tmin=romeo[i][j],imin=i;jmin=j;};
cout<<tmin<<" "<<imin<<" "<<jmin<<"\n";
}
int main()
{
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
//bordare();
citire();
init_rj();
lee(xr,yr,romeo);
lee(xj,yj,julieta);
//afis();
restu();
return 0;
}