#include <stdio.h>
#include <limits.h>
#include <string.h>
#include <stdlib.h>
#include <fstream.h>
#define DIM 101
FILE *f=fopen("rj.in","r");
ofstream g("rj.out");
int N,M;
char A[DIM][DIM],B[DIM][DIM];
int R[DIM][DIM],J[DIM][DIM];
int di[8]={-1,1,0,0,-1,1,1,-1};
int dj[8]={0,0,1,-1,-1,1,-1,1};
struct deplasare{
int i;
int j;
};
deplasare C[DIM*DIM];
void coada(char x,char y,int i,int j,char A[DIM][DIM],int R[DIM][DIM]){
int p=1,u=1;
C[p].i=i;
C[p].j=j;
A[i][j]=y;
while(p<=u){
for(register int d=0;d<=7;d++){
int iv=C[p].i+di[d];
int jv=C[p].j+dj[d];
if(A[iv][jv]==x){
A[iv][jv]=y;
C[++u].i=iv;
C[u].j=jv;
R[iv][jv]=R[C[p].i][C[p].j]+1;
}
}
p++;
}
}
int main(void){
register int i,j;
fscanf(f,"%d %d\n",&N,&M);
for(i=1;i<=N;i++){
fgets(A[i]+1,10001,f);
for(j=strlen(A[i]+1)-1;j<=M;j++){
if(A[i][j]!='X' && A[i][j]!='R' && A[i][j]!='J')
A[i][j]=' ';
}
A[i][M+1]=0;
strcpy(B[i]+1,A[i]+1);
}
for(i=1;i<=N;i++){
for(j=1;j<=M;j++){
if(A[i][j]=='R')
coada(' ','.',i,j,A,R);
if(B[i][j]=='J')
coada(' ','.',i,j,B,J);
}
}
int cordi,cordj;
int min=INT_MAX;
for(i=1;i<=N;i++){
for(j=1;j<=M;j++){
if(R[i][j]>0 && J[i][j]==R[i][j] && R[i][j]<min)
min=R[i][j],cordi=i,cordj=j;
}
}
g<<min+1<<" "<<cordi<<" "<<cordj;
fclose(f);
g.close();
return 0;
}