import Data.List (permutations) solve :: Int -> [[Int]] solve i = filter (valid . zip [1..]) (permutations [1..i]) valid :: [(Int, Int)] -> Bool valid [] = True valid (x:xs) = singleValid x xs && valid xs where singleValid x xs = all (pairwiseValid x) xs pairwiseValid (x1, y1) (x2, y2) = abs (x1-x2) /= abs (y1-y2)