#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
queue<pair<int, int>> Q;
const int vi[8] = {-1, -1, -1, 0, 0, 1, 1, 1}, vj[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
int n, m;
int Rsi, Rsj, Jsi, Jsj;
int R[105][105], J[105][105];
void lee(int a[105][105], int si, int sj)
{
a[si][sj] = 1;
Q.push({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[105], c;
for(int i = 1; i<=n; i++)
{
gets(s+1);
for(int j = 1; j<=m; j++)
{
c = s[j];
if(c == 'X')
{
R[i][j] = -1;
J[i][j] = -1;
}
else if(c == 'R')
{
Rsi = i;
Rsj = j;
}
else if(c == 'J')
{
Jsi = i;
Jsj = j;
}
}
scanf("\n");
}
lee(R, Rsi, Rsj);
lee(J, Jsi, Jsj);
int pozi, pozj, dif = 1000000, minim = 1000000;
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=m; j++)
{
printf("%d ", R[i][j]);
}
printf("\n");
}
printf("\n");
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=m; j++)
{
printf("%d ", J[i][j]);
}
printf("\n");
}
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=m; j++)
{
if(R[i][j] != 0 && R[i][j] != -1)
{
if(dif>abs(R[i][j] - J[i][j]))
{
minim = max(R[i][j], J[i][j]);
pozi = i;
pozj = j;
dif = abs(R[i][j] - J[i][j]);
}
else if(dif == abs(R[i][j] - J[i][j]))
{
if(minim > max(R[i][j], J[i][j]))
{
minim = max(R[i][j], J[i][j]);
pozi = i;
pozj = j;
}
}
}
}
}
printf("%d %d %d", minim-1, pozi, pozj);
}
int main()
{
freopen("rj.in", "r", stdin);
freopen("rj.out", "w", stdout);
scanf("%d %d\n", &n, &m);
rez();
return 0;
}