# include <stdio.h>
const long int MAXN=110;
const short vi[9]={0,-1,-1,0,1,1,1,0,-1};
const short vj[9]={0,0,1,1,1,0,-1,-1,-1};
typedef short MATRICE[MAXN+1][MAXN+1];
MATRICE romeo,julieta,map;
long int n,m,rj,ri,jj,ji,besti,bestj,best=-1;
void citire()
{
char s[1000];
FILE *f=fopen("rj.in","r");
fscanf(f,"%ld%ld",&n,&m);
fgets(s,200,f);
long int i,j;
for (i=1;i<=n;i++)
{
fgets(s+1,200,f);
for (j=1;j<=m;j++)
switch (s[j])
{
case ' ': map[i][j]=1; break;
case 'X': map[i][j]=0; break;
case 'R': map[i][j]=1; ri=i;rj=j; break;
case 'J': map[i][j]=1; ji=i;jj=j; break;
default: map[i][j]=1; break;
}
}
fclose(f);
}
void fill(MATRICE &c, long int ii, long int ji)
{
struct {short i,j;} cd[MAXN*MAXN+1];
long int prim,ultim;
short inou,jnou,dir;
prim=ultim=1;cd[1].i=ii;cd[1].j=ji;
c[ii][ji]=1;
while (prim<=ultim)
{
for (dir=1;dir<=8;dir++)
{
inou=cd[prim].i+vi[dir];
jnou=cd[prim].j+vj[dir];
if (inou<=n&&inou>0&&jnou<=m&&jnou>0&&map[inou][jnou]&&!c[inou][jnou])
{
++ultim;
cd[ultim].i=inou;
cd[ultim].j=jnou;
c[inou][jnou]=c[cd[prim].i][cd[prim].j]+1;
}
}
++prim;
}
}
void calculeaza()
{
long int i,j;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (map[i][j]&&romeo[i][j]==julieta[i][j]&&romeo[i][j]&&(romeo[i][j]<best||best==-1))
{
best=romeo[i][j];
besti=i;
bestj=j;
}
}
void scrie()
{
FILE *g=fopen("rj.out","w");
fprintf(g,"%ld %ld %ld\n",best,besti,bestj);
fcloseall();
}
int main()
{
citire();
fill(romeo,ri,rj);
fill(julieta,ji,jj);
calculeaza();
scrie();
return 0;
}