// romeo si julieta, infoarena, 24.03.09
#include <stdio.h>
#include <string.h>
#include <values.h>
#define NMAX 102
int romeo[NMAX][NMAX], juliet[NMAX][NMAX], xr, yr, xj, yj, n, m;
int dl[] = {-1, -1, -1, 0, 1, 1, 1, 0};
int dc[] = {-1, 0, 1, 1, 1, 0, -1, -1};
char s[NMAX], ch;
void print(void);
void read(void)
{
freopen("rj.in", "r", stdin);
scanf("%d %d", &n, &m);
scanf("%c", &ch);
for(register int i = 1; i <= n; i++)
{
gets(s);
for(register int k = 0; k < m; k++)
{
if(s[k] == 'X')
romeo[i][k + 1] = juliet[i][k+1] = -1;
else
if(s[k] == 'R')
{
xr = i;
yr = k + 1;
}
else
if(s[k] == 'J')
{
xj = i;
yj = k + 1;
}
}
}
fclose(stdin);
}
void mark(void)
{
for(register int i = 0; i <= n+1; i++)
romeo[i][0] = juliet[i][0] = romeo[i][m+1] = juliet[i][m+1] = -2;
for(register int j = 0; j <= m+1; j++)
romeo[0][i] = juliet[0][i] = romeo[n+1][i] = juliet[n+1][i] = -2;
}
int inside(int x, int y)
{
if(x == 0 || y == 0)
return 0;
if(x == n + 1)
return 0;
if(y == m + 1)
return 0;
return 1;
}
void lee(int a[][NMAX], unsigned int x, unsigned y)
{
int i, j, k, li, ci, sw = 1;
a[x][y] = 1;
while(sw)
for(i = 1; i <= n; i++)
{
sw = 0;
for(j = 1; j <= m; j++)
if( (a[i][j] != -1) && (a[i][j] != 0))
for(k = 0; k < 8; k++)
{
li = i + dl[k];
ci = j + dc[k];
//if(inside(li, ci))
if(a[li][ci] != -2)
if(a[li][ci] > a[i][j] + 1 || a[li][ci] == 0)
{
a[li][ci] = a[i][j] + 1;
sw = 1;
}
}
}
}
void print(void)
{
freopen("rj.out", "w", stdout);
int min , x, y;
min = x = y = MAXINT;
for(register int i = 1; i <= n; i++)
for(register int j = 1; j <= m; j++)
if((romeo[i][j] == juliet[i][j]) && (romeo[i][j] != -1) && (romeo[i][j]))
if(romeo[i][j] < min)
{
min = romeo[i][j];
x = i;
y = j;
}
printf("%d %d %d\n", min, x, y);
fclose(stdout);
}
void solve(void)
{
mark();
lee(romeo, xr, yr);
lee(juliet, xj, yj);
}
int main(void)
{
read();
solve();
print();
return 0;
}