#include<stdio.h>
#include<stdlib.h>
struct nod{
long int x;
long int y;
long int cod;
nod *next;
};
nod *prim,*ultim;
char p[105],*pp;
long int m,n,tmin,i,j,R[102][102],J[102][102],xr,yr,xj,yj,xp,yp,xs,ys,
dx[10],dy[10],xsol,ysol,ok;
void pune(long int xx,long int yy,long int cc);
void scoate();
int main()
{
FILE *f,*g;f=fopen("rj.in","r");g=fopen("rj.out","w");
fscanf(f,"%ld%ld",&m,&n);if(m==n)for(;;);
dx[0]=-1;dx[1]=-1;dx[2]=-1;dx[3]=0;dx[4]=0;dx[5]=1;dx[6]=1;dx[7]=1;
dy[0]=-1;dy[1]=0;dy[2]=1;dy[3]=-1;dy[4]=1;dy[5]=-1;dy[6]=0;dy[7]=1;
for(i=0;i<=m+1;i++){R[i][0]=-1;R[i][n+1]=-1;J[i][0]=-1;J[i][n+1]=-1;}
for(j=0;j<=n+1;j++){R[0][j]=-1;R[m+1][j]=-1;J[0][j]=-1;J[m+1][j]=-1;}
pp=&p[0];fgets(pp,102,f);
for(i=1;i<=m;i++)
{ fgets(pp,102,f);
for(j=1;j<=n;j++)
{ if(p[j-1]=='X'){R[i][j]=-1;J[i][j]=-1;}
else if(p[j-1]=='R'){xr=i;yr=j;}
else if(p[j-1]=='J'){xj=i;yj=j;}
else if(p[j-1]==' ') R[i][j]=0;
else break;
}
}
prim=new nod;prim=0;ultim=new nod;ultim=0;
R[xr][yr]=1;
J[xj][yj]=1;
pune(xr,yr,1);
pune(xj,yj,2);
tmin=1;
ok=0;
while(!ok)
{ tmin++;
while(prim->cod==1)
{ xp=prim->x;yp=prim->y;
for(i=0;i<=7;i++)
{ xs=xp+dx[i];ys=prim->y+dy[i];
if(R[xs][ys]>=0&&R[xs][ys]<tmin){R[xs][ys]=tmin;pune(xs,ys,1);}
}
scoate();
}
while(prim->cod==2)
{ xp=prim->x;yp=prim->y;
for(i=0;i<=7;i++)
{ xs=xp+dx[i];ys=prim->y+dy[i];
if(J[xs][ys]>=0&&J[xs][ys]<tmin)
{ J[xs][ys]=tmin;
if(R[xs][ys]==tmin)ok=1;
pune(xs,ys,2);
}
}
scoate();
}
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(R[i][j]==tmin&&J[i][j]==tmin)
{xsol=i;ysol=j;fprintf(g,"%ld %ld %ld\n",tmin,xsol,ysol);
fcloseall();return 0;}
return 0;
}
void pune(long int xx,long int yy,long int cc)
{
nod *paux;
paux=new nod;
paux->x=xx;paux->y=yy;paux->cod=cc;paux->next=0;
if(!prim)
{prim=paux;ultim=paux;return;}
ultim->next=paux;ultim=paux;
}
void scoate()
{
nod *paux;
paux=prim;
prim=prim->next;
free(paux);
}