#include <iostream>
#include <fstream>
#include <cstdio>
#include <queue>
#define VM 102
#define x first
#define y second
using namespace std;
int rm[VM][VM], jm[VM][VM];
int n, m, x1, y1, x2, y2;
int TimpMinim = 10000000, Linie, Coloana;
char poz;
int dx[]={-1,-1,-1,0,1,1,1,0};
int dy[]={-1,0,1,1,1,0,-1,-1};
bool EInMatrice(int x, int y)
{
return (x >= 1 && x <= n && y >= 1 && y <= m);
}
void Citire(){
freopen("rj.in","rt",stdin);
freopen("rj.out","wt",stdout);
cin>>n;
cin>>m;
scanf("%c",&poz);
for(int i = 1 ; i <= n ; ++i, scanf("%c",&poz))
for(int j = 1 ; j <= m ; ++j){
scanf("%c",&poz);
if(poz == 'X')
rm[i][j]=jm[i][j]=-1;
if(poz == 'R'){
x1=i;
y1=j;
}
if(poz == 'J'){
x2=i;
y2=j;
}
}
}
void ParcugereMatrice(int x, int y, int matrice[][VM]){
queue<pair<int,int> > c;
c.push(make_pair(x,y));
matrice[x][y]=1;
while(!c.empty()){
pair<int,int> auxiliara = c.front();
c.pop();
for(int i = 0 ; i < 8 ; ++i){
int dl = auxiliara.x + dx[i];
int dc = auxiliara.y + dy[i];
if(EInMatrice(dl , dc) && matrice[dl][dc] == 0){
matrice[dl][dc] = matrice[auxiliara.x][auxiliara.y]+1;
c.push(make_pair(dl,dc));
}
}
}
}
int i,j;
bool IntalnireTMIN(){
if(rm[i][j] == jm[i][j] && rm[i][j] > 0 && rm[i][j] < TimpMinim)
return true;
return false;
}
void DrumParcurs(){
for(i = 1 ; i <= n ; ++i)
for(j = 1 ; j <= m ; ++j)
if(rm[i][j] == jm[i][j] && rm[i][j] > 0 && rm[i][j] < TimpMinim){
///if(IntalnireTMIN){
TimpMinim = rm[i][j];
Linie = i;
Coloana = j;
}
}
int main()
{
Citire();
ParcugereMatrice(x1 , y1 , rm);
ParcugereMatrice(x2 , y2 , jm);
DrumParcurs();
cout<<TimpMinim<<" "<<Linie<<" "<<Coloana;
return 0;
}