#include <stdio.h>
using namespace std;
const int dmax=102;
struct cell
{
int step;
char mark;
};
struct crd
{
int l,c;
int mark;
};
cell mp[dmax][dmax];
crd Q[dmax*dmax];
int first,last;
int dir[][2]={{1,0}, //N
{-1,0}, //S
{0,-1}, //W
{0, 1}, //E
{-1, -1}, //Ul
{-1, 1}, // UR
{1, -1}, //DL
{1, 1}}; //DR
crd Lee(crd rm, crd jl)
{
int i;
crd x,ans;
Q[0]=rm;
Q[1]=jl;
first=0;
last=1;
mp[rm.l][rm.c].mark=rm.mark;
mp[rm.l][rm.c].step=1;
mp[jl.l][jl.c].mark=jl.mark;
mp[jl.l][jl.c].step=1;
while (first <= last)
{
x=Q[first++];
for (i=0; i<8; i++)
{
int l=x.l+dir[i][0];
int c=x.c+dir[i][1];
if (mp[l][c].mark == 0)//nu am vizitat pozitia (l,c)
{
last++;
Q[last].l=l;
Q[last].c=c;
Q[last].mark=x.mark;
//pun in coada pozitia respectiva
mp[l][c].mark=x.mark;
mp[l][c].step=mp[x.l][x.c].step+1;
//semnalez ca pozitia (l,c) e vizitata
}
else if ((mp[l][c].mark == 1 && mp[x.l][x.c].mark == 2) || (mp[l][c].mark == 2 && mp[x.l][x.c].mark == 1))
{
ans.l=l;
ans.c=c;
return ans;
}
}
}
}
int main()
{
FILE *f;
f=fopen("rj.in","r");
int n,m,i,j;
char x;
crd rm,jl;
fscanf(f,"%d%d",&n,&m);
//fscanf(f,"%c",&x);//!!
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
fscanf(f,"%c",&x);
if (x == 'R')
{
rm.l=i;
rm.c=j;
rm.mark=1;
}
if (x == 'J')
{
jl.l=i;
jl.c=j;
jl.mark=2;
}
if (x == 'X')
{
mp[i][j].mark=3;
}
// printf("%c",x);
}
//printf("\n");
//fscanf(f,"%c",&x);//!!
}
fclose(f);
for (i=0; i<=n+1; i++)
mp[i][0].mark=mp[i][m+1].mark=3;
for (j=0; j<=m+1; j++)
mp[0][j].mark=mp[n+1][j].mark=3;
crd ans=Lee(rm,jl);
f=fopen("rj.out","w");
fprintf(f,"%d %d %d",mp[ans.l][ans.c].step, ans.l, ans.c);
fclose(f);
/*for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
printf("%d ",mp[i][j].step);
printf("\n");
}*/
return 0;
}