#include <fstream>
#include <queue>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
struct node{
int d, i, j;
};
int J[105][105], R[105][105], ji, jj, ri, rj;
int n, m;
void wM(int a[][105])
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
void read(const int& n, const int& m)
{
char penis;
cin.get();
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
cin.get(penis);
if(penis==' ')
R[i][j]=0, J[i][j]=0;
else if(penis=='X')
R[i][j]=-1, J[i][j]=-1;
else if(penis=='J')
ji=i, jj=j, J[i][j]=-1, R[i][j]=-1;
else
ri=i, rj=j, R[i][j]=-1, J[i][j]=-1;
}
cin.get();
}
//wM(J);
}
bool inBounds(const int& i, const int& j)
{
return i>=1 && i<=n && j>=1 && j<=m;
}
int dx[]={0, 0, 1, -1, 1, 1, -1, -1}, dy[]={1, -1, 0, 0, 1, -1, 1, -1};
void bruceLee(const int& sti, const int& stj, int a[][105])
{
queue<node> Q;
node marian;
Q.push({1, sti, stj});
int wc=0;
while(!Q.empty())
{
marian=Q.front();
Q.pop();
for(int i=0; i<8; i++)
{
if(inBounds(marian.i+dx[i], marian.j+dy[i]))
if(a[marian.i+dx[i]][marian.j+dy[i]]==0)
{
a[marian.i+dx[i]][marian.j+dy[i]]=marian.d+1;
Q.push({marian.d+1, marian.i+dx[i], marian.j+dy[i]});
}
}
}
cout<<"\n";
//wM(a);
}
int main()
{
cin>>n>>m;
read(n, m);
bruceLee(ri, rj, R);
bruceLee(ji, jj, J);
node talent; talent.d=999999999;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(R[i][j]==J[i][j] && R[i][j]!=-1 && R[i][j]!=0)
{
if(R[i][j]<talent.d)
talent={R[i][j], i, j};
}
}
}
cout<<talent.d<<" "<<talent.i<<" "<<talent.j;
return 0;
}