Solving problems for fun and profit.