#include<stdio.h>
FILE *f,*g;
int n,m,a[102][102],myn=0,glob=1,t=1,w=1,p=0;
int dx[]={1,1,0,-1,-1,-1,0,1},dy[]={0,-1,-1,-1,0,1,1,1};
typedef struct poz
{
int x,y;
};
poz r,ju,meet,b[100200],c[100200],rez[100200];
void lee(int rx,int ry, int jx, int jy,int k,int u)
{
register int i;
if( ( (a[rx][ry]==myn || a[jx][jy]==myn) && myn!=0 ) || glob==-1)
{
glob=-1;
return;
}
else
{
for(i=0;i<8;++i)
{
if(rx+dx[i]>0 && rx+dx[i]<=n && ry+dy[i]>0 && ry+dy[i]<=m && a[rx+dx[i]][ry+dy[i]]>=0)
{
if(a[rx+dx[i]][ry+dy[i]]==0)
{
a[rx+dx[i]][ry+dy[i]]=a[rx][ry]+1;
b[t].x=rx+dx[i];
b[t].y=ry+dy[i];
++t;
}
else if(a[rx+dx[i]][ry+dy[i]]>0 && a[rx+dx[i]][ry+dy[i]]==a[rx][ry]+1)
{
if(myn==0)
{
myn=a[rx][ry]+1;
rez[p].x=rx+dx[i];
rez[p].y=ry+dy[i];
}
if(myn>0 && myn==a[rx][ry]+1)
{
++p;
rez[p].x=rx+dx[i];
rez[p].y=ry+dy[i];
}
}
}
if(jx+dx[i]>0 && jx+dx[i]<=n && jy+dy[i]>0 && jy+dy[i]<=m && a[jx+dx[i]][jy+dy[i]]>=0)
{
if(a[jx+dx[i]][jy+dy[i]]==0)
{
a[jx+dx[i]][jy+dy[i]]=a[jx][jy]+1;
c[w].x=jx+dx[i];
c[w].y=jy+dy[i];
++w;
}
else if(a[jx+dx[i]][jy+dy[i]]>0 && a[jx+dx[i]][jy+dy[i]]==a[jx][jy]+1)
{
if(myn==0)
{
myn=a[jx][jy]+1;
rez[p].x=jx+dx[i];
rez[p].y=jy+dy[i];
}
if(myn>0 && myn==a[jx][jy]+1)
{
++p;
rez[p].x=jx+dx[i];
rez[p].y=jy+dy[i];
}
}
}
}
lee(b[k].x,b[k].y,c[u].x,c[u].y,k+1,u+1);
}
}
int main()
{
f=fopen("rj.in","r");
g=fopen("rj.out","w");
register int i,j;
char ac,hi[10];
fscanf(f,"%d%d",&n,&m);
fgets(hi,4,f);
for(i=1;i<=n;++i)
{
for(j=1;j<=m;++j)
{
fscanf(f,"%c",&ac);
if(ac=='\n')
--j;
if(ac=='R')
{
r.x=i;
r.y=j;
a[i][j]=1;
}
if(ac=='J')
{
ju.x=i;
ju.y=j;
a[i][j]=1;
}
if(ac=='X')
a[i][j]=-1;
}
}
b[0].x=r.x;
b[0].y=r.y;
c[0].x=ju.x;
c[0].y=ju.y;
lee(b[0].x,b[0].y,c[0].x,c[0].y,1,1);
fprintf(g,"%d ",myn);
if(p>0)
{
int my,mx;
my=n+1;
mx=m+1;
for(i=0;i<=p;++i)
{
if(rez[i].x<my)
my=rez[i].x;
else if(rez[i].x==my && mx>rez[i].y)
mx=rez[i].y;
}
fprintf(g,"%d %d",my,mx);
fclose(f);
fclose(g);
return 0;
}
}