private void generateMaze(int clength, int cwidth) {
		DIR[] dirs = DIR.values();
		Collections.shuffle(Arrays.asList(dirs));
		for (DIR dir : dirs) {
			int nlength = clength + dir.dlength;
			int nwidth = cwidth + dir.dwidth;
			if (between(nlength, length) && between(nwidth, width) && (maze[nlength][nwidth] == 0)) {
				maze[clength][cwidth] |= dir.bit;
				maze[nlength][nwidth] |= dir.opposite.bit;
				generateMaze(nlength, nwidth);
			}
		}
	}