#include <fstream>
#include <iomanip>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,a[101][101]={},b[101][101];
struct coord
{
int x,y;
} rom,jul,c[101],p,v;
void citire()
{
char c,linie[101];
f>>n>>m;
f.get();
for(int i=1; i<=n; i++)
{
f.getline(linie,101);
for(int j=0; j<m; j++)
{
c=linie[j];
if(c=='R')
{
rom.x=i,rom.y=j+1;
}
else if(c=='J')
{
jul.x=i;
jul.y=j+1;
}
else if(c=='X'){a[i][j+1]=-1;b[i][j+1]=-1;}
}
}
}
void bordare()
{
for(int i=0; i<=n+1; i++){a[i][0]=-1;b[i][0]=-1;}
for(int i=0; i<=n+1; i++){a[i][n+1]=-1;b[i][n+1]=-1;}
for(int i=0; i<=n+1; i++){a[0][i]=-1;b[0][i]=-1;}
for(int i=0; i<=n+1; i++){a[n+1][i]=-1;b[n+1][i]=-1;}
}
void afisare(){
for(int i=0;i<=n+1;i++){
for(int j=0;j<=m+1;j++){
g<<setw(2)<<a[i][j]<<" ";
}
g<<'\n';
}
g<<'\n';
for(int i=0;i<=n+1;i++){
for(int j=0;j<=m+1;j++){
g<<setw(2)<<b[i][j]<<" ";
}
g<<'\n';
}
}
void leeRom(){
int prim=0,ultim=0,nrDir=8;
int dl[]={-1, -1, -1, 0, 1, 1, 1, 0};
int dc[]={-1, 0, 1, 1, 1, 0,-1,-1};
c[0]=rom;
a[rom.x][rom.y]=1;
while(prim<=ultim && a[jul.x][jul.y]==0){
p=c[prim];
prim++;
for(int k=0;k<nrDir;k++){
v.x=p.x+dl[k];
v.y=p.y+dc[k];
if(a[v.x][v.y]==0){
a[v.x][v.y]=a[p.x][p.y]+1;
ultim++;
c[ultim]=v;
}
}
}
}
void leeJul(){
int prim=0,ultim=0,nrDir=8;
int dl[]={-1, -1, -1, 0, 1, 1, 1, 0};
int dc[]={-1, 0, 1, 1, 1, 0,-1,-1};
c[0]=jul;
b[jul.x][jul.y]=1;
while(prim<=ultim && b[rom.x][rom.y]==0){
p=c[prim];
prim++;
for(int k=0;k<nrDir;k++){
v.x=p.x+dl[k];
v.y=p.y+dc[k];
if(b[v.x][v.y]==0){
b[v.x][v.y]=b[p.x][p.y]+1;
ultim++;
c[ultim]=v;
}
}
}
}
void intalnire (){
int lmin=0,cmin=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==b[i][j]&&a[i][j]!=0&&a[i][j]!=-1)g<<a[i][j]<<" "<<i<<" "<<j<<'\n';
}
}
}
int main(){
citire();
bordare();
leeRom();
leeJul();
intalnire();
return 0;
}