import Data.List main = do n <- readLn :: IO Int ws <- (map read . words) <$> getLine let e = (sum ws) `div` 2 let ws' = filter (<= e) ws putStrLn $ if (odd $ sum ws) || (sum ws' < e) then "impossible" else resolve e ws' resolve e ws = resolve' (getPairs e 0 (reverse $ sort ws)) where resolve' :: [(Int, [Int])] -> String resolve' [] = "impossible" resolve' pairs@((a,bs):ps) | a == e = "possible" | null bs = resolve' ps | otherwise = resolve' ((getPairs e a bs) ++ ps) getPairs :: Int -> Int -> [Int] -> [(Int,[Int])] getPairs e c (p:ps) | null ps = [(m, [])] | otherwise = (m, filter (<= (e - m)) ps):(getPairs e c (p:(tail ps))) where m = c + p