#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int xR,yR,xJ,yJ,n,m;
int dx[]={1,1,1,-1,-1,-1,0,0};
int dy[]={1,-1,0,1,-1,0,1,-1};
struct coada
{int x,y;};
void Citire(int a[102][102],int b[102][102],int &n,int &m)
{int i,j;
char s[110];
fin>>n>>m;
fin.get();
for(i=0;i<n;i++)
{ fin.getline(s,110);
for(j=0;j<m;j++)
{ if(s[j]=='X') a[i][j]=b[i][j]=-1;
else if(s[j]=='R') {a[i][j]=b[i][j]=-2;xR=i;yR=j;}
else if(s[j]=='J') {a[i][j]=b[i][j]=-3;xJ=i;yJ=j;}
else a[i][j]=b[i][j]=0;
}
}
}
void BFS(int a[102][102],int x,int y)
{ coada c[100001],nod,vecin;
int pr,ul,i;
pr=ul=1;
a[x][y]=1;
c[pr].x=x;
c[pr].y=y;
while(pr<=ul)
{ nod.x=c[pr].x;
nod.y=c[pr++].y;
for(i=0;i<8;i++)
{vecin.x=nod.x+dx[i];
vecin.y=nod.y+dy[i];
if(vecin.x>=0 && vecin.y>=0 && vecin.x<n && vecin.y<m)
if(!a[vecin.x][vecin.y])
{a[vecin.x][vecin.y]=a[nod.x][nod.y]+1;
c[++ul].x=vecin.x;
c[ul].y=vecin.y;
}
}
}
}
void AfisareMatrice(int a[102][102])
{int i,j;
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
fout<<a[i][j]<<" ";
fout<<"\n";
}
fout<<"\n";
}
int main()
{int a[102][102],x,y,b[102][102],i,j,maxim=100001;
Citire(a,b,n,m);
BFS(a,xR,yR);
BFS(b,xJ,yJ);
//AfisareMatrice(a);
//AfisareMatrice(b);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(a[i][j]>0 && b[i][j]>0)
if(max(a[i][j],b[i][j])<maxim)
{maxim=max(a[i][j],b[i][j]);
x=i;y=j;
}
fout<<maxim<<" "<<x+1<<" "<<y+1;
return 0;
}