#include <stdio.h>
#define Nmax 105
#define InFile "rj.in"
#define OutFile "rj.out"
int n, m, pas, dl[]={-1, -1, 0, 1, 1, 1, 0, -1}, dc[]={0 , 1, 1, 1, 0, -1, -1, -1};
int Rom[Nmax][Nmax], Jul[Nmax][Nmax];
struct Pct {int x, y;} intal, romeo, julieta;
void citire();
void bordare (int a[Nmax][Nmax]);
void lee_jul();
void lee_rom();
void determinare();
void afisare();
int main()
{
citire();
bordare (Jul);
bordare (Rom);
lee_jul();
lee_rom();
determinare();
afisare();
return 0;
}
void citire()
{
int i, j;
char c;
FILE *fin=fopen (InFile, "r");
fscanf (fin, "%d %d", &n, &m);
for (i=1; i<=n ;i++)
{
for (j=1; j<=m; j++)
{
fscanf (fin, "%c", &c);
if (c=='R') {romeo.x=i; romeo.y=j;}
if (c=='J') {julieta.x=i; julieta.y=j;}
if (c=='X') {Rom[i][j]=-1; Jul[i][j]=-1;}
}
fscanf (fin , "\n");
}
}
void bordare (int a[Nmax][Nmax])
{
int i;
for (i=0; i<=n+1; i++)
a[0][i]=a[m+1][i]=-1;
for (i=0; i<=m+1; i++)
a[i][0]=a[i][n+1]=-1;
}
void lee_jul()
{
Pct aj, ajut, C[Nmax*Nmax];
int inc=0, sf=0, k;
C[sf]=julieta; Jul[julieta.x][julieta.y]=1;
while (inc<=sf)
{
aj=C[inc++];
for (k=0; k<8; k++)
{
ajut.x=aj.x+dl[k]; ajut.y=aj.y+dc[k];
if (!Jul[ajut.x][ajut.y])
{
Jul[ajut.x][ajut.y]=Jul[aj.x][aj.y]+1;
C[++sf]=ajut;
}
}
}
}
void lee_rom()
{
Pct aj, ajut, C[Nmax*Nmax];
int inc=0, sf=0, k;
C[sf]=romeo; Rom[romeo.x][romeo.y]=1;
while (inc<=sf)
{
aj=C[inc++];
for (k=0; k<8; k++)
{
ajut.x=aj.x+dl[k]; ajut.y=aj.y+dc[k];
if (!Rom[ajut.x][ajut.y])
{
Rom[ajut.x][ajut.y]=Rom[aj.x][aj.y]+1;
C[++sf]=ajut;
}
}
}
}
void determinare()
{
int i, j;
pas=1002;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (Jul[i][j]==Rom[i][j]&&Rom[i][j]<pas&&Rom[i][j]>0)
{
pas=Rom[i][j];
intal.x=i; intal.y=j;
}
}
void afisare()
{
FILE *fout=fopen (OutFile, "w");
fprintf (fout, "%d %d %d\n", pas, intal.x, intal.y);
fclose (fout);
}