//P3. RJ
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define nmax 50
#define mmax 50
const int di[]={-1,-1,-1,0,0,1,1,1};
const int dj[]={-1,0,1,1,-1,-1,0,1};
char M[nmax][mmax];
int R[nmax][mmax],J[nmax][mmax];
int x[nmax*mmax],y[nmax*mmax];
int Ri,Rj;
int Ji,Jj;
int n,m;
void ReadData(char M[nmax][mmax],int &n,int &m){
fstream in("rj.in",ios::in);
in>>n>>m;
string line;
int i=1,j;
getline(in,line);
while(i<=n){
getline(in,line);
for(int j=0;j<line.size();j++){
M[i][j+1]=line[j];
if(line[j]=='R'){
M[i][j+1] = ' ';
Ri=i;
Rj=j+1;
}else if(line[j]=='J'){
M[i][j+1] = ' ';
Ji=i;
Jj=j+1;
}
}
i++;
}
in.close();
}
void Find_Each_Other(int a[nmax][mmax],int xx,int yy){
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
int e,u;
e=u=0;
x[e]=xx;
y[e]=yy;
a[x[e]][y[e]]=1;
while(e<=u){
int i=x[e],j=y[e++];
for(int k=0;k<8;++k)
if(M[i+di[k]][j+dj[k]] == ' ' && (a[i+di[k]][j+dj[k]]>a[i][j]+1 || a[i+di[k]][j+dj[k]]==0)){
a[i+di[k]][j+dj[k]] = a[i][j]+1;
x[++u] = i+di[k];
y[u] = j+dj[k];
}
}
}
void MP(){
fstream out("rj.out",ios::out);
int min=9999999;
int mini,minj;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(R[i][j] == J[i][j])
if(min > R[i][j] && R[i][j]!=0){
min = R[i][j];
mini = i;
minj = j;
}
out<<min<<" "<<mini<<" "<<minj;
out.close();
}
int main(int argc,char *argv[])
{
ReadData(M,n,m);
Find_Each_Other(R,Ri,Rj);
Find_Each_Other(J,Ji,Jj);
MP();
return 0;
}