#include <cstdio>
#include <queue>
using namespace std;
FILE *fi,*fo;
struct PUNCT
{
int l,c;
};
queue<PUNCT> Q;
int M[101][101],R[101][101],J[101][101];
int lr,cr,lj,cj,i,j,n,m,pozi,pozj;
char c;
PUNCT p,pn;
int dl[]={-1,-1,0,1,1,1,0,-1};
int dc[]={0,1,1,1,0,-1,-1,-1};
int main()
{
fi=fopen("rj.in","r");
fo=fopen("rj.out","w");
fscanf(fi,"%d%d%c",&n,&m,&c);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
fscanf(fi,"%c",&c);
if(c=='X')
M[i][j]=1;
else
if(c=='R')
{
lr=i;
cr=j;
M[i][j]=1;
}
else
if(c=='J')
{
lj=i;
cj=j;
M[i][j]=1;
}
}
fscanf(fi,"%c",&c);
}
p.l=lr;
p.c=cr;
Q.push(p);
R[lr][cr]=1;
while(!Q.empty())
{
p=Q.front();
for(int d=0;d<=7;d++)
{
pn.l=p.l+dl[d];
pn.c=p.c+dc[d];
int l=pn.l,c=pn.c;
if(l>=1&&c>=1&&l<=n&&c<=m&&R[l][c]==0&&M[l][c]==0)
{
R[pn.l][pn.c]=1+R[p.l][p.c];
Q.push(pn);
}
}
Q.pop();
}
p.l=lj;
p.c=cj;
Q.push(p);
J[lj][cj]=1;
while(!Q.empty())
{
p=Q.front();
for(int d=0;d<=7;d++)
{
pn.l=p.l+dl[d];
pn.c=p.c+dc[d];
int l=pn.l,c=pn.c;
if(l>=1&&c>=1&&l<=n&&c<=m&&J[l][c]==0&&M[l][c]==0)
{
J[pn.l][pn.c]=1+J[p.l][p.c];
Q.push(pn);
}
}
Q.pop();
}
int min1=2000000;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(R[i][j]>0 && R[i][j]==J[i][j] && R[i][j]<min1)
{
pozi=i;
pozj=j;
min1=R[i][j];
}
fprintf(fo,"%d %d %d",min1,pozi,pozj);
fclose(fi);
fclose(fo);
return 0;
}