#include <iostream>
#include <fstream>
#include <string.h>
#include <queue>
using namespace std;
ifstream f("mat.in");
ofstream g("mat.out");
char s[101];
int n,m,i,j,a1[101][101],matr[101][101],matj[101][101],pozi,pozj,minn,ir,jr,ij,jj,a2[101][101];
int dx[8]={1,-1,0,0,-1,-1,1,1};
int dy[8]={0,0,1,-1,-1,1,-1,1};
queue < pair< int,int>> coada;
int verif(int i,int j)
{
if(i<1 || j<1 || i>n || j>m)
{
return false;
}
return true;
}
void leer(int x, int y)
{
matr[x][y]=1;
coada.push(make_pair(x,y));
int iurm,jurm,p,i1,j1;
while(!coada.empty())
{
i1=coada.front().first;
j1=coada.front().second;
coada.pop();
for(p=0;p<=7;p++)
{
iurm=i1+dx[p];
jurm=j1+dy[p];
if(verif(iurm,jurm)==true && a1[iurm][jurm]==0)
{
matr[iurm][jurm]=matr[i1][j1]+1;
coada.push(make_pair(iurm,jurm));
}
}
}
}
void leej(int x, int y)
{
matj[x][y]=1;
coada.push(make_pair(x,y));
int iurm,jurm,i1,j1,p;
while(!coada.empty())
{
i1=coada.front().first;
j1=coada.front().second;
coada.pop();
for(p=0;p<=7;p++)
{
iurm=i1+dx[p];
jurm=j1+dy[p];
if(verif(iurm,jurm)==true && a2[iurm][jurm]==0)
{
matj[iurm][jurm]=matj[i1][j1]+1;
coada.push(make_pair(iurm,jurm));
}
}
}
}
int main()
{
f>>n>>m; f.get();
for(i=1;i<=n;i++)
{
f.getline(s,101);
for(j=0;j<m;j++)
{
if(s[j]==' ')
{
a1[i][j+1]=0;
a2[i][j+1]=0;
}
else if(s[j]=='R' )
{
a1[i][j+1]=1;
a2[i][j+1]=1;
ir=i;
jr=j;
}
else if(s[j]=='J')
{
a1[i][j+1]=1;
a2[i][j+1]=1;
ij=i;
jj=j;
}
else if(s[j]=='X')
{
a1[i][j+1]=-1;
a2[i][j+1]=-1;
}
}
}
leer(ir,jr);
leej(ij,jj);
minn=1000000;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(matr[i][j]==matj[i][j] && matr[i][j]<minn)
{
minn=matr[i][j];
pozi=i;
pozj=j;
}
}
}
g<<minn<<" "<<pozi<<" "<<pozj;
f.close();
g.close();
return 0;
}