#include<fstream>
using namespace std;
int a[105][105],R[105][105],J[105][105],L,C,xr,yr,xj,yj,tmin;
short dx[] = {-1,-1,-1, 0, 1, 1, 1, 0};
short dy[] = {-1, 0, 1, 1, 1, 0,-1,-1};
struct coord
{
int x,y,dist;
};
coord q[20000];
void Citire()
{
int i,j,n,m;
char s[100];
ifstream fin("rj.in");
fin>>L>>C;
fin.get();
for(i=1; i<=L; i++)
{
fin.getline(s,100);
for(j=0; j<C; j++)
if(s[j]==' ') a[i][j+1] = 0;
else if(s[j]=='X') a[i][j+1] = 1;
else if(s[j]=='R') { xr = i; yr = j+1; }
else { xj = i; yj = j+1; }
}
fin.close();
n = L + 1;
m = C + 1;
for(i=1; i<=L; i++)
for(j=1; j<=C; j++)
R[i][j] = J[i][j] = 1000000;
}
void Bordare()
{
int i;
L++;
C++;
for(i=0; i<=L; i++)
R[i][0] = J[i][0] = R[i][C] = J[i][C] = -1;
for(i=0; i<=C; i++)
R[0][i] = J[0][i] = R[L][i] = J[L][i] = -1;
L--;
C--;
}
void Romeo()
{
int pr,ul,i,j,x,y,k,dist;
pr = ul = 0;
q[ul].x = xr;
q[ul].y = yr;
R[xr][yr] = 0;
while(pr<=ul)
{
i = q[pr].x;
j = q[pr].y;
dist = R[i][j] + 1;
pr++;
for(k=0; k<8; k++)
{
x = i + dx[k];
y = j + dy[k];
if(a[x][y] == 0 && dist < R[x][y])
{
ul++;
q[ul].x = x;
q[ul].y = y;
R[x][y] = dist;
}
}
}
}
void Julieta()
{
int pr,ul,i,j,x,y,k,dist;
pr = ul = 0;
q[ul].x = xj;
q[ul].y = yj;
J[xj][yj] = 0;
while(pr<=ul)
{
i = q[pr].x;
j = q[pr].y;
dist = J[i][j] + 1;
pr++;
for(k=0; k<8; k++)
{
x = i + dx[k];
y = j + dy[k];
if(a[x][y] == 0 && dist < J[x][y])
{
ul++;
q[ul].x = x;
q[ul].y = y;
J[x][y] = dist;
}
}
}
}
void Afisare()
{
int i,j,tmin=1000000;
for(i=1; i<=L; i++)
for(j=1; j<=C; j++)
{
if( R[i][j] == J[i][j] )
if(tmin>R[i][j])
{
tmin = R[i][j];
xr = i;
yr = j;
//folosesc xr si yr sa salvez coordonatele lui tmin
}
}
ofstream fout("rj.out");
tmin++;
fout<<tmin<<" "<<xr<<" "<<yr<<"\n";
fout.close();
}
int main ()
{
Citire();
Bordare();
Romeo();
Julieta();
Afisare();
return 0;
}