#include <stdio.h>
#include<string.h>
FILE *f;
FILE *g;
int x[]={0,-1,0,1,0,-1,1,-1,1},y[]={0,0,1,0,-1,-1,-1,1,1};
struct punct{int lin,col;}ju,ro,intalnire;
int a[1001][1001],n,m,i,j,k,b[1001][1001],d[1001][1001];
void lee(punct t,punct tt,int aa[1001][1001])
{
int prim,ultim;
punct plecare,p,v,c[101];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
aa[i][j]=0;
prim=ultim=0;
for(i=0;i<=n;i++) c[i].lin=0,c[i].col=0;
plecare.lin=t.lin;
plecare.col=t.col;
c[0]=plecare;
aa[plecare.lin][plecare.col]=1;
while(prim<=ultim&&aa[tt.lin][tt.col]==0) {
p=c[prim];
prim++;
for(k=1;k<=8;k++) {
v.lin=p.lin+x[k];
v.col=p.col+y[k];
if(aa[v.lin][v.col]==0&&d[v.lin][v.col]==1)
{
aa[v.lin][v.col]=aa[p.lin][p.col]+1;
ultim++;
c[ultim]=v;
}
}
}
}
int main()
{
f = fopen ("rj.in" , "r");
g = fopen ("rj.out" , "w");
int minim;
fscanf(f,"%d%d",&n,&m);
char s[2000];
fgets (s , 1001 , f);//pentru golire buffer
for(i=1;i<=n;i++)
{
// fgets (s , 100 , f);
fgets (s , 1001 , f);
// printf("%s\n",s);
for(j=0;j<m;j++)
if(s[j]==' '|| j>=strlen(s)) d[i][j+1]=1;
else if(s[j]=='X') d[i][j+1]=0;
else if(s[j]=='R')
{
d[i][j+1]=1;
ro.lin=i;
ro.col=j+1;
}
else if(s[j]=='J')
{
d[i][j+1]=1;
ju.lin=i;
ju.col=j+1;
}
}
/* for(i=1;i<=n;i++) {
for(j=1;j<=m;j++)
printf("%d ",d[i][j]);
printf("\n");}
printf("\n"); */
lee(ro,ju,a);
lee(ju,ro,b);
for(i=1;i<=n;i++) {
for(j=1;j<=m;j++)
printf("%d ",a[i][j]);
printf("\n");}
printf("\n");
for(i=1;i<=n;i++) {
for(j=1;j<=m;j++)
printf("%d ",b[i][j]);
printf("\n");}
minim=100000;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]==b[i][j]&&a[i][j]&&a[i][j]<minim)
minim=a[i][j],intalnire.lin=i,intalnire.col=j;
fprintf(g,"%d %d %d",minim,intalnire.lin,intalnire.col);
}