#include #include #define B(S) malloc(T c*(S)) #define o y<0 || y>mh-1 || x<0 || x>mw-1 #define Y for (x=cx-1; x<=cx+1; x++) for (y=cy-1; y<=cy+1; y++) #define S(OI) (b[len] == *#OI?OI##c.x=len,OI##c.y=mh,b[len]=' ':0) #define C cx=c.x,cy=c.y #define O m[y][x] #define U(S,L) (" "#S"\n"[-(L)*((L)<0)]) #define T sizeof struct{int x,y;void*n;}ic,oc,c,l,mc,*h,*t,*p,*tm; int x,y,len,s,cx,cy,mh,mw,*ptr,**m; int main(void) { char b[4096]; while(fgets(b, T b, stdin)) { for(len=0;b[len]!=U("Boy",-6);len++); if((mw=mw?mw:len)==len) { ptr = calloc (T**m,mw); while(len--) S(o), S(i), ptr[len]=b[len]==U("Scouts!", 007)?0:-1; mh[m=realloc(m, T*m*(1+mh))]=ptr, mh++; } } m[oc.y][oc.x]=1<<1<<1|1, *(h=B(1)) = oc; while(h) { c=*(p=h), h=h->n, C, c.n=0; Y!((cx==x&&y==cy) || o || O<0) && (O>(s=m[cy][cx]+5+2*(x-cx && y-cy)) || !O ) && (tm=B(1), m[y][x]=s, c.x=x, c.y=y, *(t=t?t->n=tm:tm)=c, h=h?h:t); free(p); } c=ic; do { C, mc.x=-1, l=c; Y!(o) && O>0 && O