#include <stdio.h>
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
typedef struct {int x, y;} PUNCT;
PUNCT c[10500];
void citire(int &n, int &m,int a[105][105],int b[105][105],int &xr,int &yr,int &xj,int &yj)
{
int i,j;
FILE *f=fopen("rj.in","r");
char s;
fscanf(f,"%d %d",&n,&m);
fscanf(f,"%c",&s);
for (i=1; i<=n; i++)
{ for(j=1; j<=m; j++)
{ fscanf(f,"%c",&s);
if(s==' ') a[i][j]=0;
else if(s=='R') { xr=i;
yr=j;
a[i][j]=-2;
}
else if(s=='J') { xj=i;
yj=j;
a[i][j]=-3;
}
else a[i][j]=-1;
b[i][j]=a[i][j];
}
fscanf(f,"%c",&s);
}
fclose(f);
}
int interior(int x, int y, int n, int m)
{
if(x>0 && y>0 && x<=n && y<=m) return 1;
return 0;
}
void drum(int x, int y, int a[105][105],int n,int m )
{
int p,u,i,xv,yv;
p=u=1;
c[u].x=x;
c[u].y=y;
a[x][y]=1;
while(p<=u)
{
x=c[p].x;
y=c[p++].y;
for (i=0; i<=7; i++)
{ xv=x+dx[i];
yv=y+dy[i];
if(interior(xv,yv,n,m) && a[xv][yv]==0)
{ a[xv][yv]=a[x][y]+1;
c[++u].x=xv;
c[u].y=yv;
}
}
}
}
int main ()
{
FILE *g=fopen("rj.out","w");
int i,j,n,m,a[105][105],b[105][105],xr,yr,xj,yj,nr,p1,p2;
citire(n,m,a,b,xr,yr,xj,yj);
drum(xr,yr,a,n,m); ;
drum(xj,yj,b,n,m);
nr=m*n+1;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]>0 && a[i][j]==b[i][j])
{ if (nr==a[i][j] && p1>i) { p1=i;
p2=j;
}
else if ( nr>a[i][j]) { nr=a[i][j];
p1=i;
p2=j;
}
}
fprintf(g,"%d %d %d",nr,p1,p2);
fclose(g);
return 0;
}