#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,i,j,a[101][101],b[101][101],xr,yr,xj,yj,dl[]={-1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1},inc,sfc,mi=2000000000,ml,mc;
char A[255];
struct Element
{
int l,c,d;
};
Element C[10210], x, y;
void citire()
{
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{
f.getline(A,255);
int l=strlen(A);
for(j=0;j<l;j++)
{
if(A[j]==' ') {a[i][j+1]=-2;b[i][j+1]=-2;}
if(A[j]=='R') {a[i][j+1]=-2;b[i][j+1]=-2;xr=i;yr=j+1;}
if(A[j]=='J') {a[i][j+1]=-2;b[i][j+1]=-2;xj=i;yj=j+1;}
if(A[j]=='X') {a[i][j+1]=-1;b[i][j+1]=-1;}
}
}
}
void bordare()
{
for (i=0;i<=n+1;i++) a[i][0]=a[i][m+1]=-1;
for (i=0;i<=m+1;i++) a[0][i]=a[n+1][i]=-1;
}
void BruceLee(int a[][101],int x1,int y1)
{
x.l=x1;x.c=y1;x.d=1; a[x1][y1]=0;C[inc]=x;
while (inc<=sfc)
{
x=C[inc++];
for (i=0;i<8;i++)
{
y.l=x.l+dl[i];
y.c=x.c+dc[i];
if (a[y.l][y.c]==-2)
{
y.d=x.d+1; a[y.l][y.c]=y.d;
C[++sfc]=y;
}
}
}
}
void afisare()
{
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
if(a[i][j]==b[i][j]&&a[i][j]>0&&b[i][j]>0)
if(mi>a[i][j])
{
mi=a[i][j];
ml=i;
mc=j;
}
}
g<<mi<<' '<<ml<<' '<<mc;
}
int main()
{
citire();
bordare();
BruceLee(a,xr,yr);
inc=sfc=0;
BruceLee(b,xj,yj);
afisare();
f.close();
return 0;
}