#include<fstream.h>
#include<string.h>
ifstream f("rj.in");
ofstream g("rj.out");
int r[110][110],j[110][110],i,k,m,n,r1,r2,j1,j2,min=32000,d[2][8]={{1,0,-1,0,1,-1,1,-1},{0,1,0,-1,1,-1,-1,1}};
char *p,s[201];
void coadar()
{
int c[2][15000],i,p,u,x,y;
c[0][0]=r1;
c[1][0]=r2;
p=0;u=0;
while(p<=u)
{
x=c[0][p];
y=c[1][p];
for(i=0;i<=7;i++)
{
if(r[x+d[0][i]][y+d[1][i]]==0)
{
r[x+d[0][i]][y+d[1][i]]=r[x][y]+1;
c[0][++u]=x+d[0][i];
c[1][u]=y+d[1][i];
}
}
p++;
}
}
void coadaj()
{
int c[2][15000],i,p,u,x,y;
c[0][0]=j1;
c[1][0]=j2;
p=0;u=0;
while(p<=u)
{
x=c[0][p];
y=c[1][p];
for(i=0;i<=7;i++)
{
if(j[x+d[0][i]][y+d[1][i]]==0)
{
j[x+d[0][i]][y+d[1][i]]=j[x][y]+1;
c[0][++u]=x+d[0][i];
c[1][u]=y+d[1][i];
}
}
p++;
}
}
void verificare()
{
int x=0,y=0;
for(int i=1;i<=n;i++)
for(int k=1;k<=m;k++)
if(r[i][k]==j[i][k]&&r[i][k]<min&&r[i][k]!=-1&&r[i][k]!=0)
{
min=r[i][k];
x=i;
y=k;
}
g<<min<<" "<<x<<" "<<y;
}
int main()
{
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{
f.getline(s,200);
p=strchr(s,'R');
if(p)
{
r[i][p-s+1]=1;
r1=i;
r2=p-s+1;
}
p=strchr(s,'J');
if(p)
{
j[i][p-s+1]=1;
j1=i;
j2=p-s+1;
}
p=strchr(s,'X');
while(p)
{
r[i][p-s+1]=-1;
j[i][p-s+1]=-1;
p++;
p=strchr(p,'X');
}
}
for(i=0;i<=n+1;i++)
{
r[i][0]=1;
r[i][m+1]=1;
j[i][0]=1;
j[i][m+1]=1;
}
for(k=0;k<=m+1;k++)
{
r[0][k]=1;
r[n+1][k]=1;
j[0][k]=1;
j[n+1][k]=1;
}
coadar();
coadaj();
verificare();
f.close();
g.close();
return 0;
}