#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,x,y,R[105][105],J[105][105],p,u,x1,x2,y1,y2,i,j,a,b,Min; char S[105];
int dl[]={-1,1,0,0,-1,1,1,-1};
int dc[]={0,0,-1,1,1,1,-1,-1};
struct pozitie
{
int c,l;
};
pozitie c[1000005];
void bordare ()
{
for(int i=0;i<=n+1;i++)
R[i][0]=R[i][m+1]=J[i][0]=J[i][m+1]=-1;
for(int j=0;j<=m+1;j++)
R[0][j]=R[n+1][j]=J[0][j]=J[n+1][j]=-1;
}
void leeR (int x, int y)
{
int l1,c1,l2,c2;
c[p].l=x;
c[p].c=y;
while(p<=u)
{
l1=c[p].l;
c1=c[p].c;
p++;
for(int i=0;i<8;i++)
{
l2=l1+dl[i];
c2=c1+dc[i];
if(R[l2][c2]==0){
R[l2][c2]=R[l1][c1]+1;
u++;
c[u].l=l2;
c[u].c=c2;
}
}
}
}
void leeJ (int x, int y)
{
int l1,c1,l2,c2;
p=u=1;
c[p].l=x;
c[p].c=y;
while(p<=u)
{
l1=c[p].l;
c1=c[p].c;
p++;
for(int i=0;i<8;i++)
{
l2=l1+dl[i];
c2=c1+dc[i];
if(J[l2][c2]==0){
J[l2][c2]=J[l1][c1]+1;
u++;
c[u].l=l2;
c[u].c=c2;
}
}
}
}
void compar()
{
Min=10000000;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(R[i][j]==J[i][j] && R[i][j]<Min && R[i][j]>0)
{
a=i; b=j;
Min=R[i][j];
}
}
}
}
void afis(int x[105][105])
{
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
fout<<x[i][j]<< " ";
}
fout<<"\n";
}
}
int main()
{
fin>>n>>m;
fin.get();
p=u=1;
for(i=1;i<=n;i++){
fin.getline(S,105);
for(j=0;j<m;j++){
if(S[j]==' ')
R[i][j+1]=0, J[i][j+1]=0;
if(S[j]=='X')
R[i][j+1]=-1, J[i][j+1]=-1;
if(S[j]=='R')
R[i][j+1]=1, x1=i, y1=j+1;
if(S[j]=='J')
J[i][j+1]=1, x2=i, y2=j+1;
}
}
bordare();
leeR(x1,y1); leeJ(x2,y2);compar();
//afis(R); afis(J);
fout<<Min<<" "<<a<<" "<<b;
}