#include<cstdio>
using namespace std;
int a[101][101], b[101][101], n, m, xr, yr, xj, yj, mini;
char h;
struct{int x, y;}c[10004];
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,1,-1,1,0,-1};
void citire()
{
int i, j;
FILE *f=fopen("rj.in","r");
fscanf(f,"%d %d",&n,&m);
fscanf(f,"%c",&h);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
fscanf(f,"%c",&h);
if(h=='X')a[i][j]=b[i][j]=-1;
else if(h==' ')a[i][j]=b[i][j]=0;
else if(h=='J')
{
a[i][j]=b[i][j]=0;
xj=i;
yj=j;
}
else
{
a[i][j]=b[i][j]=0;
xr=i;
yr=j;
}
}
fscanf(f,"%c",&h);
}
fclose(f);
}
int interior(int x, int y)
{
if(x>=1&&x<=n&&y>=1&&y<=m)return 1;
return 0;
}
void lee(int a[101][101],int x, int y)
{
int i, j, p, u, 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)&&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, x, y;
citire();
lee(a,xr,yr);
lee(b,xj,yj);
mini=10000000;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(a[i][j]==b[i][j]&&mini>a[i][j]&&a[i][j]>0)
{
mini=a[i][j];
x=i;
y=j;
}
}
}
fprintf(g,"%d %d %d",mini,x,y);
return 0;
}