#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
#define Nmax 105
#define romeo 1
#define julieta -2
ifstream fin("rj.in");
ofstream fout("rj.out");
const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};
void citire(int &n,int &m ,int a[][Nmax],int &ir, int &jr, int &ij, int &jj)
{
int i,j;
char x[Nmax];
fin>>n>>m;
fin.get();
for(i=1;i<=n;i++)
{
fin.getline(x,101,'\n');
for(j=0;j<m;j++)
{
if(x[j]==' ')
a[i][j+1]=0;
if(x[j]=='X')
a[i][j+1]=-1;
if(x[j]=='R'){
ir=i;jr=j+1;
a[ir][jr]=romeo;
}
if(x[j]=='J'){
ij=i;jj=j+1;
a[ij][jj]=0;
}
}
}
}
inline bool bune(int i, int j, int n, int m)
{
if(i>0 && i<=n && j>0 && j<=m)
return 1;
return 0;
}
void lee(int a[][Nmax],int xi, int yi, int n, int m)
{
int cx[21000],cy[21000],pi,ps,k,ii,jj;
cx[0]=xi;
cy[0]=yi;
pi=0;
ps=0;
while(pi<=ps)
{
for(k=0;k<8;k++)
{
ii=cx[pi]+dx[k];
jj=cy[pi]+dy[k];
if(bune(ii,jj,n,m)==1)
if(a[ii][jj]==0)
{
a[ii][jj]=a[cx[pi]][cy[pi]]+1;
ps++;
cx[ps]=ii;
cy[ps]=jj;
}
}
pi++;
}
}
void afisare_mijloc(int a[][Nmax], int n, int m, int ij, int j_j, int fost_j)
{
int cx[21000],cy[21000],pi,ps,k,ii,jj,Min,ok=0,i,j,Min_i,Min_j;
cx[0]=ij;
cy[0]=j_j;
Min=10;
pi=0;
ps=0;
while(pi<=ps)
{
for(k=0;k<8;k++)
{
ii=cx[pi]+dx[k];
jj=cy[pi]+dy[k];
if(bune(ii,jj,n,m)==1)
if(a[ii][jj]>a[cx[pi]][cy[pi]] && a[ii][jj]!=-1 && a[ij][jj]<=fost_j)
{
a[ii][jj]=a[cx[pi]][cy[pi]]+1;
ps++;
cx[ps]=ii;
cy[ps]=jj;
}
}
pi++;
}
fout<<Min<<" "<<Min_i<<" "<<Min_j;
}
int main()
{
int n,m, a[Nmax][Nmax],ir,jr,ij,jj,mij,i,j,fost_j;
citire(n,m,a,ir,jr,ij,jj);
lee(a,ir,jr,n,m);
fost_j=a[ij][jj];
a[ij][jj]=1;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
cout<<a[i][j]<<"\t";
cout<<endl;
}cout<<endl;
afisare_mijloc(a,n,m,ij,jj,fost_j);for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
cout<<a[i][j]<<"\t";
cout<<endl;
}
return 0;
}