#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ofstream fout("rj.out");
int verif(int i,int j,int d[101][101], int n, int m)
{
if(d[i][j]==0 && i>=1 && i<=n && j>=1 && j<=m)
return 1;
return 0;
}
struct pozitie
{
int lin, col;
};
void cautare(int t,int &i,int &j,int d[101][101], int &ok)
{
if(t==1) {
fout << i << ' ' << j;
ok = 0;
return;
}
int ui, uj, k;
int dlin[]= {-1,-1,0,1,1,1,0,-1};
int dcol[]= {0,1,1,1,0,-1,-1,-1};
for (k = 0; k < 8 && ok; k++) {
ui = i + dlin[k];
uj = j + dcol[k];
if (d[ui][uj] == d[i][j] + 1) {
cautare(t-1, ui, uj, d, ok);
}
}
}
int main()
{
ifstream fin("rj.in");
int dlin[]= {-1,-1,0,1,1,1,0,-1};
int dcol[]= {0,1,1,1,0,-1,-1,-1};
int n,m,i,d[101][101]={0},l=0,ci,cj, ui, uj, j, ok = 1, jlin, jcol,t;
pozitie v[1001];
char nr, s[101];
fin>>n>>m;
fin.getline(s, 101);
for(i=1;i<=n;i++) {
fin.getline(s, 101);
for(j=1;j<=m;j++)
{
nr = s[j-1];
if(nr=='R')
{
d[i][j]=1;
v[l].lin=i;
v[l].col=j;
l++;
}
else if(nr=='X')
d[i][j]=-2;
else if (nr == 'J') {
jlin = i;
jcol = j;
}
}
}
for(i=0;i<l && ok;i++)
{
ci=v[i].lin;
cj=v[i].col;
ok = 1;
for (j = 0; j < 8 && ok; j++) {
ui = ci + dlin[j];
uj = cj + dcol[j];
if (verif(ui, uj, d, n, m))
{
v[l].lin = ui;
v[l++].col = uj;
d[ui][uj] = d[ci][cj] + 1;
if (ui == jlin && uj == jcol)
ok = 0;
}
}
}
t=(d[v[l-1].lin][v[l-1].col]+1)/2;
fout << t << ' ';
if (v[0].lin <= jlin && v[0].col < jcol) {
i = v[0].lin;
j = v[0].col;
} else {
i = jlin;
j = jcol;
}
ok = 1;
cautare(t, i, j, d, ok);
fin.close();
fout.close();
return 0;
}