--- /dev/null
+module s2
+
+import StdEnv
+
+import Data.Func
+import qualified Data.Set
+import Text
+
+getinput f
+# (ok, c, f) = freadc f
+| not ok = []
+= [c:getinput f]
+
+split :: [Char] [Char] -> [[Char]]
+split [] [] = []
+split c [] = [reverse c]
+split c ['\n':rest] = [reverse c:split [] rest]
+split c [r:rest] = split [r:c] rest
+
+Start w
+# (_, io, w) = fopen "input.txt" FReadText w
+= proc 'Data.Set'.newSet
+ $ scan (+) 0
+ $ map (toInt o toString)
+ $ flatten
+ $ repeat
+ $ split []
+ $ getinput io
+
+proc have [x:xs]
+ | 'Data.Set'.member x have = x
+ = proc ('Data.Set'.insert x have) xs