const dl:array [1..8] of shortint=(0,1,1,1,0,-1,-1,-1);
dc:array [1..8] of shortint=(1,1,0,-1,-1,-1,0,1);
type coord=record
l,c:byte
end;
type matrice=array [0..101,0..101] of integer;
var a,b:matrice;
n,m,l01,c01,l02,c02:integer;
procedure citire;
var x:char;
i,j:integer;
f1,f2:text;
begin
assign (f1,'rj.in'); reset(f1);
readln (f1,n,m);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(f1,x);
if x='X' then
begin
a[i,j]:=-1;
b[i,j]:=-1;
end
else if x='R' then
begin
a[i,j]:=1;
l01:=i;
c01:=j;
end
else if x='J' then
begin
b[i,j]:=1;
l02:=i;
c02:=j;
end;
end;
readln(f1);
end;
close(f1);
end;
procedure bordurare(var a:matrice;n,m:integer);
var i:integer;
begin
for i:=0 to m+1 do
a[0,i]:=-1;
for i:=0 to n+1 do
a[i,0]:=-1;
for i:=0 to m+1 do
a[n+1,i]:=-1;
for i:=0 to n+1 do
a[i,m+1]:=-1;
end;
procedure lee(var a:matrice; l0,c0,p,q:integer);
var x:array[1..30000] of coord;
i,s,k,lc,cc,lv,cv:integer;
acasa:boolean;
begin
i:=1; s:=1; x[1].l:=l0; x[1].c:=c0; acasa:=false;
while (i<=s) and not(acasa) do
begin
lc:=x[i].l;
cc:=x[i].c;
k:=1;
while (k<=8) and not(acasa) do
begin
lv:=lc+dl[k];
cv:=cc+dc[k];
if a[lv,cv]=0 then
begin
a[lv,cv]:=a[lc,cc]+1;
s:=s+1;
x[s].l:=lv;
x[s].c:=cv;
end;
if (lv=p) and (cv=q) then
acasa:=true
else k:=k+1;
end;
i:=i+1;
end;
end;
procedure afisare(a,b:matrice;n,m:integer);
var i,j,tmin,f,g:integer;
f2:text;
begin
assign (f2,'rj.out'); rewrite(f2);
tmin:=maxint;
for i:=1 to n do
for j:=1 to m do
if (a[i,j]>0) and (a[i,j]=b[i,j]) and (a[i,j]<tmin) then
begin
tmin:=a[i,j];
f:=i;
g:=j;
end;
write(f2,tmin,' ',f,' ',g);
close(f2);
end;
begin
citire;
bordurare(a,n,m);
bordurare(b,n,m);
lee(a,l01,c01,l02,c02);
lee(b,l02,c02,l01,c01);
afisare(a,b,n,m);
end.