decent solutions to 1-3