discrete mathematics logic puzzles