#include <cstdio>
#include <queue>
#include <cstring>
#define MAXN 101
using namespace std;
queue < pair<int, int> > q;
int n, m, seen[MAXN][MAXN], d[2][MAXN][MAXN];
char s[MAXN+1];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
void bfs(int startx, int starty, int nr)
{
int row, col, i, nextX, nextY;
q.push({startx, starty});
seen[startx][starty] = 1;
d[nr][startx][starty] = 1;
while(!q.empty())
{
row = q.front().first;
col = q.front().second;
q.pop();
for(i=0; i<4; ++i)
{
nextX = row + dx[i];
nextY = col + dy[i];
if(nextX > 0 && nextX <= n && nextY > 0 && nextY <= m && seen[nextX][nextY] == 0)
{
d[nr][nextX][nextY] = d[nr][row][col] + 1;
seen[nextX][nextY] = 1;
q.push({nextX, nextY});
}
}
}
}
int main()
{
freopen("rj.in", "r", stdin);
freopen("rj.out", "w", stdout);
int i, j, rx, ry, jx, jy, minans = 0x3f3f3f3f, row, col;
scanf("%d%d\n", &n, &m);
for(i=1; i<=n; ++i)
{
gets(s+1);
j = 1;
while(s[j] != 0)
{
if(s[j] == 'X') seen[i][j] = -1;
if(s[j] == 'R') rx = i, ry = j;
if(s[j] == 'J') jx = i, jy = j;
j++;
}
}
bfs(rx, ry, 0);
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
if(seen[i][j] == 1)
seen[i][j] = 0;
bfs(jx, jy, 1);
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
if(d[0][i][j] == d[1][i][j] && d[0][i][j])
if(minans > d[0][i][j])
minans = d[0][i][j], row = i, col = j;
printf("%d %d %d", minans-1, row, col);
return 0;
}