#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m;
int xr,xj,yr,yj;
int dx[8]={0,1,0,-1,-1,1,-1,1};
int dy[8]={1,0,-1,0,-1,1,1,-1};
struct coada
{
int l,v;
};
coada q[10001];
char a[101][101];
int b[101][101],c[101][101];
int verif(int i,int j)
{
return (i>n||j>m||i<1||j<1||a[i][j]=='X');
}
void citire()
{
int i,j;
char caracter;
f>>n>>m;
f.get(caracter);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
f.get(caracter);
a[i][j]=caracter;
if(a[i][j]=='R')
{
xr=i;
yr=j;
a[i][j]=' ';
}
if(a[i][j]=='J')
{
xj=i;
yr=j;
a[i][j]=' ';
}
}
f.get(caracter);
}
}
/*void lee(int xi,int yi,int mat[101][101])
{
int st,dr,i;
int x,y,xx,yy;
q[0].l=xi;
q[0].v=yi;
mat[xi][yi]=1;
st=dr=0;
while(st<=dr)
{
x=q[st].l;
y=q[st].v;
for(i=1;i<8;i++)
{
xx=x+dx[i];
yy=y+dy[i];
if(verif(xx,yy))
continue;
if(a[xx][yy]==' ')
{
mat[xx][yy]=mat[x][y]+1;
q[++dr].l=xx;
q[dr].v=yy;
}
}
st++;
}
}*/
void lee(int xi,int yi,int mat[101][101])
{
int x=0,y=0,xx=0,yy=0,i,st=0,dr=0;
q[0].l=xi;
q[0].v=yi;
mat[xi][yi]=1;
st=dr=0;
while(st<=dr)
{
x=q[st].l;
y=q[st].v;
for(i=0;i<8;i++)
{
xx=x+dx[i];
yy=y+dy[i];
if(verif(xx,yy))
continue;
if(a[xx][yy]==' ')
{
mat[xx][yy]=mat[x][y]+1;
q[++dr].l=xx;
q[dr].v=yy;
}
}
st++;
}
}
/*void lee(int x0, int y0, int d[101][101])
{
coada p;
int inc=0,sf=0,i,k;
for(i=0;i<=n+1;i++)
for (k=0;k<=m+1;k++)
d[i][k]=-1;
q[0].l=x0;
q[0].v=y0;
d[x0][y0]=1;
while (inc<=sf)
{
p=q[inc++];
for(i=0;i<8;i++)
if(a[p.l+dx[i]][p.v+dy[i]]==' ' && d[p.l+dx[i]][p.v+dy[i]]==-1)
{
d[p.l+dx[i]][p.v+dy[i]]=1+d[p.l][p.v];
q[++sf].l=p.l+dx[i];
q[sf].v=p.v+dy[i];
}
}
}*/
void afisare(int mat[101][101])
{
int timp;
int x,y;
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(b[i][j]==c[i][j])
{
timp=b[i][j];
x=i;
y=j;
}
g<<timp<<" "<<x<<" "<<y;
}
int main()
{
int i,j;
citire();
lee(xr,yr,b);
lee(xj,yj,c);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
g<<b[i][j]<<" ";
g<<"\n";
}
afisare(c);
return 0;
}