#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int i,j,m,n,xr,yr,xj,yj;
int r[1000][1000],u[1000][1000];
struct coada
{
int l;
int c;
int d;
};
coada c[4000];
int dl[]={1,0,-1,0,-1,-1,1,1};
int dc[]={0,-1,0,1,1,-1,1,-1};
void lee(int a[1000][1000],int z,int hq)
{
int i,j,in,jn,h,p,u;
a[z][hq]=1;
p=u=1;
c[1].l=z;
c[1].c=hq;
while(p<=u)
{
i=c[p].l;
j=c[p].c;
for(h=0;h<7;h++)
{
in=i+dl[h];
jn=j+dc[h];
if(in>0 && jn>0 && in<n+1 && jn<m+1 && a[in][jn]==0)
{
a[in][jn]=a[i][j]+1;
u++;
c[u].l=in;
c[u].c=jn;
}
}
p++;
}
}
void drum_minim()
{
int i,j,tmin=101*101,xmin,ymin;
xmin=ymin=1;
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
if(r[i][j]==u[i][j]&&r[i][j]>0&&r[i][j]<tmin)
{
tmin=r[i][j];
xmin=i;
ymin=j;
}
fout<<tmin<<" "<<xmin<<" "<<ymin;
}
int main()
{
fin>>n>>m;
int i,j;
fin.get();
char ch[102];
for(i=1; i<=n; ++i)
{
fin.get(ch,102);
for(j=1; j<=m; ++j)
{
if(ch[j-1]=='R')
{
xr=i; yr=j;
}
else if(ch[j-1]=='J')
{
xj=i; yj=j;
}
else if(ch[j-1]=='X')
{
r[i][j]=-1; u[i][j]=-1;
}
}
fin.get();
}
lee(r,xr,yr);
lee(u,xj,yj);
drum_minim();
return 0;
}