#include <fstream>
#include <string>
#include <queue>
#define NMAX 101
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
char c;
int n, m, xr, yr, xj, yj;
short di[]={-1, -1, -1, 0, 1, 1, 1, 0}, dj[]={-1, 0, 1, 1, 1, 0, -1, -1};
int ro[NMAX+1][NMAX+1], ju[NMAX+1][NMAX+1];
void citire()
{
int i, j;
fin>>n>>m;
string line;
getline(fin, line);
for(i=1; i<=n; i++)
{
getline(fin, line);
for(j=0; j<m; j++)
{
if(line[j]=='X')
{
ro[i][j+1]=-1;
ju[i][j+1]=-1;
}
else if(line[j]=='R')
{
xr=j+1;
yr=i;
}
else if(line[j]=='J')
{
xj=j+1;
yj=i;
}
else
{
ro[i][j+1] = 0;
ju[i][j+1] = 0;
}
}
}
}
bool inside(int y, int x)
{
return y>=1&&y<=n&&x>=1&&x<=m;
}
void Lee(int v[][NMAX+1], int y1, int x1)
{
int i, j, iv, jv;
queue<pair<int, int> > q;
q.push({y1, x1});
v[y1][x1] = 1;
while(!q.empty())
{
i=q.front().first;
j=q.front().second;
for(int k=0; k<8; k++)
{
iv=i+di[k];
jv=j+dj[k];
if(inside(iv, jv) && v[iv][jv]==0)
{
v[iv][jv]=v[i][j]+1;
q.push({iv, jv});
}
}
q.pop();
}
}
int main()
{
int i, j;
citire();
Lee(ro, yr, xr);
Lee(ju, yj, xj);
int minv = n*m, mini = NMAX+1, minj = NMAX+1;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
if(ro[i][j]==ju[i][j] && ro[i][j]!=-1 && ro[i][j]!=0)
{
if(ro[i][j]<minv)
{
minv=ro[i][j];
mini=i;
minj=j;
}
}
fout<<minv<<' '<<mini<<' '<<minj;
return 0;
}