#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
queue <pair <int,int> > coada;
ifstream cin("rj.in");
ofstream cout("rj.out");
int n,m,ir,jr,ij,jj,R[105][105],J[105][105],di[8]={0,0,1,-1,1,-1,-1,1},dj[8]={1,-1,0,0,1,-1,1,-1},lmin=1000000,q,p;
char str[106];
bool inside(int i, int j)
{
return i>0&&j>0&&i<=n&&j<=m;
}
void leer()
{
int i,j,iu,ju;
coada.push(make_pair(ir,jr));
R[ir][jr]=1;
while(!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(int d=0; d<8; d++)
{
iu=i+di[d];
ju=j+dj[d];
if(inside(iu,ju) && R[iu][ju]==0)
{
R[iu][ju]=R[i][j]+1;
coada.push(make_pair(iu,ju));
}
}
}
}
void leej()
{
int i,j,iu,ju;
coada.push(make_pair(ij,jj));
J[ij][jj]=1;
while(!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(int d=0; d<8; d++)
{
iu=i+di[d];
ju=j+dj[d];
if(inside(iu,ju) && J[iu][ju]==0)
{
J[iu][ju]=J[i][j]+1;
coada.push(make_pair(iu,ju));
}
}
}
}
void rezolvare()
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(R[i][j]==J[i][j] && R[i][j]!=-1 && R[i][j]<lmin && R[i][j]!=0)
{
lmin=R[i][j];
q=i;
p=j;
}
}
}
cout << lmin << " " << q << " " << p;
}
int main()
{
cin >> n >> m;
cin.get();
for(int i=1; i<=n; i++)
{
cin.get(str,105);
cin.get();
for(int j=0; j<m; j++)
{
if(str[j]=='X')
{
R[i][j+1]=-1;
J[i][j+1]=-1;
}
else if(str[j]=='R')
{
ir=i;
jr=j+1;
}
else if(str[j]=='J')
{
ij=i;
jj=j+1;
}
}
}
leer();
leej();
rezolvare();
return 0;
}