#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
queue<pair<int, int> >Q;
const int vi[8] = {-1, -1, -1, 0, 1, 1, 1, 0}, vj[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
int n, m;
int Rsi, Rsj, Jsi, Jsj;
int R[260][260], J[260][260];
FILE *f = fopen("rj.in", "r");
void lee(int a[260][260], int si, int sj)
{
a[si][sj] = 1;
Q.push(make_pair(si, sj));
int i, j;
while(!Q.empty())
{
i=Q.front().first;
j=Q.front().second;
Q.pop();
for(int v=0; v<8; v++)
{
int iv=vi[v]+i;
int jv=vj[v]+j;
if(a[iv][jv] == 0)
{
a[iv][jv]=a[i][j]+1;
Q.push({iv, jv});
}
}
}
}
void rez()
{
for(int i=0; i<=n+1; i++)
{
R[i][0]=-1;
J[i][0]=-1;
R[i][m+1]=-1;
J[i][m+1]=-1;
}
for(int i=0; i<=m+1; i++)
{
R[0][i]=-1;
J[0][i]=-1;
R[n+1][i]=-1;
J[n+1][i]=-1;
}
char s[305], c;
for(int i=1; i<=n; i++)
{
fgets(s, 300, f);
for(int j=0; j<m; j++)
{
if(s[j] == 'X')
{
R[i][j+1]=-1;
J[i][j+1]=-1;
}
else if(s[j] == 'R')
{
Rsi=i;
Rsj=j+1;
}
else if(s[j] == 'J')
{
Jsi=i;
Jsj=j+1;
}
}
}
lee(R, Rsi, Rsj);
lee(J, Jsi, Jsj);
int pozi, pozj, minim = 1000000;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(R[i][j]>0 && R[i][j]==J[i][j] && minim>R[i][j])
{
minim=R[i][j];
pozi=i;
pozj=j;
}
}
}
printf("%d %d %d", minim, pozi, pozj);
}
int main()
{
freopen("rj.out", "w", stdout);
fscanf(f, "%d %d\n", &n, &m);
rez();
return 0;
}