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