#include<iostream.h>
#include<fstream.h>
#include<string.h>
ifstream f("rj.in");
ofstream g("rj.out");
int R[101][101],J[101][101];
int n,m,xr,yr,xj,yj;
void marcare(int A[101][101],int i,int j,int t)
{
if(i>1&&j>1&&(A[i-1][j-1]==0||(A[i-1][j-1]>0&&t<A[i-1][j-1])))A[i-1][j-1]=t,marcare(A,i-1,j-1,t+1);
if(i>1&&(A[i-1][j]==0||(A[i-1][j]>0&&t<A[i-1][j])))A[i-1][j]=t,marcare(A,i-1,j,t+1);
if(i>1&&j<m&&(A[i-1][j+1]==0||(A[i-1][j+1]>0&&t<A[i-1][j+1])))A[i-1][j+1]=t,marcare(A,i-1,j+1,t+1);
if(j>1&&(A[i][j-1]==0||(A[i][j-1]>0&&t<A[i][j-1])))A[i][j-1]=t,marcare(A,i,j-1,t+1);
if(j<m&&(A[i][j+1]==0||(A[i][j+1]>0&&t<A[i][j+1])))A[i][j+1]=t,marcare(A,i,j+1,t+1);
if(i<n&&j>1&&(A[i+1][j-1]==0||(A[i+1][j-1]>0&&t<A[i+1][j-1])))A[i+1][j-1]=t,marcare(A,i+1,j-1,t+1);
if(i<n&&(A[i+1][j]==0||(A[i+1][j]>0&&t<A[i+1][j])))A[i+1][j]=t,marcare(A,i+1,j,t+1); if(i<n&&j<m&&(A[i+1][j+1]==0||(A[i+1][j+1]>0&&t<A[i+1][j+1])))A[i+1][j+1]=t,marcare(A,i+1,j+1,t+1);
}
int main ()
{
int i,j,min=30000,minx,miny;
char c;
char *aux=new char[101];
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{
f.get(aux,100);
f.get();
for(j=0;j<strlen(aux);j++)
{
if(isspace(aux[j]))R[i][j+1]=0,J[i][j+1]=0;
else if(aux[j]=='R')R[i][j+1]=-2,J[i][j+1]=-2,xr=i,yr=j+1;
else if(aux[j]=='J')R[i][j+1]=-2,J[i][j+1]=-2,xj=i,yj=j+1;
else R[i][j+1]=-5,J[i][j+1]=-5;
}
}
marcare(R,xr,yr,2);
marcare(J,xj,yj,2);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++) if(R[i][j]>0&&R[i][j]==J[i][j]&&R[i][j]<min)min=R[i][j],minx=i,miny=j;
g<<min<<" "<<minx<<" "<<miny<<'\n';
/*for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++) g<<R[i][j]<<" ";
g<<'\n';
}
g<<'\n';
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++) g<<J[i][j]<<" ";
g<<'\n';
}*/
f.close();
g.close();
return 0;
}