#include #include typedef int DequeVal; typedef struct Deque { DequeVal *array; size_t front; size_t last; size_t mask; } Deque; Deque* newDeque(void){ const size_t len=2; Deque *d=(Deque *)calloc(len,sizeof(Deque)); d->array=(DequeVal *)calloc(len,sizeof(DequeVal)); d->front=d->last=0; d->mask=len-1; return d; } void initDeque(Deque *d){ d->front=d->last=0; } void freeDeque(Deque *d){ free(d->array); free(d); } int isEmpty(Deque *d){ return d->front==d->last; } void deque_realloc(Deque *d){ DequeVal *array=(DequeVal *)calloc(2*(d->mask+1),sizeof(DequeVal)); size_t k=0; for(size_t i=d->front;i!=d->last;i=(i+1)&d->mask) array[k++]=d->array[i]; free(d->array); d->array=array; d->front=0; d->last=k; d->mask=2*d->mask+1; } DequeVal pop_front(Deque *d){ DequeVal res=d->array[d->front]; d->front=(d->front+1)&d->mask; return res; } DequeVal pop_back(Deque *d){ d->last=(d->last+d->mask)&d->mask; return d->array[d->last]; } DequeVal get_front(Deque *d){ return d->array[d->front]; } DequeVal get_back(Deque *d){ return d->array[(d->last+d->mask)&d->mask]; } void push_front(Deque *d,DequeVal v){ if(((d->last+1)&d->mask)==d->front){ deque_realloc(d); } d->front=(d->front+d->mask)&d->mask; d->array[d->front]=v; } void push_back(Deque *d,DequeVal v){ if(((d->last+1)&d->mask)==d->front){ deque_realloc(d); } d->array[d->last]=v; d->last=(d->last+1)&d->mask; } #define POS(i,j,k) (((i)*h+(j))*w+(k)) void run(void){ int h,w; scanf("%d%d",&h,&w); int a,sx,sy; scanf("%d%d%d",&a,&sx,&sy); int b,gx,gy; scanf("%d%d%d",&b,&gx,&gy); char *board=(char *)calloc(h*w+1,sizeof(char)); for(int i=0;i