trans c (1,st ) = [(1,c:st), (2,st), (2,c:st)] trans c (2,s:st) = [(2,st) | s == c] trans c (2,[] ) = [(3,[c]),(4,[]),(4,[c])] trans c (3,st ) = [(3,c:st), (4,st), (4,c:st)] trans c (4,s:st) = [(4,st) | s == c] trans c (4,[] ) = [(5,[]),(6,[])] trans c (5,[] ) = [(5,[]),(6,[])] trans c (6,st ) = [(6,c:st), (7,st), (7,c:st)] trans c (7,s:st) = [(7,st) | s == c] trans c (7,[] ) = [] -- 早すぎ。入力終了でぴったりここに止まったものだけが成功。 transall = foldl (flip (concatMap.trans)) [(1,[])] corrects = filter ((7,[]) ==) . transall compute = length . corrects main = do l <- getLine print $ compute l