#include <cstdio>
int n,m,i,j,x1,x2,y1,y2,a[105][105],b[105][105];
int dx[]={0, -1, 0, 1, -1, -1, 1, 1};
int dy[]={-1, 0, 1, 0, -1, 1, 1, -1};
char s[105];
void citire()
{
scanf("%d%d\n",&n,&m);
for (i=1; i<=n; i++)
{
fgets(s,105,stdin);
for (j=0; j<m; j++)
if (s[j]=='X') b[i][j+1]=a[i][j+1]=-1;
else if (s[j]=='R') { x1=i; y1=j+1;}
else if (s[j]=='J') { x2=i; y2=j+1; }
}
}
void bordare(int a[105][105])
{
for (int i=0; i<=n+1; i++)
{
a[i][0]=-1;
a[i][m+1]=-1;
}
for (int j=0; j<=m+1; j++)
{
a[0][j]=-1;
a[n+1][j]=-1;
}
}
void afisare()
{
int minim=2000000000,pozx,pozy,i,j;
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++)
if ((a[i][j]>1)&&(a[i][j]==b[i][j])&&(a[i][j]<minim))
{
minim=a[i][j];
pozx=i;
pozy=j;
}
printf("%d %d %d\n",minim,pozx,pozy);
}
void Lee(int xi, int yi, int a[105][105])
{
struct coada
{
int l,c;
};
coada c[10100];
int ic,sc;
ic=1; sc=1;
a[xi][yi]=1;
c[1].l=xi;
c[1].c=yi;
while (ic<=sc)
{
coada t=c[ic];
ic++;
for (int i=0; i<=7; i++)
{
int xn=t.l+dx[i];
int yn=t.c+dy[i];
if (a[xn][yn]==0)
{
a[xn][yn]=a[t.l][t.c]+1;
sc++;
c[sc].l=xn;
c[sc].c=yn;
}
}
}
}
int main()
{
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
citire();
bordare(a);bordare(b);
Lee(x1,y1,a);
Lee(x2,y2,b);
afisare();
return 0;
}