#include<stdio.h>
int MIN(int a,int b){return a<b?a:b;}
int gy,Y[]={0,1,0,-1};
int gx,X[]={1,0,-1,0};
char d[20][20];
int f(int sy,int sx,int m){
  int i,j,ny,nx,t,r,b,min=1000,c[11][11]={0};
  int x[200],y[200];
  /*for(i=0;i<5;i++){
    for(j=0;j<5;j++)printf("%c",d[i][j]);printf("\n");
    }//*/
  c[y[0]=sy][x[t=0]=sx]=m;
  for(r=1;r-t;t++){
    for(i=0;i<4;i++){
      ny=y[t]+Y[i];
      nx=x[t]+X[i];
      if(c[ny][nx]||d[ny][nx]=='#'||d[ny][nx]=='w')continue;
      if(d[ny][nx]=='c'){
	for(j=1;d[ny+j*Y[i]][nx+j*X[i]]=='.';j++);
	b=0;
	if(d[ny+j*Y[i]][nx+j*X[i]]=='w'){
	  d[ny+j*Y[i]][nx+j*X[i]]='.';
	  b=1;
	}
	else if(j==1)continue;
	else d[ny+(j-1)*Y[i]][nx+(j-1)*X[i]]='c';
	d[ny][nx]='.';
	min=MIN(min,f(ny,nx,c[y[t]][x[t]]+1));
	if(b)d[ny+j*Y[i]][nx+j*X[i]]='w';
	else d[ny+(j-1)*Y[i]][nx+(j-1)*X[i]]='.';
	d[ny][nx]='c';
      }
      else{
	c[y[r]=ny][x[r]=nx]=c[y[t]][x[t]]+1;
	r++;
	if(ny==gy&&nx==gx)return c[ny][nx];
      }
    }  
  }
  return min;
}
int main(){
  int w,h,i,j,y,x;
  while(scanf("%d %d",&h,&w),w||h){
    for(i=0;i<h;i++){
      for(j=0;j<w;j++){
	scanf(" %c",&d[i][j]);
	if(d[i][j]=='@')d[y=i][x=j]='.';
	if(d[i][j]=='E')d[gy=i][gx=j]='.';
      }
    }
    printf("%d\n",(f(y,x,1)%1000)-1);
  }
  return 0;
}