#include <fstream>
#include <cstring>
#define inf 10000
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
unsigned char Q[1001][2];
const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};
int k,N,M,i,j,xr,yr,xj,yj,px,py,Min,a[200][200],z1,z2,b[200][200];
char c[1001];
bool verif(int x,int y)
{
if(x>N || y>M || x<0 || y<0) return true;
return false;
}
void lee(int v[200][200])
{
int k,i,j,l;
bool ok;
k=0;
ok=true;
while(ok==true)
{
ok=false;
for (i=1; i<=N; i++)
for (j=1; j<=M; j++)
if (v[i][j]==k)
{
for (l=0; l<=7; l++)
if (v[i+dx[l]][j+dy[l]]==inf)
{
v[i+dx[l]][j+dy[l]]=k+1;
ok=true;
}
}
k++;
}
}
void drum(int x, int y)
{
int i,j,k,p1,p2;
bool ok;ok=false;
for(i=1; i<=x; i++)
for(j=1; j<=y; j++)
{
ok=false;
if(verif(i,j)==false)
if(a[i][j]==b[i][j] && a[i][j]!=-1 && a[i][j]!=inf) {p1=i;p2=j;k=a[i][j];ok=true;}
if(k<Min && ok==true) {Min=k;px=p1;py=p2;}
}
}
int main()
{
Min=9999;
f>>N>>M;
f.get();
for(i=1; i<=N; i++)
{
f.getline(c,1000);
k=strlen(c);
for(j=0; j<k+1; j++)
{
if(c[j]=='X') {a[i][j+1]=-1;b[i][j+1]=-1;}
else {a[i][j+1]=inf;b[i][j+1]=inf;}
if(c[j]=='R') {xr=i;yr=j+1;a[i][j+1]=0;}
if(c[j]=='J') {xj=i;yj=j+1;b[i][j+1]=0;}
}
}
lee(a);
lee(b);
drum(N,M);
g<<Min+1<<' '<<px<<' '<<py;
return 0;
}