public List<Expression> combine(Expression expression) {
		List<Expression> allCombinations = new LinkedList<Expression>();

		List<Expression> leftCombinations = left.combine(expression);
		for ( Expression leftExpression:leftCombinations ) {
			if ( operator == Operator.DIVIDE && right.eval().equals(0) )
				continue;
			
			allCombinations.add(new Operation(operator, leftExpression, right));
		}

		List<Expression> rightCombinations = right.combine(expression);
		for ( Expression rightExpression:rightCombinations ) {
			if ( operator == Operator.DIVIDE && rightExpression.eval().equals(0) )
				continue;
			
			allCombinations.add(new Operation(operator, left, rightExpression));
		}

		return allCombinations;
	}