#include #define R(i) rand()%i #define exit(b,A,B) *G(m+A,k+B)|(b&&*G(m-A,k-B)) #define do(x) int x(int #define else(a,b,c,d) {a=R(c)&~1,b##1=R(d)&~1,b##2=R(d)&~1;if(b##2\ []]\n\n";do(putchar));static char*G(int m,int n){if(!f){for( X=--m|1,Y=1|--n,f=(char*)calloc(X+1,Y+1);X>x||xx?*G(x,0)=*G(x,Y-1)= 1:0,Y>x&&x>1?*G(0,x)=*G(X-1,Y-1-x)=1:0;for(F=(X-3)*(Y-3)/4;F;)if(R(2))else(x ,y,X,Y) else else(y,x,Y,X)for(;Y>k;putchar('\n'),k++)for(m=F;m^X;putchar(" " "-|+"[(x+n+n)**G(m++,k)]))x=exit(m,1,0),n=exit(k,0,1);}return&m<:n*(X+1)+f]; }do(main)A,const char**V){do(time));for(srand(time(k));F^34;putchar(f[F++])) ;for(f=(char*)0;--A;)*(k++?&Y:&X)=atoi(*++V);return(int)G(X,Y);}