# ls = sort [0:read io]
= (one ls, two ls)
-one ls = uncurry (*) $ foldl jolt (0, 1) [b-a\\a<-ls & b<-tl ls]
-where
- jolt (j1, j3) 3 = (j1, j3+1)
- jolt (j1, j3) 1 = (j1+1, j3)
- jolt (j1, j3) _ = (j1, j3)
+one ls = prod $ map length $ group $ sort [3:[b-a\\a<-ls & b<-tl ls]]
two ls = prod [[0,1,2,4,7,12,20,33,53]!!length l\\l<-group [b-a\\a<-ls & b<-tl ls] | all ((==)1) l]