#include<fstream>
#include<queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
struct cel
{
int l,c;
} x,y;
queue <cel> q;
int n,m,R[102][102],J[102][102],Xr,Yr,Xj,Yj,minim(100000),xm,ym;
int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,1,1,1,0,-1,-1,-1};
char a[102][102];
void citire()
{
int i,j;
f>>n>>m; f.get();
for (i=1;i<=n;++i)
{
for (j=1;j<=m;++j)
{
f.get(a[i][j]);
if (a[i][j]=='R')
Xr=i, Yr=j;
if (a[i][j]=='J')
Xj=i, Yj=j;
}
f.get();
}
}
void bordare()
{
int i;
for (i=0;i<=n+1;++i)
a[i][0]=a[i][m+1]='X';
for (i=0;i<=m+1;++i)
a[0][i]=a[n+1][0]='X';
}
void lee(int lp, int cp, int v[][102])
{
int i,lv,cv;
v[lp][cp]=1;
x.l=lp; x.c=cp;
q.push(x);
while (!q.empty())
{
x=q.front(); q.pop();
for (i=0;i<8;++i)
{
lv=x.l+dx[i], cv=x.c+dy[i];
if (a[lv][cv]==' ' && !v[lv][cv])
{
y.l=lv; y.c=cv;
q.push(y);
v[lv][cv]=1+v[x.l][x.c];
}
}
}
}
int main()
{
int i,j;
citire(); bordare();
lee(Xr,Yr,R); lee(Xj,Yj,J);
for (i=1;i<=n;++i)
for (j=1;j<=m;++j)
if (R[i][j]==J[i][j] && a[i][j]==' ' && R[i][j])
if (minim>R[i][j])
minim=R[i][j], xm=i, ym=j;
g<<minim<<" "<<xm<<" "<<ym<<'\n';
return 0;
}