#include <fstream>
#include <queue>
#include <limits.h>
#include <iostream>
std::ifstream in("rj.in");
std::ofstream out("rj.out");
struct poz{
int x,y;
};
std::queue<poz> q;
int n,m,x1,y1,x2,y2,min=1<<30,x3,y3;
int dx[]= {0, 1, 0, -1, -1, 1, -1, 1};
int dy[]= {1, 0, -1, 0, -1, 1, 1,-1};
int mat[101][101];
int viz[101][101][2];
char c;
bool check(int x,int y){
return (x>=1 && y>=1 && x<=n && y<=m);
}
void lee(int x,int y,int nr){
q.push({x,y});
while(!q.empty()){
poz p=q.front();
q.pop();
for(int i=0;i<8;i++){
poz a={p.x+dx[i],p.y+dy[i]};
if(check(a.x,a.y) && viz[a.x][a.y][nr]>viz[p.x][p.y][nr]+1 && mat[a.x][a.y]!=-1)
viz[a.x][a.y][nr]=viz[p.x][p.y][nr]+1,q.push(a);
}
}
}
int main(){
in>>n>>m>>std::ws;
for(int i=1;i<=n;i++){
std::string s;
std::getline(in,s);
s.insert(s.begin(),' ');
for(int j=1;j<=m;j++){
c=s[j];
if(c=='R')
x1=i,y1=j,viz[i][j][1]=INT_MAX;
if(c=='J')
x2=i,y2=j,viz[i][j][0]=INT_MAX;
if(c=='X')
mat[i][j]=-1,viz[i][j][1]=viz[i][j][0]=INT_MAX;
if(c==' ')
viz[i][j][0]=viz[i][j][1]=INT_MAX;
}
}
lee(x1,y1,0);
lee(x2,y2,1);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(viz[i][j][1]==viz[i][j][0])
if(viz[i][j][1]<min)
min=viz[i][j][1],x3=i,y3=j;
out<<min+1<<" "<<x3<<" "<<y3;
return 0;
}