#include<fstream>
#include<cstring>
#include<iostream>
using namespace std;
int di[]={-1,0,1,0,1,1,-1,-1}; //initializare pentru avansare
int dj[]={0,1,0,-1,1,-1,1,-1};
int n,i,j,a1[161][161],q[3500][2],nq,pq,k,ni,nj,m;
int a2[161][161],x1,x2,y1,y2;
char c[161][161],s[101];
ifstream f("rj.in");
ofstream g("rj.out");
int ok(int i,int j,int n,int m)
{
if(i>0&&i<=n&&j>0&&j<=m) return 1; //verificam daca am iesit din matrice
return 0;
}
void citire()
{
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{f.getline(s,101);
for(j=0;j<m;j++)
{
if(s[j]=='R')
{
x1=i; y1=j+1;
a1[i][j+1]=0;
c[i][j+1]='R';
}
else if(s[j]=='J')
{
x2=i; y2=j+1;
a2[i][j+1]=0;
c[i][j+1]='J';
}
else if(s[j]=='X')
c[i][j+1]='X';
else c[i][j+1]='*';
}}
}
void rezolva(int a[][161],int x,int y)
{
pq=0;
nq=1;
q[pq][0]=x;
q[pq][1]=y;
while(pq<nq)
{
i=q[pq][0]; //pozitia liniei
j=q[pq][1];
for(k=0;k<8;k++)
{
ni=i+di[k]; //avansarea in matrice
nj=j+dj[k];
if(ok(ni,nj,n,m)&&c[ni][nj]=='*'&&(a[ni][nj]==-1||a[ni][nj]>a[i][j]+1))
{
a[ni][nj]=a[i][j]+1;
q[nq][0]=ni;
q[nq][1]=nj;
nq++;
}
}
pq++;}
}
int main()
{int minim=10000,lin=200,col=200;
memset(a1,-1,sizeof(a1));
memset(a2,-1,sizeof(a2));
citire();
rezolva(a1,x1,y1);
rezolva(a2,x2,y2);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a1[i][j]==a2[i][j] && a1[i][j]>0 && a1[i][j]<=minim)
{
if(a1[i][j]==minim && i<lin) {lin=i; col=j;}
else if(a1[i][j]==minim && i==lin && j<col) {lin=i; col=j;}
else if(minim>a1[i][j])
{minim=a1[i][j]; lin=i; col=j;}
}
g<<minim+1<<" "<<lin<<" "<<col;
}