#include <stdio.h>
#include <iostream.h>
int dx[9]={-1,-1,-1,0,1,1, 0, 1};
int dy[9]={-1, 0, 1,1,1,0,-1,-1};
typedef struct {int x, y;} PUNCT;
PUNCT c[10500];
void citire(int &n, int &m,int a[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",&c);
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;
}
fscanf(f,"%c",&c);
}
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 copiere(int a[][105],int b[][105],int n, int m)
{
int i,j;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
b[i][j]=a[i][j];
}
void drum(int x, int y, int a[105][105], int v,int n,int m )
{
int p,u,i,xv,yv,ok=0;
p=u=1;
c[u].x=x;
c[u].y=y;
a[x][y]=1;
while(p<=u && !ok)
{ x=c[p].x;
y=c[p++].y;
for(i=0; i<=7 ; i++)
{ xv=x+dx[i];
yv=x+dy[i];
if (a[xv][yv]==v && interior(xv, yv,n,m)) ok=1;
else if(a[xv][yv]==0 && interior(xv,yv,n,m))
{ c[++u].x=xv;
c[u].y=yv;
a[xv][yv]=a[x][y]+1;
}
}
}
}
int main ()
{
FILE *g=fopen("rj.out","w");
int i,j,n,m,a[105][105],b[105][105],v,xr,yr,xj,yj,ok=0;
citire(n,m,a,xr,yr,xj,yj);
copiere(a,b,n,m);
v=-3;
drum(xr,yr,a,v,n,m);
v=-2 ;
drum(xj,yj,b,v,n,m);
for(i=1; i<=n; i++)
{for (j=1; j<=m; j++)
cout<<a[i][j]<<" ";
cout<<"\n";}
cout<<"\n";
for(i=1; i<=n; i++)
{for(j=1; j<=m; j++)
cout<<b[i][j]<<" ";
cout<<"\n";}
cout<<xr<<" "<<yr;
for(j=1; j<=m && !ok; j++)
for(i=1; i<=n && !ok; i++)
if(a[i][j]==b[i][j] && a[i][j]>0 && (xr!=i && yr!=j) && (xj!=i && yj!=j))
{a[i][j]--; fprintf(g,"%d %d %d",i,j,a[i][j]) ; ok=1; }
fclose(g);
return 0;
}