// 1137 // r=0 ambiguous // r=1 running // r=2 finished // r=3 invalid #include #include char C[120][60]; int R[120][60],W,H,J,K,B[61][61],r,i,j,c,*q=&H,t=7200,x,y,k; int64_t*U,T[28800],*S=T,O[120],Z[120],v,z; void D(){ for(k=-1;7200>++k;S[k]=v) r=!~(v=U[k])&&*R[k/60]?2:S[k]-v?1:r; ;;; } void L(){ for(r=1;r==1;){ r=3; ; // step 1 for(i=0;120>i;i++){ for(k=z=1,j=0;v=R[i][j];j++) O[i]|=(1LL<>1:v<<1|1)) v=S[60*i+(j<0?~j:j)]|=j?v:~3; } // step 2 for(z=0;7200>z;z++) i=z/60,j=z%60, (B[i<60?i:j][i<60?j:i-60]=~S[z]&O[i]? ~S[z]&Z[i]? r=0: (U=O,1): (U=Z,2))?k=i<60?j+60:j,S[i%60+60*k]|=~U[k]:0; U=S; S-=t*=-1; D(); z*9; } } int main(){ for(;K=scanf("%d",R[*q+c*60]+j)<1?q=&W,j--,2>++c:'\n'; j=-K+getchar()?j+1:++*q*0); L(); //show(); ; if(!r) //S+=240; //D(); for(K=0;K>c)) //printf("c=%d\n",c); U=S, 000, S+=J=14400, D(), S[K]=~(1LL< ",~((S-240)[i][j])); //printf("%llx o=%llx z=%llx\n",~((S-240)[i][j]),O[i],Z[i]); //} S[K]|=r==2?1LL<i;Z[i]=k--,i>59?q=&J:0,*q