#include <fstream>
#include<iostream>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int mar[105][105],maj[105][105],n,m,xr,yr,xj,yj,x[105],y[105];
char a[1000001];
const int dx[]={0,1,1,1,0,-1,-1,-1};
const int dy[]={1,1,0,-1,-1,-1,0,1};
void citire()
{ int i,j;
in>>n>>m;
in.getline(a,10001);
for(i=1;i<=n;i++)
{ in.getline(a,10001);
for(j=0;j<m;j++)
{ if(a[j]=='R'){mar[i][j+1]=1;xr=i;yr=j+1;}
if(a[j]=='J'){maj[i][j+1]=1;xj=i;yj=j+1;}
if(a[j]=='X') { mar[i][j+1]=1; maj[i][j+1]=1;}
}
}
}
/* void afisare()
{ int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{ out<<mar[i][j]<<" ";
}
out<<endl;
}
out<<endl;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{ out<<maj[i][j]<<" ";
}
out<<endl;
}
out<<endl;
}*/
int bun(int ii,int jj)
{
return((jj>0)&&(ii>0)&&(ii<n+1)&&(jj<m+1));
}
void leecoada(int xo[105][105],int pozi, int pozj)
{ int first=0,last=0,k,ii,jj;
x[0]=pozi;
y[0]=pozj;
while(first<=last)
{ii=x[first];
jj=y[first];
first++;
for(k=0;k<8;k++)
{
if(bun(ii+dx[k],jj+dy[k]))
if(xo[ii+dx[k]][jj+dy[k]]==0)
{ last=last+1;
xo[ii+dx[k]][jj+dy[k]]=xo[ii][jj]+1;
x[last]=ii+dx[k];
y[last]=jj+dy[k];
}
}
}
}
int main()
{ int mini=10000,i,j,xmin=1000,ymin=1000;
citire();
leecoada(mar,xr,yr);
leecoada(maj,xj,yj);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{if((mar[i][j]==maj[i][j])&&(maj[i][j]>1)&&(mini>maj[i][j]))
{
mini=maj[i][j];
xmin=i;
ymin=j;
}
}
out<<mini<<" "<<xmin<<" "<<ymin;
return 0;
}