#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int xr,yr,xj,yj,n,m,tmin,xsol,ysol,R[105][105],J[105][105];
int dx[9]={-1,-1,0,1,1,1,0,-1};
int dy[9]={0,1,1,1,0,-1,-1,-1};
char o[105][105];
struct punct
{
int x,y;
}coada[100005];
inline bool inside(int i,int j)
{
return i>=1&&i<=n&&j>=1&&j<=m;
}
void lee(int x,int y,int v[105][105])
{
int prim,ultim;
prim=ultim=1;
coada[ultim].x=x,coada[ultim].y=y;
while(prim<=ultim)
{
int i=coada[prim].x,j=coada[prim].y;
for(int k=0;k<=7;++k)
{
int inou=i+dx[k],jnou=j+dy[k];
if(inside(i,j)&&o[inou][jnou]==' '&&v[inou][jnou]>v[i][j]+1)
{
v[inou][jnou]=v[i][j]+1;
coada[++ultim].x=inou;
coada[ultim].y=jnou;
}
}
prim++;
}
}
void read()
{
f>>n>>m;
f.get();
for(int i=1;i<=n;++i)
f.getline(o[i]+1,105);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
if(o[i][j]=='R') xr=i,yr=j;
if(o[i][j]=='J') xj=i,yj=j;
}
}
void solve()
{
read();
tmin=(1<<30);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
R[i][j]=J[i][j]=(1<<30);
R[xr][yr]=J[xj][yj]=0;
lee(xr,yr,R);
lee(xj,yj,J);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
if(R[i][j]==J[i][j])
{
if(tmin>R[i][j])
tmin=R[i][j],xsol=i,ysol=j;
}
}
g<<tmin+1<<" "<<xsol<<" "<<ysol<<'\n';
}
int main()
{
solve();
return 0;
}