#include <fstream>
#include <deque>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int l[] = {0, 1, 0, -1, -1, 1, -1, 1}, c[] = {1, 0, -1, 0, -1, 1, 1, -1};
int R[101][101], J[101][101];
int n, m, x1, y1, x2, y2, mn = 2147483647, xf, yf;
deque <pair <int, int>> q;
void citire()
{
f >> n >> m, f.get();
int i, j;
char sir[106];
for(i = 1;i <= n;i++)
{
f.getline(sir, sizeof(sir));
for(j = 1;j <= m;j++)
{
if(sir[j - 1] == 'R') x1 = i, y1 = j;
if(sir[j - 1] == 'J') x2 = i, y2 = j;
if(sir[j - 1] == 'X') R[i][j] = J[i][j] = -1;
}
}
}
bool ok(int i, int j)
{
if(i < 1 || i > n || j < 1 || j > m) return 0;
return 1;
}
void lee(int x, int y, int a[101][101])
{
q.push_back({x, y});
a[x][y] = 1;
while(!q.empty())
{
int i = q.front().first, j = q.front().second;
q.pop_front();
for(int d = 0;d < 8;d++)
{
int ii = i + l[d], jj = j + c[d];
if(ok(ii, jj) && !a[ii][jj])
{
a[ii][jj] = a[i][j] + 1;
q.push_back({ii, jj});
}
}
}
}
void rezolvare()
{
lee(x1, y1, R), lee(x2, y2, J);
int i, j;
for(i = 1;i <= n;i++)
for(j = 1;j <= m;j++)
{
if(R[i][j] > 0 && J[i][j] > 0 && R[i][j] == J[i][j])
{
if(R[i][j] < mn) {mn = R[i][j];xf = i, yf = j;}
}
}
g << mn << " " << xf << " " << yf;
}
int main()
{
citire();
rezolvare();
}