import Control.Monad import Data.List import Data.Tuple sndSort a b | snd a < snd b = LT | otherwise = GT oddLine :: (Ord a) => [a] -> [a] oddLine [] = [] oddLine (x:[]) = [x] oddLine (x:xs) = x : (oddLine $ tail xs) evenLine :: (Ord a) => [a] -> [a] evenLine [] = [] evenLine (_:[]) = [] evenLine (_:[x]) = [x] evenLine (_:x:xs) = x : (evenLine xs) searchKadomatsu _ [] = 0 searchKadomatsu _ (a:[]) = 0 searchKadomatsu _ (a:b:[]) = 0 searchKadomatsu n (a:b:c:l) | n < 3 = 0 -- そもそも竹が3本ない | otherwise = searchKadomatsu (n-3) l' + 1 where decrementSnd x = (fst x, snd x - 1) abc = [decrementSnd a,decrementSnd b,decrementSnd c] abc' = filter ((>0).snd) abc l' | length abc' == 0 = l | otherwise = abc' ++ l kadomatsu _ [] _ = [] kadomatsu _ _ [] = [] kadomatsu 0 _ _ = [] kadomatsu t (n:ns) (lt:lts) = searchKadomatsu n lt : kadomatsu (t-1) ns lts kadomatsuTuple [] = [] kadomatsuTuple (l:ls)= (l, c + 1) : kadomatsuTuple ls' where iter _ [] = 0 iter x (a:as) | x == a = iter x as + 1 | otherwise = 0 c = iter l ls ls' = drop c ls main = do t <- readLn str <- replicateM (t * 2) getLine let xs = map (map read . words) str :: [[Int]] n = [x !! 0 | x <- oddLine xs] l = [sort x | x <- evenLine xs] -- [[Int]] l' = [kadomatsuTuple x | x <- l] -- [[(Int,Int)]] l'' = [reverse $ sortBy sndSort x | x <- l'] mapM_ print $ kadomatsu t n l''