#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SizeX 51
#define SizeY 51
int map[SizeX][SizeY],i=0,X[SizeX*SizeY],Y[SizeX*SizeY],c,a=0;
int dig(int x,int y){
int dx,dy,r;
c=0;
r=rand();
printf("%d\n",r);
while(c<4){
switch ((r + 4 + c) % 4 ){
case 0:
dx = 0;
dy = -1;
break;
case 1:
dx = -1;
dy = 0;
break;
case 2:
dx = 0;
dy = 1;
break;
case 3:
dx = 1;
dy = 0;
break;
}
/* if((r+4+c)%4==0){
dx=0;
dy=-1;
}else if((r+4+c)%4==1){
dx=-1;
dy=0;
}else if((r+4+c)%4==2){
dx=0;
dy=1;
}else if((r+4+c)%4==3){
dx=1;
dy=0;
}*/
if(x+dx*2<=0 || y+dy*2<=0 || x+dx*2>=SizeX-1 || y+dy*2>=SizeY-1){
c++;
}else if(map[x+dx*2][y+dy*2]==0){
c++;
}else if(map[x+dx*2][y+dy*2]==1){
map[x+dx][y+dy]=0;
map[x+dx*2][y+dy*2]=0;
x=x+dx*2;
y=y+dy*2;
c=0;
r=rand();
}
}
return 0;
}
int main(){
int x,y,i,a;
for(x=0;x<=SizeX-1;x++){
for(y=0;y<=SizeY-1;y++){
map[x][y]=1;
}
}
map[1][1]=0;
while(1){
i=0;
x=1;
y=1;
while(y<SizeY-1){
x=1; /*これ*/
while(x<SizeX-1){
if (map[x][y]==0){
if(x-2>=0 && map[x-2][y]==1){
X[i]=x;
Y[i]=y;
++i;
}else if(y-2>=0 && map[x][y-2]==1){
X[i]=x;
Y[i]=y;
i++;
}else if((y==SizeY-2) && (x==SizeX-2)){
break;
}else if(x+2<SizeX && map[x+2][y]==1){
X[i]=x;
Y[i]=y;
++i;
}else if(y+2<SizeY && map[x][y+2]==1){
X[i]=x;
Y[i]=y;
++i;
}
}
x=x+2;
}
y=y+2;
}
if(i==0){
break;
}else{
srand((unsigned) time(NULL));
a=rand()%i;
x=X[a];
y=Y[a];
dig(x,y);
}
}
map[1][0]=2;
map[SizeX-2][SizeY-1]=2;
for(y = 0; y < SizeY ; y++ ){
for(x = 0; x < SizeX ; x++ ){
if( map[x][y] == 0){
printf(" ");
}else if( map[x][y] == 1){
printf("EE") ;
}else if( map[x][y] == 2){
printf("::") ;
}
}
printf("\n");
}
return 0;
}