import Control.Monad (replicateM) import Data.Fixed import Text.Printf data E40 = E40 instance HasResolution E40 where resolution _ = 10 ^ 40 type F40 = Fixed E40 (#*) :: (F40, Integer) -> (F40, Integer) -> (F40, Integer) (a, s) #* (b, t) = let c = a * b in if c < 10.0 then (c, s + t) else (c / 10.0, s + t + 1) expt :: (F40, Integer) -> Integer -> (F40, Integer) expt = expt' (1.0, 0) where expt' b a 0 = b expt' b a n | n `mod` 2 == 1 = expt' (b #* a) (a #* a) (n `div` 2) | otherwise = expt' b (a #* a) (n `div` 2) toPair :: F40 -> (F40, Integer) toPair x | x < 10.0 = (x, 0) | otherwise = let (y, s) = toPair (x / 10) in (y, s + 1) main = do n <- readLn replicateM n $ do [a, b] <- fmap words getLine let a' = toPair $ read a b' = read b (x, y) = expt a' b' x' = floor (x * 10) :: Integer printf "%d %d %d\n" (x' `div` 10) (x' `mod` 10) y