#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
const int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1};
const int dy[] = {0, 1, 1, 1, 0, -1, -1, -1};
#define Nmax 101
void citire(int &n, int &m, int R[][Nmax], int J[][Nmax], int &lr, int &cr, int &lj, int &cj)
{
int i, j;
char linie[Nmax];
ifstream f("rj.in");
f >> n >> m;
f.get();
for(i = 1; i <= n; i++)
{
f.getline(linie, Nmax, '\n');
for(j = 0; j < m; j++)
{
if(linie[j] == 'R')
{
lr = i;
cr = j + 1;
}
if(linie[j] == 'J')
{
lj = i;
cj = j + 1;
}
if(linie[j] == '#')
{
R[i][j + 1] = 0;
J[i][j + 1] = 0;
}
if(linie[j] == 'X')
{
R[i][j + 1] = -1;
J[i][j + 1] = -1;
}
}
}
f.close();
}
int bune(int ii, int jj, int n, int m)
{
return((ii >= 1 && ii <= n) && (jj >= 1 && jj <= m));
}
void rec(int n, int m, int R[][Nmax], int i, int j, int pas)
{
int ii, jj, k;
for(k = 0; k < 8; k++)
{
ii = i + dx[k];
jj = j + dy[k];
if(bune(ii, jj, n, m))
if(R[ii][jj] == 0 || R[ii][jj] > pas)
{
R[ii][jj] = pas;
rec(n, m, R, ii, jj, pas + 1);
}
}
}
void min_afis(int n, int m, int R[][Nmax], int J[][Nmax])
{
int i, j, minn, ii, jj;
minn = 10001;
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++)
if(R[i][j] == J[i][j])
if(R[i][j] > 0)
if(R[i][j] < minn)
{
minn = R[i][j];
ii = i;
jj = j;
}
ofstream g("rj.out");
g << minn << " " << ii << " " << jj;
g.close();
}
int main()
{
int R[Nmax][Nmax], J[Nmax][Nmax], n, m, lr, cr, lj, cj;
citire(n, m, R, J, lr, cr, lj, cj);
R[lr][cr] = 1; R[lj][cj] = 0;
rec(n, m, R, lr, cr, 2);
J[lj][cj] = 1; J[lr][cr] = 0;
rec(n, m, J, lj, cj, 2);
min_afis(n, m, R, J);
return 0;
}