{-# LANGUAGE Safe #-} {-# LANGUAGE PatternGuards #-} import qualified Data.Text as T import qualified Data.Text.IO as TI import qualified Data.List as L import Data.Monoid import Data.Maybe import Control.Applicative import Data.Foldable instance Monoid a => Monoid (IO a) where mempty = return mempty mappend a b = mappend <$> a <*> b dropMay::Int->[a]->Maybe [a] dropMay 0 [] = Just [] dropMay _ [] = Nothing dropMay 0 list = Just list dropMay v (x:xs) = dropMay (v-1) xs (!-!)::[a]->Int->Maybe a [] !-! _ = Nothing (x:xs) !-! 0 = Just x (x:xs) !-! n = xs !-! (n-1) (<$~>)::Functor f => f a -> (a -> b) -> f b (<$~>)=flip (<$>) maybeRead s |[(x,"")]<-(reads s)=Just x |otherwise = Nothing maybeList::[Maybe Int]->Maybe [Int] maybeList [] = Just [] maybeList ((Just a):xs) = (a:) <$> (maybeList xs) maybeList (Nothing:xs) = Nothing getLines::Int->IO T.Text getLines 1 = TI.getLine getLines n = TI.getLine <> return (T.pack " ") <> (getLines$n-1) run main_f n= getLines n <$~> T.split (==' ') <$~> fmap T.unpack <$~> main_f <$~> fmap show <$~> fromMaybe "error" >>= putStrLn f l [] n sum | l < sum = n - 1 |otherwise = n f l (x:xs) n sum | l >= sum = f l xs (n+1) (sum+x) |otherwise = n - 1; main_ list = do let get n = maybeRead=<<(list !-! n)::Maybe Int l<-get 0 ws<-maybeList=<dropMay 2 list::Maybe [Int] return$f l (L.sort ws) 0 0 main = run main_ 3