import Data.List l=readFile"d14small" i :: [(String, Char)] -> String -> String i r[x] = [x] i r(a:b:x)|Just c<-lookup [a,b] r=a:c:i r(b:x) parse :: String -> ([String],[(String, Char)]) parse = fmap (map((,).take 2<*>(!!6)).tail).break(==[]).lines main=interact$show.length.(!!40).(\([x],r)->iterate(i r)x).parse