{-# LANGUAGE BangPatterns #-} import Control.Monad import Text.Printf main :: IO () main = do t <- readLn forM_ [(1::Int)..t] $ \x -> do n <- readLn tbl <- forM [(1::Int)..n] $ \i -> do [a,b] <- liftM (map read . words) getLine return (a,b) let ans = solve tbl printf "Case #%d: %s\n" x $ case ans of Nothing -> "Too Bad" Just y -> show y solve :: [(Int,Int)] -> Maybe Int solve tbl = if null xs then Nothing else Just (minimum xs) where xs = go 0 0 tbl [] go :: Int -> Int -> [(Int,Int)] -> [Int] -> [Int] go !n !star [] [] = return n go !n !star tbl1 tbl2 | not (null tbl1a) = go (n+1) (star+2) (tail tbl1a ++ tbl1b ++ tbl1c) tbl2 | not (null tbl2a) = go (n+1) (star+1) tbl1 (tail tbl2a ++ tbl2b) | otherwise = do ((a,b),tbl1b') <- pickup tbl1b go (n+1) (star+1) (tbl1a ++ tbl1b' ++ tbl1c) (b : tbl2) where tbl1a = [(a,b) | (a,b) <- tbl1, b <= star] tbl1b = [(a,b) | (a,b) <- tbl1, a <= star, star < b] tbl1c = [(a,b) | (a,b) <- tbl1, star < a] tbl2a = [b | b <- tbl2, b <= star] tbl2b = [b | b <- tbl2, star < b] pickup :: [a] -> [(a,[a])] pickup [] = [] pickup (x:xs) = (x,xs) : [(y,x:ys) | (y,ys) <- pickup xs]