#include <fstream>
#include <iostream>
using namespace std;
struct PUNCT {int x, y;};
char h;
int a[101][101],px[8]={-1,-1,-1,0,1,1,1,0},py[8]={0,-1,1,1,0,1,-1,-1},b[101][101],n,m,i,j,x1,y1,x2,y2,q,e,nr,min1=99999,y;
PUNCT c[10201];
ifstream f("rj.in");
ofstream g("rj.out");
void lee (int x,int y,int z[101][101])
{
PUNCT v;
int p,u,i,l1,c1;
c[1].x=x;c[1].y=y;
p=u=1;z[x][y]=1;
while (p<=u)
{
v=c[p];
for (i=0;i<=7;i++)
{
l1=v.x+px[i];c1=v.y+py[i];
if (z[l1][c1]==0)
{
z[l1][c1]=z[v.x][v.y]+1;
u++;
c[u].x=l1;c[u].y=c1;
}
}
p++;
}
}
void show (int z[101][101])
{
for (i=1;i<=n;i++)
{for (j=1;j<=m;j++)
cout<<z[i][j]<<" ";
cout<<endl;}
}
void init (int z[101][101])
{
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
z[i][j]=0;
for (i=0;i<=n+1;i++)
z[i][0]=z[i][m+1]=-1;
for (i=0;i<=m+1;i++)
z[0][i]=z[n+1][i]=-1;
}
int main()
{
f>>n>>m;
init (a);
init (b);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
f.get(h);
if(h=='\n'&& j>1) j=m;
else if (h=='\n') f.get(h);
if (h=='R') {a[i][j]=1;b[i][j]=0;x1=i;y1=j;}
else if (h=='J') {a[i][j]=0;b[i][j]=1;x2=i;y2=j;}
else if (h=='X') a[i][j]=b[i][j]=-1;
}
lee (x1,y1,a);
lee (x2,y2,b);
show (a);
show (b);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (a[j][i]==b[j][i] && a[j][i]!=-1 && min1>a[j][i])
{min1=a[j][i];}
for (i=1;i<=n;i++)
{for (j=1;j<=m;j++)
if (a[j][i]==b[j][i] && a[j][i]!=-1 && min1==a[j][i])
{
e=i;
q=j;
y=1;
break;
}
if (y) break;
}
g<<a[q][e]<<" "<<q<<" "<<e;
f.close();
g.close();
return 0;
}