main :: IO () main = interact $ solve . map read . words splitEvery4 :: [Int] -> [[Int]] splitEvery4 = takeWhile (not . null) . map (take 4) . iterate (drop 4) solve :: [Int] -> String solve (n:xs) = if all id [a, b, c] then "YES" else "NO" where xss = splitEvery4 xs a = check (2, 8) [] (5, 8) xss b = check (3, 9) [] (4, 8) xss c = check (7, 9) [] (6, 8) xss check :: (Int, Int) -> [(Int, Int)] -> (Int, Int) -> [[Int]] -> Bool check _ xs (a, b) [] = let (c, d) = head xs in a == c && b == d check (a, b) ys k (xs:xss) | head xs == a && (head . tail) xs == b = check (g zs) ((g zs) : ys) k xss | otherwise = check (a, b) ys k xss where g = (\[x, y] -> (x, y)) zs = drop 2 xs