To solve hard problems:

- Simplify the problem as much as possible. Get rid of any extraneous parts of the problem and try to get to the core.
- Look for similar problems that've already been solved, and try to find an analogy to your problem.
- Restate the problem in as many ways as possible. Try to look at it from different POVs.
- Generalize the solutions to already solved problems and see if they apply to your problem.
- Break the problem into smaller sub-problems, and then solve each sub-problem individually.