#include <fstream>
#include <cstring>
#define INF 100001
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int dx[8]= {-1,-1,-1,0,0,1,1,1};
const int dy[8]= {1,0,-1,1,-1,1,0,-1};
int r[101][101],J[101][101],n,m;
bool verif (int x,int y,int a[101][101])
{
if (x<=0||y<=0||x>n||y>m) return true;
else return false;
}
struct num
{
int l;
int c;
};
num Q[10000];
void lee(int a[101][101],int xi,int yi)
{
int xx,yy,x,y,p,u,i,j;
bool ok;
p=u=1;
Q[u].l=xi;
Q[u].c=yi;
ok=false;
while (p<=u&&!ok)
{
x=Q[p].l;
y=Q[p].c;
for (i=0; i<=7; i++)
{
xx=x+dx[i];
yy=y+dy[i];
if (!verif(xx,yy,a)&&a[xx][yy]==INF)
{
a[xx][yy]=a[x][y]+1;
u++;
Q[u].l=xx;
Q[u].c=yy;
}
}
p++;
}
}
int main ()
{
f>>n>>m;
f.get();
int i,j;
int rx,ry,jx,jy;
char c[101];
for (i=1;i<=n;i++)
{
f.get(c,101);
for (j=0;j<m;j++)
{
if(c[j]=='X')
{
r[i][j+1]=-1;
J[i][j+1]=-1;
}
else if (c[j]=='R')
{
r[i][j+1]=0;
J[i][j+1]=INF;
rx=i;
ry=j+1;
}
else if (c[j]=='J')
{
J[i][j+1]=0;
r[i][j+1]=INF;
jx=i;
jy=j+1;
}
else r[i][j+1]=J[i][j+1]=INF;
}
f.get();
}
lee(r,rx,ry);
lee(J,jx,jy);
int M,Mx,My;
M=INF;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
if (r[i][j]==J[i][j]&&r[i][j]!=-1&&r[j][i]!=INF&&r[i][j]<M)
{
M=r[i][j];
Mx=i;
My=j;
}
}
g<<M+1<<' '<<Mx<<' '<<My;
return 0;
}