#include <fstream>
#include <cstring>
using namespace std;
ifstream in ("rj.in");
ofstream out ("rj.out");
struct nod
{
int l,c;
};
nod Q[1000];
int xr,yr,xj,yj,n,m,a[110][110],b[110][110];
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
void load()
{
char s[110];
int i,j;
in>>n>>m; in.get();
for(i=0; i<=n+1; i++)
{
for(j=0; j<=m+1; j++)
{
if(i==0 || i==n+1 || j==0 || j==n+1) b[i][j]=a[i][j]=-1;
else b[i][j]=a[i][j]=0;
}
}
for(i=1; i<=n; i++)
{
in.getline(s,110);
for(j=0; j<m; j++)
{
if(s[j]=='X') a[i][j+1]=b[i][j+1]=-1;
else
{
if(s[j]=='R') {a[i][j+1]=1; xr=i; yr=j+1;}
else
{
if(s[j]=='J') {b[i][j+1]=1, xj=i; yj=j+1;}
}
}
}
}
}
void lee (int xi, int yi, int a[110][110])
{
int p,u,i,x,y,xx,yy;
a[xi][yi]=1;
Q[1].l=xi,Q[1].c=yi;
p=u=1;
while(p<=u)
{
x=Q[p].l;
y=Q[p].c;
for(i=0; i<8; i++)
{
xx=x+dx[i];
yy=y+dy[i];
if(a[xx][yy]==0)
{
u++;
Q[u].l=xx; Q[u].c=yy;
a[xx][yy]=a[x][y]+1;
}
}
p++;
}
}
int main()
{
int i,j,p1=0,p2=0;
load();
int mini=n*m;
lee(xr,yr,a);
lee(xj,yj,b);
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
if(a[i][j]==b[i][j] && a[i][j]>0 && a[i][j]<mini) {mini=a[i][j], p1=i; p2=j;}
}
}
out<<mini<<" "<<p1<<" "<<p2;
return 0;
}