module Exercise_7 where import Data.List import Control.Monad import Data.Ord import qualified Data.Set as Set {-WETT-} wettComp xs (dA,(xA,yA)) = [(dA + dB, (xA, yB)) | (dB, (xB,yB)) <- xs, yA == xB] minOfOne y = minimumBy (comparing fst) . filter ((y ==) . snd) trancl xs = iterate (nub . (map =<< (. snd) . flip minOfOne) . ap union ((=<<) =<< wettComp)) xs !! (2*length xs) {-TTEW-}