#include <fstream>
using namespace std;
ifstream in ("rj.in");
ofstream out ("rj.out");
int r[101][101],j[101][101];
bool obs[101][101];
int dlin[8]={-1 ,-1 , 0 , 1 , 1 , 1 , 0 , -1 },
dcol[8]={ 0 , 1 , 1 , 1 , 0 , -1 , -1 , -1 };
struct coada
{
int x,y;
}temp,nou,ro,ju,a[10001];
bool capatr(int i,int k,int n,int m)
{
return r[i][k]==0&&obs[i][k]==0&&i>0&&k>0&&k<=m&&i<=n;
}
bool capatj(int i,int k,int n,int m)
{
return j[i][k]==0&&obs[i][k]==0&&i>0&&k>0&&k<=m&&i<=n;
}
void leer(int n,int m)
{
int pr=0,ul=0,k;
r[ro.x][ro.y]=1;
a[0].x=ro.x;
a[0].y=ro.y;
while(pr<=ul)
{
temp=a[pr++];
for(k=0;k<8;k++)
{
nou.x=temp.x+dlin[k];
nou.y=temp.y+dcol[k];
if(capatr(nou.x,nou.y,n,m))
{
r[nou.x][nou.y]=r[temp.x][temp.y]+1;
a[++ul]=nou;
}
}
}
}
void leej(int n,int m)
{
int pr=0,ul=0,k;
j[ju.x][ju.y]=1;
a[0].x=ju.x;
a[0].y=ju.y;
while(pr<=ul)
{
temp=a[pr++];
for(k=0;k<8;k++)
{
nou.x=temp.x+dlin[k];
nou.y=temp.y+dcol[k];
if(capatj(nou.x,nou.y,n,m))
{
j[nou.x][nou.y]=j[temp.x][temp.y]+1;
a[++ul]=nou;
}
}
}
}
int main()
{
int n,m,i,k,a,b,minim=1000000;
char c;
in>>n>>m;
in.get(c);
for(i=1;i<=n;i++)
{
for(k=1;k<=m;k++)
{
in.get(c);
if(c=='R')
{
ro.x=i;
ro.y=k;
}
else
{
if(c=='J')
{
ju.x=i;
ju.y=k;
}
else
{
if(c=='X')
obs[i][k]=1;
}
}
}
if(c!='\n')
in.get(c);
}
leer(n,m);
leej(n,m);
/*for(i=1;i<=n;i++)
{
for(k=1;k<=m;k++)
{
out<<obs[i][k]<<" ";
}
out<<'\n';
}
out<<'\n';*/
for(i=1;i<=n;i++)
{
for(k=1;k<=m;k++)
{
if(obs[i][k]==0&&r[i][k]==j[i][k]&&r[i][k]<=minim&&r[i][k]!=0)
{
a=i;
b=k;
minim=r[i][k];
}
}
}
out<<minim<<" "<<a<<" "<<b;
return 0;
}