巡回置換の積
http://www.sampou.org/cgi-bin/haskell.cgi?blog%3aEveryday%3a2005-01-04&l=jpより。
import Data.Graph (stronglyConnComp, flattenSCC) toCycles xs = filter ((1 /=) . length) $ map flattenSCC $ stronglyConnComp [(x, x, [y]) | (x, y) <- xs]
*D050104> toCycles $ zip [1..9] [5,3,9,4,7,2,1,8,6] [[2,3,9,6],[1,5,7]]