#include <iostream>
#include <cstdio>
#include <queue>
#include<fstream>
#include <string.h>
using namespace std;
//ifstream fin("rj.in");
FILE *fin=fopen("rj.in", "r");
ofstream fout("rj.out");
int dx[]={0,0,1,1,1,-1,-1,-1};
int dy[]={1,-1,0,1,-1,0,1,-1};
int ro[101][101],ju[101][101],n,m,rx,ry,jx,jy,minx,miny,dmax=200;
char c;
queue < pair <int, int> > coada;
string s;
void citire()
{ int i;unsigned int j;
fscanf(fin,"%d %d", &n, &m);
fscanf(fin,"%c",&c);
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{ fscanf(fin,"%c",&c);
if(c==' ')ro[i][j+1]=ju[i][j+1]=0;
else if(c=='X')ro[i][j+1]=ju[i][j+1]=-1;
else if(c=='R'){ rx=i;
ry=j+1;
}
else if(c=='J'){ jx=i;
jy=j+1;
}
}
fscanf(fin,"%c",&c);
}
/*for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)cout<<ro[i][j];
cout<<endl;
}*/
}
bool ok(int i,int j,int a[101][101])
{
return (a[i][j]==0 && i>=1 && j>=1 && i<=n && j<=m);
}
void lee(int x, int y,int a[101][101])
{
int i,j,i_urm,j_urm;
a[x][y]=1;
coada.push(make_pair(x,y));
while(!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(int d=0; d<8; d++) { i_urm=i+dx[d];
j_urm=j+dy[d];
if(ok(i_urm,j_urm,a)){ a[i_urm][j_urm]=1+a[i][j];
coada.push(make_pair(i_urm,j_urm));
}
}
}
}
int main()
{
citire();
lee(rx,ry,ro);
lee(jx,jy,ju);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)if(ro[i][j]==ju[i][j] && ro[i][j]>0){if(ro[i][j]<dmax){ minx=i;
miny=j;
}
else if(ro[i][j]==dmax){ if(i<minx)minx=i;
else if(i==minx)if(j<miny)miny=j;
}
}
}
fout<<ro[minx][miny]<<" "<<minx<<" "<<miny;
//fin.close();
fout.close();
return 0;
}