#include <stdio.h>
#define MAX 102
int n, m, x1, y1, x2, y2, x0, y0, dist, distMin = MAX*MAX;
int r[MAX][MAX], j[MAX][MAX];
struct {
int x, y;
} c[MAX*MAX], ultim, actual;
int dlin[8] = { 0, 1, 0, -1, -1, 1, 1, -1 };
int dcol[8] = { 1, 0, -1, 0, 1, 1, -1, -1 };
void citire();
void bordare();
void lee(int v[][102], int x0, int y0);
int main() {
citire();
bordare();
for (int i = 0; i <= n + 1; i++) {
for (int k = 0; k <= m + 1; k++) {
if (r[i][k] == -1)
putchar('X');
else
putchar(' ');
}
putchar('\n');
}
lee(r, x1, y1);
lee(j, x2, y2);
for (int i = 1; i <= n; i++) {
for (int k = 1; k <= m; k++) {
if (r[i][k] == j[i][k] && r[i][k] > 0 && r[i][k] < distMin) {
x0 = i;
y0 = k;
dist = r[i][k];
distMin = dist;
}
}
}
FILE *fout = fopen("rj.out", "w");
fprintf(fout, "%d %d %d\n", dist, x0, y0);
fclose(fout);
return 0;
}
void lee(int v[102][102], int x0, int y0) {
int inc, sf, i;
v[x0][y0] = 1;
c[0].x = x0;
c[0].y = y0;
inc = sf = 0;
while (inc <= sf) {
ultim = c[inc];
inc++;
for (i = 0; i < 8; i++) {
actual.x = ultim.x + dlin[i];
actual.y = ultim.y + dcol[i];
if (v[actual.x][actual.y] == 0) {
v[actual.x][actual.y] = v[ultim.x][ultim.y] + 1;
c[++sf] = actual;
}
}
}
}
void citire() {
int i, k, x, y;
char c;
FILE *fin = fopen("rj.in", "r");
fscanf(fin, "%d %d\n", &n, &m);
for (i = 1; i <= n; i++) {
for (k = 1; k <= m; k++) {
c = fgetc(fin);
if (c == 'X')
r[i][k] = j[i][k] = -1;
else if (c == ' ')
r[i][k] = j[i][k] = 0;
else if (c == 'R') {
x1 = i;
y1 = k;
}
else if (c == 'J') {
x2 = i;
y2 = k;
}
}
fgetc(fin);
}
fclose(fin);
}
void bordare() {
int i;
for (i = 0; i <= m + 1; i++)
r[0][i] = r[n + 1][i] = j[0][i] = j[n + 1][i] = -1;
for (i = 0; i <= n + 1; i++)
r[i][0] = r[i][m + 1] = j[i][0] = j[i][m + 1] = -1;
}