#include <stdio.h>
using namespace std;
const int dmax=102;
struct crd
{
int l,c;
};
int mr[dmax][dmax];
int mj[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
void Lee(crd s, int m[][102])
{
int i;
crd x,ans;
Q[0]=s;
first=last=0;
m[s.l][s.c]=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 (m[l][c] == 0)//nu am vizitat pozitia (l,c)
{
last++;
Q[last].l=l;
Q[last].c=c;
//pun in coada pozitia respectiva
m[l][c]=m[x.l][x.c]+1;
//semnalez ca pozitia (l,c) e vizitata
}
}
}
}
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;
}
if (x == 'J')
{
jl.l=i;
jl.c=j;
}
if (x == 'X')
{
mr[i][j]=mj[i][j]=-1;
}
// printf("%c",x);
}
//printf("\n");
fscanf(f,"%c",&x);//!!
}
fclose(f);
for (i=0; i<=n+1; i++)
mr[i][0]=mr[i][m+1]=mj[i][0]=mj[i][m+1]=-1;
for (j=0; j<=m+1; j++)
mr[0][j]=mr[n+1][j]=mj[0][j]=mj[n+1][j]=-1;;
Lee(rm,mr);
Lee(jl,mj);
int sol=dmax*dmax;
crd crsol;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
if (mr[i][j] == mj[i][j] && mr[i][j] < sol && mr[i][j] > 1)
{
sol=mr[i][j];
crsol.l=i;
crsol.c=j;
}
}
}
f=fopen("rj.out","w");
fprintf(f,"%d %d %d",sol, crsol.l, crsol.c);
fclose(f);
/*for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
printf("%d ",mr[i][j]);
printf("\n");
}
printf("\n");
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
printf("%d ",mj[i][j]);
printf("\n");
}*/
return 0;
}