#include <stdio.h>
#include <stdlib.h>
char mat[102][102], dirx[8]={-1, -1, 0, 1, 1, 1, 0, -1}, diry[8]={0, 1, 1, 1, 0, -1, -1, -1};
int dist[102][102], dis[102][102];
int min=10000, xmin, ymin;
void bordare(int n, int m){
int i;
for(i=0;i<n+2;i++){
mat[i][0]='X';
mat[i][m+1]='X';
}
for(i=1;i<m+1;i++){
mat[0][i]='X';
mat[n+1][i]='X';
}
}
void drum1(int x, int y, int nr){
int i;
dist[x][y]=nr;
for(i=0;i<8;i++)
if(mat[x+dirx[i]][y+diry[i]]==' ' && dist[x+dirx[i]][y+diry[i]]>nr+1)
drum1(x+dirx[i], y+diry[i], nr+1);
}
void drum2(int x, int y, int nr){
int i;
dis[x][y]=nr;
if(dist[x][y]==nr){
if(min>nr){
min=nr;
xmin=x;
ymin=y;
}
//printf("\tDA! -> %d, %d (%d)\n", x, y, nr);
}
else
for(i=0;i<8;i++)
if(mat[x+dirx[i]][y+diry[i]]==' ' && dis[x+dirx[i]][y+diry[i]]>nr+1)
drum2(x+dirx[i], y+diry[i], nr+1);
}
int main(){
FILE *fin, *fout;
int n, m, i, j, xr, yr, xj, yj;
fin=fopen("rj.in", "r");
fout=fopen("rj.out", "w");
fscanf(fin, "%d%d", &n, &m);
fgetc(fin);
bordare(n, m);
for(i=1;i<n+1;i++){
for(j=1;j<m+1;j++){
mat[i][j]=fgetc(fin);
if(mat[i][j]=='R'){
xr=i;
yr=j;
}
if(mat[i][j]=='J'){
xj=i;
yj=j;
}
}
fgetc(fin);
}
for(i=0;i<n+2;i++)
for(j=0;j<m+2;j++)
dist[i][j]=10000;
for(i=0;i<n+2;i++)
for(j=0;j<m+2;j++)
dis[i][j]=10000;
drum1(xr, yr, 1);
drum2(xj, yj, 1);
//printf("\n");
/*for(i=1;i<n+1;i++){
for(j=1;j<m+1;j++){
printf("%6d ", dis[i][j]);
if(dist[0][i][j]==dist[1][i][j])
if(min>dist[0][i][j]){
min=dist[0][i][j];
xmin=i;
ymin=j;
}
}
printf("\n");
}*/
fprintf(fout, "%d %d %d", min, xmin, ymin);
fclose(fin);
fclose(fout);
return 0;
}