#include<fstream.h>
#include<stdio.h>
#include<limits.h>
#define Max 102
char oras[Max][Max];
int R[Max][Max], J[Max][Max], n, m;
int XR, YR, XJ, YJ;
int dx[8]={-1,-1,0,1,1,1,0,-1},
dy[8]={0,1,1,1,0,-1,-1,-1};
void parcurgere(int X, int Y, int d[Max][Max])
{
typedef struct
{
int x, y;
} Coada;
Coada C[Max*Max], Pct;
int p, u, i, j, Xnou, Ynou;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
d[i][j]=-1;
p=u=1;
C[u].x=X;
C[u].y=Y;;
d[X][Y]=1;
while (p<u)
{
Pct=C[p]; p++;
for (i=0; i<8; i++)
{
Xnou=Pct.x+dx[i];
Ynou=Pct.y+dy[i];
if(d[Xnou][Ynou]==-1 && oras[Xnou][Ynou]==' ')
{
u++;
C[u].x=Xnou;
C[u].y=Ynou;
d[Xnou][Ynou]=d[Pct.x][Pct.y]+1;
}
}
}
}
void afis()
{
ofstream out("rj.out");
int i, j, tmin=INT_MAX, X, Y;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (R[i][j]==J[i][j] && tmin>R[i][j])
{
tmin=R[i][j];
X=i; Y=j;
}
out<<X<<" "<<Y<<" "<<tmin<<endl;
out.close();
}
void citire()
{
FILE *f=fopen("rj.in","r");
fscanf(f,"%d%d",&n,&m);
for (int i=0; i<=n+1; i++)
oras[i][0]=oras[i][m+1]='X';
for (int j=0; j<=m+1; j++)
oras[0][j]=oras[n+1][j]='X';
char ch;
flushall();
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{
fscanf(f,"%c",&ch);
if (ch=='R') { XR=i; YR=j; oras[i][j]=' ';}
else if (ch=='J') { XJ=i; YJ=j; oras[i][j]=' ' ;}
else oras[i][j]=ch;
}
}
void main()
{
citire();
parcurgere(XR, YR, R);
parcurgere(XJ, YJ, J);
afis();
}