/*rj*/
#include<fstream.h>
char a[103][103],cit[2];
int n,m,sv_i_j,sv_j_j,sv_i_r,sv_j_r,ro[103][103],ju[103][103],minim=32000;
int dl[]={-1,0,1,0,-1,1,-1,1};
int dc[]={0,1,0,-1,-1,-1,1,1};
struct o
{
int x,y,d;
}C[1000],E;
ifstream fin("rj.in");
ofstream fout("rj.out");
void cauta()
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(a[i][j]=='R')
{
sv_i_r=i;
sv_j_r=j;
}
if(a[i][j]=='J')
{
sv_i_j=i;
sv_j_j=j;
}
}
}
void bord()
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
if(a[i][j]==' ' || a[i][j]=='R' || a[i][j]=='J')
ro[i][j]=ju[i][j]=-2;
else
ro[i][j]=ju[i][j]=-1;
}
}
void lee(int x0,int y0,int a[103][103])
{
int ic,sc,xn,yn,i,dn;
ic=0;
sc=0;
C[sc].x=x0;
C[sc].y=y0;
C[sc].d=0;
a[x0][y0]=0;
while(ic<=sc)
{
E=C[ic];
ic=ic+1;
for(i=0;i<=7;i++)
{
xn=E.x+dl[i];
yn=E.y+dc[i];
dn=E.d+1;
if(a[xn][yn]==-2)
{
a[xn][yn]=dn;
sc=sc+1;
C[sc].x=xn;
C[sc].y=yn;
C[sc].d=dn;
}
}
}
}
int main()
{
int i,j;
fin>>n>>m;
fin.getline(cit,2);
for(i=0;i<n;i++)
fin.getline(a[i],103);
cauta();
bord();
lee(sv_i_r,sv_j_r,ro);
lee(sv_i_j,sv_j_j,ju);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(ro[i][j]==ju[i][j] && ro[i][j]>0)
if(minim>ro[i][j])
{
minim=ro[i][j];
sv_i_r=i;
sv_j_r=j;
}
fout<<minim+1<<" "<<sv_i_r+1<<" "<<sv_j_r+1<<'\n';
fout.close();
return 0;
}