solve :: String -> Bool solve = sol 0 0 0 . reverse where sol :: Int -> Int -> Int -> String -> Bool sol _ g r [] = g == 0 && r == 0 sol w g r (c : cs) | c == 'R' = sol w g (r + 1) cs | c == 'G' && r == 0 = False | c == 'G' = sol w (g + 1) (r - 1) cs | c == 'W' && g > 0 = sol (w + 1) (g - 1) r cs | c == 'W' && w == 0 = False | c == 'W' = sol (w + 1) g r cs | otherwise = sol w g r cs main :: IO () main = getLine >> getContents >>= putStr . unlines . fmap (f . solve) . lines where f True = "possible" f _ = "impossible"