## Problem Description and Formulation

The problem is a linear programming optimization problem where the goal is to maximize the points earned by spelling short and long words in a spelling bee, subject to certain constraints.

- Short words are worth 3 points each.
- Long words are worth 6 points each.
- The constraints are:
  - Spell at least 5 short words.
  - Spell at least 2 long words.
  - Spell at most 10 short words.
  - Spell at most 5 long words.
  - Spell at most 10 words in total.

## Symbolic Representation

Let's denote:
- \(S\) as the number of short words spelled.
- \(L\) as the number of long words spelled.

The objective function to maximize the total points \(P\) is:
\[P = 3S + 6L\]

Subject to the constraints:
1. \(S \geq 5\)
2. \(L \geq 2\)
3. \(S \leq 10\)
4. \(L \leq 5\)
5. \(S + L \leq 10\)

## Gurobi Code

```python
import gurobi

def solve_spelling_bee():
    # Create a new model
    model = gurobi.Model()

    # Define the variables
    S = model.addVar(lb=0, ub=None, name="Short_Words")
    L = model.addVar(lb=0, ub=None, name="Long_Words")

    # Objective function: Maximize 3S + 6L
    model.setObjective(3 * S + 6 * L, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(S >= 5, name="Min_Short_Words")
    model.addConstr(L >= 2, name="Min_Long_Words")
    model.addConstr(S <= 10, name="Max_Short_Words")
    model.addConstr(L <= 5, name="Max_Long_Words")
    model.addConstr(S + L <= 10, name="Total_Words")

    # Solve the model
    model.optimize()

    # Print the results
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution: Short words = {S.varValue}, Long words = {L.varValue}")
        print(f"Max points: {3 * S.varValue + 6 * L.varValue}")
    else:
        print("No optimal solution found")

solve_spelling_bee()
```