#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
struct pereche{
int x, y;
};
void initDir(pereche d[8])
{
d[0].y = 0; d[0].x = -1;
d[1].y = +1; d[1].x = -1;
d[2].y = +1; d[2].x = 0;
d[3].y = +1; d[3].x = +1;
d[4].y = 0; d[4].x = +1;
d[5].y = -1; d[5].x = +1;
d[6].y = -1; d[6].x = 0;
d[7].y = -1; d[7].x = -1;
}
void showMatrix(int a[100][100], int n, int m)
{
int i, j;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
cout<<endl;
}
void bordare(int a[100][100], int n, int m)
{
int i;
for(i=0; i<=n+1; i++)
a[i][0] = a[i][m+1] = -1;
for(i=0; i<=m+1; i++)
a[0][i] = a[n+1][i] = -1;
}
int main()
{
pereche R[100], J[100], dir[8];
initDir(dir);
int stR = 1, drR = 0, xR, yR, Rmat[100][100];
int stJ = 1, drJ = 0, xJ, yJ, Jmat[100][100];
int n, m, i, j;
char c;
f>>n>>m;
int enter = 0;
for(i=1; i<=n; i++)
{
if(!enter)
f.get();
enter = 0;
for(j=1; j<=n; j++)
{
f.get(c);
if(c == 'R')
{
drR++;
R[drR].x = i;
R[drR].y = j;
Rmat[i][j] = 1;
}
if(c == 'J')
{
drJ++;
J[drJ].x = i;
J[drJ].y = j;
Jmat[i][j] = 1;
}
if(c == 'X')
Rmat[i][j] = Jmat[i][j] = -1;
if(c == '\n')
enter = 1;
}
}
bordare(Rmat, n, m);
bordare(Jmat, n, m);
//showMatrix(Rmat, n, m);
//showMatrix(Jmat, n, m);
while(stR<=drR)
{
for(i=0; i<8; i++)
{
xR = R[stR].x + dir[i].x;
yR = R[stR].y + dir[i].y;
if(Rmat[xR][yR] == 0)
{
drR++;
R[drR].x = xR;
R[drR].y = yR;
Rmat[xR][yR] = Rmat[ R[stR].x ][ R[stR].y ] + 1;
}
}
stR++;
}
//showMatrix(Rmat, n, m);
while(stJ <= drJ)
{
for(i=0; i<8; i++)
{
xJ = J[stJ].x + dir[i].x;
yJ = J[stJ].y + dir[i].y;
if(Jmat[xJ][yJ] == 0)
{
drJ++;
J[drJ].x = xJ;
J[drJ].y = yJ;
Jmat[xJ][yJ] = Jmat[ J[stJ].x ][ J[stJ].y ] + 1;
}
}
stJ++;
}
//showMatrix(Jmat, n, m);
int a, b, mindrum = n*m+1;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
if(Rmat[i][j] != -1 && Rmat[i][j] && Rmat[i][j] == Jmat[i][j] && Rmat[i][j] < mindrum)
{
mindrum = Rmat[i][j];
a = i;
b = j;
}
g<<mindrum<<' '<<a<<' '<<b;
f.close();
g.close();
return 0;
}