#include <fstream>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int bine(int ii, int jj,int n, int m)
{
return(ii>=0&&ii<n&&jj>=0&&jj<m);
}
void lee(int n,int m, int mat[][100],int xi, int yi)
{
int k,ii,jj,cx[10000],cy[10000],pi,ps;
cx[0]=xi;
cy[0]=yi;
pi=0;
ps=0;
int dx[]={-1,0,1,0,-1,1,1,-1};
int dy[]={0,1,0,-1,1,1,-1,-1};
mat[xi][yi]=1;
while(pi<=ps)
{
for(k=0;k<8;k++)
{
ii=cx[pi]+dx[k];
jj=cy[pi]+dy[k];
if(bine(ii,jj,n,m)==1)/// daca folosesc bordare scap de aceasta functie
if(mat[ii][jj]==0)
{
mat[ii][jj]=mat[cx[pi]][cy[pi]]+1;///programare dinamica(P.D)
ps++;
cx[ps]=ii;
cy[ps]=jj;
}
}
pi++;
}
}
int main()
{
char x[101];
int matr[100][100],matj[100][100],rx,ry,jx,jy,i,j,n,m,ci,cj,minn;
in>>n>>m;
in.get();
for(i=1;i<=n;i++)
{
in.getline(x+1,101+1,'\n');
for(j=1;j<=m;j++)
{
matr[i][j]=0;
matj[i][j]=0;
if(x[j]=='X')
{
matr[i][j]=1;
matj[i][j]=1;
}
if(x[j]=='J')
{
jx=i;
jy=j;
}
if(x[j]=='R')
{
rx=i;
ry=j;
}
}
}
lee(n,m,matj,jx,jy);
lee(n,m,matr,rx,ry);
minn=100*100;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(matj[i][j]==matr[i][j]&&matr[i][j]>1)
if(minn>matr[i][j])
{
minn=matr[i][j];
ci=i;
cj=j;
}
out<<minn<<" "<<ci<<" "<<cj;
return 0;
}