#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
#include <cmath>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
#define nmax 350
queue < pair<int,int> > coada;
char a[nmax][nmax],sir[nmax];
int v[nmax][nmax],b[nmax][nmax],n,i,j,startJ_x,startJ_y,startR_x,startR_y,m,minim=10000,poz1,poz2;
int dl[8]={-1,-1,0,1,1,1,0,-1};
int dc[8]={0,1,1,1,0,-1,-1,-1};
int OK(int i, int j)
{
if(i<1 || j<1 || j>m || i>n)
return false;
if(v[i][j]==-1)
return false;
return true;
}
void Lee(int v[nmax][nmax], int startx, int starty)
{
int i,j,i_urm,j_urm;
v[startx][starty]=1;
coada.push(make_pair(startx,starty));
while(!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(int dir=0;dir<8;dir++)
{
i_urm=i+dl[dir];
j_urm=j+dc[dir];
if(OK(i_urm,j_urm) && v[i_urm][j_urm]<1)
{
v[i_urm][j_urm]=v[i][j]+1;
coada.push(make_pair(i_urm,j_urm));
}
}
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n+1;i++)
{
fin.getline(sir,nmax);
if(i>1)
{
j=0;
for(int k=0;k<strlen(sir);k++)
{
j++;
a[i-1][j]=sir[k];
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]=='R')
{
startR_x=i;
startR_y=j;
}
else if(a[i][j]=='J')
{
startJ_x=i;
startJ_y=j;
}
else if(a[i][j]=='X')
{
v[i][j]=-1;
b[i][j]=-1;
}
}
}
Lee(v,startR_x,startR_y);
Lee(b,startJ_x,startJ_y);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(v[i][j]==b[i][j])
{
if(v[i][j]>0)
{
if(v[i][j]<minim)
{
minim=v[i][j];
poz1=i;
poz2=j;
}
}
}
}
}
fout<<minim<<" "<<poz1<<" "<<poz2;
}