#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int bine(int ii, int jj,int n, int m)
{
return(ii>=0 and ii<n and jj>=0 and 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<4;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()
{
int n,m,mat[100][100],matt[100][100],xi,yi,i,j,xj,yj,minim,jr,ir;
char x[101];
f>>n>>m;
f.get();
for(i=0;i<n;i++)
{
f.getline(x,101,'\n');
for(j=0;j<m;j++)
{
mat[i][j]=0;
matt[i][j]=0;
if(x[j]=='X')
{
mat[i][j]=1;
matt[i][j]=1;
}
if(x[j]=='R')
{
xi=i;
yi=j;
}
if(x[j]=='J')
{
xj=i;
yj=j;
}
}
}
lee(n,m,mat,xi,yi);
lee(n,m,matt,xj,yj);
minim=100*100;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
if((mat[i][j]==matt[i][j]) and (mat[i][j]>1))
{
if(mat[i][j]<minim)
{
minim=mat[i][j];
ir=i;
jr=j;
}
}
}
g<<minim-1<<" "<<ir+1<<" "<<jr+1;
return 0;
}