#include<stdio.h>
#include<string.h>
#define IN "rj.in","r",stdin
#define OUT "rj.out","w",stdout
struct pct {
int x,y;
};
const int dx[8]={1,-1,0,0,-1,-1,1,1};
const int dy[8]={0,0,-1,1,-1,1,-1,1};
pct coada[10020];
int m,n,xR,yR,xJ,yJ,pozx,pozy;
int a[120][120],b[120][120];
void citire()
{
freopen(IN);
scanf("%d%d ",&n,&m);
char c[120];
for(int i = 1; i <= n ; ++i)
{
fgets(c,120,stdin);
for(int j = 0 ;j < m; ++j)
{
if(c[j] == 'R' || c[j] == 'J')
{
if(c[j] == 'R')
{
xR=i;
yR=j+1;
}
else
{
xJ=i;
yJ=j+1;
}
a[i][j+1] = 0;
continue;
}
if(c[j] == 'X')
{
a[i][j+1] = -1;
continue;
}
else if(c[j] == ' ')
{
a[i][j+1] = -3;
continue;
}
}
}
memcpy(b,a,sizeof(a));
}
void Lee1()
{
int i,k,T=1,sx,sy;
coada[T].x = xR;
coada[T++].y = yR;
for(i = 1 ; i <= T ; ++i)
for(k = 0 ; k < 8 ; ++k)
{
sx = dx[k] + coada[i].x;
sy = dy[k] + coada[i].y;
if(sx <= n && sx >= 1 && sy <= m && sy >= 1 && a[sx][sy] == -3 && !(a[sx][sy] == 0 || a[sx][sy] == -1))
{
coada[T].x = sx;
coada[T++].y = sy;
a[sx][sy] = a[coada[i].x][coada[i].y] + 1;
}
}
for(int i=1;i<=T;++i)
{
coada[i].x=0;
coada[i].y=0;
}
for(int i=1;i<=n;++i)
{
for(int j= 1;j<=m;++j)
printf("%2d ",a[i][j]);
printf("\n");
}
printf("\n");
}
void Lee2()
{
int i,k,T=1,sx,sy;
int min=20000;
coada[T].x = xJ;
coada[T++].y = yJ;
for(i = 1 ; i <= T ; ++i)
for(k = 0 ; k < 8 ; ++k)
{
sx = dx[k] + coada[i].x;
sy = dy[k] + coada[i].y;
if(sx <= n && sx >= 1 && sy <= m && sy >= 1 && b[sx][sy] == -3 && !(b[sx][sy] == 0 || b[sx][sy] == -1))
{
coada[T].x = sx;
coada[T++].y = sy;
b[sx][sy] = b[coada[i].x][coada[i].y] + 1;
}
}
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(a[i][j]==b[i][j] && min>a[i][j] && a[i][j]>=0 && (i!=xR || j!=yR ) && (i!=xJ || j!=yJ))
{
pozx=i;
pozy=j;
min=a[i][j];
}
for(int i=1;i<=n;++i)
{
for(int j= 1;j<=m;++j)
printf("%2d ",b[i][j]);
printf("\n");
}
}
void afisare()
{
freopen(OUT);
printf("%d %d %d \n",a[pozx][pozy] + 1,pozx,pozy);
}
int main()
{
citire();
Lee1();
Lee2();
afisare();
return 0;
}