#include <bits/stdc++.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
const int NMAX = 100;
int r[NMAX + 5][NMAX + 5], j[NMAX + 5][NMAX + 5];
int n, m, dl[8] = {-1, -1, -1, 0, 1, 1, 1, 0}, dc[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
queue< pair<int, int> > qr, qj;
bool valid(int i, int j) { return i && j && i <= n && j <= m; }
void read(int l) {
string s;
getline(fin, s);
int c = 1;
for(string :: iterator it = s.begin(); it < s.end(); it++, c++) {
if(*it == 'R')
qr.push({l, c}), r[l][c] = 1;
if(*it == 'J')
qj.push({l, c}), j[l][c] = 1;
if(*it == 'X')
r[l][c] = j[l][c] = -1;
}
while(c <= m) r[l][c] = 0, j[l][c] = 0, c++;
}
int main()
{
fin >> n >> m;
fin.get();
for(int l = 1; l <= n; l++) read(l);
fin.close();
while(!qr.empty()) {
for(int i = 0; i < 8; i++) {
int l = qr.front().first, c = qr.front().second;
int x = l + dl[i], y = c + dc[i];
if(!r[x][y] && valid(x, y)) {
qr.push({x, y});
r[x][y] = r[l][c] + 1;
}
}
qr.pop();
}
while(!qj.empty()) {
for(int i = 0; i < 8; i++) {
int l = qj.front().first, c = qj.front().second;
int x = l + dl[i], y = c + dc[i];
if(!j[x][y] && valid(x, y)) {
qj.push({x, y});
j[x][y] = j[l][c] + 1;
}
}
qj.pop();
}
int mini = INT_MAX, li, ci;
for(int l = 1; l <= n; l++) {
for(int c = 1; c <= m; c++) {
if(r[l][c] == j[l][c] && r[l][c] != -1 && r[l][c] != 0 && r[l][c] < mini)
mini = r[l][c], li = l, ci = c;
}
}
fout << mini << " " << li << " " << ci;
fout.close();
return 0;
}