//program romeo si julieta
#include <stdio.h>
#include <stdlib.h>
int a[102][102];
int pri,prj,pji,pjj,n,m,k,nrr,nrj,nrr2,nrj2,timp,min,min2;
typedef struct {
int x,y;}poz;
poz x[9],ro1[102],ro2[102],ju1[102],ju2[102];
FILE *f,*g;
void citire(int a[102][102],int n,int m)
{
char c;
int i,j;
for(i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
{
fscanf(f,"%c",&c);
if (c=='X') a[i][j]=-1;
else a[i][j]=0;
if (c=='R') {pri=i;prj=j;};
if (c=='J') {pji=i;pjj=j;};
};
fscanf(f,"%c",&c);
};
return;
};
void bordare(int a[102][102],int n,int m)
{
int i,j;
for(i=0;i<=n+1;i++)
{
a[i][0]=-1;
a[i][m+1]=-1;
};
for(j=0;j<=m+1;j++)
{
a[0][j]=-1;
a[n+1][j]=-1;
};
return;
};
int main()
{
int i,j,t,li,lj,lfi,lfj;
min=-1;min2=-1;
g=fopen("rj.out","w");
x[1].x=1;x[1].y=0;
x[2].x=0;x[2].y=1;
x[3].x=-1;x[3].y=0;
x[4].x=0;x[4].y=-1;
x[5].x=1;x[5].y=1;
x[6].x=1;x[6].y=-1;
x[7].x=-1;x[7].y=1;
x[8].x=-1;x[8].y=-1;
f=fopen("rj.in","r");
fscanf(f,"%d %d\n",&n,&m);
citire(a,n,m);
fclose(f);
bordare(a,n,m);
// for(i=1;i<=n;i++)
// {
// for(j=1;j<=m;j++)
// fprintf(g,"%d ",a[i][j]);
// fprintf(g,"\n");
// };
k=1;
a[pri][prj]=1;
a[pji][pjj]=2;
ro1[1].x=pri;ro1[1].y=prj;
ju1[1].x=pji;ju1[1].y=pjj;
nrr=1;nrj=1;
t=0;
do{
k=k+1;
nrr2=0;
nrj2=0;
//aplicam algoritmul pt Romeo
for(i=1;i<=nrr;i++)
for(j=1;j<=8;j++)
{
li=x[j].x+ro1[i].x;
lj=x[j].y+ro1[i].y;
if (a[li][lj]==0) { a[li][lj]=1;
nrr2=nrr2+1;
ro2[nrr2].x=li;
ro2[nrr2].y=lj;
};
};
for(i=1;i<=nrr2;i++)
{
ro1[i].x=ro2[i].x;
ro1[i].y=ro2[i].y;
};
nrr=nrr2;
//aplica algoritmul pt Julieta
for(i=1;i<=nrj;i++)
for(j=1;j<=8;j++)
{
li=x[j].x+ju1[i].x;
lj=x[j].y+ju1[i].y;
if (a[li][lj]==0) { a[li][lj]=2;
nrj2=nrj2+1;
ju2[nrj2].x=li;
ju2[nrj2].y=lj;
};
if (a[li][lj]==1) { if (min=-1) {t=1;timp=k;lfi=li;lfj=lj;min=li;min2=lj;};
if (min>li) {t=1;timp=k;lfi=li;lfj=lj;min=li;min2=lj;};
if ((min=li)&&(min2>lj)) {t=1;timp=k;lfi=li;lfj=lj;min=li;min2=lj;};};
};
for(i=1;i<=nrj2;i++)
{
ju1[i].x=ju2[i].x;
ju1[i].y=ju2[i].y;
};
nrj=nrj2;
}
while(t==0);
fprintf(g,"%d %d %d",timp,min,min2);
fclose(g);
return 0;
};