#include <iostream>
#include <fstream>
#define inFile "rj.in"
#define outFile "rj.out"
#include <iomanip>
using namespace std;
int a[110][110],m,n,cR[10000][2],begR,endR,cJ[10000][2],begJ,endJ,lin[9]={0,-1,-1,0,1,1,1,0,-1},col[9]={0,0,1,1,1,0,-1,-1,-1};
void coada_in(int cD[10000][2],int &end,int l,int c)
{
if(end+1>9999) end=0;
else end++;
cD[end][0]=l; cD[end][1]=c;
}
void citire()
{
char c;
ifstream fin(inFile);
fin>>m>>n;
fin.get(c);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
fin.get(c);
if(c=='X' || c=='x') { a[i][j]=100000; continue; }
if(c=='R' || c=='r') { a[i][j]=1; coada_in(cR,endR,i,j); continue; }
if(c=='J' || c=='j') { a[i][j]=-1; coada_in(cJ,endJ,i,j); continue; }
}
fin.get(c);
}
fin.close();
}
void coada_out(int cD[10000][2],int &beg,int &l,int &c)
{
if(beg+1>9999) beg=0;
else beg++;
l=cD[beg][0]; c=cD[beg][1];
}
void bordare()
{
for(int i=0;i<=m+1;i++) a[i][0]=a[i][n+1]=-1;
for(int j=0;j<=n+1;j++) a[0][j]=a[m+1][j]=-1;
}
void lee(int &lRez,int &cRez)
{
int l,c,pas;
while(endR!=begR)
{
coada_out(cR,begR,l,c);
pas=a[l][c]+1;
for(int i=1;i<=8;i++)
if(a[l+lin[i]][c+col[i]]==0 || (pas<a[l+lin[i]][c+col[i]] && a[l+lin[i]][c+col[i]]!=100000))
{
coada_in(cR,endR,l+lin[i],c+col[i]);
a[l+lin[i]][c+col[i]]=pas;
}
}
while(endJ!=begJ)
{
coada_out(cJ,begJ,l,c);
pas=a[l][c]-1;
for(int i=1;i<=8;i++)
if((a[l+lin[i]][c+col[i]]>0 && a[l+lin[i]][c+col[i]]!=-pas) || (pas>a[l+lin[i]][c+col[i]] && a[l+lin[i]][c+col[i]]<0 ))
{
coada_in(cJ,endJ,l+lin[i],c+col[i]);
a[l+lin[i]][c+col[i]]=pas;
}
else if(a[l+lin[i]][c+col[i]]==-pas) { lRez=l+lin[i]; cRez=c+col[i]; return; }
cout<<"a";
}
}
void afisare(int lRez,int cRez)
{
ofstream fout(outFile);
fout<<lRez<<" "<<cRez<<" "<<a[lRez][cRez];
fout.close();
}
int main()
{
int lRez,cRez;
citire();
bordare();
lee(lRez,cRez);
afisare(lRez,cRez);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++) cout<<setw(3)<<a[i][j];
cout<<"\n";
}cout<<"\n\n";
}