ll@h,@w,@a[h*w]; char c[]{}; DijkstraHeap q[2]; q[0..1].malloc(h*w,1); q[0].change(0,0); q[1].change(h*w-1,0); ll k=0; for(;;++k){ ll p=k&1; ll i=q[p].pop(); c[i]=p+1; ll y=i/w; ll x=i%w; if(y) {ll d=i-w;if(c[d]==2-p)break; q[p].change(d,a[d]);} if(y