public byte[][] move(Node parent, int direction) {
		byte[][] newBoard = cloneBoard(parent);
		byte freeCellY = parent.getFreeCellY();
		byte freeCellX = parent.getFreeCellX();
		if (direction == MOVE_LEFT) {
			byte tmp = newBoard[freeCellY][freeCellX - 1];
			newBoard[freeCellY][freeCellX - 1] = newBoard[freeCellY][freeCellX];
			newBoard[freeCellY][freeCellX] = tmp;
		} else if (direction == MOVE_RIGHT) {
			byte tmp = newBoard[freeCellY][freeCellX + 1];
			newBoard[freeCellY][freeCellX + 1] 
			                             = newBoard[freeCellY][freeCellX];
			newBoard[freeCellY][freeCellX] = tmp;
		} else if (direction == MOVE_UP) {
			byte tmp = newBoard[freeCellY - 1][freeCellX];
			newBoard[freeCellY - 1][freeCellX] 
			                             = newBoard[freeCellY][freeCellX];
			newBoard[freeCellY][freeCellX] = tmp;
		} else if (direction == MOVE_DOWN) {
			byte tmp = newBoard[freeCellY + 1][freeCellX];
			newBoard[freeCellY + 1][freeCellX] 
			                             = newBoard[freeCellY][freeCellX];
			newBoard[freeCellY][freeCellX] = tmp;
		}
		return newBoard;
	}