#include<fstream>
#include<iostream>
#define NMax 110
using namespace std;
short Dx[8] = {-1,-1,-1, 0, 1, 1, 1, 0};
short Dy[8] = {-1, 0, 1, 1, 1, 0,-1,-1};
int romeo[NMax][NMax],julieta[NMax][NMax],n,m,xr,yr,xj,yj;
char s[NMax];
struct Coada
{
int x,y;
}C[NMax*NMax],p,v;
void Citire()
{int i,j;
ifstream g("rj.in");
g>>n>>m;
g.get();
for(i=1;i<=n;i++)
{
g.getline(s,110);
for(j=0;j<m;j++)
switch (s[j])
{
case ' ':romeo[i][j+1]=julieta[i][j+1]=0;break;
case 'X':romeo[i][j+1]=julieta[i][j+1]=1;break;
case 'R':romeo[i][j+1]=0;xr=i;yr=j+1;break;
case 'J':julieta[i][j+1]=0;xj=i;yj=j+1;break;
}
}
}
void Bordare()
{
for(int i=0;i<=m+1;i++)
romeo[0][i]=romeo[n+1][i]=julieta[0][i]=julieta[n+1][i]=1;
for(int i=0;i<=n+1;i++)
romeo[i][0]=romeo[i][m+1]=julieta[i][0]=julieta[i][m+1]=1;
}
void Traseu_romeo(int x1,int y1)
{
int prim,ultim,k;
prim=ultim=0;
C[0].x=x1,C[0].y=y1;
romeo[x1][y1]=1;
while(prim<=ultim)
{
p=C[prim],prim++;
for(k=0;k<8;k++)
{
v.x=p.x+Dx[k],v.y=p.y+Dy[k];
if(romeo[v.x][v.y]==0)
{
romeo[v.x][v.y]=romeo[p.x][p.y]+1;
ultim++,C[ultim]=v;
}
}
}
}
void Traseu_julieta(int x1,int y1)
{
int prim,ultim,k;
prim=ultim=0;
C[0].x=x1,C[0].y=y1;
julieta[x1][y1]=1;
while(prim<=ultim)
{
p=C[prim],prim++;
for(k=0;k<8;k++)
{
v.x=p.x+Dx[k],v.y=p.y+Dy[k];
if(julieta[v.x][v.y]==0)
{
julieta[v.x][v.y]=julieta[p.x][p.y]+1;
ultim++,C[ultim]=v;
}
}
}
}
int main ()
{int i,j,tmin=999999,lin=0,col=0;
Citire();
Bordare();
Traseu_romeo(xr,yr);
Traseu_julieta(xj,yj);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(romeo[i][j]==julieta[i][j]&&romeo[i][j]>1)
if(romeo[i][j]<tmin)
{
tmin=romeo[i][j];
lin=i;
col=j;
}
}
ofstream f("rj.out");
f<<tmin<<' '<<lin<<' '<<col;
}