char*M,A,Z,E=40,J[40],T[40];main(C){for(*J=A=scanf(M="%d",&C); -- E; J[ E] =T [E ]= E) printf("._"); for(;(A-=Z=!Z) || (printf("\n|" ) , A = 39 ,C -- ) ; Z || printf (M ))M[Z]=Z[A-(E =A[J-Z])&&!C & A == T[ A] |6<<27<rand()||!C&!Z?J[T[E]=T[A]]=E,J[T[A]=A-Z]=A,"_.":" |"];}
this doesn't work with gcc 4
> GCC no longer accepts the -fwritable-strings option. Use named character arrays when you need a writable string.
https://gcc.gnu.org/gcc-4.0/changes.html
For gcc, writable strings can be avoided by making the top line one character longer:
char M[3],A,Z,E=40,J[40],T[40];main(C){for(*J=A=scanf("%d",&C);