int dx[]={0,0,-1,1},
dy[]={-1,1,0,0};
const char W[]={'L','R','U','D'};
int n,m,w[17][17],snk...memset(T,0xFF,sizeof(T));
memset(vis,0,sizeof(vis));
HH=TT=0;
int s=0;
for(int i=4;i>=2;i--)
s=(s<<2)pos(snk...[i-1][0],snk[i-1][1],snk[i][0],snk[i][1]);
s<<=2;vis[s]=++TT;Q[TT]=s;
while(HH<TT){
int u=Q[++HH];
int...check(s,wt) (vis[(s)>>3]&1<<(wt))
inline void bfs(){
memset(vis,0,sizeof(vis));
HH=TT=0;
Q[++TT]=make_S(snk...[1][0],snk[1][1],1,(1<<fd)-1,0);
vis[Q[TT]>>3]=1;
while(HH<TT){
int u=Q[++HH];
int x=u>>22&((1<<4)-1)