Haskell, просто потому, что он красив (по крайней мере, по сравнению с семейством C), и вы сказали любой язык:
combinations [] = [[]]
combinations (x:xs) = (combinations xs) ++ map (x:) (combinations xs)
Может быть вызвано так:
combinations ["word1", "word2", "word3"]
или как, если вам действительно нужно передать строку через пробел:
combinations (words "word1 word2 word3")