#include <bits/stdc++.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n, m, a[101][101], b[101][101], viz[101][101], viz2[101][101];
int px1, px2, py1, py2, rezX, rezY;
int miny = 1<<20;
int dl[8]= {0, -1, -1, -1, 0, 1, 1, 1};
int dc[8]= {1, 1, 0, -1, -1, -1, 0, 1};
bool isOk(int i, int j)
{
return (i>=1 && j>=1 && i<=n && j<=m);
}
void lee(int a[101][101], int x, int y, int viz[101][101])
{
queue < pair<int,int> > coada;
coada.push(make_pair(x, y));
while(!coada.empty())
{
int i = coada.front().first;
int j = coada.front().second;
coada.pop();
viz[i][j] = 1;
for(int d=0; d<8; d++)
{
int ii = i + dl[d];
int jj = j + dc[d];
if(isOk(ii,jj) && !viz[ii][jj] && a[ii][jj]!= -1)
{
a[ii][jj] = a[i][j] + 1;
viz[ii][jj] = 1;
coada.push(make_pair(ii, jj));
}
}
}
}
void citire()
{
char s[101];
fin>>n>>m, fin.get();
for(int i=1; i<=n; i++)
{
fin.getline(s,101);
for(int j=0; j<=m-1; j++)
if(s[j]=='R')
px1=i, py1=j+1, a[i][j+1] = 1;
else if(s[j]=='J')
px2=i, py2=j+1, b[i][j+1] = 1;
else if(s[j]=='X')
a[i][j+1]=b[i][j+1]=-1;
}
}
int main()
{
citire();
lee(a, px1, py1, viz);
lee(b, px2, py2, viz2);
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
if(viz[i][j] && viz2[i][j])
{
if(a[i][j] == b[i][j] && a[i][j] < miny)
{
miny = a[i][j];
rezX = i, rezY = j;
}
}
fout<<miny<<" "<<rezX<<" "<<rezY;
}