#include <stdio.h>
#include <stdlib.h>
#define NMAX 100
char mat[NMAX+1][NMAX+1];
int queuex[NMAX*NMAX], queuey[NMAX*NMAX], dist1[NMAX][NMAX],dist2[NMAX][NMAX];
int inceputx,inceputy,sfarsitx,sfarsity;
int dlin[8]={-1,-1,0,1,1,1,0,-1};
int dcol[8]={0,1,1,1,0,-1,-1,-1};
void pop(){
inceputx++;
inceputy++;
}
void push(int x,int y){
queuex[sfarsitx]=x;
queuey[sfarsity]=y;
sfarsitx++;
sfarsity++;
}
char empty(){
return(inceputx==sfarsitx);
}
void bordare (int n,int m){
int i,j;
for(j=0;j<=m+1;j++){
mat[0][j]=mat[n+1][j]='X';
}
for(i=0;i<=n+1;i++){
mat[i][0]=mat[i][m+1]='X';
}
}
void lee (int startx, int starty,int dist[NMAX][NMAX]){
push(startx,starty);
int a,b,dir;
while(!empty()){
a=queuex[inceputx];
b=queuey[inceputy];
pop();
for(dir=0;dir<8;dir++){
if(mat[a+dlin[dir]][b+dcol[dir]]!='X'&&dist[a+dlin[dir]][b+dcol[dir]]==0){
push(a+dlin[dir],b+dcol[dir]);
dist[a+dlin[dir]][b+dcol[dir]]=dist[a][b]+1;
}
}
}
}
int main()
{
FILE *fin,*fout;
fin=fopen("rj.in","r");
fout=fopen("rj.out","w");
int n,m,i,j,roml=0,romc=0,jull=0,julc=0,minl=0,minc=0,min;
fscanf(fin,"%d%d\n",&n,&m);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
mat[i][j]=fgetc(fin);
if(mat[i][j]=='R'){
roml=i;
romc=j;
}
else if(mat[i][j]=='J'){
jull=i;
julc=j;
}
}
fgetc(fin);
}
bordare(n,m);
lee(roml,romc,dist1);
lee(jull,julc,dist2);
min=105;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(dist1[i][j]==dist2[i][j]&&dist1[i][j]!=0){
if(dist1[i][j]<min){
min=dist1[i][j];
minl=i;
minc=j;
}
}
}
}
fprintf(fout,"%d %d %d",min+1,minl,minc);
fclose(fin);
fclose(fout);
return 0;
}