import Data.List (subsequences, tails, delete) disjoint a = concatMap (cutAt a) [1..length a - 2] where cutAt s n = [a ++ b | b <- delete [] (subsequences right), a <- init (tails left) ] where (left, _:right) = splitAt n s main = print $ length $ disjoint [1..20]