#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int n, m,tmin=100000;
int dx[8]={-1,-1,-1,0,1,1,1,0};
int dy[8]={-1,0,1,1,1,0,-1,-1};
char a[101][101],c[101];
int b[101][101],x , y, x1, y1, xt, yt, t[101][101];
bool mk[101][101];
queue <pair<int,int> > q;
queue <int> q1;
bool verif(int x,int y)
{
if(x>0 && x<=n && y>0 && y<=m)return 1;
return 0;
}
int main()
{
in>>n>>m;
in.getline(c,101);
for(int i=1;i<=n;i++)
{
in.getline(a[i]+1,100);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]=='J' || a[i][j]=='R')
q.push(make_pair(i,j)),mk[i][j]=1;
if(a[i][j]=='J')q1.push(1);
if(a[i][j]=='R')q1.push(2);
if(a[i][j]=='X')mk[i][j]=1;
}
}
while(!q.empty())
{
x=q.front().first;
y=q.front().second;
//cout<<x<<' '<<y<<endl;
for(int i=0;i<=7;i++)
{
x1=x+dx[i];
y1=y+dy[i];
if(b[x][y]!=-1 && b[x1][y1]>0 && t[x1][y1]!=q1.front())
{
if(tmin>b[x1][y1])
{
tmin=b[x1][y1];
xt=x1;
yt=y1;
}
else if(tmin==b[x1][y1])
{
if(x1<=xt)
{
if(y1<yt)
{
tmin=b[x1][y1];
xt=x1;
yt=y1;
}
}
else
{
tmin=b[x1][y1];
xt=x1;
yt=y1;
}
}
mk[x1][y1]=1;b[x1][y1]=-1;
}
else if(verif(x1,y1) && mk[x1][y1]==0 && b[x][y]>=0)
{
q.push(make_pair(x1,y1));
q1.push(q1.front());
b[x1][y1]=b[x][y]+1;
mk[x1][y1]=1;
t[x1][y1]=q1.front();
}
}
q.pop();q1.pop();
}
cout<<tmin+1<<' '<<xt<<' '<<yt;
return 0;
}