#include <iostream>
#include <fstream>
#include <climits>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int n, m, i, j, i1, j1, i2, j2, p, u, Min, soli, solj;
bool a[105][105];
int romeo[105][105], julieta[105][105];
int dx[] = {0, -1, -1, 0, 1, 1, 1, 0, -1},
dy[] = {0, 0, 1, 1, 1, 0, -1, -1, -1}; /// + 0 ///
char x[1001];
struct coditz
{
int l;
int c;
}coada[10201];
bool inside(int linie, int coloana)
{
return (linie >= 1 && linie <= n && coloana >= 1 && coloana <= m);
}
int main()
{
in >> n >> m;
in.get();
for (i = 1; i <= n; i++){
in.getline(x+1,1001);
for (j = 1; j <= m; j++)
{
if (x[j] == 'X') a[i][j] = 1;
else if (x[j] == 'R') i1 = i, j1 = j;
else if (x [j]== 'J') i2 = i, j2 = j;
}
}
p = u = 1;
coada[u] = {i1, j1};
romeo[i1][j1] = 1;
while (p <= u)
{
int l = coada[p].l,
c = coada[p].c;
for (int D = 1; D <= 8; D++)
{
int lv = l + dx[D],
cv = c + dy[D];
if (inside(lv, cv) && a[lv][cv] == 0 && romeo[lv][cv] == 0)
{
coada[++u] = {lv, cv};
romeo[lv][cv] = romeo[l][c] + 1;
}
}
p++;
}
p = u = 1;
coada[u] = {i2, j2};
julieta[i2][j2] = 1;
while (p <= u)
{
int l = coada[p].l,
c = coada[p].c;
for (int D = 1; D <= 8; D++)
{
int lv = l + dx[D],
cv = c + dy[D];
if (inside(lv, cv) && a[lv][cv] == 0 && julieta[lv][cv] == 0)
{
coada[++u] = {lv, cv};
julieta[lv][cv] = julieta[l][c] + 1;
}
}
p++;
}
Min = INT_MAX;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
{
if (romeo[i][j] == julieta[i][j] && romeo[i][j] > 0 && romeo[i][j] < Min)
{
Min = romeo[i][j];
soli = i;
solj = j;
}
}
out << Min << ' ' << soli << ' ' << solj;
return 0;
}