public BFSNode moveRightNode(final boolean[] tilesInSubset) {
		final int posOfSpace = posOfSpace(), posPlusOne = posOfSpace + 1;
		if (posPlusOne % dimension == 0) {
			return null;
		}
		final BFSNode copy = new BFSNode(this);
		// Swap tile with space.
		final int posTimes4 = posOfSpace << 2, posPlusOneTimes4 = posPlusOne << 2;
		final long space = (copy.boardConfig >> posTimes4) & 0xF, tile = (copy.boardConfig >> posPlusOneTimes4) & 0xF;
		final long zeroBitTile = (long) 0xF << posPlusOneTimes4;
		copy.boardConfig = copy.boardConfig & ~zeroBitTile | (tile << posTimes4)
				| (space << posPlusOneTimes4);
		copy.direction = 'R';
		if (this.storePath) {
			copy.path.append('R');
		}
		if (tilesInSubset == null || tilesInSubset[(int) tile]) {
			++copy.cost;
		}
		return copy;
	}