module Main where main :: IO () main = do i <- readLn s <- getContents mapM_ (putStrLn . isPossible) . take i . lines $ s -- | tests -- >>> isPossible "WWWWWWWWWGR" -- "possible" -- >>> isPossible "WWWWGWWWGRR" -- "possible" -- >>> isPossible "WWWWWWWWWWWWWWGRRG" -- "impossible" -- >>> isPossible "WGRWGR" -- "possible" -- >>> isPossible "WWWWWWWWWWWWWWWWWGGWGWGGWGWGGGWGG" -- "impossible" -- >>> isPossible "WGWR" -- "impossible" -- >>> isPossible "WGRW" -- "impossible" -- >>> isPossible "WWWGRGWR" -- "impossible" -- >>> isPossible "WWWGGWRR" -- "impossible" -- >>> isPossible "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWGWWWWGWWGWWWWWWWWWWWWWGWWWWWWWRWWWWWGGWWWWWWWWWWWWWWWWWGWWWWWWWWWWWWWWWWGGWWWGWGWRWWWWWWWWGWWRWWWWWWWWWWWGWWWWRWWWWWRWWWWWWWWWGWWGWWWWWGWWRWGWWWWWGWRWWWGWGWWWGWWGWWGWWWWWWWWWRWGRWGWWWRGGWRWRWGWRWWWRGGGWWWGGWWWWWWWWWWWWWWGWWWGGWGWWWWWWWWWWWWWGWRWGGGGWWRRWWWWWGWGWWWGGWWRWWWGWWWWGWGWGWGRGRRGWRGRGGGWGWGWGWWRRGWRWWWRGWGGWRWWWWWGRGWGWGGWWWGRRRRWWWRWWWRGWWRGGWGWWWWGRWWWWWGGRRWWGRGWGGRWRGWGGWWGWGWGWGWGRWRGWWWGWGWWRRWGWRWWWGWRWGWGWWWWGGRRRWRGRWGGGWRRGGGWWWRGRRWRWWGWWRWWWWWWRWGWRRGWGRRGRWWWGGWWRGRWWRGGRWWGGWWWRRGRRGGRWWGRWRGRWGGRWWGGWGGWGRRWRWWWGRWRGWRRWWGGRWWWRGRGWRGRWWWWWWRGRGWGWWRRRGRGRGGWGWGRGRGRGGWGWGWGWRGRWRGGGGGGRGRRRWWGRGRRGRGWWRRGWWGRRGGGWRRGWGRWRGRGRWRRWRGRWRRGRRWGRWGGGGRRGRRWRRGGGRWWRRRGGGRWWRGGRGGGWRWRRGRRRRGRWRWRRRGRRWGRGRGGRRRGGRWWGRGWWRGRGRGWRWRRRGGRGRGGRWWRRWGRWRRRRWRWRRRRRRWWRRGGRRRWRRRGWRWGWWRGGRRRWRWRRWGRWGWWWGGRWWRRGRWGWGWRGGRGWRRGRGRRWGRGGRWRWRGGGGRRRRGRGRRRRGWRGWGGWGRRWRGWRRRRGWRRWRRGRGGRRRGRRWWRRRWGGRR" -- "possible" isPossible :: String -> String isPossible s = if solve s then "possible" else "impossible" where solve xs = countWGR (0, 0, 0) xs && countRGW (0, 0, 0) (reverse xs) countWGR (w, g, r) "" = w >= 0 && g == 0 && r >= 1 countWGR (w, g, r) (x:xs) | w < 0 || g < 0 = False | otherwise = case x of 'W' -> countWGR (w+1, g, r) xs 'G' -> countWGR (w-1, g+1, r) xs 'R' -> countWGR (w, g-1, r+1) xs countRGW (r, g, w) "" = g >= 0 && r == 0 countRGW rgw@(r, g, w) (x:xs) | g < 0 || r < 0 = False | otherwise = case x of 'R' -> countRGW (r+1, g, w) xs 'G' -> countRGW (r-1, g+1, w) xs 'W' -> countRGW (r, g-1, w+1) xs' where xs' = let (gx, gy) = break (=='G') xs in filter (/='W') gx ++ gy