#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int di[9]={0, 0, 1, 0 , -1 , 1 , 1,-1,-1},dj[9]={0, 1 ,0 ,-1, 0 ,1 ,-1 ,-1,1},R[101][101],J[101][101];
string s;
void lee(int istart,int jstart,int n,int m,int ok)
{
queue<pair<int , int>> q;
if(ok==1) R[istart][jstart]=1;
else J[istart][jstart]=1;
q.push(make_pair(istart,jstart));
while(q.size()>0)
{
int i=q.front().first;
int j=q.front().second;
for(int k=1;k<=8;k++)
{
int ivecin=i+di[k];
int jvecin=j+dj[k];
int p;
if(ok==1) p=R[ivecin][jvecin];
else p=J[ivecin][jvecin];
if(ivecin>=1&&ivecin<=n&&jvecin>=1&&jvecin<=m&&p==0)
{
if(ok==1) R[ivecin][jvecin]=R[i][j]+1;
else J[ivecin][jvecin]=J[i][j]+1;
q.push(make_pair(ivecin,jvecin));
}
}
q.pop();
}
}
int main()
{
int n,m,ir,jr,ij,jj;
in>>n>>m;
in.get();
for(int i=1;i<=n;i++)
{
getline(in,s);
for(int j=0;j<m;j++)
{
if(s[j]=='X')
{
R[i][j+1]=-1;
J[i][j+1]=-1;
}
else if(s[j]=='R'){
ir=i;
jr=j+1;
}
else if(s[j]=='J'){
ij=i;
jj=j+1;
}
}
}
lee(ir,jr,n,m,1);
lee(ij,jj,n,m,0);
int minim=(J[ir][jr]+1)/2;
cout<<minim<<" ";
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
if(R[i][j]==minim)
{
cout<<i<<" "<<j<<"\n";
}
}
}