#include <bits/stdc++.h>
#define oo 1000000
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
char aux[102][102];
int a[102][102],b[102][102],n,m,xr,yr,xj,yj;
int dx[]={-1,-1,-1,0,1,1,1,0};
int dy[]={-1,0,1,1,1,0,-1,-1};
queue<pair<int,int> >q;
void Citire()
{
int i,j;
fin>>n>>m;
i=0;
while(fin.getline(aux[i],100))
i++;
for(i=1;i<=n;i++)
{
for(j=0;j<m;j++)
if(aux[i][j]=='R')
{
xr=i;
yr=j;
}
else if(aux[i][j]=='J')
{
xj=i;
yj=j;
}
}
}
void Initializare()
{
int i,j;
for(i=1;i<=n;i++)
for(j=0;j<m;j++)
a[i][j]=b[i][j]=oo;
}
inline bool Verificare(int i,int j)
{
if(i>=1 && i<=n && j>=0 && j<m)
return true;
return false;
}
void Lee_R()
{
int i,j,x,y,k;
b[xr][yr]=1;
q.push(make_pair(xr,yr));
while(!q.empty())
{
i=q.front().first;
j=q.front().second;
q.pop();
for(k=0;k<8;k++)
{
x=i+dx[k];
y=j+dy[k];
if(Verificare(x,y) && aux[x][y]!='X' && b[x][y]>b[i][j]+1)
{
b[x][y]=b[i][j]+1;
q.push(make_pair(x,y));
}
}
}
}
void Lee_J()
{
int i,j,x,y,k;
a[xj][yj]=1;
q.push(make_pair(xj,yj));
while(!q.empty())
{
i=q.front().first;
j=q.front().second;
q.pop();
for(k=0;k<8;k++)
{
x=i+dx[k];
y=j+dy[k];
if(Verificare(x,y) && aux[x][y]!='X' && a[x][y]>a[i][j]+1)
{
a[x][y]=a[i][j]+1;
q.push(make_pair(x,y));
}
}
}
}
void Rezolva()
{
int i,j,dist,x,y,findValue;
dist=0;findValue=0;
for(i=1;i<=n && findValue==0;i++)
for(j=0;j<m && findValue==0;j++)
if(a[i][j]==b[i][j] && a[i][j]!=oo)
{
findValue=1;
x=i;
y=j+1;
dist=a[i][j];
}
fout<<dist<<" "<<x<<" "<<y<<"\n";
}
int main()
{
Citire();
Initializare();
Lee_J();
Lee_R();
Rezolva();
fin.close();
fout.close();
return 0;
}