#include<stdio.h>
#define NMAX 105
#define inf 1<<30
using namespace std;
struct poz{
int x,y;
};
int r[NMAX][NMAX],j[NMAX][NMAX];
poz q[NMAX*NMAX];
void bordare(int n,int m){
for(int i=0;i<=m+1;++i)
r[i][0]=j[i][0]=r[i][n+1]=j[i][n+1]=-1;
for(int i=0;i<=n+1;++i)
r[0][i]=j[0][i]=r[m+1][i]=j[m+1][i]=-1;
}
void lee(int x,int y,int mat[NMAX][NMAX]){
int st,fin;
int dl[]={-1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1};
poz p;
st=fin=1;
while(st<=fin){
p.x=q[st].x;
p.y=q[st].y;
++st;
for(int k=0;k<=7;++k)
if(mat[p.x+dl[k]][p.y+dc[k]]==0){
mat[p.x+dl[k]][p.y+dc[k]]=mat[p.x][p.y]+1;
++fin;
q[fin].x=p.x+dl[k];
q[fin].y=p.y+dc[k];
}
}
}
int main(){
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
int n,m,min=inf,minx,miny;
char c;
poz pr,pj;
scanf("%d %d%c",&m,&n,&c);
bordare(n,m);
for(int i=1;i<=m;++i){
//scanf("%c",&c);
for(int k=1;k<=n+1;++k){
scanf("%c",&c);
if(c==' ') r[i][k]=j[i][k]=0;
else if(c=='X') r[i][k]=j[i][k]=-1;
else if(c=='R') {
r[i][k]=j[i][k]=0;
pr.x=i;
pr.y=k;
}
else if(c=='J') {
r[i][k]=j[i][k]=0;
pj.x=i;
pj.y=k;
}
else
if(k!=n+1) r[i][k]=j[i][k]=0;
}
}
for(int i=1;i<=m;++i){
for(int k=1;k<=n;++k)
printf("%d ",r[i][k]);
printf("\n");
}
q[1].x=pr.x;
q[1].y=pr.y;
r[pr.x][pr.y]=1;
lee(pr.x,pr.y,r);
q[1].x=pj.x;
q[1].y=pj.y;
j[pj.x][pj.y]=1;
lee(pj.x,pj.y,j);
for(int i=1;i<=m;++i)
for(int k=1;k<=n;++k)
if(r[i][k]==j[i][k] && r[i][k]>0 && r[i][k]<min){
min=r[i][k];
minx=i;
miny=k;
}
printf("%d %d %d\n",min,minx,miny);
return 0;
}