/*#include <iostream>
#include<fstream>
using namespace std;
int n,mR[100][100],mJ[100][100],m, xr,yr,xj,yj,x[10000],y[10000];
const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};
int bune(int ii,int jj)
{
return((ii>=0)&&(ii<n)&&(jj>=0)&&(jj<m));
}
void leec(int mat[100][100], int first, int last)
{
int ii,jj,k,pas;
while(first<=last)
{
for(k=0;k<8;k++)
{
ii=x[first]+dx[k];
jj=y[first]+dy[k];
pas=mat[x[first]][y[first]];
if(bune(ii,jj)==1)
if((mat[ii][jj]==0)||(mat[ii][jj]>pas+1))
{
pas=pas+1;
mat[ii][jj]=pas;
last=last+1;
x[last]=ii;
y[last]=jj;
}
}
first=first+1;
}
}
int main()
{
ifstream in("rj.in");
char sir[101];
in>>n>>m;
in.get();
int i,j,first,last,xf,yf,minim;
for(i=0;i<n;i++)
{
in.getline (sir,101,'\n');
for(j=0;j<m;j++)
{
if(sir[j]=='R'){mR[i][j]=1; xr=i;yr=j;}
if(sir[j]=='J'){mJ[i][j]=1; xj=i; yj=j;}
if(sir[j]=='X'){mR[i][j]=1; mJ[i][j]=1;}
}
}
in.close();
first=0; last=0; x[0]=xr; y[0]=yr; leec(mR,first,last);
first=0; last=0; x[0]=xj; y[0]=yj; leec(mJ,first,last);
minim=100*100;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(mR[i][j]==mJ[i][j])
if(mR[i][j]>1)
if(mR[i][j]<minim)
{
minim=mR[i][j];
xf=i;
yf=j;
}
ofstream out("rj.out");
out<<minim<<" "<<xf+1<<" "<<yf+1;
}
*/
#include <fstream>
using namespace std;
ofstream out("rj.out");
const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};
int n,m,xr,yr,xj,yj,mR[100][100],mJ[100][100];
int x[10000], y[10000];
int first, last, pas;
void citire()
{
int i,j;
char sir[101];
ifstream in("rj.in");
in>>n>>m;
in.get();
for(i=0;i<n;i++)
{
in.getline(sir,101,'\n');
for(j=0;j<m;j++)
{
if(sir[j]=='R'){ xr=i; yr=j; mR[i][j]=1;}
if(sir[j]=='J'){ xj=i; yj=j; mJ[i][j]=1;}
if(sir[j]=='X'){ mR[i][j]=1; mJ[i][j]=1;}
}
}
in.close();
}
int bune(int ii,int jj)
{
return((ii>=0)&&(ii<n)&&(jj>=0)&&(jj<m));
}
void leecR()
{
int ii,jj,k,pas;
while(first<=last)
{
for(k=0;k<8;k++)
{
ii=x[first]+dx[k];
jj=y[first]+dy[k];
if(bune(ii,jj))
{
pas=mR[x[first]][y[first]];
if( (mR[ii][jj]==0) || (mR[ii][jj]>pas+1) )
{
pas=pas+1;
mR[ii][jj]=pas;
last++;
x[last]=ii;
y[last]=jj;
}
}
}
first++;
}
}
void leecJ()
{
int ii,jj,k;
while(first<=last)
{
for(k=0;k<8;k++)
{
ii=x[first]+dx[k];
jj=y[first]+dy[k];
if(bune(ii,jj))
{
pas=mJ[x[first]][y[first]];
if( (mJ[ii][jj]==0) ||(mJ[ii][jj]>pas+1) )
{
pas=pas+1;
mJ[ii][jj]=pas;
last++;
x[last]=ii;
y[last]=jj;
}
}
}
first++;
}
}
int main()
{
int i,j,min,xf,yf;
citire();
x[0]=xr;
y[0]=yr;
first=0;
last=0;
leecR();
x[0]=xj;
y[0]=yj;
first=0;
last=0;
leecJ();
/*
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(mat[i][j]>max) { max=mat[i][j]; xretinut=i; yretinut=j; }
gasit=1;
for(i=0;i<n&&gasit;i++)
for(j=0;j<m&&gasit;j++)
if(mat[i][j]==min){gasit=0; xretinut=i; yretinut=j;}
*/
min=100*100;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if (mR[i][j]>1)
if(mR[i][j]==mJ[i][j])
if(mR[i][j]<min)
{
min=mR[i][j];
xf=i;
yf=j;
}
/*
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
out<<mJ[i][j]<<" ";
out<<endl;
}
*/
out<<min<<" "<<xf+1<<" "<<yf+1;
out.close();
return 0;
}