http://projecteuler.net/index.php?section=problems&id=79

とりあえず、最短なので、各数字は高々一回しか現れないと勝手に解釈。

あとはそのまま。

import Data.Char
import Data.List
import Control.Monad
import Data.Graph
p079 xs =flip intersect use .topSort.buildG (,9).concatMap mke $xs
where mke (a:b:c:_) = [(a,b),(b,c)]
use =nub.concat$xs
main = liftM((+).read.map intToDigit.p079.map (map digitToInt).lines)
.readFile$"keylog.txt"

Graphを使ってみた。