#include <string.h>
#include <fstream.h>
#include<iomanip.h>
ifstream f("rj.in");
ofstream g("rj.out");
const int dx[]={0,-1,-1,0,1,1,1,0,-1};
const int dy[]={0,0,1,1,1,0,-1,-1,-1};
struct poz{int x,y;}c[10001];
int a[100][100],b[100][100],n,m,xj,xr,xf,yj,yr,yf,min;
char ch;
void read();
void bordare();
void solve();
void lee1(int x,int y);
void lee2(int x,int y);
int main ()
{
read();
bordare();
solve();
return 0;
}
void read ()
{
f>>n>>m;
f.get();
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
f.get(ch);
if (ch==' ') a[i][j]=b[i][j]=0;
if (ch=='X') a[i][j]=b[i][j]=-1;
if (ch=='J') xj=i,yj=j,a[i][j]=b[i][j]=0;
if (ch=='R') xr=i,yr=j,a[i][j]=b[i][j]=0;
}
f.get();
}
}
void bordare ()
{
for (int i=0;i<=n+1;i++)
a[i][0]=a[i][m+1]=-1;
for (int i=0;i<=m+1;i++)
a[0][i]=a[n+1][i]=-1;
for (int i=0;i<=n+1;i++)
b[i][0]=b[i][m+1]=-1;
for (int i=0;i<=m+1;i++)
b[0][i]=b[n+1][i]=-1;
}
void solve ()
{
lee1(xr,yr);
lee2(xj,yj);
min=n*m;
xf=-1,yf=-1;
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if (a[i][j]==b[i][j] && a[i][j]!=-1 && a[i][j]!=0)
if(a[i][j]<min) min=a[i][j],xf=i,yf=j;
if (xf!=-1 && yf!=-1) g<<xf<<' '<<yf<<' '<<a[xf][yf];
else g<<"Nu se pot intalni";
}
void lee1(int x,int y)
{
int p,u,x1,y1,x2,y2,i;
p=1,u=1;
c[p].x=x;
c[p].y=y;
a[x][y]=1;
while (p<=u)
{
x1=c[p].x;
y1=c[p].y;
for (i=1;i<=8;i++)
{
x2=x1+dx[i];
y2=y1+dy[i];
if (a[x2][y2]==0)
{
a[x2][y2]=a[x1][y1]+1;
u++;
c[u].x=x2;
c[u].y=y2;
}
}
p++;
}
}
void lee2(int x,int y)
{
int p,u,x1,y1,x2,y2,i;
p=1,u=1;
c[p].x=x;
c[p].y=y;
b[x][y]=1;
while (p<=u)
{
x1=c[p].x;
y1=c[p].y;
for (i=1;i<=8;i++)
{
x2=x1+dx[i];
y2=y1+dy[i];
if (b[x2][y2]==0)
{
b[x2][y2]=b[x1][y1]+1;
u++;
c[u].x=x2;
c[u].y=y2;
}
}
p++;
}
}